From 8b3dac7ce69f801f05c03c0f2b02c4b5fbbe2f0e Mon Sep 17 00:00:00 2001 From: Mario Fetka Date: Sun, 10 Aug 2008 11:56:25 +0000 Subject: [PATCH] Import release 2.0alpha2 --- AUTHORS | 29 + CMakeLists.txt | 20 +- ChangeLog | 732 +++ Doxyfile | 62 +- FEATURES | 24 +- NEWS | 65 + README | 17 +- autopackage/default.apspec | 7 +- cmake/config-kmess.h.in | 8 +- cmake/get-svn-version.sh | 3 +- configure | 183 +- data/chatstyles/CMakeLists.txt | 1 + data/chatstyles/Fresh-dark/CMakeLists.txt | 8 + data/chatstyles/Fresh-dark/Fresh-dark.css | 283 ++ data/chatstyles/Fresh-dark/Fresh-dark.xsl | 234 + data/chatstyles/Fresh-dark/bg_gravatar.gif | Bin 0 -> 2241 bytes .../chatstyles/Fresh-dark/bg_gravatar_rtl.gif | Bin 0 -> 2205 bytes data/chatstyles/Fresh-dark/buddy_icon.png | Bin 0 -> 1266 bytes data/kmess.notifyrc | 40 +- data/pics/CMakeLists.txt | 5 +- data/pics/background.png | Bin 22898 -> 29038 bytes data/pics/contact_busy_overlay.png | Bin 0 -> 207 bytes ...d_overlay.png => contact_food_overlay.png} | Bin ..._overlay.png => contact_phone_overlay.png} | Bin doc/en/CMakeLists.txt | 2 +- doc/en/index.docbook | 14 +- kmess.lsm | 2 +- kmess.spec | 17 +- po/ar.po | 3864 +++++++++------ po/ca.po | 4116 +++++++++------- po/da.po | 4294 +++++++++------- po/de.po | 3974 +++++++++------ po/es.po | 3930 +++++++++------ po/et.po | 4113 +++++++++------- po/fi.po | 3993 +++++++++------ po/fr.po | 3958 +++++++++------ po/hu.po | 3903 +++++++++------ po/it.po | 4146 ++++++++++------ po/kmess.pot | 3519 ++++++++------ po/ko.po | 4100 +++++++++------- po/maketrans | 14 +- po/nb.po | 4115 +++++++++------- po/nl.po | 4040 +++++++++------ po/pt_BR.po | 4111 +++++++++------- po/sl.po | 3927 +++++++++------ po/sv.po | 3994 +++++++++------ po/th.po | 3871 +++++++++------ po/tr.po | 4239 +++++++++------- po/zh_CN.po | 4315 ++++++++++------- po/zh_TW.po | 4249 +++++++++------- src/CMakeLists.txt | 83 +- src/account.cpp | 631 ++- src/account.h | 149 +- src/accountaction.cpp | 6 +- src/accountaction.h | 13 +- src/accountsmanager.cpp | 494 ++ src/accountsmanager.h | 118 + src/autologinview.cpp | 77 - src/autologinview.ui | 171 - src/binreloc.c | 14 +- src/chat/chat.cpp | 1286 +++++ src/chat/chat.h | 177 + src/chat/chatmaster.cpp | 709 ++- src/chat/chatmaster.h | 52 +- src/chat/chatmessagestyle.cpp | 506 +- src/chat/chatmessagestyle.h | 11 +- src/chat/chatmessageview.cpp | 29 +- src/chat/chatmessageview.h | 3 + src/chat/chatview.cpp | 786 ++- src/chat/chatview.h | 69 +- src/chat/chatview.ui | 404 +- src/chat/chatwindow.cpp | 2411 ++++----- src/chat/chatwindow.h | 395 +- src/chat/chatwindow.ui | 137 + src/chat/chatwindowinterface.cpp | 532 -- src/chat/chatwindowinterface.h | 144 - src/chat/contactaction.cpp | 27 +- src/chat/contactaction.h | 14 +- src/chat/contactframe.cpp | 197 +- src/chat/contactframe.h | 17 +- src/chat/contactframe.ui | 55 +- src/chat/contactsidebar.cpp | 10 +- src/chat/contactsidebar.h | 5 +- src/chat/emoticonbutton.cpp | 101 - src/chat/emoticonbutton.h | 69 - src/chat/emoticonsidebar.cpp | 266 +- src/chat/emoticonsidebar.h | 67 +- src/chat/inkedit.cpp | 251 + src/chat/inkedit.h | 81 + src/chat/inkedit.ui | 124 + src/chat/websidebar.cpp | 130 - src/chat/websidebar.h | 65 - src/chat/xsltransformation.cpp | 2 - src/chat/xsltransformation.h | 1 + src/contact/contact.cpp | 109 +- src/contact/contact.h | 15 +- src/contact/contactbase.cpp | 21 +- src/contact/contactbase.h | 8 +- src/contact/contactextension.cpp | 239 +- src/contact/contactextension.h | 66 +- src/contact/contactlist.cpp | 532 +- src/contact/contactlist.h | 44 +- src/contact/contactlistmodelitem.cpp | 168 +- src/contact/contactlistmodelitem.h | 23 +- src/contact/group.cpp | 18 +- src/contact/group.h | 20 +- src/contact/invitedcontact.h | 1 + src/contact/msnobject.cpp | 1 - src/contact/msnobject.h | 2 +- src/contact/msnstatus.cpp | 4 +- src/contact/msnstatus.h | 15 +- src/contactlistmodelfilter.cpp | 289 ++ src/contactlistmodelfilter.h | 86 + src/contactlistviewdelegate.cpp | 213 +- src/contactlistviewdelegate.h | 22 +- src/currentaccount.cpp | 185 +- src/currentaccount.h | 38 +- src/dialogs/addcontactdialog.cpp | 14 +- src/dialogs/addcontactdialog.h | 5 +- src/dialogs/addemoticondialog.cpp | 161 +- src/dialogs/addemoticondialog.h | 12 +- src/dialogs/awaymessagedialog.cpp | 18 +- src/dialogs/awaymessagedialog.h | 4 +- src/dialogs/contactaddeduserdialog.cpp | 8 +- src/dialogs/contactaddeduserdialog.h | 5 +- src/dialogs/contactaddeduserdialog.ui | 7 +- src/dialogs/contactpropertiesdialog.cpp | 324 +- src/dialogs/contactpropertiesdialog.h | 51 +- src/dialogs/contactpropertiesdialog.ui | 645 +-- src/dialogs/networkwindow.cpp | 467 +- src/dialogs/networkwindow.h | 14 +- src/dialogs/networkwindow.ui | 198 + src/dialogs/transferentry.cpp | 104 +- src/dialogs/transferentry.h | 30 +- src/dialogs/transferentry.ui | 57 +- src/dialogs/transferwindow.cpp | 23 +- src/dialogs/transferwindow.h | 9 +- src/dialogs/userpicturesdialog.cpp | 141 + src/dialogs/userpicturesdialog.h | 58 + src/dialogs/userpicturesdialog.ui | 85 + src/emoticon.cpp | 48 +- src/emoticon.h | 1 - src/emoticonmanager.cpp | 13 - src/emoticonmanager.h | 1 - src/emoticontheme.cpp | 105 +- src/emoticontheme.h | 3 +- src/initialview.cpp | 297 +- src/initialview.h | 36 +- src/initialview.ui | 2135 +------- src/kmess.cpp | 707 ++- src/kmess.dox | 30 +- src/kmess.h | 51 +- src/kmessapplication.cpp | 25 +- src/kmessapplication.h | 1 - src/kmessdebug.cpp | 31 +- src/kmessdebug.h | 13 +- src/kmessinterface.cpp | 293 +- src/kmessinterface.h | 75 +- src/kmesstest.cpp | 134 +- src/kmesstest.h | 11 +- src/kmessview.cpp | 640 ++- src/kmessview.h | 31 +- src/kmessview.ui | 373 +- src/main.cpp | 150 +- src/network/applications/application.cpp | 129 +- src/network/applications/application.h | 31 +- src/network/applications/applicationlist.cpp | 133 +- src/network/applications/applicationlist.h | 11 +- src/network/applications/filetransfer.cpp | 15 +- src/network/applications/filetransfer.h | 2 +- src/network/applications/filetransferp2p.cpp | 220 +- src/network/applications/filetransferp2p.h | 10 +- src/network/applications/gnomemeeting.cpp | 3 + src/network/applications/inktransferp2p.cpp | 4 +- src/network/applications/inktransferp2p.h | 3 +- .../applications/msnobjecttransferp2p.cpp | 130 +- .../applications/msnobjecttransferp2p.h | 5 +- src/network/applications/msnremotedesktop.cpp | 3 + src/network/applications/p2papplication.cpp | 3038 +++--------- src/network/applications/p2papplication.h | 343 +- .../applications/p2papplicationbase.cpp | 2354 +++++++++ src/network/applications/p2papplicationbase.h | 432 ++ .../applications/voiceconversation.cpp | 2 + .../applications/webapplicationp2p.cpp | 2 + .../applications/webcamtransferp2p.cpp | 2 + src/network/chatinformation.cpp | 6 +- src/network/chatinformation.h | 8 +- src/network/chatmessage.cpp | 2 - src/network/chatmessage.h | 2 + src/network/extra/directconnectionbase.cpp | 60 +- src/network/extra/directconnectionbase.h | 27 +- src/network/extra/directconnectionpool.cpp | 7 +- src/network/extra/directconnectionpool.h | 2 +- src/network/extra/msndirectconnection.cpp | 10 +- src/network/extra/msndirectconnection.h | 6 +- src/network/extra/msnftpconnection.cpp | 24 +- src/network/extra/msnftpconnection.h | 4 +- src/network/extra/p2pfragmenttracker.cpp | 2 +- src/network/extra/p2pfragmenttracker.h | 5 +- src/network/mimemessage.cpp | 11 + src/network/mimemessage.h | 3 +- src/network/msnchallengehandler.h | 1 + src/network/msnconnection.cpp | 813 ++-- src/network/msnconnection.h | 153 +- src/network/msnnotificationconnection.cpp | 770 +-- src/network/msnnotificationconnection.h | 72 +- src/network/msnsocketbase.cpp | 110 + src/network/msnsocketbase.h | 120 + src/network/msnsockethttp.cpp | 857 ++++ src/network/msnsockethttp.h | 166 + src/network/msnsockettcp.cpp | 581 +++ src/network/msnsockettcp.h | 117 + src/network/msnswitchboardconnection.cpp | 313 +- src/network/msnswitchboardconnection.h | 70 +- src/network/multipacketmessage.cpp | 67 +- src/network/multipacketmessage.h | 15 +- src/network/p2pmessage.cpp | 2 +- src/network/soap/httpsoapconnection.cpp | 231 +- src/network/soap/httpsoapconnection.h | 24 +- src/network/soap/offlineimservice.cpp | 429 +- src/network/soap/offlineimservice.h | 57 +- src/network/soap/passportloginservice.cpp | 79 +- src/network/soap/passportloginservice.h | 5 +- src/network/specialgroups.h | 5 +- src/network/upnp/igdcontrolpoint.cpp | 2 +- src/network/upnp/igdcontrolpoint.h | 4 +- src/network/upnp/manager.cpp | 2 +- src/network/upnp/manager.h | 2 +- src/network/upnp/rootservice.cpp | 2 +- src/network/upnp/rootservice.h | 4 +- src/network/upnp/service.cpp | 2 +- src/network/upnp/service.h | 4 +- src/network/upnp/ssdpconnection.cpp | 12 +- src/network/upnp/ssdpconnection.h | 2 +- src/notification/chatnotification.cpp | 12 +- src/notification/chatnotification.h | 19 +- .../contactstatusnotification.cpp | 28 +- src/notification/contactstatusnotification.h | 13 +- src/notification/newemailnotification.cpp | 31 +- src/notification/newemailnotification.h | 21 +- src/notification/notificationmanager.cpp | 46 +- src/notification/notificationmanager.h | 1 + src/notification/passivepopup.cpp | 2 + src/notification/passivepopup.h | 15 +- src/notification/passivepopupview.cpp | 5 +- src/notification/passivepopupview.h | 24 +- src/notification/passivepopupview.ui | 42 +- src/notification/passivepopupwidget.h | 15 +- src/settings/accountpage.cpp | 319 +- src/settings/accountpage.h | 42 +- src/settings/accountpage.ui | 472 +- ...gsdialog.cpp => accountsettingsdialog.cpp} | 165 +- ...ttingsdialog.h => accountsettingsdialog.h} | 74 +- src/settings/accountsmanagerpage.cpp | 176 + src/settings/accountsmanagerpage.h | 78 + src/settings/accountsmanagerpage.ui | 135 + src/settings/alertspage.cpp | 56 +- src/settings/alertspage.h | 6 +- src/settings/alertspage.ui | 807 +-- src/settings/chatloggingpage.cpp | 2 + src/settings/chatloggingpage.h | 4 +- src/settings/chatloggingpage.ui | 299 +- src/settings/chatstylepage.cpp | 38 +- src/settings/chatstylepage.h | 6 +- src/settings/chatstylepage.ui | 609 ++- src/settings/emailpage.cpp | 83 - src/settings/emailpage.h | 51 - src/settings/emailpage.ui | 136 - src/settings/emoticonspage.cpp | 17 +- src/settings/emoticonspage.h | 5 +- src/settings/emoticonspage.ui | 10 +- src/settings/globalsettingsdialog.cpp | 179 + src/settings/globalsettingsdialog.h | 77 + src/settings/miscellaneouspage.cpp | 414 ++ src/settings/miscellaneouspage.h | 63 + src/settings/miscellaneouspage.ui | 502 ++ src/systemtraywidget.cpp | 106 +- src/utils/crashhandler.cpp | 46 +- src/utils/crashhandler.h | 9 +- src/utils/idletimer.h | 2 +- src/utils/kmessconfig.cpp | 334 ++ src/utils/kmessconfig.h | 72 + src/utils/kmessdbus.cpp | 112 + src/{autologinview.h => utils/kmessdbus.h} | 45 +- src/utils/kmessdbus.xml | 18 + src/utils/kmessshared.cpp | 414 ++ src/utils/kmessshared.h | 64 + src/utils/nowlisteningclient.cpp | 142 +- src/utils/nowlisteningclient.h | 10 +- src/utils/richtextparser.cpp | 883 ++++ src/utils/richtextparser.h | 161 + src/utils/thumbnailprovider.cpp | 2 - src/utils/thumbnailprovider.h | 7 +- src/utils/xautolock.cpp | 23 +- src/utils/xautolock.h | 4 +- src/utils/xmlfunctions.cpp | 8 +- src/utils/xmlfunctions.h | 4 +- tests/CMakeLists.txt | 2 + tests/modeltest/LICENSE.GPL | 342 ++ tests/modeltest/README | 30 + tests/modeltest/README.kmess | 5 + tests/modeltest/modeltest.cpp | 524 ++ tests/modeltest/modeltest.h | 76 + 303 files changed, 78286 insertions(+), 49595 deletions(-) create mode 100644 data/chatstyles/Fresh-dark/CMakeLists.txt create mode 100644 data/chatstyles/Fresh-dark/Fresh-dark.css create mode 100644 data/chatstyles/Fresh-dark/Fresh-dark.xsl create mode 100644 data/chatstyles/Fresh-dark/bg_gravatar.gif create mode 100644 data/chatstyles/Fresh-dark/bg_gravatar_rtl.gif create mode 100644 data/chatstyles/Fresh-dark/buddy_icon.png create mode 100644 data/pics/contact_busy_overlay.png rename data/pics/{ox16-action-contact_food_overlay.png => contact_food_overlay.png} (100%) rename data/pics/{ox16-action-contact_phone_overlay.png => contact_phone_overlay.png} (100%) create mode 100644 src/accountsmanager.cpp create mode 100644 src/accountsmanager.h delete mode 100644 src/autologinview.cpp delete mode 100644 src/autologinview.ui create mode 100644 src/chat/chat.cpp create mode 100644 src/chat/chat.h create mode 100644 src/chat/chatwindow.ui delete mode 100644 src/chat/chatwindowinterface.cpp delete mode 100644 src/chat/chatwindowinterface.h delete mode 100644 src/chat/emoticonbutton.cpp delete mode 100644 src/chat/emoticonbutton.h create mode 100644 src/chat/inkedit.cpp create mode 100644 src/chat/inkedit.h create mode 100644 src/chat/inkedit.ui delete mode 100644 src/chat/websidebar.cpp delete mode 100644 src/chat/websidebar.h create mode 100644 src/contactlistmodelfilter.cpp create mode 100644 src/contactlistmodelfilter.h create mode 100644 src/dialogs/networkwindow.ui create mode 100644 src/dialogs/userpicturesdialog.cpp create mode 100644 src/dialogs/userpicturesdialog.h create mode 100644 src/dialogs/userpicturesdialog.ui create mode 100644 src/network/applications/p2papplicationbase.cpp create mode 100644 src/network/applications/p2papplicationbase.h create mode 100644 src/network/msnsocketbase.cpp create mode 100644 src/network/msnsocketbase.h create mode 100644 src/network/msnsockethttp.cpp create mode 100644 src/network/msnsockethttp.h create mode 100644 src/network/msnsockettcp.cpp create mode 100644 src/network/msnsockettcp.h rename src/settings/{settingsdialog.cpp => accountsettingsdialog.cpp} (55%) rename src/settings/{settingsdialog.h => accountsettingsdialog.h} (53%) create mode 100644 src/settings/accountsmanagerpage.cpp create mode 100644 src/settings/accountsmanagerpage.h create mode 100644 src/settings/accountsmanagerpage.ui delete mode 100644 src/settings/emailpage.cpp delete mode 100644 src/settings/emailpage.h delete mode 100644 src/settings/emailpage.ui create mode 100644 src/settings/globalsettingsdialog.cpp create mode 100644 src/settings/globalsettingsdialog.h create mode 100644 src/settings/miscellaneouspage.cpp create mode 100644 src/settings/miscellaneouspage.h create mode 100644 src/settings/miscellaneouspage.ui create mode 100644 src/utils/kmessconfig.cpp create mode 100644 src/utils/kmessconfig.h create mode 100644 src/utils/kmessdbus.cpp rename src/{autologinview.h => utils/kmessdbus.h} (55%) create mode 100644 src/utils/kmessdbus.xml create mode 100644 src/utils/kmessshared.cpp create mode 100644 src/utils/kmessshared.h create mode 100644 src/utils/richtextparser.cpp create mode 100644 src/utils/richtextparser.h create mode 100644 tests/CMakeLists.txt create mode 100644 tests/modeltest/LICENSE.GPL create mode 100644 tests/modeltest/README create mode 100644 tests/modeltest/README.kmess create mode 100644 tests/modeltest/modeltest.cpp create mode 100644 tests/modeltest/modeltest.h diff --git a/AUTHORS b/AUTHORS index 3c8aaa5..28fb676 100644 --- a/AUTHORS +++ b/AUTHORS @@ -5,6 +5,7 @@ Developers: Diederik van der Boor Richard Conway Valerio Pilo + Antonio Nastasi Translations: Arabic - Mohamed Aser @@ -94,5 +95,33 @@ Also tranks to: KScreensaver - Idle timer code + BasKet + - Close-to-tray icon screenshot code + + Amarok + - Custom crash handler implementation + Liu Sizhuang - P4-Context field support + + Guido Solinas + - Pictures in contact list code + - Contact client info + - Chat font zoom + + Pedro Ferreira + - File transfer thumbnails + + Ruben Vandamme + - Basic DBus support + - Tab closing message + - Menu hiding shortcut + - Toolbars lock + + Matteo Nardi <91.matteo@gmail.com> + - KWallet support + + Adam Goossens + - Notifications blocking option + - Winks disabling option + - Last message date feature diff --git a/CMakeLists.txt b/CMakeLists.txt index c1e4205..f5499e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,7 +42,7 @@ INCLUDE_DIRECTORIES( ${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ${LIBXM # Switch between the following two commands to force using a predefined version number # EXECUTE_PROCESS( COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/cmake/get-svn-version.sh OUTPUT_VARIABLE KMESS_VERSION ) -SET( KMESS_VERSION "2.0alpha" ) +SET( KMESS_VERSION "2.0alpha2" ) #### Define compiler flags #### @@ -68,11 +68,19 @@ ENDIF( CMAKE_COMPILER_IS_GNUCXX ) SET( CMAKE_BUILD_TYPE debugfull ) # Enable the KMess debug output when compiling a debug build -IF( CMAKE_BUILD_TYPE STREQUAL debugfull OR DEFINED KMESS_DEBUG_OUTPUT ) +IF( CMAKE_BUILD_TYPE STREQUAL debugfull OR KMESS_DEBUG_OUTPUT EQUAL 1 ) SET( KMESS_ENABLE_DEBUG_OUTPUT "1" ) -ELSE( CMAKE_BUILD_TYPE STREQUAL debugfull OR DEFINED KMESS_DEBUG_OUTPUT ) +ELSE( CMAKE_BUILD_TYPE STREQUAL debugfull OR KMESS_DEBUG_OUTPUT EQUAL 1 ) SET( KMESS_ENABLE_DEBUG_OUTPUT "0" ) -ENDIF( CMAKE_BUILD_TYPE STREQUAL debugfull OR DEFINED KMESS_DEBUG_OUTPUT ) +ENDIF( CMAKE_BUILD_TYPE STREQUAL debugfull OR KMESS_DEBUG_OUTPUT EQUAL 1 ) + + +# Set a default value for relocatable binary support +IF( KMESS_ENABLE_BINRELOC EQUAL 1 ) + SET( KMESS_ENABLE_BINRELOC "1" ) +ELSE( KMESS_ENABLE_BINRELOC EQUAL 1 ) + SET( KMESS_ENABLE_BINRELOC "0" ) +ENDIF( KMESS_ENABLE_BINRELOC EQUAL 1 ) # Set a default installation path @@ -93,3 +101,7 @@ ADD_SUBDIRECTORY( po ) ADD_SUBDIRECTORY( data ) ADD_SUBDIRECTORY( doc ) +# Also add the tests if compiling in development mode +IF( CMAKE_BUILD_TYPE STREQUAL debugfull AND KMESS_DEBUG_OUTPUT EQUAL 1 ) + ADD_SUBDIRECTORY( tests ) +ENDIF( CMAKE_BUILD_TYPE STREQUAL debugfull AND KMESS_DEBUG_OUTPUT EQUAL 1 ) diff --git a/ChangeLog b/ChangeLog index 87f5c35..d3926b9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,698 @@ +--- 2.0alpha2 released --- + +2008-08-09 (Valerio) + * Changed group name for special groups: only display the total number of contacts they contain. + * Fixed removing the last custom emoticon left a ghost emoticon until restart. + * Fixed the chat window display and positioning issues. + * Added an error dialog when trying to autoconnect to an account which doesn't have a saved password. + * Improved chat window raising. + * Fixed options box not being grayed out while connecting. + * Removed two options from the selectable contact list picture size menu. Also improved the pertinent methods names. + * Improved the groups tooltip on the contact list. + * Merged patch from Fontknocker: + - Added an option to block notifications when the status is set to Busy. + - Added an option to disable displaying of received winks. + - Added the date of the last received message from a contact. + +2008-08-08 (Valerio) + * Improved groups sorting, the order of special groups is now forced. + * Improved search, it now behaves in a sane way: + - Groups containing no results are hidden + - Groups containing results are always visible expanded + - Search is only performed within the currently visible items in the list + - The search bar is colored when using regular expressions (type regexp: first) + +2008-08-06 (Diederik) + * Changed the info message that you haven't added any custom emoticons. + * Make the order of menu items between the contact sidebar and contact list consistent. + * Made the contact properties dialog more compact (TODO item width of groups). + +2008-08-06 (Valerio) + * Added Solid support to detect whether a network becomes available and disconnects. + +2008-08-05 (Valerio) + * Added a third mode to display contact list items: Mixed. It sorts contacts by their group like the usual 'By Group' + setting, but this mode also groups together all Offline contacts. + +2008-08-02 (Valerio) + * Fixed bug causing contact list display issues when grouping contacts by online status. + * Fixed searching the contact list: it didn't show all groups, and the search was case sensitive. + +2008-08-01 (Valerio) + * Improved the contact list sorting method; the new way is the "right" one, and it's faster, also. + * Fixed possible model/view issues when disconnecting. + * Made KMess to remember the value of the 'Show Empty Groups' setting. + * Fixed groups being all hidden when the 'Show Empty Groups' setting was disabled. + +2008-07-31 (Valerio) + * Fixed initial status of the Connect button in the Initial View (it had no icon). + * Added to geek links the ability to parse the path on the server and simple query strings. + * Fixed displaying nicknames which contain HTML entities in the chat window. + +2008-07-30 (Valerio) + * Improved the contact list model, it's now a whole lot more compliant to the ModelTest class requirements. + * Fixed the group expansion in the contact list. + +2008-07-29 (Valerio) + * Improved contact list filtering code, fixed a possible issue with empty groups. + * Fixed a model issue when deleting a group. + +2008-07-28 (Valerio) + * Fixed adding groups with special characters. + +2008-07-27 (Diederik) + * Fix possible crashes with P2P support, happening when WLM is running for a long time: + - make sure temporary error handling applications are also deleted properly. + - enforced a more strict policy when to allow direct connections from contacts. + * Added SessionID to waiting state change debug output. + * Fixed case sensitive sorting of the contact list. + +2008-07-24 (Valerio) + * Fixed very long DNS lookups causing a wrong connection attempt after canceling the connection. + * Improved initial view. Changes: + - It will not be deleted everytime you connect/disconnect, but only when disconnecting after a successful login. + - It is now updated when you login via the menu/trayicon. + - It will not continue connecting silently anymore when you try to disconnect, or misbehave similarly. + * Added graying out the auto-away feature options when XScreenSaver support is not active. + * Fixed changing a group's name did not update the contact actions in the contactlist. + * Added option to hide empty groups in the contact list. + * Added error message for an undocumented server error (received when setting an already existing name to a group). + * Improved the server error message detection code, and added dialog boxes for non-fatal errors. + * Fixed moving contacts through groups did not update the group names and their visibility on the list. + +2008-07-19 (Valerio) + * Fixed failing assertion in the model. Thanks a lot to Montserrat for the report, patience and patch testing! + +2008-07-18 (Valerio) + * Don't disconnect when the contact list isn't modifiable. + * Fixed a possible crash while retrieving model data from the contact list view. Thanks jonas.thorell for the report! + * Fixed a possible crash while opening a chat with the "group chats by contact group" option active. Thanks admiral0 for the report! + +2008-07-15 (Valerio) + * Fixed the annoying contact status popups appearing right when logging in; they are now disabled for the first three + seconds. + * Fixed group sorting in the contact list. + * Fixed removal of non-empty groups causing a disconnection. + +2008-07-14 (Valerio) + * Heavily improved the contact list model. + Incidentally, improved contact list search: if you prepend "regexp:" to the search,you're now allowed to search by regular + expression :) + As of now, sorting when two contacts have the same status is a bit dumber, but not too resource-intensive. + - Notes: It now makes use of a filter/sort proxy model for all of our needs, which allows us to make its behavior + customizable in the future, if needed; a lot of mechanisms have been removed so the code should be faster other than + leaner; don't access model internal pointers if your index comes from the proxy. + * Improved a bit the Network Window: + - Added a warning to the Network Window if the user doesn't add a newline to the payload, and offer to add it automatically; + - Replace unix-like newlines with MSN Server (Windows) newlines in payloads. + * Fixed removal of contacts; the contact's item is now properly moved to one of allowed/removed special groups. + * Fixed right-click context menu actions in the contact list. + +2008-07-13 (sifcenter) + * Fixed the new line button signal on chat window. + * Cleaned the header include files on the classes in + - Dialog folder + - Utils folder + - Notification folder + - Contact folder + - Settings folder + - Chat folder + - Network folder + - Main folder + +2008-07-12 (sifcenter) + * Improved the now listening class. Resolved the issue with defunct forks. + * Improved the margin for kmess view layout in CL. Moved the status icon to bottom edge. Thanks to Alek for suggestions. + * Improved scrolling for CL. + * Fixed crash when click on "Edit Note" on one contact not in our CL. + +2008-07-12 (Valerio) + * Merged an improved version of the patch by Matteo Nardi: Implemented KWallet support. + * Fixed crash when opening a chat with a contact present in zero groups, when the "group tabs by contact in the same + group" option is selected. + * Improved the messages for file transfers displayed on the chat window. + * Improved file transfers, do not overwrite existing files when receiving files to a default directory. + * Removed from the Contact Frame the display pic for invited contacts, which have none. Also reformatted a bit of code there. + * Fixed regression, crash when some contacts join a group chat. + * Fixed the chat tabs' widget sizes when changing tabs, they are now uniform between tabs of the same + chat window; plus, the sidebar and message editor stay the size you tell them to be when resizing the chat window. + +2008-07-11 (sifcenter) + * Added ability to choose size of picture showed in contact list. Thanks to Matteo Nardi for suggestion. + * Renamed the string for "new email" over the CL. Thanks to Matteo Nardi for suggestion. + * Removed margin from kmess view layout and added a space between email icon and email string. + +2008-07-10 (Valerio) + * Fixed inability to reconnect after being disconnected. + * Fixed UTF-8 encoding issue when reading Amarok 1.4 songs. Thanks to Mikko and Jaska for the detailed report! + * Fixed keep-alive messages when the number of participants changes. + * Added defines to fine-tune the initial connection timers for the TCP socket, and increased the DNS resolve timeout + to 10 seconds, to bear with slow DNS queries taking over 5 seconds. + +2008-07-09 (Valerio) + * Hid file transfer accepting/rejecting/canceling links after clicking them. + * Added methods to open an Account Settings dialog at a specified tab. + * Added a notice label to the Custom Emoticon settings when none have been added yet. + * Improved the default behavior of the Close All Tabs warning, made the close all tabs action + the default. + * Fixed a wrong signal/slot connection. + * Fixed some warning messages in Account and improved recovery when the display pic is missing. + * Heavily improved email client options in the Global Settings: + - The KDE default mail client is selectable; + - The code to select the mail client at runtime is a lot better and shouldn't fail (the browser setting is improved as well); + - Using the Live Mail webmail on supported accounts can be disabled in favor of the specified mail client. + +2008-07-08 (Valerio) + * Fixed (possibly) a crash when restoring disabled chat windows on reconnection. + * Improved auto-message feature: a new automessage is sent every 30 sec if the contact keeps writing. + * Fixed crash due to circular calling when closing all tabs with Shift+Esc. + * Disabled unsupported UI items when doing offline chat sessions. + * Moved the warning which appeared when closing one tab to the close all tabs event. + * Added a confirmation message when an incoming file transfer is accepted. + +2008-07-08 (sifcenter) + * Added "Edit Notes" action to popup menu into contact frame. Ticket #270. + * Fixed the format of contact's name on invite menu. + * Little improvements in CL. Adjust the space between elements and set bold to groups text. + * Updated dbus interface for Amarok 2. Thanks to Mikko for the informations. + * Hided actions ( in contact frame menu ) to gain some space. + +2008-07-07 (Valerio) + * Added Now Playing support for Amarok 1.x, using the system's DCOP client. + * Made the notification popups to obey the text formatting option for the contact list. + * Moved some FormattedString methods out of inline, for better readability. + * Added two FormattedString enum values to obtain a string with regard to the chat or list text formatting option. + * Made KMess completely compatible with dark KDE color schemes. + * Added a Fresh-dark theme suitable for use with dark KDE color schemes. + +2008-07-06 (sifcenter) + * Fixed the kmess crash when the user close one chat on balloon notification on receive message, and after he try to click + on balloon. Thanks to Ruben for report. + +2008-07-05 (sifcenter) + * Hided actions ( contact menu on CL ) are disabled to gain some space. + * Improved the user pictures dialog. + +2008-07-04 (sifcenter) + * Added the dialog to choose previous avatar.Ticket #132. + * Merged patch by Ruben to improve the message on tabs closing. + +2008-07-04 (Valerio) + * Improved display picture selection. + - Accounts' DPs are now identified by hash instead of an arbitrary number, to avoid duplicates; + - Changed wording in the AccountPage and Account classes to be more consistent; + - Added a KMessShared method to obtain a file's hash, which could be more useful in the future. + * Improved initial view: when an account's settings are changed, update the view to reflect the + changes. + * Changed the main window caption to display "KMess - accountname" instead of "accountname - KMess". + This was necessary because chat windows could be confused with the main window when more than one + instance was running. + +2008-07-03 (sifcenter) + * Fixed the issue with personal avatar. The bug was been introduced when I fixed the problem with + unsupported file image downloaded by msnobject. + +2008-07-03 (Valerio) + * Improved tabbed chat shortcuts and behavior; + - Improved shortcuts system by using Qt native methods; + - Added shortcuts Ctrl+Tab and Ctrl+Shift+Tab to move through tabs, as in Firefox; + - Added shortcuts Alt+Right/Shift+Backspace and Alt+Right/Shift+Backspace to move through tabs; + - Added more and better warning dialogs when closing a tab and all tabs. + +2008-07-02 (Diederik) + * Implemented support for reverse direct connection invitations with picture transfers. + * Fixed warning message for bad direct connection preamble. + * Fixed allowing data fragments when the data preparation packet was rejected. + * Fixed choosing the proper server port for file/picture transfers. + * Fixed sending a decline message again when the user presses the cancel link twice. + * Fixed displaying a null character in the network window. + +2008-07-02 (sifcenter) + * Improved contact frame: added handle to popup menu and now the menu is showed also when + context menu is required on label of pm/friendlyname. Ticket #276. + * Fixed the receiving of avatars. The problem was if a jfif image was saved in png file + the QImageReader returns no supported format. + +2008-07-01 (sifcenter) + * Fixed the cleaned strings showed in rich text label: now the strings are escaped. + +2008-07-01 (valerio) + * Fixed a bug which prevented custom emoticon themes with non-PNG images from loading. + +2008-06-30 (valerio) + * Heavily improved the way MSN Plus! formatting is integrated in KMess. + * Fixed some more overseen issues with MSN Plus formatting. + * Fixed the way widgets are laid out on top of the Contact List. + * Made KMess to also save the contact list settings when saving an account's settings, for additional safety. + * Fixed loading the expanded status of the contact list groups, which often didn't work. + * Fixed opening local files from the Chat Window. + +2008-06-30 (sifcenter) + * Fixed the color for initialStatusLabel_ and removed the link and options box + when the user click on "connect" button. + * Removed useless loginView class and use only InitialView. Added also disconnect + button. Ticket #272. + * Continued work on MSN Plus integration: + - Removed rich text from friendlyname in "typing user" information. + - Removed rich text from contact's tooltip in the CL. + - Added rich text to popups. + - Added rich text to personal friendly name over the CL. + +2008-06-29 (valerio) + * Improved the Contact List model a bit. + * Fixed almost all compiler warnings. + +2008-06-29 (sifcenter) + * Merged patch by Ruben to add dbus interface to kmess. + * Fixed the possible invalid pixmaps loaded in contact properties dialog picture list. + * Fixed the sorting for groups. Maybe the user must be remove the group entries or entire + file: .kde4/share/apps/kmess/contact@email.com/contactlist . Ticket #262. + * Fixed the saving for formatting msn+ choice. + * Adjusted the layout of transfer entry. Ticket #269. + +2008-06-28 (sifcenter) + * Added Group switcher to contact properties dialog. Closed ticket #38. + * Continued work on MSN Plus integration: + - Removed rich text from friendlyname and pm in contact properties dialog. + +2008-06-27 (valerio) + * Continued work on MSN Plus integration: + - Fixed emoticon sizes in chat. + - Fixed the greediness of the tag parser. + - Removed the rich text from the contact list caption. + +2008-06-27 (sifcenter) + * Continued work on MSN Plus integration: + - Removed rich text from caption of tab and chat window. + - Removed rich text from contact frame and history combobox. + +2008-06-26 (valerio) + * Continued work on MSN Plus integration: + - Improved the Rich Text Parser engine with the original version of ChatMessageStyle's parseMsnPlus method, + which has been moved to the RTP itself as a static method; + - Started integrating rich text parsing in the chat and contact list; + - Added two options in the Account Settings to enable or disable formatting. + +2008-06-25 (sifcenter) + * Switched the glow effect into account display picture ( over CL ) from MouseButtonPressed + to Mouse Enter to give feedback of "clickable item" to user. + * Reorganized the contact properties dialog and removed the line edit for alternative picture. + * Removed contact label from contact frame in chat. We already have send and copy email buttons. + * Fixed the alternative contact's picture. When Msn Object was received from server the contact picture path was + overwritten by it ( also if we had set the alternative picture ). + * Fixed the change of message in KMessInterface: if the message isn't changed don't re-set the QLabel. + * Merged patch by Ruben to fix find user shortcut when the menu is hidden. + +2008-06-24 (sifcenter) + * Merged the patch by Ruben to hide/show the menu bars by pressing CTRL+M. + +2008-06-22 (Valerio) + * Made the errors at Miscellaneous Global Settings more user-friendly, by offering an automatic fix. + * Fixed the contact frame having empty music/message widgets when chatting with contacts not in list. + +2008-06-22 (sifcenter) + * Added the ability to write notes for a contact. Ticket #200. + * Added one patch for new status changer to keep the compatibility with qt 4.3. Thanks to Ruben for report. + * Reorganized the layout for initialView e loginView classes: added also the account picture. + * Fixed the flooding of server when the player play a song or is stopped. Thanks to Mikko for report. + * Fixed the position for picture smaller then 96x96 in the contact properties dialog and + switched the KSqueezedTextLabel to QLabel to avoid problem with richtext and resizing. + * Adjusted the layout of contact properties ( Information tab ) and added the ability to hide personal message + label if there isn't anyone. + +2008-06-21 (sifcenter) + * Added the ability to send ink with only drawed area. + +2008-06-20 (sifcenter) + * Reorganized the layout for main window. I have left commented the code for toolbar. Thanks to Tyler for the idea. + +2008-06-20 (Valerio) + * Made the errors at Miscellaneous Global Settings more user-friendly, by offering an automatic fix. + +2008-06-18 (sifcenter) + * Added the ability to store the contact last personal message. + * Fixed warning at InkEdit class. + +2008-06-17 (Valerio) + * Added an option to select a default directory where to put received files. + * Added an option to choose the interval of ports used for Peer to Peer (direct) file transfers. + * Fixed the Ink Message Editor active being left active in chats when disconnecting from MSN (you could still 'send' + messages). + +2008-06-17 (sifcenter) + * Added the ability to send ink via mimemessage ( p2p ink sending is based on + proprietary ink format ). + * Added the ability to choose size of pen for ink. + * Added the ability to switch automatically from ink editor when the user press a key. + * Fixed another little issue with emoticon add dialog. + * Fixed the receiving of inks by switchboard in multi chat. + +2008-06-16 (sifcenter) + * Added the ability to switch the tabs with scroll wheel mouse. Ticket #243. + * Added the ability to view profiles with login into passport services. + * Added the ability to request the passport service with the language setted in account. + * Added the find action to context menu in chat view. + * Fixed a little issue with emoticon add dialog. + * Fixed the command menu "Show my profile". + * Fixed typo. Thanks to Ruben for report. + * Fixed the failed assert at chatwindow: the setWindowTitle was called before adding the first tab. + Moved one method from public to public slot type to avoid issue of one connection. + * Fixed the closing of one background switchboard when a chat window is opened. Ticket #174. + +2008-06-16 (Valerio) + * Fixed the account registration and activation links, they were being shown inappropriately. + * Changed the global email settings behavior. Now Liveā„¢ accounts will only access it via the site, + as there's no way to access it via 3rd party clients. Made the email settings page on par with the + browser settings. Also removed some unused parameters from the mail opening call in CurrentAccount. + * Removed the names of translators from the kmess translations file. + +2008-06-15 (Diederik) + * Fixed some window titles in the UI files, which ended up in the translations. + * Moved MsnObjectTransferP2P::getPictureFileName() -> KMessConfig::getMsnObjectFileName(). + * Removed unused includes for account.h, and fixed all fallout. + * Synced credits between main.cpp and the handbook. + * Renamed pictureReceived() signal to msnObjectReceived(). + * Avoid HTML code of the network window appearing in translations. + * Fixed network window tab titles, display the connection title again. + * Fixed inconsistent margins for setting dialog panes. All set to 0 like the KDE notification pane is. + Makes it look much better with different window styles too (like Windows XP). + * Move protected currentAccount_ field to the NS and SB classes. Makes the API less obscure too. + * Fixed ingroup tags of APIDOX headers + * Made all UI inheritances private. + * Fixed a crash in the contact sidebar when an "InvitedContact" left the chat. + +2008-06-15 (sifcenter) + * Switched the image showed into add emoticon dialog from static to movie. + Fixed also one bug when we edit one picture and then we try to add one. + * Fixed the method to authenticate in hotmail service. Now we use the new post method with sha1. + * Fixed the oim class when there are twnChallenge and lockKey in response. Updated also the product key/id. + * Fixed the issue with multichat: now the contact frame is removed and the tab caption is updated. + * Reimplemented the method to open directly the inbox and compose mail. + +2008-06-14 (sifcenter) + * Added a "thumbnail" type for winks. + * Added a close button to popups. + * Fixed the bug with opening of the email client on no hotmail/live accounts. + Maybe on the no live accounts the command URL is empty so the url is empty too. + Thanks to swiftscyth for report. + +2008-06-13 (Valerio) + * Fixed the very annoying bug which prevented emoticon and file transfers and which + closed the chat's connection repeatedly. + * Added a Close All Tabs menu action to the Chat Window, and keyboard shortcuts to: + close a tab (esc), close the whole window (shift+esc), and navigate between tabs + (alt+left/right). + +2008-06-13 (sifcenter) + * Added two algorithm: HMACSha1 and DeriveKey. They are used in MSNP15 SSO and + for access to hotmail ( I have committed they to try these with hotmail ). + * Fixed the focus for new chat opened by remote client. + * Fixed the saving of email/browser settings. Moved some code for open emails from + current account to kmessshared class. + +2008-06-12 (sifcenter) + * Added a right click menu to custom emoticons in sidebar. + * Added the class for parsing the msn plus string. Only for testing for the moment. + * Fixed the position of away auto-reply buttons. + +2008-06-12 (Valerio) + * Fixed giving focus to the wanted tab when opening a new chat. + * Fixed some ChatWindow's caption inconsistencies. + * Improved behavior of ChatWindow when exiting (do not disable then close the tabs). + +2008-06-11 (Diederik) + * Change order of pages in the global settings dialog. + Notifications seam more important to me then misc settings. + * Fix running 'maketrans', paths still referred to old source folders. + +2008-06-10 (valerio) + * Added an account settings option to control how tabbed chats will behave. + * Limited the maximum size of the tabs and improved their usability and appearance. + +2008-06-10 (Diederik) + * Fixed useles tabs appearing in the network window, KMESS_NET_CLOSE() calls is made in the MsnConnection now. + +2008-06-09 (valerio) + * Improved the encapsulation of typing contacts messages, moved all the algorithm in Chat, ChatWindow now + only displays what's told by the Chats. + * Also improved the Test Window behavior, it's working as a 'real' chat now. + * Added an highlighted color to tabs where contacts are typing. + * Cleaned up some more ChatMaster's code. The chat mixing bug should be gone. + * Tried another solution to avoid having an empty chatwindow without any tab in it. + +2008-06-08 (valerio) + * Merged the calls to retrieve a chat based on its participants into one. + * Enabled back the brightening of contact frames when they type. + +2008-06-07 (sifcenter) + * Added closing of tab on mouse middle button clicked. + * Added an alert icon on tab when receiving a message from contact. + * Rewrited some parts of contact list view delegate: fixed the repaint "infinite loop". + * Added the icons to tabs on network window: if there isn't one the close button is not showed. + * Removed the zoom in/out, font color/style buttons from toolbar. They are unless in 99% of the time :P. + +2008-06-07 (Diederik) + * Fixed a crash with tabbed chats, when receiving a custom emoticon in a new tab. + * Added version information to crash reports of KMess, KDE and Qt. + * Fix inconsistent naming of contactChangedMsnObject() vs contactChangeStatus(). + +2008-06-06 (sifcenter) + * Remove the tabBar when there is only one chat. + * Fixed the issue when close the first tab while there are some chats opened. + +2008-06-04 (Diederik) + * Fixed the double frame and typo in the contact properties dialog. + * Fixed a crash in debug builds for unknown contacts. + * Fixed displaying old contact names after login (name was not updated in the ILN command). + * Fixed a crash when a switchboard is being replaced, offlineImService was not initialized. + * Splitted the P2P base class, to make the code easier to understand and maintain. + +2008-06-04 (Valerio) + * Finished the work on tabbed chats. Now they are fully supported and used by KMess. + * Merged patch by Ruben to save the toolbars lock status. + * Fixed chats not working at all, the connection between the chat tab and the server was broken. + * Added chat window caption synchronization with the currently selected tab. + +2008-06-02 (Diederik) + * Fix compatiblity issues with the 'configure' and 'get-svn-version.sh' scripts in Mac OS X 10.4 which uses BSD commands. + * Fix compiling of KMess under Mac OS, the KWindowInfo classes are only available for X11 platforms. + * Apply some layout tweaks, which are not visible with Oxygen but are with the Windows XP theme. + +2008-05-31 (Valerio) + * Fixed receiving messages, the contact sidebar's picture didn't stop glowing. + +2008-05-24 (valerio) + * Changed name to the Chat Window Interface UI file. + * Moved *all* UI-related methods away from ChatWindow and into ChatWindowInterface. + * Made ChatWindow to inherit ChatView. + * Made the ChatMaster to manage ChatWindowInterfaces. + * Renamed the ChatWindow class to just "Chat". + * Renamed the ChatWindowInterface class to "ChatWindow". + +2008-05-24 (sifcenter) + * Fixed the connection for send button in chatview. + * Renamed the class AutoLoginView to LoginView. + +2008-05-23 (sifcenter) + * Added the ability to parse effects text for words contain accented chars and + white space: thanks to swiftscythe for reporting. + * Moved the code for emoticon side buttons to QListWidget. + * Fixed the bug in contact sidebar: it wasn't possible to click on the tab contact. + * Fixed the position of button in transfer dialog: thanks to Mikko for reporting. + * Fixed the missing arguments in contact added user dialog: thanks to swiftscythe for reporting. + * Fixed the missing connect for textChanged for messageEdit_. + +2008-05-23 (Valerio) + * Fixed sending chat colors, and improved receiving them. + * Improved groups sorting in the contact list, they are now ordered more like they were in KMess 1.5.1 . + +2008-05-22 (Valerio) + * Improved file format detection for new custom emoticon files. + * Added more debugging info to AddEmoticonDialog and changed the way the emoticon name is passed to the theme. + +2008-05-21 (Diederik) + * Fixed configure output message with path to build folder. + * Fixed possible passport login problem by putting the xmlns at the start of the tag. + * Fixed parent of network window warning dialog. + * Refactored HTTP soap connection code, support 'calldata' per request. + Makes SOAP requests robust if there are multiple parallel requests. + * fixed soap faults being processed in parseSoapResult() when the SOAP fault namespace prefix was different. + * Make sure errors in sub SOAP requests by the offline-im service are also handled. + +2008-05-21 (sifcenter) + * Fixed the position problem for buttons in contact properties dialog. + * Fixed the position problem for buttons in add emoticons dialog. + * Merged MasterOfNothing's patch for status label on chatwindow. + +2008-05-19 (sifcenter) + * Fixed the connection for invite button. + +2008-05-18 (Valerio) + * Moved the Sidebar code from Chat View to Chat Window, in preparation for a Tabbed Chat patch. + +2008-05-17 (Diederik) + * Make sure passwords are hidden in the network window. + * Improved configure script to avoid the 'cd' command. + +2008-05-14 (Diederik) + * Fix compiling if XScreensaver libs can't be found. + +2008-05-13 (Valerio) + * Merged an adapted version of K39's patch, reviewed the Chat Logging page of the Account Settings. + * Merged an adapted version of K39's patch, reviewed the Alerts page of the Account Settings. + * Merged an adapted version of K39's patch, reviewed the Chat Style page of the Account Settings. + * Merged an adapted version of K39's patch, reviewed the Chat Window. + * Merged an adapted version of K39's patch, reviewed the Account page of the Account Settings. + * Moved all config directory management and interaction to the KMessConfig class. + * Revised a bit the Chat Window structure and margins. + * Made Account Settings windows to be children of the Account Manager window if they are opened from there. + * Enabled again BinReloc support to the CMake scripts and to the configure wrapper. + +2008-05-13 (sifcenter) + * Added the password to editbox in account page settings + +2008-05-12 (Diederik) + * Make the XmlFunctions code more verbose, while debugging offline-im sending. + * Fixed compiling the new network window for KDE 4.0. + * Make pthread library required for UNIX platforms only. + * Merged path by K39 to compile KMess on Windows. + +2008-05-12 (Valerio) + * Added an UI file to the Network Window. + * Modified the CMake file to completely avoid compiling the Network Window in user builds. + * Added the ability to manually send commands to the server in Network Window's selected tab. + +2008-05-10 (Valerio) + * Fixed a little issue with emoticon themes which prevented kmess from sending custom emoticons. + +2008-05-10 (sifcenter) + * Added the label with transfer rate and eta to file transfer entry. Added also an icon + that shows if the transfer is incoming or outcoming. + +2008-05-09 (sifcenter) + * Improved the sending of oims: now if there is a authentication error, the client requests + one new passport authentication. + +2008-05-09 (Valerio) + * Fixed the buttons in the Accounts Manager and a possible crash. + * Fixed the behavior of the extra options in the initial view, when the account name is unknown. + * Removed some signal forwarding methods, replaced with signal-signal connections. + * Moved the Email Settings to the global configuration dialog. + * Redesigned the Alerts page: it had way too many controls for a single page. + +2008-05-08 (Valerio) + * Added a KMessShared class, to contain globally useful stand-alone methods. + * Added option to choose a custom browser from the Global Settings. + +2008-05-08 (sifcenter) + * Improved the accounts manager page: now the accounts are showed with image, friendly name and + email like a card. + * Added the include "math.h" to msnswitchboardconnection.cpp to avoid issue reported here: + http://kmess.org/board/viewtopic.php?f=4&t=3181 + * Fixed the setting for personal image. + +2008-05-08 (Valerio) + * Improved account directories management; also new accounts should not get duplicated when edited. + * When using the TCP socket, avoid firing the disconnection signal twice. + * After a logout with an HTTP connection, the next login try connecting with TCP first. + +2008-05-07 (sifcenter) + * Added support to huge message sending ( max 10 chunks, 14000 bytes ). + * Added "Listening music" to copy menu. + * Improved the sending of huge messages: now the remote clients that don't support the + recieving of it, will receive the splitted message. + +2008-05-06 (Valerio) + * Rewritten the configuration system. It's now all based on KMessConfig. + While I was at it, I also have adjusted the preferences paths: account files are now entirely stored + in the account folder. + * Avoid reloading an emoticon theme if it is already. + * Simplified the InitialView constructor by removing a parameter, which will be obtained locally instead. + * Fixed account deletion, now the entire deleted account directory is destroyed. + * Fixed issue with new accounts, the 'remember account' option was not honored. + * Fixed issue with guest accounts, now they are correctly added to the Accounts Manager. + * Fixed new accounts weren't being added to the login screen list. + +2008-05-06 (sifcenter) + * Fixed the issue when the statusLabel shows one string larger than the aviable space. + * Fixed some labels: switched from AutoText to RichText. + +2008-05-05 (Valerio) + * Removed parentship between the main window and the settings dialogs. This should fix the window visibility + issues under KDE4. + * Removed the status enum from KMessInterface, which was an unneeded dependency and caused many recompiles. + * Fixed closing a disconnected connection causing debug log warnings. + * Fixed saving the contact list groups order. + * Removed three useless methods from class KMess; fixed the warnings when disconnecting from a guest account. + * Removed an old call to ContactList to set a contact offline, replaced it with the generic changeContactStatus() call. + * Added back the italicized font on the list for contacts which do not have us in their list. + * Added ability to Global Settings Dialog to load and save settings for all of its pages. + +2008-05-05 (sifcenter) + * Added the date to picture files. + * Added the button "clear cache" in the files picture browser. + * Added the notification dialog to global settings. + * Removed the notification dialog button from actions menu. + * Improved search bar: now is hidden by default and it can be called by option in action menu + or by pressing ctrl+f + * Fixed the issue with very long nick + +2008-05-04 (Diederik) + * Easy debugging by displaying error codes in the debug window too. + * Moved SOAP support methods to MsnConnection so these can be used for the SB code too. + +2008-05-04 (Valerio) + * Improved the account management. Added an AccountsManager singleton class which manages + all account-related events. This removes a lot of responsibility from the KMess class. + * Finished work on the Account Manager in the new Global Settings Window. + * Improved the Account Settings dialog's behavior. It will now refuse to close and save if the handle + is invalid. + * Improved a bit the management of the new account directories. + +2008-05-04 (sifcenter) + * Added a KLineEdit for searching contacts in contact list. + * Added the menu "Configure KMess" to the tray icon right-click menu. + * Fixed the issue when adding an invalid account name. + * Improved the sending of oims: now we can send them when we are invisible. + * Improved the sending of oims: use sendRequest instead of sendRawPostRequest. + +2008-05-03 (Valerio) + * Added a Global Settings dialog, along with a stub of an Account Manager, just to fill + the dialog with something. + +2008-05-03 (sifcenter) + * Added some controls for the errors returned in the soap reply for oim: + - Now there is only one lock key for all oims ( stored in current account ). + - The key will re-calculate if in the soap reply there are "Authentication Failed" and "LockKeyChallenge" entries. + - Now there is a feedback in chat window if there is a problem while sending one oim. + * Added tooltips to personal message and friendly name labels in the contact frame of the chat window. + * Added last seen entry to contact's extensions. It's added in one label on contact properties dialog. + * Added a Miscellaneous Settings dialog to Global Settings. It's a stub. + * Added an i18n call to KMess::addNewGroup() to the default group name. + * Fixed the problem with long friendlynames ( set the maximum length to 387 characters url encoded ). + * Fixed some escape friendlyname in kmessview.cpp. + * Fixed some icons: + - copy link in popup menu on link click. + - contact flag blocked, food and phone. + * Improved the history combo box and remove oldest item if the count is >= 500 elements. + +2008-05-02 (Valerio) + * Added MSN-HTTP support. Now KMess can connect from behind those corporate firewalls + which only allow browsing the Web. + * Added a socket abstraction layer, adapted all socket code to use it. + * Unified all network-related error messages. + * Fixed the disconnection occurring when trying to chat with an online contact while + being invisible. + * Fixed the "i18n argument missing" warning text which was visible in Transfer Window entries. + +2008-05-02 (sifcenter) + * Change the location for data of account settings + * Change the location for data of contacts settings + * Added the KMessConfig class for retrive informations about configure location + * Added the ability to send Offline Messages to contacts, and to open chats with offline + and invisible contacts. + --- 2.0alpha released --- 2008-05-01 (Diederik) @@ -56,6 +750,44 @@ parallel in development of KMess 1.5.1 at subversion revision 2338. + +--- 1.5.2 branch --- + +2008-08-03 (Valerio) + * Fixed group sorting. + +2008-07-27 (Diederik) + * Fixed a possible crash in background picture transfers (backported from KMess 2). + This could happen when WLM is running for a long time. It likely won't ever happen in + KMess 1.5 because it does not accept reversed invitations. + * Fixed enabled auto-away settings if the XScreenSaver extension was not found (backported from KMess 2). + +2008-07-12 (Valerio) + * Fixed a bug which discarded saved options for an account when quitting and when just disconnecting. + * Fixed a bug which caused a disconnection when setting and extremely long nickname. + +2008-07-01 (Valerio) + * Fixed a bug which prevented non-PNG emoticon themes from loading (backported from KMess 2). + +2008-06-10 (Diederik) + * Updated Simplified Chinese translation by Liu Sizhuang. + +2008-06-04 (Diederik) + * Fixed a crash in debug builds for unknown contacts (backported from KMess 2). + * Fixed displaying old contact names after login (name was not updated in the ILN command, backported from KMess 2). + * Fixed a potential passport login problem, not seen yet unfortunately (backported from KMess 2). + +2008-05-17 (Diederik) + * Make sure passwords are hidden in the network window (backported from KMess 2). + * Added a warning message if a file transfer is started when a non-P2P capable client. + +2008-05-11 (Valerio) + * Added Portuguese translation, made by Darlan Campos. + +2008-04-20 (Valerio) + * Fixed a possible crash in PassivePopup (backported from KMess 2). + + --- 1.5.1 branch --- 2008-04-06 (Diederik) diff --git a/Doxyfile b/Doxyfile index ce0be94..049018d 100644 --- a/Doxyfile +++ b/Doxyfile @@ -1,14 +1,14 @@ -# Doxyfile 1.4.1-KDevelop +# Doxyfile 1.5.5-KDevelop #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- +DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = KMess -PROJECT_NUMBER = 2.0alpha +PROJECT_NUMBER = 2.0-alpha2 OUTPUT_DIRECTORY = ./apidocs CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English -USE_WINDOWS_ENCODING = NO BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = "The $name class" \ @@ -29,15 +29,24 @@ STRIP_FROM_PATH = STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO +QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO DETAILS_AT_TOP = NO INHERIT_DOCS = YES -DISTRIBUTE_GROUP_DOC = NO +SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 2 ALIASES = OPTIMIZE_OUTPUT_FOR_C = NO OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES +DISTRIBUTE_GROUP_DOC = NO SUBGROUPING = YES +TYPEDEF_HIDES_STRUCT = NO #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- @@ -46,6 +55,7 @@ EXTRACT_PRIVATE = YES EXTRACT_STATIC = YES EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = YES +EXTRACT_ANON_NSPACES = NO HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO @@ -57,6 +67,7 @@ SHOW_INCLUDE_FILES = YES INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = YES +SORT_GROUP_NAMES = NO SORT_BY_SCOPE_NAME = NO GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES @@ -66,6 +77,8 @@ ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = NO SHOW_DIRECTORIES = NO +SHOW_FILES = YES +SHOW_NAMESPACES = YES FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages @@ -80,12 +93,18 @@ WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- -INPUT = ./kmess -FILE_PATTERNS = *.cpp *.h *.dox +INPUT = ./src +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.cpp \ + *.h \ + *.dox RECURSIVE = YES -EXCLUDE = *.moc *.moc.cpp *.moc.h +EXCLUDE = *.moc \ + *.moc.cpp \ + *.moc.h EXCLUDE_SYMLINKS = NO -EXCLUDE_PATTERNS = */build-*/* +EXCLUDE_PATTERNS = */build*/* +EXCLUDE_SYMBOLS = EXAMPLE_PATH = EXAMPLE_PATTERNS = * EXAMPLE_RECURSIVE = NO @@ -101,6 +120,8 @@ INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = YES REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index @@ -119,6 +140,10 @@ HTML_FOOTER = doc/apidocs_footer.html HTML_STYLESHEET = doc/doxygen.css HTML_ALIGN_MEMBERS = YES GENERATE_HTMLHELP = NO +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = org.doxygen.Project +HTML_DYNAMIC_SECTIONS = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO @@ -126,8 +151,9 @@ BINARY_TOC = NO TOC_EXPAND = NO DISABLE_INDEX = YES ENUM_VALUES_PER_LINE = 4 -GENERATE_TREEVIEW = NO +GENERATE_TREEVIEW = NONE TREEVIEW_WIDTH = 250 +FORMULA_FONTSIZE = 10 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- @@ -187,7 +213,8 @@ EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = -PREDEFINED = KMESSTEST KMESS_NETWORK_WINDOW +PREDEFINED = KMESSTEST \ + KMESS_NETWORK_WINDOW EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- @@ -202,26 +229,29 @@ PERL_PATH = /usr/bin/perl # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = NO +MSCGEN_PATH = HIDE_UNDOC_RELATIONS = YES HAVE_DOT = YES +DOT_FONTNAME = FreeSans +DOT_FONTPATH = CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES UML_LOOK = NO -TEMPLATE_RELATIONS = NO -INCLUDE_GRAPH = NO +TEMPLATE_RELATIONS = YES +INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = NO CALL_GRAPH = NO -GRAPHICAL_HIERARCHY = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = NO DOT_IMAGE_FORMAT = png DOT_PATH = DOTFILE_DIRS = -MAX_DOT_GRAPH_WIDTH = 1024 -MAX_DOT_GRAPH_HEIGHT = 1024 +DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 1000 DOT_TRANSPARENT = NO -DOT_MULTI_TARGETS = NO +DOT_MULTI_TARGETS = YES GENERATE_LEGEND = YES DOT_CLEANUP = YES #--------------------------------------------------------------------------- diff --git a/FEATURES b/FEATURES index e0db252..196357c 100644 --- a/FEATURES +++ b/FEATURES @@ -1,11 +1,31 @@ KMess Feature list ======================== - 2.0 - -Support to receive Ink (hand-written) messages. -Options to copy a contact's email, name, message and links present in the name/message +Support to receive and send Ink (hand-written) messages. +Support to send huge messages. +Options to copy a contact's email, name, message, listened music and links present in the name/message List of contact events, such as logins and logouts. Chat Windows can be used again when reconnecting. Quick retype of previous sent messages, using Ctrl+Up/Ctrl+Down. +MSN connections over HTTP, to deal with corporate firewalls which only allow connections to browse the web. +Support to chat with offline and invisible contacts. +Support to search in the contact list. +Support to send bigger chat messages. +Option to choose the browser used to open web sites, Live Mail, and MSN support sites. +Option to manually send commands to the server in developer builds. +Support to group all chats in the same chat window (tabbed chatting). +Option to select a directory where all received files will be put. +Option to choose the interval of ports used for fast file transfers. +Option to keep short notes for each contact. +Support to MSN Plus text formatting. +Support for DBus remote application control. +Option to choose a previously chosen display picture. +Support for dark KDE color schemes. +More options to improve customization of the Contact List. +Support for KDE's KWallet, to store in a secure way the accounts passwords. +Automatic detection of network connection and disconnection. +Option to block notifications when the status is set to Busy. +Option to disable displaying of received winks. - 1.5.1 - Contact's MSN client detection. diff --git a/NEWS b/NEWS index 4be769c..43d9928 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,49 @@ + +Changes between KMess SVN and 2.0-alpha2: +-------------------------------------- + + +Changes between KMess 2.0-alpha2 and 2.0-alpha: +-------------------------------------- +- added connecting over HTTP, to deal with corporate firewalls which only allow connections to browse the web. +- added an history box in the contact list, to display recent contact events. +- added offline messaging functionality. +- added an application-wide settings dialog. +- added an account manager in the application-wide settings. +- added ability to search the contacts in contact list. +- added the ability to send huge messages. +- added option to copy the music a contact is listening to the clipboard. +- added option to choose the browser and e-mail client used to open Web links. +- added tabbed chatting support. +- added the ability to send ink messages. +- added a little button on the notification popups to allow closing them, other than the right-click. +- added an option to choose a default directory where to put all received files. +- added option to choose the interval of ports used for fast file transfers. +- added ability to keep short notes for each contact. +- added full MSN Plus text-formatting support in chat and in the contact list. +- added a DBus remote control interface, to enable interaction with KMess from other applications. +- added options to switch a contact between groups from that contact's properties dialog. +- added dialog to choose a previously set display picture for the account. +- added a dark chat style suitable for use with dark KDE color themes. +- added option to choose the dimensions of the contact list pictures. +- added KWallet support to store in a secure way the passwords of the saved accounts. +- added option to specify where received files will be downloaded to. +- added option to hide currently empty groups. +- added option to display online contacts divided by group along with offline contacts all grouped in the offline group. +- added detection of network connection availability. +- added option to block notifications when the status is set to Busy. +- added option to disable displaying of received winks. +- added the date of the last received message from a contact. +- improved reporting of error messages. +- improved the user interface of many dialogs. +- improved the Now Playing support with Amarok 2 support. Amarok 1.4 is still supported. +- improved the way the file transfer messages are displayed within the chat. +- improved the auto-message feature by displaying the automessage more often. +- fixed displaying old contact names and no personal messages after login. +- fixed loading emoticon themes containing non-PNG picture files. +- fixed compatibility and styling issues with dark KDE color schemes. + + Changes between KMess 2.0-alpha and 1.5.1: -------------------------------------- - ported to KDE 4. @@ -9,10 +55,29 @@ Changes between KMess 2.0-alpha and 1.5.1: - added group selection box to the "add contact" dialog. - improved overall user interface. - improved client name detection of contacts. +- improved contact properties dialog - fixed font color chooser in the chat window, settings could be lost. - fixed contact re-invites (chat resumes) to the chat when the first attempt failed. +Changes between KMess 1.5.2 and 1.5.1: +-------------------------------------- +- added a warning message if a file transfer is started when a non-P2P capable client. +- fixed displaying passwords in the debug window, make it easier to share debug logs. +- fixed displaying old contact names after login. +- fixed enabled auto-away settings if the XScreenSaver extension was not found. +- fixed a bug which caused a disconnection when setting an extremely long nickname. +- fixed a bug which discarded saved settings for an account when quitting and when just disconnecting. +- fixed a bug which prevented non-PNG emoticon themes from loading. +- fixed a crash in debug builds for unknown contacts. +- fixed a possible crash in the passive popups. +- fixed a potential crash in background picture transfers (unlikely to occur). +- fixed a potential passport login problem, not seen yet unfortunately. +- fixed compiler warning on newer GCC. +- updated Brazilian Portuguese translation, made by Darlan Campos. +- updated Simplified Chinese translation by Liu Sizhuang. + + Changes between KMess 1.5.1 and 1.5: -------------------------------------- - added checking if a screensaver or fullscreen app is running, and disable notification popups. diff --git a/README b/README index 253d924..080d5d2 100644 --- a/README +++ b/README @@ -22,11 +22,10 @@ Installation Tip: First configure your build using the configure script: - ./configure --prefix=/usr + ./configure If everything went well, you can run: - cd build make and then, as root, type @@ -40,6 +39,8 @@ That's it! Compiling with cmake: ===================== + * * this is for experienced users only * * + KMess 2 is KDE 4 software, which uses 'cmake' to build the software. To make it a bit more familiar for you, we have created a 'configure' script which does all the cmake magic behind the scenes. @@ -86,6 +87,16 @@ Try the following switches to change the build. Activates/deactivates KMess debugging output to console, even on release builds. This flag is automatically enabled when the build type is "debugfull". +-D KMESS_ENABLE_BINRELOC=[1,0] + + Enable support for binary relocatable binaries. This allows the binary + to find it's resource files whatevery directory it is installed in. + +-G "MinGW Makefiles" + + This option is required to build KMess on Windows (still experimental). + See http://trac.kmess.org/wiki/Compiling%20KMess%20for%20Windows for details. + If you find this too difficult, consider using our "./configure" script instead. This is a wrapper these 'cmake' arguments to make it easier, and more familiar, to compile software. @@ -278,7 +289,7 @@ Building Slackware Packages To build a TGZ package for Slackware, also run: - rpmbuild -tb kmess-1.4.tar.gz + rpmbuild -tb kmess-2.0.tar.gz diff --git a/autopackage/default.apspec b/autopackage/default.apspec index 7bfd5da..2252548 100644 --- a/autopackage/default.apspec +++ b/autopackage/default.apspec @@ -4,7 +4,7 @@ RootName: @kmess.sourceforge.net/kmess:$SOFTWAREVERSION DisplayName: KMess ShortName: kmess -SoftwareVersion: 1.5 +SoftwareVersion: 2.0alpha2 Maintainer: The KMess Developers Packager: Diederik van der Boor Summary: MSN Messenger client for KDE @@ -44,9 +44,8 @@ echo "*" | import [Prepare] -# KDE 3.2 is the minimum requirement, -# KDE 3.1 support was dropped with 1.5-pre1 -require @kde.org/kdelibs 3.2 +# KDE 4.0 is the minimum requirement after the port to KDE4 +require @kde.org/kdelibs 4.0 # flash and cabextract are used for winks. playWinks="1" diff --git a/cmake/config-kmess.h.in b/cmake/config-kmess.h.in index f752bf8..182a1f9 100644 --- a/cmake/config-kmess.h.in +++ b/cmake/config-kmess.h.in @@ -2,6 +2,7 @@ * KMess configuration file * * The value for these defines is controlled by CMake at configuration time. + * NOTE: This file needs to be written in C, as it will be included by C source files too. */ /* Define the application version */ @@ -10,11 +11,14 @@ /* Define if debug output should be enabled */ #define KMESS_DEBUG ${KMESS_ENABLE_DEBUG_OUTPUT} +/* Define if the Relocatable Binary support should be enable */ +#define ENABLE_BINRELOC ${KMESS_ENABLE_BINRELOC} + /* Define the fallback prefix */ #define KMESS_PREFIX "${CMAKE_INSTALL_PREFIX}" /* Define if you have the XScreenSaver extension */ #cmakedefine HAVE_XSCREENSAVER ${HAVE_XSCREENSAVER} -/* Define if you have KPhone installed (for SIP voice chat) */ -// #define HAS_KPHONE 1 +/* Define if you have KPhone installed (for SIP voice chat) (currently unused) */ +/* #define HAS_KPHONE 1 */ diff --git a/cmake/get-svn-version.sh b/cmake/get-svn-version.sh index 04ee63c..f6bc55b 100755 --- a/cmake/get-svn-version.sh +++ b/cmake/get-svn-version.sh @@ -2,7 +2,8 @@ cd `dirname $0`/.. -appver="`cat kmess.lsm | grep Version: | sed -re 's/[^0-9]+//'`" +# second sed expression fixes Mac OS X 10.4 +appver="`cat kmess.lsm | grep Version: | sed -e 's/[^0-9]\+//' -e 's/Version:\( \)*//'`" date="`date +%Y%m%d`" # Make sure we have the right repository diff --git a/configure b/configure index c51fb6b..8460393 100755 --- a/configure +++ b/configure @@ -14,21 +14,35 @@ # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # +# Note for packagers: +# this script is only written to provide a more user friendly +# interaction between the command line and the cmake invocation. +# If you are familiar with CMake, you may call it directly too. +# # ------------------------------ # # Variables # +# auto-detect default prefix +KDE4_PREFIX="" +DEFAULT_PREFIX="/usr/local" +if type -p kde4-config >/dev/null; then + KDE4_PREFIX=`kde4-config --prefix` + DEFAULT_PREFIX="$KDE4_PREFIX" +fi + # To configure -PREFIX="/usr/local" +PREFIX=$DEFAULT_PREFIX BUILD_TYPE="relwithdebinfo" BUILD_DIR="build" DEBUG=0 +BINRELOC=0 # Globals cd `dirname $0` -SRCDIR="$PWD" +SRC_DIR="$PWD" KMESS_VER="`./cmake/get-svn-version.sh`" @@ -45,17 +59,18 @@ function print_help Usage: ./configure [arguments] This is an emulation script of GNU ./configure to give compiling of KDE 4 -software a more familiar usage. To use the full potential of the KDE 4 -build system, run 'cmake ' from an empty directory. +software a more familiar usage. Experienced users are free to use cmake +instead. This configure script should provide everything you need though. Configuration: -h, --help display this help and exit Installation directories: - --prefix=PREFIX install files in PREFIX. default: /usr/local + --prefix=PREFIX install files in PREFIX. default: $DEFAULT_PREFIX Optional Features: --enable-debug-output enable debugging output. default=no + --enable-binreloc enable binary relocation support. default=no --build-dir=PATH path to store the build files. default: ./build --build-type=TYPE define the build configuration to use, values: release - standard release @@ -64,9 +79,26 @@ Optional Features: debug - debug build debugfull - full debug build -To have more influence over the build configuration, run 'cmake' directly. -See the README file for more information. + +After running ./configure, you can type 'make' to build this project. " + + # Hint for kde installation + if [ "$KDE4_PREFIX" != "" ]; then + if [ "$KDE4_PREFIX" != "$PREFIX" ]; then + echo " NOTICE: + + The installation prefix is set to '$PREFIX'. You may want to set + the prefix to '$KDE4_PREFIX' to install the files in the KDE 4 folder. +" + fi + else + echo " WARNING: + + kde4-config was not found. Please verify that + you've installed the KDE 4 development packages! +" + fi } @@ -93,52 +125,88 @@ function run_cmake ;; esac - # Make the directory + # Make the directory, + # and switch so build messages are ok. test -e "$BUILD_DIR" || mkdir "$BUILD_DIR" || exit 1 + cd "$BUILD_DIR" - # Start cmake - cd $BUILD_DIR + # debug about cmake echo "configuring KMess $KMESS_VER" echo "checking build directory" echo "running cmake from `pwd`" echo "command: cmake -D CMAKE_INSTALL_PREFIX=$PREFIX \ " echo " -D CMAKE_BUILD_TYPE=$BUILD_TYPE \ " echo " -D KMESS_DEBUG_OUTPUT=$DEBUG \ " - echo " "$SRCDIR" " + echo " -D KMESS_ENABLE_BINRELOC=$BINRELOC \ " + echo " "$SRC_DIR" " echo "" + # finally start cmake cmake -D CMAKE_INSTALL_PREFIX=$PREFIX \ -D CMAKE_BUILD_TYPE=$BUILD_TYPE \ -D KMESS_DEBUG_OUTPUT=$DEBUG \ - "$SRCDIR" \ + -D KMESS_ENABLE_BINRELOC=$BINRELOC \ + "$SRC_DIR" \ && cmake_ok || cmake_error } function cmake_ok { - local HAS_XSS="no (extension not detected)" - local HAS_DEBUG="no (good!)" + # collect all settings + local HAS_XSS="no (extension not detected)" + local HAS_DEBUG="no (good!)" + local HAS_BINRELOC="no (only available on Linux)" if [ $DEBUG = "1" ]; then - HAS_DEBUG="yes (KMess will be slow!)" + HAS_DEBUG="yes (KMess will be slow!)" + fi + + if [ $BINRELOC = "1" ]; then + HAS_BINRELOC="yes" fi if grep -q '^#define HAVE_XSCREENSAVER 1$' "config-kmess.h"; then HAS_XSS="yes" fi - echo "-- cmake completed + # create a makefile to redirect all calls to the build directory + makefile=$SRC_DIR/Makefile + targets=`grep '^[A-Za-z_\/\-]\+:' Makefile | cut -f 1 -d ':'` + echo "# Generated by ./configure: NO NOT EDIT! +# Build features: +# +# Install prefix: $PREFIX +# Auto-away feature: $HAS_XSS +# Debugging messages: $HAS_DEBUG +# Binary relocatable: $HAS_BINRELOC +# Build type: $BUILD_TYPE +# Build directory: $BUILD_DIR +# +" > $makefile - Install prefix: $PREFIX - Auto-away feature: $HAS_XSS - Debugging messages: $HAS_DEBUG - Binary relocatable: .. (todo) + for target in $targets; do + echo "$target:" >> $makefile + echo -en "\t" >> $makefile + echo "@\$(MAKE) --no-print-directory -C '$BUILD_DIR' $target" >> $makefile + echo "" >> $makefile + done + + # display a configure report + echo "-- configure completed - Enter the following commands to continue: + Build features: + + Install prefix: $PREFIX + Auto-away feature: $HAS_XSS + Debugging messages: $HAS_DEBUG + Binary relocatable: $HAS_BINRELOC + Build type: $BUILD_TYPE + + + Enter the following command to continue: - cd $BUILD_DIR make " } @@ -159,34 +227,59 @@ echo "-- cmake failed # Main # -# Parse the arguments -TEMP=`getopt --name=configure \ - --options h \ - --longoptions help,prefix:,enable-debug-output,build-type:,build-dir:,build-folder: -- "$@"` -case "$?" in - 0) ;; - *) exit 1 ;; -esac +# parse arguments +if [ -n "$*" ]; then + # check against BSD / Mac OS getopt, which is seriously lacking. + # It does not support additional options, so it will recognize everything + # after --longoptions as the $@ input. + if ! getopt --longoptions --prefix -- "" 2>/dev/null >/dev/null; then + echo "$0: Sorry, can't handle arguments at this platform. +Your getopt version does not support long arguments. -# Note the quotes around `$TEMP': they are essential! -eval set -- "$TEMP" +Please run cmake directly, for example: -while true ; do - case "$1" in - -h|--help) print_help; exit 0 ;; - --prefix) PREFIX=$2; shift 2 ;; - --enable-debug-output) DEBUG=1; shift ;; - --build-type) BUILD_TYPE="$2"; shift 2 ;; - --build-dir|--build-folder) BUILD_DIR="$2"; shift 2 ;; - --) shift ; break ;; - *) echo "Internal error!" ; exit 1 ;; + mkdir build + cd build + cmake -D CMAKE_INSTALL_PREFIX=/usr ../ + make + make install +" >&2 + exit 1 + fi + + # Parse the arguments + longopts="help,prefix:,build-type:,build-dir:,build-folder:,enable-binreloc,enable-debug-output" + TEMP=`getopt --name=configure \ + --options h \ + --longoptions "$longopts" -- "$@"` + case "$?" in + 0) ;; + *) exit 1 ;; esac -done -if [ -n "$1" ]; then - echo "$0: invalid arguments: $@" - exit 1 + + # Note the quotes around `$TEMP': they are essential! + eval set -- "$TEMP" + + while true ; do + case "$1" in + -h|--help) print_help; exit 0 ;; + --prefix) PREFIX=$2; shift 2 ;; + --enable-debug-output) DEBUG=1; shift ;; + --enable-binreloc) BINRELOC=1; shift ;; + --build-type) BUILD_TYPE="$2"; shift 2 ;; + --build-dir) BUILD_DIR="$2"; shift 2 ;; + --builddir|--build-directory|--build-folder) BUILD_DIR="$2"; shift 2 ;; # be forgiving with small errors. + --) shift ; break ;; + *) echo "$0: internal error at argument '$1'!" ; exit 1 ;; + esac + done + + if [ -n "$1" ]; then + echo "$0: invalid arguments: $@" + exit 1 + fi fi diff --git a/data/chatstyles/CMakeLists.txt b/data/chatstyles/CMakeLists.txt index ef2927d..bd48a0b 100644 --- a/data/chatstyles/CMakeLists.txt +++ b/data/chatstyles/CMakeLists.txt @@ -7,6 +7,7 @@ add_subdirectory( Classic-compact ) add_subdirectory( Dim ) add_subdirectory( Efficient ) add_subdirectory( Fresh ) +add_subdirectory( Fresh-dark ) add_subdirectory( Pure ) diff --git a/data/chatstyles/Fresh-dark/CMakeLists.txt b/data/chatstyles/Fresh-dark/CMakeLists.txt new file mode 100644 index 0000000..f31fd80 --- /dev/null +++ b/data/chatstyles/Fresh-dark/CMakeLists.txt @@ -0,0 +1,8 @@ + +include_directories( ${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) + + +########### install files ############### + +install( FILES Fresh-dark.xsl Fresh-dark.css bg_gravatar.gif bg_gravatar_rtl.gif buddy_icon.png DESTINATION ${DATA_INSTALL_DIR}/kmess/styles/Fresh-dark/ ) + diff --git a/data/chatstyles/Fresh-dark/Fresh-dark.css b/data/chatstyles/Fresh-dark/Fresh-dark.css new file mode 100644 index 0000000..32b54c5 --- /dev/null +++ b/data/chatstyles/Fresh-dark/Fresh-dark.css @@ -0,0 +1,283 @@ +/* + 'Fresh Dark' style for KMess. + Copyright (C) 2008, Valerio Pilo + Copyright (C) 2006, Diederik van der Boor + Copyright (c) 2006, Benjamin Deveze + + Design based on 'Fresh' by Benjamin Deveze + http://www.kde-look.org/content/show.php?content=43099 + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA +*/ + + + +/* + * the incoming and outgoing messages are implemented as definition-list (
). + * each message type has a different background/border color. + * + * the header is added to the
tag, the message body to the
tag. + * this is easy to format with css, and easy to read without css markup. + */ + + +/* + * reset some default margins. + */ +dl, dt, dd +{ + margin: 0; + padding: 0; +} + + +/* + * make sure position: absolute stays in the message (for time). + */ +.incoming, +.outgoing, +.offlineIncoming +{ + position: relative; +} + + +/* + * general message layout and colors. + */ +.outgoing +{ + background-color: #120d00; + border-top: 1px solid #010700; + border-bottom: 1px solid #010700; +} + +.avatar +{ + background-image: url("bg_gravatar.gif"); + background-repeat: no-repeat; + float: left; + margin: 10px; + width: 93px; + height: 70px; + overflow: hidden; + /* instead of padding, use margin on img to align it. + makes the computation of width and height easier */ +} + +.rtl .avatar +{ + float: right; + background-image: url("bg_gravatar_rtl.gif"); +} + +.avatar img +{ + margin-left: 11px; + margin-top: 11px; + height: 48px; + width: 48px; + /* omitting the width auto scales, but it becomes ugly */ +} + +.rtl .avatar img +{ + margin-left: 34px; +} + +.incoming, +.outgoing, +.offlineIncoming +{ + margin-top: 4px; + margin-bottom: 4px; + /* new messages should appear below the float */ + clear: both; +} + +.incoming dl, +.outgoing dl, +.offlineIncoming dl +{ + /* for alignment of lines under the float */ + margin-left: 113px; /* avatar width + margin */ + margin-top: 11px; + padding-bottom: 0.7em; +} + +div.application, +div.notification, +div.system +{ + margin-left: 11px; + margin-top: 0.7em; + margin-bottom: 0.7em; /* no padding, so time also gets margin */ + position: relative; /* for time */ +} + + + +/* + * name in message title. + */ +dt span.name +{ + display: block; + color: #bbccdd; + font-weight: bold; + margin-bottom: 0.3em; + margin-right: 2px; +} + +.offlineIncoming dt span.name +{ + color: #485770; +} + + + +/* + * time in message title and other messages. + */ +span.time +{ + position: absolute; + right: 5px; + bottom: 0; + color: #ccddcc; + font-size: 8pt; + + /* some margins to fix most ugly stuff when resizing */ + margin-left: 5px; + margin-bottom: 0; +} + +.rtl span.time +{ + /* reverse for right-to-left */ + position: absolute; + left: 5px; + right: auto; + margin-left: 0; + margin-right: 5px; +} + + + +/* + * message body. + * reset spacing and default indent of dd element. + */ +dd +{ + margin: 0; + padding: 0; +} + +dd div.messageContent +{ + /* avoid overlapping the time field */ + padding-right: 5em; +} + + + +/* + * grouped messages splitter effect + */ +.messagegroup dd.middle-child, +.messagegroup dd.last-child +{ + margin-top: 0.4em; + padding-top: 0.4em; + border-top: 1px solid #000500; +} + +.messagegroup dd.last-child +{ + padding-bottom: 5px; +} + +.messagegroup dd +{ + position: relative; /* startpoint for absolute positions */ +} + + + +/* + * other messages; + * - application message (e.g. invitation) + * - notification message (e.g. file transfer complete) + * - system message (e.g. error, invitation not supported) + */ +div.application +{ + color: #0b0; +} + +div.notification +{ + color: #bb0; +} + +div.system +{ + color: #b00; +} + +span.filename { + color: #0b0; +} + +span.failedFilename, +div.notification .filename { + color: #b00; +} + + + +/** + * Draw a border arround emoticon placeholders. + */ +img.customEmoticonPlaceholder +{ + border: 1px dotted #ccc; +} + + + +/* + * fix alignment of emoticons + */ +img.standardEmoticon, +img.customEmoticon, +img.customEmoticonPlaceholder +{ + vertical-align: top; +} + + + +/* + * Set the standard body margins. + * The extra #ChatMessageView prefix is needed to overrule + * the inline rule added by the chat window. + */ +#ChatMessageView body +{ + padding: 0; +} + diff --git a/data/chatstyles/Fresh-dark/Fresh-dark.xsl b/data/chatstyles/Fresh-dark/Fresh-dark.xsl new file mode 100644 index 0000000..cf1aa0b --- /dev/null +++ b/data/chatstyles/Fresh-dark/Fresh-dark.xsl @@ -0,0 +1,234 @@ + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + + + + + + +
+
+ + +
+
+ + + + + + + + +
+
+ +
+ +
+ + + + : + +
+ + +
+ + + + +   + + + + + +
+ + + +
+
+
+ + +
+ +
+
+
+ + + +
+
+ + + + + + +
+ +
+
+
+
+ +
+
+ + + + +
+
+
+ + +
+
+ + + + + + + + + +
+
+ +
+ +
+ + + + : + +
+ + + +
+ + + + last-child + first-child + middle-child + + + + + + + + +
+ + + +
+
+
+
+ + +
+ +
+
+
+
+ +
diff --git a/data/chatstyles/Fresh-dark/bg_gravatar.gif b/data/chatstyles/Fresh-dark/bg_gravatar.gif new file mode 100644 index 0000000000000000000000000000000000000000..7dbaa47620e7f7f3ae1486ece3cc9149367db9e9 GIT binary patch literal 2241 zcmd^;{XY|k1II^W8^dOvNt;OvU&g56+Q`duVR7bg#b0R%BU8QYUEKNCt_F&Hs zh;QHOE|r>?rG&aGQ8V9cp7!h^Mc4fu-}meD>-+Wk{PK?9jt||Mc>sV1sM-NvNh*Y= z6hqUCVd+HJK_V=z)b59J_<;)8kJa#Fwe~+Z+2^wmgk%1XT}N)((QM4uh_~1lGI))x3h# zz6RI6v8esawQdAl_r|qm6kIr)=12Th636W7?KJ18JCpa8>L1lL5?G zC|~6#PzAE)>{uG8P>sEzgNoH5Or0fD>nKr&vbAM*9pr$rsk(INz@6sFFJuJd4N zFnsl%W<7+fb)*}6}`p!H=D4wzN%0w5U_rMu_O^tJ&bznXN)CN~FQGPsMRGVL~nX<}^;M!ARx;*#;MZ z&a-W18&?y~GuXGzZf@2EHya&=IwZ>klW6?u3zh=CJI7=t)^1=Mo%seAt_dnIxUlB! z_(lZZ=*Tm{7>gjzf+gQ%&zra5E?DvB?YN5|-lBD%p7{SW)JLEh0PqFi|4#}3Gywpw z0=_^zWC}7Zl4|d}Uv`rvEr+?T!cPz%byd22lQUYRh+p?zW6~+N?H!!HYnZ*F5Mj9MDG+TK4bF&>f)ims6EZeq}i zUzw36pjGH^>7VNj2cFgk#qd6lI||X1>1SKWOa&1IGwUM3@R)J3 zL-J7+ITm|YQDV{Ym#6zZVFv^&Xmq>S5idU_)_jOjJCvHCT(E0S7&C;=MKtq_S&e!b62U! zxOA)912r5+B`foMhD5%yI~gNU()&x3;^PkpP0H2{lujfLPo*8wJpvt$)?Q2NSLmd$ z_}P4$A3c7RtwZE?Q@lOSjJ7|vUKCi^de`L|`a%Jj+k2Y`?Oll$Xew5Q(qb%Op(=^- zIe~Hl>xFm0A<%S(pKlG8yzD>h`0tRlvBSIK$4Kt@ZNy%P*~?hdVEl%bTNV4DsD;;A zSDuv*UhIOKB~cTV3vZ8aG5oh8-9K}2tSB(($*TMDMLpTPAgH-dK}G~Dj$-nHo+znX zG*7(A6XP*v6v)A%@iWLOrCW|{yhp{n7X=!x+}|9POT{!VPm8l#KbD>mtXjGq+@JZ$ zT^w%?0v-!fe$qZnF)Ww<256Jb9{*g`%T6)ZcIu=lshvjAr}LMDAkXHNg|`FnbESp( zff1e_MHJD}=-DqT$mqfHx(PkoKq&@GOH0 z!{E%FV9}r~B*3u67fG&(p}7nOx%S-ECLBo!!2vE)q8 zo#2x2Ze5wb>AlV2P$^<0zkD^YpGEbG>h^L9vJIh<;B}bpHUAo<5W-pZ3_`chL7`o0 z{~@PdoHXdDzA`xx;nhRH2lFnL9mBBQq?E8twR-A?M7Ddctmg&R+^(qqu;(LO3|6hb za!N9~ZeG@lST3LyL9-MAk7W4G9W-|!3B5r`xV>Yjn)WNxJFrid5K#&zfw`EtUo73| znKc3v=g(bR69Qh)tR)Uy-||{Y+Q?9CYdFd|ukY#ik0rKU&?8tWPKpH^>mR&ySzp_i zcx3uwS@BU`$TcAxPx#OEf$+?bw%-$T?5QvXG&{5%7voPcHofZxqn~fw`Hh3}hK|Y) zS8X3C9zoELursnlhksdnZrR8H*a&cIa!Q?iGMV5Vf@re_vJ+hax4tZhwOFPo>$PSV zipcma^1-TN6B}tGB*ZU+UfeICA>t5ELOvLDznlNN1hs8HbN*9B@g&UtUOQ#U`i+8e65Q}MdbmT z#VU$Kxu2&)2>|mFEwO9@U7?~@sv^be2qAzMt0RSg1z(2|jfMy&FoFqeIbd0?39eBG zmQL7|XumB7Y^q1UC_KfZ;gzZb!U=PM4ka85s?zw00NYx1uwZ<J!RT$V!*ya>ryr5Tc)!v1$@Q8<_aybb~LD5hZ6&i0QC4qioVjFoodFKtww0N-aqOxC*CGVx4u#G)6RO zE}FC`pTh8Fp@J`mDO~w9S~!CcO=E!1yU z1EopYnY&>t#&s?5pR;kU)GCUc7O^KR#*f@Duj>SpL8k|9ES4$CNZ;N5yQ29N^>Bs1 z$)>c9y5U^>OwxZ&&M`SCaxQW+wMC|?3y-X7T1Jf8BX-uU*O6rc3#^R~9dahrIDYTQ z<218J+r1O-pBye2re3%M^Qec%@fTGl(u6?2lfYnWr4+?x!I*Klye}!qJg#M8A&ZPePi-C8J4?lV^@6brvO*p1x*2VkoFwP7= zZhbr3k&D`xb`iQ-w7~GO46l70y|Qi}d(U;DCs6^xXO4OevN128uNOKUeA@nL#WOcw?AgW!2-@a^{xG4Xdb8VYX0x3AjY;qb5JAthOrY!Y zY<~)HHpd2KCNU;@VEYKJ0=fadmo76D_)s&u^WD2Pp*V`3z5);8E14@Iy2Uuhvv8N! zaql*Tx&CAMA!Cl~CQzF4W1E2pt{Xqr4RNn6jd*%lXh0y7SovKRape_y3mWSOswcZW zSyjovZKX<*uOz>&wz?APfs{$pD4SxK>IEs&`izm}O}s6;e!=j@XjAB=OJRVg$O_Lp zcNqm3pY+8y|B|v6Pup>WBrI8ln$qcBDmI+KuW#vo8Fsg2;K-eZmKTd%mi30fo`(C6 zE)l`;xU>OzX8*b0n}^g#A{&2A=v9_Ihmsl~BOxxdRZTp2f2`@xxUGL}4p0B%FYWOVvy8$+-yO?{ zN0Ln_E@$87^x)6+`F_AB7fl<8XBQe;*T*1MFLNEarZsT8M9b8V`i#jZ24c?6e+SG$ zPd6!Ci(BQr^Ww%%);GV9p3;tyhn4AX;c4egql$O z-Nj4#N5uA(7x_zeY529}_PNy9`pS3Qpg+avgTbuc@Y=P1IvB6@zn?l^+qY`_TJ`zk zfKvpBIQQ$u?vK_5wd?Qa?bDxm}h@H zxk4G??k|jHg(R*>fT5c^S{1{o$IH;8@$T4LxEE=Xl`3P5N6_?&BT=?e{jO*sP`=`5 zK@O|=cy%Zx$T_F#LvS{h50{Z)R3*c1RSMrP3;X0(`C%;_fh?9qcu?agww>2D{Q@F; z52(0N0&GF2F~qAWjwe~YktNHfz}`dmw5`_r72k?Up^i#){x^RXcTf=w5W&H4lWcZ7 g_S7Y~WJyCXi_O8!bZc$~jX8(KhJw*}9B9}70Ohn-Pyhe` literal 0 HcmV?d00001 diff --git a/data/chatstyles/Fresh-dark/buddy_icon.png b/data/chatstyles/Fresh-dark/buddy_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..184b0ba03a14e0754c72453f9ea740abb1a72bdc GIT binary patch literal 1266 zcmVPx#24YJ`L;%SE@c@FV_R2m0000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOM( z4hJC=_0n{WR$>}2Y3sC@jJVj9 zno>VYmUeLFDbkblQXB}w-|6xGeENOg``-ILJ#b-+2S-MZ6ih=JQYWG82F_m=g57ke z3-TOhP9di~UR4&RWbE3(Q6c^w6hn-4sD$+VruzIZ?e@3$wTvCji4Q&D4hSKh*eg(h zC=*M-2X~Qa=<{!cct6`L(Ab3#Qev2CiqMgeXMGtF0aa;4Kke*W2&v<3Fx&;xi~s4p zcwIR8K4)h}O?WTW6rq2edrbuN!DrrZ2Q>NlRZ&A_z<0DxO# z(zCRJ{g4xoQRB?j7pBgIDY>v!!5U!tKw+z5J%%$^UzqGU01%QjY=7~2h2%!Dn`Woh z9faZ>ENlA|~pikOT-jZ73=7&D0wL0RVdXJr}MC#-1xP0cVXy zd#=m`_LV!=gr0tn%k}1>l%wALgnO$yfL>`;qX}uM5{@y++rj*n3IO1IbU4PiF2Mlp zWGkkX;TU6=WJvtfp1^x$CtD%fvZrgR^U17>l#u>(O(gs&$~)Og9kEJC|ND{h@J{)=ucbyQTK5vRTHmzw zL7|n#re&jyf1C#ZO#B>j-7d6soWIoO@VQGARMT4^>Q+JzB5 zs4q<%OZ0Q~r7>b92G~mz$4G$&M}^oK?yzGec7_`q6^MX3PQgR+jmb|Pryx-bSySLn zw(@4l6#!7$)$NiiHrGPebFp!+Jatz z`8NOO{vc5d*-f)kOHkx<)X2>i>n#eOi6pjB3 z@pB%NMtNH^HEQ<6&v}ghEyI(dv7E&gHkf0d-&BpuI(ymVk3l4B08-W`krL8#t9!wl zTUAY&SoG7qAF;91$APMIf;ma&H&vq7kLU@uDMA|`Iv}KYA8md5003luEC2BCy|BKF z-tK|nc4&Qk;eE8}RYWRk(_a*cfYz5$B;+wMVR!b)N_qCHeYaG45xsK~`htw}6OmNZ z9xp1S4^}lMRns|<#;Pvlw9Jw+m%@}a5AGs=2=YGKD^OT7wliw(_liSF)R2b!&*alD c{YMJsAK~_@RFYi!8~^|S07*qoM6N<$g2dNQg#Z8m literal 0 HcmV?d00001 diff --git a/data/kmess.notifyrc b/data/kmess.notifyrc index 988abf1..e91c059 100644 --- a/data/kmess.notifyrc +++ b/data/kmess.notifyrc @@ -3,23 +3,23 @@ Name=KMess IconName=kmess Comment=KMess Messenger Client -#[Event/contact online] -#Name=Contact Online -#Comment=A contact has come online -#Sound=kmess_logon.ogg -#Action=Sound|Popup|Taskbar +[Event/contact online] +Name=Contact Online +Comment=A contact has come online +Sound=kmess_logon.ogg +Action=Sound|Taskbar -#[Event/contact status] -#Name=Contact Status -#Comment=A contact has changed its MSN status -#Sound=kmess_logon.ogg -#Action=Sound|Popup|Taskbar +[Event/contact status] +Name=Contact Status +Comment=A contact has changed its MSN status +Sound=kmess_logon.ogg +Action=Sound|Taskbar -#[Event/contact offline] -#Name=Contact Offline -#Comment=A contact has gone offline -#Sound=kmess_logoff.ogg -#Action=Sound|Popup|Taskbar +[Event/contact offline] +Name=Contact Offline +Comment=A contact has gone offline +Sound=kmess_logoff.ogg +Action=Sound|Taskbar [Event/chat start] Name=Chat Start @@ -33,8 +33,8 @@ Comment=You received a message from a contact Sound=kmess_chat.ogg Action=Taskbar -#[Event/new email] -#Name=New Email -#Comment=You have received a new email -#Sound=kmess_msg.ogg -#Action=Sound|Popup|Taskbar +[Event/new email] +Name=New Email +Comment=You have received a new email +Sound=kmess_msg.ogg +Action=Sound|Taskbar diff --git a/data/pics/CMakeLists.txt b/data/pics/CMakeLists.txt index 8a1b554..4e3dd01 100644 --- a/data/pics/CMakeLists.txt +++ b/data/pics/CMakeLists.txt @@ -16,8 +16,9 @@ SET( kmess_PICS online.png onthephone.png unknown.png - ox16-action-contact_food_overlay.png - ox16-action-contact_phone_overlay.png + contact_food_overlay.png + contact_phone_overlay.png + contact_busy_overlay.png ) INSTALL( FILES ${kmess_PICS} DESTINATION ${DATA_INSTALL_DIR}/kmess/pics ) diff --git a/data/pics/background.png b/data/pics/background.png index 36a6dba4c4cf741478990aad888fa042f2590134..f97c99c55de2df131933da374fb8a8a2e77fa2d5 100644 GIT binary patch literal 29038 zcmXt91yEaEur6M#xKk*u#kE**EgoEoySuwvaVt<9lHl$XcXxMpcV7Cx_a<{E$7>mg$z%9DIhrz0oK9Ja;}>HE zPt|8_0!F2zRH;B!Ov!pG4ymO%^4;X*2Q*%p6bdYVMqVv^sYzmC%RfCz*k;iJs`LD< zmut^iFPE!c>ppgjn(s^p8T{1%yySA}b*jMGUon6xCn=gz|qklY{?J{_kcc1m9b1$bFkl zodR*c(K-9VEm3C?|G>>aQ4Bq`30-$${kOsKCw6<;5cNY2HD2>4=DcdE z&q^KIZ`mpr0+l~ z?0?!uKl3;kYsTjVk3BT$$LDwA0?ot@*1TS>hCBaLv%S(wAI&;r+uI4FJr4!_;=Zm* zh>4ON#*c(VJD-clc)9=7f#2;#(k9!ZEP2CHUdohef1lf_a!=y-bGymi`ahnb{N03{ z8#cD1j%rItV7rF@B$4IqQ(mf_zb^Wbs{f}phS+;S?^Lr~vb^g?tWLAU9Yf(cSOK5& zON7w>HPjILEQMPnFt`)Di;?Narpy<(F)Foj?+c{6N_uV45F~DTO`nqvj zyPKcUIsivgY3OM%OR4!lYze2+)a;GHz<|*JQeMCzalDoQ#`Xk0(JoD_IAoegD*^=@ce~Cv_ zXQ}k>OX-Wh3A8s>kCocS$tM`rz_bjozjV$}N@m7f=`v1m=l!3}-N(D#2r<&3_SgYb zsZX5s+rdKmdfS=D+Rh2V92E2vT~S)7dhC3oBKZ=lq#&j+Aoz7p`)wm~F8IGi+kikx z1u=3*baiOGtGaU9b)EGs6*KjP$nC(A4|{px^P>vaQxVjh( zmAny+SllhWu5ytDmJ#689&)jE=QUEng+Od zJMFdSJPqJ*d#FJy+vO5`FX&1Bfj!^;S5!Yv9D5A?vO^a)SN%iR)i>>`Ofbfu&1YiU zxyRge=}&VM-mLD`QDEiZI?7Kuj~kbMW;szg75{cdIn2uuY5R}70T2aoCxP(&DoFX~ zuOf&EAGe0SDcHJ2)L?aV;_q2uRHRu#M8VC*fc+b;xWy24tXbBhZF;G{c6**(bD3_* zQ7jT-MSSjc5NsC0Rp~#`ICEv^!m^`HwES|rL~Ye=kP9s8^3T*p)#GKCUcSe`fW3%D zPZKdf4fr9f=0Dcff9@xbSf~t%OFG@|zXxeCKnZzvm9Ryy#PPwcxM9oX4RLeVKMWng7k_JmtaQ>X(cFW$RF>N5KJ4 zfen=TAjVRuUeor8Sb5S`LhnCcgF5rL5%XsY%7j}vpCkOh70Rlwqq(0+qz%Rc%B00W z+h$oisnp01-`9jTH)kg!;s283-nFzso9P)6`){j#*bqR=2^Zt}DCdCqN)MO4aCDJ6 ze9S+6$TlGVLDZSs^9YI;&nd~)OlA|GnrHhSLv6YqcF+bR%zX8F+( zzt)G2>Zj0;M~DRanyWu;@bRc8)Hbd&7A-!RQE)=TDIrq0Q1Q(qyFqm&Fz_Gf{M(Q7 z`2Y4J9%u?P-Y8WIx*R3c`)mbieQ||a-Uj2QTCw8N2*J$aktF+L9(FeHx|D%pL-#=& zWXR3%&ld2#0&&?ad2Gc4@vlI7xX{ww7VTyJ`o^xKpF1F+7fD5$t<$k_=J#l;l6@e( zRSBL914Y$}*ca$NonMu6iqjSUQWX*U`O`sGKp3&=&W7)KK9W^8nZDNIhAikfM0=IH z%NqM~=n!$w$`(v5^f(+rCj^(I!w_&?fn4qu;!wDm{ksqbpxJtEMp8L`d#(IWCUuOp z*NIi~0?zR?xQWu&HD&r(Mi@m#D5I`o!zAky9>VEa$76I;wQ70wzL;cl6!!3`bJGb3Vv0m=Zd3soL# zc`NpKW0UZB(bt` zNLD}B+X*YkY|F_rXFY-R(sj@zt7`&_O_M?i!0u(aGI-41Ao$De)i-bxV1lD|-m?An z@aSFsAGdHlEu?MiEc8x1`%mp^-S^W;b~e`6kmurh1sS%QQX_dBibaW{a%-ue&!#my zl12a$dJ?o;oC3FqPqS%)v&k-q+fKhQz%_UB3Ueu}UB1wP{%O@cz+pV!4lO2wzsp^J z?Dp1RL|u*hA@lYJ*VaO^Eje-Ny!)YX)FI0N8%QF?#nFW-u!K#HF{nqxb=}*PbWVRqMlL}V?8eR0|L>n7l;DIB|}4u44=Pt zCHxuA&O!0Lrg=Yri*hgh=dt?)=bk%a<|zF=Wh>1kWHZ349oJNa99`2=A$q9g_VMAO zC1S8-IV__lPTwpJijl0}FT>e%5WhMCrU%LGfSXgWVp?@Dd9uNWCyun!L^u9l?Gxj= z|H1)(+(VAglRhlT+t)A8-w@>hk9|+LIs7$ZG}4im8IM{$Wr;RLT_1!P*87N#&zt}Y zB$OzjhXa$g!~}H|IkXp&tZZ752@d*Z;*4f9)0=~QXC3r`*T4@QNI2ODE7u3h;w+q? z74kF6i#&X-VKY4Shps70VbuWEl^O8$mReBr`L+oik_Yn;3(|_L^02EAnKVuuhSDrd z&Y-D(>U{-m%sw{KsIyPJ4aTXK(85RSgts|u68FD@dH+H@f4}>Cgp9ewQ(~WqDxGGl^v8ST(w5Q6;Tn3B5Xek=h}eif0gP-56}fJ#eY+m)edAkbYX3 zYHH}61fLKZ6}^@65Oe`MQHuR9PSsR!NS&ATbTQWz_8E=&+kdxd+dg6(K)ouiNY$sIZPFQ zsz`NsonO9R1Y%13D`DNslOQz{K>%WK$m=fv^N+_fwJ;&Rh9Mb0{{))A(3KTS7OarP zLA~53EPac9L-h%XO2j?^2TR}6qKU*)U*C7R#;2VZ{~jA?H2XL21B4r9E_}%d~W&( z7=9&F({(bZMrtb6EdI>nlEeUPMYJuOI;66`HJq9;eOCyF?)K)()4WG??C0|m8$2k% zW}E?}cmUo6y?&~co$8>D*EEsnG3Gq(D)fezS1!|F<}&sy-yLN7?*EvD5)Iiu6T!5J zI8eIVta&;*q9*058&J0M2lR%s=*RKQIgYy6#rdiv&@&MEs5QVtjA*(DIL#REQjKvH z7*HG9FZS0W{~AfMP{QF{f2RY`^#?2WWH+6gy>~)XD-II*7RUq@q)V@y{v#Q0^(~is z791p&e8NlbC87 zDQhb+VYf(IU#`Sx%mV)3U$1ojAu*?Ew`B$x&HDton%BHMn#DMeA-o(k zy!URAj;wJ)YJ6;Io)Q=6JxQZ^)lSktXsgadnmD1K3|*eF7f)zyRZQgEFr(Kil(;;_ zU6It(9w%7YU$_g8gNE2tS5zB7AW z-3KC!kP*XYxlf1rb*ZNQ4Dm^v&3Bs>#$&_j*eBAn{;FU?pr&B$hHNtX$vc*dNDlTb z4N=vfrygvBs;P6z9{@ttGOg|3qBVqYTz#5PS#`>EWf{e^>YVc zcDsNWm94n!*T7M^<&|Hk1#UvuJ)AUj6L7|4)zET2I%L{Fegw^2#oT@s^s`M?`7EiH z{Sgv^ay?@*%#gYUBTPY9HMMhQAS^r+BY`U(9>Dg7YAI|1vCr?gecD%^LO!WORGXp_ zogl#rl=ySUrM3}P{gntRx=5id|&SRmQz4~yUL&1ne=;KI6!Mov{ z6SY*ckk7`u6eDKAI43{U==61$ccK`M!Jl-V`?EWS8E`-hoNJi06@Ap+~ZdL;8O-p+hpR74*MP^ZpA z>T!-d!%Z!ermQnI3#>D}ezkiY0LUWEzaFL`35eq{hx9l|&LRhVCTV@uU)PJdS?NTt zbD8MgrvMpPJ}#6xdE3}HMT1SP$Px|wnVC44$AdI=kDY9rBs=V)uv%RyHU_*C)75rx z(@b$g46)b)^PJ&Xt+YiwyL)b%dpP$qIUxm@6!w5QSh8RAF;a-#WtV`Wku{HcqU%(G z-%yN(KI9g9`)=LC=p(V{uCiLKOl7mTU1d8Yj3HG$VU8K0oEFoO3b@4D z+1bV~#C!Ra<4)b^z7LjpB4pAJgJ3+{ue*|sL+vRE!wBC?`U{$%_A{iQW5 zK_hF19!a7haFb>oJmVe2T4dkEM@4Q#hgKwIYX6R#cD;m#hr{c&e)*gjS*a&A^>mS` z^^sYk>33o$YIL?V%<}6Cvv0j)-}(pl{r-0+m8ksGEmwrIBLZs_BSBZoc$)f_g%iR^ z{&@jdG-Ah9lj32%2th5*~z4ooaJ^3j)756&fB8 zP!kHCYHb+C(e2hm8Nbm>utyXY0teEP4Vb}E2c=%;?iauli`DO;($nH5@z;DC%)!!N z;%oS|9-_BfB8J367YLx{*)xpUkB#vXf;QDIFXZ5>fl{2d-qX z2|K+9(A<^{XN+_@6{}jWt(%m4r1ySN|1B6W>$38Ff0tv5sFT$y-QzV3SdwvEkK%n` zn?D4O963KiD{*XI-d8b8bvFd@apCc(qpcp5f%lWBQ*Lje7#MuE76R$BF{ri4n6=EO zfRFh}!B>bsfzD5eQO7X#PYx1-G8-Op9MF5zmK@}MBQNQagMYBw82WH!%~M7`NH9yN z_oO}+>0!(z_d#;c4Elgm4O3IC%B*5?Cip0T^i|#NBXIcnsq0zr&GoN&JCEVXk`(v~ za+)@ZVhE|mbTH<`f`=8SL_tAFnVp3?wt`9M2^7J1ANe7^;#?_x;FX`qM_{8Bi#7ao z=U<4*oso!e#wn7M?#g31)E$dPFzj7iP)-YCSaFO*?u3THP{Ei3T*DMELER0FHsfnH zUF-L%-2Ce5ihH>`1+>q(z-FdVACS4amtlhV7Y{F*dQGxd&Ww$zW(48}C(6dzwo+_e z_~;lIV7R!Az@s0F&m8Q_#{$y71<-6$eF+3kozgJcp=g}aH8!#Hf|xZvK-U{?dkB?O1^# z{(WCn)BUugwGE(qG%vVzeWA;l1j8dcoQAR(ZuEAtLa*TF*<0QjxWaATH$` z%QT-Wp=)pH*O;pW&v$hEA{vUlB8sE;5Oh@LV$OIRci!0Dd)F5qnYfcfoDu{?>N{V}lom+cJRq1oEyphmD$ zCp?~cmlejOu!P!s%Fi_Sgt zO0ULD2rzLOO!l|nn#Kzyxvt^dGqao#tys8Kze&gD;$w{h`P4T%;Ci9db#8YW$2>~U zYj7J~vQ}G#Z7eK&qHuvjFHSl2?NSpe;+B(E`Ks69@k<}Esw)F23-o&LBC7v0=dDly zRrMyi3)hQd)2VuDYTtv}wNwsUoTxKU$!`x~-Oo#0YaZR3;;RG9=;q@9J$DGwMikx3 z@vCju(UreE4b#Y<+l>CMzu(wZFqD2u7;$=>CDB9J8nd}MKvU*84%QzDbEya@o^%-moS8AdD8dM9Gylf^5pc`-%d(r^%XF+Qy0zf*V;tXf86(W>sMb<2 z+sxIyWP!7DBn{}e%~e$gwnfuiBAhs+Lcuzwhx%Gp76*M4pia%u+dK68we$1)TgF0? zUMbYZ_4@%<5VnU-HMMusU^};FOcGw9pD1Ek_0NzXW}!!;Wc6eEJ};7{Vac?=HWuxj znjN?VfI#iN$~xSdCVom1`iwSoY8p}7Z&QEN#$Azy9{TrON7$ou>%9yr<;>k55n3XaYWS7`^p*+H)=faQx#e-0It%I;aX)m+6zZgjUJ3w`7^i z-6z2q-bUu!-nJQ5Qv;qlyNW`hyh_gZI$wY&Si@?}5WiEbhQlIv&x38x#dwgLgUPc- zzWJo_Yj;;d0v45OZ8Fc)?inF|+t&W>D zQr_FF`!|mcPuB{PlF1CEPjrrxNck)F^Vl3}ZcR~qi2U{?W2$_FDk8j#H;}k|E10Dx zlC8e$71}fy9&*_1)ORk2VN$Ey-uj~IPJ;wz-R_2x9cbzV-7*#D%Nqda3v?$iOyB?SS- z&j89uf)Jd;at~*5{#*<|P_Rud7OhzEOsr+jGKs`$YRqfT9z3K*vw7l}Ix5d!Eh-jD z;e;AH!gb-J;@CWFyZSTI$6;n)fRtLaQ@3g0SY)+*lny zhp4tQ1t@3$NG+dT*B95|yJ&Lr?n7#Z@>EOyi!ZDTt(k1Q%r!^iGb!{QFL8UKhbn+h z?VtX-wnl%mHCYg87Ob{x_NJI+Iz5id7yTqFZK=6T?C4r3*^py=&nm|O6Fb_Fmh~}; zMSwtCnwjc)e;~!)wq|^qL07)ab@8k}Wa&Ca5sklyhzvQ=<&&J)j5mAxQ&iRKHR1%j zA>}7!`mW~Ki%0!OYs<27I!55pPcT%DkF8VnlB`G7@aOfuqjBXvGz$@G;un9HLIk?IO3Ena_LgEny(5xa?8?o|pab^|>C_wYFSj<4>Ms&`gVI zYMH74_V3J~L}L2yS6I$5V%(vQ>qF17?eeTIUcFNS zEm&aKoJ#K*?kl4)xY0DeHNlt|84YYH=akuS8&XK5nZpuigV?zVOb$^@5{rLnndGzY zjQmqtGk?vLi9_4CDYL7#J)50+3$DF+^;rBNd>FOW2nU6vZ?#dCSVZ;}=C!v_0)F}8 zYbGQP!|Hp_8)^4`v-|&9fC!*zL17iqC|&&2r@*Dsu9L>C0(w}dowbr z=UIz;hlNaL^PXTgc$6&;udj6Nta1$^dK~jx3)VqFiJa6#!VwSnr1oo^T~5MAnhGmj z5kSgTy~|xUA3={@1Yd6|r&?0jmn?y=tKAxwZiI?-5*`_}$N_fgp64L0`SVv90EwWw z@$E%cZa8tzSDi-VlIBeVw%IKcDlOt-a5>7t*$yId;67s5p5=(bY&f)fb?KJrQ!{Ip zuSkN{lxme)|BJd|u-ez3^*C&k_OUku_tjWZbl7+&IHVN$*+4+_hBc~JDPug27Y@RW zt|}b_>v`R-fA(Ebx$&i-uvV~iR&1&o^Q6q;CQ87 z7qFZlKoI2j`x%Su!y9ur!7xhO5$o!CeR#O(PHp)=XvA=j09t}o&%*_$8T#Yu$SQ5F+^p*x;h^#9jw`R#$ zVYwgeTq3~FAD!1KYoz*DwC!IXqOIKLN0ngoGDVML>!pEd{m#~!#dC9qFfOeWpl0h2 z8N$~a-)*IrUFCm=Y*w4`^<(2soKjks_o0MZD5Z$!j>p5eJiR6**L{5w<@Qyfq{T+2 zrd4wql@}YSTOsM{bRx>U7RUDRmgD`+EdTYj2a|?t`Q|qrN21LFD?Df9Uw;|bF9o}L zYS7gs5A!!W;)Rt=SnK!WemCJbpGtsq;7^NDlsT-mUcUgodFK5?Vy9Z05x474juoD! zIRcQTWbg+ST1lR9!N0GDHY_`kGLIwEAy5dm26AFX|0+}Co#tLVEfD8$8IArBS}HN{ zV%+1+*L5%Fpk*%Op>9kQMthSOy!NG#w1pq!-4bg?ER2)sQ7r^xbRiIQj(FR-k(no+ z1zilM+kXELG=F2bA!DFR4L%}pISujvsFNs@gI>m?5^-ob#C8vMTJ&yr`ViXLO0rjn z`@KGE)>Yq394z_@z`-xpI%d#v%~d69p4G7kR-Sm-k{V#+FU9z$s|`5w<>59O5L6_6 zifrWmW|ehV%Pq&A;JD4tOXtBGpUfq^FNW_KI>0@{pNPs6hZ9I=JHK%>xQ(WBtv$jJ za?5zJl~{2ty~6@zx4d-aU0YnVUylOI+*dW5is!7gpMxAAS>fB-H3TzQARK~b`gN|k zt>f4EetSxzYt#lBF!hK@p&(huf|yFQKYm<{;%7C+ge`3FTI^0Jcs@z1w@4;|zHQ;Q z8Q!7ZcTI|m;$V}2oAI+}XeXY?cs{QC478-Od})m8(x;wIq=6|&uTCFN^dY&+6W9GE zyF=<)f^$bI32Na(W^F`X`v5H zm(|pk0PL%B+P)nzsC|1sIx87CjCci#D~r(books)mxa=tp`3vsk8^!G^L|v>X(d(UbwEU}L=HqrBbnDB0)d@f0UE~Dp03Q% z`mfy$1ULfW*IK%h^EH5lAw=2W0rp;N{Wm3iAq;SxwX2bQ*^RrQLuT=qjgx8J@Y3Bx zvhO4FyxZ}fU51VQwN7HDDG{UGY`Tqv_*!#xh+(o^J{w80HNI0FGCI;X56A>X`EXV` zK-wM7;lc0KApankJ`7Ojy9xjDNwk#S^`ssMv<5kTdpzw}E6-kCeW(+9^VojgBwJY+ z#TlO@)fyI6$lA@!)aLMsgA8p@cYUakdT?gC;Rv}cBU{$pA15?r?JZYzLM$-&nFemT z)y1mw_be}vzBb3T z6Z`ZqP<&>Lx;as>nWFGajbX$3Z6PRoM$pi6M(VsAEYSk6W z94y|*tCbS4%IAg?sjmg1+TM8U><}MoD*e^Xj;eM02j7+n;fP>G%acHxV{-=34p;o8 zq=zm1vvfRx)T{L;CGmlM$Eyk}h+GjAD6qH+B=1uHMrx3;W(U;?QJ|zgr*$nw7{qKm zKFpoD(FwLV=2Sy*Sm79yuqc|)c6~?fzUz3%)rc<0mO6?k!jwFms(3vFh#LC6$NA2M zXCN{VvrWvL7^-)g!VHWj4|#fmwE05}Ls;xh)?b`sU=lfx;#1SbIP>E_gSKVq@?+Ch zD#&O`41Tl7;nc;Rto*4}QTDLq7 z!+x|`(U8jAKiD~1&XX~3R@vtD;{5~FmSfX0qf1g#a$+$FUB6APV$M?5 zEeZ+`e~~BXLG11kAHfb9^*EDD=|T5o8mAvvIS;V=$j+8%Eq$zK@~3Od$Bo}!_nsHh zo2zHM_`8fkUS@sz2+PkLc~l*L8(Eb<)kCXQBk}`XHHlHg?T?7iU4h??n;tidA^g_h zMa282LQZO8amVY%_>8~^<4`mPbS7)LiaJH!P$F;#2?W;5m>MKJJ8d49MXN0hNzbFd zFQHBKl0UuOs{K;(Ho+Dy$#n0n$8v79OXeGI_tA%&TVr?++lRudym(z$RrIH9@GfLz zW1?xTq9L*}8&&f)O8u#14Fp*W7w;z{A` zEdk>Mlp2_m=-lsEGJ$9-1N8eWRU5vYzRNrtg{25Gu!mcb=8X|XbZy=DxxMzuX6&|t zq%gY$h-w^>JXZIWjj(T2T?1#+@r-trFkHM~Kf*a?z;))p+VAmPCtYO#tK&W8gOO?U z02tx+r7C^uW3+mt`5>uwuBXiVoAqT=FOFbMqntSkbGo@h3CXD^%AAPXuZdGCX9NQ2 z!ukQ<@n_{+Gjj>SvS#gR0GduI-c$N?)}$ws%8(7SpJ01w@fWZl{bwaz+=JISZPLaw z<~>MpIR^J0pgzmusWJy*Ga-M-P1p8VuHwFeQE6bosXr(dC0Q37_49tJ@jki9apG*v zLkc0!PvnXkMkiHaQa-~eWgrzN|KjL{n@;GQxvKt><7d@|`=IT2doSptxx2OecA6=E zY@jV>8pD=ba!#Ushfim-#8irk_q>&{1~1d#b62=|SdQ$+NnZOB-z<`BD`Wy9s#%RA z=#jxJE{T0oCO^Zr%gf$16kk-1kdr1LSjW{>Q|xS{86J#m(>aAV|DvT%rsy7cJTePG z+i{fC8pQE=Gva3#WDjQ98?K@n-k>Y8UVV>*QP+_n4)G(#BbH+i@kb}A(DlNs3Sk0w zW#NLUjTruIRDlL%MjV>--8>imo- zou`R-IzXo$G^*8kBE}Vog`d~iv>X#Zi3z~QU{^DQZiy*Kazh&mfxQkk>j8ZPb;(y> zu{uuc8N2-98Xf=aBOt_fk3?t?6fp-IKx#N!T~#;sm3Z$A@72uPXj{6y=5_=itWntK z<|W*<<_GrN1%F&8TAHN-))U4$w?lM}kSCvG z-Ob)?DOQUU6eHgr5i(WL;wjzLu`I8C9y77n1-}@M^cCxpf_v^&=NL|I* zOn?Qw`*vKw)OUA_=u&s=q`9IPncm5RL_yHh^P&8_IKH-tjYp?S)aUx*#!q&vr-Vi_B-V#SCmt zR#)$RsFzg=xHiK~ZFfzuBp>JYRMbO;$W>Tyf3YUBDYF{O;yNZ9)kKXYc^b%<1(4_E z#h0uYgXP=K+}0amtsn7^5&N(*$Q>ubYvttKyGY{5D8@$8N;68E<;t)l>D7Opa3$!; zTbKhL$DX(%o`tJ?kTbppT?9+)IQ(qx+q5VyiVOQA|Fvk zRTZgpe|sH*)$VW|0q1p2=uJD!pb7Wym4JZ`_qs4j1bbQ3JJkYiZnVqhrc|s4C?$Nu zk+V!V;qUlj#8xCbE>7#?4cs}+-v}=}5CP2>!@D?1KH6tacZ{Fe*$l)eaV-c6O}+po zH86zW)^`wLcSE1b`xVvHJO~PU?+H9A`p#PtZ6Y^zgWi!IhJ!4|@AvHd=Kn4Z#0VA`kOCptTe^{{K4l44{K`*r5I#L6h+-!4f4c=XY&Wt zub_N3MsH1Q%f5IF4OkWGAe{(oOVc>t>9L~r@Zu7)S-7#&qg0%R9@VprL4WzT`|PU6yRCK8;;;AgP{nzVX(C{{_dNs?A#AJ0_z|`Pgc|W%&3fFXn zBjV@o9{S>D-O#zMh>I)HM7fzjWigb(#P&&bc`(BzWYCPX=w>UrKs73yK!~(M>F@my z18mfq#m)gI3ZDE{Mpu*O^Ue=E#RGe7c5V6$T@VDUTTYXc$r)6nzFpJ@70rsz%KtjT z?tNR)F?MuB=;Tz>ddFE|;A>m|<*N}2`zGx5B=-8=A!x67lxTsAp{+nsvzj~CLV7bv zs(VkM0^C!j`JmH;2M|0=oGM)#sLTGmo%&=FGAq*OZLnRS=7~a0Q$EtxL7H60hF|$D zyb3rX26Z~HZov7=koEdYJxUG6Z{OcjpNmkoXKq_Yq<%Ej{Zvj9w`!O54EK&3z=Ix- zmL$WAd})pKLB6qPXq`Lfd+S84(<~(ix6RBV=+hvq^&+X-a6g&GsF;u`kv_Y1P@2X z3@zDY_BP>rwPUOURgzZ+<$28D0$na#t6YF)>e22%Dfr0My~35QTx2$2QBvr5@RTX5 z=SL%P$!sL*@Z;)M&(yJ5rhPT!fS~1TiL&@Y8r;6mwP_4$mgrOZ>qMp*((R*uQFU_I z;yC8IfNSuXH7k)@Y8^-pj*4U`BO5v0e?;uTn0V@=CVlTIejG6ql5E)5nbOwQ=D(VZ zbC`~Ydjqw|V^216G8b&lmp7C0sqOH=<`Vqmn0*ZwekjYkJ>RIvnxoVxX)p?{o=`b^vaSjrrN~9w zn5P&f%748`FM+GIw6#$ea26d6a3gW^T7zS_@9uL$31kl{hZYcij=VW*i^a`X3%&&t zomSk`80`75M$(YP<6S;9MK02hH^{o>k+gxk@Myg@a11&`jlt%jYgQIcq3gc{)oj_oUR=mHxLbjSt_9 z#^ZWaU(0i@r2La(cQz}iSC1y0i)eIkSaeVUchM$LAP15hk89ZQn;k20*@(5WHP5S8 zWq-eZSq|Rj+B2@|fxaCutHxl-vhf*9#9Kjnyo486%!Mz!VjB-l7STN=SA+UUrSn+q z_R>P+D`_IGVN|%m0GAuX)-4$JhEq6ye%aQavvabwmEEAJr?&}_QT)t(SOK@9Gv6R4 zC!2pjMA3=VAjX2(cnZy&C`S<`Ak8q!e(n1hg5k9F*R)ZTNrs4c%g-yI%?NS7(nG>cB2sA?)};Pv$xT9=Nq(__?3#a>JHxOs?H zToBxr_bITs@!ecM6J5P6_WEd+(vLfPLZ(Y#55T?N+-sCS$VRd7st=4<$D%kPrxe>z zj%#1ljWvzFxdA*rSQG1=B6lyvzTcQr$6tS$?(f7`L7pzuc%dGAn zT#vn)xCJjf@7VQA8!a|);!5xo_23ho%^_1JLLhMuN06-b*M!bLiJ00ADlAsq7*8bE zSQyuk?!d7yM&&+1VxgF^K+9+LKsMZyVhS9p{866m0@v)ZAcH(|aAc(`t~-{_j;cK# zfkoG1jES1sSk7Zk5uF16qiX%@;+9c5CyB~tvhG-B|6f?VpDn5LORY^l{`d_WKN(^k z9o>QyY?&?x%c$B{R=+6m37TmnnWhKkiGAb?EpAix&~WTHKT_X?RYzAS|1!J=5&)zy zywci02GW$-1ig6ne1#O)4ohuQoqYBq*k4y-&)_r6XvlGktVZf7x;i)TGVLLUo>fbtfS3=Go^d2ueBwbCE2-$3QN>$%1uA?pZ~zbF%X9_>ZrRdh#p#_v$%&XzB{r zb#L%6nF%L~+*~aeL%|7HqP}^lpiI{L=TC0lO_O@{EYV>oXN?^vZ+^x_YOXPRmG=uu z(k5l7p}!ANrBvgwp{>%adDWkD51VBP3V(M{84+a^9>|(3!(7kW(3bX!Q<||3s{Pf9 zxqfffCv53q#{|8FM&U{+J-J4Msj1(~nNeVHWN@1n&o(vJVg|tZVxw#MxyTv7SxO*J58MV2JN6U%6%o z%leeJ$-@n^hnJ|}dliXeo8+Vn2@~*rxsWN$2aFDBHvK$I+qcL%yyZImPP-HAr;=VN7dniM%Qr+ zk{@M?n7D+FppdCI5LyY}U3^k<%6?2=QMA`C=Hu$|46WY3o;(a=7JUxfIf`BX)N`@4 z$04+kwqv#W!`E(Cnq-Y2aiC=2`=1dZ%>UBAEB|x_TA^_(E-0Ww|>9Wb|xeJq1Gd#LkcPXO{d6}IvYvSou-geot~ z$uti#c0mS3$s^?if}hcrjT*WP=25nI{${D0n3yQ7of9GxCVkFkSu`rDlJd3}Xk>2_ zgv`!j{H({F{PdbfY62kml)L~LN}YlL)bMmcJrV(8ZmBuO*3jL{ zcZN?t33E~KED4x16;xm!l;XJotsr&pmG(wg3A4}PSCnn2m`&=KGtEl6qdfYY#Ijy>!bH8!^=yH@s*=C&RWAa9 z?H;iKOOqCctlj;w;uz5}BRfCLwHaHO;+9W{Etx=I$LMR@b3i(a8#4%>PJo%B?v!Vf zFLT+tACYt1s2q38XyFXf2cvrxJ|aGKkV#k~e_x{`OY{H|Z;AytRfh$TUFi&&@0c+( zvjqI*0Go#?}x~(g`D{1|+N>kKc`}`hznNeETMdHlEbM2!;>2z(;7y8Rq za&cRcQ1ABwmg(}E>c!RDTcVh64XbxPX~t4DEmAxSBN<$pHFtz$UloG6>-N)cDQqpq zuaj&09qlsf3{po8;#8-rcsm@}=_r`hq)lStmZLMJ?`su5n2y(mWfgAI5;!}vrH|7# zugyZ-47SAJz=nz+r~f8YURo1G73k>1AwkT`$%f}8a8rUHSl7wZwRC8?KKV}Av{ZA^ z9`!z^B8Eq#)IyKI&^2^H6(5sxsU`WoqqZpb`*r98vszq7naf$h-(kv5*{}3pELW(7 z02lmXI7UgNX}9j9B3W^E_f>p^7Zo12XpZiiAL`!NPDjs0F!KpEccV~e@OyNKpeh?? zX&(AV=>#>=cyZ7c@Ld=2oiz^KG)SzgmX=KmJH&-z?s=e z-`8hhB_kRBZXSx*w>N%hO671jZ5!tvbBUU|pknsG5PF`=$xF9p^E#6aZsQz?kaj7U z8<14p$xzg0pL2AY_%oT|C?l=nIryurar~~bf3LFN&@RZVe%{^GEBRKqA!)GP$vA8k zgOv)CkcutoqiyQY(xUTt_SWae^N6l{EraMW!*1jMD#o>V<-YTdlU^c97b#lrhM zErM8;_I{r({Whi^=jgR{9Uz=_-cN&`sF}8E{0klZ|7QVm45Ob{oZ4t8RmA)J_a_^= z=I0sXvIF}OFp&H8Mu_y>h$=GV(zISft?H3C2zuNVn=6d{9Aj?kxB`Dw$d66j%1N-< z&W$a8X2g{hia4b7`F80)>l;Q>pW@-|6w!MoQHAYnJ)gtUj*KxlXBzYTr|+KHam^>B zcfWA?b}H%pVaH-Fl$CPBhT#o8Zz5)Sqea|} z5*;0jop-`tXx$aMjZQj-(C>~{4=~Bq&AEujb_JnqlI<@uhEf5r-$c8GUY1zj{;FKR zq}@gthXkrp(lBjT*E>1VC8n?zY*pEy!g#-!MyUxQsmpp5ZY$7h#@eY|D+xx!HIE%M!TTk>nFMRE%WvHZ*QYxVp_WJi6nQ!me{gCWQ zGrBb`E{;1C5&3Sv477Na$=n*9e$ZqP@rd1c!#KcoxP+qo;`^wHWx&WNOsJuUu~cJUq! z$Mk-FSzk+gmUGtMd-7O2JZW*L`5=JHH-eo)S%$1{EISAPwUD5%3Xe!uWLy5v8@P`; zRd54v9|_^2!?E#n3aMVOl5O9~{`5t|?rkyC%IE(mn<(>MfXl=Dr2SU)I?K2C*sm0P zDmK2-#;58MJVyat5oj$#a=@)p=N;@2#HQgfKT98Vdg!gr#*8e7HOGQp|h}vr{xaLrOV=hCGJs30|VdEu0Shm8|@+8dY`um2pJ!6doe9_{ys^ zc{}fVKu&$OE?I?O$KR`Y!`dn=(B3DpF9K&JRq(5=!dHk@iCproStb%@g0M7^pUfKm zqAVg5cGTv;7)L2q={y2W`7%iD$390GNslpO0CTC@X}+Puu?vr zea(Zd;#`xaiJe<&=^4(&Exp*5;QRt)oxFsVRDqGhI|X7P0WrZ?HnS=WVj!SnIG0^H zv7sd%7%Rbgsl%+R?H^T|E^m9|5t%rR*XNSSeA-1O(5%KMd$&8yq|x9mqfSIZSh$7X z=Fbb2nm#Be>mtm-DY!%yQsHIEHQTRMJ%!5f9v8Ay$)d0ggZ!yguiC+}SKuof4MUvm zhsy~+JFdy8Crl%~c>HelLV#kPL*VICg;c5iMbV?9L$8zwo5=u3$ElcmvLoLMO2-y^}wr3Y`HF)to?REs` z>y!7JLe+;6zxStUvVLKg^|Z4~AX(PK2AIBaU#%{G$|ZSA)D&aB!;?pvu3tFK5?S925s4c5o~cgVmZfE#g~tgKL_KrfzIw|AlJ&O}``u1ZO| zq|5gaHL+aXzr(I&@hhm+EpPLaBv^rkkaRA8oJ^TF^*L$Dv?y;+^p}P{gQs+xkJL6C}d`XyMv0b!NUcdIcCn-4cq#Mc_n&| zzm&y~2L@!ac5if$g%d@xp?)z+zaH3A@D`RHR=9-1ZNts90ecc|5C(I1$(zrrsxrYv zEPCoG8BA0@^_mQQxB5?slUQ5ptX9`TTPzd8y@#_zwm_0Jg3&uGea6Bf$)tL^@;%mw znd7w8E=pEz#e_9RE4XM0JF+y95e19y^S~l6uX8u!^jSIg`pwib8mS-`lf2J@LgTJQ zlCzvwvY)&@FgYy~r!f292N36;m{{;s>TX`;mD)-=B5T>fp%p`fUsmQfzlaWKxpuH% zIbx4VxCu$9D~Cz|hToWBEWi{Dp`py(Xv^c9`hcxPWK;Ft(c(drh}^heMzeT}dNsv1 zm}BHEu#5+ykNoGH<=f$5_37AyPE+un;Yh8hiVn;_3+3{k{-ZxZu2W|v5bL49Sg#g- z5~0?w7J0@ix<~d4Xh+L+aQU#L_-y=)T@^!0UGk|ixpY~`bqf?mKOi75os)FG*vxBG zN=`ucjk?6FD-{yLofe*jwj07&m+?mLcrUAENm1lL###l6T?vZI+!MuH`8$wa$u{zC zSilh5(hF;5?O>gEn6onWQ)m3yNW)9Y+I@p4_96o@);5SxAcCXpyFw(M==uC%}+F7;)Xs_ncKu`xF+o07ls+HHC zW8Cq&&Bt2?HSiJK)!3vg#J1=QD3-UoDKMt)?QpgAR^ts=^|Y-BWD|X%K97)R$h_sr zSxx)%(QH7T6&#;VK{6qFJ3t8*oC948bI@dn3A}Z!#GvIFyJh7#LXOhpRr#AqQPLlN z#3yPwyWiNAK^!#Hi^8 zp`vo}JtZsOMYX05J?r|~pLksyt7AK_Gaw(-*~TK~#pl>;t~p&C_4iXe`4GzoAt%+u zO9>@PcV_l>-V;zpwVM-9bEJ%)7F!CuJeVb1MsyaL%%Z!Q=DQI~6xbXs*ZPyUU|bTd z(U)%2WXb1sT{e3jrnSYK0C^}$)^)w35#+K`D(wm@KHtKFq!$M zI7Z;OaM#@IqVdj@Je=_6#gm4a`mF9B+tob?tDm;dPas){mcw$FjC@dECeQPFokPuv z9=n{Of*L^>i?Q4ctj-vZnET0WlnkSlQL8DLmP>0KY+J_A{m zss>Q>;YEegCDvc6*x1<3G?4hpZj0K0eE;nAJK2N!gc<8?-2P}8T%rsyOQJ&MRrhJ^ zhrAg`mQUnyNzG!4F3D91suOhdw>D+6^>z}DvScZ-ly=g0t5R9TmnBgv#!H=%f7ky! zG*8M1LI&f|DcNL?&|7359=s&*@TLHQG&~Lb+>#n`Sb~K=k00Tgt;fdpU`IWXg7jm# zjM`YldI?L^o@nH1N5I*}M3^<=-KZ!>|KiCG&`kFl{B1!%S40!@-c+TB^@a-N0vcRs z$bC*e^e0(!b6VcN_xl+$+B8U80$|Tw;13QfD+*>45Xj#? z(st*^+OS=>F_4}YM8>XbZRed>XKziuSzam_GDwU#^DFJ06J)hQSE0;TBg*}id|Epr zJBGi2+xUFH_r2oq4rh*5HYzD;X2BMrGOf6o#@0xyXo9%I^Ayh-9@$%&6)b}pA z*gnS_-lizXeWPl0>F0I`DHO={{FL8%s(=Xuc|M@)>}3~-`mG%>mWN;gYIwxXGmhJP z+PI@Oqva=j40ixNbj)3F%Z7xCV<~jPpMCV9=4(|~DR|La{k0|6(_ERuK@xXy#bZ7e z?3Duh7yV1Vyi;M-Pzv)SWX> zj_|BZQmHp+P)ulKXu)!7q9ep8N4>U}m)?-iEL$D77ATeNm*gVT;;!P5Ov%w&x;b1t z%UC>pMw@xL>3DNaoF2o6&qA>E@4E7$VefR)z0^)z&gTi@e}CIumepXRqJzuPg6;A3 zhgTHQ;L4GR)y`wSo}gkOb6g#W(kBB-YpxLYB2OYyFt87I4H>#2RL=5Dty`l*6SCQ9 ztn!8bp*s3mU3I#;KOgPQ`1VdM8dL3v|6i0!1}e1d0Jfjdb0rk^5ki!rs?qpK`%0!O z8O^@x(CQu+@4sX2BroS%(<(x_nGr*4_hDpzS;iU^Rw^RS#za`@Lu~703nwN;U;Gh^ z$Y`_p(?qiAzel_c8fY~zK{$e)3}9J(3@QdM+z(d__Nyr?({mM(AF}9^9IUj8`IwO#2 z^=7K`5@?FZDMczb%6<+0;TO{MhsSQv5vQY(E-lg z_{_oe=0A#YGNJkW71wh9?+Yz3Y)1{oJBE*JE(2LzAuBssI`~vUF~@LiL1y+~aeBFd zF`+_Lp6=?d(SUP{4l?f7DObp$jmTmvB}|s&2PT8e5)oL0MG9`OWls1AIv69zC4#pp zaXtvD1cX_-B+d16mStkl$WDJ>9!GXRG<6pWai{w&jH)8UJeWjzjwr4RYmg-cuC4@n zvRx9sj$k~>;oQ*+4>`9wcjg#5f;sQe*t$3d8%W-?nkglAeGkCd9-3%@ zaaZ|n!C^)8WnYEhq4Mtods$T)1p0bVSLZH-Xsd$U`rq*}#3LBdL|%AQb%`L_x;rME z={C($Z}wBWB-GRUZKAQIq5O9^7?foo-@Zw~(qO|HMs6>1#srjWBCHa|&*fIVDKGE6 z(0=KL^C=yXy-y@YJ)0d0YijikDf>!5d8&N+zWkd4?}m9%N@eBR*5AJj__ERa7aAf@ zMa&zAtu2jQmwD~9Sjk$({^24fSKknOdm%WNbSMrND66QZJRb>^M6D!q0az}iG;Zev zy%MsjAy1T))xI@7cmvB8OU@et}3_1*zb#AvMo*O za|Dn{cRv)mR%X!dVm;Jy<}T6f5-0QBgUUm%9J2FyZrde3jZm#5)+&`z+B4*peV+tx z|5=HammxxlU>q96HJz4_8|S$9_u|%QEexZ)0yQ%~LcJ-jQT}OFdoB>Lr&_6k&x8 zcxaZ(#yjx0AC|TvOkycxRufO~>X17I|D7q(M=eQ(^jL!pb~;kJa24O)Mk&p1hMAN9 zfq_k9oDG+CEFbyUefP1tvI^&D4646x;s&9DILJtJqjL}te(DJ%HMYmP#3zTQ2SL_I z$0u4vu{h*A;lKGNo295YaDT@MArxgQ$q$vvwaK9_{5;viNP`-NaCx&cdw2)>%cdzB#NCb zgO6ZuDHuAMSN1Qf^t5pbfF(!Z+OIU?4!zL^z(y zOzvn&z}fiKh0!PAjC1?A233ZpKl*x-ka(G$s*-|CjJWu% zf_S;5NN(Ga8(uuU@j9EvUJL$(XesLM(ZP3I)CuKj)Gjv`-99>C?bGeB_6xO4M}#%K zkGifeE?CnlXKLFxme`10xsIOv0@vYfP3~rZ=;GfWg6iv>#zvJhFJ$`o^p?7n0iMOx zoHf=bZA`c9_{b}E@hDfSsMmcyakhkZ z^%z42!G36Gd1dd52Fx{2%2QN;Qm_N8?xi;Y_r+Zbjl{;CZCFNivY3Wxscs^ZYagT2=e*wv<{= z9*f2M-{?^nXZj``gfUAQr0EDnO|fGlLI}CVH_&|s!TT+Pr+gHR^)?AjHS|C`5eOx? zd4!+m{5Mo$?pt}_$)7RP@lA~D7Lsjdzb0~Kpdn;U&<3Ty6}*-I)gb*-~h4iUv5yoJZWOPd5UwL37;}&Tk zcUA)fAGU=L>+z~+zYg_iw89^Mra7mMhPyg}D9k3%43BUeE$yM3 zuwz&6>=VVu00!pDil#fTXJF5YZ^d@vC^cf%O1Qf^mx8eRoC==&z;ieSXj{gqGsZ71BhPC;ICYvoFKxQ>5PkO zKdKcpYL&35;;p)cp&^**4-tVJHaw^r+7yt$Wl%{Kj#G4#8DOvMFm}Fa2H5P`Toz%2 zm2$%M7wjS-jG7n!!1Iw>u{S&=6u*}Sii^wt`%VPAjwnKK=NoERWekybGD<17LVi#s zygmJ{)ShjCdJ5ng+-Lt#7M&pXXvB∋K{;qm246?dOytEu_S!{!uwuqjJ@8{nDC8 z_{TbVG`O-uxtrL=?H|0Q>L#`kp;Zj(yKYoiEL)r+)dYpTjrFEV=jfR0ji_QomDaqU zR?np?PSBvc-cZYkr7afk_(OqE%pC5vEb4pmFM5X(tWvr48q%8oo~e3VA^4weHY$9% z^Fv@0Jb70rtz^gOttV@*rD!XnUz$uTSQ?3-VkJ=YX?0)W&(sF-yuMK?x}UZ+@#3ep zsNqA?OYn|ktzuNYl^OLwhLk^%({Vh0EalgM*Xa#>;&N}c*$9<%(5!Rf07hBQ0?r); zp7`-rd6t%h-n-z^O;rD}R6&|;`D~DSw;L(k@rJ5aK|NaHa@t6B;1P3;lpqP%2!=O8 zSot~{n??4sw?RFjH1Ze<@|Y#60g%>4*8I{Wx67Uv{ph-IP`;7MT@W|@B|vqi@21qG zPC`s1^bwuXToB*tIcI!%6#dqX~;51@~Yq5f1^Z!VHB zyC|%FxBN?soLpOQ{E`oNJ)N|2Gd< zQLYbx9)Z2ps-8ZR)*gEJ7sn+fQ){b~No#?h4|7u_fF@OxQwyYDHYMWliy{ne9{&;< zQNj=ogOXxKx?d~%KK#BLpk?Q=#x{)?Pswxr`CCl6wYypwUBqF5#TagZ2dEjljs`q# zD;5BHI9=!wvBQ02-ZpktC*(XyI8(%#NYXx8b~BRPRS< zcKoB`StWECQ||3wo{8jir+e*x7UN3k5dgaAn276hhkLeUCm zPClH7Km$B^A`hdZZ^PwCGIYH$tCvWgXp9UKa&N)Xx{q-^(WGb^!y6R*t8Z_5gKLx- zCm*{WM&|S2g#TpZ+JS@FW(|b%jrjp~l>+Jr_u4^jY8GtL*bWrzs{_d&fl2K#M3(W& zY7&wv`6qwKf8h;#Hp;!mljF0UyPuipqroMRaK(e&#_l${uR#LPTik_p^*wOgGRg7vDwPL!P=Xqk^ZJRLt?0aAP!CtDr>1!;!j0p%Ab&+}M5 zvI=};{7ZN-+H+*C3l9+${``&7Z()v^edfLWDnz&eHg*78Po(?omlFeX*{(yaRa}NN zki;5s$^hwkg-hWJeoF9%{cr0x^|kIGW{GA_@~-aEiM3*hc*x9uinoT+$m_s2$;J-F zOLp>-mKE_yOF6W{P$f+N0587bX;hV_^x6_8OMWBTxAjPV1DOV?+|>;^`UGJ)Rz|4+ zLYR%U&c}&o@zVY3+)HqCj&%~978bXo6!zs0(%8&K11U|(#1Lge zuf%k&d}B5KI1=a$?g9T>FExuI|b;#XyQdCaWd0|bnDz()s+8j-(K zHgIM_CpA3#^D@Kc{VElyT#7(|5F5!*jcWmO9n3sV*)$dLM_Gv zB+9Bwz?Z+q#nb~XY7M#*rr)(woE}I4_c$Qa7vFD~q?Q z2tSV$HKG^h#RS4w;_6vX(_!BUm|-pnliKNd zmZJ@kM4ou&^>Pzb+QmS8g@WDC^T&>DBJaS{YW@wi-&A-JR}(8aL#t6yw5O^%wU;Y7 zHR-GCEg9TiWlhCa@P`-Qd9a__l!%gp=h01+gJnzf-Ud@0EAbId>G2znAC=y+qut}? zO9fq8aJJRl+%_6KHo=~|as%259J~<9J<#uJ$F(yTwL=`6DRSa*&&oK6ipn?&LXMV3m;GfLV zlmVHhraBZL2?g7+fYxFl;2Cd68FTil_*A|*{I)EOYle}C49G4>eTj&Zs-_QJT(W23 z;Wv!gYQks-D9wS^I#Z1E@@AwYJ>{l5`0A$#kT>;PBI^b^EO{lm6-jm))mv{ZouL*Xawy)f49ygv zB>C|ky$vthnI85vN3@ee8cCdt|0Ok(IH~wl?CQoK!{VF$nsY6Dug(LkgCwKMOYxsb zLvN?8DVT-7$Zs#u>1zL~xDK+6to~9JaXNJ&lpwfDJe&E9g9)4X!Y0n?BSDq6P{n@o zvT+kwL#yHGLWqJnuz^>jv8iSwA>neyycclQUHyC(EhhmuUc!``d)3F}XC?H{X7k1l zO!XR3`QRDP_YBo7cP$|eB*P9&2*Qglz;kMrG70~?1b2uv1>}`oX#NjR9o1mdXO@-k zTXG-D-dY0L5P3HW`fS{CNE>?l9kwk@?4k?*F_bcdzX!R6VcBB9NuyQ`mmv$~fVt|* zHBLW)htK;TIOpr!}$D@J-K7J5=+3t{= z<*Zon$I?0wQijv}w-`gtpW7^WgHU!;KMX|1OSdfGaW42+G(E~r0VAznXtv*jfkVk5 zt0eT=u#E(A+XCw;Sv4Sn6nX)|9)CAu%PdAD7K)s1I1s3I2R>rwHbWLrLYkJH+8x;S zESg%9B)`RL2{WDs?>TC`Lp+T8$scU6iucP^uDz;Edcf3P7L1x zEy_+bDdQm=E&B*o5jT>giKwkAW27TENs!S>mZO7;A|C{IizDK9?gAd>tvs{8>}ucx zdij~8X_j$GSI%ZQpC%dndb?Edx%{I}jQ}X)6U>XJCcf=`*a-*&EsSB zT@2pn^KPe(51dn^0lo8>J(fzKpjQR9GO@o{Y+-~&*qX4#hbY|M zZFUcb2bce?xX|;IT6UC*9zy+l=M|;Te{`bewT_Q*m#xc8h>2${b1l~c#(87zFJ`)D zgRvZ?v4ALVPf%(T=59i-fXn^SlEybskHd>Y#d2G=1a)|F#m5UH6^R1DW;{}Ul9eq- z2wHAm(_lkbBFynGfxhQjaCR>Xi?@U9BHkQc>wgaz;#U)b?XfQ}Hr?#)9A>jhJ@ET3 zjTf^dA>tB!Bv>yr*IY0t!!n0K0+b*t22%)b^yzr4!Ms1${c(Gc-(sN1UHByCnwG6% zB|p74X5vvL*@U9*w_n)LUeUoFMyGI=V>Aqwpq?!|Uw&J821f zX{1CZG}ag~bW$T zfZte7+!wzNv%a`ewnFpah+B9`|Q967IB0rOrsE3VtA$izx)#s=j254j;!@}+z%*xn|?;X zx3+z?K$GqDS4(g)HwSzXTqpTFaeZ2Yb9;N;d~!%3JP8Vgc0tIK`H}F3jEFX9tzoLE z8AC2HwcL6FlZcZiePMS zY3>|5j`?+Jtvszdz0Y)MP@qRN8&#O$ar`v+gW$Ii48%hIWA9w-J97+N4ZP*PaYZ^O z*RDhLpsIahHfj;g(-Mk2?eV)~t78Q1evJRzU`5FhGI(eV8pa*=QY||y@43P~;A$0) zzH2g4s}bQjh42f#W)2nFQi3cZgxzlfF6!mNvemAi$`jPTDlDavJV==TF92i`*Z+{v z>C)Z^i(A7B6My?%RB|h~8k;L1D!Y1i5`K2?n)%oMKhg|PfUT)Vzh}|m&HZ?f{nOqW zGTra0944Vd>yq?n^FLm3Yx!+#@^{OEaHLPPYbb>39qWBc{hM0AQyx$SbIb7m9!t_C zt{(|7P}Go%f*50sCHuZi*|9z{s~2v0Rwr$l7Bg!7icc@T>M;;`6)Y+6`nEZva7CU- zYv3L^ghh2i)JgQ`-J>gnTo89bPOZzs+tV)C z5Xa{G$g7wW76%%5TceK#chX=Wj7TF2hp_I{k2k0sACb3x{J8MCB@l%B?OR&lzVPq7 zk2`RKD3#VtPchNK{;&0a|CNWlgj{G3S=6KeI2u%W?=bDZ2v1Bf%UJZKQLKM(!5=;z z6f^yR%>B)*b^o7~H61#XpNP#T#owNtqGt|qLt7QPr>Z9@kAxK+>6l`X7m%U03G!ZG z8nrTzqr@)<&BHOg)mU8aRYzOKK`+TMbLVIrlk=<*-8d$rA&EktSwBhfXcE6xRif&L z?ioaCH5ez!4hH3zP2Kj!5QU@P$&15SpNFNT#~nTzPb@a@CpOR+Cy`f3mhHXaibC-K> z7)xmPe)dk!Ey(zZxTw5Wh{E(1or4Lbzu(sA+QUG=QI7UyH-Z-{uQ(bWXVLEJr)ax9 zZz#_zB`Il5sq^381Q%-ZQWyB&aCMMV(^vvAS!foNayy>Jmcf_%8f<$NO_Uus+f3d3 zRxw-XVS9t8VwK#l_Z}r22|SSm%1TMK{hdP^dXh$w!u|6ZNEEwqnTjf z1CrnN>ibhpMx9Z_kU&Q;! zjlCWFEy=}^vR!cbTNlRx#K!*4F9yD}5KOY0fGY3?S4RbVAORb(I!5@{iyn>Px1Ctq<{Fg(QjkjcMx`hC@B z*I$!Zu7E3TZP_G?nw%jpK>6+i!+D^PtTuaJt&ju!W$UFq=4l^LHSx_F&)G6uaVY)+UNM)pDVkc z1-t0K7`&XRPFBFE@b06#_njV;y`woMjwGC=x`8)I==oJOy;~`>JW~D8n6!%6f&)yw z_|Lq3!dwbFMxf+0UawI;&l`;YO_KVHcEFu=bR}pIaQJKPO&se}&txS#Oc`{>Mbzro zQ7|Jr{5%BUyS}|*g=oFco?MkIhJ^(g84LIYcD=g!pHFabufc>}u$#YwfdMuGw)2Gv syI`JCz_9iIqyIPjf1_jHJ&U5xvfc&wKK_G!3Gt1rq>@CrnBn*T19WoliU0rr literal 22898 zcmV*KKxMy)P)GA*oAOJ~3 zK~#90?7eGa<2a8rS_R5ZdUoIc|3}Zx#FmIUA3#u)>?D0}CoSx=J&r9)vZNwz1%Q%p z$RUS(mq<<$AOt}qH*dx!5@~PjWcn?qddMN4PXsii2?D@|I`sGR^*izwKo2?Okk=$E zNRkpDjkrsFs4z3%H8l@Sc*r5&Ab~5AfiyJ8asB+}8*DoBRXIR-$RXb#9ebll0_0G| zTyzG{BnWbN#k^>CRJGvCh_q0EB#1W=hy#R& z9P&-#lB2rnf@R?>X+W3&f&ySD24jHmJvl&l$RS@Pf&?v?7hS6sr$ZnNEl((bltfXO zI2j7?HEF^Fgopg~vL(2@vJJFozWTLt4rUAkZHOeHn&k-@jI@cT!YS!8hdFx4A#cj9 zKPNe9l1K=ss*A2OF6wDODG*3NWCJ6epu@lL*;sl;@!b>P!5uy15C9qT1Q3xFN^;ai z^Ng$D4oAaks7>{FOv9M~qM$tEe~g8s8lmlojvjKzS4nC#0HDhk%!}rVMe=5OqQgyW zK^UPEVhF;{d^VIo9hoPe-D9d*WaL2Uug6`bsEL{uh%F1>`JU^?+U@<`Dc-f!aY z0O28jr;voaaa;l*j=JDFYj#w^1Q1;jim;BOK;hu($uOPxTsQ)1Wq4-*_P!h-Jmjwx zfvw!OqRzT5x>hXx;}-txmS^a_R>G93O(H;+iRTkf0OX=EXf;Tj9!0%}9C9m?K$^=d z=2@4pKM8Ajzs7}WE}z3mb0~s0ElDVZLOkK=j57eq(HzK#)9}a>9`g4}S6TOnW0C-3 z(R|hHSkyc~soAOP7b69Tl@`-o!uEeBKAm_9UAHYV%;Uc&2M7=OG_uJetWfG7uPJdk zylSah7R+PqI|FWPX+W;QO}5W{bI2ga7)yWSJI?z6;US+>bia5(f+}j&vS5*_=xerp z5223g=KZNEf~r;;Ce!$2ZhwIAkiSv-qrYXIt%-%M#^A1sdBI#!1z)LW{rikWJo^_z zHM%61SCBAUk0-g)BlxLTaR06xAUxz_%iYLFkE(E`l*v`ExXic$-Xbb6!6CGEO#o8s zwa-CFa@9o;Y%(jk%N77d)lygr%Gc0D@5%wfLq4`_qyG`}WPdZdzkr%GU-X}6!8-}d zJbg>~r6M(;GEl0ho~TtYO{YR*V~jGA4-uO2ui>V>AqNN#`PdS9x%(eUfGX;&%c5CQ zXgq?H0TMmRl3LF~0Dw!R3GxN*qEJqRMSHbYR}m&FVInH3qXN@+WF#)A7PARaXU!1yHOas?8>e##Og$XP4gWki{bmT+bIe_24ETv4Dw z+Rl6`n10Y4J=$9w^6^AHt0#&uQmR*7W?UVdB$bY5*SkyLu_^-b>*3@LZg8U zTvo_}?6<}iL(Qp6Lob;%@MEwEr)T?TXd!c$qlbK631|RKWn_gOgGshvUi@0Qc$$|~ zD*_z+xfc3Fs6m&z4dCyNX-mt?My^@>bzeF%l>&C!P&c##w(z4dMXd zAsBA{^ z&5@q^eg5GA!b3iav@#+|3+7puirV#Dw>En=F95^_B}tOg-AS4;3jm3hipOYyDl6yZ zi2s2qQ!rB1vm;|}P+!&D@V*=%Jmf=2Yi(9lXI&O7jb+9);28-#(K8co$w_NXd?l4u z1~HcZHk__LA4yPjRn|pl-)bp}b~<#x0J?&EdYd%)201`@$U{jBy+kAW;eCRrnlHLk zEEx_7qp^)-X^>idLI{GxE4&KE(}|g72rf1R59s#)S8FiCWdU5pXvJW0C=Zjhg=%O3 zY|Lc5H;3>wIY4;GLrJgJqp;#IN&y$l-a0Ae#zIy?tm%YK(T*k-0_;RuOC$*1N_HjE zuwjHcqU>UEk~Wc+g-)b*&Nq-%hvQ1|{lv8cgoiwYWZn-MNm=^~RxGow(GMG0cGT+T zBT&O2k`6&p$!k-T#SkIT$l=1{N;0sA&(J4r#_r@rMn}HO;=B`M1jf z!b2WHGCiJAm6l-eMazP@nV<=nP8|gV*d_-Uqgx!1XdFVIKz={BAAloyrCb2wTVc3% z;Kezjot(lE9rA=<)7kJ^Z&Fa}0!UUEA<$0HUUMCp!~jUx#M6XHVUBwGqdA)5 zJAUv1!b2WK0uurp^`gsyYePVyiLjn3OoEyRuiD+~B7kM0l`w5LX}eIPX+BCIWvZGN zFJ?B;3NR|QPJCP7Tgzac+*NW&4>&IY#XSx_J*M<`>>bs>|!}M@pR^M;b}N+Z=I!n;I|(j zJmgWNDy9NPQ_xNUTWMvDm%`N&b%z#_fxv7OnlJ*m`f9zD$>~+@B2h}D^tb0Bwi!$S zGA$us!uianiKjJU`a{rL<#9onJY68d%kkg*aQo*WA6^#Bvqv5x%8}N_*jqkYBX-Ia zlujdB8N_O}ZXS%4PA16Zt~Tb(NEr!8ByJ+&hI*@qcyTPjhYrTIhHeyjuL-~$1?F>}0f{ zM06RvVGX3Awan&tiViFUA$IRmy0sl z$xf3MyYu4{f#Pdj&<}Z7samdx*7TmS%sm%o7*`!Fu^m7;nKAWb)LU$NH#MPHt9un% z3+-2QSgS)?IoxZ18tKHRGoK0za9h>!Gv%>B7{!+^pS8?BM+WA^a^h5YJN4!#2B;4C zeX?ko^|D|Ir9{H9$tY-rA0T*@Tr8x))>uJLT|nc5Aha&p>Vebr?y~m`fFbwTUBMoG z1*EB^1gEw<`~p|7%VU|NQ8NXl696#^YL5)Qb3&G*6Et1Ykz92A(`tkFl@Wjuvgg}9vI8{{uk}r}=Zho?xC!-XeC|z|7M4ZbrL#%Y>iHqg( ztGnP6PZLUa1YaMIdVurKOTPyWubOAPRMjMpG1Xv8I}NCi9I9Y+1hwX~v6Ho%2iP(Z zlDA$=4l~%4IS!y_n5k~%4rmupQPpC$+wJ!A`_he|%D+qqoWx=Hf9;3lTY?-PpQw^0~ zCApof6y+d6AjlgrPoiO$Cc3mN@~Seiga?--8No9v->IiDje=^aFbSHbViqd4aYPCG z&H1j!ijM9?u8UuLbA`ZSV_uI1r}4986o7%xDz758}xyEl6IS?(nmnC)&N7{vp3vTEVTWUUgY83$?og ztw4!gzhy&;DzvWHXv?Y8=`uqNjVRO_-FO48V+vhs@0mv4PAaL(YkQ>3Kuf|K!XoYq zc(YyYPJz=el!pUh3R~KSm{=B?YXOp12(*3&ki={Ca3fAOMItc+S%(_@Gve~AuCuP= zV3wXG2fR~WVd#NB#b#Nvo7Lbg|4!i zGhIPV6Jeb_+KDTv09zYvXo1V484L&b+*TwJkh3>^B3TM)5q<@eH`Ah^=(SSKfjl%} zi>>u*P}sPm3gh1}29uZuP*wfU>!SJv=fZH+TWVD{O)K9}dG>FGe<@0TksGcJ;c zF_H=4}V-5p)7I>x!7Iw->j>*#<(q`pr*E3c*THub^umZW|-iECd8Pua2H9N zV6?k;EUPGx#TG&{KJ~^O-d1b0I8BWHJoD){m#aRYCcF{BXoY3sR28(t=5}L9JawC1 zfK(%d{WP5;TGRHV4FTei?~_I>jQ>-+s#jeW&5qi(>CKh^AXS$zFM`Y_(AE}0k*iy~ zV?%QKBK7ilTOG@>Xuhw!wI*-7#Mp_|?7aUI8dHv9e|&7>>BRFGrTIPb0YDg9>txfj zp8gA-L;on9{IF;G2cl}QO>3<>pY1$_fpNg^XGm{5orb0sEmvI}%O>Qwu8kQBT?D`; z?hE{~u84%x7%fDjZl^)nZ#Ks099-3#K5jE4nu*lgrM>bi)}098gfij8KM_;^03eK8 zRA5hb7W}_@)k>hzcuTe-L06B`7Jss*sZ}KALigJjyw4-e=xCSEzpm~tx>WfWdzx%YJB8z#eaN>;5VHXYzGz-_9oQ!T z);WO@GINjMiXm!+deX3`<1=gT5(zu?=AROBmQrJww$g7o;DTYAtivxWec5|n+&}-! z{fEtb;<@m&i_`oz`A8HK8qMr~r+-cnL2eFU6A>}nIC{5c&jbLFbgkF_Z~4F3=X52H z%*FRhM6J~dua{ZZAX=|Mvvk`+AJqyMXk=Mql0AbT5l*jI7I(N!C}(ikpdFOGp$U9J zoduzsIi1MH+ip8w`_sH7o!rKvX~I)MY1r0V==~M)0ivTRYn!0O>%aBCi(dg*g3Yt_ zNWd@+ou=+WTblS!`SLV9l}7kIaQK}P4Ph3{7riW)TXt@B44BpNF>s*(bu@S%=jt{wk*|`$XWHdpV%tBp0}U|Px7wBqw~!FJ^eW~h>v8Bwk`%v zaw^j^o&j9zwat=jYW`i5prVsQ_>F|I3zdHMKc{-KpptgOtkaYQixngeK7uP8f z-RG9z)oEPjz*5NnQOaymBcr8}2`58Fl z%Y;9PKzt|=BJ=p9aIy(_l63WX-FxY2UTe_G9O=I-yGdbYBO z#Gnn!$FI3m@5sjjAu=#015b8Rk)#<*zj*4o!nS!}uisq=aOvuE(4n5nlhKAy-w`vt zEB&%$v=iRvMue3CjMuOkqwXrDQ%we+u|^+zkl?z3#v_5z=R$G_!wBnF?h$wY-9=Qp z_I1bwLn#qbjpFY=nZ5dOAWR_)cDAz$YW;T%mS%(?aMxp|n?+I5jJYmVz`2|YEL&e5 zsl;1R#zK1w7F8`(%g}XKT^IF>9U1fFLX#^D^CE>FeEfxf%44rNGxz~!^96;(YS*AqlR&K4w2hUwI4D{W15moFg662Ve!Luf>_ zK681M1S>R)3`Ac~yV0AWmBI2Hh&2tQ?Xjrz97)d-(Hs6b+->B;fG|AnO_>)#u%P^N zdiJ>`4- z2r;tfL>r^KTBwry0$(&u#ipLti*Xa#ggY46+32ZEQRCbD{Pw+d)X`+|#kilAywlcE zv`-_Hte6$h(mtZr^x_|d(S0&Lt`tvgI~N zI@}oT?!EO*I~US3InObAIUC)67(AD6gxnjwP zXk0vIICIS@WPmiX6bN?pbTSlIvswl8dKRly?hdg;^(eDR1=hW_QvyelNhFHF$mI)w z9JN+BXjTfc3$OqWifIPXA7zTk2LhpxbMFydJ2N_3oA$sz**d~FsGcN&2wT8-st;1XP zQI&WxIC8CVM$hI;P|fotIf16EnaTUSw(g~Y)cx|P-z*;pgf~UhLs3hZrRPjqEIu?^ ze=}t}W||yYH2(*Xb}GNMw)z1j5!MNtaMeZEXkxDw7-J-IxYl8$wjOHHkfK?kiBx8f z8HKmc(ktL^1D+k196psmG_F}&6{6mo?4z*J_n>jV0%(6WN8jZGfe^P!ZKPNLF!F3C z6_-@y@8B=Kwk?bjH2eJD4Dz4J{tT!7K_r`HwLe|HXr47Uh0@6oEwBk>3ODma2t{fJ zu6c+RxkUNV1PJ{Aby zl2{Cl_B=gH`mg@?m8{sYw*mmc=X$*?#_72nI1H{fP_ZnyIxBVOf+$VVp3w*h1r=uC za_2n>1z5xCpjn!ftpg!NZOai`^{#r>-64-;23Xh(7YfnmJA(pa9)gXM6Yrbd8MgOl zUM)2wBw%eqS6WOZ8^%T3TG-u`cSA^0>s-J6T}N#wOQA3fpP+j_d{oQ5bc zUderhHNl8U7Za#xx0Q{R0Dv&Bs?{NsLMzPq@>%f`B`#w`2F>P)E*S1mm3uTkG&}7q zP4qVVYpG2v3-C^_JK_9<=bv^de@s456~+6~^A>_?t^dyd&3^SB&Q`BHOwayJa2fb~ z`tm$I4-+r`s^&DkY(*FSH{+^E@#JvayF$?gmn;)OiG&E1vQ}vkjW#iTPOYYG26Wi+ zhtUZifkm(KsLi(^yG4&E-@A6%@Z|Q%HkqJ_=QE!tK8gl z+#2?KNxM+Zq$ClY3uD|8R0?B+^$H^@DhHAGro9^-F#`KUv9wc%lHj#o6ocxEJKNe& zq2=cZh{iJET<}<-?@tH9Ay!WET+UJ?E$Xd#vJ1)FehQ$XUh1XL&Y!vN>F!lf)pEs) zH!HNg`Towdp_@i2psD~g1P;et8zK&0caN-J`hymObGOHM{k+lkI6MjY{t4&l!4QZ~ z1;W0BlIa`h<5{KZ2)n`jtQ6&&ry`j&5aD^`aMF>m-1E zeCrkIOo?Vpwwehmv@*;XY#Dn&$NIbNZgIf7~vo6Q9WP*HqKC82#MyNv2Vi-H* z#MZm!p-}iqK&W*2Iu83sMmv|YIFJ@+Fd8p47GF=IP00c!i zbir&etrP#g0)eUB0wAiWi_EMIk(aiagGTjLOuTNHU0H#d!6M(l%s#eTJD_o6aRTtR zulPZdi-v+Ir?L~yM$7hYzu+oB*(baus~ro$c-YHf9HfYrXQy zFXt~0<MZ=7mY9uXbH(YlWYXV>eCC0pL`RETJ zpB99>b&jA}`Eq{d{4)Cz=Id(+%(XUcrc?leUzZD@r_$hH8#6R0G zLpc!bfk7IJ#a!JiP#Ug&vUno3acT%;<`Ey}E`3@M4%ax7^$}SSeEx6I(jT!`?)?U( z-2`*_wO+$^8pm3sAM~gI1aN2dAA+7j#d7saRO{Yu_v&A}x7uZBZ-lyQM@OnD1DQiX zI{7qnl^QG*Hg;%Iw3+{BSr{J_H*P>XWLO#w4dul1$OQVDDDQ8RPYl94LfEOCp5$1t z_`)p$5gDa>E9Bsx$lb5YmEco32Uma90uQyoHW|Vg>z_!)7$>c&dc|eY^=%f>dq>%< zXJw)^jD?{{n(a-8+dV~K1ac6R*N~X))8VCRYAOJ~3K~xfLi_nn9>h-_t ze=qft^MHYbUw`sOO4PUk&_EtyEJdJ2(o#ioDp-*-WP${lSfiLQ z=AT&$w6Ob)n|K(L*cv_}nO)g31F@<7?Jgn!0tKfhewn!PoF20d=JT7Qw|-8QS6|#~ zb$54U_n(#X)NQaK=-phzwS{fio)GHG@&cgY5Z)8k4|1~y1ZL1tdZ{mq7Drv5+NLYN z>ZFG`*!vHfU#70I@`5?sgF^~18eU|Fw6&okft%92ls*&cEe7*a_cZRU~`sQxG-BS!wTlJ;bM8tIUD0Z_J zhX1p&o+>3dmTSFUb-9TQ$5sM(Q}gvzk|=IhyS?R5qBRo?=vRg8P|lKkXakvTXgc$? zW8kz|(lOIM4O9R!^e!?xcX$`k`NQ(LLAZv?T)udn>-Ab^&jEB~(0lhWv(@p-{YdMh zu-P8&gG) z$%94BfX@xWo-lCu?DNZVsj7fz)|tN?C#;TV_H3cM1DUZXsZg1b>DYH*9>s3PUvpKi4@R_!Y;P9T2pGt-(x;h65twsjs}u=~ zSD*q5DiHI%SSFi_*<>e+m|#Z(_Hmt_V7Sddc8WGMzX@AB_mizN;>BuybR6w%?Jx>-%X`uP^@J z;$v&f^GJ`4{f z@R})~5td<58;CpZI*@(}OfMd|N&b2yaF5m-%w3mkNi`<;vNwiB=Brw}!~} z{0>^@PLsc;BG(6TbaRF!KiMK-@P>V?)SHsz9chuvGTLNQu~3z_Yx!2c^|v<2AG|eU zsmn`!slmx!&p%@v?JNhYas**d2dqXx{G7~Bh+d<^udJ{}12sc$D~Qy1W5%^L%kPTJ z0cV7%(Sli#i%7;qTaR?>o#x%lvcxoxCH!OmGx7ZAqhennpVl0e{AGT*)Y;)MML3Nb z@X@@8HJ9A~BRF84E3*xavb1^Szql)dBVk+%H_M8KpEv%V^>Si^L#j`TQm@J^U^csq$*XmV$C?r^joBsv#14;In5 z$?pUnmB>j$F-B9YLN;p?8OT&m>#fZ1HKxga@yF}gFFOIkCZ0|>8_J^vU|y3?2*P*- zUzSUi%Uakw;TLgCGn60=yVneN0}V0kwo>kKe~2CS_8;7_7BM_M>oM4U!)E?=q&5G;~ZfGmH`|R`8uS;!&>`|c&_S?lOU+1iM(w~=so zm7@)K=}Op#1*;pMM5BW?_2&#Np4iJ@u(`xd3wCEx{mQI(8?XI3Vbo9(fse;pdR;!7 zPuLJRzg+6Y%)HSRV>K0==H+CkX*$8oYhC6`MU`dynS1fHx2t=`q+$clYJPUBOh7ir zY+JUTi({<@@_}RzpyYeq)*@}PX)4pnPG!w@v^-$-dac*1Ut1Kk?R4|27|~yGEh<_Uh8y}cuWZ^KTydO7+g|G3 z{a6w2a6>us>4YbvNuI9m2awOE30*$d>vefSDYduuirXfdO5t=mKb7g^fR)K;FV}w? zZ-y;2kQD8eytcF4wvvlJBWQfu1a~R=9OXbvJ&uETYOqdrsja~2>X;U#$ z3n$Q!%5BA7UKkTR4|nIhZv9mW@aRkfmq1K7PtnQ=cub=9Yx1E%xDORdn(O?sTvW`> z%{v)JkU%rH^YhuJqIC7`d@6HMj&M@&x)9H<^{4r5Ya!svH2pTJZH(t^gC5<`TYpRj zQTwww9(Y^K0l_cJ^-`~sO{Ek`^D^fz-I&BT&fR)eeFJ5sPw&Bkj8CBr;uJ)frXlsG zZezO%bv0JyG%Kg%y$`YGa8P&jmj3>b&xpFJyeWvxAt-ol84R;lvKX#l#Ie>N)rw<2 zfHM5hAl!(g>vFv;mk7qtlZ@D%c88JKd~bcir}NpbwW5y0eVN&dwq*i?xxwbpH=*6FL*ZY<0$tt17x5T#4l>I?;kH{M(CAWSvoN*ShIO7H_I!;cHXeUa+o z%e7t?Ey_^E_H|$ zb&G-^X__LGObl7eb_WHO0HJ_=3g-jJ#|0rqWVn1@uCvb`tF+_x38Yx2Vo3`PY8n8V zF?z!8JeIcI{X@TJqNX%O^y-f8eB49Bir>I|Y1Y&C(l0`|tK?*C~o z3Z}?8r9b_V5QvWq!X}d3>&tQpzX$-^46iLLni*w)+#S-I=W3yBc4#)z)b>`6QPWKb z@vd|_TZ`2E^2efUyKmM4Ju#@258BbuNIw1XcSiaWfEigx(%s2j;<3MucupcMd`J%@ z_c?Yl7BghRMZrhnxW|@WL~EI`5l%R*YtRP+An?&aD9GiP<+`YPW|IMQHg^|m)qPmz z<>lo+cb}%y`T40#6Fl`r%XkU8Ge2}-TdqMt;I6J)12bP~TYjaC3`~qq`k-c-dkAcn zk@X}y4|8+6{mMs!Rw z*U#Z>vraeo1a76=8MJgnM}LLHs<{by37ECKEH9!X>AXP9m-X?^3GOa=efjU-rPheh z%-3s~CK*YdFhnZL+Ug-9fHew~V8he3p4T3Sap-hTT8y#BGk)X}yaMTr-3H%zNPBG7 z1MPTW!){;QsYPHWQa3I+rc(*lUwqLW63v7*jJjh7a!2bZ(^Od~Pcsd$%LO5N#bk^( zJ2hFiw~?8Vv_>L!RL=HXcn5?>boAFsFBGV?Ual`r_qbi@2ZjZ>>Cr#}nCIEGMgT~9 z^@x`~QKgS~#s+9=VZky6Dt0FXc*Y@6TUH&ly`?#x?l`>^+W34)AS0?{54ClO_PlR*QD8@i? zqiC?n&ZnDFi6c7t>m=jqjYz_(di9o*u$HnKj25MjM-<`&EztGadRwq9?QY9b&L^R5 zw#GGfH<33lcAu(r5Ke47ImPn}Jj?QNMFkwFple-Cwz@R2x;J`P48MlvEs6%ubw_K+ z&2N8_GNzN%HUt)ojMztpYFcPCYWpF1#!C@t60%q;E*g^-ZFl=$unnVaF7}-(&Zzmq z`NXIF!1`Ys3;QMVfk24WK?veRUFOD79usRD2WO%t+KDWL)8`sMpi5d7NmD7nN&3O4 z+J^Mlmg^0y8ny*FSOo{12usaVXZF+1e|G1yrcB0Pi&r1t-M5o(um}9+b#uzN(_76% z(0U$im%%ks;6J@XvJLkf@{qCDe*1Q({7xb@J@&pI7EC9e%Ke(%4~D{z1wwSUu=h%qG0=YQsppGkDo+zI5rB(Yfd54AG5r2(xefnFJL~k_W2QzMI?H83B3)?$ za>CKNBk`{06Kd7yuMb z1=GiJ{N9ic3BtL~SHIS%z3mpxpvF$*|0^P=(L^j3_pqghC0c=%X_@C@UTk=(zfO;Q zn~Zqbn9R-EBkUxc2yl53F2d4muNLWD6%6-#{AxIMkFmATZfi~!Rk*x8>um-uo!(I8 zNL~v{;Z%s69Fc9aeB{B6nsen5D3d{5-?=0(TFWF|I}BPg54)Dx5Wzr)3|3GGez*Y4 zYx40x=w2_&ORaSXqOEB?1JA@i$?)AgsGKJA+R7v%_s(K=S?Z~{g>GS@;-}+q^xp0V zRr;&)1fHn{{sPQukzVv?mz(8cznkxRGzC=n+7vbQa5Qgm_psil9-AR*l@K9ij1?#Q zJ!jN2!qSaulR>Fm6JTqfWjD*!ry22}XJU=8q13`1THl>;kse zqf=+RqrM>!O+jYOF4oJOOw!z2bd;eO<@1s({qw$*kZLymip3WB9TtWDpF#iaSJ3tK zglQcfH^K{Q|nu7rO% z&7xl`u8S>BK_>hYT_y#1HdMO3=bLrYFq)vdd->CE?W>yk#ui04He<~ojG|3M?e#%w zjf}IPPa{flXZeI?Nyw&tR|=wEFCl5CGtQH4oc3NP944mVs@~i+H_%v&gRbkpVTUV> zDsF4_?%o^Xz?)0Of~lZTOf$C86K^;ESn>zDtqlWHH6U={yhj;B1UNMV7vLIsY^)4= z0dU9cd~$(jfDM78TI)CHX6?Q6`q#;wAm%Gtx9J{%P?E=@@*5(8#cHY`R?OG&mq(?vf z?wjmaq_?z*sS+p?C$bpq#8ba;_o;XvQ2uPo!wm?5{yHAC3cLU_P?OQPelb^7NzvhJ zf)h(VtG)R$UxD1OR((5pBQ&~$RDV59K20Kh$bpWqU8ya>0&BLZs@IzHPXiyD-A8z1 zczpNI@j!Ve;MLP?rI9kYyG1=j2MyIt#4Ul)xKYn*;4@kDF++p$7VWk|D|tYb6VDSS zV~fN{?Le^(>GtG5ru-RmG|T3 zU-ODEJlDVNZoY=P^?ayl@=_EG&b9g3Xu4|qr67|;>J!B*ibWb4ROrogQ~-8CmsW-nhX-4GSVKuhtHVy)7c5sCU9?YO%I>T-2jG zxNEb1O!+e)OjmHYrY-7Mfw}!pbqLOl-b60ALVFQ;uIyUasQb~D-L^P<18lzyhp$;4 zaRO#;MP(ZEmNyn_{PJdVcTmToWH3=i2r6doa`~cK-ETUbk^3d#&fm;*LI69G>N}&P z+a>|Ftd>~!IUaDePPj6~GfI@JEm2^$D<9pYUGTeZ*e{nq6`1KMCS?G|p{4nLSXQH^ zk<8E@Ql+}fN}+r$`1Z}NF!`r(_?7lP2{V=ArC?=n4=ScTeI0>m+TGa^kjkPI3MyW! z)#|lIceKs&wlV64YQ$7HZ0L&RZZfp_i%DBUk5Xpk<^DW+nz0jkw`DKueQHP)fQcu| z0PJ{z-NOD9rYP`7QxxMfwqyWi&LkkWILr;51NP9iWCqi{t;47ev-PHq%lj=RF<|d^ z+NI<9kg%dMxs@0nsI4Ek{YEfq`pK>*-K~3Vx1Ve(DAm0BvS6t(B`z)cSATI31KKc& zR_+zqeJXWc9MfQIg}Xhh+hE01aX_nBl15`P?azkNc22NJ368(NxrO{Z@C*4fftl_T z0xm7!3w6!WA;SgkD{^-Wg%*#H00Sr3gmP9P-BD-M1yxuahzXp{wplgD7^)fX<-Ldf zC;i&j-)}1dQ6^23SO9dRQD{8sy@_~d@2{RKb3gfTV^N*!vee!!Kk^I1bI>6y)>@(9 zs^!y95;SYgnA$fss!DI2@6G8Y<*>6)X|M_BCwqR+@B1VH(mxv=tdZQ0j@i`NW+oP3vlWNCfAPye_&x%G>EzSNqfrax zYjt`XR&ncG{+In?;nAO$VNz_$B7LY}1b|zm-Ym4-dbP9|vKp_v#7vk!3if1oz(|F2D=4 z08z@4b8_QG?64Q=!cOgfG!RNBW4I-3Tw$-QGv;dxnYQ0Ls=@Z{^`p&I`FYNN--&MC z1VCy!xlQ{)^*8$D=dP3y%aT-8ms+c@q?bIg_BsmxNkzN5Y^UAHG-;1!w(!-K-ay<| zV=o&7C$Yc^Z31nF{CGsi(3!%kstfCaT2Vd6=K%mL;dfUh;^xn9#bNi+-oCUnm9t9p zIAVW}huy3={OKTUFQnRX{dG)xgmvnOK5@}rw11ZW4E`wlB#bv@NGGD*DYX1Z>}SI1 z#HZ2-qIbRaPbfdK-sB>9Z*;=Y(4?6=grrJbfd#r^>|D?rx~@>Ppb9pxk0s*~4eHx~ zUefd9yCE^~y%g1oy0FgZk6CQi_s}iF@kakhgyw4yXvND3R>mUvq?fHxmS5~DkVG4D zNGu*xbYq%akU|yQ?ycQNv~f*C#HGha-#X>ceAx?lJ&6qhr!2+p#KzB!K>P>@2hRmJ zmuVZEi!d_+ftOT(+}tvC9Y`>+cLIwzam{Akb&l30I`^1wGInJshH9%y4C||duRjH^ z0q;iuxxEbStgOf;+0=Lc=Y#-^v@#hvSFgQg8otcMGNy zpC+D|8g_FlKehaz<=x$}Q7{pkmuPd$%)FJa0?cideow@1Z8%FA%3>yAM`I*ttf&V!m zPz&(V>`x3nj(W(1Ey!2C$j)PN!+W*1ukgQL4+yo7>VoBpS{v2o)-$||L%jaxox|LH zmnbKdlNh#~weeA{p;3#6ZV{**`{es1>CycW-wz2)*8){O*Jbf4ICJ#%W)UKz+4k;I zv>UOFCtomyRJY7U7OmzkW7&6ZYdB-RuwJk@HqTfPG=?UdU3Q+{8;{DZjul`;Im?P- zfS5qSBPpNkP+$!(?v&w=_=mTUi$+hoeFoMIcCv{;^)@NcWCEBclpUh7^!J-iMB{`E zqV)v&a5%v{)gj}>bB?i~Xv7i`C%?7`vhnxLYQG zI6BN=3ra;@HooE;p_+Ft&G;M=HU+N$7)qFX*=yo*J#02s>lAHd9P(GVNaJq%WhFVW z0H@iPm|@&c@<-f4wHqlC1=9)VDJJpUWFxle-%l=IqX{+Ksry%C*vSH1skvq0|7GUfgYWWKWQfd-1b@rv6?JZY?0RuV1$}QX zw-1{c?4(GvWPnvI5t8OQSJfe_+bmQJzN}Usy=REK zalalRHY=D;c$#<`DwV#^8iANkhhLD`fqzb8SUDL5hY>-XSFo8xC zjm0KR|0g^bp4P4YG7s=pzBVv3^kvEsoU2sg0{^eISZWB22_Da~XL3TD7AD>!xcxzS zGnpa!jCw&`+V8r3PVT=$OwY1u9IMUIca<7bZ?NB(i3(uVggum)mCHX<-qnP;mU_f# zsxPZ&GPvmJkPiXt_PB^JswHkI7EWh=DJ=K~ui^8{yPD7;4w0)2c(fpX1+LHqS^z-3 z5~6@-lr!vv3{vJDdaUanKcp4Mtu%CRt)e5DVGHY}71C|Kod0efVN-byo*h>!cBNo7 z+0A6XJ+Xa?!ggNVZxe&bFo}Q`ugO>&qnX`~NQ*mp-pbZ@hBDddgr{h|jTU$De$D@8 zdEY&|y+$orhd|&Js`+>rSiqAwfrTtBxwkr959()c)0-NKWdIn;Br6brg)XQjAV>N^ zctAzvi8iI>HXyL0Rlx;OH&7p0`b8m7SU@gq!Bx+y)5|U=I6Ji@rnaaOkf*$$ixEm&;AqmL$z+KDsa)c4DkJ(Go*wQwUFZI`L$j zviaKPN5?|+m*enVO*pvO@j?r9fua$U00U3p1fCge>CKnN@S^abD}Qrm;&rxX*gPzK zDcXkmyKWmWtaN_gizjz0{Vo(uel!3880SeuK~%Q1cMEm9@oV4xDYCUT(-Q;>ZBbp{ z-fiFdAF^NqQH@;pI~-2X7oF&bAbKYeHEP0zi{5*$QKEdl7wdn*NsH@@A_aBcT@WM zkVIVC51rY(&R=+~E3CY1;TV*8=&XTVWa|(}-Q2Hi?l?FIPbLbKTf?(jVho#_#`!HD z`W%HV-8)(dZ`L2U+E|m{VfuJ=S$R`hybATW`?>NDv8AzkhSG;bcS^xK;H|eUW0swV zXQx`hCWdL{TdpQ0H_T`^vc;CLe`NWLhPGUahrGv3Vm_q3xs#p4m8s3|?TXSMVm)i6 zh2Ng1a$SAdZrAV`vPB9`Ff8B*WG@$~Jy(6Z*yfzlN8G1#_kHWYhw9c*&qp^DqQAWs zAfVtJF>|d>bs2s0JlfQGRG3J=DO%*+1f_D@%j^9NGQe~=3Ph~|EJ#0 zlKaHOTBSiU=E1G0((&V7+gb3--G0e%{5FxhAK6DQ4&=Oro;k&P*{frQbpv1Y^n~;P z9JCtl{;8v|h8-@Gikh0a&BD*{hVJZ8H8uO&iQb@ z+1(nVbY)$Ut!ilIJAxUjy*H+$H|9$6adlIZNJAb{?tW31Kg0)??W6X2*(Sc}z+lDE z;ryd_CA*50eFd2+|bPdAe}WvS>7i`{tHwVGb^ z(}|W0!TMRbtkitUXG<)#5FV2i7HYHH!rfC=AN%b~7B=zr8R!P>al#^R^zhY}`^xbkGl8C(bTzB)wUP43L)2N0~`4DHyGZ z3jmsrio>*v2CA+*+Jy9)mtJID_H<3Kz}d5(^Zxpg2)3Fun3_Y@)HVn?wDi@! zc-z(E%9Uv!(r38RU0weX_~T+{?7*_`st&&^UvhuQ$nf!7tT`NJc#MbHt#CU!uP0k| z5X47NA8!KD9U!LbIzssbMP8bUDs*`kKVCixo4@zsP!W;8!Z6f*h}!DpNl3?k`~ih6 zw7yO4rk+W#IQaaH>D}$}S=vF{0p2gxGw**+_z@2Qjr$1dEJ?S83^O`s*3NsVkJ?dje?$4-xRjRDi zQz+a(_Zy?|iZ{tH`g6m4f6l%84)ABYD+%o*Og7pPrJ=^$l@vjkczipV!uNS_H2yf7 z2cxL16K=lXvkOou*~ zwK=xf5SSOepL;g&5)HLyr#q?B!@ATBem)Wvw<#o``Aw`L&W+yTZrbTY`0taE%qlW) zdcFmcZ0ALIs6!1{eCS_>Rdp0@{Nv-xQ(|-y9fPxFQyZRIuo!=r98k}E`a2Wb0(fG> zZ2Wx`WKqLUJc?Xpgckg6UX%F5hKK)D2YPA{fNz{O(b!dWDqRaRuC0oTtinUmxQHzd z9-5!&SBo}YAL+}QyGH6U$$H3G3)c=?#XtIuq~O%i750^hEkA))QG7kFS%RULk_iee z(k$4zb6=m6{v9qLV3MWz@$Van>rqgKxDG&6EjN;@{ z-PrNz+J^U-?1RbnG&q5c{pZkUZ^8a1)s?K{$OQYxc+awz-v&COY=$8 z>^cTw6T;Dc@$VoK#)xW3C`RP@RBT~Yy4h4Lg`NN{ho3=*lABbJDQ_S01CLD0T;!#* zfeEU=2YK-s6p56RrD8loS_MTL^N3Ggp!?G!0mT^NsoM_IB^EjKK2B-NYr5{tlJHqw}i9)5L zqt{@LIT(-T@E0fc5%AO9!2ql#q3MXhUv7p!+_m&{C16?AHR(;1^c3knHU%6|77F?U) z56I)mYNLis%Xgnru)qnNP)P}zznzl6#s4fyA{H3BI9dW{mfeoccXR*YA5P2)rp#iM z2Vb1=Wu$C#0VF|ZRcNJZo<5>H`2Uy!sR$VsEZkK_3X|VNnqYzZb z+rt3q!j-R|4*D7`c}a?&O7a$UE>d;09J`mR&nW3iq_|7njt+M;!1v3iYd5PjB}v7m#dsy5$YR0My`${w-d2fF!dv3QXl;T zkmAv5S1z0oSV+j2q-=XDU6iK0`iuM$uiK~C0SO-)M_O#JqiI$C=xrtofEY}6_~ z__Y<&ewOuzQd%Xw#mSAP;IPQlyUd7z*4p36|-hIaM z`D#B}Jq*lwlg^I@Did!y&tq$uR+@wN9qUTCaTEBZPpxWc>uxI75T{g3z2j`+p8qS@ z0!V3;qa;q_xak>$cD$(FvWt0RbLuJ#G7-=TT5w}cw6W<6kZMo8ob{hOcSY}KCM|!) zZUp4h4(Y2k!ls|_sVBH$#*OUqk!Vg-{X;Gt*PTn5`*~7AZ-E@zHA%L$RBUd7gVON8 zX|YRXA9ATMKUGDNOT|A6`42ni(pzYSI=f>*O!s)iY{dV4)Ycf}G6WMc1rGIGO z>|SK_3~E$cLdj3u>}?Au$Rzwc{qu7O`Szxoy-*L>8nwn{r}*Mzp;^@x`1CUQI*4Ss zJEBSoxonl_imoUBk|xhZvu1`%8#em1q?E8Q0k+ly#!@thsjkedeL$z{aQQ)Ow43BS z66Kd?K;n5JtSl^Cjq%KUE2oVqe(?{v&82*rV6{{!ZbMIwuvAB{6uKG-D<#x6 z(Mwx_2*%?GylpipvwsG_(uUKz*f9S#SuLNWv46*3!EzxUW^_D3Q~%t*6Pjas`&m52 zmZ-@E;h|-;lrG>bNtV4pTqzg+HA2YM&m0?G!LUGb%JHajX_o}H6wq8p^uhW;5^`!sp>~Y zR=7yKi;CMH@6*(RfCn}2uD7k}WB!o$+nrrXG@~(aK?%~O-D>)o84czDs@5WZ6;?u) z$f`*FiRdW(;{|JhCayNwdR1uNhox4bgAS_t0Rhs)O>&zo6 zIexkuS5I8Pfinz@16>=dqc>mVC)U))pXkBAVCX2yvq%xiDr9Xf;#IhCjOif`DGf0j zm4yUZ=iW?NE_CtBRLQNBCCLGTgRSnE;s%x)q*&eKDxCc#FM;J)m==52K`~_k{Vfma zB>3@YyPvE0&=S1j?mc0|7wI&0k4dAE+~vazud}&sJSh0!9XVEXD10k!+Fy;f`F)`k zJM(8W;nYD^N_S)rigk-Br!uYd)zj0}q;tCq1EkQ4Fy(No=JAR2D4s7Fs3&8|j8CHd z6)@A_*bOS}?=_NqlRs!QBs;h1wBsj{b>>w^918zx55)c!%Q3#L` zen_lD=>a)z&W($oeeOVRh$l48QH^D7475F>ETi z?#1L)A)^@b#`5A8002VFzFAK0_6r&Ou1>g3@|bedScGAOC1UxfA)mA6n&9A;_RoJ; z9dDZHgZw?j4jt>oZJKGH^A^Ph?J5wcLsqlOgkIHsisIe2zC8$N({4=4v-^S@uG91< z%N>veIgu)uN2OmyB`5k`%F*D_hU0Qj;b`;g{Gs^IAh8lRdSvO<5jm_l-oNOD3T0Ws z0^lD7{-VT2ZO}3A_38yTEfB6EGhAK?id_WD1JCOiqCh~F8=x0?nxVcx zN&Ae~hfD=KD)d^|ulD8B?8$D3(#>&afIQba+INI393HCU6^CZ2y4oY!LiX9CJZCDI z>-8tHFG}4cKaA0a9Jd4otAgQ)Jnjnn15b1^9TCX^gM=K+-nE+ZKz3$40Z1iktJY|6 zd-K=qe_XUjdljcayiuNcT%MDZXt^+PE&@%xEoc#QLAn)wc$5Q4ox&zQ_r{5a9xH_& zF=1vjuDz{#JF`YLMxqmi=h-#uJqD(5HiNSOdGPZ@eele0#g%6fRw;s-7+ImY%E}r1 zFYOuf?L-|NVeN?}3wSzelrH|C*_^fNaX6t!*{exxVmX>ff!O_z|CP%B6>b(9ivHfz zwYxDlfHOmFcnCsFkcejBcawf5po=iSC7Z3Oud^_E*~aaI^Ru(+FSB*7cLY7|4EuT~ zkd<=sH3AcDwhy{tVA3av;fzn1mX60MAKyMtENbvAugnDM7Dl)j{HpFO+}XHg!0>Qp zbrvL-7UU)T2K-=~_$Xv9fA%ss$r_U zYDP~LtRW{{ksgI#%*_9|aVJeg$nx zrXxSpP{G#RC)$;s4NI!s6B6QijyIuoh5xaTRqQ}bO_N%cuPM}oIgGF86?;$jLxkIq zszw>Ek4nH?hCZhN=!+o`iXMZkB;P6#v2mAgWzI48TVS)djRe^gFcw@8olzVyC*I9Y zNVfF;^KV(BnlSq`fi%jl-<)b-jc^ClMY{Q|qr>0gK5e4m{oM z<*6P~uu}$pLcw@@=b7N2e1woWE<^aRX=u~5lAc8XmKSpuk-8%j^MXnL7%Ls@D|_}@ zig;ILkB1Sr;ChrwjzTAOHAxpMC)8#UeQVr^HJ^^Tu%W@4{}5G;JgDZeyIHm4YSVrY z@Op#IO`?-M`hyekhEiPReO%Q>d7nqR)9LsND9D%6pvyB^QiwQ+X2)Vi4d=1V-o%tn z3`EaGt%Nh<`CP!1gwI@JyF`GTanjTZgB*uIZXdEU7Up`?A5gBJD|M;7JzFoPI3;YWU zo^yw5o(R>yu&POc6tQFpIhQXjw_U~$<}-Q56d(&zFJew;WbzU4t8&T_yts!9`ZQ=! z6!9ZMNSIIM`S~@YNR5oA?JQ*?`-Xp`gj$6nQhjY{#BL|9#^yS)EJR2Ztnke{>iethngl2H*hg6a}U5 zVX_DnMXJ-RB`SHGKSzZ3L5NhzzQxFDX*Z5b+ay}pO3hW&WU?2~ciXxoNEM7H0H>`? zpN>T578no&&OF~tbGS2;PvCxOnxmf^L#j)v-DxzSD{~MC>}U)23>fTVC{EmF6M{-24CNC2rY_&O)~JANE3G`E7DJAE#yxr?%JKX z%lEjon7Ub<4L2~_w$iLSI^z;xH7Ri_j_R4cE5`#5RW%R^`>pYRV7j-Q&_4W)kQ-9| zda8#MY3c#Zkb-QOn%YrVs-CT}yN85r+Lc-{UAwH>3mEUa+7vDw?wN&!8vkKiN>C&J zs9`S%r5UXt81+>9bV89LQv2@w>gQvipv}#EM15u7aia=Qj{%=Os(s>O#Ev{$cr2rQ zt8~ViijXz=5;y`q*%@3(DSU7afbyw=NpZeW+z14trV=R)^_Fe178Oq;cGq*0wDh8n z_4%xZwl_SZ@h0P}-i3{Pt0{(<`>Ep!XXA^Za~TaocsFW{+s2W$ySgr$?Yyd>?cV%# zC)I{gaHddbZ~dg1VyExN(c}?>OiJvx8@s{hPH?$Koo?(E9SmjkWVu$i8+3uNx$dvx68ZD^#ZIsfQO6yjf{0DJ= z0YJ!+r{=SIF5~c-C%(^aR&s5L+x1o3k50$HkI%F*lcK=};S2`qa$rVXuruJH);lBe z+uX^S!%BH8ODt^XhZ@f=v`$(cC2J!gCj}Vp{X}KFepA2hDO%uH6pK@PpA>JS4~$sJ zgoW`*=m!RszTa_jH;))#j348zg@0co^~=4|?G^VkEB(d2gG}L?Ksr`{*g2ayoutsA z5gi_YToXUxE`k|WRB^cG26F0H@;@BVFsG*{5y}1}kiGI-v9?FId#kd6bo_smLcKo@ zF%O zC$3_Cd+_edU;5hQdvYPP0W*o{roiWX+Mjg=7esN zr;b!Qyhcc&o>x^CvhvnX1ZTN3nLN}Gw{sKoYs;#q8o7IvF_kfK`S>5Yov1E)T=>$w z+b&6cu;@JZ7ssH_pz4w8yR^dJXgtkMwr+T8Dy}YZ$=7d}8#>;V;jv%PMHe>8wipIvwWT4^JEsBoLU$2@pdO-{6xgU z9c>Wl&=4APh&fO3!tcIMhMW`1-)~^jJpX=QqsDXGY*+e{V(yh%IF~g-Psf0=Gs&rWZf;X=U5@^yJW^`CcLf zngFt)lQ|eFhVAi?=~gD(yj4gqyT~8S5zP;~ruMxM6M>=FFI@E=gzJ-DGE*}2K0Ky* zmHDXgGE*&4H4Tlw_t5((AbWfkFjd112DC?+xu9O#Fhhk^O6_K)Q(W}blMReX`J z8E(ly@N&xbiPN0N(+&1!;1h3Js)8fF2>jm|pumbg7BVeBG6-^@!Lwl%i47Md|Nq18 anQ~+#>rj=^*JyTR45g3ipc+}ru>S$YS-

v;t literal 0 HcmV?d00001 diff --git a/data/pics/ox16-action-contact_food_overlay.png b/data/pics/contact_food_overlay.png similarity index 100% rename from data/pics/ox16-action-contact_food_overlay.png rename to data/pics/contact_food_overlay.png diff --git a/data/pics/ox16-action-contact_phone_overlay.png b/data/pics/contact_phone_overlay.png similarity index 100% rename from data/pics/ox16-action-contact_phone_overlay.png rename to data/pics/contact_phone_overlay.png diff --git a/doc/en/CMakeLists.txt b/doc/en/CMakeLists.txt index 4ef2eb3..52c0ed5 100644 --- a/doc/en/CMakeLists.txt +++ b/doc/en/CMakeLists.txt @@ -5,5 +5,5 @@ include_directories( ${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) ########### install files ############### -kde4_create_handbook( index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/en SUBDIR "kmess" ) +kde4_create_handbook( index.docbook INSTALL_DESTINATION "${HTML_INSTALL_DIR}/en" SUBDIR "kmess" ) diff --git a/doc/en/index.docbook b/doc/en/index.docbook index eee1bfc..e5a05b6 100644 --- a/doc/en/index.docbook +++ b/doc/en/index.docbook @@ -1330,7 +1330,6 @@ Mike K. Bennett mkb137b@hotmail.com Michael Curtis mdcurtis@users.sourceforge.net Diederik van der Boor vdboor@codingdomain.com - Richard Conway richardconway@users.sourceforgenet Valerio Pilo amroth@coldshock.net @@ -1346,6 +1345,8 @@ KMerlin, which provided the original inspiration for this program. Kopete, from which the old popup balloons and initial MSNP2P designs were taken; they were ultimately replaced. The MSN Challenge handler from Kopete is still used. KScreensaver, from which idle detection code was taken. + BasKet, which has a nice close-to-tray icon screenshot feature. + Amarok, which provided the inspiration for the custom crash handler implementation. @@ -1353,11 +1354,11 @@ - Jan Tƶnjes (Testing, documentation, web master, project management, etc...) jan.toenjes@web.de Dane Harnett (Web design) dynamitedane@hotmail.com David Vignoni (The main and yellow/blue/violet emoticon sets and Italian translation) dvgn@libero.it Julien Joubin (Cartoon emoticons) jujubinche@netscape.net Christian Müller (Default sound theme) cmue81@gmx.de + Michael Anderton (KMess icon in Oxygen style) mike.s.anderton@gmail.com @@ -1419,13 +1420,16 @@ + Richard Conway (MSNP12 support, various patches) richardconway@users.sourceforgenet + Guido Solinas (Pictures in contact list code, contact client info, chat font zoom) whereismwhite@gmail.com + Pedro Ferreira (File transfer thumbnails) pedro.ferreira@fe.up.pt + Liu Sizhuang (P4-Context field support) chinatslsz@hotmail.com + Scott Morgan (Xinerama fixes) blumf@blumf.freeserve.co.uk Laurence Anderson (Original file receive patch) l.d.anderson@warwick.ac.uk - Alexandre Peixoto Ferreira (Some internationalization fixes) alexandref@o2.net.br Lin Haoxiang (file send bug fix, proxy connect code) linhaoxiang@hotmail.com Mohamed Aser (internationalization of file saving fix) mohasr@link.net + Alexandre Peixoto Ferreira (Various internationalization fixes) alexandref@o2.net.br Choe Hwanjin (Some internationalization fixes) hjchoe@hancom.com - Scott Morgan (Xinerama fixes) blumf@blumf.freeserve.co.uk - Dane Harnett (Web design) dynamitedane@hotmail.com Vincent Fretin (MSN6 emoticon definitions) fretinvincent@hotmail.com Damien Sandras (GnomeMeeting developer) dsandras@seconix.com Tobias Tƶnjes (Guy with a bag over his head) diff --git a/kmess.lsm b/kmess.lsm index 966c3b9..5c53275 100644 --- a/kmess.lsm +++ b/kmess.lsm @@ -1,6 +1,6 @@ Begin4 Title: KMess -Version: 2.0alpha +Version: 2.0alpha2 Entered-date: 2005-05-05 Description: A MSN Messenger / Windows Live Messenger client for KDE Keywords: KDE X11 desktop MSN Messenger diff --git a/kmess.spec b/kmess.spec index 90a3bce..f870c02 100644 --- a/kmess.spec +++ b/kmess.spec @@ -13,8 +13,8 @@ # PACKAGE SETTINGS # -%define kmess_version 2.0alpha -%define kmess_tar_version 2.0alpha +%define kmess_version 2.0alpha2 +%define kmess_tar_version 2.0alpha2 %define rpm_release 1 %define with_debug 0 %define doc_files AUTHORS COPYING FEATURES INSTALL NEWS README TODO @@ -67,6 +67,18 @@ %define qtgui_package %(rpm -qf %{qtlib_prefix}/libQtGui.so.4 | cut -f1 -d"-") %define kdelibs_dev_package %(rpm -qf %{kde_prefix}/lib/libkdeui.so | cut -f1-2 -d"-") %define qtgui_dev_package %(rpm -qf %{qtlib_prefix}/libQtGui.so | cut -f1-2 -d"-") +%if ! %(echo %{kdelibs_package} | grep -q 'not owned by any package' ; echo $?) + %define kdelibs_package libkde4 +%endif +%if ! %(echo %{qtgui_package} | grep -q 'not owned by any package' ; echo $?) + %define qtgui_package libqt4 +%endif +%if ! %(echo %{kdelibs_dev_package} | grep -q 'not owned by any package' ; echo $?) + %define kdelibs_dev_package libkde4-devel +%endif +%if ! %(echo %{qtgui_dev_package} | grep -q 'not owned by any package' ; echo $?) + %define qtgui_dev_package libqt4-devel +%endif @@ -178,7 +190,6 @@ Requires: %{qtgui_dev_package} >= 4.3 BuildRequires: %{qtgui_package} >= 4.3 %endif - %description KMess is a MSN Messenger / Windows Live Messenger client for Linux. It enables Linux users to chat with friends online who are using diff --git a/po/ar.po b/po/ar.po index af036f7..39375cf 100644 --- a/po/ar.po +++ b/po/ar.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: KMess\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" "PO-Revision-Date: 2007-07-06 22:23+0300\n" "Last-Translator: Ų¹ŲØŲÆŲ§Ł„Ų¹Ų²ŁŠŲ² Ų§Ł„Ų“Ų±ŁŠŁ \n" "Language-Team: Arabeyes \n" @@ -20,47 +20,40 @@ msgstr "" "X-Poedit-SourceCharset: utf-8\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "ŁŠŲŖŁ… ŲŖŲ³Ų¬ŁŠŁ„ Ų§Ł„ŲÆŲ®ŁˆŁ„..." - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -#, fuzzy -msgid "S&end" -msgstr "Ų§Ų±Ų³&Ł„" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 #, fuzzy msgid "Ne&w Line" msgstr "Ų³Ų·Ų± جديد" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 #, fuzzy -msgid "Sidebar" -msgstr "اظهر/اخفي ؓريط &جهات الاتصال Ų§Ł„Ų¬Ų§Ł†ŲØŁŠ" +msgid "S&end" +msgstr "Ų§Ų±Ų³&Ł„" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +msgid "Contacts" +msgstr "جهات الاتصال" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 #, fuzzy msgid "" "Enter here the email address of the person you wish to add to your contact " @@ -68,42 +61,40 @@ msgid "" msgstr "ادخل Ų§Ł„ŲØŲ±ŁŠŲÆ Ų§Ł„Ų§Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ للؓخص Ų§Ł„Ų°ŁŠ تود اضافته:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 #, fuzzy msgid "Email address" msgstr "Ų¹Ł†ŁˆŲ§Ł† Ų§Ł„ŲØŲ±ŁŠŲÆ Ų§Ł„Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 #, fuzzy -msgid "New contact's group" -msgstr "جهة Ų§&ŲŖŲµŲ§Ł„ جديدة" +msgid "Initial group" +msgstr "Ų§Ų¹ŲÆ ŲŖŲ³&Ł…ŁŠŲ© Ł…Ų¬Ł…ŁˆŲ¹Ų©" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 #, fuzzy msgid "" "Enter a message to be automatically sent to people who try to message you." @@ -112,127 +103,337 @@ msgstr "" "الى الأؓخاص Ų§Ł„Ų°ŁŠŁ† ŁŠŲ­Ų§ŁˆŁ„ŁˆŁ† Ł…Ų±Ų§Ų³Ł„ŲŖŁƒ:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 #, fuzzy msgid "&Automatic away message" msgstr "حدّد رسالة Ų§Ł„Ų®Ų±ŁˆŲ¬" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, fuzzy, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" -msgstr "قد أضافك لقائمته , هل تريد:" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 #, fuzzy -msgid "&Add this contact to your \"Friends\" list" +msgid "&Add this person to my \"Friends\" list" msgstr "اضفه الى قائمة \"الأصدقاؔ\"" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 #, fuzzy -msgid "&Not add this contact, but let them see your online state" +msgid "Do not add this person; only allow them to see my online state" msgstr "&لا تضف جهة الاتصال, ŁˆŁ„ŁƒŁ† دعه ŁŠŲ±Ų§Ł†ŁŠ في حالة الاتصال" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 #, fuzzy -msgid "Block this person from contacting &you or seeing your online state" +msgid "&Block this person from contacting me or seeing my online state" msgstr "امنعه من الاتصال بي او معرفة Ų­Ų§Ł„ŲŖŁŠ." #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, no-c-format +msgid "Contact Properties for %1" +msgstr "Ų®ŲµŲ§Ų¦Ųµ جهة الاتصال لـ %1" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +#, fuzzy +msgid "Restore" +msgstr "Ł…Ų­Ų°ŁˆŁ" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "Ų§Ų³ŲŖŲ®ŲÆŁ… اسم ŲØŲÆŁŠŁ„ لهذا الؓخص" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "اظهر فقاعة منبثقة عندما ŁŠŁƒŁˆŁ† هذا الؓخص متصل أو غير متصل" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "Ų§Ł„ŲµŁˆŲŖ:" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +#, fuzzy +msgid "&Clear Cache" +msgstr "Ų§Ł…Ų­Łˆ لسان" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +#, fuzzy +msgid "Notes" +msgstr "ملاحظة" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "نافذة Ų§Ł„Ų“ŲØŁƒŲ©" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "Ų§Ł„Ł†ŁˆŲ¹:" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +#, fuzzy +msgid "Standard" +msgstr "نجمة" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "Ų§Ų±Ų³&Ł„" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 msgid "Cancel" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -msgid "Enter your login information:" -msgstr "؄دخل Ł…Ų¹Ł„ŁˆŁ…Ų§ŲŖ Ų§Ł„ŲÆŲ®ŁˆŁ„ الخاصة بك:" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" +msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 #, fuzzy -msgid "Password" +msgid "Email address:" +msgstr "Ų¹Ł†ŁˆŲ§Ł† Ų§Ł„ŲØŲ±ŁŠŲÆ Ų§Ł„Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ: " + +#. i18n: tag string +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +#, fuzzy +msgid "Password:" msgstr "ŁƒŁ„Ł…Ų© السر:" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 #, fuzzy msgid " Account options " msgstr "تعيي&نات الحساب" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 #, fuzzy msgid "Remem&ber this profile" msgstr "تذكر هذا الحساب" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "Ų§&تصل" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "؄دخل Ų±Ų³Ų§Ł„ŲŖŁƒ Ų§Ł„Ų“Ų®ŲµŁŠŲ© هنا" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr "تعيي&نات الحساب" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 #, fuzzy -msgid "Your friendly name:" +msgid "&Friendly name:" msgstr "Ų§Ų³Ł…Łƒ المفضل:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" @@ -241,15 +442,15 @@ msgstr "" "في http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 #, fuzzy -msgid "Your email address:" +msgid "&Email address:" msgstr "Ų¹Ł†ŁˆŲ§Ł† Ų§Ł„ŲØŲ±ŁŠŲÆ Ų§Ł„Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ: " #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 #, fuzzy msgid "" "Enter the password of your MSN Passport account. You can register a new " @@ -259,40 +460,41 @@ msgstr "" "في http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" -msgstr "ŁƒŁ„Ł…Ų© السر:" - -#. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 #, fuzzy -msgid "Remember Password" +msgid "&Password:" msgstr "ŁƒŁ„Ł…Ų© السر:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 -msgid "Display picture:" -msgstr "صورة العرض:" +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 +#, fuzzy +msgid "&Remember Password" +msgstr "ŁƒŁ„Ł…Ų© السر:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 +msgid "Display Picture" +msgstr "صورة العرض" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 #, fuzzy msgid "C&hange..." msgstr "&غيير..." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -msgid "Don't show a displa&y picture" -msgstr "لا تظهر صورة Ų¹&Ų±Ų¶" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -303,35 +505,37 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +#, fuzzy +msgid "Re&member the settings of this account" msgstr "تذكر Ų§Ł„ŲŖŲ¹ŁŠŁŠŁ†Ų§ŲŖ لهذا الحساب" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 #, fuzzy -msgid "Login &with this account automatically at start-up" +msgid "Login &with this account automatically" msgstr "ŲŖŲ³Ų¬ŁŠŁ„ ŲÆŲ®ŁˆŁ„ بهذا الحساب ŲŖŁ„Ł‚Ų§Ų¦ŁŠŲ§Ł‹Ł‹ عند ŲØŲÆŲ” Ų§Ł„ŲŖŲ“ŲŗŁŠŁ„" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "سجل ŁƒŁ„Ł‘ &الدردؓات" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -339,175 +543,286 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "طلب تحقق Ų§Ł„ŲØŲ±ŁŠŲÆ Ų§Ł„Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 #, fuzzy msgid "https://accountservices.passport.net/" msgstr "اذهب ؄لى accountservices.passport.net" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "اذهب ؄لى accountservices.passport.net" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "ŲŖŲ³Ų¬ŁŠŁ„ Ų­Ų³Ų§ŲØ جديد" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "اذهب ؄لى register.passport.com" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 #, fuzzy -msgid "Popup notifications" +msgid "Saved accounts:" +msgstr "Ų­Ų³Ų§ŲØŲ§ŲŖ" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +#, fuzzy +msgid "Click" +msgstr "الساعة" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "Ų­Ų³Ų§ŲØ" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "Ł…Ų­Ų°ŁˆŁ" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "Ų®Ų·Ų£ Ł…Ų¹ ؄علامات" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "جهات الاتصال" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 #, fuzzy msgid "Show notifications when your contacts:" msgstr "اظهر ŲŖŁ†ŲØŁŠŁ‡ عندما ŲŖŲµŲØŲ­ جهة الاتصال غير متصلة" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 #, fuzzy msgid "&Go online" msgstr "غير متصل" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 #, fuzzy msgid "S&end you a message" msgstr "حدّد رسالة Ų§Ł„Ų®Ų±ŁˆŲ¬" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 #, fuzzy msgid "Go o&ffline" msgstr "غير متصل" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 #, fuzzy -msgid "Show notifications when you recei&ve an email" +msgid "Email Events" +msgstr "Ų¹Ł†ŁˆŲ§Ł† Ų§Ł„ŲØŲ±ŁŠŲÆ Ų§Ł„Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ:" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" msgstr "اظهر ؄علام عندما ŁŠŲµŁ„ بريد في \"مجلدات أخرى\"" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +#, fuzzy +msgid "In other folders" +msgstr "في مجلد Ų¢Ų®Ų±" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "اخفاؔ المنبثقات ŲØŲ¹ŲÆ" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "Ų«ŁˆŲ§Ł†ŁŠ" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "Ų„Ų“Ų¹Ų§Ų±Ų§ŲŖ" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "اظهر الجهات Ų§Ł„&غير متصلة" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -518,204 +833,209 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 #, fuzzy -msgid "Inform contacts w&hich song I am listening to." +msgid "Inform contacts w&hich song I am listening to" msgstr "جهة الاتصال هذه Ł„ŁŠŲ³ŲŖ في Ł‚Ų§Ų¦Ł…ŲŖŁƒ" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 #, fuzzy msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "تغيير الحالة الى \"بالخارج-Ų¢Ł„ŁŠ\" عندما ŲŖŲµŲØŲ­ غير نؓط" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 msgid "Become idle after" msgstr "ŁƒŁ† بالخارج ŲØŲ¹ŲÆ" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "دقائق" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 msgid "Log &all chats" msgstr "سجل ŁƒŁ„Ł‘ &الدردؓات" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 msgid "" "Choose the directory on your system where you'd like to save the chat logs." msgstr "Ų§Ų®ŲŖŲ± Ų§Ł„ŲÆŁ„ŁŠŁ„ Ų§Ł„Ų°ŁŠ تود حفظ سجلات الدردؓة ŁŁŠŁ‡" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" msgstr "احفظ ملفات المحادثة في هذا Ų§Ł„ŲÆŁ„ŁŠŁ„ الأب:" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "نظم مجلدات المحادثة بواسطة:" +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "سنة" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 msgid "Month" msgstr "ؓهر" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "ŁŠŁˆŁ…" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" msgstr "احفظ Ų¬Ł…ŁŠŲ¹ ملفات المحادثة في هذا Ų§Ł„ŲÆŁ„ŁŠŁ„ الأب" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "Ų®Ų· Ų±Ų³Ų§Ł„ŲŖŁƒ:" - +#. i18n: file ./settings/chatstylepage.ui line 45 #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "Ų§Ų¬ŲØŲ± رسائل جهة الاتصال أن ŲŖŲ³ŲŖŲ®ŲÆŁ… هذا الخط:" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +#, fuzzy +msgid "&Chat style:" msgstr "ŲŖŲµŁ…ŁŠŁ… الدردؓة:" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "ŲŖŲ¹ŁŠŁŠŁ†Ų§ŲŖ" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 -msgid "&Show graphics in chat messages" -msgstr "اظهر Ų§Ł„Ų±Ų³ŁˆŁ…Ų§ŲŖ في رسائل الدردؓة" +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 +#, fuzzy +msgid "&Show emoticons" +msgstr "اظهر &تعبير ŁˆŲ¬ŁˆŁ‡" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 -msgid "S&how time in chat messages" +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 +#, fuzzy +msgid "S&how messages time" msgstr "اظهر Ų§Ł„ŁˆŁ‚ŲŖ في رسائل الدردؓة" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -#, fuzzy -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "Ų§Ų³ŲŖŲ®ŲÆŁ… تأثيرات الخط في المحادثة, *عريض* و /مائل/ و _تحته Ų®Ų·_" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -724,152 +1044,306 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 -msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "Ų²ŲØŁˆŁ† Ų§Ł„ŲØŲ±ŁŠŲÆ" +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 +#, fuzzy +msgid "Always" +msgstr "بالخارج" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "Ų§Ų³ŲŖŲ®ŲÆŁ… Ł‡ŁˆŲŖŁ…ŁŠŁ„" +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "قائمة جهات الاتصال Ł„ŲÆŁŠŁƒ Ł„ŲÆŁŠŁ‡Ų§ Ł…Ų¬Ł…ŁˆŲ¹Ų§ŲŖ كثيرة Ų¬ŲÆŲ§Ł‹" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "Ų§Ų³ŲŖŲ®ŲÆŁ… أمر Ł…Ų­ŲÆŲÆ:" +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "الخادم:" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "؄علام Ų§Ł„ŲØŲ±ŁŠŲÆ" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 -msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 -msgid "Show email information" -msgstr "اظهر Ł…Ų¹Ł„ŁˆŁ…Ų§ŲŖ Ų§Ł„ŲØŲ±ŁŠŲÆ Ų§Ł„Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 -msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" -msgstr "اظهر ؄علام عندما ŁŠŲµŁ„ بريد في \"مجلدات أخرى\"" +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "Ų®Ų· Ų±Ų³Ų§Ł„ŲŖŁƒ:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 +msgid "" +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "Ų§Ų¬ŲØŲ± رسائل جهة الاتصال أن ŲŖŲ³ŲŖŲ®ŲÆŁ… هذا الخط:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 +msgid "" +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +#, fuzzy +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" +msgstr "Ų§Ų³ŲŖŲ®ŲÆŁ… تأثيرات الخط في المحادثة, *عريض* و /مائل/ و _تحته Ų®Ų·_" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "انتظار قائمة الاتصال..." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 #, fuzzy msgid "&Emoticon Themes" msgstr "تعابير Ų§Ł„ŁˆŲ¬Ł‡" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 #, fuzzy msgid "Available emoticon styles:" msgstr "ŲŖŲµŁ…ŁŠŁ… تعبير Ų§Ł„ŁˆŲ¬Ł‡:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 #, fuzzy msgid "&Custom Emoticons" msgstr "صور تعابير Ų§Ł„ŁˆŲ¬Ł‡ Ų§Ł„ŁƒŲ±ŲŖŁˆŁ†ŁŠŲ©" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 #, fuzzy msgid "Custom emoticons for this account:" msgstr "تذكر Ų§Ł„ŲŖŲ¹ŁŠŁŠŁ†Ų§ŲŖ لهذا الحساب" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -#, fuzzy -msgid "Click" -msgstr "الساعة" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 #, fuzzy msgid "Re&name" msgstr "الاسم" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 #, fuzzy msgid "Remo&ve" msgstr "Ł…Ų­Ų°ŁˆŁ" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +#, fuzzy +msgid "Web Browser" +msgstr "&Ų§Ų³ŲŖŲ¹Ų±Ų§Ų¶..." + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +#, fuzzy +msgid "&Use the KDE default browser" +msgstr "&Ų§Ų³ŲŖŲ®ŲÆŁ… Ų§Ł„ŲµŁˆŲ±Ų© Ų§Ł„Ų§ŁŲŖŲ±Ų§Ų¶ŁŠŲ©" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "ŁŠŁ‚ŁˆŁ„: " +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "Ų²ŲØŁˆŁ† Ų§Ł„ŲØŲ±ŁŠŲÆ" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +#, fuzzy +msgid "&Use the KDE default email client" +msgstr "&Ų§Ų³ŲŖŲ®ŲÆŁ… Ų§Ł„ŲµŁˆŲ±Ų© Ų§Ł„Ų§ŁŲŖŲ±Ų§Ų¶ŁŠŲ©" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +msgid "File Transfers" +msgstr "ŲŖŁ… نقل الملف." + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "احفظ ملفات المحادثة في هذا Ų§Ł„ŲÆŁ„ŁŠŁ„ الأب:" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +msgid "and" +msgstr "و" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "ŲŖŁ… نقل الملف." #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -879,75 +1353,110 @@ msgstr "أنا بعيد عن حاسوبي" msgid "Your name" msgstr "Ų§Ų³Ł…Łƒ" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "you@hotmail.com" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "متصل" +#: chat/chat.cpp:124 +msgid "" +"You can't start this invitation because there are multiple contacts in this " +"chat." +msgstr "لا ŁŠŁ…ŁƒŁ†Łƒ ŲØŲÆŲ” هذه Ų§Ł„ŲÆŲ¹ŁˆŲ© ŲØŲ³ŲØŲØ وجود جهات Ų§ŲŖŲµŲ§Ł„ Ł…ŲŖŲ¹ŲÆŲÆŲ© في الدردؓة." -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "بالخارج" +#: chat/chat.cpp:158 +#, fuzzy +msgid "%1 has joined the chat." +msgstr "%1 انضم للدردؓة." -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "سأعود حالاً" +#: chat/chat.cpp:211 +#, fuzzy +msgid "The conversation went idle, %1 has left the chat." +msgstr "%1 ŲŗŲ§ŲÆŲ± الدردؓة." -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "Ł…Ų“ŲŗŁˆŁ„" +#: chat/chat.cpp:215 +#, fuzzy +msgid "%1 has left the chat." +msgstr "%1 ŲŗŲ§ŲÆŲ± الدردؓة." -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "Ł…Ų®ŁŁŠ" +#: chat/chat.cpp:364 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 and %2" +msgstr "%1 و %2 - ŲÆŲ±ŲÆŲ“Ų©" -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "" +#: chat/chat.cpp:371 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 et al." +msgstr " et al." -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "غير متصل" +#: chat/chat.cpp:630 +#, fuzzy +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" +msgstr " (هذه الرسالة أرسلت ŲŖŁ„Ł‚Ų§Ų¦ŁŠŲ§Ł‹)" -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "على الهاتف" +#: chat/chat.cpp:934 +#, fuzzy +msgid "You received a wink from %1." +msgstr "Ł„ŲÆŁŠŁƒ ŲŗŁ…Ų²Ų© من %1" -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "بالخارج للغداؔ" +#: chat/chat.cpp:971 +msgid "" +"The wink could not be displayed. Make sure you have 'cabextract' installed." +msgstr "الغمزة لا ŁŠŁ…ŁƒŁ† عرضها. تأكد من تركيب'cabextract'" -#: chat/chatmaster.cpp:1061 +#: chat/chat.cpp:980 +msgid "The wink could not be displayed. The data could not be read." +msgstr "الغمزة لا ŁŠŁ…ŁƒŁ† عرضها. Ų§Ł„ŲØŁŠŲ§Ł†Ų§ŲŖ لا ŁŠŁ…ŁƒŁ† قرائتها" + +#: chat/chat.cpp:1080 +#, fuzzy +msgid "You have received a wink from %1" +msgstr "Ł„ŲÆŁŠŁƒ ŲŗŁ…Ų²Ų© من %1" + +#: chat/chat.cpp:1100 +#, fuzzy +msgid "You received a nudge from %1!" +msgstr "Ł„ŲÆŁŠŁƒ وكزة من %1!" + +#: chat/chat.cpp:1119 +#, fuzzy +msgid "The message '%1' could not be sent." +msgstr "الرسالة \"%1\" لم ŁŠŲŖŁ… استلامها" + +#: chat/chat.cpp:1183 +msgid "You've sent a nudge to %1!" +msgstr "ارسلت وكزة ؄لى %1!" + +#: chat/chat.cpp:1190 +msgid "You've sent a nudge!" +msgstr "ارسلت وكزة!" + +#: chat/chatmaster.cpp:1219 msgid "%1 is sending a wink: %2" msgstr "%1 قد أرسل ŲŗŁ…Ų²Ų©: %2" -#: chat/chatmessagestyle.cpp:302 +#: chat/chatmessagestyle.cpp:298 msgid "%1 says:" msgstr "%1 ŁŠŁ‚ŁˆŁ„:" -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 msgid "Add this emoticon: %1" msgstr "" -#: chat/chatview.cpp:529 +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 +msgid "&Invite" +msgstr "&دعوة" + +#: chat/chatview.cpp:695 msgid "" "Could not save chat log. Make sure you have permission to write in the " "folder where logs are being saved." msgstr "لا ŁŠŁ…ŁƒŁ† حفظ سجل الدردؓة. تأكد أن Ł„ŲÆŁŠŁƒ Ų§Ł„Ų£Ų°ŁˆŁ† Ł„Ł„ŁƒŲŖŲ§ŲØŲ© في مجلد السجلات." -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 msgid "" "The file '%1' already exists.\n" "do you want to overwrite it?" @@ -955,369 +1464,423 @@ msgstr "" "المف '%1' Ł…ŁˆŲ¬ŁˆŲÆ مسبقاً.\n" "هل تريد Ų§Ł„ŁƒŲŖŲ§ŲØŲ© ŁŁˆŁ‚Ł‡?" -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 msgid "Overwrite File" msgstr "كتابة ŁŁˆŁ‚ الملف" -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 msgid "Over&write" msgstr "كت&Ų§ŲØŲ© ŁŁˆŁ‚ الملف" -#: chat/chatview.cpp:977 +#: chat/chatview.cpp:1275 #, fuzzy msgid "Add this &Emoticon..." msgstr "اظهر &تعبير ŁˆŲ¬ŁˆŁ‡" -#: chat/chatview.cpp:984 +#: chat/chatview.cpp:1282 #, fuzzy msgid "Send &Email" msgstr "Ų§&رسل بريد Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ" -#: chat/chatview.cpp:988 +#: chat/chatview.cpp:1286 #, fuzzy msgid "Copy E&mail" msgstr "Ų§Ł„ŲØŲ±ŁŠŲÆ Ų§Ł„Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ" -#: chat/chatview.cpp:995 +#: chat/chatview.cpp:1293 msgid "Visit &Link" msgstr "" -#: chat/chatview.cpp:999 +#: chat/chatview.cpp:1297 msgid "Copy &Address" msgstr "" -#: chat/chatview.cpp:1013 +#: chat/chatview.cpp:1312 msgid "&Copy text" msgstr "&انسخ نص" -#: chat/chatview.cpp:1014 +#: chat/chatview.cpp:1313 msgid "Select &All" msgstr "Ų­ŲÆŲÆ &Ų§Ł„ŁƒŁ„Ł‘" -#: chat/chatview.cpp:1015 +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 #, fuzzy msgid "Save chat to &File" msgstr "احفظ &؄لى ملف" -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "ŲÆŲ±ŲÆŲ“Ų©" - -#: chat/chatwindow.cpp:239 -msgid "" -"You can't start this invitation because there are multiple contacts in this " -"chat." -msgstr "لا ŁŠŁ…ŁƒŁ†Łƒ ŲØŲÆŲ” هذه Ų§Ł„ŲÆŲ¹ŁˆŲ© ŲØŲ³ŲØŲØ وجود جهات Ų§ŲŖŲµŲ§Ł„ Ł…ŲŖŲ¹ŲÆŲÆŲ© في الدردؓة." - -#: chat/chatwindow.cpp:276 -msgid "%1 has joined the chat." -msgstr "%1 انضم للدردؓة." - -#: chat/chatwindow.cpp:327 -#, fuzzy -msgid "The conversation went idle, %1 has left the chat." -msgstr "%1 ŲŗŲ§ŲÆŲ± الدردؓة." - -#: chat/chatwindow.cpp:331 -msgid "%1 has left the chat." -msgstr "%1 ŲŗŲ§ŲÆŲ± الدردؓة." - -#: chat/chatwindow.cpp:593 -msgid "%1 - Chat" -msgstr "%1 - ŲÆŲ±ŲÆŲ“Ų©" - -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" -msgstr "%1 و %2 - ŲÆŲ±ŲÆŲ“Ų©" - -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" -msgstr "" - -#: chat/chatwindow.cpp:757 -msgid "Contacts" -msgstr "جهات الاتصال" - -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 -msgid "Emoticons" -msgstr "تعابير Ų§Ł„ŁˆŲ¬Ł‡" - -#: chat/chatwindow.cpp:819 -#, fuzzy -msgid "My emoticons" -msgstr "تعابير Ų§Ł„ŁˆŲ¬Ł‡" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" -msgstr " (هذه الرسالة أرسلت ŲŖŁ„Ł‚Ų§Ų¦ŁŠŲ§Ł‹)" - -#: chat/chatwindow.cpp:1502 -msgid "" -"The wink could not be displayed. Make sure you have 'cabextract' installed." -msgstr "الغمزة لا ŁŠŁ…ŁƒŁ† عرضها. تأكد من تركيب'cabextract'" - -#: chat/chatwindow.cpp:1511 -msgid "The wink could not be displayed. The data could not be read." -msgstr "الغمزة لا ŁŠŁ…ŁƒŁ† عرضها. Ų§Ł„ŲØŁŠŲ§Ł†Ų§ŲŖ لا ŁŠŁ…ŁƒŁ† قرائتها" - -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" -msgstr "Ł„ŲÆŁŠŁƒ ŲŗŁ…Ų²Ų© من %1" - -#: chat/chatwindow.cpp:1755 -#, fuzzy -msgid "Show Side&bar" -msgstr "اظهر/اخفي ؓريط &جهات الاتصال Ų§Ł„Ų¬Ų§Ł†ŲØŁŠ" - -#: chat/chatwindow.cpp:1756 -#, fuzzy -msgid "Show the contact sidebar" -msgstr "اظهر او اخفي ؓريط جهات الاتصال Ų§Ł„Ų¬Ų§Ł†ŲØŁŠ" - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -#, fuzzy -msgid "Hide Side&bar" -msgstr "اظهر/اخفي ؓريط &جهات الاتصال Ų§Ł„Ų¬Ų§Ł†ŲØŁŠ" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -#, fuzzy -msgid "Hide the contact sidebar" -msgstr "اظهر او اخفي ؓريط جهات الاتصال Ų§Ł„Ų¬Ų§Ł†ŲØŁŠ" - -#: chat/chatwindow.cpp:1787 -#, fuzzy -msgid "The message '%1' could not be sent." -msgstr "الرسالة \"%1\" لم ŁŠŲŖŁ… استلامها" - -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" -msgstr "Ł„ŲÆŁŠŁƒ وكزة من %1!" - -#: chat/chatwindow.cpp:1876 -msgid "You've sent a nudge to %1!" -msgstr "ارسلت وكزة ؄لى %1!" - -#: chat/chatwindow.cpp:1883 -msgid "You've sent a nudge!" -msgstr "ارسلت وكزة!" - -#: chat/chatwindow.cpp:1972 -msgid "%1 is typing." -msgstr "%1 يكتب." - -#: chat/chatwindow.cpp:1981 -#, fuzzy -msgid "%1 and %2 are typing." -msgstr "%1 و %2 - ŲÆŲ±ŲÆŲ“Ų©" - -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." -msgstr "" - -#: chat/chatwindowinterface.cpp:175 +#: chat/chatwindow.cpp:489 msgid "&Chat" msgstr "&ŲÆŲ±ŲÆŲ“Ų©" -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 -msgid "&Invite" -msgstr "&دعوة" - -#: chat/chatwindowinterface.cpp:179 +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "ارسل &ملف" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "Ų§ŲØŲÆŲ£ &اللقاؔ" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 msgid "Send a &Nudge!" msgstr "ارسل &وكزة" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "احفظ الدردؓة" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 #, fuzzy msgid "&Emoticons" msgstr "تعابير Ų§Ł„ŁˆŲ¬Ł‡" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +#, fuzzy +msgid "Close &All Tabs" +msgstr "؄غلق لسان" + +#: chat/chatwindow.cpp:504 #, fuzzy msgid "Meeting" msgstr "ŲŖŲ¹ŁŠŁŠŁ†Ų§ŲŖ" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "Ų§ŲØŲÆŲ£ أو Ų£ŁˆŁ‚Ł &المحادثة" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "غيير &الخط" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "غيير &Ł„ŁˆŁ† الخط" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 #, fuzzy msgid "&Font" msgstr "Ų§&تصل" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 #, fuzzy msgid "Font &Color" msgstr "غيير &Ł„ŁˆŁ† الخط" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +msgid "Emoticons" +msgstr "تعابير Ų§Ł„ŁˆŲ¬Ł‡" + +#: chat/chatwindow.cpp:658 +#, fuzzy +msgid "My emoticons" +msgstr "تعابير Ų§Ł„ŁˆŲ¬Ł‡" + +#: chat/chatwindow.cpp:738 #, fuzzy msgid "&Settings" msgstr "ŲŖŲ¹ŁŠŁŠŁ†Ų§ŲŖ" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "اظهر &تعبير ŁˆŲ¬ŁˆŁ‡" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +#, fuzzy +msgid "Hide Side&bar" +msgstr "اظهر/اخفي ؓريط &جهات الاتصال Ų§Ł„Ų¬Ų§Ł†ŲØŁŠ" + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "اظهر/اخفي ؓريط &جهات الاتصال Ų§Ł„Ų¬Ų§Ł†ŲØŁŠ" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +#, fuzzy +msgid "Hide the contact sidebar" +msgstr "اظهر او اخفي ؓريط جهات الاتصال Ų§Ł„Ų¬Ų§Ł†ŲØŁŠ" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +#, fuzzy +msgid "Close all tabs" +msgstr "؄غلق لسان" + +#: chat/chatwindow.cpp:856 +#, fuzzy +msgid "Close current tab" +msgstr "؄غلق لسان" + +#: chat/chatwindow.cpp:1467 +#, fuzzy +msgid "Show Side&bar" +msgstr "اظهر/اخفي ؓريط &جهات الاتصال Ų§Ł„Ų¬Ų§Ł†ŲØŁŠ" + +#: chat/chatwindow.cpp:1468 +#, fuzzy +msgid "Show the contact sidebar" +msgstr "اظهر او اخفي ؓريط جهات الاتصال Ų§Ł„Ų¬Ų§Ł†ŲØŁŠ" + +#: chat/chatwindow.cpp:1565 +msgid "%1 is typing." +msgstr "%1 يكتب." + +#: chat/chatwindow.cpp:1575 +#, fuzzy +msgid "%1 and %2 are typing." +msgstr "%1 و %2 - ŲÆŲ±ŲÆŲ“Ų©" + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "" + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "ŲÆŲ±ŲÆŲ“Ų©" + +#: chat/chatwindow.cpp:1615 +#, fuzzy +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "%1 - ŲÆŲ±ŲÆŲ“Ų©" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "Ų§&رسل بريد Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 #, fuzzy msgid "&View Profile" msgstr "اظهر Ų§Ł„Ł…Ų¹Ł„ŁˆŁ…Ų§ŲŖ الخا&ŲµŲ©" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "Ų§&ضف جهة Ų§ŲŖŲµŲ§Ł„" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 msgid "A&llow Contact" msgstr "Ų§&سمح جهة Ų§ŲŖŲµŲ§Ł„" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 msgid "&Delete Contact" msgstr "Ų§Ų­Ų°&ف جهة Ų§ŲŖŲµŲ§Ł„" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "Ų§Ų­&ŲøŲ± جهة Ų§ŲŖŲµŲ§Ł„" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "Ų§Ł„&غي Ų­ŲøŲ± جهة Ų§ŲŖŲµŲ§Ł„" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 #, fuzzy msgid "&Friendly Name" msgstr "Ų§Ų³Ł…Łƒ المفضل:" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 #, fuzzy msgid "&Email Address" msgstr "Ų¹Ł†ŁˆŲ§Ł† Ų§Ł„ŲØŲ±ŁŠŲÆ Ų§Ł„Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ:" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "" -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 msgid "Blocked" msgstr "Ł…Ų­ŲøŁˆŲ±" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 #, fuzzy msgid "The contact is %1" msgstr "جهة الاتصال هذه متصلة" -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +#, fuzzy +msgid "Add to Chat" +msgstr "اضف جهة Ų§ŲŖŲµŲ§Ł„" + +#: chat/emoticonsidebar.cpp:213 +#, fuzzy +msgid "Insert new" +msgstr "Ų§ŲÆŲ±Ų¬ تعبير ŁˆŲ¬Ł‡" + +#: chat/emoticonsidebar.cpp:214 +msgid "Edit" +msgstr "" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +#, fuzzy +msgid "Remove" +msgstr "Ł…Ų­Ų°ŁˆŁ" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 #, fuzzy msgid "Web Messenger" msgstr "ŲŖŲµŁ…ŁŠŁ… ويب" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +#, fuzzy +msgid "Windows Live Messenger %1" +msgstr "ŲŖŲµŁ…ŁŠŁ… ويب" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "متصل" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "غير متصل" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "Ł…Ų³Ł…ŁˆŲ­" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "Ł…Ų­Ų°ŁˆŁ" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 +#, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr "%1 Ł…ŁŠŲ¬Ų§ بايت" + +#: contactlistviewdelegate.cpp:150 #, fuzzy msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "%1 Ł…ŁŠŲ¬Ų§ بايت" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "بالخارج" + +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "سأعود حالاً" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "Ł…Ų“ŲŗŁˆŁ„" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "Ł…Ų®ŁŁŠ" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" msgstr "" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "على الهاتف" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "بالخارج للغداؔ" + +#: dialogs/addcontactdialog.cpp:48 #, fuzzy msgid "Add a Contact" msgstr "اضف جهة Ų§ŲŖŲµŲ§Ł„" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 #, fuzzy msgid "No group" msgstr "احذف Ł…Ų¬Ł…ŁˆŲ¹Ų©" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 #, fuzzy msgid "Add New Emoticon" msgstr "اظهر &تعبير ŁˆŲ¬ŁˆŁ‡" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "تعابير Ų§Ł„ŁˆŲ¬Ł‡" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 #, fuzzy msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "" @@ -1328,65 +1891,70 @@ msgstr "" msgid "Specify an Away message" msgstr "حدّد رسالة Ų§Ł„Ų®Ų±ŁˆŲ¬" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "Ų§Ų³ŲŖŲ®ŲÆŁ… اسم ŲØŲÆŁŠŁ„ لهذا الؓخص" +#: dialogs/contactaddeduserdialog.cpp:85 +#, fuzzy +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " +msgstr "قد أضافك لقائمته , هل تريد:" -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" -msgstr "اظهر فقاعة منبثقة عندما ŁŠŁƒŁˆŁ† هذا الؓخص متصل أو غير متصل" +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "متصل" -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "Ų§Ł„ŲµŁˆŲ±Ų©:" +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +#, fuzzy +msgid "Not seen yet" +msgstr "قد أرسل Ł„Łƒ" -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "Ų§Ł„ŲµŁˆŲŖ:" +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +#, fuzzy +msgid "No messages yet" +msgstr "اظهر Ų§Ł„ŁˆŁ‚ŲŖ في رسائل الدردؓة" -#: dialogs/contactpropertiesdialog.cpp:234 -msgid "Contact Properties for %1" -msgstr "Ų®ŲµŲ§Ų¦Ųµ جهة الاتصال لـ %1" +#: dialogs/contactpropertiesdialog.cpp:381 +#, fuzzy +msgid "Last seen: %1" +msgstr "قد أرسل Ł„Łƒ" -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " -msgstr "Ų¹Ł†ŁˆŲ§Ł† Ų§Ł„ŲØŲ±ŁŠŲÆ Ų§Ł„Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ: " +#: dialogs/contactpropertiesdialog.cpp:382 +#, fuzzy +msgid "Last message: %1" +msgstr "قد أرسل Ł„Łƒ" -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "الاسم Ų§Ł„Ų­Ų§Ł„ŁŠ:" +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "Ų§Ł„ŲØŲ±ŁŠŲÆ Ų§Ł„Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ" -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" -msgstr "نافذة Ų§Ł„Ų“ŲØŁƒŲ©" +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "Ų²ŲØŁˆŁ† Ų§Ł„ŲØŲ±ŁŠŲÆ" -#: dialogs/networkwindow.cpp:57 +#: dialogs/networkwindow.cpp:79 #, fuzzy msgid "S&ave tab" msgstr "احفظ لسان" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 #, fuzzy msgid "C&lear tab" msgstr "Ų§Ł…Ų­Łˆ لسان" -#: dialogs/networkwindow.cpp:59 -#, fuzzy -msgid "Cl&ose tab" -msgstr "؄غلق لسان" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 #, fuzzy msgid "" "No connections are present.\n" "Cannot open the Network Window." msgstr "Ł„Ų§ŲŖŁˆŲ¬ŲÆ اتصالات Ų­Ų§Ł„ŁŠŲ§Ł‹. لا ŁŠŁ…ŁƒŁ† فتح نافذة Ų§Ł„Ų“ŲØŁƒŲ©." -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 #, fuzzy msgid "" "Could not save the Network Window log. Make sure you have permission to " @@ -1394,59 +1962,86 @@ msgid "" msgstr "" "لا ŁŠŁ…ŁƒŁ† حفظ سجل نافذة Ų§Ł„Ų“ŲØŁƒŲ©. تأكد أن Ł„ŲÆŁŠŁƒ Ų§Ł„Ų£Ų°ŁˆŁ† Ł„Ł„ŁƒŲŖŲ§ŲØŲ© في مجلد السجل " -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "لا ŁŠŁ…ŁƒŁ† ؄غلاق لسان الاتصال Ų§Ł„Ų±Ų¦ŁŠŲ³ŁŠ" -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +#, fuzzy +msgid "Cannot send commands to this kind of connection!" +msgstr "لا ŁŠŁ…ŁƒŁ† ؄غلاق لسان الاتصال Ų§Ł„Ų±Ų¦ŁŠŲ³ŁŠ" + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 #, fuzzy msgid "Completed" msgstr "Ų§Ł„Ų­Ų§Ų³ŁˆŲØ" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "%1 Ł…ŁŠŲ¬Ų§ بايت" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "%1 ŁƒŁŠŁ„Łˆ بايت" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "%1 بايت" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +msgid "%1 of %2 received." msgstr "" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +msgid "%1 of %2 sent." msgstr "" -#: dialogs/transferwindow.cpp:55 -msgid "File Transfers" -msgstr "ŲŖŁ… نقل الملف." +#: dialogs/transferentry.cpp:373 +msgid "infinite" +msgstr "" -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 #, fuzzy msgid "Cl&ean Up" msgstr "&ŲŖŁ†ŲøŁŠŁ" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 #, fuzzy msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " @@ -1454,404 +2049,446 @@ msgid "" msgstr "" "لا ŁŠŁ…ŁƒŁ† حفظ سجل نافذة Ų§Ł„Ų“ŲØŁƒŲ©. تأكد أن Ł„ŲÆŁŠŁƒ Ų§Ł„Ų£Ų°ŁˆŁ† Ł„Ł„ŁƒŲŖŲ§ŲØŲ© في مجلد السجل " -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 msgid "Smile" msgstr "Ų§ŲØŲŖŲ³Ų§Ł…Ų©" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "ŲŗŁ…Ų²Ų©" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "Ų£Ų®Ų±Ų³" -#: emoticontheme.cpp:797 +#: emoticontheme.cpp:812 msgid "Big smile" msgstr "Ų§ŲØŲŖŲ³Ų§Ł…Ų© كبيرة" -#: emoticontheme.cpp:798 +#: emoticontheme.cpp:813 msgid "Sad" msgstr "Ų­Ų²ŁŠŁ†" -#: emoticontheme.cpp:799 +#: emoticontheme.cpp:814 msgid "Crying" msgstr "يصرخ" -#: emoticontheme.cpp:800 +#: emoticontheme.cpp:815 msgid "Angry" msgstr "ŲŗŲ§Ų¶ŲØ" -#: emoticontheme.cpp:801 +#: emoticontheme.cpp:816 msgid "Confused" msgstr "Ų­ŁŠŲ±Ų§Ł†" -#: emoticontheme.cpp:802 +#: emoticontheme.cpp:817 msgid "Embarrassed" msgstr "Ł…Ų­Ų±Ų¬" -#: emoticontheme.cpp:803 +#: emoticontheme.cpp:818 msgid "Disappointed" msgstr "Ų®Ų§Ų¦ŲØ الأمل" -#: emoticontheme.cpp:804 +#: emoticontheme.cpp:819 msgid "Hot" msgstr "هائج" -#: emoticontheme.cpp:805 +#: emoticontheme.cpp:820 msgid "Baring teeth" msgstr "" -#: emoticontheme.cpp:806 +#: emoticontheme.cpp:821 msgid "Nerd" msgstr "" -#: emoticontheme.cpp:807 +#: emoticontheme.cpp:822 msgid "Sick" msgstr "Ł…Ų±ŁŠŲ¶" -#: emoticontheme.cpp:808 +#: emoticontheme.cpp:823 msgid "Surprised" msgstr "مفاجأة" -#: emoticontheme.cpp:809 +#: emoticontheme.cpp:824 msgid "Party" msgstr "حفلة" -#: emoticontheme.cpp:810 +#: emoticontheme.cpp:825 msgid "Sleepy" msgstr "نعسان" -#: emoticontheme.cpp:811 +#: emoticontheme.cpp:826 msgid "Thinking" msgstr "Ł…ŁŁƒŲ±" -#: emoticontheme.cpp:812 +#: emoticontheme.cpp:827 msgid "Don't tell anyone" msgstr "لا ŲŖŲ®ŲØŲ± Ų£Ų­ŲÆŲ§Ł‹" -#: emoticontheme.cpp:813 +#: emoticontheme.cpp:828 msgid "Secret telling" msgstr "بلاغ سري" -#: emoticontheme.cpp:814 +#: emoticontheme.cpp:829 msgid "Eye-rolling" msgstr "" -#: emoticontheme.cpp:815 +#: emoticontheme.cpp:830 msgid "Sarcastic" msgstr "Ł…ŲŖŁ‡ŁƒŁ…" -#: emoticontheme.cpp:816 +#: emoticontheme.cpp:831 msgid "I don't know" msgstr "لا أعرف" -#: emoticontheme.cpp:817 +#: emoticontheme.cpp:832 msgid "Be right back" msgstr "سأعود حالاً" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "Ł…Ł„Ų§Łƒ" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "ŁˆŁ„ŲÆ" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "قلب Ų£Ų­Ł…Ų±" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "" -#: emoticontheme.cpp:824 +#: emoticontheme.cpp:839 msgid "Dog face" msgstr "ŁˆŲ¬Ł‡ ŁƒŁ„ŲØ" -#: emoticontheme.cpp:825 +#: emoticontheme.cpp:840 msgid "Sun" msgstr "الؓمس" -#: emoticontheme.cpp:826 +#: emoticontheme.cpp:841 msgid "Devil" msgstr "Ų§Ł„Ų“ŁŠŲ·Ų§Ł†" -#: emoticontheme.cpp:827 +#: emoticontheme.cpp:842 msgid "Right hug" msgstr "" -#: emoticontheme.cpp:828 +#: emoticontheme.cpp:843 msgid "Girl" msgstr "فتاة" -#: emoticontheme.cpp:829 +#: emoticontheme.cpp:844 msgid "Broken heart" msgstr "قلب Ł…Ų­Ų·Ł…" -#: emoticontheme.cpp:830 +#: emoticontheme.cpp:845 msgid "Wilted rose" msgstr "" -#: emoticontheme.cpp:831 +#: emoticontheme.cpp:846 msgid "Thumbs down" msgstr "" -#: emoticontheme.cpp:832 +#: emoticontheme.cpp:847 msgid "Cat face" msgstr "ŁˆŲ¬Ł‡ قطة" -#: emoticontheme.cpp:833 +#: emoticontheme.cpp:848 msgid "Sleeping half-moon" msgstr "" -#: emoticontheme.cpp:834 +#: emoticontheme.cpp:849 msgid "Red lips" msgstr "" -#: emoticontheme.cpp:835 +#: emoticontheme.cpp:850 msgid "Clapping" msgstr "ŲŖŲµŁŁŠŁ‚" -#: emoticontheme.cpp:836 +#: emoticontheme.cpp:851 msgid "Crossed fingers" msgstr "" -#: emoticontheme.cpp:837 +#: emoticontheme.cpp:852 msgid "Auto" msgstr "ŲŖŁ„Ł‚Ų§Ų¦ŁŠ" -#: emoticontheme.cpp:838 +#: emoticontheme.cpp:853 msgid "Airplane" msgstr "Ų·Ų§Ų¦Ų±Ų©" -#: emoticontheme.cpp:839 +#: emoticontheme.cpp:854 msgid "Turtle" msgstr "" -#: emoticontheme.cpp:840 +#: emoticontheme.cpp:855 msgid "Snail" msgstr "Ų­Ł„Ų²ŁˆŁ†" -#: emoticontheme.cpp:841 +#: emoticontheme.cpp:856 msgid "Black sheep" msgstr "" -#: emoticontheme.cpp:842 +#: emoticontheme.cpp:857 msgid "Goat" msgstr "عنزة" -#: emoticontheme.cpp:843 +#: emoticontheme.cpp:858 msgid "Vampire bat" msgstr "" -#: emoticontheme.cpp:844 +#: emoticontheme.cpp:859 msgid "Pizza" msgstr "بيتزا" -#: emoticontheme.cpp:845 +#: emoticontheme.cpp:860 msgid "Beer mug" msgstr "" -#: emoticontheme.cpp:846 +#: emoticontheme.cpp:861 msgid "Martini glass" msgstr "" -#: emoticontheme.cpp:847 +#: emoticontheme.cpp:862 msgid "Coffee cup" msgstr "كوب Ł‚Ł‡ŁˆŲ©" -#: emoticontheme.cpp:848 +#: emoticontheme.cpp:863 msgid "Birthday cake" msgstr "كعكة Ų§Ł„Ł…ŁŠŁ„Ų§ŲÆ" -#: emoticontheme.cpp:849 +#: emoticontheme.cpp:864 msgid "Plate" msgstr "Ų·ŲØŁ‚" -#: emoticontheme.cpp:850 +#: emoticontheme.cpp:865 msgid "Bowl" msgstr "Ų±Ł…ŁŠŲ©" -#: emoticontheme.cpp:851 +#: emoticontheme.cpp:866 msgid "Star" msgstr "نجمة" -#: emoticontheme.cpp:852 +#: emoticontheme.cpp:867 msgid "Rainbow" msgstr "Ł‚ŁˆŲ³ قزح" -#: emoticontheme.cpp:853 +#: emoticontheme.cpp:868 msgid "Stormy cloud" msgstr "Ų³Ų­Ų§ŲØŲ© عاصفة" -#: emoticontheme.cpp:854 +#: emoticontheme.cpp:869 msgid "Lightning" msgstr "البرق" -#: emoticontheme.cpp:855 +#: emoticontheme.cpp:870 msgid "Umbrella" msgstr "المظلّة" -#: emoticontheme.cpp:856 +#: emoticontheme.cpp:871 msgid "Island with a palm tree" msgstr "" -#: emoticontheme.cpp:857 +#: emoticontheme.cpp:872 msgid "Telephone receiver" msgstr "مستلم الهاتف" -#: emoticontheme.cpp:858 +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "هاتف نقال" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "Ų§Ł„ŲØŲ±ŁŠŲÆ Ų§Ł„Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 msgid "Clock" msgstr "الساعة" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 msgid "Camera" msgstr "Ų§Ł„ŁƒŲ§Ł…ŁŠŲ±Ų§" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "مقطع Ų³ŁŠŁ†Ł…Ų§Ų¦ŁŠ" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "ملاحظة" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "الأصفاد" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 msgid "Money" msgstr "المال" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "سيجارة" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "كرة قدم" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "X-Box" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "Ų§Ł„Ų­Ų§Ų³ŁˆŲØ" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 msgid "KMess Icon" msgstr "KMess Ų£ŁŠŁ‚ŁˆŁ†Ų©" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "فؓل الاتصال الى الخادم" + +#: initialview.cpp:377 +msgid "Connect" +msgstr "اتصل" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "Ų§&قطع الاتصال" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "" -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "" -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "Ł…Ų¬&Ł…ŁˆŲ¹Ų© جديدة" + +#: kmess.cpp:226 msgid "Add a group" msgstr "اضف Ł…Ų¬Ł…ŁˆŲ¹Ų©" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "ادخل اسم جديد لهذه Ų§Ł„Ł…Ų¬Ł…ŁˆŲ¹Ų©:" -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "" - -#: kmess.cpp:638 +#: kmess.cpp:569 msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" msgstr "هل تريد حذف %1 من قائمة Ų§Ł„Ų§ŲŖŲµŲ§Ł„ŲŸ?" -#: kmess.cpp:640 +#: kmess.cpp:571 msgid "Remove contact" msgstr "احذف جهة Ų§ŲŖŲµŲ§Ł„" -#: kmess.cpp:641 kmess.cpp:684 -#, fuzzy -msgid "Remove" -msgstr "Ł…Ų­Ų°ŁˆŁ" - -#: kmess.cpp:642 +#: kmess.cpp:573 msgid "Remove and block" msgstr "Ł…Ų­Ų°ŁˆŁ ŁˆŁ…Ų­ŲøŁˆŲ±" -#: kmess.cpp:681 +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "هل تريد حذف Ł…Ų¬Ł…ŁˆŲ¹Ų© %1 من قائمة Ų§Ł„Ų§ŲŖŲµŲ§Ł„ŲŸ?" -#: kmess.cpp:683 -msgid "Remove group" -msgstr "احذف Ł…Ų¬Ł…ŁˆŲ¹Ų©" +#: kmess.cpp:631 +#, fuzzy +msgctxt "dialog button" +msgid "Remove" +msgstr "Ł…Ų­Ų°ŁˆŁ" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "هذه Ł…Ų¬Ł…ŁˆŲ¹Ų© Ų®Ų§ŲµŲ© ŁˆŁ„Ų§ŁŠŁ…ŁƒŁ† ŲŖŲŗŁŠŁŠŲ±Ł‡Ų§" -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 msgid "Rename group" msgstr "Ų£Ų¹ŲÆ ŲŖŲ³Ł…ŁŠŲ© Ł…Ų¬Ł…ŁˆŲ¹Ų©" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "متصل" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "فؓل Ų§Ł„ŲŖŁˆŲ«ŁŠŁ‚" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "غير متصل" -#: kmess.cpp:1441 +#: kmess.cpp:1408 +#, fuzzy msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" "

KMess لن ŁŠŲŖŁ…ŁƒŁ† من ŲŖŲ“ŲŗŁŠŁ„ Ų§Ł„Ų£ŲµŁˆŲ§ŲŖ ŁˆŲ§Ł„Ų§Ų¹Ł„Ų§Ł…Ų§ŲŖ.

KMess ملف " "'eventsrc' لا ŁŠŁ…ŁƒŁ† Ų„ŁŠŲ¬Ų§ŲÆŁ‡ في Ų£Ų­ŲÆ المجلدات Ų§Ł„ŲŖŲ§Ł„ŁŠŲ©: %1

من ŁŲ¶Ł„Łƒ تأكد من " "تركيبك, ŁˆŲ§Ł†Ų³Ų® الملف Ų§Ł„Ł…ŁŁ‚ŁˆŲÆ ؄لى ؄حدى المجلدات المدرجة .

" -#: kmess.cpp:1445 +#: kmess.cpp:1412 msgid "Error with notifications" msgstr "Ų®Ų·Ų£ Ł…Ų¹ ؄علامات" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "KMess" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "Ų„&Ų¬Ų±Ų§Ų”Ų§ŲŖ" @@ -1873,923 +2510,843 @@ msgstr "Ų§&ŲØŲ­Ų« عن جهة Ų§ŲŖŲµŲ§Ł„" msgid "Search by &Interest" msgstr "Ų§ŲØŲ­&Ų« بالاهتمامات" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "Ų§&ŲØŲ­Ų« عن جهة Ų§ŲŖŲµŲ§Ł„" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "Ų­&Ų³Ų§ŲØ جديد" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "تعيي&نات الحساب" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "Ų§ŲŖ&صل" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "Ų§&قطع الاتصال" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "اظهر &Ł…Ų¹Ł„ŁˆŁ…Ų§ŲŖŁŠ" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "&Ų­Ų§Ł„ŲŖŁŠ" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "ŲØŲ¹ŁŠŲÆŲ§Ł‹ Ł…Ų¹ Ų±ŲÆ ŲŖŁ„Ł‚Ų§Ų¦ŁŠ" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "اظهر Ų¬&هات الاتصال Ų§Ł„Ł…Ų³Ł…ŁˆŲ­Ų©" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 msgid "Show &Offline Contacts" msgstr "اظهر الجهات Ų§Ł„&غير متصلة" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "اظهر Ų¬&هات الاتصال Ų§Ł„Ł…Ų­Ų°ŁˆŁŲ©" -#: kmessinterface.cpp:303 +#: kmessinterface.cpp:318 #, fuzzy -msgid "Show &Display Pictures" +msgid "Show &Empty Groups" +msgstr "اظهر &تعبير ŁˆŲ¬ŁˆŁ‡" + +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" msgstr "صورة العرض" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "Ų§ŲØŲŖŲ³Ų§Ł…Ų©" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "Ų±ŲŖ&ŲØ جهات الاتصال Ų­Ų³ŲØ" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "Ų§Ł„Ł…Ų¬Ł…ŁˆŲ¹Ų©" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "متصل/غير متصل" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "اظهر نا&فذة النقل" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "اظهر نا&فذة Ų§Ł„Ų“ŲØŁƒŲ©" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "ŁŠŲ³ŲŖŁ…Ų¹ الآن ؄لى %1" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +#, fuzzy +msgid "[%1] %2 goes online" +msgstr " %1 غير متصل" + +#: kmessview.cpp:363 +#, fuzzy +msgid "[%1] %2 goes offline" +msgstr " %1 غير متصل" + +#: kmessview.cpp:559 msgid "Cha&t" msgstr "ŲÆŲ±ŲÆŲ“Ų©" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "&Ų®ŲµŲ§Ų¦Ųµ" -#: kmessview.cpp:492 +#: kmessview.cpp:569 msgid "&Remove from group" msgstr "Ų§Ų­&ذف من Ł…Ų¬Ł…ŁˆŲ¹Ų©" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +#, fuzzy +msgid "&Listening Music" +msgstr "Ų§Ų±Ų³Ų§Ł„ ملف " + +#: kmessview.cpp:601 msgid "&Copy to Group" msgstr "انسخ ؄لى Ł…Ų¬Ł…Łˆ&Ų¹Ų©" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "انقل ؄لى Ł…Ų¬Ł…Łˆ&Ų¹Ų©" -#: kmessview.cpp:549 +#: kmessview.cpp:646 msgid "Move Group &Down" msgstr "Ų­Ų±Ł‘Łƒ Ų§Ł„Ł…Ų¬Ł…ŁˆŲ¹Ų© للأ&سفل" -#: kmessview.cpp:550 +#: kmessview.cpp:647 msgid "Move Group &Up" msgstr "Ų­Ų±Ł‘Łƒ Ų§Ł„Ł…Ų¬Ł…ŁˆŲ¹Ų© للأ&على" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "Ų§Ų­&ذف Ł…Ų¬Ł…ŁˆŲ¹Ų©" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "Ų§Ų¹ŲÆ ŲŖŲ³&Ł…ŁŠŲ© Ł…Ų¬Ł…ŁˆŲ¹Ų©" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 #, fuzzy msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "Ų§Ł„ŲØŲ±ŁŠŲÆ Ų§Ł„Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "" -#: kmessview.cpp:918 +#: kmessview.cpp:1075 +#, fuzzy +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "قد أرسل Ł„Łƒ" + +#: kmessview.cpp:1076 +#, fuzzy +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "قد أرسل Ł„Łƒ" + +#: kmessview.cpp:1085 msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "" -#: kmessview.cpp:921 +#: kmessview.cpp:1090 #, fuzzy -msgctxt "Contacts count in group tooltip" +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "جهات الاتصال" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +#, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "جهة الاتصال هذه متصلة" + +#: kmessview.cpp:1504 #, fuzzy msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "؄دخل Ų±Ų³Ų§Ł„ŲŖŁƒ Ų§Ł„Ų“Ų®ŲµŁŠŲ© هنا" -#: kmessview.cpp:1543 -msgid "You have 1 new e-mail in your inbox." -msgstr "Ł„ŲÆŁŠŁƒ 1 بريد Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ جديد في Ų§Ł„ŁˆŲ§Ų±ŲÆ." +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" -#: kmessview.cpp:1547 -msgid "You have %1 new emails in your inbox." -msgstr "Ł„ŲÆŁŠŁƒ %1 بريد Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ جديد في Ų§Ł„ŁˆŲ§Ų±ŲÆ." - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "KMess" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 msgid "Project support" msgstr "" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 #, fuzzy msgid "Current developer" msgstr "Ł…Ų·ŁˆŲ± GnomeMeeting" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 #, fuzzy msgid "" "German translation, testing, documentation, web master, project management, " "etc..." msgstr "ترجمة Ų§Ł„Ł…Ų§Ł†ŁŠŲ© , Ų§Ų®ŲŖŲØŲ§Ų± , ŲŖŁˆŲ«ŁŠŁ‚ وصفحة انترنت" -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "ŲŖŲµŁ…ŁŠŁ… ويب" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "صور المؓاعر العامة الصفراؔ/الزرقاؔ/Ų§Ł„ŲØŁ†ŁŲ³Ų¬ŁŠŲ© و الترجمة Ų§Ł„Ų§ŁŠŲ·Ų§Ł„ŁŠŲ© " -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "صور تعابير Ų§Ł„ŁˆŲ¬Ł‡ Ų§Ł„ŁƒŲ±ŲŖŁˆŁ†ŁŠŲ©" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "Ų§Ł„Ų£ŲµŁˆŲ§ŲŖ Ų§Ł„Ų§ŁŲŖŲ±Ų§Ų¶ŁŠŲ©" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "الترجمة Ų§Ł„Ų¹Ų±ŲØŁŠ و اصلاح حفظ ملف ŲÆŁˆŁ„ŁŠŲ§Ł‹" -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 #, fuzzy msgid "More Arabic translation" msgstr "ترجمة تركية اضافية" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "ترجمة ŲØŲ±ŲŖŲŗŲ§Ł„ŁŠŲ© ŲØŲ±Ų§Ų²ŁŠŁ„ŁŠŲ©" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 #, fuzzy msgid "Catalan translation" msgstr "ترجمة ŁƒŲ§ŲŖŲ§Ł„ŁˆŁ†ŁŠŲ©" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 #, fuzzy msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "ترجمة ŲµŁŠŁ†ŁŠŲ© Ł…ŲØŲ³Ų·Ų© , اصلا Ų®Ų·Ų£ Ų§Ų±Ų³Ų§Ł„ ملف" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 #, fuzzy msgid "More Simplified Chinese translation" msgstr "ترجمة ŲµŁŠŁ†ŁŠŲ© Ł…ŲØŲ³Ų·Ų© , اصلا Ų®Ų·Ų£ Ų§Ų±Ų³Ų§Ł„ ملف" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 #, fuzzy msgid "Traditional Chinese translation" msgstr "ترجمة ŲµŁŠŁ†ŁŠŲ© ŲŖŁ‚Ł„ŁŠŲÆŁŠŲ©" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 #, fuzzy msgid "Danish translation" msgstr "ترجمة ŲÆŁ†Ł…Ų§Ų±ŁƒŁŠŲ©" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 #, fuzzy msgid "More Danish translation" msgstr "ترجمة ŲÆŲ§Ł†Ł…Ų§Ų±ŁƒŁŠŲ© اضافية" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "ترجمة Ų£Ł„Ł…Ų§Ł†ŁŠŲ©" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 msgid "More Dutch translation" msgstr "ترجمة Ł‡ŁˆŁ„Ł†ŲÆŁŠŲ© اضافية" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 #, fuzzy msgid "Estonian translation" msgstr "ترجمة Ų„Ų³ŲŖŁˆŁ†ŁŠŲ©" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 #, fuzzy msgid "Finnish translation" msgstr "ترجمة ŁŁ„Ł†ŲÆŁŠŲ©" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 #, fuzzy msgid "More Finnish translation" msgstr "ترجمة ŁŁ„Ł†ŲÆŁŠŲ© اضافية" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "ترجمة ŁŲ±Ł†Ų³ŁŠŲ©" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 #, fuzzy msgid "More French translation, MSN6 emoticon definitions" msgstr "ترجمة ŁŲ±Ł†Ų³ŁŠŲ©" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 #, fuzzy msgid "More French translation" msgstr "ترجمة ŁŲ±Ł†Ų³ŁŠŲ©" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 #, fuzzy msgid "Hungarian translation" msgstr "ترجمة Ł‡Ł†ŲŗŲ§Ų±ŁŠŲ©" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 #, fuzzy msgid "More Italian translation" msgstr "ترجمة كورية" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "ترجمة كورية" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 #, fuzzy msgid "Norsk BokmĆ„l translation" msgstr "ترجمة Norsk Bokml" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 msgid "Slovenian translation" msgstr "ترجمة Ų³Ł„ŁˆŁŁŠŁ†ŁŠŲ©" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "ترجمة Ų§Ų³ŲØŲ§Ł†ŁŠŲ©" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 #, fuzzy msgid "More Spanish translation" msgstr "Ų§Ł„Ł…Ų²ŁŠŲÆ من الترجمة Ų§Ł„Ų£Ų³ŲØŲ§Ł†ŁŠŲ©" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 msgid "Swedish translation" msgstr "ترجمة سويدية" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 #, fuzzy msgid "Thai translation" msgstr "ترجمة ŲŖŲ§ŁŠŁ„Ų§Ł†ŲÆŁŠŲ©" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "ترجمة تركية" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "ترجمة تركية اضافية" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -#, fuzzy -msgid "Guido Solinas" -msgstr "متصل" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "ŲŖŁ… نقل الملف." + +#: main.cpp:134 msgid "P4-Context field support" msgstr "" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "اصلاح Xinerama" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "كود \"استقبال ملف\" Ų§Ł„Ų£ŲµŁ„ŁŠ" -#: main.cpp:120 -msgid "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" msgstr "" -#: main.cpp:120 +#: main.cpp:138 +msgid "KWallet support" +msgstr "" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "Ų¹ŲÆŲ© اصلاحات ŲÆŁˆŁ„ŁŠŲ©" + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "Ų¹ŲÆŲ© اصلاحات ŲÆŁˆŁ„ŁŠŲ©" -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "Ł…Ų·ŁˆŲ± GnomeMeeting" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "Ų“Ų®Ųµ بكيس ŁŁˆŁ‚ رأسه" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "ؓفرة متجانسة و محفزة" -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 +#: main.cpp:150 #, fuzzy msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "كود Ų§Ł„ŲØŲ§Ł„ŁˆŁ† المنبثق" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "ؓفرة مؤقت Ų§Ł„Ų®Ł…ŁˆŲÆ" -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 +#: main.cpp:152 msgid "Close-to-tray icon screenshot code" msgstr "" -#: main.cpp:131 +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 #, fuzzy msgid "Your name here?" msgstr "Ų§Ų³Ł…Łƒ" -#: main.cpp:131 +#: main.cpp:156 msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" -#: main.cpp:134 +#: main.cpp:159 #, fuzzy msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Ų§Ų³Ł…Łƒ" -#: main.cpp:135 +#: main.cpp:160 #, fuzzy msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "Ų¹Ł†ŁˆŲ§Ł† بريدك Ų§Ł„Ų§Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ:" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "ŲÆŲ®ŁˆŁ„ ŲŖŁ„Ł‚Ų§Ų¦ŁŠ ŲØŲ§Ų³ŲŖŲ®ŲÆŲ§Ł… Ų§Ł„ŲØŲ±ŁŠŲÆ Ų§Ł„Ų§Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ المعطى" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 msgid "The contact cancelled the session." msgstr "لقد قامت جهة الاتصال ب؄لغاؔ الجلسة." -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 msgid "The contact rejected the invitation." msgstr "لقد قامت جهة الاتصال برفض Ų§Ł„ŲÆŲ¹ŁˆŲ©." -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 msgid "You have cancelled the session." msgstr "لقد Ų£Ł„ŲŗŁŠŲŖ الجلسة." -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "لقد رفضت Ų§Ł„ŲÆŲ¹ŁˆŲ©." -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +#, fuzzy +msgid "Do you want to accept or cancel?" msgstr "هل تريد Ł‚ŲØŁˆŁ„ أو Ų„Ł„ŲŗŁŠ?" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +#, fuzzy +msgid "Click to cancel." msgstr "؄نقر Ų„Ł„ŲŗŁŠ." -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 #, fuzzy msgid "Do you want to accept the file: %1 (%2)" msgstr "هل تريد Ł‚ŲØŁˆŁ„ الملف: %1 (%2 بايت)" -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 msgid "The transfer of %1 failed. Couldn't open file." msgstr "نقل %1 فؓل. لا ŁŠŁ…ŁƒŁ† فتح الملف." -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "النقل ŲŖŁ… Ł‚ŲØŁˆŁ„Ł‡" + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 msgid "Connecting to %1, port %2" msgstr "جاري الاتصال ŲØŁ€ %1, منفذ %2" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 msgid "The transfer was cancelled" msgstr "النقل ŲŖŁ… ؄لغائه" -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 msgid "Connection established" msgstr "تأسيس الاتصال" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 msgid "Successfully transferred file: %1" msgstr "ملف Ł…Ł†Ł‚ŁˆŁ„ بنجاح: %1" -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 msgid "The transfer of %1 failed. The file does not exist." msgstr "نقل %1 فؓل. الملف غير Ł…ŁˆŲ¬ŁˆŲÆ مسبقاً." -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 msgid "The transfer of %1 failed. The file could not be read." msgstr "نقل %1 فؓل. الملف لا ŁŠŁ…ŁƒŁ† قرائته." -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 msgid "Sending file %1" msgstr "Ų§Ų±Ų³Ų§Ł„ ملف %1" -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "النقل ŲŖŁ… Ł‚ŲØŁˆŁ„Ł‡" - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 #, fuzzy msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "ŲŖŁ… ؄لغاؔ دعوة نقل الملف. ŲØŁŠŲ§Ł†Ų§ŲŖ سيئة ŲŖŁ… استقبالها." -#: network/applications/filetransferp2p.cpp:345 -#, fuzzy -msgid "The transfer of %1 failed. Couldn't open file" -msgstr "نقل %1 فؓل. لا ŁŠŁ…ŁƒŁ† فتح الملف" +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." +msgstr "" -#: network/applications/filetransferp2p.cpp:524 -msgid "The contact cancelled the transfer." +#: network/applications/filetransferp2p.cpp:348 +#, fuzzy +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "" +"المف '%1' Ł…ŁˆŲ¬ŁˆŲÆ مسبقاً.\n" +"هل تريد Ų§Ł„ŁƒŲŖŲ§ŲØŲ© ŁŁˆŁ‚Ł‡?" + +#: network/applications/filetransferp2p.cpp:378 +#, fuzzy +msgid "The transfer of file "%1" failed. Couldn't save the file." +msgstr "نقل %1 فؓل. لا ŁŠŁ…ŁƒŁ† فتح الملف." + +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 +#, fuzzy +msgid "The contact has cancelled the transfer of file "%1"." msgstr "لقد قامت جهة الاتصال ب؄لغاؔ النقل." -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "لقد Ų£Ł„ŲŗŁŠŲŖ الجلسة." + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "" -#: network/applications/filetransferp2p.cpp:768 +#: network/applications/filetransferp2p.cpp:676 #, fuzzy -msgid "The transfer of %1 failed. The file does not exist." +msgid "Successfully sent file "%1"." +msgstr "ملف Ł…Ł†Ł‚ŁˆŁ„ بنجاح: %1" + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "ملف Ł…Ł†Ł‚ŁˆŁ„ بنجاح: %1" + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "نقل %1 فؓل. الملف غير Ł…ŁˆŲ¬ŁˆŲÆ مسبقاً." -#: network/applications/filetransferp2p.cpp:773 +#: network/applications/filetransferp2p.cpp:818 #, fuzzy -msgid "The transfer of %1 failed. The file could not be read." +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "نقل %1 فؓل. الملف لا ŁŠŁ…ŁƒŁ† قرائته." -#: network/applications/filetransferp2p.cpp:809 +#: network/applications/filetransferp2p.cpp:855 #, fuzzy -msgid "Sending file %1 (%2)" +msgid "Sending file "%1" (%2)." msgstr "Ų§Ų±Ų³Ų§Ł„ ملف %1" -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "لقد قامت جهة الاتصال ب؄لغاؔ النقل." + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "أنت Ł…ŲÆŲ¹Łˆ لبدؔ لقاؔ (ŲØŲ§Ų³ŲŖŲ®ŲÆŲ§Ł… GnomeMeeting)." -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 #, fuzzy msgid "Starting GnomeMeeting. Connecting to %1." msgstr "ŁŠŲŖŁ… ŲŖŲ“ŲŗŁŠŁ„ GnomeMeeting. الاتصال ŲØŁ€ %1." -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "دعوة جهة الاتصال ؄لى لقاؔ" -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "Ų§Ł„ŲÆŲ¹ŁˆŲ© ŲŖŁ… رفضها. Ł„ŁŠŲ³ŲŖ Ł…ŲÆŲ¹ŁˆŁ…Ų© من قبل Ų§Ł„Ų²ŲØŁˆŁ† الآخر." -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 msgid "The invitation was aborted. An internal error occured." msgstr "Ų§Ł„ŲÆŲ¹ŁˆŲ© ŲŖŁ… ؄حباطها. حدوث Ų®Ų·Ų£ ŲÆŲ§Ų®Ł„ŁŠ." -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "Ų§Ł„ŲÆŲ¹ŁˆŲ© ŲŖŁ… ؄حباطها. مهلة الانتظار Ł„Ł‚ŲØŁˆŁ„ المستخدم." -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "Ų§Ł„ŲÆŲ¹ŁˆŲ© ŲŖŁ… ؄حباطها. مهلة الانتظار Ł„ŲØŁŠŲ§Ł†Ų§ŲŖ الملف." -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "" -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 msgid "The invitation was aborted." msgstr "Ų§Ł„ŲÆŲ¹ŁˆŲ© ŲŖŁ… ؄حباطها." -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "أنت Ł…ŲÆŲ¹Łˆ Ł„Ł…Ų“Ų§Ų±ŁƒŲ© Ų³Ų·Ų­ Ų§Ł„Ł…ŁƒŲŖŲØ لهذا الؓخص." -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 #, fuzzy msgid "Starting KRDC. Connecting to %1." msgstr "ŁŠŲŖŁ… ŲŖŲ“ŲŗŁŠŁ„ KRDC. الاتصال ŲØŁ€ " -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." -msgstr "" +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +msgid "The contact rejected the invitation. An internal error occured." +msgstr "جهة الاتصال قامت برفض Ų§Ł„ŲÆŲ¹ŁˆŲ©. حدوث Ų®Ų·Ų£ ŲÆŲ§Ų®Ł„ŁŠ." -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +msgid "The transfer failed." +msgstr "النقل فؓل" + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." msgstr "Ų§Ł„ŲÆŲ¹ŁˆŲ© ŲŖŁ… ؄لغائها. جهة الاتصال ارسلت ŲØŁŠŲ§Ł†Ų§ŲŖ سيئة, أو KMess لا ŁŠŲÆŲ¹Ł…Ł‡Ų§." -#: network/applications/p2papplication.cpp:1503 -msgid "The transfer failed. Data preparation failed." -msgstr "النقل فؓل. ŲŖŲ¬Ł‡ŁŠŲ² Ų§Ł„ŲØŁŠŲ§Ł†Ų§ŲŖ فؓل." - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -msgid "The contact rejected the invitation. An internal error occured." -msgstr "جهة الاتصال قامت برفض Ų§Ł„ŲÆŲ¹ŁˆŲ©. حدوث Ų®Ų·Ų£ ŲÆŲ§Ų®Ł„ŁŠ." - -#: network/applications/p2papplication.cpp:1626 -msgid "The transfer failed." -msgstr "النقل فؓل" - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 #, fuzzy msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "النقل فؓل. جهة الاتصال ارسلت ŲØŁŠŲ§Ł†Ų§ŲŖ سيئة, أو KMess لا ŁŠŲÆŲ¹Ł…Ł‡Ų§." -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "النقل فؓل. مهلة الانتظار Ł„Ł‚ŲØŁˆŁ„ المستخدم." + +#: network/applications/p2papplicationbase.cpp:1015 +msgid "The transfer failed. An internal error occured." +msgstr "النقل فؓل. حدوث Ų®Ų·Ų£ ŲÆŲ§Ų®Ł„ŁŠ." + +#: network/applications/p2papplicationbase.cpp:1176 +#, fuzzy +msgid "The transfer failed. Couldn't open data source." +msgstr "النقل فؓل. لا ŁŠŁ…ŁƒŁ† فتح Ł…ŲµŲÆŲ± Ų§Ł„ŲØŁŠŲ§Ł†Ų§ŲŖ." + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "" + +#: network/applications/p2papplication.cpp:1071 +msgid "The transfer failed. Data preparation failed." +msgstr "النقل فؓل. ŲŖŲ¬Ł‡ŁŠŲ² Ų§Ł„ŲØŁŠŲ§Ł†Ų§ŲŖ فؓل." + +#: network/applications/p2papplication.cpp:1178 #, fuzzy msgid "The invitation was cancelled. Message was not directed to us." msgstr "Ų§Ł„ŲÆŲ¹ŁˆŲ© ŲŖŁ… ؄لغائها. الرسالة لم ŲŖŁˆŲ¬Ł‡ Ų„Ł„ŁŠŁ‡Ł…." -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 #, fuzzy msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "النقل فؓل. جهة الاتصال ارسلت ŲØŁŠŲ§Ł†Ų§ŲŖ سيئة, أو KMess لا ŁŠŲÆŲ¹Ł…Ł‡Ų§." -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "انتظار الاتصال على %1, منفذ %2" -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "" -#: network/applications/p2papplication.cpp:3297 -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "النقل فؓل. مهلة الانتظار Ł„Ł‚ŲØŁˆŁ„ المستخدم." - -#: network/applications/p2papplication.cpp:3316 -msgid "The transfer failed. An internal error occured." -msgstr "النقل فؓل. حدوث Ų®Ų·Ų£ ŲÆŲ§Ų®Ł„ŁŠ." - -#: network/applications/p2papplication.cpp:3693 -#, fuzzy -msgid "The transfer failed. Couldn't open data source." -msgstr "النقل فؓل. لا ŁŠŁ…ŁƒŁ† فتح Ł…ŲµŲÆŲ± Ų§Ł„ŲØŁŠŲ§Ł†Ų§ŲŖ." - -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:3113 #, fuzzy msgid "Waiting for connection" msgstr "انتظار قائمة الاتصال..." -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 #, fuzzy msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " "accept." msgstr "فؓل لم Ų£Ų³ŲŖŲ·Ų¹ انؓاؔ مقبس" -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 #, fuzzy msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." msgstr "فؓل لم Ų£Ų³ŲŖŲ·Ų¹ انؓاؔ مقبس" -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "" -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 msgid "You are invited to start a voice conversation." msgstr "أنت Ł…ŲÆŲ¹Łˆ للبدؔ ŲØŁ…Ų­Ų§ŲÆŲ«Ų© صوتية." -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 #, fuzzy msgid "" "You are invited to start a voice conversation but support for this was not " "installed" msgstr "أنت Ł…ŲÆŲ¹Łˆ لبدأ لقاؔ (ŲØŲ§Ų³ŲŖŲ®ŲÆŲ§Ł… GnomeMeeting)." -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 msgid "You have cancelled the voice conversation." msgstr "لقد Ų£Ł„ŲŗŁŠŲŖ المحادثة Ų§Ł„ŲµŁˆŲŖŁŠŲ©." -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 #, fuzzy msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "Ų§Ł„ŲÆŲ¹ŁˆŲ© ŲŖŁ… ؄لغائها. Ų£ŲÆŲ§Ų© Ų§Ł„ŲµŁˆŲŖ لا ŁŠŁ…ŁƒŁ† فتحه." -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 #, fuzzy msgid "Start voice conversation. Connecting to %1." msgstr "ŁŠŲŖŁ… ŲŖŲ“ŲŗŁŠŁ„ المحادثة Ų§Ł„ŲµŁˆŲŖŁŠŲ©. ŁŠŲŖŲµŁ„ ŲØŁ€ %1." -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 #, fuzzy msgid "Start voice conversation. Listening on %1." msgstr "ŁŠŲŖŁ… ŲŖŲ“ŲŗŁŠŁ„ المحادثة Ų§Ł„ŲµŁˆŲŖŁŠŲ©. ŁŠŲ³ŲŖŁ…Ų¹ على %1." -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 msgid "Inviting the contact to a voice conversation." msgstr "دعوة جهة الاتصال الى Ł…Ų­Ų§ŲÆŲ«Ų© صوتية" -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 #, fuzzy msgid "The contact is inviting you for '%1', but this is not implemented yet." @@ -2834,638 +3391,746 @@ msgstr "Ų¹Ų§Ų¬Ų² عن ŲŖŁƒŁˆŁŠŁ† Ų§ŲŖŲµŲ§Ł„: %1" msgid "Receiving file %1" msgstr "استلام ملف %1" -#: network/msnconnection.cpp:477 -#, fuzzy -msgid "1 ping lost" -msgstr "استلام القائمة" - -#: network/msnconnection.cpp:481 -#, fuzzy -msgid "%1 pings lost" -msgstr "استلام القائمة" - -#: network/msnconnection.cpp:496 -msgid "The connection to the server was lost." -msgstr "الاتصال بالخادم قد فقد" - -#: network/msnconnection.cpp:704 -msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." +#: network/msnconnection.cpp:589 +msgid "KMess could not access the remote webservice.
Details: %1" msgstr "" -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "الخادم عن ŲØŲ¹ŲÆ ؄غلق الاتصال" - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" - -#: network/msnnotificationconnection.cpp:724 -msgid "Show MSN Messenger Service status?" -msgstr "أظهر حالة Ų®ŲÆŁ…Ų© مراسل MSN?" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "Ų®Ų·Ų£ الخادم" - -#: network/msnnotificationconnection.cpp:1344 +#: network/msnnotificationconnection.cpp:1317 #, fuzzy msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" msgstr "" "لقد Ų£ŲµŲØŲ­ŲŖ غير متصل Ł„Ų£Ł†Łƒ \n" "اتصل من برنامج msn messenger Ų¢Ų®Ų± \n" "او من Ł…ŁˆŁ‚Ų¹ Ų¢Ų®Ų±" -#: network/msnnotificationconnection.cpp:1558 +#: network/msnnotificationconnection.cpp:1532 msgid "Got synchronization" msgstr "حصلت المزامنة" -#: network/msnnotificationconnection.cpp:1699 -msgid "Authenticating" +#: network/msnnotificationconnection.cpp:1670 +#, fuzzy +msgid "Authenticating..." msgstr "Ų§Ł„ŲŖŁˆŲ«ŁŠŁ‚" -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "استلام تأكيد المستخدم" - -#: network/msnnotificationconnection.cpp:1752 +#: network/msnnotificationconnection.cpp:1719 msgid "Waiting for contact list..." msgstr "انتظار قائمة الاتصال..." -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "ŲŖŲ­ŁˆŁŠŁ„ لخادم ال؄علام" +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." +msgstr "" -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" +#: network/msnnotificationconnection.cpp:1894 +#, fuzzy +msgid "Authentication failed, please verify your account name and password." msgstr "Ų§Ł„ŲŖŁˆŲ«ŁŠŁ‚ فؓل, من ŁŲ¶Ł„Łƒ تحقق من اسم الحساب ŁˆŁƒŁ„Ł…Ų© السر" -#: network/msnnotificationconnection.cpp:2042 +#: network/msnnotificationconnection.cpp:1993 msgid "Connecting..." msgstr "جاري الاتصال..." -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" +#: network/msnnotificationconnection.cpp:2167 +#, fuzzy +msgid "Unknown command received from the server: %1" msgstr "KMess استقبل أمر Ł…Ų¬Ł‡ŁˆŁ„ من الخادم: %1" -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 +#: network/msnnotificationconnection.cpp:2192 msgid "Invalid command syntax" msgstr "" -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -msgid "There was an internal error in KMess: %1" -msgstr "Ł‡Ł†Ų§Łƒ Ų®Ų·Ų£ ŲÆŲ§Ų®Ł„ŁŠ في KMess: %1" - -#: network/msnnotificationconnection.cpp:2243 +#: network/msnnotificationconnection.cpp:2196 msgid "Invalid command parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2246 +#: network/msnnotificationconnection.cpp:2199 msgid "The email you have tried to add is not a MSN Messenger account" msgstr "Ų§Ł„ŲØŲ±ŁŠŲÆ Ų§Ł„Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ Ų§Ł„Ų°ŁŠ ŲŖŲ­Ų§ŁˆŁ„ ؄ضافته Ł„ŁŠŲ³ Ų­Ų³Ų§ŲØ مراسل MSN" -#: network/msnnotificationconnection.cpp:2249 +#: network/msnnotificationconnection.cpp:2204 msgid "Domain name missing" msgstr "" -#: network/msnnotificationconnection.cpp:2252 +#: network/msnnotificationconnection.cpp:2208 msgid "Already logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2255 +#: network/msnnotificationconnection.cpp:2211 msgid "The account name given is invalid" msgstr "اسم الحساب المعطى غير Ų³Ł„ŁŠŁ…" -#: network/msnnotificationconnection.cpp:2258 +#: network/msnnotificationconnection.cpp:2215 msgid "" "That account name is invalid, or your passport has not been confirmed yet" msgstr "" -#: network/msnnotificationconnection.cpp:2261 +#: network/msnnotificationconnection.cpp:2218 msgid "Your contact list is full" msgstr "قائمة جهات الاتصال Ł„ŲÆŁŠŁƒ ممتلئة" -#: network/msnnotificationconnection.cpp:2264 +#: network/msnnotificationconnection.cpp:2223 msgid "Invalid SBP parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2267 +#: network/msnnotificationconnection.cpp:2226 msgid "This contact is already on your list" msgstr "جهة الاتصال هذه Ł…ŁˆŲ¬ŁˆŲÆŲ© في Ł‚Ų§Ų¦Ł…ŲŖŁƒ" -#: network/msnnotificationconnection.cpp:2270 +#: network/msnnotificationconnection.cpp:2230 msgid "This contact is not on your list" msgstr "جهة الاتصال هذه Ł„ŁŠŲ³ŲŖ في Ł‚Ų§Ų¦Ł…ŲŖŁƒ" -#: network/msnnotificationconnection.cpp:2273 +#: network/msnnotificationconnection.cpp:2234 msgid "This contact is not online" msgstr "جهة الاتصال هذه متصلة" -#: network/msnnotificationconnection.cpp:2276 +#: network/msnnotificationconnection.cpp:2239 msgid "Already in this mode" msgstr "" -#: network/msnnotificationconnection.cpp:2279 +#: network/msnnotificationconnection.cpp:2243 #, fuzzy msgid "Contact is in the opposite list" msgstr "جهة الاتصال هذه Ł„ŁŠŲ³ŲŖ في Ł‚Ų§Ų¦Ł…ŲŖŁƒ" -#: network/msnnotificationconnection.cpp:2282 +#: network/msnnotificationconnection.cpp:2247 +msgid "" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." +msgstr "" + +#: network/msnnotificationconnection.cpp:2251 msgid "Your contact list has too many groups" msgstr "قائمة جهات الاتصال Ł„ŲÆŁŠŁƒ Ł„ŲÆŁŠŁ‡Ų§ Ł…Ų¬Ł…ŁˆŲ¹Ų§ŲŖ كثيرة Ų¬ŲÆŲ§Ł‹" -#: network/msnnotificationconnection.cpp:2285 +#: network/msnnotificationconnection.cpp:2255 msgid "This group can't be changed" msgstr "هذه Ų§Ł„Ł…Ų¬Ł…ŁˆŲ¹Ų© لا ŁŠŁ…ŁƒŁ† ŲŖŲŗŁŠŁŠŲ±Ł‡Ų§" -#: network/msnnotificationconnection.cpp:2288 +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "قائمة جهات الاتصال Ł„ŲÆŁŠŁƒ Ł„ŲÆŁŠŁ‡Ų§ Ł…Ų¬Ł…ŁˆŲ¹Ų§ŲŖ كثيرة Ų¬ŲÆŲ§Ł‹" + +#: network/msnnotificationconnection.cpp:2264 msgid "This group is not empty" msgstr "هذه Ų§Ł„Ł…Ų¬Ł…ŁˆŲ¹Ų© Ł„ŁŠŲ³ŲŖ فارغة" -#: network/msnnotificationconnection.cpp:2291 -msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" -msgstr "" - -#: network/msnnotificationconnection.cpp:2294 +#: network/msnnotificationconnection.cpp:2268 msgid "The group name is too long" msgstr "اسم Ų§Ł„Ł…Ų¬Ł…ŁˆŲ¹Ų© Ų·ŁˆŁŠŁ„ Ų¬ŲÆŲ§Ł‹" -#: network/msnnotificationconnection.cpp:2297 +#: network/msnnotificationconnection.cpp:2273 msgid "Attempted to change group \"0\"" msgstr "" -#: network/msnnotificationconnection.cpp:2300 +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +msgid "There was an internal error in KMess: %1" +msgstr "Ł‡Ł†Ų§Łƒ Ų®Ų·Ų£ ŲÆŲ§Ų®Ł„ŁŠ في KMess: %1" + +#: network/msnnotificationconnection.cpp:2277 #, fuzzy msgid "Invalid Group" msgstr "Ų§Ų¹ŲÆ ŲŖŲ³&Ł…ŁŠŲ© Ł…Ų¬Ł…ŁˆŲ¹Ų©" -#: network/msnnotificationconnection.cpp:2303 +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 msgid "Switchboard server failed" msgstr "" -#: network/msnnotificationconnection.cpp:2306 +#: network/msnnotificationconnection.cpp:2287 #, fuzzy msgid "Transfer to switchboard server failed" msgstr "ŲŖŲ­ŁˆŁŠŁ„ Ł„ŲŖŁ†ŲØŁŠŁ‡ الخادم" -#: network/msnnotificationconnection.cpp:2309 +#: network/msnnotificationconnection.cpp:2291 msgid "Direct connection (MSNSLP) error, connection failed" msgstr "" -#: network/msnnotificationconnection.cpp:2312 +#: network/msnnotificationconnection.cpp:2295 msgid "Required field missing" msgstr "" -#: network/msnnotificationconnection.cpp:2315 +#: network/msnnotificationconnection.cpp:2299 msgid "Not logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" -msgstr "" +#: network/msnnotificationconnection.cpp:2302 +#, fuzzy +msgid "No permissions given for this account" +msgstr "تذكر Ų§Ł„ŲŖŲ¹ŁŠŁŠŁ†Ų§ŲŖ لهذا الحساب" -#: network/msnnotificationconnection.cpp:2322 +#: network/msnnotificationconnection.cpp:2307 msgid "Command is disabled" msgstr "" -#: network/msnnotificationconnection.cpp:2325 +#: network/msnnotificationconnection.cpp:2310 msgid "Your account is banned." msgstr "" -#: network/msnnotificationconnection.cpp:2329 +#: network/msnnotificationconnection.cpp:2314 #, fuzzy msgid "Challenge response failed" msgstr "النقل فؓل" -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" +#: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" +msgstr "" + +#: network/msnnotificationconnection.cpp:2323 +#, fuzzy +msgid "You are opening chat sessions too fast" msgstr " قمت بفتح Ų¹ŲÆŲ© جلسات ŲØŲ³Ų±Ų¹Ų©" -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" msgstr "Ł„ŲÆŁŠŁƒ Ų¹ŲÆŲ© جلسات Ł…ŁŲŖŁˆŲ­Ų©" -#: network/msnnotificationconnection.cpp:2341 +#: network/msnnotificationconnection.cpp:2334 msgid "Unexpected command sequence" msgstr "" -#: network/msnnotificationconnection.cpp:2344 +#: network/msnnotificationconnection.cpp:2338 #, fuzzy msgid "Bad friend name" msgstr "اسم ودي سيئ:" -#: network/msnnotificationconnection.cpp:2348 +#: network/msnnotificationconnection.cpp:2344 msgid "Bad CVR data" msgstr "" -#: network/msnnotificationconnection.cpp:2353 +#: network/msnnotificationconnection.cpp:2350 msgid "The server reports KMess is flooding it with too many data" msgstr "" -#: network/msnnotificationconnection.cpp:2358 +#: network/msnnotificationconnection.cpp:2357 #, fuzzy msgid "Authentication ticket was incorrect" msgstr "فؓل Ų§Ł„ŲŖŁˆŲ«ŁŠŁ‚" -#: network/msnnotificationconnection.cpp:2362 +#: network/msnnotificationconnection.cpp:2360 msgid "You can't start a chat with someone while you are invisible." msgstr "لا ŁŠŁ…ŁƒŁ†Łƒ ŲØŲÆŲ£ Ł…Ų­Ų§ŲÆŲ«Ų© Ł…Ų¹ Ų“Ų®Ųµ ŁˆŲ£Ł†ŲŖ في حالة Ł…Ų®ŁŁŠ." -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." +#: network/msnnotificationconnection.cpp:2364 +msgid "Not accepting new contacts" msgstr "" -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." +#: network/msnnotificationconnection.cpp:2368 +msgid "" +"You have a kids passport account, you need parental consent to chat online." msgstr "" -#: network/msnnotificationconnection.cpp:2373 +#: network/msnnotificationconnection.cpp:2371 +msgid "Your passport account needs to be verified first." +msgstr "" + +#: network/msnnotificationconnection.cpp:2375 msgid "Bad USR ticket" msgstr "" -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" -msgstr "KMess - MSN Ų®Ų·Ų£" +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" +msgstr "" -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" +#: network/msnnotificationconnection.cpp:2399 +#, fuzzy +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." msgstr "Ł‡Ł†Ų§Łƒ Ų®Ų·Ų£ ŲÆŲ§Ų®Ł„ŁŠ في الخادم" +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + #: network/msnnotificationconnection.cpp:2414 -msgid "The server is too busy" -msgstr "الخادم Ł…Ų“ŲŗŁˆŁ„ Ų¬ŲÆŲ§Ł‹" - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "الخادم غير Ł…ŲŖŁˆŁŲ±" - -#: network/msnnotificationconnection.cpp:2422 msgid "Peer notification server down" msgstr "Ų®Ų§ŲÆŁ… ؄علام الند مغلق" -#: network/msnnotificationconnection.cpp:2426 +#: network/msnnotificationconnection.cpp:2418 msgid "The server is going down" msgstr "الخادم Ų³ŁŠŲŖŁ… ؄غلاقه" -#: network/msnnotificationconnection.cpp:2429 +#: network/msnnotificationconnection.cpp:2422 msgid "The server is going down soon" msgstr "الخادم Ų³ŁŠŲŗŁ„Ł‚ Ł‚Ų±ŁŠŲØŲ§Ł‹" -#: network/msnnotificationconnection.cpp:2433 +#: network/msnnotificationconnection.cpp:2427 msgid "Write is blocking" msgstr "Ų§Ł„ŁƒŲŖŲ§ŲØŲ© Ł…Ų­ŲøŁˆŲ±Ų©" -#: network/msnnotificationconnection.cpp:2436 +#: network/msnnotificationconnection.cpp:2431 msgid "Session is overloaded" msgstr "الجلسة ممتلئة" -#: network/msnnotificationconnection.cpp:2441 +#: network/msnnotificationconnection.cpp:2438 msgid "The server is not available" msgstr "الخادم غير Ł…ŲŖŁˆŁŲ±" -#: network/msnnotificationconnection.cpp:2444 +#: network/msnnotificationconnection.cpp:2442 msgid "Authentication failed" msgstr "فؓل Ų§Ł„ŲŖŁˆŲ«ŁŠŁ‚" -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" -msgstr "" +#: network/msnnotificationconnection.cpp:2449 +#, fuzzy +msgid "Unknown error code received from the server: %1" +msgstr "KMess استقبل أمر Ł…Ų¬Ł‡ŁˆŁ„ من الخادم: %1" -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" -msgstr "KMess استقبل رسالة Ų®Ų·Ų£ Ł…Ų¬Ł‡ŁˆŁ„ من الخادم: %1" +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +#, fuzzy +msgctxt "Error dialog box title" +msgid "MSN error" +msgstr "KMess - MSN Ų®Ų·Ų£" -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "تحذير: الخادم Ų³ŁŠŲŗŁ„Ł‚ Ł„Ł„ŲµŁŠŲ§Ł†Ų© في ŲŗŲ¶ŁˆŁ† ŲÆŁ‚ŁŠŁ‚Ų©!" +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "دقائق" +msgstr[1] "دقائق" #: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." -msgstr "" +#, fuzzy +msgid "Server closes for maintenance in %1!" +msgstr "تحذير: الخادم Ų³ŁŠŲŗŁ„Ł‚ Ł„Ł„ŲµŁŠŲ§Ł†Ų© في ŲŗŲ¶ŁˆŁ† ŲÆŁ‚ŁŠŁ‚Ų©!" #: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." msgstr "" -#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:2901 msgid "Lost reference to SOAP client" msgstr "" -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +msgid "KMess could not process Offline-IM messages.
Details: %1" msgstr "" -#: network/msnnotificationconnection.cpp:3209 +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "فؓل Ų§Ł„ŲŖŁˆŲ«ŁŠŁ‚" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "Ł‡Ł†Ų§Łƒ Ų®Ų·Ų£ ŲÆŲ§Ų®Ł„ŁŠ في KMess: %1" + +#: network/msnnotificationconnection.cpp:3242 +msgctxt "Login error message, with more details for developer versions" msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" msgstr "" -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" msgstr "" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "الاتصال بالخادم قد فقد" + +#: network/msnnotificationconnection.cpp:3302 +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" +msgstr "" + +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "Ų®Ų·Ų£ الخادم" + +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "انتهت مهلة الاتصال" + +#: network/msnsockettcp.cpp:368 +#, fuzzy +msgid "1 ping lost" +msgstr "استلام القائمة" + +#: network/msnsockettcp.cpp:372 +#, fuzzy +msgid "%1 pings lost" +msgstr "استلام القائمة" + +#: network/msnsockettcp.cpp:387 +msgid "The connection to the server was lost." +msgstr "الاتصال بالخادم قد فقد" + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "هذا الؓخص غير متصل او Ł…Ų®ŁŁŠ." -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "" -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 #, fuzzy msgid "The message \"%1\" was not received!" msgstr "الرسالة \"%1\" لم ŁŠŲŖŁ… استلامها" -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "Ų¹Ų§Ų¬Ų² عن ŲŖŁƒŁˆŁŠŁ† Ų§ŲŖŲµŲ§Ł„: %1" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "" -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +msgid "In %1's chat: %2" msgstr "" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +msgid "%1 says:
'%2'" msgstr "" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" -msgstr "" - -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" -msgstr "" - -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" -msgstr "" - -#: notification/notificationchat.cpp:200 +#: notification/chatnotification.cpp:171 #, fuzzy -msgid "%1 has sent you a handwritten message!" +msgid "%1 has sent you an offline message:
'%2'" msgstr "ارسل Ł„Łƒ وكزة!" -#: notification/notificationchat.cpp:204 +#: notification/chatnotification.cpp:178 +msgid "%1's chat requests attention!" +msgstr "" + +#: notification/chatnotification.cpp:183 +msgid "%1:
%2" +msgstr "" + +#: notification/chatnotification.cpp:190 #, fuzzy -msgid "%1 has sent you a nudge!" +msgid "%1 has sent you a handwritten message!" msgstr "ارسل Ł„Łƒ وكزة!" -#: notification/notificationchat.cpp:208 +#: notification/chatnotification.cpp:194 #, fuzzy -msgid "%1 has sent you a wink!" +msgid "%1 has sent you a nudge!" +msgstr "ارسل Ł„Łƒ وكزة!" + +#: notification/chatnotification.cpp:198 +#, fuzzy +msgid "%1 has sent you a wink!" msgstr "ارسل Ł„Łƒ ŲŗŁ…Ų²Ų©!" -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" -msgstr "" - -#: notification/notificationchat.cpp:215 +#: notification/chatnotification.cpp:204 #, fuzzy -msgid "%1 is sending you a file!" +msgid "%1 wants to use the webcam!" +msgstr "%1 قام ŲØŲ§Ł„Ų®Ų±ŁˆŲ¬" + +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" msgstr "%1 متصل الآن" -#: notification/notificationchat.cpp:216 +#: notification/chatnotification.cpp:206 #, fuzzy -msgid "%1 has sent you an invitation!" +msgid "%1 has sent you an invitation!" msgstr "ارسل Ł„Łƒ ŲŗŁ…Ų²Ų©!" -#: notification/notificationchat.cpp:223 +#: notification/chatnotification.cpp:213 #, fuzzy -msgid "%1 has canceled the webcam session!" +msgid "%1 has canceled the webcam session!" msgstr "لقد Ų£Ł„ŲŗŁŠŲŖ الجلسة." -#: notification/notificationchat.cpp:224 +#: notification/chatnotification.cpp:214 #, fuzzy -msgid "%1 has canceled the file transfer!" +msgid "%1 has canceled the file transfer!" msgstr "لقد قامت جهة الاتصال ب؄لغاؔ النقل." -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +msgid "%1's activity has been canceled!" msgstr "" -#: notification/notificationchat.cpp:232 +#: notification/chatnotification.cpp:222 #, fuzzy -msgid "%1 has accepted to use the webcam!" +msgid "%1 has accepted to use the webcam!" msgstr "%1 قام ŲØŲ§Ł„Ų®Ų±ŁˆŲ¬" -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" -msgstr "" - -#: notification/notificationchat.cpp:234 +#: notification/chatnotification.cpp:223 #, fuzzy -msgid "%1 has accepted your invitation!" +msgid "%1 has accepted the file transfer!" +msgstr "لقد قامت جهة الاتصال ب؄لغاؔ النقل." + +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" msgstr "%1 قام ŲØŲ§Ł„Ų®Ų±ŁˆŲ¬" -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" -msgstr "" - -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" -msgstr "" - -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" -msgstr "" - -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" -msgstr "" - -#: notification/notificationchat.cpp:251 +#: notification/chatnotification.cpp:231 #, fuzzy -msgid "The file transfer with %1 has failed!" +msgid "%1 has ended the webcam session!" +msgstr "لقد Ų£Ł„ŲŗŁŠŲŖ الجلسة." + +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "نقل %1 ŲŖŁ… ؄لغائه." -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:233 +msgid "%1's activity has ended!" msgstr "" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -msgid "%1 is now online" -msgstr "%1 متصل الآن" - -#: notification/notificationcontactstatus.cpp:76 -#, fuzzy -msgid "%1 has gone away" -msgstr "%1 قام ŲØŲ§Ł„Ų®Ų±ŁˆŲ¬" - -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/chatnotification.cpp:240 +msgid "%1's webcam session has failed!" msgstr "" -#: notification/notificationcontactstatus.cpp:78 +#: notification/chatnotification.cpp:241 #, fuzzy -msgid "%1 is now busy" +msgid "The file transfer with %1 has failed!" +msgstr "نقل %1 ŲŖŁ… ؄لغائه." + +#: notification/chatnotification.cpp:242 +msgid "%1's activity has ended with an error!" +msgstr "" + +#: notification/contactstatusnotification.cpp:70 +#, fuzzy +msgid "%1 is now online" msgstr "%1 متصل الآن" -#: notification/notificationcontactstatus.cpp:79 +#: notification/contactstatusnotification.cpp:71 #, fuzzy -msgid "%1 has become invisible" -msgstr "%1 متصل الآن" - -#: notification/notificationcontactstatus.cpp:80 -#, fuzzy -msgid "%1 has gone idle" +msgid "%1 has gone away" msgstr "%1 قام ŲØŲ§Ł„Ų®Ų±ŁˆŲ¬" -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/contactstatusnotification.cpp:72 +msgid "%1 will be right back" +msgstr "" + +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" +msgstr "%1 متصل الآن" + +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" +msgstr "%1 متصل الآن" + +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" msgstr "%1 قام ŲØŲ§Ł„Ų®Ų±ŁˆŲ¬" -#: notification/notificationcontactstatus.cpp:82 +#: notification/contactstatusnotification.cpp:76 #, fuzzy -msgid "%1 is on the phone" +msgid "%1 has logged out" +msgstr "%1 قام ŲØŲ§Ł„Ų®Ų±ŁˆŲ¬" + +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" msgstr "%1 متصل الآن" -#: notification/notificationcontactstatus.cpp:83 +#: notification/contactstatusnotification.cpp:78 #, fuzzy -msgid "%1 is out for lunch" +msgid "%1 is out for lunch" msgstr "%1 متصل الآن" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/newemailnotification.cpp:78 +#, fuzzy +msgid "New email:
'%1'
by '%2'" msgstr "بريد جديد:
'%1'
بواسطة '%2'" -#: settings/accountswidget.cpp:81 +#: settings/accountpage.cpp:69 #, fuzzy msgid "Browse..." msgstr "&Ų§Ų³ŲŖŲ¹Ų±Ų§Ų¶..." -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +msgid "Browse and crop picture..." msgstr "" -#: settings/accountswidget.cpp:404 -msgid "Display Picture" -msgstr "صورة العرض" +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" +#: settings/accountpage.cpp:448 +#, fuzzy +msgid "Downloading of display picture failed" msgstr "ŲŖŁ†Ų²ŁŠŁ„ صورة العرض فؓل" -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 +#, fuzzy msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" "حدوث Ų®Ų·Ų£ أثناؔ Ł…Ų­Ų§ŁˆŁ„Ų© تغيير صورة العرض.\n" "تأكد من اختيار ملف Ų§Ł„ŲµŁˆŲ±Ų© Ų§Ł„ŲµŲ­ŁŠŲ­Ų©" -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "" - -#: settings/chatstylepage.cpp:317 -#, fuzzy -msgid "Great!" -msgstr "عنزة" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 #, fuzzy msgid "&Delete" msgstr "Ų§Ų­Ų°&ف جهة Ų§ŲŖŲµŲ§Ł„" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "ŲŖŲ¹ŁŠŁŠŁ†Ų§ŲŖ" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 msgid "Account" msgstr "Ų­Ų³Ų§ŲØ" -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 #, fuzzy msgid "My Account" msgstr "Ų­Ų³Ų§ŲØ" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "Ų„Ų“Ų¹Ų§Ų±Ų§ŲŖ" -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 #, fuzzy msgid "Alerts and Notifications" msgstr "KMess ؄علام" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "ŲÆŲ±ŲÆŲ“Ų©" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "حفظ الدردؓة" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +#, fuzzy +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "Ų§Ł„ŲØŲ±ŁŠŲÆ Ų§Ł„Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ Ų§Ł„Ų°ŁŠ ŲŖŲ­Ų§ŁˆŁ„ ؄ضافته Ł„ŁŠŲ³ Ų­Ų³Ų§ŲØ مراسل MSN" + +#: settings/accountsettingsdialog.cpp:201 +msgid "The email address you have entered is already in use: '%1'" +msgstr "" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "هل أنت من Ł…ŲŖŲ£ŁƒŲÆ من حذف هذا Ų§Ł„Ų­Ų³Ų§ŲØŲŸ" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "هل أنت من Ł…ŲŖŲ£ŁƒŲÆ من حذف هذا Ų§Ł„Ų­Ų³Ų§ŲØŲŸ" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "" + +#: settings/chatstylepage.cpp:341 +#, fuzzy +msgid "Great!" +msgstr "عنزة" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "ŲŖŲ¹ŁŠŁŠŁ†Ų§ŲŖ" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +msgid "Accounts" +msgstr "Ų­Ų³Ų§ŲØŲ§ŲŖ" + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "؄علام Ų§Ł„ŲØŲ±ŁŠŲÆ" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "احفظ ملفات المحادثة في هذا Ų§Ł„ŲÆŁ„ŁŠŁ„ الأب:" + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." @@ -3473,14 +4138,129 @@ msgstr "" "؄غلاق النافذة Ų§Ł„Ų±Ų¦ŁŠŲ³ŁŠŲ© Ų³ŁŠŲØŁ‚ŁŠ KMess مؓغلاً في ŲµŁŠŁ†ŁŠŲ© النظام. Ų§Ų³ŲŖŲ®ŲÆŁ… '؄نهِ' من " "قائمة 'اتصل' ل؄نهاؔ Ų§Ł„ŲŖŲ·ŲØŁŠŁ‚." -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "Ų„Ų±Ų³Ų§Ų” Ų£ŁŠŁ‚ŁˆŁ†Ų© ŲµŁŠŁ†ŁŠŲ© النظام" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "" +#: systemtraywidget.cpp:245 +#, fuzzy +msgid "- %1 (%2)" +msgstr "%1 Ł…ŁŠŲ¬Ų§ بايت" + +#~ msgid "Picture:" +#~ msgstr "Ų§Ł„ŲµŁˆŲ±Ų©:" + +#, fuzzy +#~ msgid "Speed:" +#~ msgstr "الخادم:" + +#, fuzzy +#~ msgid "Login Information" +#~ msgstr "اظهر Ł…Ų¹Ł„ŁˆŁ…Ų§ŲŖ Ų§Ł„ŲØŲ±ŁŠŲÆ Ų§Ł„Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ" + +#~ msgid "Logging in..." +#~ msgstr "ŁŠŲŖŁ… ŲŖŲ³Ų¬ŁŠŁ„ Ų§Ł„ŲÆŲ®ŁˆŁ„..." + +#~ msgid "Use a specified command:" +#~ msgstr "Ų§Ų³ŲŖŲ®ŲÆŁ… أمر Ł…Ų­ŲÆŲÆ:" + +#, fuzzy +#~ msgid "Email: " +#~ msgstr "Ų§Ł„ŲØŲ±ŁŠŲÆ Ų§Ł„Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ" + +#~ msgid "Remove group" +#~ msgstr "احذف Ł…Ų¬Ł…ŁˆŲ¹Ų©" + +#, fuzzy +#~ msgid "Show &Display Pictures" +#~ msgstr "صورة العرض" + +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr "Ł„ŲÆŁŠŁƒ 1 بريد Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ جديد في Ų§Ł„ŁˆŲ§Ų±ŲÆ." + +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr "Ł„ŲÆŁŠŁƒ %1 بريد Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ جديد في Ų§Ł„ŁˆŲ§Ų±ŲÆ." + +#, fuzzy +#~ msgid "Guido Solinas" +#~ msgstr "متصل" + +#, fuzzy +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "نقل %1 فؓل. لا ŁŠŁ…ŁƒŁ† فتح الملف" + +#, fuzzy +#~ msgid "Sidebar" +#~ msgstr "اظهر/اخفي ؓريط &جهات الاتصال Ų§Ł„Ų¬Ų§Ł†ŲØŁŠ" + +#, fuzzy +#~ msgid "New contact's group" +#~ msgstr "جهة Ų§&ŲŖŲµŲ§Ł„ جديدة" + +#~ msgid "Enter your login information:" +#~ msgstr "؄دخل Ł…Ų¹Ł„ŁˆŁ…Ų§ŲŖ Ų§Ł„ŲÆŲ®ŁˆŁ„ الخاصة بك:" + +#, fuzzy +#~ msgid "Your friendly name:" +#~ msgstr "Ų§Ų³Ł…Łƒ المفضل:" + +#, fuzzy +#~ msgid "Your email address:" +#~ msgstr "Ų¹Ł†ŁˆŲ§Ł† Ų§Ł„ŲØŲ±ŁŠŲÆ Ų§Ł„Ų„Ł„ŁƒŲŖŲ±ŁˆŁ†ŁŠ: " + +#~ msgid "Your password:" +#~ msgstr "ŁƒŁ„Ł…Ų© السر:" + +#~ msgid "Display picture:" +#~ msgstr "صورة العرض:" + +#~ msgid "Don't show a displa&y picture" +#~ msgstr "لا تظهر صورة Ų¹&Ų±Ų¶" + +#, fuzzy +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "اظهر ؄علام عندما ŁŠŲµŁ„ بريد في \"مجلدات أخرى\"" + +#~ msgid "Organize chat folders by:" +#~ msgstr "نظم مجلدات المحادثة بواسطة:" + +#~ msgid "&Show graphics in chat messages" +#~ msgstr "اظهر Ų§Ł„Ų±Ų³ŁˆŁ…Ų§ŲŖ في رسائل الدردؓة" + +#~ msgid "Use Hotmail" +#~ msgstr "Ų§Ų³ŲŖŲ®ŲÆŁ… Ł‡ŁˆŲŖŁ…ŁŠŁ„" + +#~ msgid "says:" +#~ msgstr "ŁŠŁ‚ŁˆŁ„: " + +#~ msgid "Current name: " +#~ msgstr "الاسم Ų§Ł„Ų­Ų§Ł„ŁŠ:" + +#~ msgid "The remote server has closed the connection." +#~ msgstr "الخادم عن ŲØŲ¹ŲÆ ؄غلق الاتصال" + +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr "أظهر حالة Ų®ŲÆŁ…Ų© مراسل MSN?" + +#~ msgid "Received user confirmation" +#~ msgstr "استلام تأكيد المستخدم" + +#~ msgid "Transfer to notification server" +#~ msgstr "ŲŖŲ­ŁˆŁŠŁ„ لخادم ال؄علام" + +#~ msgid "The server is too busy" +#~ msgstr "الخادم Ł…Ų“ŲŗŁˆŁ„ Ų¬ŲÆŲ§Ł‹" + +#~ msgid "The server is unavailable" +#~ msgstr "الخادم غير Ł…ŲŖŁˆŁŲ±" + +#~ msgid "KMess received an unknown error message from the server: %1" +#~ msgstr "KMess استقبل رسالة Ų®Ų·Ų£ Ł…Ų¬Ł‡ŁˆŁ„ من الخادم: %1" + #~ msgid "Add contact" #~ msgstr "اضف جهة Ų§ŲŖŲµŲ§Ł„" @@ -3488,9 +4268,6 @@ msgstr "" #~ msgid "KMess Notification" #~ msgstr "؄علام Ų§Ł„ŲØŲ±ŁŠŲÆ" -#~ msgid "Accounts" -#~ msgstr "Ų­Ų³Ų§ŲØŲ§ŲŖ" - #~ msgid "" #~ msgstr "<؄دخل Ų±Ų³Ų§Ł„ŲŖŁƒ Ų§Ł„Ų“Ų®ŲµŁŠŲ© هنا>" @@ -3504,9 +4281,6 @@ msgstr "" #~ "Your emails" #~ msgstr "aser@arabeyes.org,a.a-a.s@hotmail.com" -#~ msgid "Insert an emoticon" -#~ msgstr "Ų§ŲÆŲ±Ų¬ تعبير ŁˆŲ¬Ł‡" - #~ msgid "Away - Idle" #~ msgstr "بالخارج - Ų®Ų§Ł…ŲÆ" @@ -3537,16 +4311,6 @@ msgstr "" #~ msgid "(On the Phone)" #~ msgstr "(على الهاتف)" -#~ msgid "Connection timeout" -#~ msgstr "انتهت مهلة الاتصال" - -#~ msgid "Connect" -#~ msgstr "اتصل" - -#, fuzzy -#~ msgid "Listening to %1" -#~ msgstr "Ų§Ų±Ų³Ų§Ł„ ملف " - #~ msgid "File transfer dialog message" #~ msgstr "رسالة المربع Ų§Ł„Ų­ŁˆŲ§Ų±ŁŠ لنقل الملفات" @@ -3620,9 +4384,6 @@ msgstr "" #~ msgid "You can't login to hotmail with this account." #~ msgstr "لا ŁŠŁ…ŁƒŁ†Łƒ ŲŖŲ³Ų¬ŁŠŁ„ ŲÆŲ®ŁˆŁ„ Ł„Ł‡ŁˆŲŖŁ…ŁŠŁ„ بهذا الحساب." -#~ msgid "The connection to the server failed." -#~ msgstr "فؓل الاتصال الى الخادم" - #~ msgid "You may not be connected to the internet." #~ msgstr "قد لا ŲŖŁƒŁˆŁ† متصلاً بال؄نترنت." @@ -3635,9 +4396,6 @@ msgstr "" #~ msgid "says" #~ msgstr "ŁŠŁ‚ŁˆŁ„" -#~ msgid "has sent you" -#~ msgstr "قد أرسل Ł„Łƒ" - #~ msgid "Ctrl+Return" #~ msgstr "Ctrl+Return" @@ -3669,9 +4427,6 @@ msgstr "" #~ msgid "Preview:" #~ msgstr "Ł…Ų¹Ų§ŁŠŁ†Ų©:" -#~ msgid "&Use the default picture" -#~ msgstr "&Ų§Ų³ŲŖŲ®ŲÆŁ… Ų§Ł„ŲµŁˆŲ±Ų© Ų§Ł„Ų§ŁŲŖŲ±Ų§Ų¶ŁŠŲ©" - #~ msgid "I want to use a proxy" #~ msgstr "Ų£Ų±ŲŗŲØ في Ų§Ų³ŲŖŲ®ŲÆŲ§Ł… ŁˆŁƒŁŠŁ„" @@ -3683,9 +4438,6 @@ msgstr "" #~ msgid "Port:" #~ msgstr "المنفذ:" -#~ msgid "Type:" -#~ msgstr "Ų§Ł„Ł†ŁˆŲ¹:" - #~ msgid "User ID:" #~ msgstr "Ł‡ŁˆŁŠŲ© المستخدم:" @@ -3698,9 +4450,6 @@ msgstr "" #~ msgid "SOCKS5 Proxy" #~ msgstr "SOCKS5 ŁˆŁƒŁŠŁ„" -#~ msgid "Server:" -#~ msgstr "الخادم:" - #~ msgid "Proxy" #~ msgstr "Ų§Ł„ŁˆŁƒŁŠŁ„" @@ -3719,9 +4468,6 @@ msgstr "" #~ msgid "New chat notification:" #~ msgstr "Ų„Ų“Ų¹Ų§Ų± ŲÆŲ±ŲÆŲ“Ų© جديد:" -#~ msgid "%1 is offline" -#~ msgstr " %1 غير متصل" - #~ msgid "You have new mail:" #~ msgstr "Ł„ŲÆŁŠŁƒ بريد جديد:" @@ -3732,16 +4478,6 @@ msgstr "" #~ "in your inbox" #~ msgstr "في ŲµŁ†ŲÆŁˆŁ‚Łƒ" -#, fuzzy -#~ msgid "" -#~ "\"%1\"\n" -#~ "from %2\n" -#~ "in another folder" -#~ msgstr "في مجلد Ų¢Ų®Ų±" - -#~ msgid "and" -#~ msgstr "و" - #~ msgid "says: " #~ msgstr "ŁŠŁ‚ŁˆŁ„: " @@ -3763,10 +4499,6 @@ msgstr "" #~ msgid "Chat - %1" #~ msgstr "ŲÆŲ±ŲÆŲ“Ų© - %1" -#, fuzzy -#~ msgid "Chat - %1 et al." -#~ msgstr " et al." - #, fuzzy #~ msgid "The transfer of %1 failed. Couldn't create a socket." #~ msgstr "فؓل لم Ų£Ų³ŲŖŲ·Ų¹ انؓاؔ مقبس" diff --git a/po/ca.po b/po/ca.po index 6f90782..6587930 100644 --- a/po/ca.po +++ b/po/ca.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ca\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" "PO-Revision-Date: 2003-04-23 10:23+0200\n" "Last-Translator: Jaume Cornado \n" "Language-Team: Catalan \n" @@ -18,47 +18,41 @@ msgstr "" "X-Generator: KBabel 1.0\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "Entrant al sistema" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -#, fuzzy -msgid "S&end" -msgstr "Envia" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 #, fuzzy msgid "Ne&w Line" msgstr "Nova Linea" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 #, fuzzy -msgid "Sidebar" -msgstr "Mostrar/Amagar la barra de &contactes" +msgid "S&end" +msgstr "Envia" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +#, fuzzy +msgid "Contacts" +msgstr "&Afegir contacte" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 #, fuzzy msgid "" "Enter here the email address of the person you wish to add to your contact " @@ -66,42 +60,40 @@ msgid "" msgstr "Afegeig l'adreƧa de correu de la persona que vols afegir:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 #, fuzzy msgid "Email address" msgstr "AdreƧa de correu:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 #, fuzzy -msgid "New contact's group" -msgstr "Nou &Contacte" +msgid "Initial group" +msgstr "Re&nombrar grup" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 #, fuzzy msgid "" "Enter a message to be automatically sent to people who try to message you." @@ -110,185 +102,391 @@ msgstr "" "a la gent que t'intenti enviar un missatge:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 #, fuzzy msgid "&Automatic away message" msgstr "Especificar un missatge d'absencia" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, fuzzy, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" -msgstr "t'ha afegit a la seva llista de contactes. Que vols fer:" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 #, fuzzy -msgid "&Add this contact to your \"Friends\" list" +msgid "&Add this person to my \"Friends\" list" msgstr "Afegir aquest contacte a la teva llista \"Friends\"" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 #, fuzzy -msgid "&Not add this contact, but let them see your online state" +msgid "Do not add this person; only allow them to see my online state" msgstr "No afegir el contacte, pero permetre veure el teu estat" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 #, fuzzy -msgid "Block this person from contacting &you or seeing your online state" +msgid "&Block this person from contacting me or seeing my online state" msgstr "" "Bloquejar aquesta persona tant per contactar com per veure el teu estat." #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, fuzzy, no-c-format +msgid "Contact Properties for %1" +msgstr "Propietats del contacte per " + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +#, fuzzy +msgid "Restore" +msgstr "Eliminat" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "Fer anar un nom alternatiu per aquesta persona" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "Mostra un globus cuan aquesta persona canvia de Online a Ofline" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "So:" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +msgid "&Clear Cache" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +msgid "Notes" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +msgid "Standard" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "Envia" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 msgid "Cancel" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -#, fuzzy -msgid "Enter your login information:" -msgstr "O entra la teva informació d'accés:" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" +msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 #, fuzzy -msgid "Password" +msgid "Email address:" +msgstr "Adreça de correu: " + +#. i18n: tag string +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +#, fuzzy +msgid "Password:" msgstr "Clau d'accés:" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 #, fuzzy msgid " Account options " msgstr "&Opcions del compte" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 #, fuzzy msgid "Remem&ber this profile" msgstr "Recordar aquest perfil" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "&Conectar" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr "&Opcions del compte" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 #, fuzzy -msgid "Your friendly name:" +msgid "&Friendly name:" msgstr "El teu nom amigable:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 #, fuzzy -msgid "Your email address:" +msgid "&Email address:" msgstr "Adreça de correu: " #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" -msgstr "La teva clau:" - -#. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 #, fuzzy -msgid "Remember Password" +msgid "&Password:" msgstr "Clau d'accés:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 #, fuzzy -msgid "Display picture:" +msgid "&Remember Password" +msgstr "Clau d'accés:" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 +#, fuzzy +msgid "Display Picture" msgstr "Foto:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 msgid "C&hange..." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -#, fuzzy -msgid "Don't show a displa&y picture" -msgstr "Foto:" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -299,35 +497,36 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +msgid "Re&member the settings of this account" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 #, fuzzy -msgid "Login &with this account automatically at start-up" +msgid "Login &with this account automatically" msgstr "Entrar amb aquest compte automaticament al engegar" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "Registrar tots els xats" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -335,174 +534,285 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 msgid "https://accountservices.passport.net/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 #, fuzzy -msgid "Popup notifications" +msgid "Saved accounts:" +msgstr "Comptes" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +#, fuzzy +msgid "Click" +msgstr "Bloquejat" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "Comptes" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "Eliminat" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "Notificació de correu" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "&Afegir contacte" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 #, fuzzy msgid "Show notifications when your contacts:" msgstr "Mostrar notificacions cuan els contactes estan fora de linea" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 #, fuzzy msgid "&Go online" msgstr "Fora de linea" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 #, fuzzy msgid "S&end you a message" msgstr "Especificar un missatge d'absencia" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 #, fuzzy msgid "Go o&ffline" msgstr "Fora de linea" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 #, fuzzy -msgid "Show notifications when you recei&ve an email" +msgid "Email Events" +msgstr "Adreça de correu:" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" msgstr "Mostra una notificació cuan el correu rebut estÔ a \"altres carpetes\"" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +#, fuzzy +msgid "In other folders" +msgstr "en una altra carpeta" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "Amagar els popups despres" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "segons" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "Alertes" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "Veure els contactes f&ora de linea" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -513,207 +823,209 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 -msgid "Inform contacts w&hich song I am listening to." +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 +msgid "Inform contacts w&hich song I am listening to" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 #, fuzzy msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "Canviar el estat a \"Fora de linea\" cuan estigui inactiu" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 msgid "Become idle after" msgstr "Posar-se fora de linea despres" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "minuts" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 #, fuzzy msgid "Log &all chats" msgstr "Registrar tots els xats" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 msgid "" "Choose the directory on your system where you'd like to save the chat logs." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" msgstr "Guardar els registres en aquest directori:" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "Organitzar les carpetes de xat per:" +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "Any" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 #, fuzzy msgid "Month" msgstr "Mes" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "Dia" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" msgstr "Guardar-los tots en el directori arrel" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "La font dels teus missatges:" - +#. i18n: file ./settings/chatstylepage.ui line 45 #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "Fixar la font dels missatges dels contactes a:" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +msgid "&Chat style:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "Preferéncies" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 #, fuzzy -msgid "&Show graphics in chat messages" -msgstr "Mostrar hora en els missatges" +msgid "&Show emoticons" +msgstr "Mostrar &Emoticones" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 #, fuzzy -msgid "S&how time in chat messages" +msgid "S&how messages time" msgstr "Mostrar hora en els missatges" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -#, fuzzy -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "Permetre efectes a les fonts, i.e. *negreta*,/italica/, i _subratllat_" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -722,152 +1034,303 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 -msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "Client de correu" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "Fes anar Hotmail" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "Utilitza una comanda específica:" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "Notificació de correu" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 -msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 #, fuzzy -msgid "Show email information" -msgstr "Mostra l'informació de l'email a la llista de contactes" +msgid "Always" +msgstr "Fora de linea" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 -msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "La teva llista de contactes està plena" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "Error en el server" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" -msgstr "Mostra una notificació cuan el correu rebut estÔ a \"altres carpetes\"" +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." +msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "La font dels teus missatges:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 +msgid "" +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "Fixar la font dels missatges dels contactes a:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 +msgid "" +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +#, fuzzy +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" +msgstr "Permetre efectes a les fonts, i.e. *negreta*,/italica/, i _subratllat_" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "&Buscar un contacte" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 #, fuzzy msgid "&Emoticon Themes" msgstr "Mostrar &Emoticones" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 #, fuzzy msgid "Available emoticon styles:" msgstr "Mostrar &Emoticones" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 #, fuzzy msgid "&Custom Emoticons" msgstr "Emoticones Cartoon" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 msgid "Custom emoticons for this account:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -#, fuzzy -msgid "Click" -msgstr "Bloquejat" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 #, fuzzy msgid "Re&name" msgstr "El teu nom" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 #, fuzzy msgid "Remo&ve" msgstr "Eliminat" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +msgid "Web Browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +msgid "&Use the KDE default browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "diu:" +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "Client de correu" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +msgid "&Use the KDE default email client" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +#, fuzzy +msgid "File Transfers" +msgstr "Transferencia de l'arxiu completada." + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "Guardar els registres en aquest directori:" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +msgid "and" +msgstr "i" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "Transferencia de l'arxiu completada." #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -877,452 +1340,531 @@ msgstr "Estic fora de l'ordinador" msgid "Your name" msgstr "El teu nom" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "tu@hotmail.com" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "En linea" - -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "Fora de linea" - -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "Torno en un moment" - -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "Ocupat" - -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "Invisible" - -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "" - -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "Fora de linea" - -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "Al telèfon" - -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "Estic menjant" - -#: chat/chatmaster.cpp:1061 -msgid "%1 is sending a wink: %2" -msgstr "" - -#: chat/chatmessagestyle.cpp:302 -#, fuzzy -msgid "%1 says:" -msgstr "diu:" - -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 -msgid "Add this emoticon: %1" -msgstr "" - -#: chat/chatview.cpp:529 -msgid "" -"Could not save chat log. Make sure you have permission to write in the " -"folder where logs are being saved." -msgstr "" - -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 -msgid "" -"The file '%1' already exists.\n" -"do you want to overwrite it?" -msgstr "" - -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Overwrite File" -msgstr "" - -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Over&write" -msgstr "" - -#: chat/chatview.cpp:977 -#, fuzzy -msgid "Add this &Emoticon..." -msgstr "Mostrar &Emoticones" - -#: chat/chatview.cpp:984 -#, fuzzy -msgid "Send &Email" -msgstr "&Enviar un correu" - -#: chat/chatview.cpp:988 -#, fuzzy -msgid "Copy E&mail" -msgstr "Correu" - -#: chat/chatview.cpp:995 -msgid "Visit &Link" -msgstr "" - -#: chat/chatview.cpp:999 -msgid "Copy &Address" -msgstr "" - -#: chat/chatview.cpp:1013 -msgid "&Copy text" -msgstr "" - -#: chat/chatview.cpp:1014 -msgid "Select &All" -msgstr "" - -#: chat/chatview.cpp:1015 -#, fuzzy -msgid "Save chat to &File" -msgstr "Enviar un &Fitxer" - -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "Xat" - -#: chat/chatwindow.cpp:239 +#: chat/chat.cpp:124 msgid "" "You can't start this invitation because there are multiple contacts in this " "chat." msgstr "" -#: chat/chatwindow.cpp:276 +#: chat/chat.cpp:158 #, fuzzy -msgid "%1 has joined the chat." +msgid "%1 has joined the chat." msgstr "ha entrat en el xat" -#: chat/chatwindow.cpp:327 +#: chat/chat.cpp:211 #, fuzzy -msgid "The conversation went idle, %1 has left the chat." +msgid "The conversation went idle, %1 has left the chat." msgstr "ha deixat el xat" -#: chat/chatwindow.cpp:331 +#: chat/chat.cpp:215 #, fuzzy -msgid "%1 has left the chat." +msgid "%1 has left the chat." msgstr "ha deixat el xat" -#: chat/chatwindow.cpp:593 +#: chat/chat.cpp:364 #, fuzzy -msgid "%1 - Chat" -msgstr "Xat" +msgctxt "Name of a chat tab" +msgid "%1 and %2" +msgstr " esta escrivint." -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" -msgstr "" - -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" -msgstr "" - -#: chat/chatwindow.cpp:757 +#: chat/chat.cpp:371 #, fuzzy -msgid "Contacts" -msgstr "&Afegir contacte" +msgctxt "Name of a chat tab" +msgid "%1 et al." +msgstr " et al." -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 +#: chat/chat.cpp:630 #, fuzzy -msgid "Emoticons" -msgstr "Mostrar &Emoticones" - -#: chat/chatwindow.cpp:819 -#, fuzzy -msgid "My emoticons" -msgstr "Mostrar &Emoticones" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" msgstr " (Aquest missatge ha estat enviat automaticament)" -#: chat/chatwindow.cpp:1502 +#: chat/chat.cpp:934 +msgid "You received a wink from %1." +msgstr "" + +#: chat/chat.cpp:971 msgid "" "The wink could not be displayed. Make sure you have 'cabextract' installed." msgstr "" -#: chat/chatwindow.cpp:1511 +#: chat/chat.cpp:980 msgid "The wink could not be displayed. The data could not be read." msgstr "" -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" +#: chat/chat.cpp:1080 +msgid "You have received a wink from %1" msgstr "" -#: chat/chatwindow.cpp:1755 -#, fuzzy -msgid "Show Side&bar" -msgstr "Mostrar/Amagar la barra de &contactes" +#: chat/chat.cpp:1100 +msgid "You received a nudge from %1!" +msgstr "" -#: chat/chatwindow.cpp:1756 +#: chat/chat.cpp:1119 #, fuzzy -msgid "Show the contact sidebar" -msgstr "Mostrar o amagar la barra de contactes" - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -#, fuzzy -msgid "Hide Side&bar" -msgstr "Mostrar/Amagar la barra de &contactes" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -#, fuzzy -msgid "Hide the contact sidebar" -msgstr "Mostrar o amagar la barra de contactes" - -#: chat/chatwindow.cpp:1787 -#, fuzzy -msgid "The message '%1' could not be sent." +msgid "The message '%1' could not be sent." msgstr "no s'ha rebut." -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" -msgstr "" - -#: chat/chatwindow.cpp:1876 +#: chat/chat.cpp:1183 msgid "You've sent a nudge to %1!" msgstr "" -#: chat/chatwindow.cpp:1883 +#: chat/chat.cpp:1190 msgid "You've sent a nudge!" msgstr "" -#: chat/chatwindow.cpp:1972 -#, fuzzy -msgid "%1 is typing." -msgstr " esta escrivint." - -#: chat/chatwindow.cpp:1981 -#, fuzzy -msgid "%1 and %2 are typing." -msgstr " esta escrivint." - -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." +#: chat/chatmaster.cpp:1219 +msgid "%1 is sending a wink: %2" msgstr "" -#: chat/chatwindowinterface.cpp:175 -msgid "&Chat" -msgstr "&Xat" +#: chat/chatmessagestyle.cpp:298 +#, fuzzy +msgid "%1 says:" +msgstr "diu:" -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 +msgid "Add this emoticon: %1" +msgstr "" + +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 msgid "&Invite" msgstr "&Convidar" -#: chat/chatwindowinterface.cpp:179 +#: chat/chatview.cpp:695 +msgid "" +"Could not save chat log. Make sure you have permission to write in the " +"folder where logs are being saved." +msgstr "" + +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 +msgid "" +"The file '%1' already exists.\n" +"do you want to overwrite it?" +msgstr "" + +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Overwrite File" +msgstr "" + +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Over&write" +msgstr "" + +#: chat/chatview.cpp:1275 +#, fuzzy +msgid "Add this &Emoticon..." +msgstr "Mostrar &Emoticones" + +#: chat/chatview.cpp:1282 +#, fuzzy +msgid "Send &Email" +msgstr "&Enviar un correu" + +#: chat/chatview.cpp:1286 +#, fuzzy +msgid "Copy E&mail" +msgstr "Correu" + +#: chat/chatview.cpp:1293 +msgid "Visit &Link" +msgstr "" + +#: chat/chatview.cpp:1297 +msgid "Copy &Address" +msgstr "" + +#: chat/chatview.cpp:1312 +msgid "&Copy text" +msgstr "" + +#: chat/chatview.cpp:1313 +msgid "Select &All" +msgstr "" + +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 +#, fuzzy +msgid "Save chat to &File" +msgstr "Enviar un &Fitxer" + +#: chat/chatwindow.cpp:489 +msgid "&Chat" +msgstr "&Xat" + +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "Enviar un &Fitxer" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "Començar un &Meeting" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 #, fuzzy msgid "Send a &Nudge!" msgstr "Enviar un &Fitxer" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 #, fuzzy msgid "&Emoticons" msgstr "Mostrar &Emoticones" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +msgid "Close &All Tabs" +msgstr "" + +#: chat/chatwindow.cpp:504 #, fuzzy msgid "Meeting" msgstr "Preferéncies" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "Canviar la &Font" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "Canviar el &color de font" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 #, fuzzy msgid "&Font" msgstr "&Conectar" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 #, fuzzy msgid "Font &Color" msgstr "Canviar el &color de font" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +#, fuzzy +msgid "Emoticons" +msgstr "Mostrar &Emoticones" + +#: chat/chatwindow.cpp:658 +#, fuzzy +msgid "My emoticons" +msgstr "Mostrar &Emoticones" + +#: chat/chatwindow.cpp:738 #, fuzzy msgid "&Settings" msgstr "Preferéncies" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "Mostrar &Emoticones" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +#, fuzzy +msgid "Hide Side&bar" +msgstr "Mostrar/Amagar la barra de &contactes" + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "Mostrar/Amagar la barra de &contactes" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +#, fuzzy +msgid "Hide the contact sidebar" +msgstr "Mostrar o amagar la barra de contactes" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +msgid "Close all tabs" +msgstr "" + +#: chat/chatwindow.cpp:856 +msgid "Close current tab" +msgstr "" + +#: chat/chatwindow.cpp:1467 +#, fuzzy +msgid "Show Side&bar" +msgstr "Mostrar/Amagar la barra de &contactes" + +#: chat/chatwindow.cpp:1468 +#, fuzzy +msgid "Show the contact sidebar" +msgstr "Mostrar o amagar la barra de contactes" + +#: chat/chatwindow.cpp:1565 +#, fuzzy +msgid "%1 is typing." +msgstr " esta escrivint." + +#: chat/chatwindow.cpp:1575 +#, fuzzy +msgid "%1 and %2 are typing." +msgstr " esta escrivint." + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "" + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "Xat" + +#: chat/chatwindow.cpp:1615 +#, fuzzy +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "Xat" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "&Enviar un correu" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 #, fuzzy msgid "&View Profile" msgstr "&Mostrar perfil" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "&Afegir contacte" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 #, fuzzy msgid "A&llow Contact" msgstr "&Permetre contacte" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 #, fuzzy msgid "&Delete Contact" msgstr "&Eliminar Contacte" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "&Bloquejar contacte" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "&Desbloquejar contacte" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 #, fuzzy msgid "&Friendly Name" msgstr "El teu nom amigable:" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 #, fuzzy msgid "&Email Address" msgstr "AdreƧa de correu:" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "" -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 msgid "Blocked" msgstr "Bloquejat" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 #, fuzzy msgid "The contact is %1" msgstr "Afegir aquest contacte a la teva llista \"Friends\"" -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +#, fuzzy +msgid "Add to Chat" +msgstr "Afegir un contacte" + +#: chat/emoticonsidebar.cpp:213 +#, fuzzy +msgid "Insert new" +msgstr "Inserir una emoticona" + +#: chat/emoticonsidebar.cpp:214 +msgid "Edit" +msgstr "" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +#, fuzzy +msgid "Remove" +msgstr "Eliminat" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 #, fuzzy msgid "Web Messenger" msgstr "Diseny web" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +#, fuzzy +msgid "Windows Live Messenger %1" +msgstr "Diseny web" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "En linea" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "Fora de linea" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "Permés" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "Eliminat" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 +#, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr " esta escrivint." + +#: contactlistviewdelegate.cpp:150 msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "Fora de linea" + +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "Torno en un moment" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "Ocupat" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "Invisible" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" msgstr "" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "Al telèfon" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "Estic menjant" + +#: dialogs/addcontactdialog.cpp:48 #, fuzzy msgid "Add a Contact" msgstr "Afegir un contacte" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 #, fuzzy msgid "No group" msgstr "&Eliminar Grup" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 #, fuzzy msgid "Add New Emoticon" msgstr "Mostrar &Emoticones" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "Mostrar &Emoticones" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "" @@ -1330,540 +1872,607 @@ msgstr "" msgid "Specify an Away message" msgstr "Especificar un missatge d'absencia" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "Fer anar un nom alternatiu per aquesta persona" - -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" -msgstr "Mostra un globus cuan aquesta persona canvia de Online a Ofline" - -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "Foto:" - -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "So:" - -#: dialogs/contactpropertiesdialog.cpp:234 +#: dialogs/contactaddeduserdialog.cpp:85 #, fuzzy -msgid "Contact Properties for %1" -msgstr "Propietats del contacte per " +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " +msgstr "t'ha afegit a la seva llista de contactes. Que vols fer:" -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " -msgstr "Adreça de correu: " +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "Conectat" -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "Nom actual: " - -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +msgid "Not seen yet" msgstr "" -#: dialogs/networkwindow.cpp:57 +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +#, fuzzy +msgid "No messages yet" +msgstr "Mostrar hora en els missatges" + +#: dialogs/contactpropertiesdialog.cpp:381 +msgid "Last seen: %1" +msgstr "" + +#: dialogs/contactpropertiesdialog.cpp:382 +#, fuzzy +msgid "Last message: %1" +msgstr "La font dels teus missatges:" + +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "Correu" + +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "Client de correu" + +#: dialogs/networkwindow.cpp:79 msgid "S&ave tab" msgstr "" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 msgid "C&lear tab" msgstr "" -#: dialogs/networkwindow.cpp:59 -msgid "Cl&ose tab" -msgstr "" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 msgid "" "No connections are present.\n" "Cannot open the Network Window." msgstr "" -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 msgid "" "Could not save the Network Window log. Make sure you have permission to " "write in the folder where it is being saved." msgstr "" -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "" -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +msgid "Cannot send commands to this kind of connection!" +msgstr "" + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 #, fuzzy msgid "Completed" msgstr "Conectat" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +msgid "%1 of %2 received." msgstr "" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +msgid "%1 of %2 sent." msgstr "" -#: dialogs/transferwindow.cpp:55 -#, fuzzy -msgid "File Transfers" -msgstr "Transferencia de l'arxiu completada." +#: dialogs/transferentry.cpp:373 +msgid "infinite" +msgstr "" -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 msgid "Cl&ean Up" msgstr "" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " "the theme folder '%1'." msgstr "" -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 #, fuzzy msgid "Smile" msgstr "Correu" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "" -#: emoticontheme.cpp:797 -msgid "Big smile" -msgstr "" - -#: emoticontheme.cpp:798 -#, fuzzy -msgid "Sad" -msgstr "i" - -#: emoticontheme.cpp:799 -msgid "Crying" -msgstr "" - -#: emoticontheme.cpp:800 -msgid "Angry" -msgstr "" - -#: emoticontheme.cpp:801 -msgid "Confused" -msgstr "" - -#: emoticontheme.cpp:802 -msgid "Embarrassed" -msgstr "" - -#: emoticontheme.cpp:803 -#, fuzzy -msgid "Disappointed" -msgstr "Desconectat" - -#: emoticontheme.cpp:804 -msgid "Hot" -msgstr "" - -#: emoticontheme.cpp:805 -msgid "Baring teeth" -msgstr "" - -#: emoticontheme.cpp:806 -msgid "Nerd" -msgstr "" - -#: emoticontheme.cpp:807 -msgid "Sick" -msgstr "" - -#: emoticontheme.cpp:808 -msgid "Surprised" -msgstr "" - -#: emoticontheme.cpp:809 -msgid "Party" -msgstr "" - -#: emoticontheme.cpp:810 -msgid "Sleepy" -msgstr "" - -#: emoticontheme.cpp:811 -msgid "Thinking" -msgstr "" - #: emoticontheme.cpp:812 -msgid "Don't tell anyone" +msgid "Big smile" msgstr "" #: emoticontheme.cpp:813 #, fuzzy -msgid "Secret telling" -msgstr "Preferéncies" +msgid "Sad" +msgstr "i" #: emoticontheme.cpp:814 -msgid "Eye-rolling" +msgid "Crying" msgstr "" #: emoticontheme.cpp:815 -msgid "Sarcastic" +msgid "Angry" msgstr "" #: emoticontheme.cpp:816 -msgid "I don't know" +msgid "Confused" msgstr "" #: emoticontheme.cpp:817 +msgid "Embarrassed" +msgstr "" + +#: emoticontheme.cpp:818 +#, fuzzy +msgid "Disappointed" +msgstr "Desconectat" + +#: emoticontheme.cpp:819 +msgid "Hot" +msgstr "" + +#: emoticontheme.cpp:820 +msgid "Baring teeth" +msgstr "" + +#: emoticontheme.cpp:821 +msgid "Nerd" +msgstr "" + +#: emoticontheme.cpp:822 +msgid "Sick" +msgstr "" + +#: emoticontheme.cpp:823 +msgid "Surprised" +msgstr "" + +#: emoticontheme.cpp:824 +msgid "Party" +msgstr "" + +#: emoticontheme.cpp:825 +msgid "Sleepy" +msgstr "" + +#: emoticontheme.cpp:826 +msgid "Thinking" +msgstr "" + +#: emoticontheme.cpp:827 +msgid "Don't tell anyone" +msgstr "" + +#: emoticontheme.cpp:828 +#, fuzzy +msgid "Secret telling" +msgstr "Preferéncies" + +#: emoticontheme.cpp:829 +msgid "Eye-rolling" +msgstr "" + +#: emoticontheme.cpp:830 +msgid "Sarcastic" +msgstr "" + +#: emoticontheme.cpp:831 +msgid "I don't know" +msgstr "" + +#: emoticontheme.cpp:832 #, fuzzy msgid "Be right back" msgstr "Torno en un moment" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "" -#: emoticontheme.cpp:824 -msgid "Dog face" -msgstr "" - -#: emoticontheme.cpp:825 -#, fuzzy -msgid "Sun" -msgstr "So:" - -#: emoticontheme.cpp:826 -msgid "Devil" -msgstr "" - -#: emoticontheme.cpp:827 -msgid "Right hug" -msgstr "" - -#: emoticontheme.cpp:828 -msgid "Girl" -msgstr "" - -#: emoticontheme.cpp:829 -msgid "Broken heart" -msgstr "" - -#: emoticontheme.cpp:830 -msgid "Wilted rose" -msgstr "" - -#: emoticontheme.cpp:831 -msgid "Thumbs down" -msgstr "" - -#: emoticontheme.cpp:832 -msgid "Cat face" -msgstr "" - -#: emoticontheme.cpp:833 -msgid "Sleeping half-moon" -msgstr "" - -#: emoticontheme.cpp:834 -msgid "Red lips" -msgstr "" - -#: emoticontheme.cpp:835 -#, fuzzy -msgid "Clapping" -msgstr "Parlant" - -#: emoticontheme.cpp:836 -msgid "Crossed fingers" -msgstr "" - -#: emoticontheme.cpp:837 -msgid "Auto" -msgstr "" - -#: emoticontheme.cpp:838 -msgid "Airplane" -msgstr "" - #: emoticontheme.cpp:839 -msgid "Turtle" +msgid "Dog face" msgstr "" #: emoticontheme.cpp:840 #, fuzzy -msgid "Snail" -msgstr "&Enviar un correu" +msgid "Sun" +msgstr "So:" #: emoticontheme.cpp:841 -msgid "Black sheep" +msgid "Devil" msgstr "" #: emoticontheme.cpp:842 -msgid "Goat" +msgid "Right hug" msgstr "" #: emoticontheme.cpp:843 -msgid "Vampire bat" +msgid "Girl" msgstr "" #: emoticontheme.cpp:844 -msgid "Pizza" +msgid "Broken heart" msgstr "" #: emoticontheme.cpp:845 -msgid "Beer mug" +msgid "Wilted rose" msgstr "" #: emoticontheme.cpp:846 -msgid "Martini glass" +msgid "Thumbs down" msgstr "" #: emoticontheme.cpp:847 -msgid "Coffee cup" +msgid "Cat face" msgstr "" #: emoticontheme.cpp:848 -msgid "Birthday cake" +msgid "Sleeping half-moon" msgstr "" #: emoticontheme.cpp:849 -msgid "Plate" +msgid "Red lips" msgstr "" #: emoticontheme.cpp:850 -msgid "Bowl" -msgstr "" +#, fuzzy +msgid "Clapping" +msgstr "Parlant" #: emoticontheme.cpp:851 -msgid "Star" +msgid "Crossed fingers" msgstr "" #: emoticontheme.cpp:852 -msgid "Rainbow" +msgid "Auto" msgstr "" #: emoticontheme.cpp:853 -msgid "Stormy cloud" +msgid "Airplane" msgstr "" #: emoticontheme.cpp:854 -msgid "Lightning" +msgid "Turtle" msgstr "" #: emoticontheme.cpp:855 -msgid "Umbrella" -msgstr "" +#, fuzzy +msgid "Snail" +msgstr "&Enviar un correu" #: emoticontheme.cpp:856 -msgid "Island with a palm tree" +msgid "Black sheep" msgstr "" #: emoticontheme.cpp:857 -msgid "Telephone receiver" +msgid "Goat" msgstr "" #: emoticontheme.cpp:858 +msgid "Vampire bat" +msgstr "" + +#: emoticontheme.cpp:859 +msgid "Pizza" +msgstr "" + +#: emoticontheme.cpp:860 +msgid "Beer mug" +msgstr "" + +#: emoticontheme.cpp:861 +msgid "Martini glass" +msgstr "" + +#: emoticontheme.cpp:862 +msgid "Coffee cup" +msgstr "" + +#: emoticontheme.cpp:863 +msgid "Birthday cake" +msgstr "" + +#: emoticontheme.cpp:864 +msgid "Plate" +msgstr "" + +#: emoticontheme.cpp:865 +msgid "Bowl" +msgstr "" + +#: emoticontheme.cpp:866 +msgid "Star" +msgstr "" + +#: emoticontheme.cpp:867 +msgid "Rainbow" +msgstr "" + +#: emoticontheme.cpp:868 +msgid "Stormy cloud" +msgstr "" + +#: emoticontheme.cpp:869 +msgid "Lightning" +msgstr "" + +#: emoticontheme.cpp:870 +msgid "Umbrella" +msgstr "" + +#: emoticontheme.cpp:871 +msgid "Island with a palm tree" +msgstr "" + +#: emoticontheme.cpp:872 +msgid "Telephone receiver" +msgstr "" + +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "Correu" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 #, fuzzy msgid "Clock" msgstr "Bloquejat" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 #, fuzzy msgid "Camera" msgstr "El teu nom" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 #, fuzzy msgid "Money" msgstr "Mes" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 #, fuzzy msgid "KMess Icon" msgstr "KMess" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "La conexió al servidor ha estat erronea" + +#: initialview.cpp:377 +msgid "Connect" +msgstr "Conectar" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "&Desconectar" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "" -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "" -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "Nou &Grup" + +#: kmess.cpp:226 #, fuzzy msgid "Add a group" msgstr "&Afegir grup" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "Introdueix un nom nom per aquest grup:" -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "" - -#: kmess.cpp:638 +#: kmess.cpp:569 #, fuzzy msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" msgstr "EstÔs segur que vols eliminar aquest grup?" -#: kmess.cpp:640 +#: kmess.cpp:571 #, fuzzy msgid "Remove contact" msgstr "&Eliminar Contacte" -#: kmess.cpp:641 kmess.cpp:684 -#, fuzzy -msgid "Remove" -msgstr "Eliminat" - -#: kmess.cpp:642 +#: kmess.cpp:573 #, fuzzy msgid "Remove and block" msgstr "Eliminat" -#: kmess.cpp:681 -#, fuzzy +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "EstÔs segur que vols eliminar aquest grup?" -#: kmess.cpp:683 +#: kmess.cpp:631 #, fuzzy -msgid "Remove group" -msgstr "&Eliminar Grup" +msgctxt "dialog button" +msgid "Remove" +msgstr "Eliminat" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "Aquest es un grup especial i no es pot canviar" -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 #, fuzzy msgid "Rename group" msgstr "Re&nombrar grup" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "Conectat" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "Autentificació fallida" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "Desconectat" -#: kmess.cpp:1441 +#: kmess.cpp:1408 msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" -#: kmess.cpp:1445 +#: kmess.cpp:1412 #, fuzzy msgid "Error with notifications" msgstr "Notificació de correu" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "KMess" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "&Accions" @@ -1885,954 +2494,865 @@ msgstr "&Buscar un contacte" msgid "Search by &Interest" msgstr "Buscar per &InterĆ©s" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "&Buscar un contacte" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "Nou &Perfil" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "&Opcions del compte" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "Co&nectar" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "&Desconectar" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "Veure el meu &perfil" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "El meu &Estat" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "Fora de linea, amb resposta automĆ tica" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "&Veure els contactes admesos" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 msgid "Show &Offline Contacts" msgstr "Veure els contactes f&ora de linea" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "Veure els contactes &eliminats" -#: kmessinterface.cpp:303 +#: kmessinterface.cpp:318 #, fuzzy -msgid "Show &Display Pictures" +msgid "Show &Empty Groups" +msgstr "Mostrar &Emoticones" + +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" msgstr "Foto:" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "Correu" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "&Ordenar els contactes per" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "Grup" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "En Linea/Fora" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +#, fuzzy +msgid "[%1] %2 goes online" +msgstr "estĆ” fora de linea" + +#: kmessview.cpp:363 +#, fuzzy +msgid "[%1] %2 goes offline" +msgstr "estĆ” fora de linea" + +#: kmessview.cpp:559 #, fuzzy msgid "Cha&t" msgstr "Xat" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "&Propietats" -#: kmessview.cpp:492 +#: kmessview.cpp:569 #, fuzzy msgid "&Remove from group" msgstr "&Eliminar Grup" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +#, fuzzy +msgid "&Listening Music" +msgstr "Enviant l'arxiu " + +#: kmessview.cpp:601 #, fuzzy msgid "&Copy to Group" msgstr "&Moure al grup" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "&Moure al grup" -#: kmessview.cpp:549 +#: kmessview.cpp:646 msgid "Move Group &Down" msgstr "&Moure grup a sota" -#: kmessview.cpp:550 +#: kmessview.cpp:647 msgid "Move Group &Up" msgstr "&Moure grup a sobre" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "&Eliminar Grup" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "Re&nombrar grup" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 #, fuzzy msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "Correu" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "" -#: kmessview.cpp:918 +#: kmessview.cpp:1075 +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "" + +#: kmessview.cpp:1076 +#, fuzzy +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "La font dels teus missatges:" + +#: kmessview.cpp:1085 msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "" -#: kmessview.cpp:921 +#: kmessview.cpp:1090 #, fuzzy -msgctxt "Contacts count in group tooltip" +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "&Afegir contacte" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +#, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "&Afegir contacte" + +#: kmessview.cpp:1504 msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "" -#: kmessview.cpp:1543 -#, fuzzy -msgid "You have 1 new e-mail in your inbox." -msgstr "nou correu al compte" +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" -#: kmessview.cpp:1547 -#, fuzzy -msgid "You have %1 new emails in your inbox." -msgstr "nous correus al compte" - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "KMess" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 msgid "Project support" msgstr "" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 #, fuzzy msgid "Current developer" msgstr "Programador de GnomeMeeting" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 #, fuzzy msgid "" "German translation, testing, documentation, web master, project management, " "etc..." msgstr "Traducció alemana, test, documentació i pĆ gina web" -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "Diseny web" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "" "Les emoticones principals groga/blava/violeta, varies emoticones i la " "traducció a l'italiĆ ." -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "Emoticones Cartoon" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "El tema de so per defecte" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "Traducció a l'Arab, arranjaments en el sistema per guardar fitxers" -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 #, fuzzy msgid "More Arabic translation" msgstr "Mes Traducció al Turc" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "Traducció brasilera/portuguesa" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 #, fuzzy msgid "Catalan translation" msgstr "Traducció al catalĆ " -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 #, fuzzy msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "Traducció simplificada al XinĆ©s, enviament d'arxius bug fix" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 #, fuzzy msgid "More Simplified Chinese translation" msgstr "Traducció simplificada al XinĆ©s, enviament d'arxius bug fix" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 #, fuzzy msgid "Traditional Chinese translation" msgstr "Traducció al catalĆ " -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 #, fuzzy msgid "Danish translation" msgstr "Traducció danesa" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 #, fuzzy msgid "More Danish translation" msgstr "Traducció danesa" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "Traduccó \"Dutch\"" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 #, fuzzy msgid "More Dutch translation" msgstr "Traduccó \"Dutch\"" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 #, fuzzy msgid "Estonian translation" msgstr "Traducció Estonia" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 #, fuzzy msgid "Finnish translation" msgstr "Traducció danesa" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 #, fuzzy msgid "More Finnish translation" msgstr "Traducció danesa" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "Traducció al francĆ©s" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 #, fuzzy msgid "More French translation, MSN6 emoticon definitions" msgstr "Traducció al francĆ©s" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 #, fuzzy msgid "More French translation" msgstr "Traducció al francĆ©s" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 #, fuzzy msgid "Hungarian translation" msgstr "Traducció Estonia" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 #, fuzzy msgid "More Italian translation" msgstr "Traducció al KoreĆ”" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "Traducció al KoreĆ”" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 #, fuzzy msgid "Norsk BokmĆ„l translation" msgstr "Traducció al \"Norsk Bokml\"" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 #, fuzzy msgid "Slovenian translation" msgstr "Traducció al KoreĆ”" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "Traducció espaƱola" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 #, fuzzy msgid "More Spanish translation" msgstr "mes traducció a l'espanyol." -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 #, fuzzy msgid "Swedish translation" msgstr "Traducció espaƱola" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 #, fuzzy msgid "Thai translation" msgstr "Traducció al Thailandes" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "Traducció al Turc" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "Mes Traducció al Turc" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -#, fuzzy -msgid "Guido Solinas" -msgstr "En linea" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "Transferencia de l'arxiu completada." + +#: main.cpp:134 msgid "P4-Context field support" msgstr "" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "Arreglos en el sistema Xinerama" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "El codi original de la recepció d'arxius" -#: main.cpp:120 -msgid "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" msgstr "" -#: main.cpp:120 +#: main.cpp:138 +msgid "KWallet support" +msgstr "" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "Alguns arranjaments en la internacionalització" + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "Alguns arranjaments en la internacionalització" -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "Programador de GnomeMeeting" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "Noi amb una bossa al cap" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "Inspiració i una mica de codi" -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 +#: main.cpp:150 #, fuzzy msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "Codi dels globus" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "Codi del temporitzador" -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 +#: main.cpp:152 msgid "Close-to-tray icon screenshot code" msgstr "" -#: main.cpp:131 +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 #, fuzzy msgid "Your name here?" msgstr "El teu nom" -#: main.cpp:131 +#: main.cpp:156 msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" -#: main.cpp:134 +#: main.cpp:159 #, fuzzy msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "El teu nom" -#: main.cpp:135 +#: main.cpp:160 #, fuzzy msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "La teva adreƧa email:" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "Entrar automaticament amb el correu" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 #, fuzzy msgid "The contact cancelled the session." msgstr "Has cancelĀ·lat la invitació." -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 #, fuzzy msgid "The contact rejected the invitation." msgstr "El contacte ha rebutjat el meeting." -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 #, fuzzy msgid "You have cancelled the session." msgstr "Has cancelĀ·lat la invitació." -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "Has rebutjat l'invitació." -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +msgid "Do you want to accept or cancel?" msgstr "" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +msgid "Click to cancel." msgstr "" -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 #, fuzzy msgid "Do you want to accept the file: %1 (%2)" msgstr "Vols acceptar l'arxiu: " -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 #, fuzzy msgid "The transfer of %1 failed. Couldn't open file." msgstr "error. No s'ha pogut obrir l'arxiu" -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "Transferencia acceptada." + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 #, fuzzy msgid "Connecting to %1, port %2" msgstr "Conexió fallida" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 #, fuzzy msgid "The transfer was cancelled" msgstr "Transferencia acceptada." -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 #, fuzzy msgid "Connection established" msgstr "Conexió fallida" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 #, fuzzy msgid "Successfully transferred file: %1" msgstr "Arxiu transferit: " -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 #, fuzzy msgid "The transfer of %1 failed. The file does not exist." msgstr "error. No s'ha pogut obrir l'arxiu" -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 #, fuzzy msgid "The transfer of %1 failed. The file could not be read." msgstr "error. No es pot fer la conexió" -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 #, fuzzy msgid "Sending file %1" msgstr "Enviant l'arxiu " -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "Transferencia acceptada." - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 #, fuzzy msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "Has cancelĀ·lat la invitació." -#: network/applications/filetransferp2p.cpp:345 +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." +msgstr "" + +#: network/applications/filetransferp2p.cpp:348 +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "" + +#: network/applications/filetransferp2p.cpp:378 #, fuzzy -msgid "The transfer of %1 failed. Couldn't open file" +msgid "The transfer of file "%1" failed. Couldn't save the file." msgstr "error. No s'ha pogut obrir l'arxiu" -#: network/applications/filetransferp2p.cpp:524 +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 #, fuzzy -msgid "The contact cancelled the transfer." +msgid "The contact has cancelled the transfer of file "%1"." msgstr "Has cancelĀ·lat la invitació." -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "Has cancelĀ·lat la invitació." + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "" -#: network/applications/filetransferp2p.cpp:768 +#: network/applications/filetransferp2p.cpp:676 #, fuzzy -msgid "The transfer of %1 failed. The file does not exist." +msgid "Successfully sent file "%1"." +msgstr "Arxiu transferit: " + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "Arxiu transferit: " + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "error. No s'ha pogut obrir l'arxiu" -#: network/applications/filetransferp2p.cpp:773 +#: network/applications/filetransferp2p.cpp:818 #, fuzzy -msgid "The transfer of %1 failed. The file could not be read." +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "error. No es pot fer la conexió" -#: network/applications/filetransferp2p.cpp:809 +#: network/applications/filetransferp2p.cpp:855 #, fuzzy -msgid "Sending file %1 (%2)" +msgid "Sending file "%1" (%2)." msgstr "Enviant l'arxiu " -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "Has cancelĀ·lat la invitació." + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "Has estat convidat a comenƧar un meeting (utilitzant GnomeMeeting)" -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 #, fuzzy msgid "Starting GnomeMeeting. Connecting to %1." msgstr "Engegant GnomeMeeting. Conectant a " -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "Convidant el contacte a un meeting." -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "" -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 #, fuzzy msgid "The invitation was aborted. An internal error occured." msgstr "El contacte ha rebutjat el meeting." -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 #, fuzzy msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "error. No es pot obrir un socket" -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 #, fuzzy msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "Has cancelĀ·lat la invitació." -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "" -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 #, fuzzy msgid "The invitation was aborted." msgstr "Has cancelĀ·lat la invitació." -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "Has estat convidat a compartir l'escriptori d'aquesta persona." -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 #, fuzzy msgid "Starting KRDC. Connecting to %1." msgstr "Engegant GnomeMeeting. Conectant a " -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." -msgstr "" +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +#, fuzzy +msgid "The contact rejected the invitation. An internal error occured." +msgstr "El contacte ha rebutjat el meeting." -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +#, fuzzy +msgid "The transfer failed." +msgstr "La transferĆØncia de " + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." msgstr "" -#: network/applications/p2papplication.cpp:1503 -#, fuzzy -msgid "The transfer failed. Data preparation failed." -msgstr "Has cancelĀ·lat la invitació." - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -#, fuzzy -msgid "The contact rejected the invitation. An internal error occured." -msgstr "El contacte ha rebutjat el meeting." - -#: network/applications/p2papplication.cpp:1626 -#, fuzzy -msgid "The transfer failed." -msgstr "La transferĆØncia de " - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +#, fuzzy +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "error. No es pot obrir un socket" + +#: network/applications/p2papplicationbase.cpp:1015 +#, fuzzy +msgid "The transfer failed. An internal error occured." +msgstr "El contacte ha rebutjat el meeting." + +#: network/applications/p2papplicationbase.cpp:1176 +#, fuzzy +msgid "The transfer failed. Couldn't open data source." +msgstr "error. No es pot obrir un socket" + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "" + +#: network/applications/p2papplication.cpp:1071 +#, fuzzy +msgid "The transfer failed. Data preparation failed." +msgstr "Has cancelĀ·lat la invitació." + +#: network/applications/p2papplication.cpp:1178 #, fuzzy msgid "The invitation was cancelled. Message was not directed to us." msgstr "Has cancelĀ·lat la invitació." -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 #, fuzzy msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "error. No es pot obrir un socket" -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "" -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "" -#: network/applications/p2papplication.cpp:3297 -#, fuzzy -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "error. No es pot obrir un socket" - -#: network/applications/p2papplication.cpp:3316 -#, fuzzy -msgid "The transfer failed. An internal error occured." -msgstr "El contacte ha rebutjat el meeting." - -#: network/applications/p2papplication.cpp:3693 -#, fuzzy -msgid "The transfer failed. Couldn't open data source." -msgstr "error. No es pot obrir un socket" - -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:3113 msgid "Waiting for connection" msgstr "" -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 #, fuzzy msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " "accept." msgstr "error. No es pot obrir un socket" -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 #, fuzzy msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." msgstr "error. No es pot obrir un socket" -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "" -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 #, fuzzy msgid "You are invited to start a voice conversation." msgstr "Has estat convidat a compartir l'escriptori d'aquesta persona." -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 #, fuzzy msgid "" "You are invited to start a voice conversation but support for this was not " "installed" msgstr "Has estat convidat a comenƧar un meeting (utilitzant GnomeMeeting)" -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 #, fuzzy msgid "You have cancelled the voice conversation." msgstr "Has cancelĀ·lat la invitació." -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 #, fuzzy msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "Has cancelĀ·lat la invitació." -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 #, fuzzy msgid "Start voice conversation. Connecting to %1." msgstr "Engegant GnomeMeeting. Conectant a " -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 #, fuzzy msgid "Start voice conversation. Listening on %1." msgstr "Engegant GnomeMeeting. Conectant a " -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 #, fuzzy msgid "Inviting the contact to a voice conversation." msgstr "Convidant el contacte a un meeting." -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 #, fuzzy msgid "The contact is inviting you for '%1', but this is not implemented yet." @@ -2879,661 +3399,869 @@ msgstr "" msgid "Receiving file %1" msgstr "Rebent l'arxiu " -#: network/msnconnection.cpp:477 -#, fuzzy -msgid "1 ping lost" -msgstr "Agafant les llistes" - -#: network/msnconnection.cpp:481 -#, fuzzy -msgid "%1 pings lost" -msgstr "Agafant les llistes" - -#: network/msnconnection.cpp:496 -#, fuzzy -msgid "The connection to the server was lost." -msgstr "La conexió al servidor ha estat erronea" - -#: network/msnconnection.cpp:704 -msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." +#: network/msnconnection.cpp:589 +msgid "KMess could not access the remote webservice.
Details: %1" msgstr "" -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "" - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" - -#: network/msnnotificationconnection.cpp:724 -#, fuzzy -msgid "Show MSN Messenger Service status?" -msgstr "Veure l'estat de .NET?" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "Error en el server" - -#: network/msnnotificationconnection.cpp:1344 +#: network/msnnotificationconnection.cpp:1317 #, fuzzy msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" msgstr "" "Has estat desconectat per que has \n" "establert una conexió amb un altre client \n" "desde un altre lloc" -#: network/msnnotificationconnection.cpp:1558 +#: network/msnnotificationconnection.cpp:1532 msgid "Got synchronization" msgstr "Sincronitzat" -#: network/msnnotificationconnection.cpp:1699 +#: network/msnnotificationconnection.cpp:1670 #, fuzzy -msgid "Authenticating" +msgid "Authenticating..." msgstr "Autentificació fallida" -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "Rebuda confirmació de l'usuari" - -#: network/msnnotificationconnection.cpp:1752 +#: network/msnnotificationconnection.cpp:1719 msgid "Waiting for contact list..." msgstr "" -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "Notificant al servidor" - -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." msgstr "" -#: network/msnnotificationconnection.cpp:2042 +#: network/msnnotificationconnection.cpp:1894 +msgid "Authentication failed, please verify your account name and password." +msgstr "" + +#: network/msnnotificationconnection.cpp:1993 #, fuzzy msgid "Connecting..." msgstr "Conectar" -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" +#: network/msnnotificationconnection.cpp:2167 +msgid "Unknown command received from the server: %1" msgstr "" -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 +#: network/msnnotificationconnection.cpp:2192 msgid "Invalid command syntax" msgstr "" -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -#, fuzzy -msgid "There was an internal error in KMess: %1" -msgstr "Hi ha un error intern del servidor" - -#: network/msnnotificationconnection.cpp:2243 +#: network/msnnotificationconnection.cpp:2196 msgid "Invalid command parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2246 +#: network/msnnotificationconnection.cpp:2199 msgid "The email you have tried to add is not a MSN Messenger account" msgstr "" -#: network/msnnotificationconnection.cpp:2249 +#: network/msnnotificationconnection.cpp:2204 msgid "Domain name missing" msgstr "" -#: network/msnnotificationconnection.cpp:2252 +#: network/msnnotificationconnection.cpp:2208 msgid "Already logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2255 +#: network/msnnotificationconnection.cpp:2211 #, fuzzy msgid "The account name given is invalid" msgstr "L'usuari no es valid" -#: network/msnnotificationconnection.cpp:2258 +#: network/msnnotificationconnection.cpp:2215 msgid "" "That account name is invalid, or your passport has not been confirmed yet" msgstr "" -#: network/msnnotificationconnection.cpp:2261 +#: network/msnnotificationconnection.cpp:2218 msgid "Your contact list is full" msgstr "La teva llista de contactes està plena" -#: network/msnnotificationconnection.cpp:2264 +#: network/msnnotificationconnection.cpp:2223 msgid "Invalid SBP parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2267 +#: network/msnnotificationconnection.cpp:2226 #, fuzzy msgid "This contact is already on your list" msgstr "Afegir aquest contacte a la teva llista \"Friends\"" -#: network/msnnotificationconnection.cpp:2270 +#: network/msnnotificationconnection.cpp:2230 #, fuzzy msgid "This contact is not on your list" msgstr "Afegir aquest contacte a la teva llista \"Friends\"" -#: network/msnnotificationconnection.cpp:2273 +#: network/msnnotificationconnection.cpp:2234 msgid "This contact is not online" msgstr "" -#: network/msnnotificationconnection.cpp:2276 +#: network/msnnotificationconnection.cpp:2239 msgid "Already in this mode" msgstr "" -#: network/msnnotificationconnection.cpp:2279 +#: network/msnnotificationconnection.cpp:2243 #, fuzzy msgid "Contact is in the opposite list" msgstr "Afegir aquest contacte a la teva llista \"Friends\"" -#: network/msnnotificationconnection.cpp:2282 +#: network/msnnotificationconnection.cpp:2247 +msgid "" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." +msgstr "" + +#: network/msnnotificationconnection.cpp:2251 #, fuzzy msgid "Your contact list has too many groups" msgstr "La teva llista de contactes està plena" -#: network/msnnotificationconnection.cpp:2285 +#: network/msnnotificationconnection.cpp:2255 #, fuzzy msgid "This group can't be changed" msgstr "Aquest es un grup especial i no es pot canviar" -#: network/msnnotificationconnection.cpp:2288 +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "La teva llista de contactes està plena" + +#: network/msnnotificationconnection.cpp:2264 msgid "This group is not empty" msgstr "" -#: network/msnnotificationconnection.cpp:2291 -msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" -msgstr "" - -#: network/msnnotificationconnection.cpp:2294 +#: network/msnnotificationconnection.cpp:2268 msgid "The group name is too long" msgstr "" -#: network/msnnotificationconnection.cpp:2297 +#: network/msnnotificationconnection.cpp:2273 msgid "Attempted to change group \"0\"" msgstr "" -#: network/msnnotificationconnection.cpp:2300 +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +#, fuzzy +msgid "There was an internal error in KMess: %1" +msgstr "Hi ha un error intern del servidor" + +#: network/msnnotificationconnection.cpp:2277 #, fuzzy msgid "Invalid Group" msgstr "Re&nombrar grup" -#: network/msnnotificationconnection.cpp:2303 +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 msgid "Switchboard server failed" msgstr "" -#: network/msnnotificationconnection.cpp:2306 +#: network/msnnotificationconnection.cpp:2287 #, fuzzy msgid "Transfer to switchboard server failed" msgstr "Notificant al servidor" -#: network/msnnotificationconnection.cpp:2309 +#: network/msnnotificationconnection.cpp:2291 msgid "Direct connection (MSNSLP) error, connection failed" msgstr "" -#: network/msnnotificationconnection.cpp:2312 +#: network/msnnotificationconnection.cpp:2295 msgid "Required field missing" msgstr "" -#: network/msnnotificationconnection.cpp:2315 +#: network/msnnotificationconnection.cpp:2299 msgid "Not logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" +#: network/msnnotificationconnection.cpp:2302 +msgid "No permissions given for this account" msgstr "" -#: network/msnnotificationconnection.cpp:2322 +#: network/msnnotificationconnection.cpp:2307 msgid "Command is disabled" msgstr "" -#: network/msnnotificationconnection.cpp:2325 +#: network/msnnotificationconnection.cpp:2310 msgid "Your account is banned." msgstr "" -#: network/msnnotificationconnection.cpp:2329 +#: network/msnnotificationconnection.cpp:2314 #, fuzzy msgid "Challenge response failed" msgstr "La transferència de " -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" +#: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" msgstr "" -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" +#: network/msnnotificationconnection.cpp:2323 +msgid "You are opening chat sessions too fast" msgstr "" -#: network/msnnotificationconnection.cpp:2341 +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" +msgstr "Has cancel·lat la invitació." + +#: network/msnnotificationconnection.cpp:2334 msgid "Unexpected command sequence" msgstr "" -#: network/msnnotificationconnection.cpp:2344 +#: network/msnnotificationconnection.cpp:2338 #, fuzzy msgid "Bad friend name" msgstr "El teu nom amigable:" -#: network/msnnotificationconnection.cpp:2348 +#: network/msnnotificationconnection.cpp:2344 msgid "Bad CVR data" msgstr "" -#: network/msnnotificationconnection.cpp:2353 +#: network/msnnotificationconnection.cpp:2350 msgid "The server reports KMess is flooding it with too many data" msgstr "" -#: network/msnnotificationconnection.cpp:2358 +#: network/msnnotificationconnection.cpp:2357 #, fuzzy msgid "Authentication ticket was incorrect" msgstr "Autentificació fallida" -#: network/msnnotificationconnection.cpp:2362 +#: network/msnnotificationconnection.cpp:2360 msgid "You can't start a chat with someone while you are invisible." msgstr "No pots començar una conversa amb algú si ets invisible." -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." +#: network/msnnotificationconnection.cpp:2364 +msgid "Not accepting new contacts" msgstr "" -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." +#: network/msnnotificationconnection.cpp:2368 +msgid "" +"You have a kids passport account, you need parental consent to chat online." msgstr "" -#: network/msnnotificationconnection.cpp:2373 +#: network/msnnotificationconnection.cpp:2371 +msgid "Your passport account needs to be verified first." +msgstr "" + +#: network/msnnotificationconnection.cpp:2375 msgid "Bad USR ticket" msgstr "" -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" msgstr "" -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" +#: network/msnnotificationconnection.cpp:2399 +#, fuzzy +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." msgstr "Hi ha un error intern del servidor" +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + #: network/msnnotificationconnection.cpp:2414 -#, fuzzy -msgid "The server is too busy" -msgstr "El servidor estÔ ocupat" - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "El servidor no està en servei" - -#: network/msnnotificationconnection.cpp:2422 msgid "Peer notification server down" msgstr "El servidor notifica que està caigut" -#: network/msnnotificationconnection.cpp:2426 +#: network/msnnotificationconnection.cpp:2418 #, fuzzy msgid "The server is going down" msgstr "El servidor caurà en breu" -#: network/msnnotificationconnection.cpp:2429 +#: network/msnnotificationconnection.cpp:2422 msgid "The server is going down soon" msgstr "El servidor caurà en breu" -#: network/msnnotificationconnection.cpp:2433 +#: network/msnnotificationconnection.cpp:2427 msgid "Write is blocking" msgstr "" -#: network/msnnotificationconnection.cpp:2436 +#: network/msnnotificationconnection.cpp:2431 msgid "Session is overloaded" msgstr "" -#: network/msnnotificationconnection.cpp:2441 +#: network/msnnotificationconnection.cpp:2438 #, fuzzy msgid "The server is not available" msgstr "El servidor no està en servei" -#: network/msnnotificationconnection.cpp:2444 +#: network/msnnotificationconnection.cpp:2442 msgid "Authentication failed" msgstr "Autentificació fallida" -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" +#: network/msnnotificationconnection.cpp:2449 +msgid "Unknown error code received from the server: %1" msgstr "" -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +msgctxt "Error dialog box title" +msgid "MSN error" msgstr "" -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "" +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "minuts" +msgstr[1] "minuts" #: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." +msgid "Server closes for maintenance in %1!" msgstr "" #: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." msgstr "" -#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:2901 msgid "Lost reference to SOAP client" msgstr "" -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +msgid "KMess could not process Offline-IM messages.
Details: %1" msgstr "" -#: network/msnnotificationconnection.cpp:3209 +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "Autentificació fallida" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "Hi ha un error intern del servidor" + +#: network/msnnotificationconnection.cpp:3242 +msgctxt "Login error message, with more details for developer versions" msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" msgstr "" -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" msgstr "" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "La conexió al servidor ha estat erronea" + +#: network/msnnotificationconnection.cpp:3302 +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" +msgstr "" + +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "Error en el server" + +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "Conexió fallida" + +#: network/msnsockettcp.cpp:368 +#, fuzzy +msgid "1 ping lost" +msgstr "Agafant les llistes" + +#: network/msnsockettcp.cpp:372 +#, fuzzy +msgid "%1 pings lost" +msgstr "Agafant les llistes" + +#: network/msnsockettcp.cpp:387 +#, fuzzy +msgid "The connection to the server was lost." +msgstr "La conexió al servidor ha estat erronea" + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "Aquesta persona estÔ Offline o Invisible." -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "" -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 #, fuzzy msgid "The message \"%1\" was not received!" msgstr "no s'ha rebut." -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "" -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +msgid "In %1's chat: %2" msgstr "" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +msgid "%1 says:
'%2'" msgstr "" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" -msgstr "" - -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" -msgstr "" - -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" -msgstr "" - -#: notification/notificationchat.cpp:200 +#: notification/chatnotification.cpp:171 #, fuzzy -msgid "%1 has sent you a handwritten message!" +msgid "%1 has sent you an offline message:
'%2'" msgstr " esta en linea" -#: notification/notificationchat.cpp:204 -#, fuzzy -msgid "%1 has sent you a nudge!" -msgstr " esta en linea" - -#: notification/notificationchat.cpp:208 -#, fuzzy -msgid "%1 has sent you a wink!" -msgstr " esta en linea" - -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" +#: notification/chatnotification.cpp:178 +msgid "%1's chat requests attention!" msgstr "" -#: notification/notificationchat.cpp:215 +#: notification/chatnotification.cpp:183 +msgid "%1:
%2" +msgstr "" + +#: notification/chatnotification.cpp:190 #, fuzzy -msgid "%1 is sending you a file!" +msgid "%1 has sent you a handwritten message!" msgstr " esta en linea" -#: notification/notificationchat.cpp:216 +#: notification/chatnotification.cpp:194 #, fuzzy -msgid "%1 has sent you an invitation!" +msgid "%1 has sent you a nudge!" msgstr " esta en linea" -#: notification/notificationchat.cpp:223 +#: notification/chatnotification.cpp:198 #, fuzzy -msgid "%1 has canceled the webcam session!" +msgid "%1 has sent you a wink!" +msgstr " esta en linea" + +#: notification/chatnotification.cpp:204 +msgid "%1 wants to use the webcam!" +msgstr "" + +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" +msgstr " esta en linea" + +#: notification/chatnotification.cpp:206 +#, fuzzy +msgid "%1 has sent you an invitation!" +msgstr " esta en linea" + +#: notification/chatnotification.cpp:213 +#, fuzzy +msgid "%1 has canceled the webcam session!" msgstr "Has cancel·lat la invitació." -#: notification/notificationchat.cpp:224 +#: notification/chatnotification.cpp:214 #, fuzzy -msgid "%1 has canceled the file transfer!" +msgid "%1 has canceled the file transfer!" msgstr "Has cancel·lat la invitació." -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +msgid "%1's activity has been canceled!" msgstr "" -#: notification/notificationchat.cpp:232 -msgid "%1 has accepted to use the webcam!" -msgstr "" - -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" -msgstr "" - -#: notification/notificationchat.cpp:234 -msgid "%1 has accepted your invitation!" -msgstr "" - -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" -msgstr "" - -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" -msgstr "" - -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" -msgstr "" - -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" -msgstr "" - -#: notification/notificationchat.cpp:251 +#: notification/chatnotification.cpp:222 #, fuzzy -msgid "The file transfer with %1 has failed!" +msgid "%1 has accepted to use the webcam!" +msgstr "Has cancel·lat la invitació." + +#: notification/chatnotification.cpp:223 +#, fuzzy +msgid "%1 has accepted the file transfer!" +msgstr "Has cancel·lat la invitació." + +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" +msgstr " esta en linea" + +#: notification/chatnotification.cpp:231 +#, fuzzy +msgid "%1 has ended the webcam session!" +msgstr "Has cancel·lat la invitació." + +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "La transferència de " -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:233 +msgid "%1's activity has ended!" msgstr "" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -#, fuzzy -msgid "%1 is now online" -msgstr " esta en linea" - -#: notification/notificationcontactstatus.cpp:76 -#, fuzzy -msgid "%1 has gone away" -msgstr " esta en linea" - -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/chatnotification.cpp:240 +msgid "%1's webcam session has failed!" msgstr "" -#: notification/notificationcontactstatus.cpp:78 +#: notification/chatnotification.cpp:241 #, fuzzy -msgid "%1 is now busy" -msgstr " esta en linea" +msgid "The file transfer with %1 has failed!" +msgstr "La transferència de " -#: notification/notificationcontactstatus.cpp:79 -#, fuzzy -msgid "%1 has become invisible" -msgstr " esta en linea" - -#: notification/notificationcontactstatus.cpp:80 -#, fuzzy -msgid "%1 has gone idle" -msgstr " esta en linea" - -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/chatnotification.cpp:242 +msgid "%1's activity has ended with an error!" msgstr "" -#: notification/notificationcontactstatus.cpp:82 +#: notification/contactstatusnotification.cpp:70 #, fuzzy -msgid "%1 is on the phone" +msgid "%1 is now online" msgstr " esta en linea" -#: notification/notificationcontactstatus.cpp:83 +#: notification/contactstatusnotification.cpp:71 #, fuzzy -msgid "%1 is out for lunch" +msgid "%1 has gone away" msgstr " esta en linea" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/contactstatusnotification.cpp:72 +msgid "%1 will be right back" msgstr "" -#: settings/accountswidget.cpp:81 +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" +msgstr " esta en linea" + +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" +msgstr " esta en linea" + +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" +msgstr " esta en linea" + +#: notification/contactstatusnotification.cpp:76 +#, fuzzy +msgid "%1 has logged out" +msgstr " esta en linea" + +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" +msgstr " esta en linea" + +#: notification/contactstatusnotification.cpp:78 +#, fuzzy +msgid "%1 is out for lunch" +msgstr " esta en linea" + +#: notification/newemailnotification.cpp:78 +msgid "New email:
'%1'
by '%2'" +msgstr "" + +#: settings/accountpage.cpp:69 msgid "Browse..." msgstr "" -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +msgid "Browse and crop picture..." msgstr "" -#: settings/accountswidget.cpp:404 +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" + +#: settings/accountpage.cpp:448 #, fuzzy -msgid "Display Picture" +msgid "Downloading of display picture failed" msgstr "Foto:" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" -msgstr "" - -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "" - -#: settings/chatstylepage.cpp:317 -msgid "Great!" -msgstr "" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 #, fuzzy msgid "&Delete" msgstr "&Eliminar Contacte" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "Preferéncies" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 #, fuzzy msgid "Account" msgstr "Comptes" -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 #, fuzzy msgid "My Account" msgstr "Comptes" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "Alertes" -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 #, fuzzy msgid "Alerts and Notifications" msgstr "Notificació de correu" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "Parlant" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "Guardar Registre" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "" + +#: settings/accountsettingsdialog.cpp:201 +msgid "The email address you have entered is already in use: '%1'" +msgstr "" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "EstÔs segur d'esborrar aquesta compta?" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "EstÔs segur d'esborrar aquesta compta?" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "" + +#: settings/chatstylepage.cpp:341 +msgid "Great!" +msgstr "" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "Preferéncies" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +msgid "Accounts" +msgstr "Comptes" + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "Notificació de correu" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "Guardar els registres en aquest directori:" + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." msgstr "" -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "" +#: systemtraywidget.cpp:245 +msgid "- %1 (%2)" +msgstr "" + +#~ msgid "Picture:" +#~ msgstr "Foto:" + +#, fuzzy +#~ msgid "Speed:" +#~ msgstr "Error en el server" + +#, fuzzy +#~ msgid "Login Information" +#~ msgstr "Mostra l'informació de l'email a la llista de contactes" + +#~ msgid "Logging in..." +#~ msgstr "Entrant al sistema" + +#~ msgid "Use a specified command:" +#~ msgstr "Utilitza una comanda específica:" + +#, fuzzy +#~ msgid "Email: " +#~ msgstr "Correu" + +#, fuzzy +#~ msgid "Remove group" +#~ msgstr "&Eliminar Grup" + +#, fuzzy +#~ msgid "Show &Display Pictures" +#~ msgstr "Foto:" + +#, fuzzy +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr "nou correu al compte" + +#, fuzzy +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr "nous correus al compte" + +#, fuzzy +#~ msgid "Guido Solinas" +#~ msgstr "En linea" + +#, fuzzy +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "error. No s'ha pogut obrir l'arxiu" + +#, fuzzy +#~ msgid "Sidebar" +#~ msgstr "Mostrar/Amagar la barra de &contactes" + +#, fuzzy +#~ msgid "New contact's group" +#~ msgstr "Nou &Contacte" + +#, fuzzy +#~ msgid "Enter your login information:" +#~ msgstr "O entra la teva informació d'accés:" + +#, fuzzy +#~ msgid "Your friendly name:" +#~ msgstr "El teu nom amigable:" + +#, fuzzy +#~ msgid "Your email address:" +#~ msgstr "Adreça de correu: " + +#~ msgid "Your password:" +#~ msgstr "La teva clau:" + +#, fuzzy +#~ msgid "Display picture:" +#~ msgstr "Foto:" + +#, fuzzy +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "" +#~ "Mostra una notificació cuan el correu rebut estÔ a \"altres carpetes\"" + +#~ msgid "Organize chat folders by:" +#~ msgstr "Organitzar les carpetes de xat per:" + +#, fuzzy +#~ msgid "&Show graphics in chat messages" +#~ msgstr "Mostrar hora en els missatges" + +#~ msgid "Use Hotmail" +#~ msgstr "Fes anar Hotmail" + +#~ msgid "says:" +#~ msgstr "diu:" + +#~ msgid "Current name: " +#~ msgstr "Nom actual: " + +#, fuzzy +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr "Veure l'estat de .NET?" + +#~ msgid "Received user confirmation" +#~ msgstr "Rebuda confirmació de l'usuari" + +#~ msgid "Transfer to notification server" +#~ msgstr "Notificant al servidor" + +#, fuzzy +#~ msgid "The server is too busy" +#~ msgstr "El servidor estÔ ocupat" + +#~ msgid "The server is unavailable" +#~ msgstr "El servidor no està en servei" + #~ msgid "Add contact" #~ msgstr "Afegir contacte" @@ -3541,9 +4269,6 @@ msgstr "" #~ msgid "KMess Notification" #~ msgstr "Notificació de correu" -#~ msgid "Accounts" -#~ msgstr "Comptes" - #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" @@ -3554,9 +4279,6 @@ msgstr "" #~ "Your emails" #~ msgstr "jaumec@lleida.net" -#~ msgid "Insert an emoticon" -#~ msgstr "Inserir una emoticona" - #~ msgid "Away - Idle" #~ msgstr "No es a l'ordinador" @@ -3585,17 +4307,6 @@ msgstr "" #~ msgid "(On the Phone)" #~ msgstr "(Al telèfon)" -#, fuzzy -#~ msgid "Connection timeout" -#~ msgstr "Conexió fallida" - -#~ msgid "Connect" -#~ msgstr "Conectar" - -#, fuzzy -#~ msgid "Listening to %1" -#~ msgstr "Enviant l'arxiu " - #, fuzzy #~ msgid "File transfer dialog message" #~ msgstr "Transferencia de l'arxiu completada." @@ -3630,9 +4341,6 @@ msgstr "" #~ msgid "You can't login to hotmail with this account." #~ msgstr "No pots fer login a hotmail amb aquest compte" -#~ msgid "The connection to the server failed." -#~ msgstr "La conexió al servidor ha estat erronea" - #~ msgid "You may not be connected to the internet." #~ msgstr "Poder no estàs conectat a internet." @@ -3660,10 +4368,6 @@ msgstr "" #~ msgid "Show popup notifications for program events" #~ msgstr "Mostrar els globus de notificació per els events del programa" -#, fuzzy -#~ msgid "Server:" -#~ msgstr "Error en el server" - #, fuzzy #~ msgid "Connection good" #~ msgstr "Conexió fallida" @@ -3680,10 +4384,6 @@ msgstr "" #~ msgid "New chat notification:" #~ msgstr "Notificació de correu" -#, fuzzy -#~ msgid "%1 is offline" -#~ msgstr "estÔ fora de linea" - #, fuzzy #~ msgid "You have new mail:" #~ msgstr "Tens un nou correu" @@ -3695,16 +4395,6 @@ msgstr "" #~ "in your inbox" #~ msgstr "en la teva bustia" -#, fuzzy -#~ msgid "" -#~ "\"%1\"\n" -#~ "from %2\n" -#~ "in another folder" -#~ msgstr "en una altra carpeta" - -#~ msgid "and" -#~ msgstr "i" - #~ msgid "says: " #~ msgstr "diu:" @@ -3730,10 +4420,6 @@ msgstr "" #~ msgid "Chat - %1" #~ msgstr "Xat" -#, fuzzy -#~ msgid "Chat - %1 et al." -#~ msgstr " et al." - #, fuzzy #~ msgid "The transfer of %1 failed. Couldn't create a socket." #~ msgstr "error. No es pot obrir un socket" @@ -3747,10 +4433,6 @@ msgstr "" #~ msgid "Get New Emoticon or Sound &Themes" #~ msgstr "Obtenir noves emoticones o &temes de so" -#, fuzzy -#~ msgid "Chat message layout:" -#~ msgstr "La font dels teus missatges:" - #, fuzzy #~ msgid "n&ame" #~ msgstr "El teu nom" diff --git a/po/da.po b/po/da.po index 39c4768..093df43 100644 --- a/po/da.po +++ b/po/da.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: da\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" -"PO-Revision-Date: 2008-02-21 00:20+0100\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" +"PO-Revision-Date: 2008-05-28 01:29+0200\n" "Last-Translator: Pascal d'Hermilly \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -18,213 +18,411 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "Logger ind..." - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -msgid "S&end" -msgstr "Send" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 msgid "Ne&w Line" msgstr "N&y linje" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 -#, fuzzy -msgid "Sidebar" -msgstr "Sidebar" +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 +msgid "S&end" +msgstr "Send" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +msgid "Contacts" +msgstr "Kontakter" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "Klik her for at vise denne kontakts profil." #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." -msgstr "Klik for at sende en e-post til denne kontakt." +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 -#, fuzzy +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 msgid "" "Enter here the email address of the person you wish to add to your contact " "list" -msgstr "Indtast e-postadressen til den person du vil tilføje:" +msgstr "Indtast e-postadressen til den person du vil tilføje her:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 msgid "Email address" msgstr "E-postadresse" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" -msgstr "" +msgstr "Du kan ogsÄ vælge den gruppe hvor du vil placere den nye kontaktperson" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 #, fuzzy -msgid "New contact's group" -msgstr "&Ny Kontaktperson" +msgid "Initial group" +msgstr "Ugyldig gruppe" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "Skriv en genvej til dette humørikon" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "Vælg en billedfil:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 -#, fuzzy +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 msgid "" "Enter a message to be automatically sent to people who try to message you." msgstr "" -"Skriv den besked folk automatisk vil modtage \n" -"hvis de prøver at kontakte dig:" +"Skriv en besked der automatisk bliver vist til folk der skriver til dig" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 -#, fuzzy +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 msgid "&Automatic away message" -msgstr "Vælg en Væk-besked" +msgstr "&Automatisk Væk-besked" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" msgstr "" -"%1\n" -"har tilføjet dig til sin kontaktliste. Vil du:" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 -msgid "&Add this contact to your \"Friends\" list" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 +#, fuzzy +msgid "&Add this person to my \"Friends\" list" msgstr "Tilføj denne kontaktperson til din \"Venne\"liste" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 -msgid "&Not add this contact, but let them see your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 +#, fuzzy +msgid "Do not add this person; only allow them to see my online state" msgstr "Tilføj ikke denne kontakt, men lad vedkommende se din status" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 -msgid "Block this person from contacting &you or seeing your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 +#, fuzzy +msgid "&Block this person from contacting me or seeing my online state" msgstr "Blokere denne person fra at se din status og kontakte dig." #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 -msgid "Open" +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, no-c-format +msgid "Contact Properties for %1" +msgstr "Kontaktegenskaber for %1" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 #, fuzzy +msgid "Restore" +msgstr "Fjern" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "Brug et alternativt navn til denne person" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "Vis en pop-up-ballon nĆ„r denne person gĆ„r on- eller offline" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "Lyd:" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +#, fuzzy +msgid "&Clear Cache" +msgstr "Stryg faneblad" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +#, fuzzy +msgid "Notes" +msgstr "Node" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "NetvƦrksvindue:" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +#, fuzzy +msgid "Standard" +msgstr "Stjerne" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "Send" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 +msgid "Open" +msgstr "ƅben" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 msgid "Cancel" -msgstr "Annuleret" +msgstr "Annuler" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -msgid "Enter your login information:" -msgstr "Indtast din login information" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" +msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 -msgid "Password" +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 +#, fuzzy +msgid "Email address:" +msgstr "E-postadresse:" + +#. i18n: tag string +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +#, fuzzy +msgid "Password:" msgstr "Kodeord" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "Login-status" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." -msgstr "" +msgstr "Flere indstillinger" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 -#, fuzzy +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 msgid " Account options " -msgstr "Konto&opsƦtning" +msgstr " Konto indstillinger " #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 msgid "Remem&ber this profile" msgstr "Husk denne profil" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" -msgstr "" +msgstr "Husk ogsĆ„ kodeordet" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "&Forbind" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "Indtast din personlige besked her" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr " Konto indstillinger " + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "Indtast det navn som andre kontakter skal se nĆ„r du er online." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 -msgid "Your friendly name:" -msgstr "Dit kaldenavn:" +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 +#, fuzzy +msgid "&Friendly name:" +msgstr "Kaldenavn" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" @@ -233,15 +431,15 @@ msgstr "" "ny konto pĆ„ http://register.passport.com" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 #, fuzzy -msgid "Your email address:" +msgid "&Email address:" msgstr "E-postadresse:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" @@ -250,39 +448,40 @@ msgstr "" "konto pĆ„ http://register.passport.com" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" -msgstr "Dit kodeord:" - -#. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 #, fuzzy -msgid "Remember Password" +msgid "&Password:" msgstr "Kodeord" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 -msgid "Display picture:" +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 +#, fuzzy +msgid "&Remember Password" +msgstr "Husk Kodeord" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 +msgid "Display Picture" msgstr "Profilbillede:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 msgid "C&hange..." msgstr "S&kift" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -msgid "Don't show a displa&y picture" -msgstr "Vis ikke et &profilbillede" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -299,34 +498,37 @@ msgstr "" "en gƦst eller er pĆ„ en offentlig computer(f.eks. en internetcafĆ©)." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +#, fuzzy +msgid "Re&member the settings of this account" msgstr "Husk denne kontos indstillinger" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "Hvis valgt, logger KMess automatisk pĆ„ denne konto." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 -msgid "Login &with this account automatically at start-up" +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 +#, fuzzy +msgid "Login &with this account automatically" msgstr "Log ind med denne konto nĆ„r programmet startes" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "SƦt status ved login:" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "FĆør log over alle samtaler" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -337,8 +539,8 @@ msgstr "" "eller bruge en hotmail konto til at forbinde." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." @@ -347,26 +549,26 @@ msgstr "" "bekrƦftet." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "Bed om bekrƦftigelses-e-post" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 msgid "https://accountservices.passport.net/" msgstr "https://accountservices.passport.net/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "GĆ„ til accountservices.passport.net" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." @@ -375,38 +577,102 @@ msgstr "" "som en Passport konto." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "Registrer ny konto" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "GĆ„ til register.passport.com" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 -msgid "Popup notifications" +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 +msgid "Saved accounts:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +msgid "Click" +msgstr "Klik" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "" +"Klik her for at tilfĆøje et nyt specielt humĆørikon som du kan sende til dine " +"kontakter." + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "Konti" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "VƦlg et humĆørikon og klik her for at slette det." + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "Rediger" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "Fjern" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "Pop-op bekendtgĆørelser" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "Kontakter" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 msgid "Show notifications when your contacts:" msgstr "Vis bekendtgĆørelser nĆ„r dine kontakter:" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." @@ -415,15 +681,14 @@ msgstr "" "til MSN." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 -#, fuzzy +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 msgid "&Go online" -msgstr "GĆ„r offline" +msgstr "GĆ„ online" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." @@ -431,14 +696,14 @@ msgstr "" "Hvis valgt bliver en pop-up besked ogsĆ„ vist nĆ„r dine kontakter gĆ„r offline" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "Start en chat med dig" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." @@ -447,14 +712,14 @@ msgstr "" "besked." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 msgid "S&end you a message" msgstr "Send dig en besked" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." @@ -463,16 +728,16 @@ msgstr "" "deres MSN status" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "Skift deres status" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." @@ -480,38 +745,88 @@ msgstr "" "Hvis valgt bliver en hop-op besked ogsĆ„ vist nĆ„r dine kontakter gĆ„r offline" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 msgid "Go o&ffline" msgstr "GĆ„r offline" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 -msgid "Show notifications when you recei&ve an email" -msgstr "Vis bekendtgĆørelser nĆ„r du modtager en e-post" +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 +#, fuzzy +msgid "Email Events" +msgstr "E-postadresse" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" +msgstr "Vis en notifikation nĆ„r e-post er modtaget i \"andre foldere\"" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" +"Hvis valgt bliver en hop-op besked vist nĆ„r du modtager en e-post i en anden " +"folder. Denne mulighed gƦlder kun for hotmail konti." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +msgid "In other folders" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "Kontrollerer antallet af sekunder inden hop-op'er skjules" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "Skjul hop-op'er efter" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "sekunder" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "Advarsler" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "Vis Offline Kontakter" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -527,263 +842,14 @@ msgstr "" "vink samtidigt men KMess ryster kun vinduet efter det fĆørste.

" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "Ryst chatvinduet nĆ„r et vink modtages eller sendes" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 -msgid "" -"If enabled, KMess informs contacts what you're listening to. This " -"information is retrieved from the currently active audio player applications." -msgstr "" -"Hvis valgt informerer KMess dine kontakter om hvad du lytter til. Denne " -"information hentes fra det musikprogram du kĆører." - -#. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 -msgid "Inform contacts w&hich song I am listening to." -msgstr "FortƦl mine kontakter hvilken sang jeg lytter til." - -#. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 -msgid "" -"If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." -msgstr "" -"Hvis valgt vil din status automatisk blive Ʀndret til \"FravƦrende\" nĆ„r du " -"ikke har brugt computeren i nogle minutter" - -#. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 -msgid "Change status to \"Awa&y-Idle\" when inactive" -msgstr "Skift status til \"VƦk - fravƦrende\" nĆ„r du er inaktiv" - -#. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 -msgid "" -"Controls the number of minutes before KMess changes the status to \"Away-Idle" -"\"." -msgstr "" -"Kontrollerer antallet af minutter inden KMess Ʀndrer din status til " -"\"FravƦrende\"" - -#. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 -msgid "Become idle after" -msgstr "Bliv fravƦrende efter" - -#. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 -msgid "minutes" -msgstr "minutter" - -#. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 -msgid "If enabled, chat conversations will be saved in a specified directory." -msgstr "Hvis valgt bliver alle chat-samtaler gemt i en valgt mappe" - -#. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 -msgid "Log &all chats" -msgstr "FĆør log over alle samtaler" - -#. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 -msgid "" -"Choose the directory on your system where you'd like to save the chat logs." -msgstr "VƦlg mappen pĆ„ computeren hvor du vil gemme dine chat-logs" - -#. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" -msgstr "Gem chat-filer i denne ovenstĆ„ende folder:" - -#. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 -msgid "" -"KMess automatically creates subdirectories when you choose the organize the " -"chat folder by year, month or day." -msgstr "" -"KMess skaber automatisk undermapper nĆ„r du vƦlger organiser chat-mapper " -"efter Ć„r, mĆ„ned eller dag." - -#. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "Organiser chat-mapper efter:" - -#. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 -msgid "Year" -msgstr "ƅr" - -#. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 -msgid "Month" -msgstr "MĆ„ned" - -#. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 -msgid "Day" -msgstr "Dag" - -#. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" -msgstr "Gem alle samtaler i den overliggende mappe" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." -msgstr "Dette er skrifttypen og farven brugt i dine chat-beskeder" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "Din meddelelses-skrifttype:" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." -msgstr "Lader dig selv dikterer hvordan dine kontakters beskeder skal se ud." - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "Tving andre kontakters meddelelser til at bruge denne skrifttype:" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 -msgid "Allows you to change the theme KMess uses to display all chat messages." -msgstr "Lader dig Ʀndre temaet som KMess bruger til at vise alle chat-beskeder" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" -msgstr "Chat-stil:" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 -msgid "Enables the appearance of emoticons in the chat conversations." -msgstr "Tilllad humĆørikoner i chat-samtaler" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 -msgid "&Show graphics in chat messages" -msgstr "Vis &grafik i chat-beskeder" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 -msgid "Enables the appearance of a timestamp in each chat message." -msgstr "Lader et tidstempel stĆ„ i hver chatbesked." - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 -msgid "S&how time in chat messages" -msgstr "Vis tid i chat-beskeder" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" -"Tillader brug af skriftype effekte. Ved at skrive*fed*, /kursiv/ og " -"_understregning_ bliver hvert af ordene enten fed, kursiv eller understreget" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "Brug skriftype effekter som *fed*, /kursiv/ og _understregning_" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 -msgid "" -"This option enables grouping of messages from the same contact. When the " -"contact types uses multiple messages to explain something, KMess groups " -"those messages as one single message. The exact appearance depends on the " -"chosen chat style." -msgstr "" -"Denne indstilling tillader dig at gruppere beskeder som en kontaktperson har " -"skrevet til dig men som var for store til at sende i en besked." - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 -msgid "&Group follow-up messages from the same contact" -msgstr "&Gruppering af sammenhƦngende beskeder fra den samme kontakt" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 -msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." -msgstr "" -"Lader dig vƦlge hvilken postklient KMess skal Ć„bne for at vise din " -"postbeskeder." - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "Postklient" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "Brug Hotmail" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "Brug en sƦrlig kommando:" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "E-postnotifikation" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 msgid "" "If enabled, a popup is shown when e-mail is received in your inbox. The " "number of unread e-mail messages is shown above the contact list. This " @@ -794,102 +860,507 @@ msgstr "" "hotmail konti." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 -msgid "Show email information" -msgstr "Vis e-postinformation" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 -msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" msgstr "" -"Hvis valgt bliver en hop-op besked vist nĆ„r du modtager en e-post i en anden " -"folder. Denne mulighed gƦlder kun for hotmail konti." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" -msgstr "Vis en notifikation nĆ„r e-post er modtaget i \"andre foldere\"" +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 +msgid "" +"If enabled, KMess informs contacts what you're listening to. This " +"information is retrieved from the currently active audio player applications." +msgstr "" +"Hvis valgt informerer KMess dine kontakter om hvad du lytter til. Denne " +"information hentes fra det musikprogram du kĆører." #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 +#, fuzzy +msgid "Inform contacts w&hich song I am listening to" +msgstr "FortƦl mine kontakter hvilken sang jeg lytter til." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 +#, fuzzy +msgid "" +"If enabled, your status will be changed automatically to \"Away-Idle\" when " +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." +msgstr "" +"Hvis valgt vil din status automatisk blive Ʀndret til \"FravƦrende\" nĆ„r du " +"ikke har brugt computeren i nogle minutter" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 +msgid "Change status to \"Awa&y-Idle\" when inactive" +msgstr "Skift status til \"VƦk - fravƦrende\" nĆ„r du er inaktiv" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 +msgid "" +"Controls the number of minutes before KMess changes the status to \"Away-Idle" +"\"." +msgstr "" +"Kontrollerer antallet af minutter inden KMess Ʀndrer din status til " +"\"FravƦrende\"" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 +msgid "Become idle after" +msgstr "Bliv fravƦrende efter" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 +msgid "minutes" +msgstr "minutter" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 +msgid "If enabled, chat conversations will be saved in a specified directory." +msgstr "Hvis valgt bliver alle chat-samtaler gemt i en valgt mappe" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 +msgid "Log &all chats" +msgstr "FĆør log over alle samtaler" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 +msgid "" +"Choose the directory on your system where you'd like to save the chat logs." +msgstr "VƦlg mappen pĆ„ computeren hvor du vil gemme dine chat-logs" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" +msgstr "Gem chat-filer i denne ovenstĆ„ende folder:" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 +msgid "" +"KMess automatically creates subdirectories when you choose the organize the " +"chat folder by year, month or day." +msgstr "" +"KMess skaber automatisk undermapper nĆ„r du vƦlger organiser chat-mapper " +"efter Ć„r, mĆ„ned eller dag." + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 +msgid "Year" +msgstr "ƅr" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 +msgid "Month" +msgstr "MĆ„ned" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 +msgid "Day" +msgstr "Dag" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" +msgstr "Gem alle samtaler i den overliggende mappe" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 45 +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 +msgid "Allows you to change the theme KMess uses to display all chat messages." +msgstr "Lader dig Ʀndre temaet som KMess bruger til at vise alle chat-beskeder" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +#, fuzzy +msgid "&Chat style:" +msgstr "Chat-stil:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "Indstillinger" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 +msgid "Enables the appearance of emoticons in the chat conversations." +msgstr "Tilllad humĆørikoner i chat-samtaler" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 +#, fuzzy +msgid "&Show emoticons" +msgstr "Vis humĆørikoner" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 +msgid "Enables the appearance of a timestamp in each chat message." +msgstr "Lader et tidstempel stĆ„ i hver chatbesked." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 +#, fuzzy +msgid "S&how messages time" +msgstr "Vis tid i chat-beskeder" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 +msgid "" +"This option enables grouping of messages from the same contact. When the " +"contact types uses multiple messages to explain something, KMess groups " +"those messages as one single message. The exact appearance depends on the " +"chosen chat style." +msgstr "" +"Denne indstilling tillader dig at gruppere beskeder som en kontaktperson har " +"skrevet til dig men som var for store til at sende i en besked." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 +msgid "&Group follow-up messages from the same contact" +msgstr "&Gruppering af sammenhƦngende beskeder fra den samme kontakt" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 +#, fuzzy +msgid "Always" +msgstr "VƦk" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "Din kontaktliste har for mange grupper" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "NĆørd" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." +msgstr "Dette er skrifttypen og farven brugt i dine chat-beskeder" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "Din meddelelses-skrifttype:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 +msgid "" +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." +msgstr "Lader dig selv dikterer hvordan dine kontakters beskeder skal se ud." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "Tving andre kontakters meddelelser til at bruge denne skrifttype:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 +msgid "" +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." +msgstr "" +"Tillader brug af skriftype effekte. Ved at skrive*fed*, /kursiv/ og " +"_understregning_ bliver hvert af ordene enten fed, kursiv eller understreget" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +#, fuzzy +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" +msgstr "Brug skriftype effekter som *fed*, /kursiv/ og _understregning_" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "Venter pĆ„ kontaktliste" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 msgid "&Emoticon Themes" msgstr "&HumĆørikon-temaer" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 msgid "Available emoticon styles:" msgstr "TilgƦngelige humĆørikon-stile" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 msgid "&Custom Emoticons" msgstr "Specielle humĆørikoner" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 msgid "Custom emoticons for this account:" msgstr "Specielle humĆørikoner for denne konto" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -msgid "Click" -msgstr "Klik" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "" -"Klik her for at tilfĆøje et nyt specielt humĆørikon som du kan sende til dine " -"kontakter." - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "TilfĆøj &ny" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "Klik her for at omdĆøbe det valgte humĆørikon" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 msgid "Re&name" msgstr "O&mdĆøb" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "VƦlg et humĆørikon og klik her for at slette det." - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 msgid "Remo&ve" msgstr "&Fjern" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +#, fuzzy +msgid "Web Browser" +msgstr "Vissen rose" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +msgid "&Use the KDE default browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "siger:" +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "Postklient" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +msgid "&Use the KDE default email client" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +msgid "File Transfers" +msgstr "FiloverfĆørsler" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "Gem chat-filer i denne ovenstĆ„ende folder:" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +#, fuzzy +msgid "and" +msgstr "Ked af det" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "FiloverfĆørsler" #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -899,68 +1370,105 @@ msgstr "Jeg er vƦk fra computeren" msgid "Your name" msgstr "Dit navn" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "digselv@hotmail.com" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "Online" - -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "VƦk" - -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "Er snart tilbage" - -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "Optaget" - -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "Usynlig" - -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" +#: chat/chat.cpp:124 +msgid "" +"You can't start this invitation because there are multiple contacts in this " +"chat." msgstr "" +"Du kan ikke invitere fordi der allerede er flere kontakter i denne chat" -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "Offline" +#: chat/chat.cpp:158 +#, fuzzy +msgid "%1 has joined the chat." +msgstr "%1 er kommet med i samtalen" -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "Taler i telefon" +#: chat/chat.cpp:211 +#, fuzzy +msgid "The conversation went idle, %1 has left the chat." +msgstr "%1 har forladt samtalen" -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "Til frokost" +#: chat/chat.cpp:215 +#, fuzzy +msgid "%1 has left the chat." +msgstr "%1 har forladt samtalen" -#: chat/chatmaster.cpp:1061 +#: chat/chat.cpp:364 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 and %2" +msgstr "%1 og %2 - Chat" + +#: chat/chat.cpp:371 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 et al." +msgstr "%1 et al. - Chat" + +#: chat/chat.cpp:630 +#, fuzzy +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" +msgstr " (denne meddelelse blev sendt automatisk)" + +#: chat/chat.cpp:934 +#, fuzzy +msgid "You received a wink from %1." +msgstr "Du har modtaget et blink fra %1" + +#: chat/chat.cpp:971 +msgid "" +"The wink could not be displayed. Make sure you have 'cabextract' installed." +msgstr "Blinket kunne ikke vises. UndersĆøg om du har 'cabextract' installeret" + +#: chat/chat.cpp:980 +msgid "The wink could not be displayed. The data could not be read." +msgstr "Blinket kunne ikke vises. Det kunne ikke lƦses korrekt" + +#: chat/chat.cpp:1080 +#, fuzzy +msgid "You have received a wink from %1" +msgstr "Du har modtaget et blink fra %1" + +#: chat/chat.cpp:1100 +#, fuzzy +msgid "You received a nudge from %1!" +msgstr "Du har modtaget et vink fra %1!" + +#: chat/chat.cpp:1119 +#, fuzzy +msgid "The message '%1' could not be sent." +msgstr "Beskeden '%1' blev ikke sendt." + +#: chat/chat.cpp:1183 +msgid "You've sent a nudge to %1!" +msgstr "Du har sendt et vink til %1!" + +#: chat/chat.cpp:1190 +msgid "You've sent a nudge!" +msgstr "Du har sendt et vink!" + +#: chat/chatmaster.cpp:1219 msgid "%1 is sending a wink: %2" msgstr "%1 sender et blink: %2" -#: chat/chatmessagestyle.cpp:302 +#: chat/chatmessagestyle.cpp:298 msgid "%1 says:" msgstr "%1 siger:" -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 msgid "Add this emoticon: %1" msgstr "TilfĆøj dette humĆørikon: %1" -#: chat/chatview.cpp:529 +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 +msgid "&Invite" +msgstr "&Inviter" + +#: chat/chatview.cpp:695 msgid "" "Could not save chat log. Make sure you have permission to write in the " "folder where logs are being saved." @@ -968,8 +1476,7 @@ msgstr "" "Kunne ikke gemme chat-log. UndersĆøg om du har lov til at skrive i folderen " "hvor log-filerne bliver gemt. " -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 msgid "" "The file '%1' already exists.\n" "do you want to overwrite it?" @@ -977,357 +1484,398 @@ msgstr "" "Filen '%1' eksisterer allerede. \n" "Vil du overskrive den?" -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 msgid "Overwrite File" msgstr "Overskriv fil" -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 msgid "Over&write" msgstr "Over&skriv" -#: chat/chatview.cpp:977 +#: chat/chatview.cpp:1275 msgid "Add this &Emoticon..." msgstr "TilfĆøj dette &HumĆørikon" -#: chat/chatview.cpp:984 +#: chat/chatview.cpp:1282 msgid "Send &Email" msgstr "Send &E-post" -#: chat/chatview.cpp:988 +#: chat/chatview.cpp:1286 msgid "Copy E&mail" msgstr "&Kopier E-post" -#: chat/chatview.cpp:995 +#: chat/chatview.cpp:1293 msgid "Visit &Link" msgstr "BesĆøg &Link" -#: chat/chatview.cpp:999 +#: chat/chatview.cpp:1297 msgid "Copy &Address" msgstr "Kopier &Adresse" -#: chat/chatview.cpp:1013 +#: chat/chatview.cpp:1312 msgid "&Copy text" msgstr "Kopier %tekst" -#: chat/chatview.cpp:1014 +#: chat/chatview.cpp:1313 msgid "Select &All" msgstr "MarkĆ©r &Alt" -#: chat/chatview.cpp:1015 +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 msgid "Save chat to &File" msgstr "Gem chat til en &Fil" -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "Tal" - -#: chat/chatwindow.cpp:239 -msgid "" -"You can't start this invitation because there are multiple contacts in this " -"chat." -msgstr "" -"Du kan ikke invitere fordi der allerede er flere kontakter i denne chat" - -#: chat/chatwindow.cpp:276 -msgid "%1 has joined the chat." -msgstr "%1 er kommet med i samtalen" - -#: chat/chatwindow.cpp:327 -msgid "The conversation went idle, %1 has left the chat." -msgstr "%1 har forladt samtalen" - -#: chat/chatwindow.cpp:331 -msgid "%1 has left the chat." -msgstr "%1 har forladt samtalen" - -#: chat/chatwindow.cpp:593 -msgid "%1 - Chat" -msgstr "%1 - Chat" - -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" -msgstr "%1 og %2 - Chat" - -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" -msgstr "%1 et al. - Chat" - -#: chat/chatwindow.cpp:757 -msgid "Contacts" -msgstr "Kontakter" - -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 -msgid "Emoticons" -msgstr "HumĆørikoner" - -#: chat/chatwindow.cpp:819 -msgid "My emoticons" -msgstr "Mine humĆørikoner" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" -msgstr " (denne meddelelse blev sendt automatisk)" - -#: chat/chatwindow.cpp:1502 -msgid "" -"The wink could not be displayed. Make sure you have 'cabextract' installed." -msgstr "Blinket kunne ikke vises. UndersĆøg om du har 'cabextract' installeret" - -#: chat/chatwindow.cpp:1511 -msgid "The wink could not be displayed. The data could not be read." -msgstr "Blinket kunne ikke vises. Det kunne ikke lƦses korrekt" - -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" -msgstr "Du har modtaget et blink fra %1" - -#: chat/chatwindow.cpp:1755 -#, fuzzy -msgid "Show Side&bar" -msgstr "Sidebar" - -#: chat/chatwindow.cpp:1756 -#, fuzzy -msgid "Show the contact sidebar" -msgstr "Vis eller skjul kontaktlisten" - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -#, fuzzy -msgid "Hide Side&bar" -msgstr "Sidebar" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -#, fuzzy -msgid "Hide the contact sidebar" -msgstr "Vis eller skjul kontaktlisten" - -#: chat/chatwindow.cpp:1787 -msgid "The message '%1' could not be sent." -msgstr "Beskeden '%1' blev ikke sendt." - -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" -msgstr "Du har modtaget et vink fra %1!" - -#: chat/chatwindow.cpp:1876 -msgid "You've sent a nudge to %1!" -msgstr "Du har sendt et vink til %1!" - -#: chat/chatwindow.cpp:1883 -msgid "You've sent a nudge!" -msgstr "Du har sendt et vink!" - -#: chat/chatwindow.cpp:1972 -msgid "%1 is typing." -msgstr "%1 skriver" - -#: chat/chatwindow.cpp:1981 -msgid "%1 and %2 are typing." -msgstr "%1 og %2 skriver." - -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." -msgstr "%1, %2 og %3 andre skriver." - -#: chat/chatwindowinterface.cpp:175 +#: chat/chatwindow.cpp:489 msgid "&Chat" msgstr "&Chat" -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 -msgid "&Invite" -msgstr "&Inviter" - -#: chat/chatwindowinterface.cpp:179 +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "Send en &Fil" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "Start et &MĆøde" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 msgid "Send a &Nudge!" msgstr "Send et &Vink" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "Gem chat" -#: chat/chatwindowinterface.cpp:183 -#, fuzzy +#: chat/chatwindow.cpp:496 msgid "&Emoticons" msgstr "HumĆørikoner" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 #, fuzzy +msgid "Close &All Tabs" +msgstr "Luk faneblad" + +#: chat/chatwindow.cpp:504 msgid "Meeting" -msgstr "Indstillinger" +msgstr "MĆøde" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" -msgstr "" +msgstr "Vink" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "Start eller Stop en &Samtale" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "Skift &Skrifttype" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "Skift Skrift&farve" -#: chat/chatwindowinterface.cpp:257 -#, fuzzy +#: chat/chatwindow.cpp:576 msgid "&Font" -msgstr "&Forbind" +msgstr "Skrifttype" -#: chat/chatwindowinterface.cpp:258 -#, fuzzy +#: chat/chatwindow.cpp:577 msgid "Font &Color" -msgstr "Skift Skrift&farve" +msgstr "Skriftfarve" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" -msgstr "" +msgstr "HjƦlp" -#: chat/chatwindowinterface.cpp:352 -#, fuzzy +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +msgid "Emoticons" +msgstr "HumĆørikoner" + +#: chat/chatwindow.cpp:658 +msgid "My emoticons" +msgstr "Mine humĆørikoner" + +#: chat/chatwindow.cpp:738 msgid "&Settings" msgstr "Indstillinger" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "Brug &Stavekontrol" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "Vis humĆørikoner" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +msgid "Hide Side&bar" +msgstr "Skjul sidebar" + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "Skjul sidebar" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +msgid "Hide the contact sidebar" +msgstr "Skjul kontakt-sidebaren" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +#, fuzzy +msgid "Close all tabs" +msgstr "Luk faneblad" + +#: chat/chatwindow.cpp:856 +#, fuzzy +msgid "Close current tab" +msgstr "Luk faneblad" + +#: chat/chatwindow.cpp:1467 +msgid "Show Side&bar" +msgstr "Vis sidebar" + +#: chat/chatwindow.cpp:1468 +msgid "Show the contact sidebar" +msgstr "Vis kontakt-sidebaren" + +#: chat/chatwindow.cpp:1565 +msgid "%1 is typing." +msgstr "%1 skriver" + +#: chat/chatwindow.cpp:1575 +msgid "%1 and %2 are typing." +msgstr "%1 og %2 skriver." + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "%1, %2 og %3 andre skriver." + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "Tal" + +#: chat/chatwindow.cpp:1615 +#, fuzzy +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "%1 - Chat" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "&Send e-post" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 msgid "&View Profile" msgstr "&Vis profil" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "&TilfĆøj kontaktperson" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 msgid "A&llow Contact" msgstr "T&illad kontaktperson" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 msgid "&Delete Contact" msgstr "&Fjern kontaktperson" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "&Bloker kontaktperson" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "&Afbloker kontaktperson" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 msgid "&Friendly Name" msgstr "Kaldenavn" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "Personlig meddelelse" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 msgid "&Email Address" msgstr "E-postadresse" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "&Kopier..." -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 msgid "Blocked" msgstr "Blokeret" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 msgid "The contact is %1" msgstr "Kontakten er %1" -#: contact/contactbase.cpp:273 -msgid "Windows Mobile" +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" msgstr "" -#: contact/contactbase.cpp:277 +#: chat/emoticonsidebar.cpp:212 #, fuzzy +msgid "Add to Chat" +msgstr "Tilføj en kontaktperson" + +#: chat/emoticonsidebar.cpp:213 +msgid "Insert new" +msgstr "" + +#: chat/emoticonsidebar.cpp:214 +#, fuzzy +msgid "Edit" +msgstr "Rediger" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +msgid "Remove" +msgstr "Fjern" + +#: contact/contactbase.cpp:280 +msgid "Windows Mobile" +msgstr "Windows Mobile" + +#: contact/contactbase.cpp:284 msgid "Web Messenger" -msgstr "Webdesign" +msgstr "Web Messenger" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" -msgstr "" +msgstr "Office Communicator" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" -msgstr "" +msgstr "Messenger Robot" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" -msgstr "" +msgstr "MSN Messenger %1 kompatibel" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +#, fuzzy +msgid "Windows Live Messenger %1" +msgstr "Windows Live Messenger" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" -msgstr "" +msgstr "Windows Live Messenger %1 Kompatibel" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" -msgstr "" +msgstr "Windows Live Messenger" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "Online" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "Offline" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "Tilladt" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "Fjernet" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 #, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr "%1 (%2/%3)" + +#: contactlistviewdelegate.cpp:150 msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" -msgstr "%1 %2" +msgstr "%1 (%2/%3)" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" -msgstr "Denne konto har ikke en Hotmail indbakke!" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "Væk" -#: dialogs/addcontactdialog.cpp:53 -#, fuzzy +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "Er snart tilbage" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "Optaget" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "Usynlig" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" +msgstr "Fraværende" + +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "Taler i telefon" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "Til frokost" + +#: dialogs/addcontactdialog.cpp:48 msgid "Add a Contact" msgstr "Tilføj en kontaktperson" -#: dialogs/addcontactdialog.cpp:81 -#, fuzzy +#: dialogs/addcontactdialog.cpp:73 msgid "No group" -msgstr "&Fjern gruppe" +msgstr "Ingen gruppe" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 msgid "Add New Emoticon" msgstr "Tilføj nyt Humørikon" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "Humørikoner" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "Humørikonet \"%1\" eksisterer allerede. Vil du erstatte det?" @@ -1335,125 +1883,155 @@ msgstr "Humørikonet \"%1\" eksisterer allerede. Vil du erstatte det?" msgid "Specify an Away message" msgstr "Vælg en Væk-besked" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" +msgstr "Du er blevet tilføjet af nogen" + +#: dialogs/contactaddeduserdialog.cpp:85 +#, fuzzy +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " +msgstr "" +"%1\n" +"har tilføjet dig til sin kontaktliste. Vil du:" + +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "Forbundet" + +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +msgid "Not seen yet" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "Brug et alternativt navn til denne person" - -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" -msgstr "Vis en pop-up-ballon nÄr denne person gÄr on- eller offline" - -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "Billede:" - -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "Lyd:" - -#: dialogs/contactpropertiesdialog.cpp:234 -msgid "Contact Properties for %1" -msgstr "Kontaktegenskaber for %1" - -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " -msgstr "E-postadresse:" - -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "Nuværende navn: " - -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" -msgstr "Netværksvindue:" - -#: dialogs/networkwindow.cpp:57 +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 #, fuzzy +msgid "No messages yet" +msgstr "Vis tid i chat-beskeder" + +#: dialogs/contactpropertiesdialog.cpp:381 +msgid "Last seen: %1" +msgstr "" + +#: dialogs/contactpropertiesdialog.cpp:382 +msgid "Last message: %1" +msgstr "" + +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "E-post: %1" + +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "Klient: %1" + +#: dialogs/networkwindow.cpp:79 msgid "S&ave tab" msgstr "Gem faneblad" -#: dialogs/networkwindow.cpp:58 -#, fuzzy +#: dialogs/networkwindow.cpp:80 msgid "C&lear tab" msgstr "Stryg faneblad" -#: dialogs/networkwindow.cpp:59 -#, fuzzy -msgid "Cl&ose tab" -msgstr "Luk faneblad" - -#: dialogs/networkwindow.cpp:928 -#, fuzzy +#: dialogs/networkwindow.cpp:1054 msgid "" "No connections are present.\n" "Cannot open the Network Window." -msgstr "Ingen forbindelse. Kan ikke Äbne Netværksvinduet." +msgstr "" +"Ingen forbindelse.\n" +"Kan ikke Äbne Netværksvinduet." -#: dialogs/networkwindow.cpp:974 -#, fuzzy +#: dialogs/networkwindow.cpp:1100 msgid "" "Could not save the Network Window log. Make sure you have permission to " "write in the folder where it is being saved." msgstr "" "Kunne ikke gemme netværksvindue-loggen. Undersøg om du har skriverettigheder " -"i den folder hvor log-filen gemmes." +"i den folder hvor logfilen gemmes." -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "Kan ikke lukke hovedfanebladet" -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +#, fuzzy +msgid "Cannot send commands to this kind of connection!" +msgstr "Kan ikke lukke hovedfanebladet" + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "Annuleret" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "Fejlede!" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 msgid "Completed" msgstr "Færdig" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "%1 MB" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "%1 kB" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "%1 bytes" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +#, fuzzy +msgid "%1 of %2 received." msgstr "%1 af %2 modtaget" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +#, fuzzy +msgid "%1 of %2 sent." msgstr "%1 af %2 sendt" -#: dialogs/transferwindow.cpp:55 -msgid "File Transfers" -msgstr "Filoverførsler" +#: dialogs/transferentry.cpp:373 +msgid "infinite" +msgstr "" -#: dialogs/transferwindow.cpp:59 -#, fuzzy +#: dialogs/transferwindow.cpp:54 msgid "Cl&ean Up" msgstr "&Ryd op" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " "the theme folder '%1'." @@ -1461,345 +2039,361 @@ msgstr "" "Kunne ikke gemme humørikon temaet. Undersøg om du har skriverettigheder i " "den folder du gemmer temaer i: '%1'." -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 msgid "Smile" msgstr "Smil" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "blink" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "Tungen ude" -#: emoticontheme.cpp:797 +#: emoticontheme.cpp:812 msgid "Big smile" msgstr "Stort smil" -#: emoticontheme.cpp:798 +#: emoticontheme.cpp:813 msgid "Sad" msgstr "Ked af det" -#: emoticontheme.cpp:799 +#: emoticontheme.cpp:814 msgid "Crying" msgstr "Græder" -#: emoticontheme.cpp:800 +#: emoticontheme.cpp:815 msgid "Angry" msgstr "Sur" -#: emoticontheme.cpp:801 +#: emoticontheme.cpp:816 msgid "Confused" msgstr "Forvirret" -#: emoticontheme.cpp:802 +#: emoticontheme.cpp:817 msgid "Embarrassed" msgstr "Forlegen" -#: emoticontheme.cpp:803 +#: emoticontheme.cpp:818 msgid "Disappointed" msgstr "Skuffet" -#: emoticontheme.cpp:804 +#: emoticontheme.cpp:819 msgid "Hot" msgstr "Varm" -#: emoticontheme.cpp:805 +#: emoticontheme.cpp:820 msgid "Baring teeth" msgstr "Vise tænder" -#: emoticontheme.cpp:806 +#: emoticontheme.cpp:821 msgid "Nerd" msgstr "Nørd" -#: emoticontheme.cpp:807 +#: emoticontheme.cpp:822 msgid "Sick" msgstr "Syg" -#: emoticontheme.cpp:808 +#: emoticontheme.cpp:823 msgid "Surprised" msgstr "Overrasket" -#: emoticontheme.cpp:809 +#: emoticontheme.cpp:824 msgid "Party" msgstr "Fest" -#: emoticontheme.cpp:810 +#: emoticontheme.cpp:825 msgid "Sleepy" msgstr "Søvnig" -#: emoticontheme.cpp:811 +#: emoticontheme.cpp:826 msgid "Thinking" msgstr "Tænker" -#: emoticontheme.cpp:812 +#: emoticontheme.cpp:827 msgid "Don't tell anyone" msgstr "Sig det ikke til nogen" -#: emoticontheme.cpp:813 +#: emoticontheme.cpp:828 msgid "Secret telling" msgstr "Hemligheds-fortælling" -#: emoticontheme.cpp:814 +#: emoticontheme.cpp:829 msgid "Eye-rolling" msgstr "Ruller med øjnene" -#: emoticontheme.cpp:815 +#: emoticontheme.cpp:830 msgid "Sarcastic" msgstr "Sarkastisk" -#: emoticontheme.cpp:816 +#: emoticontheme.cpp:831 msgid "I don't know" msgstr "Det ved jeg ikke" -#: emoticontheme.cpp:817 +#: emoticontheme.cpp:832 msgid "Be right back" msgstr "Er snart tilbage" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "Engel" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "Venstre knus" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "Dreng" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "Rødt hjerte" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "Rød næse" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "Tommel op" -#: emoticontheme.cpp:824 +#: emoticontheme.cpp:839 msgid "Dog face" msgstr "Hundeandsigte" -#: emoticontheme.cpp:825 +#: emoticontheme.cpp:840 msgid "Sun" msgstr "Sol" -#: emoticontheme.cpp:826 +#: emoticontheme.cpp:841 msgid "Devil" msgstr "Djævel" -#: emoticontheme.cpp:827 +#: emoticontheme.cpp:842 msgid "Right hug" msgstr "Højre knus" -#: emoticontheme.cpp:828 +#: emoticontheme.cpp:843 msgid "Girl" msgstr "Pige" -#: emoticontheme.cpp:829 +#: emoticontheme.cpp:844 msgid "Broken heart" msgstr "Knust Hjerte" -#: emoticontheme.cpp:830 +#: emoticontheme.cpp:845 msgid "Wilted rose" msgstr "Vissen rose" -#: emoticontheme.cpp:831 +#: emoticontheme.cpp:846 msgid "Thumbs down" msgstr "Tommel ned" -#: emoticontheme.cpp:832 +#: emoticontheme.cpp:847 msgid "Cat face" msgstr "Katteandsigte" -#: emoticontheme.cpp:833 +#: emoticontheme.cpp:848 msgid "Sleeping half-moon" msgstr "Sovende halvmÄne" -#: emoticontheme.cpp:834 +#: emoticontheme.cpp:849 msgid "Red lips" msgstr "Røde læber" -#: emoticontheme.cpp:835 +#: emoticontheme.cpp:850 msgid "Clapping" msgstr "Klapper" -#: emoticontheme.cpp:836 +#: emoticontheme.cpp:851 msgid "Crossed fingers" msgstr "Krydsede fingre" -#: emoticontheme.cpp:837 +#: emoticontheme.cpp:852 msgid "Auto" msgstr "Bil" -#: emoticontheme.cpp:838 +#: emoticontheme.cpp:853 msgid "Airplane" msgstr "Flyvemaskine" -#: emoticontheme.cpp:839 +#: emoticontheme.cpp:854 msgid "Turtle" msgstr "Skildpadde" -#: emoticontheme.cpp:840 +#: emoticontheme.cpp:855 msgid "Snail" msgstr "Snegl" -#: emoticontheme.cpp:841 +#: emoticontheme.cpp:856 msgid "Black sheep" msgstr "Sort fÄr" -#: emoticontheme.cpp:842 +#: emoticontheme.cpp:857 msgid "Goat" msgstr "Ged" -#: emoticontheme.cpp:843 +#: emoticontheme.cpp:858 msgid "Vampire bat" msgstr "Vampyrflagermus" -#: emoticontheme.cpp:844 +#: emoticontheme.cpp:859 msgid "Pizza" msgstr "Pizza" -#: emoticontheme.cpp:845 +#: emoticontheme.cpp:860 msgid "Beer mug" msgstr "Øl-krus" -#: emoticontheme.cpp:846 +#: emoticontheme.cpp:861 msgid "Martini glass" msgstr "Martini glas" -#: emoticontheme.cpp:847 +#: emoticontheme.cpp:862 msgid "Coffee cup" msgstr "kaffekop" -#: emoticontheme.cpp:848 +#: emoticontheme.cpp:863 msgid "Birthday cake" msgstr "Fødselsdagskage" -#: emoticontheme.cpp:849 +#: emoticontheme.cpp:864 msgid "Plate" msgstr "Tallerken" -#: emoticontheme.cpp:850 +#: emoticontheme.cpp:865 msgid "Bowl" msgstr "SkÄl" -#: emoticontheme.cpp:851 +#: emoticontheme.cpp:866 msgid "Star" msgstr "Stjerne" -#: emoticontheme.cpp:852 +#: emoticontheme.cpp:867 msgid "Rainbow" msgstr "Regnbue" -#: emoticontheme.cpp:853 +#: emoticontheme.cpp:868 msgid "Stormy cloud" msgstr "Regnvejr" -#: emoticontheme.cpp:854 +#: emoticontheme.cpp:869 msgid "Lightning" msgstr "Lyn" -#: emoticontheme.cpp:855 +#: emoticontheme.cpp:870 msgid "Umbrella" msgstr "Paraply" -#: emoticontheme.cpp:856 +#: emoticontheme.cpp:871 msgid "Island with a palm tree" msgstr "Ø med træer" -#: emoticontheme.cpp:857 +#: emoticontheme.cpp:872 msgid "Telephone receiver" msgstr "Telefonrør" -#: emoticontheme.cpp:858 +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "Mobiltelefon" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "E-post" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 msgid "Clock" msgstr "Ur" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 msgid "Camera" msgstr "Kamera" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "Filmstrip" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "Node" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "HÄndjern" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 msgid "Money" msgstr "Penge" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "Elpære" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "Cigaret" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "Fodbold" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "Gave med sløjfe" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "X-Box" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "Computer" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 msgid "KMess Icon" msgstr "KMess ikon" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "Serveren er utilgængelig" + +#: initialview.cpp:377 +#, fuzzy +msgid "Connect" +msgstr "&Forbind" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "Af&bryd Forbindelsen" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." -msgstr "" +msgstr "Færre indstillinger... " -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." -msgstr "" +msgstr "Flere indstillinger..." -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "Ny &Gruppe" + +#: kmess.cpp:226 msgid "Add a group" msgstr "Tilfø&j en gruppe" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "Indtast navnet for denne gruppe:" -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "Kontakt-adressen du har indtastet er ikke korrekt: '%1'" - -#: kmess.cpp:638 +#: kmess.cpp:569 msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" @@ -1807,62 +2401,89 @@ msgstr "" "Er du sikker pÄ du vil fjerne kontakten %1 fra din kontaktliste?" -#: kmess.cpp:640 +#: kmess.cpp:571 msgid "Remove contact" msgstr "&Fjern kontaktperson" -#: kmess.cpp:641 kmess.cpp:684 -#, fuzzy -msgid "Remove" -msgstr "Fjernet" - -#: kmess.cpp:642 +#: kmess.cpp:573 msgid "Remove and block" msgstr "Fjern og blokér" -#: kmess.cpp:681 +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "" "Er du sikker pÄ du vil fjerne gruppen %1 fra din kontaktliste?" -#: kmess.cpp:683 -msgid "Remove group" -msgstr "&Fjern gruppe" +#: kmess.cpp:631 +#, fuzzy +msgctxt "dialog button" +msgid "Remove" +msgstr "Fjern" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "Dette er en særlig gruppe og kan ikke ændres" -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 msgid "Rename group" msgstr "&Omdøb gruppe" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "Forbundet" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "Godkendelse fejlede" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "Ikke forbundet" -#: kmess.cpp:1441 +#: kmess.cpp:1408 +#, fuzzy msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" "

KMess vil ikke kunne spille lyde og bekendtgĆørelser.

Kmess " "filen 'eventsrc' kunne ikke findes i en af de fĆølgende foldere: %1

UndersĆøg din installation og kopier den manglende fil til en af de " "listede foldere.

" -#: kmess.cpp:1445 +#: kmess.cpp:1412 msgid "Error with notifications" msgstr "Fejl i bekendtgørelser" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "KMess" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "&Handlinger" @@ -1876,793 +2497,716 @@ msgid "New &Group" msgstr "Ny &Gruppe" #: kmessinterface.cpp:156 -#, fuzzy msgid "Search for Contact" -msgstr "&Søg efter Kontaktpersoner" +msgstr "Søg efter Kontaktperson" #: kmessinterface.cpp:157 msgid "Search by &Interest" msgstr "Søg pÄ &Interesser" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "Søg efter Kontaktperson" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "Ny &Konto" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "Konto&opsætning" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "&Forbind" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "Af&bryd Forbindelsen" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "&Vis Min Profil" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "&Min Status" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "Væk med autosvar" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" -msgstr "" +msgstr "Se" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "Vis Tilla&dte Kontakter" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 msgid "Show &Offline Contacts" msgstr "Vis Offline Kontakter" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "Vis F&jernede Kontakter" -#: kmessinterface.cpp:303 -msgid "Show &Display Pictures" -msgstr "Vis &Profilbilleder" +#: kmessinterface.cpp:318 +#, fuzzy +msgid "Show &Empty Groups" +msgstr "Vis humørikoner" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" +msgstr "Profilbillede:" + +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "Smil" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "S&orter Kontakter Efter" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "Gruppe" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "Online / Offline" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "Vis &Filoverførsel vinduet" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "Vis &Netværksvindue" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "Lytter nu til %1" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +msgid "[%1] %2 goes online" +msgstr "" + +#: kmessview.cpp:363 +msgid "[%1] %2 goes offline" +msgstr "" + +#: kmessview.cpp:559 msgid "Cha&t" msgstr "Chat" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "&Egenskaber" -#: kmessview.cpp:492 +#: kmessview.cpp:569 msgid "&Remove from group" msgstr "Fjer&n fra gruppe" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +msgid "&Listening Music" +msgstr "" + +#: kmessview.cpp:601 msgid "&Copy to Group" msgstr "&Kopier til gruppe" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "&Flyt til gruppe" -#: kmessview.cpp:549 +#: kmessview.cpp:646 msgid "Move Group &Down" msgstr "Flyt Gruppe &Ned" -#: kmessview.cpp:550 +#: kmessview.cpp:647 msgid "Move Group &Up" msgstr "Flyt Gruppe &Op" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "Fjer&n gruppe" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "O&mdøb gruppe" -#: kmessview.cpp:898 -#, fuzzy +#: kmessview.cpp:1053 msgctxt "Contact email in list tooltip" msgid "Email: %1" -msgstr "E-post" +msgstr "E-post: %1" -#: kmessview.cpp:905 -#, fuzzy +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "Klient: %1" -#: kmessview.cpp:918 -#, fuzzy +#: kmessview.cpp:1075 +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "" + +#: kmessview.cpp:1076 +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "" + +#: kmessview.cpp:1085 msgctxt "Group name in group tooltip" msgid "Group %1" -msgstr "
%1 (%2)" +msgstr "Gruppe %1" -#: kmessview.cpp:921 +#: kmessview.cpp:1090 #, fuzzy -msgctxt "Contacts count in group tooltip" +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" -msgstr "Kontakter" +msgstr "%1 kontakter" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 #, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "Kontakten er ikke online" + +#: kmessview.cpp:1504 msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" -msgstr "Indtast din personlige besked her" +msgstr "" -#: kmessview.cpp:1543 -msgid "You have 1 new e-mail in your inbox." -msgstr "Du har et nyt brev i din indbakke" +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" -#: kmessview.cpp:1547 -msgid "You have %1 new emails in your inbox." -msgstr "Du har %1 nye breve i din indbakke" - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "KMess" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" -msgstr "" +msgstr "En MSN Messenger klient til KDE" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 #, fuzzy msgid "Project support" msgstr "P4-Context field support" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 #, fuzzy msgid "Current developer" msgstr "GnomeMeeting udvikler" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 msgid "" "German translation, testing, documentation, web master, project management, " "etc..." msgstr "Tysk oversƦttelse, test, dokumentation og netside osv." -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "Webdesign" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "" "Det oprindelige- og gul/blĆ„/violet humĆørikonsƦttet og italiensk oversƦttelse" -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "TegnefilmshumĆørikoner" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "Oprindeligt lydtema" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "Arabisk oversƦttelse, internationalisering af gem-fil ordning" -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 msgid "More Arabic translation" msgstr "Mere arabisk oversƦttelse" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "Brasilliansk / Portugisisk oversƦttelse" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 msgid "Catalan translation" msgstr "Katalansk oversƦttelse" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "Simpelt kinesisk oversƦttelse, fil send-bug-fix, proxy-connect kode" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 msgid "More Simplified Chinese translation" msgstr "Mere simpel kinesisk oversƦttelse" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 msgid "Traditional Chinese translation" msgstr "Traditionel kinesisk oversƦttelse" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 msgid "Danish translation" msgstr "Dansk oversƦttelse" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 msgid "More Danish translation" msgstr "Mere dansk oversƦttelse" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "Hollandsk oversƦttelse" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 msgid "More Dutch translation" msgstr "Mere hollandsk oversƦttelse" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 msgid "Estonian translation" msgstr "Estisk oversƦttelse" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 msgid "Finnish translation" msgstr "Finsk oversƦttelse" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 msgid "More Finnish translation" msgstr "Mere finsk oversƦttelse" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "Fransk oversƦttelse" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 msgid "More French translation, MSN6 emoticon definitions" msgstr "Mere Fransk oversƦttelse, MSN6 humĆørikon-definitioner" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 msgid "More French translation" msgstr "Mere fransk oversƦttelse" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 msgid "Hungarian translation" msgstr "Ungarsk oversƦttelse" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 msgid "More Italian translation" msgstr "Mere italiensk oversƦttelse" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "Koreansk oversƦttelse" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 msgid "Norsk BokmĆ„l translation" msgstr "Norsk BokmĆ„l oversƦttelse" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 msgid "Slovenian translation" msgstr "Slovensk oversƦttelse" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "Spansk oversƦttelse" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 msgid "More Spanish translation" msgstr "Mere spansk oversƦttelse" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 msgid "Swedish translation" msgstr "Svensk oversƦttelse" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 msgid "Thai translation" msgstr "Thai oversƦttelse" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "Tyrkisk oversƦttelse" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "Mere türkisk oversƦttelse" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -#, fuzzy -msgid "Guido Solinas" -msgstr "GĆ„r Online" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "Billeder i kontaktliste-kode, kontakt-klient info, chat tekst zoom" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "FiloverfĆørsler" + +#: main.cpp:134 msgid "P4-Context field support" msgstr "P4-Context field support" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "Xinerama ordninger" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "Original filmodtagelseskode" -#: main.cpp:120 -msgid "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" msgstr "" -#: main.cpp:120 +#: main.cpp:138 +#, fuzzy +msgid "KWallet support" +msgstr "P4-Context field support" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "Forskellige internationaliseringsordninger" + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "Forskellige internationaliseringsordninger" -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "GnomeMeeting udvikler" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "Mand med pose over hovedet" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "Inspiration og forskelligt kode" -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 +#: main.cpp:150 msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "" "Gammel Hopop ballon-kode, oprindelig p2p kode, msn udfordrings-varetager" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "FravƦrstƦllerkode" -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 +#: main.cpp:152 #, fuzzy msgid "Close-to-tray icon screenshot code" msgstr "Kode for screenshot af Luk-til-systembakke-ikon" -#: main.cpp:131 +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 msgid "Your name here?" msgstr "Dit navn her?" -#: main.cpp:131 +#: main.cpp:156 #, fuzzy msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" "Du er velkommen til at poste dine fejlmeldinger og/eller rettelser pĆ„ KMess " "hjƦlp-forumet!Hvis du fĆøler dit navn mangler her, sĆ„ kontakt os ogsĆ„!" -#: main.cpp:134 +#: main.cpp:159 #, fuzzy msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Dit navn" -#: main.cpp:135 +#: main.cpp:160 #, fuzzy msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "Din e-postadresse:" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "Log automatisk pĆ„ med den givne e-post adresse" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 msgid "The contact cancelled the session." msgstr "Kontakten har annulleret sessionen" -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 msgid "The contact rejected the invitation." msgstr "Kontakten har afvist invitationen" -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 msgid "You have cancelled the session." msgstr "Du har annulleret invitationen" -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "Du har afvist invitationen" -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +#, fuzzy +msgid "Do you want to accept or cancel?" msgstr "Vil du acceptere eller annulere" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +#, fuzzy +msgid "Click to cancel." msgstr "Klik for at annulere." -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 msgid "Do you want to accept the file: %1 (%2)" msgstr "Vil du acceptere filen: %1 (%2)" -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 msgid "The transfer of %1 failed. Couldn't open file." msgstr "OverfĆørslen af %1 fejlede. Kunne ikke Ć„bne filen." -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "OverfĆørsel accepteret" + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 msgid "Connecting to %1, port %2" msgstr "Forbinder til %1 pĆ„ port %2" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 msgid "The transfer was cancelled" msgstr "OverfĆørsel blev annulleret" -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 msgid "Connection established" msgstr "Forbindelsen er etableret" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 msgid "Successfully transferred file: %1" msgstr "Korrekt overfĆørt fil: %1" -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 msgid "The transfer of %1 failed. The file does not exist." msgstr "OverfĆørslen af %1 fejlede. Filen eksisterer ikke." -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 msgid "The transfer of %1 failed. The file could not be read." msgstr "OverfĆørslen af %1 fejlede. Filen kunne ikke lƦses." -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 msgid "Sending file %1" msgstr "Sender fil %1" -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "OverfĆørsel accepteret" - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "Forhandler indstillinger til forbindelsen" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "" "FiloverfĆørsels-invitationen blev annulleret. Fejlagtige data blev modtaget." -#: network/applications/filetransferp2p.cpp:345 -msgid "The transfer of %1 failed. Couldn't open file" -msgstr "OverfĆørslen af %1 fejlede. Kunne ikke Ć„bne filen" +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." +msgstr "" -#: network/applications/filetransferp2p.cpp:524 -msgid "The contact cancelled the transfer." +#: network/applications/filetransferp2p.cpp:348 +#, fuzzy +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "" +"Filen '%1' eksisterer allerede. \n" +"Vil du overskrive den?" + +#: network/applications/filetransferp2p.cpp:378 +#, fuzzy +msgid "The transfer of file "%1" failed. Couldn't save the file." +msgstr "OverfĆørslen af %1 fejlede. Kunne ikke Ć„bne filen." + +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 +#, fuzzy +msgid "The contact has cancelled the transfer of file "%1"." msgstr "Kontakten annulerede overfĆørslen" -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "Du har annulleret invitationen" + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "Filen kunne ikke skrives" -#: network/applications/filetransferp2p.cpp:768 -msgid "The transfer of %1 failed. The file does not exist." +#: network/applications/filetransferp2p.cpp:676 +#, fuzzy +msgid "Successfully sent file "%1"." +msgstr "Korrekt overfĆørt fil: %1" + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "Korrekt overfĆørt fil: %1" + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "OverfĆørslen af %1 fejlede. Filen eksisterer ikke." -#: network/applications/filetransferp2p.cpp:773 -msgid "The transfer of %1 failed. The file could not be read." +#: network/applications/filetransferp2p.cpp:818 +#, fuzzy +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "OverfĆørslen af %1 fejlede. Filen kunne ikke lƦses." -#: network/applications/filetransferp2p.cpp:809 -msgid "Sending file %1 (%2)" +#: network/applications/filetransferp2p.cpp:855 +#, fuzzy +msgid "Sending file "%1" (%2)." msgstr "Sender fil %1 (%2)" -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "Kontakten annulerede overfĆørslen" + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "Du er inviteret til at starte et mĆøde (ved hjƦlp af GnomeMeeting)" -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 msgid "Starting GnomeMeeting. Connecting to %1." msgstr "Starter GnomeMeeting. Forbinder til %1" -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "Inviterer personen til et mĆøde" -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "" "Invitationen blev afvist. Den er ikke understĆøttet af kontaktens program" -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 msgid "The invitation was aborted. An internal error occured." msgstr "Invitationen mislykkedes. En intern fejl opstod." -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "Invitationen mislykkedes. Tiden lĆøb ud inden brugeren accepterede." -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "Invitationen mislykkedes. Tiden lĆøb ud da KMess ikke modtog nogle data" -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "Invitationen mislykkedes. Sammenkobleren lukkede chat-forbindelsen" -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 msgid "The invitation was aborted." msgstr "Invitationen mislykkedes." -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "Du er inviteret til at dele denne persons skrivebord." -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 msgid "Starting KRDC. Connecting to %1." msgstr "Starter KRDC. Forbinder til %1" -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." -msgstr "" -"Kontaktpersonen har brugt en MSN6 feature som KMess ikke kan bruge endnu," +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +msgid "The contact rejected the invitation. An internal error occured." +msgstr "Kontakten afviste invitationen. En intern fejl opstod" -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +msgid "The transfer failed." +msgstr "OverfĆørslen fejlede." + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." @@ -2670,74 +3214,67 @@ msgstr "" "Invitationen blev annulleret. Kontakten sendte enten fejlagtige data eller " "ogsĆ„ understĆøtter KMess den ikke endnu" -#: network/applications/p2papplication.cpp:1503 -msgid "The transfer failed. Data preparation failed." -msgstr "OverfĆørslen fejlede. Data-forbehandling fejlede" - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -msgid "The contact rejected the invitation. An internal error occured." -msgstr "Kontakten afviste invitationen. En intern fejl opstod" - -#: network/applications/p2papplication.cpp:1626 -msgid "The transfer failed." -msgstr "OverfĆørslen fejlede." - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "OverfĆørslen fejlede.Kontakten sendte enten fejlagtige data eller ogsĆ„ " "understĆøtter KMess den ikke endnu" -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "OverfĆørslen fejlede. Tiden lĆøb ud inden brugeren accepterede" + +#: network/applications/p2papplicationbase.cpp:1015 +msgid "The transfer failed. An internal error occured." +msgstr "OverfĆørslen fejlede. En intern fejl opstod" + +#: network/applications/p2papplicationbase.cpp:1176 +msgid "The transfer failed. Couldn't open data source." +msgstr "OverfĆørslen fejlede. Kunne ikke Ć„bne data-kilden" + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "" +"Kontaktpersonen har brugt en MSN6 feature som KMess ikke kan bruge endnu," + +#: network/applications/p2papplication.cpp:1071 +msgid "The transfer failed. Data preparation failed." +msgstr "OverfĆørslen fejlede. Data-forbehandling fejlede" + +#: network/applications/p2papplication.cpp:1178 msgid "The invitation was cancelled. Message was not directed to us." msgstr "Invitationen blev annulleret. Beskeden var ikke tilment dig. " -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "OverfĆørslen fejlede.Kontakten sendte enten fejlagtige data eller ogsĆ„ " "understĆøtter KMess det ikke endnu." -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "Venter pĆ„ forbindelse pĆ„ %1pĆ„ port %2" -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "OvergĆ„r til indirekte filoverfĆørsel(dette kan vƦre langsomt)" -#: network/applications/p2papplication.cpp:3297 -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "OverfĆørslen fejlede. Tiden lĆøb ud inden brugeren accepterede" - -#: network/applications/p2papplication.cpp:3316 -msgid "The transfer failed. An internal error occured." -msgstr "OverfĆørslen fejlede. En intern fejl opstod" - -#: network/applications/p2papplication.cpp:3693 -msgid "The transfer failed. Couldn't open data source." -msgstr "OverfĆørslen fejlede. Kunne ikke Ć„bne data-kilden" - -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:3113 msgid "Waiting for connection" msgstr "Venter pĆ„ forbindelse" -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " "accept." msgstr "Invitationen blev annulleret. Tiden lĆøb ud inden brugeren accepterede" -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." @@ -2745,50 +3282,50 @@ msgstr "" "OverfĆørslen fejlede. Tiden lĆøb ud inden programmet fandt ud af at " "forbindelsen havde lykkedes eller fejlet" -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "Invitationen blev annulleret. Tiden lĆøb ud inden data blev modtaget." -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 msgid "You are invited to start a voice conversation." msgstr "Du er inviteret til at starte en lyd-samtale" -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 msgid "" "You are invited to start a voice conversation but support for this was not " "installed" msgstr "" "Du er inviteret til at starte en lyd-samtale. Men dette er ikke understĆøttet." -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 msgid "You have cancelled the voice conversation." msgstr "Du har annulleret lyd-samtalen" -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "Invitationen blev annulleret. Lyd-enheden kunne ikke Ć„bnes." -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 msgid "Start voice conversation. Connecting to %1." msgstr "Start lyd-samtale. Forbinder til %1" -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 msgid "Start voice conversation. Listening on %1." msgstr "Start lyd-samtale. Lytter pĆ„ %1" -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 msgid "Inviting the contact to a voice conversation." msgstr "Inviterer personen til en lyd-samtale" -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 msgid "The contact is inviting you for '%1', but this is not implemented yet." msgstr "Kontakten inviterer dig til '%1', men det er ikke understĆøttet endnu." #: network/applications/webcamtransferp2p.cpp:89 msgid "webcam" -msgstr "" +msgstr "webcam" #: network/extra/msnftpconnection.cpp:119 msgid "The transfer of %1 was cancelled." @@ -2822,632 +3359,768 @@ msgstr "Kunne ikke skabe en forbindelse" msgid "Receiving file %1" msgstr "Modtager fil %1" -#: network/msnconnection.cpp:477 -msgid "1 ping lost" -msgstr "Ping tabt" +#: network/msnconnection.cpp:589 +#, fuzzy +msgid "KMess could not access the remote webservice.
Details: %1" +msgstr "KMess kunne ikke fÄ tilgang til den eksterne webservice." -#: network/msnconnection.cpp:481 -msgid "%1 pings lost" -msgstr "%1 ping tabt" - -#: network/msnconnection.cpp:496 -msgid "The connection to the server was lost." -msgstr "Forbindelsen til serveren gik tabt" - -#: network/msnconnection.cpp:704 +#: network/msnnotificationconnection.cpp:1317 #, fuzzy msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." -msgstr "" -"KMess kunne ikke forbinde til MSN Messenger service.\n" -"Undersøg om du er forbundet til internettet.\n" -"Systemfejl: %1 (kode: %2)." - -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "Den eksterne server har tabt forbindelsen" - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" -"KMess kunne ikke forbinde til MSN Messenger serverne. Serverne kan være " -"midlertidigt utilgænglige eller der kan være et problem med din " -"internetforbindelse" - -#: network/msnnotificationconnection.cpp:724 -msgid "Show MSN Messenger Service status?" -msgstr "Vis MSN Messenger Service status?" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "Serverfejl" - -#: network/msnnotificationconnection.cpp:1344 -#, fuzzy -msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" msgstr "" "Din forbindelse er afbrudt fordi der blev \n" -"forbundet til MSN fra en anden klient." +"forbundet til MSN fra en anden klient eller \n" +"et andet sted." -#: network/msnnotificationconnection.cpp:1558 +#: network/msnnotificationconnection.cpp:1532 msgid "Got synchronization" msgstr "Fik synkronisering" -#: network/msnnotificationconnection.cpp:1699 -msgid "Authenticating" +#: network/msnnotificationconnection.cpp:1670 +#, fuzzy +msgid "Authenticating..." msgstr "Kontrolerer brugernavn og kode" -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "Modtaget brugergodkendelse" - -#: network/msnnotificationconnection.cpp:1752 +#: network/msnnotificationconnection.cpp:1719 msgid "Waiting for contact list..." msgstr "Venter pÄ kontaktliste" -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "Overfører til notifikations-server" +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." +msgstr "" -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" +#: network/msnnotificationconnection.cpp:1894 +#, fuzzy +msgid "Authentication failed, please verify your account name and password." msgstr "" "Godkendelse fejlede. Undersøg om du har angivet rigtigt brugernavn og kodeord" -#: network/msnnotificationconnection.cpp:2042 +#: network/msnnotificationconnection.cpp:1993 msgid "Connecting..." msgstr "Forbinder..." -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" +#: network/msnnotificationconnection.cpp:2167 +#, fuzzy +msgid "Unknown command received from the server: %1" msgstr "KMess modtog en ukendt kommando fra serveren: %1" -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 +#: network/msnnotificationconnection.cpp:2192 msgid "Invalid command syntax" msgstr "" -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -msgid "There was an internal error in KMess: %1" -msgstr "Der var en intern fejl i KMess: %1" - -#: network/msnnotificationconnection.cpp:2243 +#: network/msnnotificationconnection.cpp:2196 msgid "Invalid command parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2246 +#: network/msnnotificationconnection.cpp:2199 msgid "The email you have tried to add is not a MSN Messenger account" msgstr "E-postadressen du har prøvet at tilføje er ikke en MSN Messenger konto" -#: network/msnnotificationconnection.cpp:2249 +#: network/msnnotificationconnection.cpp:2204 msgid "Domain name missing" -msgstr "" +msgstr "Domænenavnet mangler" -#: network/msnnotificationconnection.cpp:2252 +#: network/msnnotificationconnection.cpp:2208 msgid "Already logged in" -msgstr "" +msgstr "Allerede logget ind" -#: network/msnnotificationconnection.cpp:2255 +#: network/msnnotificationconnection.cpp:2211 msgid "The account name given is invalid" msgstr "Det givne brugernavn er ugyldigt" -#: network/msnnotificationconnection.cpp:2258 +#: network/msnnotificationconnection.cpp:2215 msgid "" "That account name is invalid, or your passport has not been confirmed yet" msgstr "" "Brugernavnet er ugyldigt eller dit passport er ikke blevet bekræftet endnu." -#: network/msnnotificationconnection.cpp:2261 +#: network/msnnotificationconnection.cpp:2218 msgid "Your contact list is full" msgstr "Din kontaktliste er fyldt op" -#: network/msnnotificationconnection.cpp:2264 +#: network/msnnotificationconnection.cpp:2223 msgid "Invalid SBP parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2267 +#: network/msnnotificationconnection.cpp:2226 msgid "This contact is already on your list" msgstr "Denne kontakt er allerede pÄ din liste" -#: network/msnnotificationconnection.cpp:2270 +#: network/msnnotificationconnection.cpp:2230 msgid "This contact is not on your list" msgstr "Denne kontakt er ikke i din liste" -#: network/msnnotificationconnection.cpp:2273 +#: network/msnnotificationconnection.cpp:2234 msgid "This contact is not online" msgstr "Kontakten er ikke online" -#: network/msnnotificationconnection.cpp:2276 +#: network/msnnotificationconnection.cpp:2239 msgid "Already in this mode" -msgstr "" +msgstr "Allerede i denne tilstand" -#: network/msnnotificationconnection.cpp:2279 -#, fuzzy +#: network/msnnotificationconnection.cpp:2243 msgid "Contact is in the opposite list" -msgstr "Denne kontakt er ikke i din liste" +msgstr "Kontakten er i den modsatte liste" -#: network/msnnotificationconnection.cpp:2282 -msgid "Your contact list has too many groups" -msgstr "Din kontaktliste har for mange grupper" - -#: network/msnnotificationconnection.cpp:2285 -msgid "This group can't be changed" -msgstr "Denne gruppe kan ikke ændres" - -#: network/msnnotificationconnection.cpp:2288 -msgid "This group is not empty" -msgstr "Denne gruppe er ikke tom" - -#: network/msnnotificationconnection.cpp:2291 +#: network/msnnotificationconnection.cpp:2247 +#, fuzzy msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." msgstr "" "Gruppenavnet bruges allerede i din Messenger eller Hotmail kontaktliste." -#: network/msnnotificationconnection.cpp:2294 +#: network/msnnotificationconnection.cpp:2251 +msgid "Your contact list has too many groups" +msgstr "Din kontaktliste har for mange grupper" + +#: network/msnnotificationconnection.cpp:2255 +msgid "This group can't be changed" +msgstr "Denne gruppe kan ikke ændres" + +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "Din kontaktliste har for mange grupper" + +#: network/msnnotificationconnection.cpp:2264 +msgid "This group is not empty" +msgstr "Denne gruppe er ikke tom" + +#: network/msnnotificationconnection.cpp:2268 msgid "The group name is too long" msgstr "Gruppenavnet er for langt" -#: network/msnnotificationconnection.cpp:2297 +#: network/msnnotificationconnection.cpp:2273 msgid "Attempted to change group \"0\"" +msgstr "Forsøgte at ændre gruppe \"0\"" + +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +msgid "There was an internal error in KMess: %1" +msgstr "Der var en intern fejl i KMess: %1" + +#: network/msnnotificationconnection.cpp:2277 +msgid "Invalid Group" +msgstr "Ugyldig gruppe" + +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" msgstr "" -#: network/msnnotificationconnection.cpp:2300 -#, fuzzy -msgid "Invalid Group" -msgstr "O&mdøb gruppe" - -#: network/msnnotificationconnection.cpp:2303 +#: network/msnnotificationconnection.cpp:2284 msgid "Switchboard server failed" msgstr "Sammenkobleren fejlede" -#: network/msnnotificationconnection.cpp:2306 +#: network/msnnotificationconnection.cpp:2287 msgid "Transfer to switchboard server failed" msgstr "Overførsel til sammenkobler-server fejlede" -#: network/msnnotificationconnection.cpp:2309 +#: network/msnnotificationconnection.cpp:2291 msgid "Direct connection (MSNSLP) error, connection failed" msgstr "Direkte forbindelse (MSNSLP) fejl, forbindelsen fejlede" -#: network/msnnotificationconnection.cpp:2312 +#: network/msnnotificationconnection.cpp:2295 msgid "Required field missing" -msgstr "" +msgstr "Nødvendigt felt mangler" -#: network/msnnotificationconnection.cpp:2315 +#: network/msnnotificationconnection.cpp:2299 msgid "Not logged in" -msgstr "" +msgstr "Ikke logget ind" -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" -msgstr "Fejl ved hentning af kontaktlisten. Prøv igen senere. " +#: network/msnnotificationconnection.cpp:2302 +#, fuzzy +msgid "No permissions given for this account" +msgstr "Specielle humørikoner for denne konto" -#: network/msnnotificationconnection.cpp:2322 +#: network/msnnotificationconnection.cpp:2307 msgid "Command is disabled" msgstr "" -#: network/msnnotificationconnection.cpp:2325 +#: network/msnnotificationconnection.cpp:2310 msgid "Your account is banned." msgstr "Din konto er bandlyst" -#: network/msnnotificationconnection.cpp:2329 +#: network/msnnotificationconnection.cpp:2314 #, fuzzy msgid "Challenge response failed" msgstr "Overførslen fejlede." -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" +#: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" +msgstr "" + +#: network/msnnotificationconnection.cpp:2323 +#, fuzzy +msgid "You are opening chat sessions too fast" msgstr "Du Äbner sessioner for hurtigt" -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" msgstr "Du har for mange sessioner Äbne" -#: network/msnnotificationconnection.cpp:2341 +#: network/msnnotificationconnection.cpp:2334 msgid "Unexpected command sequence" msgstr "" -#: network/msnnotificationconnection.cpp:2344 +#: network/msnnotificationconnection.cpp:2338 msgid "Bad friend name" msgstr "DÄrligt kaldenavn" -#: network/msnnotificationconnection.cpp:2348 +#: network/msnnotificationconnection.cpp:2344 msgid "Bad CVR data" msgstr "" -#: network/msnnotificationconnection.cpp:2353 +#: network/msnnotificationconnection.cpp:2350 msgid "The server reports KMess is flooding it with too many data" msgstr "Serveren siger at KMess sender for mange data." -#: network/msnnotificationconnection.cpp:2358 +#: network/msnnotificationconnection.cpp:2357 #, fuzzy msgid "Authentication ticket was incorrect" msgstr "Godkendelse fejlede" -#: network/msnnotificationconnection.cpp:2362 +#: network/msnnotificationconnection.cpp:2360 msgid "You can't start a chat with someone while you are invisible." msgstr "Du kan ikke snakke med nogen nÄr du er usynlig." -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." +#: network/msnnotificationconnection.cpp:2364 +#, fuzzy +msgid "Not accepting new contacts" +msgstr "Modtager ikke flere overhoveder." + +#: network/msnnotificationconnection.cpp:2368 +#, fuzzy +msgid "" +"You have a kids passport account, you need parental consent to chat online." msgstr "" "Du har et børne-passport. Du skal have en forældres godkendelse for at " "chatte online" -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." +#: network/msnnotificationconnection.cpp:2371 +#, fuzzy +msgid "Your passport account needs to be verified first." msgstr "Dit passport skal først bekræftes" -#: network/msnnotificationconnection.cpp:2373 +#: network/msnnotificationconnection.cpp:2375 msgid "Bad USR ticket" msgstr "" -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" -msgstr "KMess - MSN fejl" +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" +msgstr "Fejl ved hentning af kontaktlisten. Prøv igen senere. " -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" +#: network/msnnotificationconnection.cpp:2399 +#, fuzzy +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." msgstr "Der var en intern serverfejl" +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + #: network/msnnotificationconnection.cpp:2414 -msgid "The server is too busy" -msgstr "Serveren er optaget" - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "Serveren er utilgængelig" - -#: network/msnnotificationconnection.cpp:2422 msgid "Peer notification server down" msgstr "Medelelses-server nede" -#: network/msnnotificationconnection.cpp:2426 +#: network/msnnotificationconnection.cpp:2418 msgid "The server is going down" msgstr "Serveren gÄr ned" -#: network/msnnotificationconnection.cpp:2429 +#: network/msnnotificationconnection.cpp:2422 msgid "The server is going down soon" msgstr "Serveren gÄr snart ned" -#: network/msnnotificationconnection.cpp:2433 +#: network/msnnotificationconnection.cpp:2427 msgid "Write is blocking" msgstr "Skrivning er blokeret" -#: network/msnnotificationconnection.cpp:2436 +#: network/msnnotificationconnection.cpp:2431 msgid "Session is overloaded" msgstr "Session er overbelastet" -#: network/msnnotificationconnection.cpp:2441 +#: network/msnnotificationconnection.cpp:2438 msgid "The server is not available" msgstr "Serveren er utilgængelig" -#: network/msnnotificationconnection.cpp:2444 +#: network/msnnotificationconnection.cpp:2442 msgid "Authentication failed" msgstr "Godkendelse fejlede" -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" -msgstr "Modtager ikke flere overhoveder." +#: network/msnnotificationconnection.cpp:2449 +#, fuzzy +msgid "Unknown error code received from the server: %1" +msgstr "KMess modtog en ukendt kommando fra serveren: %1" -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" -msgstr "KMess modtog en ukendt fejlbesked fra serveren: %1" +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +#, fuzzy +msgctxt "Error dialog box title" +msgid "MSN error" +msgstr "KMess - MSN fejl" -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "Advarsel: Serveren lukker for vedligeholdelse om 1 minut!" +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "minutter" +msgstr[1] "minutter" #: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." +#, fuzzy +msgid "Server closes for maintenance in %1!" +msgstr "Advarsel: Serveren lukker for vedligeholdese om %1 minutter!" + +#: network/msnnotificationconnection.cpp:2604 +#, fuzzy +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." msgstr "" "MSN serveren har annonceret at den lukker ned for vedligeholdese om ét minut." -#: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" -msgstr "Advarsel: Serveren lukker for vedligeholdese om %1 minutter!" - -#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:2901 msgid "Lost reference to SOAP client" msgstr "" -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +#, fuzzy +msgid "KMess could not process Offline-IM messages.
Details: %1" msgstr "KMess kan ikke behandle Offline-IM beskeder.

Detaljer: %1" -#: network/msnnotificationconnection.cpp:3209 +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "Godkendelse fejlede" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "Der var en intern fejl i KMess: %1" + +#: network/msnnotificationconnection.cpp:3242 +#, fuzzy +msgctxt "Login error message, with more details for developer versions" msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" +msgstr "" +"KMess kunne ikke forbinde til MSN Messenger serverne. Serverne kan vƦre " +"midlertidigt utilgƦnglige eller der kan vƦre et problem med din " +"internetforbindelse" + +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "Forbindelsen til serveren gik tabt" + +#: network/msnnotificationconnection.cpp:3302 +#, fuzzy +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" msgstr "" "Autencitet fejlede. KMess kunne ikke logge dig pÄ \n" "\n" "Detaljer: %1" -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" -msgstr "KMess kunne ikke fÄ tilgang til den eksterne webservice." +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "Serverfejl" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "Forbindelsen er etableret" + +#: network/msnsockettcp.cpp:368 +msgid "1 ping lost" +msgstr "Ping tabt" + +#: network/msnsockettcp.cpp:372 +msgid "%1 pings lost" +msgstr "%1 ping tabt" + +#: network/msnsockettcp.cpp:387 +msgid "The connection to the server was lost." +msgstr "Forbindelsen til serveren gik tabt" + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "Personen er offline eller usynlig." -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "" "Kontakten har started eb MSN7 feature som KMess ikke understøtter endnu." -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 msgid "The message \"%1\" was not received!" msgstr "Beskeden \"%1\" blev ikke modtaget!" -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "Kunne ikke forbinde: %1" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "For mange videresendelser fra login-servicen" -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +#, fuzzy +msgid "In %1's chat: %2" msgstr "I %1s chat: %2" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +#, fuzzy +msgid "%1 says:
'%2'" msgstr "%1 siger:
'%2'" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" +#: notification/chatnotification.cpp:171 +#, fuzzy +msgid "%1 has sent you an offline message:
'%2'" msgstr "%1 har sendt dig en offline besked: '%2'" -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" +#: notification/chatnotification.cpp:178 +#, fuzzy +msgid "%1's chat requests attention!" msgstr "%1s chat beder om din opmƦrksomhed!" -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" +#: notification/chatnotification.cpp:183 +#, fuzzy +msgid "%1:
%2" msgstr "%1:
%2" -#: notification/notificationchat.cpp:200 +#: notification/chatnotification.cpp:190 #, fuzzy -msgid "%1 has sent you a handwritten message!" +msgid "%1 has sent you a handwritten message!" +msgstr "%1 har sendt dig en hÄndskrevet besked!" + +#: notification/chatnotification.cpp:194 +#, fuzzy +msgid "%1 has sent you a nudge!" msgstr "%1 har sendt dig et vink!" -#: notification/notificationchat.cpp:204 -msgid "%1 has sent you a nudge!" -msgstr "%1 har sendt dig et vink!" - -#: notification/notificationchat.cpp:208 -msgid "%1 has sent you a wink!" +#: notification/chatnotification.cpp:198 +#, fuzzy +msgid "%1 has sent you a wink!" msgstr "%1 har sendt dig et blink!" -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" +#: notification/chatnotification.cpp:204 +#, fuzzy +msgid "%1 wants to use the webcam!" msgstr "%1 vil bruge webcam!" -#: notification/notificationchat.cpp:215 -msgid "%1 is sending you a file!" +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" msgstr "%1 sender dig en fil!" -#: notification/notificationchat.cpp:216 -msgid "%1 has sent you an invitation!" +#: notification/chatnotification.cpp:206 +#, fuzzy +msgid "%1 has sent you an invitation!" msgstr "%1 har sendt dig en invitation!" -#: notification/notificationchat.cpp:223 -msgid "%1 has canceled the webcam session!" +#: notification/chatnotification.cpp:213 +#, fuzzy +msgid "%1 has canceled the webcam session!" msgstr "Du har annulleret invitationen" -#: notification/notificationchat.cpp:224 -msgid "%1 has canceled the file transfer!" +#: notification/chatnotification.cpp:214 +#, fuzzy +msgid "%1 has canceled the file transfer!" msgstr "%1 annullerede fil-overførslen!" -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +#, fuzzy +msgid "%1's activity has been canceled!" msgstr "%1s aktivitet er blevet annulleret!" -#: notification/notificationchat.cpp:232 -msgid "%1 has accepted to use the webcam!" +#: notification/chatnotification.cpp:222 +#, fuzzy +msgid "%1 has accepted to use the webcam!" msgstr "%1 har accepteret at bruge webcam!" -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" +#: notification/chatnotification.cpp:223 +#, fuzzy +msgid "%1 has accepted the file transfer!" msgstr "%1 har accepteret filoverførslen!" -#: notification/notificationchat.cpp:234 -msgid "%1 has accepted your invitation!" +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" msgstr "%1 har accepteret din invitation!" -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" +#: notification/chatnotification.cpp:231 +#, fuzzy +msgid "%1 has ended the webcam session!" msgstr "%1 har afsluttet webcamsessionen." -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "Filoverførslen fra %1 er afsluttet!" -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" +#: notification/chatnotification.cpp:233 +#, fuzzy +msgid "%1's activity has ended!" msgstr "%1s aktivitet er afsluttet!" -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" +#: notification/chatnotification.cpp:240 +#, fuzzy +msgid "%1's webcam session has failed!" msgstr "%1s webcamsession fejlede!" -#: notification/notificationchat.cpp:251 -msgid "The file transfer with %1 has failed!" +#: notification/chatnotification.cpp:241 +#, fuzzy +msgid "The file transfer with %1 has failed!" msgstr "Overførslen af %1 blev annulleret" -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:242 +#, fuzzy +msgid "%1's activity has ended with an error!" msgstr "%1s aktivitet endte med en fejl!" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -msgid "%1 is now online" +#: notification/contactstatusnotification.cpp:70 +#, fuzzy +msgid "%1 is now online" msgstr "%1 er nu online" -#: notification/notificationcontactstatus.cpp:76 -msgid "%1 has gone away" +#: notification/contactstatusnotification.cpp:71 +#, fuzzy +msgid "%1 has gone away" msgstr "%1 er gÄet" -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/contactstatusnotification.cpp:72 +#, fuzzy +msgid "%1 will be right back" msgstr "%1 kommer snart tilbage" -#: notification/notificationcontactstatus.cpp:78 -msgid "%1 is now busy" +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" msgstr "%1 har travlt" -#: notification/notificationcontactstatus.cpp:79 -msgid "%1 has become invisible" +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" msgstr "%1 er blevet usynlig" -#: notification/notificationcontactstatus.cpp:80 -msgid "%1 has gone idle" +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" msgstr "%1 gør ingenting" -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/contactstatusnotification.cpp:76 +#, fuzzy +msgid "%1 has logged out" msgstr "%1 er logget ud" -#: notification/notificationcontactstatus.cpp:82 -msgid "%1 is on the phone" +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" msgstr "%1 snakker i telefon" -#: notification/notificationcontactstatus.cpp:83 -msgid "%1 is out for lunch" +#: notification/contactstatusnotification.cpp:78 +#, fuzzy +msgid "%1 is out for lunch" msgstr "%1 er ude og spise frokost" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/newemailnotification.cpp:78 +#, fuzzy +msgid "New email:
'%1'
by '%2'" msgstr "Ny email:
'%1'
af '%2'" -#: settings/accountswidget.cpp:81 +#: settings/accountpage.cpp:69 msgid "Browse..." -msgstr "" +msgstr "Gennemse..." -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +#, fuzzy +msgid "Browse and crop picture..." msgstr "gennemse og beskær billede..." -#: settings/accountswidget.cpp:404 -msgid "Display Picture" -msgstr "Profilbillede:" +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" +#: settings/accountpage.cpp:448 +#, fuzzy +msgid "Downloading of display picture failed" msgstr "Downloading af profilbillede fejlede" -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 +#, fuzzy msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" "En fejl opstod da du prøvede at ændre profilbilledet.\n" "Undersøg om det er en korrekt billed fil." -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "Hej, hvordan gÄr det? :)" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "Stacy" - -#: settings/chatstylepage.cpp:317 -msgid "Great!" -msgstr "Fint!" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "Jeg er /lige/ kommet tilbage fra min ferie i Italien!" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 -#, fuzzy +#: settings/accountsettingsdialog.cpp:56 msgid "&Delete" -msgstr "&Fjern kontaktperson" +msgstr "&Fjern" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "Indstillinger" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 msgid "Account" msgstr "Konti" -#: settings/settingsdialog.cpp:74 -#, fuzzy +#: settings/accountsettingsdialog.cpp:76 msgid "My Account" -msgstr "Konti" +msgstr "Min Konto" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "Advarsler" -#: settings/settingsdialog.cpp:82 -#, fuzzy +#: settings/accountsettingsdialog.cpp:81 msgid "Alerts and Notifications" -msgstr "KMess bekendtgørelse" +msgstr "Alarmer og bekendtgørelser" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "Samtale" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "Chat-log" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +#, fuzzy +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "Kontakt-adressen du har indtastet er ikke korrekt: '%1'" + +#: settings/accountsettingsdialog.cpp:201 +#, fuzzy +msgid "The email address you have entered is already in use: '%1'" +msgstr "Kontakt-adressen du har indtastet er ikke korrekt: '%1'" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "Er du sikker pÄ du vil fjerne denne konto?" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "Er du sikker pÄ du vil fjerne denne konto?" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "Hej, hvordan gÄr det? :)" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "Stacy" + +#: settings/chatstylepage.cpp:341 +msgid "Great!" +msgstr "Fint!" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "Jeg er /lige/ kommet tilbage fra min ferie i Italien!" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "Erstat eksisterende humørikon" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "Indstillinger" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +#, fuzzy +msgid "Accounts" +msgstr "Konti" + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "E-postnotifikation" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "Gem chat-filer i denne ovenstÄende folder:" + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." @@ -3455,81 +4128,158 @@ msgstr "" "NÄr du lukker hovedvinduet vil KMess blive ved med at køre i systembakken. " "Brug 'Afslut' fra 'Forbind' menuen for at afslutte programmet." -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "Lægger sig i systembakken" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "
%1 (%2)" -#~ msgid "Add contact" -#~ msgstr "Tilføj kontaktperson" +#: systemtraywidget.cpp:245 +#, fuzzy +msgid "- %1 (%2)" +msgstr "%1 (%2/%3)" + +#~ msgid "Click to send an email to this contact." +#~ msgstr "Klik for at sende en e-post til denne kontakt." + +#~ msgid "Picture:" +#~ msgstr "Billede:" #, fuzzy -#~ msgid "KMess Notification" -#~ msgstr "E-postnotifikation" +#~ msgid "Login Information" +#~ msgstr "Vis e-postinformation" -#~ msgid "Accounts" -#~ msgstr "Konti" - -#~ msgid "" -#~ msgstr "" +#~ msgid "Logging in..." +#~ msgstr "Logger ind..." #~ msgid "" -#~ "_: NAME OF TRANSLATORS\n" -#~ "Your names" -#~ msgstr "Pascal d'Hermilly, Lars Sommer LaSG" +#~ "Allows you to choose which e-mail program KMess should open to view e-" +#~ "mail messages." +#~ msgstr "" +#~ "Lader dig vælge hvilken postklient KMess skal Äbne for at vise din " +#~ "postbeskeder." + +#~ msgid "Use a specified command:" +#~ msgstr "Brug en særlig kommando:" + +#~ msgid "This account does not have an Hotmail inbox!" +#~ msgstr "Denne konto har ikke en Hotmail indbakke!" + +#, fuzzy +#~ msgid "Email: " +#~ msgstr "E-post: %1" + +#, fuzzy +#~ msgid "Client: " +#~ msgstr "Klient: %1" + +#~ msgid "Remove group" +#~ msgstr "&Fjern gruppe" + +#~ msgid "Show &Display Pictures" +#~ msgstr "Vis &Profilbilleder" + +#~ msgid "Show &Tool bar" +#~ msgstr "Vis Værktøjslinje" + +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr "Du har et nyt brev i din indbakke" + +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr "Du har %1 nye breve i din indbakke" #~ msgid "" -#~ "_: EMAIL OF TRANSLATORS\n" -#~ "Your emails" -#~ msgstr "pascal@tipisoft.dk, admin@LaSG.dk" +#~ "(c) 2002-2008, Mike K. Bennett\n" +#~ "(c) 2005-2008, Diederik van der Boor\n" +#~ "(c) 2007-2008, Valerio Pilo\n" +#~ msgstr "" +#~ "(c) 2002-2008, Mike K. Bennett\n" +#~ "(c) 2005-2008, Diederik van der Boor\n" +#~ "(c) 2007-2008, Valerio Pilo\n" -#~ msgid "Insert an emoticon" -#~ msgstr "Indsæt et humørikon" +#, fuzzy +#~ msgid "Guido Solinas" +#~ msgstr "GÄr Online" -#~ msgid "Show/Hide &Contact Sidebar" -#~ msgstr "Vis/Sk&jul kontaktliste" +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "Overførslen af %1 fejlede. Kunne ikke Äbne filen" -#~ msgid "Away - Idle" -#~ msgstr "Væk - Fraværende" +#~ msgid "Sidebar" +#~ msgstr "Sidebar" -#~ msgid "chat-style-text" -#~ msgstr "Chat-tekst-stil" +#~ msgid "New contact's group" +#~ msgstr "Gruppe til ny kontaktperson" -#~ msgid "The e-mail address given was invalid!" -#~ msgstr "E-postadresen var ugyldig" +#~ msgid "Enter your login information:" +#~ msgstr "Indtast din login information" -#~ msgid "(Away)" -#~ msgstr "(væk)" +#~ msgid "Your friendly name:" +#~ msgstr "Dit kaldenavn:" -#~ msgid "(Be Right Back)" -#~ msgstr "(er snart tilbage)" +#~ msgid "Your email address:" +#~ msgstr "Din e-postadresse:" -#~ msgid "(Busy)" -#~ msgstr "(optaget)" +#~ msgid "Your password:" +#~ msgstr "Dit kodeord:" -#~ msgid "(Invisible)" -#~ msgstr "(usynlig)" +#~ msgid "Display picture:" +#~ msgstr "Profilbillede:" -#~ msgid "(Away - Idle)" -#~ msgstr "(væk - fraværende)" +#~ msgid "Don't show a displa&y picture" +#~ msgstr "Vis ikke et &profilbillede" -#~ msgid "(Out to Lunch)" -#~ msgstr "(til frokost)" +#~ msgid "Status to set at login:" +#~ msgstr "Sæt status ved login:" -#~ msgid "(On the Phone)" -#~ msgstr "(taler i telefon)" +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "Vis bekendtgørelser nÄr du modtager en e-post" -#~ msgid "Connection timeout" -#~ msgstr "Forbindelsen fejlede" +#~ msgid "Organize chat folders by:" +#~ msgstr "Organiser chat-mapper efter:" -#~ msgid "Connect" -#~ msgstr "Forbind" +#~ msgid "&Show graphics in chat messages" +#~ msgstr "Vis &grafik i chat-beskeder" -#~ msgid "Listening to %1" -#~ msgstr "Lytter til %1" +#~ msgid "Use Hotmail" +#~ msgstr "Brug Hotmail" -#~ msgid "The contact is listening to music" -#~ msgstr "Kontakten lytter til musik" +#~ msgid "says:" +#~ msgstr "siger:" + +#~ msgid "Current name: " +#~ msgstr "Nuværende navn: " + +#~ msgid "" +#~ "KMess could not connect to the MSN Messenger service.\n" +#~ "Please, be sure to be connected to the internet.\n" +#~ "reason: %1." +#~ msgstr "" +#~ "KMess kunne ikke forbinde til MSN Messenger service.\n" +#~ "Undersøg om du er forbundet til internettet.\n" +#~ "Grund: %1" + +#~ msgid "The remote server has closed the connection." +#~ msgstr "Den eksterne server har tabt forbindelsen" + +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr "Vis MSN Messenger Service status?" + +#~ msgid "Received user confirmation" +#~ msgstr "Modtaget brugergodkendelse" + +#~ msgid "Transfer to notification server" +#~ msgstr "Overfører til notifikations-server" + +#~ msgid "The server is too busy" +#~ msgstr "Serveren er optaget" + +#~ msgid "The server is unavailable" +#~ msgstr "Serveren er utilgængelig" + +#~ msgid "KMess received an unknown error message from the server: %1" +#~ msgstr "KMess modtog en ukendt fejlbesked fra serveren: %1" + +#~ msgid "Warning: Server closes for maintenance in 1 minute!" +#~ msgstr "Advarsel: Serveren lukker for vedligeholdelse om 1 minut!" diff --git a/po/de.po b/po/de.po index 215c51f..0a6ad87 100644 --- a/po/de.po +++ b/po/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" "PO-Revision-Date: 2008-01-07 19:16+0100\n" "Last-Translator: Jan Tönjes \n" "Language-Team: \n" @@ -17,45 +17,38 @@ msgstr "" "X-Generator: KBabel 1.11.4\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "Verbinde ..." - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -msgid "S&end" -msgstr "Sen&den" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 msgid "Ne&w Line" msgstr "N&eue Linie" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 -#, fuzzy -msgid "Sidebar" -msgstr "Sidebar" +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 +msgid "S&end" +msgstr "Sen&den" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +msgid "Contacts" +msgstr "Kontakte" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "Klicken Sie hier im das Profil von dem Kontakt anzuzeigen." #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." -msgstr "Klicken Sie hier um dem Kontakt eine Email zu senden." +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 #, fuzzy msgid "" "Enter here the email address of the person you wish to add to your contact " @@ -64,41 +57,39 @@ msgstr "" "Geben Sie die Emailadresse der Person ein, die hinzugefügt werden soll." #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 msgid "Email address" msgstr "Emailadresse" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 #, fuzzy -msgid "New contact's group" -msgstr "Neuer K&ontakt" +msgid "Initial group" +msgstr "Gruppe &umbenennen" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "Geben Sie einen Shortcut für das Emoticon ein:" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "Wählen Sie eine Datei aus:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 #, fuzzy msgid "" "Enter a message to be automatically sent to people who try to message you." @@ -107,125 +98,339 @@ msgstr "" "an die Personen gesendet wird, die versuchen Ihnen zu schreiben." #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 #, fuzzy msgid "&Automatic away message" msgstr "Geben Sie eine Abwesenheitsnachricht ein" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" msgstr "" -"%1\n" -"hat Sie zu seiner Kontaktliste hinzugefügt. Möchten Sie:" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 -msgid "&Add this contact to your \"Friends\" list" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 +#, fuzzy +msgid "&Add this person to my \"Friends\" list" msgstr "Den Kontakt zu Ihrer \"Freunde\" liste &hinzufügen" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 -msgid "&Not add this contact, but let them see your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 +#, fuzzy +msgid "Do not add this person; only allow them to see my online state" msgstr "Diesen Kontakt &nicht hinzufügen, aber meinen Status sehen lassen" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 -msgid "Block this person from contacting &you or seeing your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 +#, fuzzy +msgid "&Block this person from contacting me or seeing my online state" msgstr "Diesen Kontakt &blockieren" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, no-c-format +msgid "Contact Properties for %1" +msgstr "Kontakteigenschaften für %1" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +#, fuzzy +msgid "Restore" +msgstr "Gelöscht" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "Einen alternativen zu dem vom Kontakt gegebenen Nickname benutzen" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "" +"Eine Benachrichtigung anzeigen wenn der Kontakt Online und Offline geht. " + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "Sound:" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +#, fuzzy +msgid "&Clear Cache" +msgstr "Tab lƶschen" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +#, fuzzy +msgid "Notes" +msgstr "Note" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "Netzwerkfenster" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +#, fuzzy +msgid "Standard" +msgstr "Stern" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "Sen&den" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 #, fuzzy msgid "Cancel" msgstr "Abgebrochen" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -msgid "Enter your login information:" -msgstr "Geben Sie Ihre Logininformationen ein:" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" +msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 -msgid "Password" +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 +#, fuzzy +msgid "Email address:" +msgstr "Emailadresse: " + +#. i18n: tag string +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +#, fuzzy +msgid "Password:" msgstr "Passwort" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "Status beim Einloggen" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 #, fuzzy msgid " Account options " msgstr "Konto&einstellungen" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 msgid "Remem&ber this profile" msgstr "Dieses Profil &speichern" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "&Verbinden" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "Geben Sie hier Ihre persƶnliche Nachricht ein " #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr "Konto&einstellungen" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "" "Geben Sie den Namen ein, den anderen Kontakte sehen wenn Sie Online sind." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 -msgid "Your friendly name:" -msgstr "Ihr Nickname:" +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 +#, fuzzy +msgid "&Friendly name:" +msgstr "&Nickname" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" @@ -234,15 +439,15 @@ msgstr "" "unter http://register.passport.com/ einen neuen Account registrieren." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 #, fuzzy -msgid "Your email address:" +msgid "&Email address:" msgstr "Emailadresse: " #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" @@ -251,39 +456,40 @@ msgstr "" "http://register.passport.com/ einen neuen Account registrieren." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" -msgstr "Ihr Passwort:" - -#. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 #, fuzzy -msgid "Remember Password" +msgid "&Password:" msgstr "Passwort" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 -msgid "Display picture:" -msgstr "Mein Bild:" +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 +#, fuzzy +msgid "&Remember Password" +msgstr "Passwort" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 +msgid "Display Picture" +msgstr "Mein Bild" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 msgid "C&hange..." msgstr "&Ƅndern..." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -msgid "Don't show a displa&y picture" -msgstr "Zeige kein Displa&y Bild" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -301,36 +507,39 @@ msgstr "" "KMess als Gast oder auf einem ƶffentlichen Systen (z.B. Internetcafe)." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +#, fuzzy +msgid "Re&member the settings of this account" msgstr "Accounteinstellungen merken" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "" "Wenn aktiviert wird KMess sich automatisch mit diesem Account beim starten " "einloggen." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 -msgid "Login &with this account automatically at start-up" +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 +#, fuzzy +msgid "Login &with this account automatically" msgstr "Mit diesem Account beim Starten automatisch &Anmelden." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "Status beim Anmelden:" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "&Alle Chats speichern" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -341,8 +550,8 @@ msgstr "" "com registrieren oder einen Hotmail Account verwenden." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." @@ -351,26 +560,26 @@ msgstr "" "verifiziert ist." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "Fordere Verifizierungsmail an" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 msgid "https://accountservices.passport.net/" msgstr "https://accountservices.passport.net/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "Gehe zu accountservices.passport.net" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." @@ -379,38 +588,103 @@ msgstr "" "Adresse als Passport Account." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "Einen neuen Account registrieren" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "Gehe zu register.passport.com" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 -msgid "Popup notifications" +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 +#, fuzzy +msgid "Saved accounts:" +msgstr "Konten" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +msgid "Click" +msgstr "Klick" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "" +"Klicken Sie hier um ein neues persƶnliches Emoticon hinzuzufügen, dass Sie " +"an Ihre Kontakte senden kƶnnen." + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "Konto" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "WƤhlen Sie ein Emoticon aus und klicken sie hier um es zu lƶschen." + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "Gelƶscht" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "Popupbenachrichtigungen" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "Kontakte" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 msgid "Show notifications when your contacts:" msgstr "Benachrichtigungen anzeigen, wenn ein Kontakt:" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." @@ -419,15 +693,15 @@ msgstr "" "sich mit MSN verbindet." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 #, fuzzy msgid "&Go online" msgstr "O&ffline geht" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." @@ -436,14 +710,14 @@ msgstr "" "eine Unterhaltung mit Ihnen beginnt." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "Einen &Chat mit Ihnen startet" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." @@ -452,14 +726,14 @@ msgstr "" "Ihnen eine Nachricht sendet." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 msgid "S&end you a message" msgstr "Ihnen eine &Nachricht sendet" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." @@ -468,16 +742,16 @@ msgstr "" "seinen Status Ƥndert." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "Seinen S&tatus Ƥndert" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." @@ -486,38 +760,91 @@ msgstr "" "offline geht." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 msgid "Go o&ffline" msgstr "O&ffline geht" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 -msgid "Show notifications when you recei&ve an email" -msgstr "Eine Benachrichtigung anzeigen, wenn Sie eine Email em&pfangen" +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 +#, fuzzy +msgid "Email Events" +msgstr "Emailadresse" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" +msgstr "" +"Eine Benachrichtigung anzeigen, wenn eine EMail\n" +"in einem \"anderen Ordner\" angekommen ist" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" +"Wenn aktiviert einen Popup Nachricht wird auch dann angezeigt, wenn neue " +"Emails in anderen Ordnern empfangen werden. Diese Option ist nur für Hotmail " +"Accounts." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +msgid "In other folders" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "Kontrolliert die Sekunden bis ein Popup wieder ausgeblendet wird." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "Popubs ausblenden nach" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "Sekunden" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "Alarme" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "Kontakte die &Offline sind anzeigen" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -535,15 +862,33 @@ msgstr "" "Fenster nur beim ersten.

" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "" "Das Chat&fenster wackeln wenn ein Rrrrring gesendet oder empfangen wird" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" +"Wenn aktiviert wird ein Popup angezeigt sobald eine Email in dem Posteingang " +"empfangen wird. Die Anzahl der ungelesen Nachrichten wird über der " +"Kontaktliste angezeigt. Diese Option ist nur für Hotmail Accounts." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." @@ -552,30 +897,37 @@ msgstr "" "Information wird von dem aktuell aktiven Audioplayer empfangen." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 -msgid "Inform contacts w&hich song I am listening to." +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 +#, fuzzy +msgid "Inform contacts w&hich song I am listening to" msgstr "Kontakte darüber informieren &welchen Musiktitel ich gerade hƶre." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 +#, fuzzy msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" "Wenn aktiviert, wird Ihr Status automatisch auf \"Abwesend-Idle\" gesetzte, " "wenn Sie Ihren Computer für einige Minuten nicht benutzen." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "Status auf \"Abwesen&d-Idle\" setzen wenn inaktiv" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." @@ -584,46 +936,47 @@ msgstr "" "Ƥndert." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 msgid "Become idle after" msgstr "Als Abwesend anzeigen nach" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "Minuten" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "" "Wenn aktiviert alle Chats werden in einem bestimmten Verzeichnis gespeichert." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 msgid "Log &all chats" msgstr "&Alle Chats speichern" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 msgid "" "Choose the directory on your system where you'd like to save the chat logs." msgstr "WƤhlen Sie das Verzeichnis in dem die Chats gespeichert werden sollen." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" msgstr "Chats in diesem Verzeichnis speichern: " #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." @@ -632,123 +985,101 @@ msgstr "" "Monat oder Tag organisieren." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "Sortiere Chatordner nach:" +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "Jahr" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 msgid "Month" msgstr "Monat" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "Tag" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" msgstr "Chats in diesem Verzeichnis speichern: " #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." -msgstr "Diese Schriftart und Farbe wird in Ihren Chatnachrichten verwendet." - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "Ihre Schriftart" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" -"Erlaubt die Schriftart und Farbe der Nachrichten Ihrer Kontakte mit der " -"unten gewƤhlten Schriftart und Farbe zu übergehen ." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "" -"Nachrichten von anderen Kontakten zwingen diese Schriftart zu benutzen:" - +#. i18n: file ./settings/chatstylepage.ui line 45 #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "" "Erlaubt Ihnen das Theme zu wechseln, mit dem KMess alle Chatnachrichten " "anzeigt." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +#, fuzzy +msgid "&Chat style:" msgstr "Chat Style:" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "Einstellungen" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "Aktiviert die Anzeige von Emoticons in Chats." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 -msgid "&Show graphics in chat messages" -msgstr "Graphiken in Chatnachrichten &anzeigen" +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 +#, fuzzy +msgid "&Show emoticons" +msgstr "&Emoticons anzeigen" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "Aktiviert die Anzeige von Zeitstempeln in jeder Chatnachricht." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 -msgid "S&how time in chat messages" +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 +#, fuzzy +msgid "S&how messages time" msgstr "Zeigt die &Zeit an in Chatsnachrichten" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" -"Aktiviert die Benutzung von Schrifteffekten. Wenn Sie *fett*, /kursiv/ und " -"_unterstrichen_ eingeben, erscheinen die Wƶrter entsprechend formatiert." - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "" -"Schrifteffekte in Nachrichten &benutzen, z.B. *fett*, /kursiv/ und " -"_unterstrichen_" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -761,157 +1092,306 @@ msgstr "" "Die genaue Darstellung hƤngt von dem verwendeten Chat-Style ab." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "Gruppiere anschließende Nachrichten von dem selben Kontakt." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 +#, fuzzy +msgid "Always" +msgstr "Abwesend" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "Ihre Kontaktliste hat zu viele Gruppen." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "Freak" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." +msgstr "Diese Schriftart und Farbe wird in Ihren Chatnachrichten verwendet." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "Ihre Schriftart" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." msgstr "" -"Erlaubt Ihnen das Mailprogramm auszuwƤhlen, welches KMess ƶffnet um Ihre " -"Emails zu lesen." +"Erlaubt die Schriftart und Farbe der Nachrichten Ihrer Kontakte mit der " +"unten gewƤhlten Schriftart und Farbe zu übergehen ." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "EMail Programm" +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "" +"Nachrichten von anderen Kontakten zwingen diese Schriftart zu benutzen:" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "Hotmail benutzen" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "Speziellen Befehl ausführen:" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "Emailbenachrichtigung" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." msgstr "" -"Wenn aktiviert wird ein Popup angezeigt sobald eine Email in dem Posteingang " -"empfangen wird. Die Anzahl der ungelesen Nachrichten wird über der " -"Kontaktliste angezeigt. Diese Option ist nur für Hotmail Accounts." +"Aktiviert die Benutzung von Schrifteffekten. Wenn Sie *fett*, /kursiv/ und " +"_unterstrichen_ eingeben, erscheinen die Wƶrter entsprechend formatiert." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 -msgid "Show email information" -msgstr "Emailinformationen in der Kontaktliste anzeigen" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 -msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +#, fuzzy +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" msgstr "" -"Wenn aktiviert einen Popup Nachricht wird auch dann angezeigt, wenn neue " -"Emails in anderen Ordnern empfangen werden. Diese Option ist nur für Hotmail " -"Accounts." +"Schrifteffekte in Nachrichten &benutzen, z.B. *fett*, /kursiv/ und " +"_unterstrichen_" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" msgstr "" -"Eine Benachrichtigung anzeigen, wenn eine EMail\n" -"in einem \"anderen Ordner\" angekommen ist" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "Warte auf die Kontaktliste..." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 msgid "&Emoticon Themes" msgstr "&Emoticons Themes" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 msgid "Available emoticon styles:" msgstr "Verfügbare Emoticon Styles:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 msgid "&Custom Emoticons" msgstr "E&igene Emoticons" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 msgid "Custom emoticons for this account:" msgstr "Eigene Emoticons für diesen Account:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -msgid "Click" -msgstr "Klick" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "" -"Klicken Sie hier um ein neues persƶnliches Emoticon hinzuzufügen, dass Sie " -"an Ihre Kontakte senden kƶnnen." - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "N&eues hinzufügen..." #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "Klicken Sie hier um das gewƤhlte Emoticon umzubenennen" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 msgid "Re&name" msgstr "Umbe&nennen" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "WƤhlen Sie ein Emoticon aus und klicken sie hier um es zu lƶschen." - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 msgid "Remo&ve" msgstr "Ent&fernen" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +#, fuzzy +msgid "Web Browser" +msgstr "Welkende Rose" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +msgid "&Use the KDE default browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "sagt:" +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "EMail Programm" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +msgid "&Use the KDE default email client" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +msgid "File Transfers" +msgstr "Dateiübertragung" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "Chats in diesem Verzeichnis speichern: " + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +#, fuzzy +msgid "and" +msgstr "Traurig" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "Dateiübertragung" #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -921,131 +1401,12 @@ msgstr "Ich bin nicht an meinem Computer" msgid "Your name" msgstr "Ihr Name" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "sie@hotmail.de" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "Online" - -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "Abwesend" - -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "Bin gleich zurück" - -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "BeschƤftigt" - -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "Unsichtbar" - -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "Idle" - -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "Offline" - -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "Am Telefon" - -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "Mittagessen" - -#: chat/chatmaster.cpp:1061 -msgid "%1 is sending a wink: %2" -msgstr "%1 sendet eine Animoticon: %2" - -#: chat/chatmessagestyle.cpp:302 -msgid "%1 says:" -msgstr "%1 sagt:" - -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 -msgid "Add this emoticon: %1" -msgstr "Dieses Emoticon hinzufügen: %1" - -#: chat/chatview.cpp:529 -msgid "" -"Could not save chat log. Make sure you have permission to write in the " -"folder where logs are being saved." -msgstr "" -"Konnte Chatlog nicht speichern. Bitte stellen Sie sicher, dass sie " -"Schreibrechte für den Ordner haben in dem die Chats gespeichert werden." - -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 -msgid "" -"The file '%1' already exists.\n" -"do you want to overwrite it?" -msgstr "" -"Die Datei '%1' existiert bereits.\n" -" Mƶchten Sie die Datei überschreiben?" - -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Overwrite File" -msgstr "Überschreibe Datei" - -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Over&write" -msgstr "Über&schreiben" - -#: chat/chatview.cpp:977 -msgid "Add this &Emoticon..." -msgstr "&Emoticon hinzufügen..." - -#: chat/chatview.cpp:984 -msgid "Send &Email" -msgstr "Email &senden" - -#: chat/chatview.cpp:988 -msgid "Copy E&mail" -msgstr "E&mail kopieren" - -#: chat/chatview.cpp:995 -msgid "Visit &Link" -msgstr "Link &Ɩffnen" - -#: chat/chatview.cpp:999 -msgid "Copy &Address" -msgstr "&Adresse kopieren" - -#: chat/chatview.cpp:1013 -msgid "&Copy text" -msgstr "Text &kopieren" - -#: chat/chatview.cpp:1014 -msgid "Select &All" -msgstr "&Alles markieren" - -#: chat/chatview.cpp:1015 -msgid "Save chat to &File" -msgstr "Chat in &Datei speichern" - -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "Chat" - -#: chat/chatwindow.cpp:239 +#: chat/chat.cpp:124 msgid "" "You can't start this invitation because there are multiple contacts in this " "chat." @@ -1053,308 +1414,518 @@ msgstr "" "Sie kƶnnen diese Einladung nicht starten, da mehrere Kontakte in diesem Chat " "sind." -#: chat/chatwindow.cpp:276 -msgid "%1 has joined the chat." +#: chat/chat.cpp:158 +#, fuzzy +msgid "%1 has joined the chat." msgstr "%1 ist dem Chat beigetreten." -#: chat/chatwindow.cpp:327 -msgid "The conversation went idle, %1 has left the chat." +#: chat/chat.cpp:211 +#, fuzzy +msgid "The conversation went idle, %1 has left the chat." msgstr "Die Unterhaltung wurde Idle, %1 hat den Chat verlassen" -#: chat/chatwindow.cpp:331 -msgid "%1 has left the chat." +#: chat/chat.cpp:215 +#, fuzzy +msgid "%1 has left the chat." msgstr "%1 hat den Chat verlassen." -#: chat/chatwindow.cpp:593 -msgid "%1 - Chat" -msgstr "%1 - Chat" - -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" +#: chat/chat.cpp:364 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 and %2" msgstr "%1 und %2 - Chat" -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" +#: chat/chat.cpp:371 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 et al." msgstr "%1 und andere - Chat" -#: chat/chatwindow.cpp:757 -msgid "Contacts" -msgstr "Kontakte" - -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 -msgid "Emoticons" -msgstr "Emoticons" - -#: chat/chatwindow.cpp:819 -msgid "My emoticons" -msgstr "Meine Emoticons" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" +#: chat/chat.cpp:630 +#, fuzzy +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" msgstr " (Diese Nachricht wurde automatisch verschickt)" -#: chat/chatwindow.cpp:1502 +#: chat/chat.cpp:934 +#, fuzzy +msgid "You received a wink from %1." +msgstr "Sie haben ein Animoticon von %1 empfangen" + +#: chat/chat.cpp:971 msgid "" "The wink could not be displayed. Make sure you have 'cabextract' installed." msgstr "" "Das Animoticon konnte nicht angezeigt werden. Bitte stellen Sie sicher das " "'cabextract' installiert ist." -#: chat/chatwindow.cpp:1511 +#: chat/chat.cpp:980 msgid "The wink could not be displayed. The data could not be read." msgstr "" "Das Animoticon konnte nicht angezeigt werden. Fehler beim Lesen der Daten." -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" +#: chat/chat.cpp:1080 +#, fuzzy +msgid "You have received a wink from %1" msgstr "Sie haben ein Animoticon von %1 empfangen" -#: chat/chatwindow.cpp:1755 +#: chat/chat.cpp:1100 #, fuzzy -msgid "Show Side&bar" -msgstr "Sidebar" - -#: chat/chatwindow.cpp:1756 -#, fuzzy -msgid "Show the contact sidebar" -msgstr "Zeige oder Verstecke die Kontakt Sidebar" - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -#, fuzzy -msgid "Hide Side&bar" -msgstr "Sidebar" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -#, fuzzy -msgid "Hide the contact sidebar" -msgstr "Zeige oder Verstecke die Kontakt Sidebar" - -#: chat/chatwindow.cpp:1787 -msgid "The message '%1' could not be sent." -msgstr "Die Nachricht '%1' konnte nicht gesendet werden." - -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" +msgid "You received a nudge from %1!" msgstr "Sie haben einen Rrrring von %1 empfangen." -#: chat/chatwindow.cpp:1876 +#: chat/chat.cpp:1119 +#, fuzzy +msgid "The message '%1' could not be sent." +msgstr "Die Nachricht '%1' konnte nicht gesendet werden." + +#: chat/chat.cpp:1183 msgid "You've sent a nudge to %1!" msgstr "Sie haben ein Rrrring zu %1 gesendet." -#: chat/chatwindow.cpp:1883 +#: chat/chat.cpp:1190 msgid "You've sent a nudge!" msgstr "Sie haben einen Rrrring gesendet!" -#: chat/chatwindow.cpp:1972 -msgid "%1 is typing." -msgstr "%1 gibt eine Nachricht ein." +#: chat/chatmaster.cpp:1219 +msgid "%1 is sending a wink: %2" +msgstr "%1 sendet eine Animoticon: %2" -#: chat/chatwindow.cpp:1981 -msgid "%1 and %2 are typing." -msgstr "%1 und %2 schreiben" +#: chat/chatmessagestyle.cpp:298 +msgid "%1 says:" +msgstr "%1 sagt:" -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." -msgstr "%1, %2 und %3 andere schreiben." +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 +msgid "Add this emoticon: %1" +msgstr "Dieses Emoticon hinzufügen: %1" -#: chat/chatwindowinterface.cpp:175 -msgid "&Chat" -msgstr "&Chat" - -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 msgid "&Invite" msgstr "&Einladen" -#: chat/chatwindowinterface.cpp:179 +#: chat/chatview.cpp:695 +msgid "" +"Could not save chat log. Make sure you have permission to write in the " +"folder where logs are being saved." +msgstr "" +"Konnte Chatlog nicht speichern. Bitte stellen Sie sicher, dass sie " +"Schreibrechte für den Ordner haben in dem die Chats gespeichert werden." + +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 +msgid "" +"The file '%1' already exists.\n" +"do you want to overwrite it?" +msgstr "" +"Die Datei '%1' existiert bereits.\n" +" Mƶchten Sie die Datei überschreiben?" + +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Overwrite File" +msgstr "Überschreibe Datei" + +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Over&write" +msgstr "Über&schreiben" + +#: chat/chatview.cpp:1275 +msgid "Add this &Emoticon..." +msgstr "&Emoticon hinzufügen..." + +#: chat/chatview.cpp:1282 +msgid "Send &Email" +msgstr "Email &senden" + +#: chat/chatview.cpp:1286 +msgid "Copy E&mail" +msgstr "E&mail kopieren" + +#: chat/chatview.cpp:1293 +msgid "Visit &Link" +msgstr "Link &Ɩffnen" + +#: chat/chatview.cpp:1297 +msgid "Copy &Address" +msgstr "&Adresse kopieren" + +#: chat/chatview.cpp:1312 +msgid "&Copy text" +msgstr "Text &kopieren" + +#: chat/chatview.cpp:1313 +msgid "Select &All" +msgstr "&Alles markieren" + +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 +msgid "Save chat to &File" +msgstr "Chat in &Datei speichern" + +#: chat/chatwindow.cpp:489 +msgid "&Chat" +msgstr "&Chat" + +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "Datei &Senden" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "&Meeting starten" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 msgid "Send a &Nudge!" msgstr "&Rrrring senden!" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "Chat speichern" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 #, fuzzy msgid "&Emoticons" msgstr "Emoticons" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +#, fuzzy +msgid "Close &All Tabs" +msgstr "Tab schließen" + +#: chat/chatwindow.cpp:504 #, fuzzy msgid "Meeting" msgstr "Einstellungen" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "Starten oder Stoppen einer &Unterhaltung" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "Schrift&art Ƥndern" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "Schrift&farbe Ƥndern" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 #, fuzzy msgid "&Font" msgstr "&Verbinden" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 #, fuzzy msgid "Font &Color" msgstr "Schrift&farbe Ƥndern" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +msgid "Emoticons" +msgstr "Emoticons" + +#: chat/chatwindow.cpp:658 +msgid "My emoticons" +msgstr "Meine Emoticons" + +#: chat/chatwindow.cpp:738 #, fuzzy msgid "&Settings" msgstr "Einstellungen" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "&Emoticons anzeigen" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +#, fuzzy +msgid "Hide Side&bar" +msgstr "Sidebar" + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "Sidebar" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +#, fuzzy +msgid "Hide the contact sidebar" +msgstr "Zeige oder Verstecke die Kontakt Sidebar" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +#, fuzzy +msgid "Close all tabs" +msgstr "Tab schließen" + +#: chat/chatwindow.cpp:856 +#, fuzzy +msgid "Close current tab" +msgstr "Tab schließen" + +#: chat/chatwindow.cpp:1467 +#, fuzzy +msgid "Show Side&bar" +msgstr "Sidebar" + +#: chat/chatwindow.cpp:1468 +#, fuzzy +msgid "Show the contact sidebar" +msgstr "Zeige oder Verstecke die Kontakt Sidebar" + +#: chat/chatwindow.cpp:1565 +msgid "%1 is typing." +msgstr "%1 gibt eine Nachricht ein." + +#: chat/chatwindow.cpp:1575 +msgid "%1 and %2 are typing." +msgstr "%1 und %2 schreiben" + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "%1, %2 und %3 andere schreiben." + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "Chat" + +#: chat/chatwindow.cpp:1615 +#, fuzzy +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "%1 - Chat" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "Email &senden" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 msgid "&View Profile" msgstr "&Profil anzeigen" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "&Kontakt hinzufügen" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 msgid "A&llow Contact" msgstr "Kontakt &erlauben" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 msgid "&Delete Contact" msgstr "Kontakt &löschen" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "Kontakt &blockieren" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "Blockierung &wieder aufheben" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 msgid "&Friendly Name" msgstr "&Nickname" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "&Eigene Nachricht" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 msgid "&Email Address" msgstr "&Emailadresse" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "&Kopieren..." -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 msgid "Blocked" msgstr "Geblockt" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 #, fuzzy msgid "The contact is %1" msgstr "Dieser Kontakt ist nicht Online" -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +#, fuzzy +msgid "Add to Chat" +msgstr "Kontakt hinzufügen" + +#: chat/emoticonsidebar.cpp:213 +#, fuzzy +msgid "Insert new" +msgstr "Ein Emoticon einfügen" + +#: chat/emoticonsidebar.cpp:214 +msgid "Edit" +msgstr "" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +#, fuzzy +msgid "Remove" +msgstr "Gelöscht" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 #, fuzzy msgid "Web Messenger" msgstr "Webdesign" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +#, fuzzy +msgid "Windows Live Messenger %1" +msgstr "Webdesign" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "Online" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "Offline" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "Erlaubt" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "Gelöscht" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 +#, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr "%1 %2" + +#: contactlistviewdelegate.cpp:150 #, fuzzy msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "%1 %2" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" -msgstr "Dieser Account hat keinen Hotmail Posteingang." +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "Abwesend" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "Bin gleich zurück" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "Beschäftigt" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "Unsichtbar" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" +msgstr "Idle" + +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "Am Telefon" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "Mittagessen" + +#: dialogs/addcontactdialog.cpp:48 #, fuzzy msgid "Add a Contact" msgstr "Kontakt hinzufügen" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 #, fuzzy msgid "No group" msgstr "Gruppe löschen" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 msgid "Add New Emoticon" msgstr "Neues Emoticon hinzufügen" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "Emoticons" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "Das Emoticon \"%1\" existiert bereits, möchten Sie es ersetzen?" @@ -1362,66 +1933,69 @@ msgstr "Das Emoticon \"%1\" existiert bereits, möchten Sie es ersetzen?" msgid "Specify an Away message" msgstr "Geben Sie eine Abwesenheitsnachricht ein" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "Einen alternativen zu dem vom Kontakt gegebenen Nickname benutzen" - -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" +#: dialogs/contactaddeduserdialog.cpp:85 +#, fuzzy +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " msgstr "" -"Eine Benachrichtigung anzeigen wenn der Kontakt Online und Offline geht. " +"%1\n" +"hat Sie zu seiner Kontaktliste hinzugefügt. Möchten Sie:" -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "Bild:" +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "Verbunden" -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "Sound:" +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +msgid "Not seen yet" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:234 -msgid "Contact Properties for %1" -msgstr "Kontakteigenschaften für %1" +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +#, fuzzy +msgid "No messages yet" +msgstr "Zeigt die &Zeit an in Chatsnachrichten" -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " -msgstr "Emailadresse: " +#: dialogs/contactpropertiesdialog.cpp:381 +msgid "Last seen: %1" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "Eigener Name: " +#: dialogs/contactpropertiesdialog.cpp:382 +msgid "Last message: %1" +msgstr "" -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" -msgstr "Netzwerkfenster" +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "Email" -#: dialogs/networkwindow.cpp:57 +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "EMail Programm" + +#: dialogs/networkwindow.cpp:79 #, fuzzy msgid "S&ave tab" msgstr "Tab speichern" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 #, fuzzy msgid "C&lear tab" msgstr "Tab löschen" -#: dialogs/networkwindow.cpp:59 -#, fuzzy -msgid "Cl&ose tab" -msgstr "Tab schließen" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 #, fuzzy msgid "" "No connections are present.\n" "Cannot open the Network Window." msgstr "Es bestehen keine Verbindungen. Kann das Netzwerkfenster nicht öffnen." -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 #, fuzzy msgid "" "Could not save the Network Window log. Make sure you have permission to " @@ -1431,58 +2005,87 @@ msgstr "" "sie Schreibrechte für den Ordner besitzen in dem der Mitschnitt gespeichert " "werden soll." -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "Kann den Hauptverbindungstab nicht schließen." -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +#, fuzzy +msgid "Cannot send commands to this kind of connection!" +msgstr "Kann den Hauptverbindungstab nicht schließen." + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "Abgebrochen" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "Fehlgeschlagen!" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 msgid "Completed" msgstr "Fertig" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "%1 MB" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "%1 kb" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "%1 bytes" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +#, fuzzy +msgid "%1 of %2 received." msgstr "%1 von %2 empfangen" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +#, fuzzy +msgid "%1 of %2 sent." msgstr "%1 von %2 gesendet" -#: dialogs/transferwindow.cpp:55 -msgid "File Transfers" -msgstr "Dateiübertragung" +#: dialogs/transferentry.cpp:373 +msgid "infinite" +msgstr "" -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 #, fuzzy msgid "Cl&ean Up" msgstr "&AufrƤumen" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " "the theme folder '%1'." @@ -1490,345 +2093,360 @@ msgstr "" "Konnte das Emoticontheme nicht abspeichern. Bitte stellen Sie sicher, dass " "sie Schreibrechte für den Theme-Ordner besitzen '%1'." -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 msgid "Smile" msgstr "LƤcheln" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "Zwinkern" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "Zunge raus" -#: emoticontheme.cpp:797 +#: emoticontheme.cpp:812 msgid "Big smile" msgstr "Großes Lachen" -#: emoticontheme.cpp:798 +#: emoticontheme.cpp:813 msgid "Sad" msgstr "Traurig" -#: emoticontheme.cpp:799 +#: emoticontheme.cpp:814 msgid "Crying" msgstr "Weinen" -#: emoticontheme.cpp:800 +#: emoticontheme.cpp:815 msgid "Angry" msgstr "Ƅrgerlich" -#: emoticontheme.cpp:801 +#: emoticontheme.cpp:816 msgid "Confused" msgstr "Verwirrt" -#: emoticontheme.cpp:802 +#: emoticontheme.cpp:817 msgid "Embarrassed" msgstr "Peinlich" -#: emoticontheme.cpp:803 +#: emoticontheme.cpp:818 msgid "Disappointed" msgstr "EnttƤuscht" -#: emoticontheme.cpp:804 +#: emoticontheme.cpp:819 msgid "Hot" msgstr "Heiß" -#: emoticontheme.cpp:805 +#: emoticontheme.cpp:820 msgid "Baring teeth" msgstr "ZƤhne zeigend" -#: emoticontheme.cpp:806 +#: emoticontheme.cpp:821 msgid "Nerd" msgstr "Freak" -#: emoticontheme.cpp:807 +#: emoticontheme.cpp:822 msgid "Sick" msgstr "Krank" -#: emoticontheme.cpp:808 +#: emoticontheme.cpp:823 msgid "Surprised" msgstr "Überrascht" -#: emoticontheme.cpp:809 +#: emoticontheme.cpp:824 msgid "Party" msgstr "Party" -#: emoticontheme.cpp:810 +#: emoticontheme.cpp:825 msgid "Sleepy" msgstr "Müde" -#: emoticontheme.cpp:811 +#: emoticontheme.cpp:826 msgid "Thinking" msgstr "Nachdenkend" -#: emoticontheme.cpp:812 +#: emoticontheme.cpp:827 msgid "Don't tell anyone" msgstr "Sag es niemandem" -#: emoticontheme.cpp:813 +#: emoticontheme.cpp:828 msgid "Secret telling" msgstr "Geheimnis flüsternd" -#: emoticontheme.cpp:814 +#: emoticontheme.cpp:829 msgid "Eye-rolling" msgstr "Augen rollend" -#: emoticontheme.cpp:815 +#: emoticontheme.cpp:830 msgid "Sarcastic" msgstr "Sarkastisch" -#: emoticontheme.cpp:816 +#: emoticontheme.cpp:831 msgid "I don't know" msgstr "Keine Ahnung" -#: emoticontheme.cpp:817 +#: emoticontheme.cpp:832 msgid "Be right back" msgstr "Bin gleich zurück" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "Engel" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "Umarmung von links" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "Junge" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "Rotes Herz" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "Rote Rose" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "Daumen hoch" -#: emoticontheme.cpp:824 +#: emoticontheme.cpp:839 msgid "Dog face" msgstr "Hundegesicht" -#: emoticontheme.cpp:825 +#: emoticontheme.cpp:840 msgid "Sun" msgstr "Sonne" -#: emoticontheme.cpp:826 +#: emoticontheme.cpp:841 msgid "Devil" msgstr "Teufel" -#: emoticontheme.cpp:827 +#: emoticontheme.cpp:842 msgid "Right hug" msgstr "Umarmung von rechts" -#: emoticontheme.cpp:828 +#: emoticontheme.cpp:843 msgid "Girl" msgstr "MƤdchen" -#: emoticontheme.cpp:829 +#: emoticontheme.cpp:844 msgid "Broken heart" msgstr "gebrochenes Herz" -#: emoticontheme.cpp:830 +#: emoticontheme.cpp:845 msgid "Wilted rose" msgstr "Welkende Rose" -#: emoticontheme.cpp:831 +#: emoticontheme.cpp:846 msgid "Thumbs down" msgstr "Daumen runter" -#: emoticontheme.cpp:832 +#: emoticontheme.cpp:847 msgid "Cat face" msgstr "Katzengesicht" -#: emoticontheme.cpp:833 +#: emoticontheme.cpp:848 msgid "Sleeping half-moon" msgstr "schlafender Halbmond" -#: emoticontheme.cpp:834 +#: emoticontheme.cpp:849 msgid "Red lips" msgstr "Rote Lippen" -#: emoticontheme.cpp:835 +#: emoticontheme.cpp:850 msgid "Clapping" msgstr "Klatschen" -#: emoticontheme.cpp:836 +#: emoticontheme.cpp:851 msgid "Crossed fingers" msgstr "gekreuzte Finger" -#: emoticontheme.cpp:837 +#: emoticontheme.cpp:852 msgid "Auto" msgstr "Auto" -#: emoticontheme.cpp:838 +#: emoticontheme.cpp:853 msgid "Airplane" msgstr "Flugzeug" -#: emoticontheme.cpp:839 +#: emoticontheme.cpp:854 msgid "Turtle" msgstr "Schildkrƶte" -#: emoticontheme.cpp:840 +#: emoticontheme.cpp:855 msgid "Snail" msgstr "Schlange" -#: emoticontheme.cpp:841 +#: emoticontheme.cpp:856 msgid "Black sheep" msgstr "Schwarzes Schaf" -#: emoticontheme.cpp:842 +#: emoticontheme.cpp:857 msgid "Goat" msgstr "Ziege" -#: emoticontheme.cpp:843 +#: emoticontheme.cpp:858 msgid "Vampire bat" msgstr "Fledermaus" -#: emoticontheme.cpp:844 +#: emoticontheme.cpp:859 msgid "Pizza" msgstr "Pizza" -#: emoticontheme.cpp:845 +#: emoticontheme.cpp:860 msgid "Beer mug" msgstr "Bierkrug" -#: emoticontheme.cpp:846 +#: emoticontheme.cpp:861 msgid "Martini glass" msgstr "Martiniglas" -#: emoticontheme.cpp:847 +#: emoticontheme.cpp:862 msgid "Coffee cup" msgstr "Kaffeepott" -#: emoticontheme.cpp:848 +#: emoticontheme.cpp:863 msgid "Birthday cake" msgstr "Geburtstagskuchen" -#: emoticontheme.cpp:849 +#: emoticontheme.cpp:864 msgid "Plate" msgstr "Teller" -#: emoticontheme.cpp:850 +#: emoticontheme.cpp:865 msgid "Bowl" msgstr "Schüssel" -#: emoticontheme.cpp:851 +#: emoticontheme.cpp:866 msgid "Star" msgstr "Stern" -#: emoticontheme.cpp:852 +#: emoticontheme.cpp:867 msgid "Rainbow" msgstr "Regenbogen" -#: emoticontheme.cpp:853 +#: emoticontheme.cpp:868 msgid "Stormy cloud" msgstr "Gewitterwolken" -#: emoticontheme.cpp:854 +#: emoticontheme.cpp:869 msgid "Lightning" msgstr "Blitz" -#: emoticontheme.cpp:855 +#: emoticontheme.cpp:870 msgid "Umbrella" msgstr "Regenschirm" -#: emoticontheme.cpp:856 +#: emoticontheme.cpp:871 msgid "Island with a palm tree" msgstr "Insel mit Palme" -#: emoticontheme.cpp:857 +#: emoticontheme.cpp:872 msgid "Telephone receiver" msgstr "Telephonhƶrer" -#: emoticontheme.cpp:858 +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "Handy" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "Email" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 msgid "Clock" msgstr "Uhr" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 msgid "Camera" msgstr "Kamera" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "Filmstreifen" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "Note" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "Handschellen" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 msgid "Money" msgstr "Geld" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "Glühbirne" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "Zigarrette" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "Fußball" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "Geschenk" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "X-Box" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "Computer" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 msgid "KMess Icon" msgstr "KMess Icon" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "Der Server ist nicht erreichbar" + +#: initialview.cpp:377 +msgid "Connect" +msgstr "Verbinden" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "Verbindung &trennen" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "" -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "" -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "Neue &Gruppe" + +#: kmess.cpp:226 msgid "Add a group" msgstr "Gruppe hinzufügen" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "Geben Sie den neuen Namen für diese Gruppe ein:" -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "Die eingegebene Kontaktadresse ist nicht gültig: '%1'" - -#: kmess.cpp:638 +#: kmess.cpp:569 msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" @@ -1836,63 +2454,90 @@ msgstr "" " Sind Sie sicher, dass Sie den Kontakt %1> von Ihrer Kontaktliste " "lƶschen wollen?" -#: kmess.cpp:640 +#: kmess.cpp:571 msgid "Remove contact" msgstr "Kontakt lƶschen" -#: kmess.cpp:641 kmess.cpp:684 -#, fuzzy -msgid "Remove" -msgstr "Gelƶscht" - -#: kmess.cpp:642 +#: kmess.cpp:573 msgid "Remove and block" msgstr "Lƶschen und Blocken" -#: kmess.cpp:681 +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "" " Sind Sie sicher, dass Sie die Gruppe %1> von Ihrer Kontaktliste " "lƶschen wollen?" -#: kmess.cpp:683 -msgid "Remove group" -msgstr "Gruppe lƶschen" +#: kmess.cpp:631 +#, fuzzy +msgctxt "dialog button" +msgid "Remove" +msgstr "Gelƶscht" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "Dieses ist eine spezielle Gruppe und kann nicht verƤndert werden." -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 msgid "Rename group" msgstr "Gruppe umbenennen" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "Verbunden" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "Anmeldung fehlgeschlagen" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "Nicht Verbunden" -#: kmess.cpp:1441 +#: kmess.cpp:1408 +#, fuzzy msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" "

KMess wird keine Sounds und Benachrichtigungen abspielen kƶnnen.

Die Kmess Datei 'eventsrc' konnte nicht in einem der folgenden Ordner " "gefunden werden: %1

Bitte überprüfen Sie Ihre Installation, und " "kopieren sie Die fehlende Datei in einen der aufgelisteten Ordner.

" -#: kmess.cpp:1445 +#: kmess.cpp:1412 msgid "Error with notifications" msgstr "Fehler mit Benachrichtigung" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "KMess" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "&Aktionen" @@ -1914,214 +2559,245 @@ msgstr "Kontakt s&uchen" msgid "Search by &Interest" msgstr "Kontakt nach &Interesse suchen" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "Kontakt s&uchen" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "Neues &Konto" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "Konto&einstellungen" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "&Verbinden" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "Verbindung &trennen" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "Mein &Profil anzeigen" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "&Mein Status" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "Abwesend (Auto-Reply)" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "&Autorisierte Kontakte anzeigen" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 msgid "Show &Offline Contacts" msgstr "Kontakte die &Offline sind anzeigen" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "G&elöschte Kontakte anzeigen" -#: kmessinterface.cpp:303 +#: kmessinterface.cpp:318 #, fuzzy -msgid "Show &Display Pictures" +msgid "Show &Empty Groups" +msgstr "&Emoticons anzeigen" + +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" msgstr "Mein Bild" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "Lächeln" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "&Sortiere Kontakt nach" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "Gruppe" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "Online/Offline" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "&Übertragungsfenster anzeigen" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "&Netzwerkfenster anzeigen" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "Höre gerade %1" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +msgid "[%1] %2 goes online" +msgstr "" + +#: kmessview.cpp:363 +msgid "[%1] %2 goes offline" +msgstr "" + +#: kmessview.cpp:559 msgid "Cha&t" msgstr "Cha&t" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "&Eigenschaften" -#: kmessview.cpp:492 +#: kmessview.cpp:569 msgid "&Remove from group" msgstr "Von Gruppe &entfernen" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +#, fuzzy +msgid "&Listening Music" +msgstr "Höre %1" + +#: kmessview.cpp:601 msgid "&Copy to Group" msgstr "In Gruppe &kopieren" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "In Gruppe &verschieben" -#: kmessview.cpp:549 +#: kmessview.cpp:646 msgid "Move Group &Down" msgstr "Gruppe nach &unten verschieben" -#: kmessview.cpp:550 +#: kmessview.cpp:647 msgid "Move Group &Up" msgstr "Gruppe nach &oben verschieben" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "Gruppe &löschen" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "Gruppe &umbenennen" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 #, fuzzy msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "Email" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "" -#: kmessview.cpp:918 +#: kmessview.cpp:1075 +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "" + +#: kmessview.cpp:1076 +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "" + +#: kmessview.cpp:1085 #, fuzzy msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "
%1 (%2)" -#: kmessview.cpp:921 +#: kmessview.cpp:1090 #, fuzzy -msgctxt "Contacts count in group tooltip" +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "Kontakte" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +#, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "Dieser Kontakt ist nicht Online" + +#: kmessview.cpp:1504 #, fuzzy msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "Geben Sie hier Ihre persƶnliche Nachricht ein " -#: kmessview.cpp:1543 -msgid "You have 1 new e-mail in your inbox." -msgstr "1 neue Email in Ihrem Posteingang" +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" -#: kmessview.cpp:1547 -msgid "You have %1 new emails in your inbox." -msgstr "%1 neue Emails in Ihrem Posteingang" - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "KMess" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 #, fuzzy msgid "Project support" msgstr "P4-Kontextfeld Support" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 #, fuzzy msgid "Current developer" msgstr "GnomeMeeting Entwickler" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 msgid "" "German translation, testing, documentation, web master, project management, " "etc..." @@ -2129,380 +2805,229 @@ msgstr "" "Deutsche Übersetzung, Testen, Dokumentation und Homepage, Projektmanagement, " "etc..." -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "Webdesign" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "" "Die Haupt und die gelben/blauen/violetten Emoticons sowie die Italienische " "Übersetzung" -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "Cartoon Emoticons" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "Standart Sound Theme" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "" "Arabische Übersetzung und Internationalisierung von Dateispeichern - FIX" -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 msgid "More Arabic translation" msgstr "Weitere Arabische Übersetzung" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "Portugisische Übersetzung (Brasilien)" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 msgid "Catalan translation" msgstr "Katalanische Übersetzung" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "" "Vereinfachte Chinesische Übersetzung, Dateiübertragungsbugfix. " "Proxyverbindungscode" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 msgid "More Simplified Chinese translation" msgstr "Weitere vereinfachte Chinesische Übersetzung" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 msgid "Traditional Chinese translation" msgstr "Traditionelle Chinesische Übersetzung" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 msgid "Danish translation" msgstr "DƤnische Übersetzung" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 msgid "More Danish translation" msgstr "Weitere DƤnische Übersetzung" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "NiederlƤndische Übersetzung" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 msgid "More Dutch translation" msgstr "Weitere NiederlƤndische Übersetzung" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 msgid "Estonian translation" msgstr "EstlƤndische Übersetzung" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 msgid "Finnish translation" msgstr "Finnische Übersetzung" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 msgid "More Finnish translation" msgstr "Weitere Finnische Übersetzung" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "Franzƶsische Übersetzung" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 msgid "More French translation, MSN6 emoticon definitions" msgstr "Franzƶsische Übersetzung, MSN6 Emoticon definitionen" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 msgid "More French translation" msgstr "Weitere Franzƶsische Übersetzung" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 msgid "Hungarian translation" msgstr "Ungarische Übersetzung" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 msgid "More Italian translation" msgstr "Weitere Italienische Übersetzung" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "Koreanische Übersetzung" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 msgid "Norsk BokmĆ„l translation" msgstr "Norwegische Übersetzung" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 msgid "Slovenian translation" msgstr "Slowakische Übersetzung" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "Spanische Übersetzung" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 msgid "More Spanish translation" msgstr "Weitere Spanische Übersetzung" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 msgid "Swedish translation" msgstr "Schwedische Übersetzung" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 msgid "Thai translation" msgstr "ThailƤndische Übersetzung" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "Türkische Übersetzung" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "Weitere Türkische Übersetzung" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -#, fuzzy -msgid "Guido Solinas" -msgstr "&Online geht" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "Dateiübertragung" + +#: main.cpp:134 msgid "P4-Context field support" msgstr "P4-Kontextfeld Support" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "Xinerama fixes" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "Original Dateiübertragungscode" -#: main.cpp:120 -msgid "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" msgstr "" -#: main.cpp:120 +#: main.cpp:138 +#, fuzzy +msgid "KWallet support" +msgstr "P4-Kontextfeld Support" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "Mehrere Internationalisierungs Fixes" + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "Mehrere Internationalisierungs Fixes" -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "GnomeMeeting Entwickler" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "Typ mit der Tüte über dem Kopf" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "Inspiration und Code" -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 +#: main.cpp:150 msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "Alter Popup Balloon Code, erster P2P Code, MSN Challenge Handler" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "Idle timer Code" -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 +#: main.cpp:152 msgid "Close-to-tray icon screenshot code" msgstr "" -#: main.cpp:131 +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 msgid "Your name here?" msgstr "Ihr Name hier?" -#: main.cpp:131 +#: main.cpp:156 #, fuzzy msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" "Sie sind eingeladen Ihre Bugfixes und Patches im KMess Hilfe Forum zu " @@ -2510,206 +3035,254 @@ msgstr "" "Wenn Sie das Gefühl haben, dass Ihr Name hier fehlt kontaktieren Sie uns " "bitte! " -#: main.cpp:134 +#: main.cpp:159 #, fuzzy msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Ihr Name" -#: main.cpp:135 +#: main.cpp:160 #, fuzzy msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "Ihre Emailadresse:" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "Automatisch mit der gegebenen Emailadresse Anmelden" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 msgid "The contact cancelled the session." msgstr "Der Kontakt hat die Session abgebrochen." -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 msgid "The contact rejected the invitation." msgstr "Der Kontakt hat die Einladung abgelehnt." -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 msgid "You have cancelled the session." msgstr "Sie haben die Session abgebrochen." -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "Sie haben die Einladung abgelehnt." -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +#, fuzzy +msgid "Do you want to accept or cancel?" msgstr "Mƶchten Sie annehmen oder ablehnen ?" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +#, fuzzy +msgid "Click to cancel." msgstr "Hier klicken um abzubrechen." -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 msgid "Do you want to accept the file: %1 (%2)" msgstr "Mƶchten Sie die Datei annehmen: %1 (%2)" -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 msgid "The transfer of %1 failed. Couldn't open file." msgstr "Die Übertragung von %1 ist fehlgeschlagen. Konnte Datei nicht ƶffnen." -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "Dateiübertragung angenommen." + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 msgid "Connecting to %1, port %2" msgstr "Verbinde zu %1, Port %2" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 msgid "The transfer was cancelled" msgstr "Die Übertragung wurde abgebrochen" -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 msgid "Connection established" msgstr "Verbindung hergestellt" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 msgid "Successfully transferred file: %1" msgstr "Datei erfolgreich übertragen: %1" -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 msgid "The transfer of %1 failed. The file does not exist." msgstr "Die Übertragung von %1 ist fehlgeschlagen. Die Datei existiert nicht." -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 msgid "The transfer of %1 failed. The file could not be read." msgstr "" "Die Übertragung von %1 ist fehlgeschlagen. Datei konnte nicht gelesen " "werden." -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 msgid "Sending file %1" msgstr "Sende Datei %1" -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "Dateiübertragung angenommen." - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "Überprüfen der Verbindungsmƶglichkeiten" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "" "Die Dateiübertragungseinladung wurde abgebrochen. Fehlerhafte Daten wurden " "empfangen." -#: network/applications/filetransferp2p.cpp:345 -msgid "The transfer of %1 failed. Couldn't open file" -msgstr "Die Übertragung von %1 ist fehlgeschlagen. Konnte Datei nicht ƶffnen" +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." +msgstr "" -#: network/applications/filetransferp2p.cpp:524 -msgid "The contact cancelled the transfer." +#: network/applications/filetransferp2p.cpp:348 +#, fuzzy +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "" +"Die Datei '%1' existiert bereits.\n" +" Mƶchten Sie die Datei überschreiben?" + +#: network/applications/filetransferp2p.cpp:378 +#, fuzzy +msgid "The transfer of file "%1" failed. Couldn't save the file." +msgstr "Die Übertragung von %1 ist fehlgeschlagen. Konnte Datei nicht ƶffnen." + +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 +#, fuzzy +msgid "The contact has cancelled the transfer of file "%1"." msgstr "Der Kontakt hat den Transfer abgebrochen." -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "Sie haben die Session abgebrochen." + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "Datei konnte nicht geschrieben werden" -#: network/applications/filetransferp2p.cpp:768 -msgid "The transfer of %1 failed. The file does not exist." +#: network/applications/filetransferp2p.cpp:676 +#, fuzzy +msgid "Successfully sent file "%1"." +msgstr "Datei erfolgreich übertragen: %1" + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "Datei erfolgreich übertragen: %1" + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "Die Übertragung von %1 ist fehlgeschlagen. Die Datei existiert nicht." -#: network/applications/filetransferp2p.cpp:773 -msgid "The transfer of %1 failed. The file could not be read." +#: network/applications/filetransferp2p.cpp:818 +#, fuzzy +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "" "Die Übertragung von %1 ist fehlgeschlagen. Datei konnte nicht gelesen werden." -#: network/applications/filetransferp2p.cpp:809 -msgid "Sending file %1 (%2)" +#: network/applications/filetransferp2p.cpp:855 +#, fuzzy +msgid "Sending file "%1" (%2)." msgstr "Sende Datei %1 (%2)" -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "Der Kontakt hat den Transfer abgebrochen." + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "Sie sind eingeladen ein Meeting zu starten (mit GnomeMeeting)." -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 msgid "Starting GnomeMeeting. Connecting to %1." msgstr "Starte GnomeMeeting. Verbinde zu %1" -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "Lade den Kontakt zu einem Meeting ein." -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "" "Die Einladung wurde abgelehnt. Sie wird vom anderen Client nicht unterstützt." -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 msgid "The invitation was aborted. An internal error occured." msgstr "Die Einladung wurde abgebrochen. Ein interner Fehler ist aufgetreten." -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "" "Die Einladung wurde abgebrochen. Zeitüberschreitung beim Warten auf den " "anderen Kontakt zum Annehmen." -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "" "Die Einladung wurde abgebrochen. Zeitüberschreitung beim Warten auf die " "Daten der Datei." -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "" "Die Einladung wurde abgebrochen. Das Switchboard hat die Chatverbindung " "geschlossen." -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 msgid "The invitation was aborted." msgstr "Die Einladung wurde abgebrochen." -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "Sie wurden von dieser Person eingeladen sein Desktop zu sharen." -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 msgid "Starting KRDC. Connecting to %1." msgstr "Starte KRDC. Verbinde zu %1" -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +msgid "The contact rejected the invitation. An internal error occured." msgstr "" -"Der Kontakt hat ein MSN6 feature ausgeführt, welches KMess noch nicht " -"bearbeiten kann." +"Der Kontakt hat die Einladung abgelehnt. Ein interner Fehler ist aufgetreten." -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +msgid "The transfer failed." +msgstr "Die Übertragung ist fehlgeschlagen" + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." @@ -2717,74 +3290,67 @@ msgstr "" "Die Einladung wurde abgebrochen. Der Kontakt hat fehlerhafte Daten übersand, " "oder KMess unterstützt es nicht." -#: network/applications/p2papplication.cpp:1503 -msgid "The transfer failed. Data preparation failed." -msgstr "Die Übertragung ist fehlgeschlagen. Datenaufbereitungfehlgeschlagen." - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -msgid "The contact rejected the invitation. An internal error occured." -msgstr "" -"Der Kontakt hat die Einladung abgelehnt. Ein interner Fehler ist aufgetreten." - -#: network/applications/p2papplication.cpp:1626 -msgid "The transfer failed." -msgstr "Die Übertragung ist fehlgeschlagen" - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "Die Übertragung wurde abgebrochen. Der Kontakt hat fehlerhafte Daten " "übersand, oder KMess unterstützt es nicht." -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "" +"Die Übertragung ist fehlgeschlagen. Zeitüberschreitung beim Warten auf den " +"anderen Kontakt zum Annehmen." + +#: network/applications/p2papplicationbase.cpp:1015 +msgid "The transfer failed. An internal error occured." +msgstr "" +"Die Übertragung ist fehlgeschlagen. Ein interner Error ist aufgetreten." + +#: network/applications/p2papplicationbase.cpp:1176 +msgid "The transfer failed. Couldn't open data source." +msgstr "" +"Die Übertragung ist fehlgeschlagen. Konnte die Datenquelle nicht ƶffnen." + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "" +"Der Kontakt hat ein MSN6 feature ausgeführt, welches KMess noch nicht " +"bearbeiten kann." + +#: network/applications/p2papplication.cpp:1071 +msgid "The transfer failed. Data preparation failed." +msgstr "Die Übertragung ist fehlgeschlagen. Datenaufbereitungfehlgeschlagen." + +#: network/applications/p2papplication.cpp:1178 msgid "The invitation was cancelled. Message was not directed to us." msgstr "" "Die Einladung wurde abgebrochen. Nachricht wurde nicht zu uns geleitet." -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "Die Übertragung wurde abgebrochen. Der Kontakt hat fehlerhafte Daten " "übersand, oder KMess unterstützt es nicht." -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "Warte auf Verbindung an %1, Port %2" -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "Wechsle zu indirekter Dateiübertragung (kƶnnte langsam sein)." -#: network/applications/p2papplication.cpp:3297 -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "" -"Die Übertragung ist fehlgeschlagen. Zeitüberschreitung beim Warten auf den " -"anderen Kontakt zum Annehmen." - -#: network/applications/p2papplication.cpp:3316 -msgid "The transfer failed. An internal error occured." -msgstr "" -"Die Übertragung ist fehlgeschlagen. Ein interner Error ist aufgetreten." - -#: network/applications/p2papplication.cpp:3693 -msgid "The transfer failed. Couldn't open data source." -msgstr "" -"Die Übertragung ist fehlgeschlagen. Konnte die Datenquelle nicht ƶffnen." - -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:3113 msgid "Waiting for connection" msgstr "Warte auf Verbindung" -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " "accept." @@ -2792,7 +3358,7 @@ msgstr "" "Die Einladung wurde abgebrochen. Zeitüberschreitung beim Warten auf den " "anderen Kontakt zum Annehmen." -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." @@ -2800,18 +3366,18 @@ msgstr "" "Die Einladung wurde abgebrochen. Zeitüberschreitung beim Warten auf eine " "Verbindung um fortzufahren oder abzubrechen." -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "" "Die Einladung wurde abgebrochen. Zeitüberschreitung beim Warten auf die " "Daten." -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 msgid "You are invited to start a voice conversation." msgstr "Sie wurden eingeladen eine Sprachverbindung aufzubauen." -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 msgid "" "You are invited to start a voice conversation but support for this was not " "installed" @@ -2819,28 +3385,28 @@ msgstr "" "Sie wurden eingeladen eine Sprachverbindung aufzubauen, es ist aber keine " "Unterstützung dafür installiert." -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 msgid "You have cancelled the voice conversation." msgstr "Sie haben die Sprachverbindung abgebrochen." -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "" "Die Einladung wurde abgebrochen. Das AudiogerƤt konnte nicht geƶffnet werden." -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 msgid "Start voice conversation. Connecting to %1." msgstr "Starte die Sprachübertragung. Verbinde zu %1" -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 msgid "Start voice conversation. Listening on %1." msgstr "Starte die Dateiübertragung. Hƶre auf %1" -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 msgid "Inviting the contact to a voice conversation." msgstr "Lade den Kontakt zu einer Sprachübertragung ein." -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 msgid "The contact is inviting you for '%1', but this is not implemented yet." msgstr "" @@ -2886,646 +3452,785 @@ msgstr "Konnte keine Verbindung herstellen." msgid "Receiving file %1" msgstr "Empfange Datei %1" -#: network/msnconnection.cpp:477 -msgid "1 ping lost" -msgstr "1 ping verloren" +#: network/msnconnection.cpp:589 +#, fuzzy +msgid "KMess could not access the remote webservice.
Details: %1" +msgstr "" +"KMess konnte den Remote-Webservice nicht betreten.\n" +"\n" +"Details: %1" -#: network/msnconnection.cpp:481 -msgid "%1 pings lost" -msgstr "%1 pings verloren." - -#: network/msnconnection.cpp:496 -msgid "The connection to the server was lost." -msgstr "Verbindung zum Server ging verloren." - -#: network/msnconnection.cpp:704 +#: network/msnnotificationconnection.cpp:1317 #, fuzzy msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." -msgstr "" -"KMess konnte sich nicht mit dem MSN Messenger Service verbinden.\n" -"Bitte stellen Sie sicher, dass Sie mit dem Internet verbunden sind.\n" -"Systemfehler: %1 (code %2)." - -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "Der Remote Server hat die Verbindung geschlossen" - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" -"KMess konnte sich nicht mit den MSN Messenger Servern verbinden. Entweder " -"sind diese zur Zeit nicht erreichbar oder es besteht ein Problem mit Ihrer " -"Internetverbindung." - -#: network/msnnotificationconnection.cpp:724 -msgid "Show MSN Messenger Service status?" -msgstr "MSN Messenger Service Status anzeigen?" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "Server Fehler" - -#: network/msnnotificationconnection.cpp:1344 -#, fuzzy -msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" msgstr "" "Die Verbindung wurde getrennt, weil Sie\n" "von einem anderen MSN Mesenger Client\n" "oder von einem anderen Ort eine Verbindung\n" "hergestellt haben." -#: network/msnnotificationconnection.cpp:1558 +#: network/msnnotificationconnection.cpp:1532 msgid "Got synchronization" msgstr "Synchronisierung" -#: network/msnnotificationconnection.cpp:1699 -msgid "Authenticating" +#: network/msnnotificationconnection.cpp:1670 +#, fuzzy +msgid "Authenticating..." msgstr "Authentifizierung" -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "Benutzerinformationen empfangen" - -#: network/msnnotificationconnection.cpp:1752 +#: network/msnnotificationconnection.cpp:1719 msgid "Waiting for contact list..." msgstr "Warte auf die Kontaktliste..." -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "Transfer zum Notifizierungsserver" +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." +msgstr "" -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" +#: network/msnnotificationconnection.cpp:1894 +#, fuzzy +msgid "Authentication failed, please verify your account name and password." msgstr "" "Anmeldung fehlgeschlagen, bitte überprüfen Sie Ihren Accountnamen und " "Passwort." -#: network/msnnotificationconnection.cpp:2042 +#: network/msnnotificationconnection.cpp:1993 msgid "Connecting..." msgstr "Verbinden..." -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" +#: network/msnnotificationconnection.cpp:2167 +#, fuzzy +msgid "Unknown command received from the server: %1" msgstr "KMess hat eine unbekanntes Kommando vom Server empfangen: %1" -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 +#: network/msnnotificationconnection.cpp:2192 msgid "Invalid command syntax" msgstr "" -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -msgid "There was an internal error in KMess: %1" -msgstr "Es gab einen internen Fehler in KMess: %1" - -#: network/msnnotificationconnection.cpp:2243 +#: network/msnnotificationconnection.cpp:2196 msgid "Invalid command parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2246 +#: network/msnnotificationconnection.cpp:2199 msgid "The email you have tried to add is not a MSN Messenger account" msgstr "Die Email ist kein MSN Messenger Account" -#: network/msnnotificationconnection.cpp:2249 +#: network/msnnotificationconnection.cpp:2204 msgid "Domain name missing" msgstr "" -#: network/msnnotificationconnection.cpp:2252 +#: network/msnnotificationconnection.cpp:2208 msgid "Already logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2255 +#: network/msnnotificationconnection.cpp:2211 msgid "The account name given is invalid" msgstr "Der angegebene Accountname ist ungültig." -#: network/msnnotificationconnection.cpp:2258 +#: network/msnnotificationconnection.cpp:2215 msgid "" "That account name is invalid, or your passport has not been confirmed yet" msgstr "" "Der angegebene Accountname ist ungültig, oder Dein Passportkonto ist noch " "nicht bestätigt." -#: network/msnnotificationconnection.cpp:2261 +#: network/msnnotificationconnection.cpp:2218 msgid "Your contact list is full" msgstr "Ihre Kontaktliste ist voll." -#: network/msnnotificationconnection.cpp:2264 +#: network/msnnotificationconnection.cpp:2223 msgid "Invalid SBP parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2267 +#: network/msnnotificationconnection.cpp:2226 msgid "This contact is already on your list" msgstr "Dieser Kontakt ist bereits in Ihrer Liste." -#: network/msnnotificationconnection.cpp:2270 +#: network/msnnotificationconnection.cpp:2230 msgid "This contact is not on your list" msgstr "Dieser Kontakt ist nicht in Ihrer Liste." -#: network/msnnotificationconnection.cpp:2273 +#: network/msnnotificationconnection.cpp:2234 msgid "This contact is not online" msgstr "Dieser Kontakt ist nicht Online" -#: network/msnnotificationconnection.cpp:2276 +#: network/msnnotificationconnection.cpp:2239 msgid "Already in this mode" msgstr "" -#: network/msnnotificationconnection.cpp:2279 +#: network/msnnotificationconnection.cpp:2243 #, fuzzy msgid "Contact is in the opposite list" msgstr "Dieser Kontakt ist nicht in Ihrer Liste." -#: network/msnnotificationconnection.cpp:2282 -msgid "Your contact list has too many groups" -msgstr "Ihre Kontaktliste hat zu viele Gruppen." - -#: network/msnnotificationconnection.cpp:2285 -msgid "This group can't be changed" -msgstr "Diese Gruppe kann nicht verändert werden" - -#: network/msnnotificationconnection.cpp:2288 -msgid "This group is not empty" -msgstr "Diese Gruppe ist nicht leer." - -#: network/msnnotificationconnection.cpp:2291 +#: network/msnnotificationconnection.cpp:2247 +#, fuzzy msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." msgstr "" "Dieser Gruppenname wird bereits von Ihrem Messenger oder Ihrer Hotmail " "Kontaktliste benutzt." -#: network/msnnotificationconnection.cpp:2294 +#: network/msnnotificationconnection.cpp:2251 +msgid "Your contact list has too many groups" +msgstr "Ihre Kontaktliste hat zu viele Gruppen." + +#: network/msnnotificationconnection.cpp:2255 +msgid "This group can't be changed" +msgstr "Diese Gruppe kann nicht verändert werden" + +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "Ihre Kontaktliste hat zu viele Gruppen." + +#: network/msnnotificationconnection.cpp:2264 +msgid "This group is not empty" +msgstr "Diese Gruppe ist nicht leer." + +#: network/msnnotificationconnection.cpp:2268 msgid "The group name is too long" msgstr "Der Gruppenname ist zu lang" -#: network/msnnotificationconnection.cpp:2297 +#: network/msnnotificationconnection.cpp:2273 msgid "Attempted to change group \"0\"" msgstr "" -#: network/msnnotificationconnection.cpp:2300 +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +msgid "There was an internal error in KMess: %1" +msgstr "Es gab einen internen Fehler in KMess: %1" + +#: network/msnnotificationconnection.cpp:2277 #, fuzzy msgid "Invalid Group" msgstr "Gruppe &umbenennen" -#: network/msnnotificationconnection.cpp:2303 +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 msgid "Switchboard server failed" msgstr "Switchboard Server fehlgeschlagen" -#: network/msnnotificationconnection.cpp:2306 +#: network/msnnotificationconnection.cpp:2287 msgid "Transfer to switchboard server failed" msgstr "Übertragun zum Switchboardserver fehlgeschlagen" -#: network/msnnotificationconnection.cpp:2309 +#: network/msnnotificationconnection.cpp:2291 msgid "Direct connection (MSNSLP) error, connection failed" msgstr "Direct Connection (MSNSLP) Fehler, Verbindung fehlgeschlagen." -#: network/msnnotificationconnection.cpp:2312 +#: network/msnnotificationconnection.cpp:2295 msgid "Required field missing" msgstr "" -#: network/msnnotificationconnection.cpp:2315 +#: network/msnnotificationconnection.cpp:2299 msgid "Not logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" -msgstr "" -"Fehler beim öffnen der Kontaktliste, versuchen Sie es später noch einmal" +#: network/msnnotificationconnection.cpp:2302 +#, fuzzy +msgid "No permissions given for this account" +msgstr "Eigene Emoticons für diesen Account:" -#: network/msnnotificationconnection.cpp:2322 +#: network/msnnotificationconnection.cpp:2307 msgid "Command is disabled" msgstr "" -#: network/msnnotificationconnection.cpp:2325 +#: network/msnnotificationconnection.cpp:2310 msgid "Your account is banned." msgstr "Ihr Account ist gebannt." -#: network/msnnotificationconnection.cpp:2329 +#: network/msnnotificationconnection.cpp:2314 #, fuzzy msgid "Challenge response failed" msgstr "Die Übertragung ist fehlgeschlagen" -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" +#: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" +msgstr "" + +#: network/msnnotificationconnection.cpp:2323 +#, fuzzy +msgid "You are opening chat sessions too fast" msgstr "Sie öffnen Sessions zu schnell..." -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" msgstr "Sie haben zu viele Sessions geöffnet." -#: network/msnnotificationconnection.cpp:2341 +#: network/msnnotificationconnection.cpp:2334 msgid "Unexpected command sequence" msgstr "" -#: network/msnnotificationconnection.cpp:2344 +#: network/msnnotificationconnection.cpp:2338 msgid "Bad friend name" msgstr "Schlechter Freund Name" -#: network/msnnotificationconnection.cpp:2348 +#: network/msnnotificationconnection.cpp:2344 msgid "Bad CVR data" msgstr "" -#: network/msnnotificationconnection.cpp:2353 +#: network/msnnotificationconnection.cpp:2350 msgid "The server reports KMess is flooding it with too many data" msgstr "Der Server sagt KMess überflutet Ihn mit zu viel Daten." -#: network/msnnotificationconnection.cpp:2358 +#: network/msnnotificationconnection.cpp:2357 #, fuzzy msgid "Authentication ticket was incorrect" msgstr "Anmeldung fehlgeschlagen" -#: network/msnnotificationconnection.cpp:2362 +#: network/msnnotificationconnection.cpp:2360 msgid "You can't start a chat with someone while you are invisible." msgstr "Sie können keinen Chat starten wenn Sie unsichtbar sind." -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." +#: network/msnnotificationconnection.cpp:2364 +#, fuzzy +msgid "Not accepting new contacts" +msgstr "Akzeptiere keine neuen Principals" + +#: network/msnnotificationconnection.cpp:2368 +#, fuzzy +msgid "" +"You have a kids passport account, you need parental consent to chat online." msgstr "" "Du hast einen Kinderpassportkonto. Du brauchst ein Einverständnis Deiner " "Eltern um Online zu chatten." -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." +#: network/msnnotificationconnection.cpp:2371 +#, fuzzy +msgid "Your passport account needs to be verified first." msgstr "Ihr Passport muss zuerst verifiziert werden." -#: network/msnnotificationconnection.cpp:2373 +#: network/msnnotificationconnection.cpp:2375 msgid "Bad USR ticket" msgstr "" -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" -msgstr "KMess - MSN Fehler" +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" +msgstr "" +"Fehler beim öffnen der Kontaktliste, versuchen Sie es später noch einmal" -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" +#: network/msnnotificationconnection.cpp:2399 +#, fuzzy +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." msgstr "Es gab einen internen Serverfehler." +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + #: network/msnnotificationconnection.cpp:2414 -msgid "The server is too busy" -msgstr "Der Server ist zu beschäftigt." - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "Der Server ist nicht erreichbar" - -#: network/msnnotificationconnection.cpp:2422 msgid "Peer notification server down" msgstr "Notifizierungsserver ist down" -#: network/msnnotificationconnection.cpp:2426 +#: network/msnnotificationconnection.cpp:2418 msgid "The server is going down" msgstr "Der Server fährt herunter." -#: network/msnnotificationconnection.cpp:2429 +#: network/msnnotificationconnection.cpp:2422 msgid "The server is going down soon" msgstr "Der Server fährt bald herunter." -#: network/msnnotificationconnection.cpp:2433 +#: network/msnnotificationconnection.cpp:2427 msgid "Write is blocking" msgstr "Schreiben ist blockiert" -#: network/msnnotificationconnection.cpp:2436 +#: network/msnnotificationconnection.cpp:2431 msgid "Session is overloaded" msgstr "Die Session ist überfüllt" -#: network/msnnotificationconnection.cpp:2441 +#: network/msnnotificationconnection.cpp:2438 msgid "The server is not available" msgstr "Der Server ist nicht erreichbar" -#: network/msnnotificationconnection.cpp:2444 +#: network/msnnotificationconnection.cpp:2442 msgid "Authentication failed" msgstr "Anmeldung fehlgeschlagen" -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" -msgstr "Akzeptiere keine neuen Principals" +#: network/msnnotificationconnection.cpp:2449 +#, fuzzy +msgid "Unknown error code received from the server: %1" +msgstr "KMess hat eine unbekanntes Kommando vom Server empfangen: %1" -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" -msgstr "KMess hat einen unbekannten Fehler vom Server empfangen: %1" +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +#, fuzzy +msgctxt "Error dialog box title" +msgid "MSN error" +msgstr "KMess - MSN Fehler" -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "Warnung: Server schliesst für Wartungsarbeiten in 1 Minute!" +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "Minuten" +msgstr[1] "Minuten" #: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." +#, fuzzy +msgid "Server closes for maintenance in %1!" +msgstr "Warnung: Server schließt für Wartungsarbeiten in %1 Minuten!" + +#: network/msnnotificationconnection.cpp:2604 +#, fuzzy +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." msgstr "" "Die MSN Server haben berichtet, dass Sie in einer Minute für " "Wartungsarbeiten schließen werden." -#: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" -msgstr "Warnung: Server schließt für Wartungsarbeiten in %1 Minuten!" - -#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:2901 msgid "Lost reference to SOAP client" msgstr "" -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +#, fuzzy +msgid "KMess could not process Offline-IM messages.
Details: %1" msgstr "" "KMess konnte Offline-Nachrichten nicht bearbeiten.\n" "\n" "Details: %1" -#: network/msnnotificationconnection.cpp:3209 +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "Anmeldung fehlgeschlagen" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "Es gab einen internen Fehler in KMess: %1" + +#: network/msnnotificationconnection.cpp:3242 +#, fuzzy +msgctxt "Login error message, with more details for developer versions" msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" +msgstr "" +"KMess konnte sich nicht mit den MSN Messenger Servern verbinden. Entweder " +"sind diese zur Zeit nicht erreichbar oder es besteht ein Problem mit Ihrer " +"Internetverbindung." + +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "Verbindung zum Server ging verloren." + +#: network/msnnotificationconnection.cpp:3302 +#, fuzzy +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" msgstr "" "Authentifizierung fehlgeschlagen, KMess konnte nicht bei Passport anmelden.\n" "\n" "Details: %1" -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" -msgstr "" -"KMess konnte den Remote-Webservice nicht betreten.\n" -"\n" -"Details: %1" +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "Server Fehler" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "Zeitüberschreitung der Verbindung" + +#: network/msnsockettcp.cpp:368 +msgid "1 ping lost" +msgstr "1 ping verloren" + +#: network/msnsockettcp.cpp:372 +msgid "%1 pings lost" +msgstr "%1 pings verloren." + +#: network/msnsockettcp.cpp:387 +msgid "The connection to the server was lost." +msgstr "Verbindung zum Server ging verloren." + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "Diese Person ist offline oder unsichtbar." -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "" "Der Kontakt hat ein MSN7 Feature ausgeführt, welches KMess noch nicht " "bearbeiten kann." -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 msgid "The message \"%1\" was not received!" msgstr "Die Nachricht \"%1\" wurde nicht empfangen." -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "Konnte Verbindung nicht herstellen: %1" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "Zu viele Weiterleitungen beim Login-Service" -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +#, fuzzy +msgid "In %1's chat: %2" msgstr "In %1's Chat: %2" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +#, fuzzy +msgid "%1 says:
'%2'" msgstr "%1 sagt:
'%2'" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" +#: notification/chatnotification.cpp:171 +#, fuzzy +msgid "%1 has sent you an offline message:
'%2'" msgstr "%1 hat Ihnen eine Offline Nachricht gesendet:
'%2'" -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" +#: notification/chatnotification.cpp:178 +#, fuzzy +msgid "%1's chat requests attention!" msgstr "%1's Chat fordert Aufmerksamkeit!" -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" +#: notification/chatnotification.cpp:183 +#, fuzzy +msgid "%1:
%2" msgstr "%1:
%2" -#: notification/notificationchat.cpp:200 +#: notification/chatnotification.cpp:190 #, fuzzy -msgid "%1 has sent you a handwritten message!" +msgid "%1 has sent you a handwritten message!" msgstr "%1 hat Ihnen einen Rrrrring gesendet!" -#: notification/notificationchat.cpp:204 -msgid "%1 has sent you a nudge!" +#: notification/chatnotification.cpp:194 +#, fuzzy +msgid "%1 has sent you a nudge!" msgstr "%1 hat Ihnen einen Rrrrring gesendet!" -#: notification/notificationchat.cpp:208 -msgid "%1 has sent you a wink!" +#: notification/chatnotification.cpp:198 +#, fuzzy +msgid "%1 has sent you a wink!" msgstr "%1 hat Ihnen ein Animoticon gesendet!" -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" +#: notification/chatnotification.cpp:204 +#, fuzzy +msgid "%1 wants to use the webcam!" msgstr "%1 möchte die Webcam benutzen!" -#: notification/notificationchat.cpp:215 -msgid "%1 is sending you a file!" +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" msgstr "%1 sendet Ihnen eine Datei!" -#: notification/notificationchat.cpp:216 -msgid "%1 has sent you an invitation!" +#: notification/chatnotification.cpp:206 +#, fuzzy +msgid "%1 has sent you an invitation!" msgstr "%1 hat Ihnen eine Einladung gesendet!" -#: notification/notificationchat.cpp:223 -msgid "%1 has canceled the webcam session!" +#: notification/chatnotification.cpp:213 +#, fuzzy +msgid "%1 has canceled the webcam session!" msgstr "%1 hat die Webcamsession abgebrochen!" -#: notification/notificationchat.cpp:224 -msgid "%1 has canceled the file transfer!" +#: notification/chatnotification.cpp:214 +#, fuzzy +msgid "%1 has canceled the file transfer!" msgstr "%1 hat die Dateiübertragung abgebrochen!" -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +#, fuzzy +msgid "%1's activity has been canceled!" msgstr "%1's Aktivität wurde abgebrochen!" -#: notification/notificationchat.cpp:232 -msgid "%1 has accepted to use the webcam!" +#: notification/chatnotification.cpp:222 +#, fuzzy +msgid "%1 has accepted to use the webcam!" msgstr "%1> hat der Benutzung der Webcam zugestimmt!" -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" +#: notification/chatnotification.cpp:223 +#, fuzzy +msgid "%1 has accepted the file transfer!" msgstr "%1 hat die Dateiübertragung angenommen." -#: notification/notificationchat.cpp:234 -msgid "%1 has accepted your invitation!" +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" msgstr "%1> hat Ihre Einladung angenommen!" -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" +#: notification/chatnotification.cpp:231 +#, fuzzy +msgid "%1 has ended the webcam session!" msgstr "%1 hat die Webcamsession beendet!" -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "Die Dateiübertragung mit %1 ist fertig!" -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" +#: notification/chatnotification.cpp:233 +#, fuzzy +msgid "%1's activity has ended!" msgstr "%1's Aktivität ist beendet!" -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" +#: notification/chatnotification.cpp:240 +#, fuzzy +msgid "%1's webcam session has failed!" msgstr "%1's Webcamsession ist fehlgeschlagen!" -#: notification/notificationchat.cpp:251 -msgid "The file transfer with %1 has failed!" +#: notification/chatnotification.cpp:241 +#, fuzzy +msgid "The file transfer with %1 has failed!" msgstr "Die Dateiübertragung von %1 ist fehlgeschlagen." -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:242 +#, fuzzy +msgid "%1's activity has ended with an error!" msgstr "%1's Aktivität wurde mit einem Fehler beendet!" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -msgid "%1 is now online" +#: notification/contactstatusnotification.cpp:70 +#, fuzzy +msgid "%1 is now online" msgstr "%1 ist jetzt Online" -#: notification/notificationcontactstatus.cpp:76 -msgid "%1 has gone away" +#: notification/contactstatusnotification.cpp:71 +#, fuzzy +msgid "%1 has gone away" msgstr "%1> ist Abwesend" -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/contactstatusnotification.cpp:72 +#, fuzzy +msgid "%1 will be right back" msgstr "%1 ist gleich zurück" -#: notification/notificationcontactstatus.cpp:78 -msgid "%1 is now busy" +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" msgstr "%1 ist jetzt Beschäftigt" -#: notification/notificationcontactstatus.cpp:79 -msgid "%1 has become invisible" +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" msgstr "%1 wurde Unsichtbar" -#: notification/notificationcontactstatus.cpp:80 -msgid "%1 has gone idle" +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" msgstr "%1> ist Idle gegangen" -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/contactstatusnotification.cpp:76 +#, fuzzy +msgid "%1 has logged out" msgstr "%1> hat sich abgemeldet" -#: notification/notificationcontactstatus.cpp:82 -msgid "%1 is on the phone" +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" msgstr "%1 ist am Telefon" -#: notification/notificationcontactstatus.cpp:83 -msgid "%1 is out for lunch" +#: notification/contactstatusnotification.cpp:78 +#, fuzzy +msgid "%1 is out for lunch" msgstr "%1 ist Mittagessen" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/newemailnotification.cpp:78 +#, fuzzy +msgid "New email:
'%1'
by '%2'" msgstr "Neue eMail:
'%1'
von '%2'" -#: settings/accountswidget.cpp:81 +#: settings/accountpage.cpp:69 msgid "Browse..." msgstr "" -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +#, fuzzy +msgid "Browse and crop picture..." msgstr "Bild öffnen und zuschneiden..." -#: settings/accountswidget.cpp:404 -msgid "Display Picture" -msgstr "Mein Bild" +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" +#: settings/accountpage.cpp:448 +#, fuzzy +msgid "Downloading of display picture failed" msgstr "Herunterladen von Mein Bild fehlgeschlagen" -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 +#, fuzzy msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" "Beim Versuch Mein Bild zu ändern ist ein Fehler aufgetreten.\n" "Bitte überprüfen Sie , ob Sie ein korrektes Bild ausgewählt haben." -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "Hi, wie geht es Dir? :)" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "Stacy" - -#: settings/chatstylepage.cpp:317 -msgid "Great!" -msgstr "Gut!" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "Ich komme /gerade/ zurück von meinem Urlaub aus Italien!" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 #, fuzzy msgid "&Delete" msgstr "Kontakt &löschen" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "Einstellungen" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 msgid "Account" msgstr "Konto" -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 #, fuzzy msgid "My Account" msgstr "Konto" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "Alarme" -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 #, fuzzy msgid "Alerts and Notifications" msgstr "KMess Benachrichtigung" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "Chatten" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "Chatverlauf" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +#, fuzzy +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "Die eingegebene Kontaktadresse ist nicht gültig: '%1'" + +#: settings/accountsettingsdialog.cpp:201 +#, fuzzy +msgid "The email address you have entered is already in use: '%1'" +msgstr "Die eingegebene Kontaktadresse ist nicht gültig: '%1'" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "Sind Sie sicher, dass Sie dieses Profil löschen möchten?" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "Sind Sie sicher, dass Sie dieses Profil löschen möchten?" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "Hi, wie geht es Dir? :)" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "Stacy" + +#: settings/chatstylepage.cpp:341 +msgid "Great!" +msgstr "Gut!" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "Ich komme /gerade/ zurück von meinem Urlaub aus Italien!" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "Einstellungen" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +msgid "Accounts" +msgstr "Konten" + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "Emailbenachrichtigung" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "Chats in diesem Verzeichnis speichern: " + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." @@ -3533,14 +4238,152 @@ msgstr "" "Wenn Sie das Hauptfenster von KMess schließen verbleibt KMess im Systemtray. " "Benutzen Sie 'Beenden' aus dem Dateimenü um die Anwendung zu schließen." -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "Docke im System Tray" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "
%1 (%2)" +#: systemtraywidget.cpp:245 +#, fuzzy +msgid "- %1 (%2)" +msgstr "%1 %2" + +#~ msgid "Click to send an email to this contact." +#~ msgstr "Klicken Sie hier um dem Kontakt eine Email zu senden." + +#~ msgid "Picture:" +#~ msgstr "Bild:" + +#, fuzzy +#~ msgid "Login Information" +#~ msgstr "Emailinformationen in der Kontaktliste anzeigen" + +#~ msgid "Logging in..." +#~ msgstr "Verbinde ..." + +#~ msgid "" +#~ "Allows you to choose which e-mail program KMess should open to view e-" +#~ "mail messages." +#~ msgstr "" +#~ "Erlaubt Ihnen das Mailprogramm auszuwählen, welches KMess öffnet um Ihre " +#~ "Emails zu lesen." + +#~ msgid "Use a specified command:" +#~ msgstr "Speziellen Befehl ausführen:" + +#~ msgid "This account does not have an Hotmail inbox!" +#~ msgstr "Dieser Account hat keinen Hotmail Posteingang." + +#, fuzzy +#~ msgid "Email: " +#~ msgstr "Email" + +#~ msgid "Remove group" +#~ msgstr "Gruppe löschen" + +#, fuzzy +#~ msgid "Show &Display Pictures" +#~ msgstr "Mein Bild" + +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr "1 neue Email in Ihrem Posteingang" + +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr "%1 neue Emails in Ihrem Posteingang" + +#, fuzzy +#~ msgid "Guido Solinas" +#~ msgstr "&Online geht" + +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "" +#~ "Die Übertragung von %1 ist fehlgeschlagen. Konnte Datei nicht öffnen" + +#, fuzzy +#~ msgid "Sidebar" +#~ msgstr "Sidebar" + +#, fuzzy +#~ msgid "New contact's group" +#~ msgstr "Neuer K&ontakt" + +#~ msgid "Enter your login information:" +#~ msgstr "Geben Sie Ihre Logininformationen ein:" + +#~ msgid "Your friendly name:" +#~ msgstr "Ihr Nickname:" + +#, fuzzy +#~ msgid "Your email address:" +#~ msgstr "Emailadresse: " + +#~ msgid "Your password:" +#~ msgstr "Ihr Passwort:" + +#~ msgid "Display picture:" +#~ msgstr "Mein Bild:" + +#~ msgid "Don't show a displa&y picture" +#~ msgstr "Zeige kein Displa&y Bild" + +#~ msgid "Status to set at login:" +#~ msgstr "Status beim Anmelden:" + +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "Eine Benachrichtigung anzeigen, wenn Sie eine Email em&pfangen" + +#~ msgid "Organize chat folders by:" +#~ msgstr "Sortiere Chatordner nach:" + +#~ msgid "&Show graphics in chat messages" +#~ msgstr "Graphiken in Chatnachrichten &anzeigen" + +#~ msgid "Use Hotmail" +#~ msgstr "Hotmail benutzen" + +#~ msgid "says:" +#~ msgstr "sagt:" + +#~ msgid "Current name: " +#~ msgstr "Eigener Name: " + +#, fuzzy +#~ msgid "" +#~ "KMess could not connect to the MSN Messenger service.\n" +#~ "Please, be sure to be connected to the internet.\n" +#~ "reason: %1." +#~ msgstr "" +#~ "KMess konnte sich nicht mit dem MSN Messenger Service verbinden.\n" +#~ "Bitte stellen Sie sicher, dass Sie mit dem Internet verbunden sind.\n" +#~ "Systemfehler: %1 (code %2)." + +#~ msgid "The remote server has closed the connection." +#~ msgstr "Der Remote Server hat die Verbindung geschlossen" + +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr "MSN Messenger Service Status anzeigen?" + +#~ msgid "Received user confirmation" +#~ msgstr "Benutzerinformationen empfangen" + +#~ msgid "Transfer to notification server" +#~ msgstr "Transfer zum Notifizierungsserver" + +#~ msgid "The server is too busy" +#~ msgstr "Der Server ist zu beschäftigt." + +#~ msgid "The server is unavailable" +#~ msgstr "Der Server ist nicht erreichbar" + +#~ msgid "KMess received an unknown error message from the server: %1" +#~ msgstr "KMess hat einen unbekannten Fehler vom Server empfangen: %1" + +#~ msgid "Warning: Server closes for maintenance in 1 minute!" +#~ msgstr "Warnung: Server schliesst für Wartungsarbeiten in 1 Minute!" + #~ msgid "Add contact" #~ msgstr "Kontakt hinzufügen" @@ -3548,9 +4391,6 @@ msgstr "
%1 (%2)" #~ msgid "KMess Notification" #~ msgstr "Emailbenachrichtigung" -#~ msgid "Accounts" -#~ msgstr "Konten" - #~ msgid "" #~ msgstr "" @@ -3564,9 +4404,6 @@ msgstr "
%1 (%2)" #~ "Your emails" #~ msgstr "jan.toenjes@web.de" -#~ msgid "Insert an emoticon" -#~ msgstr "Ein Emoticon einfügen" - #~ msgid "Show/Hide &Contact Sidebar" #~ msgstr "Zeige/Verstecke die &Kontakt Sidebar" @@ -3600,18 +4437,9 @@ msgstr "
%1 (%2)" #~ msgid "(On the Phone)" #~ msgstr "(Am Telefon)" -#~ msgid "Connection timeout" -#~ msgstr "Zeitüberschreitung der Verbindung" - #~ msgid "The current status of your contact." #~ msgstr "Der aktuelle Status von Ihrem Kontakt." -#~ msgid "Connect" -#~ msgstr "Verbinden" - -#~ msgid "Listening to %1" -#~ msgstr "Höre %1" - #, fuzzy #~ msgid "The contact is listening to music" #~ msgstr "Dieser Kontakt ist nicht in Ihrer Liste." diff --git a/po/es.po b/po/es.po index 7bdfe4c..a359e18 100644 --- a/po/es.po +++ b/po/es.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: es\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" "PO-Revision-Date: 2007-11-04 20:33-0300\n" "Last-Translator: Christian Kaiser \n" "Language-Team: Spanish\n" @@ -23,45 +23,38 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "Iniciando sesión..." - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -msgid "S&end" -msgstr "&Enviar" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 msgid "Ne&w Line" msgstr "&Nueva línea" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 -#, fuzzy -msgid "Sidebar" -msgstr "Barra lateral" +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 +msgid "S&end" +msgstr "&Enviar" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +msgid "Contacts" +msgstr "Contactos" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "Haz click aquí para mostrar el perfíl de este contacto." #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." -msgstr "Haz click para mandar un correo electrónico a este contacto." +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 #, fuzzy msgid "" "Enter here the email address of the person you wish to add to your contact " @@ -69,41 +62,39 @@ msgid "" msgstr "Introduzca la dirección de correo de la persona que desea agregar:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 msgid "Email address" msgstr "Correo electrónico:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 #, fuzzy -msgid "New contact's group" -msgstr "Nuevo &Contacto" +msgid "Initial group" +msgstr "Re&nombrar grupo" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "Metodo abreviado de teclado:" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "Archivo de imagen:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 #, fuzzy msgid "" "Enter a message to be automatically sent to people who try to message you." @@ -112,126 +103,339 @@ msgstr "" "a la gente que intente contactar con usted:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 #, fuzzy msgid "&Automatic away message" msgstr "Especifique un mensaje de ausencia" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" msgstr "" -"%1\n" -"le ha agregado a su lista de contactos. ¿Qué desea hacer?" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 -msgid "&Add this contact to your \"Friends\" list" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 +#, fuzzy +msgid "&Add this person to my \"Friends\" list" msgstr "&Agregar este contacto a su lista de \"Amigos\"" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 -msgid "&Not add this contact, but let them see your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 +#, fuzzy +msgid "Do not add this person; only allow them to see my online state" msgstr "&No agregar, pero permitir que vean mi estado de conexión." #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 -msgid "Block this person from contacting &you or seeing your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 +#, fuzzy +msgid "&Block this person from contacting me or seeing my online state" msgstr "" "Evitar que esta persona se ponga en contacto conmigo &y vea mi estado de " "conexión" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, no-c-format +msgid "Contact Properties for %1" +msgstr "Propiedades de contacto %1" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +#, fuzzy +msgid "Restore" +msgstr "Eliminado" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "Usar un nombre alternativo para esta persona" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "Mostrar una notificación cuando esta persona se conecte o desconecte" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "Sonido:" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +#, fuzzy +msgid "&Clear Cache" +msgstr "Limpiar pestaña" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +#, fuzzy +msgid "Notes" +msgstr "Nota" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "Ventana de Red" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +#, fuzzy +msgid "Standard" +msgstr "Estrella" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "&Enviar" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 msgid "Cancel" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -msgid "Enter your login information:" -msgstr "Introduzca los datos de su cuenta:" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" +msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 -msgid "Password" +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 +#, fuzzy +msgid "Email address:" +msgstr "Correo electronico: " + +#. i18n: tag string +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +#, fuzzy +msgid "Password:" msgstr "Contraseña" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "Estado al iniciar sesión" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 #, fuzzy msgid " Account options " msgstr "O&pciones de la cuenta" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 msgid "Remem&ber this profile" msgstr "Recor&dar este perfil" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "&Conectar" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "Escriba su mensaje personal aquí" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr "O&pciones de la cuenta" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "" "Escriba el nombre que desea que vean sus contactos cuando esté en línea." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 -msgid "Your friendly name:" -msgstr "Su nombre (nick):" +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 +#, fuzzy +msgid "&Friendly name:" +msgstr "Nombre de usuario (nick)" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" @@ -240,15 +444,15 @@ msgstr "" "http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 #, fuzzy -msgid "Your email address:" +msgid "&Email address:" msgstr "Correo electronico: " #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" @@ -257,39 +461,40 @@ msgstr "" "nueva en http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" -msgstr "Su contraseña:" - -#. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 #, fuzzy -msgid "Remember Password" +msgid "&Password:" msgstr "Contraseña" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 -msgid "Display picture:" -msgstr "Foto del contacto:" +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 +#, fuzzy +msgid "&Remember Password" +msgstr "Contraseña" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 +msgid "Display Picture" +msgstr "Mostrar foto" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 msgid "C&hange..." msgstr "Ca&mbiar" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -msgid "Don't show a displa&y picture" -msgstr "No mostrar una imagen" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -305,35 +510,38 @@ msgstr "" "use KMess en un equipo de uso público." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +#, fuzzy +msgid "Re&member the settings of this account" msgstr "Recordar las preferencias de esta cuenta." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "" "Si estÔ activado, KMess iniciarÔ sesión con esta cuenta automÔticamente." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 -msgid "Login &with this account automatically at start-up" +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 +#, fuzzy +msgid "Login &with this account automatically" msgstr "In&gresar con esta cuenta automÔticamente al iniciar" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "Estado al iniciar sesión:" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "Registrar todas las conversaciones" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -343,8 +551,8 @@ msgstr "" "una con su cuenta de correo actual o usar una de Hotmail para conectar." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." @@ -353,26 +561,26 @@ msgstr "" "mail registrada en passport." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "Pedir correo electrónico de verificacion" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 msgid "https://accountservices.passport.net/" msgstr "https://accountservices.passport.net/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "Ir a accountservices.passport.net" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." @@ -381,38 +589,103 @@ msgstr "" "Passport con tu dirección de e-mail." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "Registrar nueva cuenta." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "Ir a register.passport.com" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 -msgid "Popup notifications" +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 +#, fuzzy +msgid "Saved accounts:" +msgstr "Cuentas" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +msgid "Click" +msgstr "Click" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "" +"Haga click aquí para agregar nuevos emoticonos personalizados para enviarle " +"a sus contactos." + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "Cuenta" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "Seleccione un emoticono y haga click aqui para borrarlo." + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "Eliminado" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "Notificación emergente" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "Contactos" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 msgid "Show notifications when your contacts:" msgstr "Mostrar notificaciones cuando los contactos:" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." @@ -421,15 +694,15 @@ msgstr "" "se conecta." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 #, fuzzy msgid "&Go online" msgstr "Se desconec&ten" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." @@ -438,14 +711,14 @@ msgstr "" "comienza una conversación con usted." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "Comiencen una &conversación contigo" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." @@ -454,14 +727,14 @@ msgstr "" "le evia un mensaje." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 msgid "S&end you a message" msgstr "Le mand&en un mensaje" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." @@ -470,16 +743,16 @@ msgstr "" "cambia su estado." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "Cambien su e&stado" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." @@ -488,39 +761,90 @@ msgstr "" "contactos se desconecta." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 msgid "Go o&ffline" msgstr "Se desconec&ten" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 -msgid "Show notifications when you recei&ve an email" -msgstr "Mostrar una notificación cuando se reciba correo" +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 +#, fuzzy +msgid "Email Events" +msgstr "Correo electrónico:" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" +msgstr "Mostrar una notificación cuando se reciba correo en «otras carpetas»" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" +"Cuando estÔ activo, una ventana de notificacón aparece también cuando se " +"recibe un e-mail en otra carpeta. Esta opción estÔ solo disponible para " +"cuentas de Hotmail." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +msgid "In other folders" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "" "Controla los segundos hasta que las notificaciones emergentes són ocultadas." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "Ocultar globos tras" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "segundos" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "Avisos" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "Mostrar contactos &desconectados" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -539,14 +863,32 @@ msgstr "" "p>" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "Sacudir la ventana de conversación cuando se recibe o envía un zumbido" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" +"Cuando estÔ activo, se mostrarÔ una notificación cuando se reciba un e-mail. " +"El número de mensajes sin leer se muestra arriba de la lista de contactos. " +"Esta opción solo estÔ disponible para cuentas de Hotmail." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." @@ -556,30 +898,37 @@ msgstr "" "en su sistema." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 -msgid "Inform contacts w&hich song I am listening to." +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 +#, fuzzy +msgid "Inform contacts w&hich song I am listening to" msgstr "Informarle a mis contactos que canción estoy escuchando" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 +#, fuzzy msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" "Cuano estÔ activado, su estado serÔ cambiado automÔticamente a \"Ausente - " "Inactivo\" cuando no use el ordenador durante unos minutos." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "Cambiar el estado a «Ausente-Inactivo» cuando esté inactivo" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." @@ -588,48 +937,49 @@ msgstr "" "a \"Ausente - Inactivo\"." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 msgid "Become idle after" msgstr "Pasar a inactivo tras" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "minutos" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "" "Cuando estÔ activo, las conversaciones serÔn guardadas en la carpeta " "especificada." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 msgid "Log &all chats" msgstr "Registrar todas las conversaciones" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 msgid "" "Choose the directory on your system where you'd like to save the chat logs." msgstr "" "Seleccione la carpeta donde se guardarÔn los registros de la conversación." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" msgstr "Guardar los archivos de las conversaciones en este directorio:" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." @@ -638,122 +988,101 @@ msgstr "" "carpeta de conversaciones por año, mes o día." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "Organizar las carpetas de conversaciones por:" +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "Año" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 msgid "Month" msgstr "Mes" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "Día" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" msgstr "Guardar todas las conversaciones en el directorio padre" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." -msgstr "Este el color y la tipografía usados en sus mensajes." - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "La tipografía de su mensaje:" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" -"Permite que las preferencias de fuente y color de sus contactos sean " -"cambiados." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "Obligar a que los mensajes del contacto usen esta tipografía:" - +#. i18n: file ./settings/chatstylepage.ui line 45 #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "" "Te permite cambiar el tema que KMess usa para mostrar los mensajes en una " "conversación." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +#, fuzzy +msgid "&Chat style:" msgstr "Estilo de la ventana de conversación:" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "Preferencias" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "Habilita los emoticonos en las conversaciones." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 -msgid "&Show graphics in chat messages" -msgstr "Mostrar &grÔficos en los mensajes" +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 +#, fuzzy +msgid "&Show emoticons" +msgstr "Mostrar emot&iconos" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "Activa la aparición de la hora en que cada mensaje fue escrito." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 -msgid "S&how time in chat messages" +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 +#, fuzzy +msgid "S&how messages time" msgstr "Mostrar la &hora en los mensajes" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" -"Activa el uso de efectos de fuente, el escribir *negrita*, /cursiva/ y " -"_subrayado_ harÔ que esas palabas se vean en una fuente negrita, cursiva o " -"subrayada respectivamente." - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "" -"Usar &efectos de fuente en mensajes. (*negrita*, /cursiva/, _subrayado_)" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -766,155 +1095,305 @@ msgstr "" "que haya elegido." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "Agrupar los mensajes que provienen del mismo contacto" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 -msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" msgstr "" -"Le permite elegir que programa de correo electrónico abrirÔ KMess cuando " -"intente ver un e-mail." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "Cliente de correo" +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 +#, fuzzy +msgid "Always" +msgstr "Ausente" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "Usar Hotmail" +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "Su lista de contactos tiene demasiados grupos" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "Usar un comando especifico:" +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "Genio" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "Notificación de correo" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 -msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" msgstr "" -"Cuando estÔ activo, se mostrarÔ una notificación cuando se reciba un e-mail. " -"El número de mensajes sin leer se muestra arriba de la lista de contactos. " -"Esta opción solo estÔ disponible para cuentas de Hotmail." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 -msgid "Show email information" -msgstr "Mostrar información referente al correo." +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." +msgstr "Este el color y la tipografía usados en sus mensajes." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "La tipografía de su mensaje:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." msgstr "" -"Cuando estÔ activo, una ventana de notificacón aparece también cuando se " -"recibe un e-mail en otra carpeta. Esta opción estÔ solo disponible para " -"cuentas de Hotmail." +"Permite que las preferencias de fuente y color de sus contactos sean " +"cambiados." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" -msgstr "Mostrar una notificación cuando se reciba correo en «otras carpetas»" +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "Obligar a que los mensajes del contacto usen esta tipografía:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 +msgid "" +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." +msgstr "" +"Activa el uso de efectos de fuente, el escribir *negrita*, /cursiva/ y " +"_subrayado_ harÔ que esas palabas se vean en una fuente negrita, cursiva o " +"subrayada respectivamente." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +#, fuzzy +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" +msgstr "" +"Usar &efectos de fuente en mensajes. (*negrita*, /cursiva/, _subrayado_)" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "Esperando por lista de contactos..." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 msgid "&Emoticon Themes" msgstr "Temas de &Emoticonos" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 msgid "Available emoticon styles:" msgstr "Temas de emoticonos disponibles:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 msgid "&Custom Emoticons" msgstr "Emoticonos Personalizados" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 msgid "Custom emoticons for this account:" msgstr "Emoticones personalizados para esta cuenta:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -msgid "Click" -msgstr "Click" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "" -"Haga click aquí para agregar nuevos emoticonos personalizados para enviarle " -"a sus contactos." - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "Agregar nue&vo.." #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "Haga click aquí para cambiarle el nombre al emoticono seleccionado." #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 msgid "Re&name" msgstr "Re&nombrar" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "Seleccione un emoticono y haga click aqui para borrarlo." - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 msgid "Remo&ve" msgstr "Eli&minar" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +#, fuzzy +msgid "Web Browser" +msgstr "Rosa marchita" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +msgid "&Use the KDE default browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "dice:" +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "Cliente de correo" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +msgid "&Use the KDE default email client" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +msgid "File Transfers" +msgstr "Transferencias de archivo" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "Guardar los archivos de las conversaciones en este directorio:" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +#, fuzzy +msgid "and" +msgstr "Triste" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "Transferencias de archivo" #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -924,129 +1403,12 @@ msgstr "No estoy frente al equipo" msgid "Your name" msgstr "Su nombre" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "su_identificador@hotmail.com" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "Conectado" - -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "Ausente" - -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "Vuelvo enseguida" - -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "Ocupado" - -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "Desconectado" - -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "Inactivo" - -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "Desconectado" - -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "Al Teléfono" - -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "Sali a Comer" - -#: chat/chatmaster.cpp:1061 -msgid "%1 is sending a wink: %2" -msgstr "%1 estÔ enviando un guiño: %2" - -#: chat/chatmessagestyle.cpp:302 -msgid "%1 says:" -msgstr "%1 dice: " - -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 -msgid "Add this emoticon: %1" -msgstr "Agrega este emoticono: %1" - -#: chat/chatview.cpp:529 -msgid "" -"Could not save chat log. Make sure you have permission to write in the " -"folder where logs are being saved." -msgstr "" -"No se pudo guardar el registro de la cionversación.Asegurate de tener " -"permisos de escritura en la carpeta donde quieres guardar el registro." - -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 -msgid "" -"The file '%1' already exists.\n" -"do you want to overwrite it?" -msgstr "El archivo %1 ya existe. Deseas sobreescribirlo?" - -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Overwrite File" -msgstr "Sobreescribir archivo" - -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Over&write" -msgstr "Sobreescribir" - -#: chat/chatview.cpp:977 -msgid "Add this &Emoticon..." -msgstr "Agregar este &emoticono" - -#: chat/chatview.cpp:984 -msgid "Send &Email" -msgstr "&Enviar correo" - -#: chat/chatview.cpp:988 -msgid "Copy E&mail" -msgstr "Copiar co&rreo" - -#: chat/chatview.cpp:995 -msgid "Visit &Link" -msgstr "Visitar &Link" - -#: chat/chatview.cpp:999 -msgid "Copy &Address" -msgstr "Copiar &Direccion" - -#: chat/chatview.cpp:1013 -msgid "&Copy text" -msgstr "&Copiar texto" - -#: chat/chatview.cpp:1014 -msgid "Select &All" -msgstr "Seleccionar &Todo" - -#: chat/chatview.cpp:1015 -msgid "Save chat to &File" -msgstr "Guardar conversación a un &archivo" - -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "Conversación" - -#: chat/chatwindow.cpp:239 +#: chat/chat.cpp:124 msgid "" "You can't start this invitation because there are multiple contacts in this " "chat." @@ -1054,307 +1416,515 @@ msgstr "" "No puedes aceptar esta invitación porque hay varios contactos en la " "conversación." -#: chat/chatwindow.cpp:276 -msgid "%1 has joined the chat." +#: chat/chat.cpp:158 +#, fuzzy +msgid "%1 has joined the chat." msgstr "%1 se ha unido a la conversación." -#: chat/chatwindow.cpp:327 -msgid "The conversation went idle, %1 has left the chat." +#: chat/chat.cpp:211 +#, fuzzy +msgid "The conversation went idle, %1 has left the chat." msgstr "La conversacion se ha vuelto inactiva. %1 ha dejado la conversación." -#: chat/chatwindow.cpp:331 -msgid "%1 has left the chat." +#: chat/chat.cpp:215 +#, fuzzy +msgid "%1 has left the chat." msgstr "%1 ha dejado la conversación." -#: chat/chatwindow.cpp:593 -msgid "%1 - Chat" -msgstr "Conversación con %1" - -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" +#: chat/chat.cpp:364 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 and %2" msgstr "Conversación con %1 y %2" -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" +#: chat/chat.cpp:371 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 et al." msgstr "%1 y etc - Chat" -#: chat/chatwindow.cpp:757 -msgid "Contacts" -msgstr "Contactos" - -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 -msgid "Emoticons" -msgstr "Emoticonos" - -#: chat/chatwindow.cpp:819 -msgid "My emoticons" -msgstr "Mis emoticonos" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" +#: chat/chat.cpp:630 +#, fuzzy +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" msgstr " (Este mensaje fue enviado automÔticamente)" -#: chat/chatwindow.cpp:1502 +#: chat/chat.cpp:934 +#, fuzzy +msgid "You received a wink from %1." +msgstr "Has recibido un guiño de %1" + +#: chat/chat.cpp:971 msgid "" "The wink could not be displayed. Make sure you have 'cabextract' installed." msgstr "" "El guiño no se puede mostrar. Asegúrate de que tienes el paquete " "'cabextract' instalado." -#: chat/chatwindow.cpp:1511 +#: chat/chat.cpp:980 msgid "The wink could not be displayed. The data could not be read." msgstr "El guiño no se ha podido mostrar. No se ha podido leer los datos." -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" +#: chat/chat.cpp:1080 +#, fuzzy +msgid "You have received a wink from %1" msgstr "Has recibido un guiño de %1" -#: chat/chatwindow.cpp:1755 +#: chat/chat.cpp:1100 #, fuzzy -msgid "Show Side&bar" -msgstr "Barra lateral" - -#: chat/chatwindow.cpp:1756 -#, fuzzy -msgid "Show the contact sidebar" -msgstr "Muestra u oculta la barra lateral" - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -#, fuzzy -msgid "Hide Side&bar" -msgstr "Barra lateral" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -#, fuzzy -msgid "Hide the contact sidebar" -msgstr "Muestra u oculta la barra lateral" - -#: chat/chatwindow.cpp:1787 -msgid "The message '%1' could not be sent." -msgstr "El mensaje \"%1\" no pudo ser enviado" - -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" +msgid "You received a nudge from %1!" msgstr "Has recibido un zumbido de %1!" -#: chat/chatwindow.cpp:1876 +#: chat/chat.cpp:1119 +#, fuzzy +msgid "The message '%1' could not be sent." +msgstr "El mensaje \"%1\" no pudo ser enviado" + +#: chat/chat.cpp:1183 msgid "You've sent a nudge to %1!" msgstr "Has enviado un zumbido a %1!" -#: chat/chatwindow.cpp:1883 +#: chat/chat.cpp:1190 msgid "You've sent a nudge!" msgstr "Has enviado un zumbido!" -#: chat/chatwindow.cpp:1972 -msgid "%1 is typing." -msgstr "%1 estÔ escribiendo." +#: chat/chatmaster.cpp:1219 +msgid "%1 is sending a wink: %2" +msgstr "%1 estÔ enviando un guiño: %2" -#: chat/chatwindow.cpp:1981 -msgid "%1 and %2 are typing." -msgstr "%1 y %2 estan escribiendo." +#: chat/chatmessagestyle.cpp:298 +msgid "%1 says:" +msgstr "%1 dice: " -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." -msgstr "%1, %2 y %3 otros estan escribiendo." +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 +msgid "Add this emoticon: %1" +msgstr "Agrega este emoticono: %1" -#: chat/chatwindowinterface.cpp:175 -msgid "&Chat" -msgstr "&Conversación" - -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 msgid "&Invite" msgstr "&Invitar" -#: chat/chatwindowinterface.cpp:179 +#: chat/chatview.cpp:695 +msgid "" +"Could not save chat log. Make sure you have permission to write in the " +"folder where logs are being saved." +msgstr "" +"No se pudo guardar el registro de la cionversación.Asegurate de tener " +"permisos de escritura en la carpeta donde quieres guardar el registro." + +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 +msgid "" +"The file '%1' already exists.\n" +"do you want to overwrite it?" +msgstr "El archivo %1 ya existe. Deseas sobreescribirlo?" + +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Overwrite File" +msgstr "Sobreescribir archivo" + +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Over&write" +msgstr "Sobreescribir" + +#: chat/chatview.cpp:1275 +msgid "Add this &Emoticon..." +msgstr "Agregar este &emoticono" + +#: chat/chatview.cpp:1282 +msgid "Send &Email" +msgstr "&Enviar correo" + +#: chat/chatview.cpp:1286 +msgid "Copy E&mail" +msgstr "Copiar co&rreo" + +#: chat/chatview.cpp:1293 +msgid "Visit &Link" +msgstr "Visitar &Link" + +#: chat/chatview.cpp:1297 +msgid "Copy &Address" +msgstr "Copiar &Direccion" + +#: chat/chatview.cpp:1312 +msgid "&Copy text" +msgstr "&Copiar texto" + +#: chat/chatview.cpp:1313 +msgid "Select &All" +msgstr "Seleccionar &Todo" + +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 +msgid "Save chat to &File" +msgstr "Guardar conversación a un &archivo" + +#: chat/chatwindow.cpp:489 +msgid "&Chat" +msgstr "&Conversación" + +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "Enviar un &archivo" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "Comenzar &videoconferencia" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 msgid "Send a &Nudge!" msgstr "Enviar un &zumbido" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "Guardar la conversación" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 #, fuzzy msgid "&Emoticons" msgstr "Emoticonos" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +#, fuzzy +msgid "Close &All Tabs" +msgstr "Cerrar pestaña" + +#: chat/chatwindow.cpp:504 #, fuzzy msgid "Meeting" msgstr "Preferencias" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "Iniciar o detener una &Conversación" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "Cambiar &tipografía" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "Cambiar &color de tipografía" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 #, fuzzy msgid "&Font" msgstr "&Conectar" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 #, fuzzy msgid "Font &Color" msgstr "Cambiar &color de tipografía" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +msgid "Emoticons" +msgstr "Emoticonos" + +#: chat/chatwindow.cpp:658 +msgid "My emoticons" +msgstr "Mis emoticonos" + +#: chat/chatwindow.cpp:738 #, fuzzy msgid "&Settings" msgstr "Preferencias" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "Mostrar emot&iconos" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +#, fuzzy +msgid "Hide Side&bar" +msgstr "Barra lateral" + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "Barra lateral" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +#, fuzzy +msgid "Hide the contact sidebar" +msgstr "Muestra u oculta la barra lateral" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +#, fuzzy +msgid "Close all tabs" +msgstr "Cerrar pestaña" + +#: chat/chatwindow.cpp:856 +#, fuzzy +msgid "Close current tab" +msgstr "Cerrar pestaña" + +#: chat/chatwindow.cpp:1467 +#, fuzzy +msgid "Show Side&bar" +msgstr "Barra lateral" + +#: chat/chatwindow.cpp:1468 +#, fuzzy +msgid "Show the contact sidebar" +msgstr "Muestra u oculta la barra lateral" + +#: chat/chatwindow.cpp:1565 +msgid "%1 is typing." +msgstr "%1 estÔ escribiendo." + +#: chat/chatwindow.cpp:1575 +msgid "%1 and %2 are typing." +msgstr "%1 y %2 estan escribiendo." + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "%1, %2 y %3 otros estan escribiendo." + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "Conversación" + +#: chat/chatwindow.cpp:1615 +#, fuzzy +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "Conversación con %1" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "&Enviar correo" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 msgid "&View Profile" msgstr "&Ver perfil" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "&Agregar contacto" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 msgid "A&llow Contact" msgstr "&Admitir contacto" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 msgid "&Delete Contact" msgstr "&Eliminar contacto" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "&Bloquear contacto" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "&Readmitir contacto" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 msgid "&Friendly Name" msgstr "Nombre de usuario (nick)" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "Mensaje &Personal" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 msgid "&Email Address" msgstr "Corr&eo Electrónico:" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "&Copiar.." -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 msgid "Blocked" msgstr "Sin admisión" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 #, fuzzy msgid "The contact is %1" msgstr "Este contacto no esta en línea" -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +#, fuzzy +msgid "Add to Chat" +msgstr "Agregar un contacto" + +#: chat/emoticonsidebar.cpp:213 +#, fuzzy +msgid "Insert new" +msgstr "Insertar un emoticono" + +#: chat/emoticonsidebar.cpp:214 +msgid "Edit" +msgstr "" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +#, fuzzy +msgid "Remove" +msgstr "Eliminado" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 #, fuzzy msgid "Web Messenger" msgstr "Diseño web" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +#, fuzzy +msgid "Windows Live Messenger %1" +msgstr "Diseño web" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "Conectado" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "Desconectado" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "Admitido" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "Eliminado" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 +#, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr "%1 %2" + +#: contactlistviewdelegate.cpp:150 #, fuzzy msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "%1 %2" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" -msgstr "Esta cuenta no tiene una bandeja de entrada de Hotmail!" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "Ausente" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "Vuelvo enseguida" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "Ocupado" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "Desconectado" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" +msgstr "Inactivo" + +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "Al Teléfono" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "Sali a Comer" + +#: dialogs/addcontactdialog.cpp:48 #, fuzzy msgid "Add a Contact" msgstr "Agregar un contacto" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 #, fuzzy msgid "No group" msgstr "Eliminar grupo" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 msgid "Add New Emoticon" msgstr "Agregar nuevo emoticono" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "Emoticonos" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "El emoticono \"%1\" ya existe, desea reemplazarlo?" @@ -1362,65 +1932,69 @@ msgstr "El emoticono \"%1\" ya existe, desea reemplazarlo?" msgid "Specify an Away message" msgstr "Especifique un mensaje de ausencia" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "Usar un nombre alternativo para esta persona" +#: dialogs/contactaddeduserdialog.cpp:85 +#, fuzzy +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " +msgstr "" +"%1\n" +"le ha agregado a su lista de contactos. ¿Qué desea hacer?" -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" -msgstr "Mostrar una notificación cuando esta persona se conecte o desconecte" +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "Conectado" -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "Foto:" +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +msgid "Not seen yet" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "Sonido:" +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +#, fuzzy +msgid "No messages yet" +msgstr "Mostrar la &hora en los mensajes" -#: dialogs/contactpropertiesdialog.cpp:234 -msgid "Contact Properties for %1" -msgstr "Propiedades de contacto %1" +#: dialogs/contactpropertiesdialog.cpp:381 +msgid "Last seen: %1" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " -msgstr "Correo electronico: " +#: dialogs/contactpropertiesdialog.cpp:382 +msgid "Last message: %1" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "Nombre actual: " +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "Email" -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" -msgstr "Ventana de Red" +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "Cliente de correo" -#: dialogs/networkwindow.cpp:57 +#: dialogs/networkwindow.cpp:79 #, fuzzy msgid "S&ave tab" msgstr "Guardar pestaña" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 #, fuzzy msgid "C&lear tab" msgstr "Limpiar pestaña" -#: dialogs/networkwindow.cpp:59 -#, fuzzy -msgid "Cl&ose tab" -msgstr "Cerrar pestaña" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 #, fuzzy msgid "" "No connections are present.\n" "Cannot open the Network Window." msgstr "No hay conexiónes activas. No se puede abrir la Ventana de Red" -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 #, fuzzy msgid "" "Could not save the Network Window log. Make sure you have permission to " @@ -1429,59 +2003,86 @@ msgstr "" "No se pudo guardar el registro de la Ventana de Red. Asegurate que tienes " "permiso para escribir en la carpeta dond el registro esta siendo guardado." -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "No se puede cerrar la pentaña principal de conexión." -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +#, fuzzy +msgid "Cannot send commands to this kind of connection!" +msgstr "No se puede cerrar la pentaƱa principal de conexión." + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 #, fuzzy msgid "Completed" msgstr "Computadora" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "%1 MB" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "%1 kB" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "%1 bytes" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +msgid "%1 of %2 received." msgstr "" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +msgid "%1 of %2 sent." msgstr "" -#: dialogs/transferwindow.cpp:55 -msgid "File Transfers" -msgstr "Transferencias de archivo" +#: dialogs/transferentry.cpp:373 +msgid "infinite" +msgstr "" -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 #, fuzzy msgid "Cl&ean Up" msgstr "Lim&piar" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " "the theme folder '%1'." @@ -1489,405 +2090,447 @@ msgstr "" "No se pudo guardar el tema de emoticonos. Asegurate de tener permiso para " "escribir a la carpeta de temas \"%1\"" -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 msgid "Smile" msgstr "Sonrisa" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "GuiƱo" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "Lengua" -#: emoticontheme.cpp:797 +#: emoticontheme.cpp:812 msgid "Big smile" msgstr "Gran sonrisa" -#: emoticontheme.cpp:798 +#: emoticontheme.cpp:813 msgid "Sad" msgstr "Triste" -#: emoticontheme.cpp:799 +#: emoticontheme.cpp:814 msgid "Crying" msgstr "Llorando" -#: emoticontheme.cpp:800 +#: emoticontheme.cpp:815 msgid "Angry" msgstr "Molesto" -#: emoticontheme.cpp:801 +#: emoticontheme.cpp:816 msgid "Confused" msgstr "Confundido" -#: emoticontheme.cpp:802 +#: emoticontheme.cpp:817 msgid "Embarrassed" msgstr "Avergonzado" -#: emoticontheme.cpp:803 +#: emoticontheme.cpp:818 msgid "Disappointed" msgstr "Desilusionado" -#: emoticontheme.cpp:804 +#: emoticontheme.cpp:819 msgid "Hot" msgstr "Caliente" -#: emoticontheme.cpp:805 +#: emoticontheme.cpp:820 msgid "Baring teeth" msgstr "Muestra dientes" -#: emoticontheme.cpp:806 +#: emoticontheme.cpp:821 msgid "Nerd" msgstr "Genio" -#: emoticontheme.cpp:807 +#: emoticontheme.cpp:822 msgid "Sick" msgstr "Enfermo" -#: emoticontheme.cpp:808 +#: emoticontheme.cpp:823 msgid "Surprised" msgstr "Sorprendido" -#: emoticontheme.cpp:809 +#: emoticontheme.cpp:824 msgid "Party" msgstr "Fiesta" -#: emoticontheme.cpp:810 +#: emoticontheme.cpp:825 msgid "Sleepy" msgstr "Dormilón" -#: emoticontheme.cpp:811 +#: emoticontheme.cpp:826 msgid "Thinking" msgstr "Pensando" -#: emoticontheme.cpp:812 +#: emoticontheme.cpp:827 msgid "Don't tell anyone" msgstr "Sin comentarios" -#: emoticontheme.cpp:813 +#: emoticontheme.cpp:828 msgid "Secret telling" msgstr "Secreto" -#: emoticontheme.cpp:814 +#: emoticontheme.cpp:829 msgid "Eye-rolling" msgstr "Cansado" -#: emoticontheme.cpp:815 +#: emoticontheme.cpp:830 msgid "Sarcastic" msgstr "Sarcastico" -#: emoticontheme.cpp:816 +#: emoticontheme.cpp:831 msgid "I don't know" msgstr "No se" -#: emoticontheme.cpp:817 +#: emoticontheme.cpp:832 msgid "Be right back" msgstr "Vuelvo enseguida" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "Ɓngel" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "Abrazo" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "NiƱo" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "Corazón" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "Rosa" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "Ok" -#: emoticontheme.cpp:824 +#: emoticontheme.cpp:839 msgid "Dog face" msgstr "Perro" -#: emoticontheme.cpp:825 +#: emoticontheme.cpp:840 msgid "Sun" msgstr "Sol" -#: emoticontheme.cpp:826 +#: emoticontheme.cpp:841 msgid "Devil" msgstr "Demonio" -#: emoticontheme.cpp:827 +#: emoticontheme.cpp:842 msgid "Right hug" msgstr "Abrazo" -#: emoticontheme.cpp:828 +#: emoticontheme.cpp:843 msgid "Girl" msgstr "NiƱa" -#: emoticontheme.cpp:829 +#: emoticontheme.cpp:844 msgid "Broken heart" msgstr "Corazón roto" -#: emoticontheme.cpp:830 +#: emoticontheme.cpp:845 msgid "Wilted rose" msgstr "Rosa marchita" -#: emoticontheme.cpp:831 +#: emoticontheme.cpp:846 msgid "Thumbs down" msgstr "Mal" -#: emoticontheme.cpp:832 +#: emoticontheme.cpp:847 msgid "Cat face" msgstr "Gato" -#: emoticontheme.cpp:833 +#: emoticontheme.cpp:848 msgid "Sleeping half-moon" msgstr "Durmiendo" -#: emoticontheme.cpp:834 +#: emoticontheme.cpp:849 msgid "Red lips" msgstr "Labios" -#: emoticontheme.cpp:835 +#: emoticontheme.cpp:850 msgid "Clapping" msgstr "Aplaude" -#: emoticontheme.cpp:836 +#: emoticontheme.cpp:851 msgid "Crossed fingers" msgstr "Cruza dedos" -#: emoticontheme.cpp:837 +#: emoticontheme.cpp:852 msgid "Auto" msgstr "Auto" -#: emoticontheme.cpp:838 +#: emoticontheme.cpp:853 msgid "Airplane" msgstr "Avión" -#: emoticontheme.cpp:839 +#: emoticontheme.cpp:854 msgid "Turtle" msgstr "Tortuga" -#: emoticontheme.cpp:840 +#: emoticontheme.cpp:855 msgid "Snail" msgstr "Gusano" -#: emoticontheme.cpp:841 +#: emoticontheme.cpp:856 msgid "Black sheep" msgstr "Oveja negra" -#: emoticontheme.cpp:842 +#: emoticontheme.cpp:857 msgid "Goat" msgstr "Cabra" -#: emoticontheme.cpp:843 +#: emoticontheme.cpp:858 msgid "Vampire bat" msgstr "Murcielago" -#: emoticontheme.cpp:844 +#: emoticontheme.cpp:859 msgid "Pizza" msgstr "Pizza" -#: emoticontheme.cpp:845 +#: emoticontheme.cpp:860 msgid "Beer mug" msgstr "Cerveza" -#: emoticontheme.cpp:846 +#: emoticontheme.cpp:861 msgid "Martini glass" msgstr "Martini" -#: emoticontheme.cpp:847 +#: emoticontheme.cpp:862 msgid "Coffee cup" msgstr "CafĆ©" -#: emoticontheme.cpp:848 +#: emoticontheme.cpp:863 msgid "Birthday cake" msgstr "Pastel de cumpleaƱos" -#: emoticontheme.cpp:849 +#: emoticontheme.cpp:864 msgid "Plate" msgstr "Plato" -#: emoticontheme.cpp:850 +#: emoticontheme.cpp:865 msgid "Bowl" msgstr "Tazón" -#: emoticontheme.cpp:851 +#: emoticontheme.cpp:866 msgid "Star" msgstr "Estrella" -#: emoticontheme.cpp:852 +#: emoticontheme.cpp:867 msgid "Rainbow" msgstr "Arcoiris" -#: emoticontheme.cpp:853 +#: emoticontheme.cpp:868 msgid "Stormy cloud" msgstr "Tormenta" -#: emoticontheme.cpp:854 +#: emoticontheme.cpp:869 msgid "Lightning" msgstr "Rayos" -#: emoticontheme.cpp:855 +#: emoticontheme.cpp:870 msgid "Umbrella" msgstr "Paraguas" -#: emoticontheme.cpp:856 +#: emoticontheme.cpp:871 msgid "Island with a palm tree" msgstr "Isla y palmera" -#: emoticontheme.cpp:857 +#: emoticontheme.cpp:872 msgid "Telephone receiver" msgstr "Telefono" -#: emoticontheme.cpp:858 +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "Celular" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "Email" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 msgid "Clock" msgstr "Reloj" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 msgid "Camera" msgstr "Camara" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "Pelicula" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "Nota" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "Esposas" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 msgid "Money" msgstr "Dinero" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "Foco" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "Cigarrillo" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "Pelota" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "Regalo con moƱo" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "X-Box" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "Computadora" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 msgid "KMess Icon" msgstr "Icono KMess" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "El servidor no estĆ” disponible" + +#: initialview.cpp:377 +msgid "Connect" +msgstr "Conectar" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "&Desconectar" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "" -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "" -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "Nuevo &Grupo" + +#: kmess.cpp:226 msgid "Add a group" msgstr "Agregar grupo" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "Introduzca el nombre nuevo para este grupo:" -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "La dirección de contacto que has entrado no es valida: \"%1\"" - -#: kmess.cpp:638 +#: kmess.cpp:569 msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" msgstr "ĀæSeguro que quiere eliminar el contacto %1?" -#: kmess.cpp:640 +#: kmess.cpp:571 msgid "Remove contact" msgstr "Eliminar contacto" -#: kmess.cpp:641 kmess.cpp:684 -#, fuzzy -msgid "Remove" -msgstr "Eliminado" - -#: kmess.cpp:642 +#: kmess.cpp:573 msgid "Remove and block" msgstr "Eliminar y no admitir" -#: kmess.cpp:681 +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "ĀæSeguro que quiere eliminar el grupo %1?" -#: kmess.cpp:683 -msgid "Remove group" -msgstr "Eliminar grupo" +#: kmess.cpp:631 +#, fuzzy +msgctxt "dialog button" +msgid "Remove" +msgstr "Eliminado" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "Ɖste es un grupo especial que no puede ser cambiado." -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 msgid "Rename group" msgstr "Renombrar grupo" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "Conectado" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "Fallo en la autentificación de usuario" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "Desconectado" -#: kmess.cpp:1441 +#: kmess.cpp:1408 +#, fuzzy msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" "

KMess no podrĆ” reproducir sonidos ni notificaciones.

El archivo " "de KMess 'eventsrc' no pudo ser encontrado en una de las siguientes " "carpetas: %1

Por favor verifica tu instalación y copia el archivo " "faltante a una de las carpetas listadas.

" -#: kmess.cpp:1445 +#: kmess.cpp:1412 msgid "Error with notifications" msgstr "Error con las notificaciones" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "KMess" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "&Acciones" @@ -1909,214 +2552,245 @@ msgstr "&Buscar contacto" msgid "Search by &Interest" msgstr "Buscar por &interés" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "&Buscar contacto" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "Nueva &Cuenta" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "O&pciones de la cuenta" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "Co&nectar" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "&Desconectar" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "Mostrar mi &perfil" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "&Mi Estado" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "Ausente con respuesta automÔtica" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "Mostrar contactos &admitidos" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 msgid "Show &Offline Contacts" msgstr "Mostrar contactos &desconectados" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "Mostrar contactos &eliminados" -#: kmessinterface.cpp:303 +#: kmessinterface.cpp:318 #, fuzzy -msgid "Show &Display Pictures" +msgid "Show &Empty Groups" +msgstr "Mostrar emot&iconos" + +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" msgstr "Mostrar foto" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "Sonrisa" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "&Ordenar contactos por" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "Grupo" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "Conectados/Desconectados" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "Mostrar ventana de &transferencias" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "Mostrar ventana de red" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "Escuchando %1" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +msgid "[%1] %2 goes online" +msgstr "" + +#: kmessview.cpp:363 +msgid "[%1] %2 goes offline" +msgstr "" + +#: kmessview.cpp:559 msgid "Cha&t" msgstr "Conversación" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "&Propiedades" -#: kmessview.cpp:492 +#: kmessview.cpp:569 msgid "&Remove from group" msgstr "Eliminar del grupo" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +#, fuzzy +msgid "&Listening Music" +msgstr "Escuchando %1" + +#: kmessview.cpp:601 msgid "&Copy to Group" msgstr "&Copiar al grupo" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "&Mover al grupo" -#: kmessview.cpp:549 +#: kmessview.cpp:646 msgid "Move Group &Down" msgstr "&Mover al grupo" -#: kmessview.cpp:550 +#: kmessview.cpp:647 msgid "Move Group &Up" msgstr "&Mover al grupo" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "Eli&minar grupo" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "Re&nombrar grupo" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 #, fuzzy msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "Email" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "" -#: kmessview.cpp:918 +#: kmessview.cpp:1075 +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "" + +#: kmessview.cpp:1076 +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "" + +#: kmessview.cpp:1085 #, fuzzy msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "
%1 (%2)" -#: kmessview.cpp:921 +#: kmessview.cpp:1090 #, fuzzy -msgctxt "Contacts count in group tooltip" +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "Contactos" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +#, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "Este contacto no esta en lĆ­nea" + +#: kmessview.cpp:1504 #, fuzzy msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "Escriba su mensaje personal aquĆ­" -#: kmessview.cpp:1543 -msgid "You have 1 new e-mail in your inbox." -msgstr "Mensaje nuevo en su bandeja de entrada" +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" -#: kmessview.cpp:1547 -msgid "You have %1 new emails in your inbox." -msgstr "%1 mensajes nuevos en su bandeja de entrada" - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "KMess" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 #, fuzzy msgid "Project support" msgstr "Soporte para el campo \"P4-Context\"" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 #, fuzzy msgid "Current developer" msgstr "Desarrollador de GnomeMeeting" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 msgid "" "German translation, testing, documentation, web master, project management, " "etc..." @@ -2124,577 +2798,473 @@ msgstr "" "Traducción al alemĆ”n, pruebas, documentación webmaster, gestión del " "proyecto, etc..." -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "DiseƱo web" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "" "El juego de emoticonos amarillo/azul/violeta y la traducción al italiano" -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "Emoticonos de cómic" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "Tema de sonido por defecto" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "" "Traducción al Ć”rabe, internacionalización de parche para guardar archivos." -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 msgid "More Arabic translation" msgstr "Mas traducciones al Arabe" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "Traducción al portuguĆ©s brasileƱo" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 msgid "Catalan translation" msgstr "Traducción al catalĆ”n" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "" "Traducción al chino simplificado, arreglo de un bug en elenvio de archivos, " "codigo de conexiónes proxy" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 msgid "More Simplified Chinese translation" msgstr "MĆ”s traducciones al chino simplificado" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 msgid "Traditional Chinese translation" msgstr "Traducción al chino tradicional" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 msgid "Danish translation" msgstr "Traducción al danes" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 msgid "More Danish translation" msgstr "MĆ”s traducciones al danes" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "Traducción al danĆ©s" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 msgid "More Dutch translation" msgstr "MĆ”s traducciones al danĆ©s" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 msgid "Estonian translation" msgstr "Traducción al estonio" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 msgid "Finnish translation" msgstr "Traducción al finlandĆ©s" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 msgid "More Finnish translation" msgstr "MĆ”s traducciónes al finlandĆ©s" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "Traducción al francĆ©s" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 msgid "More French translation, MSN6 emoticon definitions" msgstr "Mas traducciones al francĆ©s, emoticonos MSN6" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 msgid "More French translation" msgstr "MĆ”s traducción al francĆ©s" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 msgid "Hungarian translation" msgstr "Traducción al hungaro" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 msgid "More Italian translation" msgstr "MĆ”s traducciones al italiano" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "Traducción al coreano" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 msgid "Norsk BokmĆ„l translation" msgstr "Traducción al Norsk BokmĆ„l" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 msgid "Slovenian translation" msgstr "Traducción al esloveno" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "Traducción al espaƱol" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 msgid "More Spanish translation" msgstr "MĆ”s traducciones al espaƱol" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 msgid "Swedish translation" msgstr "Traducción al sueco" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 msgid "Thai translation" msgstr "Traducción al tailandĆ©s" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "Traducción al turco" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "Traducción al turco" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -#, fuzzy -msgid "Guido Solinas" -msgstr "&Se conecten" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "Transferencias de archivo" + +#: main.cpp:134 msgid "P4-Context field support" msgstr "Soporte para el campo \"P4-Context\"" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "Correcciones de Xinerama" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "Código original de recepción de archivos" -#: main.cpp:120 -msgid "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" msgstr "" -#: main.cpp:120 +#: main.cpp:138 +#, fuzzy +msgid "KWallet support" +msgstr "Soporte para el campo \"P4-Context\"" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "Varias correcciones a la internacionalización." + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "Varias correcciones a la internacionalización." -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "Desarrollador de GnomeMeeting" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "Tipo con una bolsa en la cabeza" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "Inspiración y certeza del código" -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 +#: main.cpp:150 msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "" "Código de notificación emergente, código p2p inicial, manejo del \"msn " "challenge\"" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "Código del temporizador" -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 +#: main.cpp:152 msgid "Close-to-tray icon screenshot code" msgstr "" -#: main.cpp:131 +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 msgid "Your name here?" msgstr "Su nombre aqui" -#: main.cpp:131 +#: main.cpp:156 #, fuzzy msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" "Los parches y correcciones de errores son bienvenidos en los foros de ayuda " "de KMess! Si crees que falta tu nombre aqui, por favor contactanos." -#: main.cpp:134 +#: main.cpp:159 #, fuzzy msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Su nombre" -#: main.cpp:135 +#: main.cpp:160 #, fuzzy msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "Su dirección de correo:" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "Iniciar sesion automĆ”ticamente con la dirección dada" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 msgid "The contact cancelled the session." msgstr "Su contacto ha cancelado la sesión." -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 msgid "The contact rejected the invitation." msgstr "Su contacto ha rechazado la invitación." -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 msgid "You have cancelled the session." msgstr "Ha cancelado la sesión." -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "Ha rechazado la invitación" -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +#, fuzzy +msgid "Do you want to accept or cancel?" msgstr "Desea ACEPTAR o CANCELAR el envio?" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +#, fuzzy +msgid "Click to cancel." msgstr "Clic para cancelar" -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 msgid "Do you want to accept the file: %1 (%2)" msgstr "ĀæQuiere aceptar el archivo: %1 (%2)?" -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 msgid "The transfer of %1 failed. Couldn't open file." msgstr "La transferencia de %1 falló. No se pudo abrir el archivo" -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "Transferencia aceptada." + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 msgid "Connecting to %1, port %2" msgstr "Conectando a %1, puerto %2" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 msgid "The transfer was cancelled" msgstr "La transferencia fue cancelada" -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 msgid "Connection established" msgstr "Conexión establecida" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 msgid "Successfully transferred file: %1" msgstr "Archivo transferido con Ć©xito: %1" -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 msgid "The transfer of %1 failed. The file does not exist." msgstr "La transferencia de %1 falló. El archivo no existe." -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 msgid "The transfer of %1 failed. The file could not be read." msgstr "La transferencia de %1 falló. El archivo no pudo ser leĆ­do." -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 msgid "Sending file %1" msgstr "Enviando archivo %1" -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "Transferencia aceptada." - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "" "La transferencia de archivo fue cancelada. Fue recibida información corrupta." -#: network/applications/filetransferp2p.cpp:345 -msgid "The transfer of %1 failed. Couldn't open file" +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." +msgstr "" + +#: network/applications/filetransferp2p.cpp:348 +#, fuzzy +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "El archivo %1 ya existe. Deseas sobreescribirlo?" + +#: network/applications/filetransferp2p.cpp:378 +#, fuzzy +msgid "The transfer of file "%1" failed. Couldn't save the file." msgstr "La transferencia de %1 falló. No se pudo abrir el archivo" -#: network/applications/filetransferp2p.cpp:524 -msgid "The contact cancelled the transfer." +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 +#, fuzzy +msgid "The contact has cancelled the transfer of file "%1"." msgstr "Su contacto ha cancelado la transferencia." -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "Ha cancelado la sesión." + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "" -#: network/applications/filetransferp2p.cpp:768 -msgid "The transfer of %1 failed. The file does not exist." +#: network/applications/filetransferp2p.cpp:676 +#, fuzzy +msgid "Successfully sent file "%1"." +msgstr "Archivo transferido con Ć©xito: %1" + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "Archivo transferido con Ć©xito: %1" + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "La transferencia de %1 falló. El archivo no existe. " -#: network/applications/filetransferp2p.cpp:773 -msgid "The transfer of %1 failed. The file could not be read." +#: network/applications/filetransferp2p.cpp:818 +#, fuzzy +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "La transferencia de %1 falló. El archivo no puede ser leĆ­do." -#: network/applications/filetransferp2p.cpp:809 -msgid "Sending file %1 (%2)" +#: network/applications/filetransferp2p.cpp:855 +#, fuzzy +msgid "Sending file "%1" (%2)." msgstr "Enviando archivo %1 (%2)" -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "Su contacto ha cancelado la transferencia." + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "Has sido invitado para comenzar videoconferencia (via GnomeMeeting)." -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 msgid "Starting GnomeMeeting. Connecting to %1." msgstr "Abriendo GnomeMeeting. Conectando a %1." -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "Proponiendo al contacto el inicio de videoconferencia." -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "La invitación fue rechazada. No es soportada por el otro cliente." -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 msgid "The invitation was aborted. An internal error occured." msgstr "La invitación fue cancelada. Ocurrió un error interno." -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "" "La invitación fue cancelada. Se acabo el tiempo esperando que el usuario " "acepte." -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "" "La invitación fue cancelada. Se acabo el tiempo esperando por la información " "de archivo." -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "La invitación fue cancelada. El sistema cerro la comunicación." -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 msgid "The invitation was aborted." msgstr "La invitación fue cancelada." -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "Has sido invitado a compartir el escritorio de esta persona." -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 msgid "Starting KRDC. Connecting to %1." msgstr "Abriendo KRDC. Conectando a %1." -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." -msgstr "El contacto inicio una acción MSN que KMess aun no puede manejar." +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +msgid "The contact rejected the invitation. An internal error occured." +msgstr "Su contacto rechazo la invitación. Ocurrió un error interno." -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +msgid "The transfer failed." +msgstr "La transferencia falló" + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." @@ -2702,70 +3272,62 @@ msgstr "" "La invitación fue cancelada. El contacto envio información equivocada, o " "KMess no ofrece soporte." -#: network/applications/p2papplication.cpp:1503 -msgid "The transfer failed. Data preparation failed." -msgstr "La transferencia falló. La preparación falló." - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -msgid "The contact rejected the invitation. An internal error occured." -msgstr "Su contacto rechazo la invitación. Ocurrió un error interno." - -#: network/applications/p2papplication.cpp:1626 -msgid "The transfer failed." -msgstr "La transferencia falló" - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "La transferencia ha fallado. El contacto ha enviado datos defectuosos, o " "KMess no lo soporta." -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "" +"La transferencia falló. Fuera de tiempo esperando que el usuario acepte." + +#: network/applications/p2papplicationbase.cpp:1015 +msgid "The transfer failed. An internal error occured." +msgstr "La transferencia falló. Ocurrió un error interno." + +#: network/applications/p2papplicationbase.cpp:1176 +msgid "The transfer failed. Couldn't open data source." +msgstr "La transferencia falló. No se pudo abrir la fuente de datos." + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "El contacto inicio una acción MSN que KMess aun no puede manejar." + +#: network/applications/p2papplication.cpp:1071 +msgid "The transfer failed. Data preparation failed." +msgstr "La transferencia falló. La preparación falló." + +#: network/applications/p2papplication.cpp:1178 msgid "The invitation was cancelled. Message was not directed to us." msgstr "La invitación fue cancelada. El mensaje no era dirigido a usted." -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "La transferencia ha fallado. El contacto ha enviado datos defectuosos, o " "KMess no lo soporta." -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "Esperando conexión en %1, puerto %2" -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "Enviando por mĆ©todo indirecto (la transferencia serĆ” mĆ”s lenta)." -#: network/applications/p2papplication.cpp:3297 -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "" -"La transferencia falló. Fuera de tiempo esperando que el usuario acepte." - -#: network/applications/p2papplication.cpp:3316 -msgid "The transfer failed. An internal error occured." -msgstr "La transferencia falló. Ocurrió un error interno." - -#: network/applications/p2papplication.cpp:3693 -msgid "The transfer failed. Couldn't open data source." -msgstr "La transferencia falló. No se pudo abrir la fuente de datos." - -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:3113 #, fuzzy msgid "Waiting for connection" msgstr "Esperando por lista de contactos..." -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " "accept." @@ -2773,24 +3335,24 @@ msgstr "" "La invitación fue cancelada. Se acabo el tiempo esperando que el contacto " "aceptara." -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." msgstr "" "La invitación fue cancelada. El lĆ­mite de tiempo de conexión se ha excedido." -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "" "La invitación fue cancelada. Se acabo el tiempo esperando la información." -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 msgid "You are invited to start a voice conversation." msgstr "Has sido invitado a una conversación vocal." -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 msgid "" "You are invited to start a voice conversation but support for this was not " "installed" @@ -2798,28 +3360,28 @@ msgstr "" "Has sido invitado a una conversación vocal pero el soporte para esto no fue " "instalado." -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 msgid "You have cancelled the voice conversation." msgstr "Ha cancelado la conversación vocal." -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "" "La invitación fue cancelada. El dispositivo de audio no pudo ser abierto." -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 msgid "Start voice conversation. Connecting to %1." msgstr "Abriendo conversación vocal. Conectando a %1." -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 msgid "Start voice conversation. Listening on %1." msgstr "Inicia conversación vocal. Escuchando en %1." -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 msgid "Inviting the contact to a voice conversation." msgstr "Proponiendo al contacto el inicio de conversación vocal." -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 msgid "The contact is inviting you for '%1', but this is not implemented yet." msgstr "" @@ -2868,631 +3430,771 @@ msgstr "No se ha podido establecer la conexion: %1" msgid "Receiving file %1" msgstr "Recibiendo archivo %1" -#: network/msnconnection.cpp:477 -msgid "1 ping lost" -msgstr "SeƱal perdida" +#: network/msnconnection.cpp:589 +#, fuzzy +msgid "KMess could not access the remote webservice.
Details: %1" +msgstr "KMess no ha podido acceder al servicio web.

Detalles: %1" -#: network/msnconnection.cpp:481 -msgid "%1 pings lost" -msgstr "%1 señales perdidas" - -#: network/msnconnection.cpp:496 -msgid "The connection to the server was lost." -msgstr "Se ha perdido la conexión con el servidor." - -#: network/msnconnection.cpp:704 +#: network/msnnotificationconnection.cpp:1317 #, fuzzy msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." -msgstr "" -"KMess no ha podido conectar con el servidor de MSN Messenger.
Asegurese " -"que esta conectado a internet
Error %1 (código %2)." - -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "El servidor ha cerrado la conexión." - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" -"KMess no ha podido conectarse con los servidores de MSN Messenger. Los " -"servidores pueden estar temporalmente no disponibles, o puede haber un " -"problema con tu conexión a internet." - -#: network/msnnotificationconnection.cpp:724 -msgid "Show MSN Messenger Service status?" -msgstr "¿Mostrar estado del servicio .NET?" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "Error del servidor" - -#: network/msnnotificationconnection.cpp:1344 -#, fuzzy -msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" msgstr "" "Ha sido desconectado porque se conectó \n" "desde otro cliente de MSN Messenger \n" "o desde otra ubicación" -#: network/msnnotificationconnection.cpp:1558 +#: network/msnnotificationconnection.cpp:1532 msgid "Got synchronization" msgstr "Sincronización establecida..." -#: network/msnnotificationconnection.cpp:1699 -msgid "Authenticating" +#: network/msnnotificationconnection.cpp:1670 +#, fuzzy +msgid "Authenticating..." msgstr "Autentificando..." -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "Confirmación de usuario recibida..." - -#: network/msnnotificationconnection.cpp:1752 +#: network/msnnotificationconnection.cpp:1719 msgid "Waiting for contact list..." msgstr "Esperando por lista de contactos..." -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "Transferencia al servidor de notificación" +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." +msgstr "" -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" +#: network/msnnotificationconnection.cpp:1894 +#, fuzzy +msgid "Authentication failed, please verify your account name and password." msgstr "Falló la autentificación, por favor verifique su nombre y contraseƱa." -#: network/msnnotificationconnection.cpp:2042 +#: network/msnnotificationconnection.cpp:1993 msgid "Connecting..." msgstr "Conectando..." -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" +#: network/msnnotificationconnection.cpp:2167 +#, fuzzy +msgid "Unknown command received from the server: %1" msgstr "KMess recibió un mensaje de error desconocido del servidor: %1" -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 +#: network/msnnotificationconnection.cpp:2192 msgid "Invalid command syntax" msgstr "" -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -msgid "There was an internal error in KMess: %1" -msgstr "Error interno del servidor en KMess: %1" - -#: network/msnnotificationconnection.cpp:2243 +#: network/msnnotificationconnection.cpp:2196 msgid "Invalid command parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2246 +#: network/msnnotificationconnection.cpp:2199 msgid "The email you have tried to add is not a MSN Messenger account" msgstr "El correo que ha tratado de agregar no es una cuenta de MSN Messenger" -#: network/msnnotificationconnection.cpp:2249 +#: network/msnnotificationconnection.cpp:2204 msgid "Domain name missing" msgstr "" -#: network/msnnotificationconnection.cpp:2252 +#: network/msnnotificationconnection.cpp:2208 msgid "Already logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2255 +#: network/msnnotificationconnection.cpp:2211 msgid "The account name given is invalid" msgstr "El nombre de cuenta proveĆ­do es invĆ”lido." -#: network/msnnotificationconnection.cpp:2258 +#: network/msnnotificationconnection.cpp:2215 msgid "" "That account name is invalid, or your passport has not been confirmed yet" msgstr "" "El nombre de cuenta es invĆ”lido, o su contraseƱa no fue confirmada aĆŗn." -#: network/msnnotificationconnection.cpp:2261 +#: network/msnnotificationconnection.cpp:2218 msgid "Your contact list is full" msgstr "Su lista de contactos estĆ” completa" -#: network/msnnotificationconnection.cpp:2264 +#: network/msnnotificationconnection.cpp:2223 msgid "Invalid SBP parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2267 +#: network/msnnotificationconnection.cpp:2226 msgid "This contact is already on your list" msgstr "Este contacto ya este en su lista." -#: network/msnnotificationconnection.cpp:2270 +#: network/msnnotificationconnection.cpp:2230 msgid "This contact is not on your list" msgstr "Este contacto aĆŗn no este en su lista." -#: network/msnnotificationconnection.cpp:2273 +#: network/msnnotificationconnection.cpp:2234 msgid "This contact is not online" msgstr "Este contacto no esta en lĆ­nea" -#: network/msnnotificationconnection.cpp:2276 +#: network/msnnotificationconnection.cpp:2239 msgid "Already in this mode" msgstr "" -#: network/msnnotificationconnection.cpp:2279 +#: network/msnnotificationconnection.cpp:2243 #, fuzzy msgid "Contact is in the opposite list" msgstr "Este contacto aĆŗn no este en su lista." -#: network/msnnotificationconnection.cpp:2282 -msgid "Your contact list has too many groups" -msgstr "Su lista de contactos tiene demasiados grupos" - -#: network/msnnotificationconnection.cpp:2285 -msgid "This group can't be changed" -msgstr "Ɖste es un grupo que no puede ser cambiado." - -#: network/msnnotificationconnection.cpp:2288 -msgid "This group is not empty" -msgstr "Este grupo no esta vacĆ­o" - -#: network/msnnotificationconnection.cpp:2291 +#: network/msnnotificationconnection.cpp:2247 +#, fuzzy msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." msgstr "" "Este nombre de grupo ya esta en uso por su lista de contactos Messenger o " "Hotmail" -#: network/msnnotificationconnection.cpp:2294 +#: network/msnnotificationconnection.cpp:2251 +msgid "Your contact list has too many groups" +msgstr "Su lista de contactos tiene demasiados grupos" + +#: network/msnnotificationconnection.cpp:2255 +msgid "This group can't be changed" +msgstr "Ɖste es un grupo que no puede ser cambiado." + +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "Su lista de contactos tiene demasiados grupos" + +#: network/msnnotificationconnection.cpp:2264 +msgid "This group is not empty" +msgstr "Este grupo no esta vacĆ­o" + +#: network/msnnotificationconnection.cpp:2268 msgid "The group name is too long" msgstr "El nombre del grupo es demasiado largo" -#: network/msnnotificationconnection.cpp:2297 +#: network/msnnotificationconnection.cpp:2273 msgid "Attempted to change group \"0\"" msgstr "" -#: network/msnnotificationconnection.cpp:2300 +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +msgid "There was an internal error in KMess: %1" +msgstr "Error interno del servidor en KMess: %1" + +#: network/msnnotificationconnection.cpp:2277 #, fuzzy msgid "Invalid Group" msgstr "Re&nombrar grupo" -#: network/msnnotificationconnection.cpp:2303 +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 msgid "Switchboard server failed" msgstr "Fallo del servicio" -#: network/msnnotificationconnection.cpp:2306 +#: network/msnnotificationconnection.cpp:2287 msgid "Transfer to switchboard server failed" msgstr "Transferencia al servidor de intercambio fallida" -#: network/msnnotificationconnection.cpp:2309 +#: network/msnnotificationconnection.cpp:2291 msgid "Direct connection (MSNSLP) error, connection failed" msgstr "Error de conexión directa (MSNSLP), la conexión ha fallado." -#: network/msnnotificationconnection.cpp:2312 +#: network/msnnotificationconnection.cpp:2295 msgid "Required field missing" msgstr "" -#: network/msnnotificationconnection.cpp:2315 +#: network/msnnotificationconnection.cpp:2299 msgid "Not logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" -msgstr "Error accesando a su lista de contactos, intente en otro momento" +#: network/msnnotificationconnection.cpp:2302 +#, fuzzy +msgid "No permissions given for this account" +msgstr "Emoticones personalizados para esta cuenta:" -#: network/msnnotificationconnection.cpp:2322 +#: network/msnnotificationconnection.cpp:2307 msgid "Command is disabled" msgstr "" -#: network/msnnotificationconnection.cpp:2325 +#: network/msnnotificationconnection.cpp:2310 msgid "Your account is banned." msgstr "Su cuenta tiene el acceso prohibido." -#: network/msnnotificationconnection.cpp:2329 +#: network/msnnotificationconnection.cpp:2314 #, fuzzy msgid "Challenge response failed" msgstr "La transferencia falló" -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" +#: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" +msgstr "" + +#: network/msnnotificationconnection.cpp:2323 +#, fuzzy +msgid "You are opening chat sessions too fast" msgstr "Esta abriendo sesiones demasiado rĆ”pido" -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" msgstr "Tiene demasiadas sesiones abiertas" -#: network/msnnotificationconnection.cpp:2341 +#: network/msnnotificationconnection.cpp:2334 msgid "Unexpected command sequence" msgstr "" -#: network/msnnotificationconnection.cpp:2344 +#: network/msnnotificationconnection.cpp:2338 msgid "Bad friend name" msgstr "Apodo no vĆ”lido" -#: network/msnnotificationconnection.cpp:2348 +#: network/msnnotificationconnection.cpp:2344 msgid "Bad CVR data" msgstr "" -#: network/msnnotificationconnection.cpp:2353 +#: network/msnnotificationconnection.cpp:2350 msgid "The server reports KMess is flooding it with too many data" msgstr "El servidor estĆ” reportando que KMess estĆ” enviando demasiados datos." -#: network/msnnotificationconnection.cpp:2358 +#: network/msnnotificationconnection.cpp:2357 #, fuzzy msgid "Authentication ticket was incorrect" msgstr "Fallo en la autentificación de usuario" -#: network/msnnotificationconnection.cpp:2362 +#: network/msnnotificationconnection.cpp:2360 msgid "You can't start a chat with someone while you are invisible." msgstr "No puedes comenzar una conversación mientras permanezcas desconectado." -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." +#: network/msnnotificationconnection.cpp:2364 +#, fuzzy +msgid "Not accepting new contacts" +msgstr "No se aceptan nuevos principales" + +#: network/msnnotificationconnection.cpp:2368 +#, fuzzy +msgid "" +"You have a kids passport account, you need parental consent to chat online." msgstr "Tiene un servicio infantil, requiere aprobación paterna" -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." +#: network/msnnotificationconnection.cpp:2371 +#, fuzzy +msgid "Your passport account needs to be verified first." msgstr "Su contraseƱa debe ser verificada primero" -#: network/msnnotificationconnection.cpp:2373 +#: network/msnnotificationconnection.cpp:2375 msgid "Bad USR ticket" msgstr "" -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" -msgstr "KMess - Error de MSN" +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" +msgstr "Error accesando a su lista de contactos, intente en otro momento" -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" +#: network/msnnotificationconnection.cpp:2399 +#, fuzzy +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." msgstr "Error interno del servidor" +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + #: network/msnnotificationconnection.cpp:2414 -msgid "The server is too busy" -msgstr "El servidor estĆ” ocupado" - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "El servidor no estĆ” disponible" - -#: network/msnnotificationconnection.cpp:2422 msgid "Peer notification server down" msgstr "Servidor de notificación de usuario caĆ­do" -#: network/msnnotificationconnection.cpp:2426 +#: network/msnnotificationconnection.cpp:2418 msgid "The server is going down" msgstr "El servidor estĆ” a punto de cerrarse" -#: network/msnnotificationconnection.cpp:2429 +#: network/msnnotificationconnection.cpp:2422 msgid "The server is going down soon" msgstr "El servidor estĆ” a punto de caer" -#: network/msnnotificationconnection.cpp:2433 +#: network/msnnotificationconnection.cpp:2427 msgid "Write is blocking" msgstr "Bloqueo de escritura" -#: network/msnnotificationconnection.cpp:2436 +#: network/msnnotificationconnection.cpp:2431 msgid "Session is overloaded" msgstr "La sesión esta sobrecargada" -#: network/msnnotificationconnection.cpp:2441 +#: network/msnnotificationconnection.cpp:2438 msgid "The server is not available" msgstr "El servidor no estĆ” disponible" -#: network/msnnotificationconnection.cpp:2444 +#: network/msnnotificationconnection.cpp:2442 msgid "Authentication failed" msgstr "Fallo en la autentificación de usuario" -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" -msgstr "No se aceptan nuevos principales" - -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" +#: network/msnnotificationconnection.cpp:2449 +#, fuzzy +msgid "Unknown error code received from the server: %1" msgstr "KMess recibió un mensaje de error desconocido del servidor: %1" -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "Advertencia: El servidor cierra por mantenimiento dentro de 1 minuto!" +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +#, fuzzy +msgctxt "Error dialog box title" +msgid "MSN error" +msgstr "KMess - Error de MSN" + +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "minutos" +msgstr[1] "minutos" #: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." -msgstr "" -"El servidor de MSN ha reportado que cerrara en 1 minuto para mantenimiento." - -#: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" +#, fuzzy +msgid "Server closes for maintenance in %1!" msgstr "" "Advertencia: El servidor cierra por mantenimiento dentro de %1 minutos!" -#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:2604 +#, fuzzy +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." +msgstr "" +"El servidor de MSN ha reportado que cerrara en 1 minuto para mantenimiento." + +#: network/msnnotificationconnection.cpp:2901 msgid "Lost reference to SOAP client" msgstr "" -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +#, fuzzy +msgid "KMess could not process Offline-IM messages.
Details: %1" msgstr "" "KMess no ha podido procesar los mensajes recibidos offline.

Detalles: " "%1" -#: network/msnnotificationconnection.cpp:3209 +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "Fallo en la autentificación de usuario" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "Error interno del servidor en KMess: %1" + +#: network/msnnotificationconnection.cpp:3242 +#, fuzzy +msgctxt "Login error message, with more details for developer versions" msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" +msgstr "" +"KMess no ha podido conectarse con los servidores de MSN Messenger. Los " +"servidores pueden estar temporalmente no disponibles, o puede haber un " +"problema con tu conexión a internet." + +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "Se ha perdido la conexión con el servidor." + +#: network/msnnotificationconnection.cpp:3302 +#, fuzzy +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" msgstr "" "Autenticación fallida, KMess no pudo procesar la entrada de Passport.
" "
Detalles: %1" -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" -msgstr "KMess no ha podido acceder al servicio web.

Detalles: %1" +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "Error del servidor" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "Conexión fuera de tiempo." + +#: network/msnsockettcp.cpp:368 +msgid "1 ping lost" +msgstr "Señal perdida" + +#: network/msnsockettcp.cpp:372 +msgid "%1 pings lost" +msgstr "%1 señales perdidas" + +#: network/msnsockettcp.cpp:387 +msgid "The connection to the server was lost." +msgstr "Se ha perdido la conexión con el servidor." + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "Este contacto estÔ desconectado o invisible." -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "El contacto inició una acción MSN que KMess aun no soporta." -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 msgid "The message \"%1\" was not received!" msgstr "El mensaje \"%1\" no fue recibido" -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "No se ha podido establecer la conexion: %1" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "Demaciadas redirecciónes por el servidor de entrada" -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +#, fuzzy +msgid "In %1's chat: %2" msgstr "En la conversación de %1: %2" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +#, fuzzy +msgid "%1 says:
'%2'" msgstr "%1 dice:
'%2'" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" +#: notification/chatnotification.cpp:171 +#, fuzzy +msgid "%1 has sent you an offline message:
'%2'" msgstr "%1te ha mandado un mensaje desconectado:
'%2'" -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" +#: notification/chatnotification.cpp:178 +#, fuzzy +msgid "%1's chat requests attention!" msgstr "La conversacion de %1's require atención!" -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" +#: notification/chatnotification.cpp:183 +#, fuzzy +msgid "%1:
%2" msgstr "%1:
%2" -#: notification/notificationchat.cpp:200 +#: notification/chatnotification.cpp:190 #, fuzzy -msgid "%1 has sent you a handwritten message!" +msgid "%1 has sent you a handwritten message!" msgstr "%1 te ha enviado un zumbido!" -#: notification/notificationchat.cpp:204 -msgid "%1 has sent you a nudge!" +#: notification/chatnotification.cpp:194 +#, fuzzy +msgid "%1 has sent you a nudge!" msgstr "%1 te ha enviado un zumbido!" -#: notification/notificationchat.cpp:208 -msgid "%1 has sent you a wink!" +#: notification/chatnotification.cpp:198 +#, fuzzy +msgid "%1 has sent you a wink!" msgstr "%1 te ha enviado un guiñó!" -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" +#: notification/chatnotification.cpp:204 +#, fuzzy +msgid "%1 wants to use the webcam!" msgstr "%1 desea usar la camara web" -#: notification/notificationchat.cpp:215 -msgid "%1 is sending you a file!" +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" msgstr "%1 te esta enviando un archivo!" -#: notification/notificationchat.cpp:216 -msgid "%1 has sent you an invitation!" +#: notification/chatnotification.cpp:206 +#, fuzzy +msgid "%1 has sent you an invitation!" msgstr "%1 te ha enviado una invitación!" -#: notification/notificationchat.cpp:223 -msgid "%1 has canceled the webcam session!" +#: notification/chatnotification.cpp:213 +#, fuzzy +msgid "%1 has canceled the webcam session!" msgstr "%1 ha cancelado la sesión de camara web!" -#: notification/notificationchat.cpp:224 -msgid "%1 has canceled the file transfer!" +#: notification/chatnotification.cpp:214 +#, fuzzy +msgid "%1 has canceled the file transfer!" msgstr "%1 ha cancelado la transferencia de archivo!" -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +#, fuzzy +msgid "%1's activity has been canceled!" msgstr "La actividad con %1 ha sido cancelada!" -#: notification/notificationchat.cpp:232 -msgid "%1 has accepted to use the webcam!" +#: notification/chatnotification.cpp:222 +#, fuzzy +msgid "%1 has accepted to use the webcam!" msgstr "%1 ha aceptado usar la camara web!" -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" +#: notification/chatnotification.cpp:223 +#, fuzzy +msgid "%1 has accepted the file transfer!" msgstr "%1 ha aceptado la transferencia de archivo!" -#: notification/notificationchat.cpp:234 -msgid "%1 has accepted your invitation!" +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" msgstr "%1 ha aceptado su invitacion!" -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" +#: notification/chatnotification.cpp:231 +#, fuzzy +msgid "%1 has ended the webcam session!" msgstr "%1 ha terminado la sesión de camara web!" -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "La transferencia de archivo con %1 ha terminado!" -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" +#: notification/chatnotification.cpp:233 +#, fuzzy +msgid "%1's activity has ended!" msgstr "La actividad con %1 ha terminado!" -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" +#: notification/chatnotification.cpp:240 +#, fuzzy +msgid "%1's webcam session has failed!" msgstr "La sesión de camara web con %1 ha fallado!" -#: notification/notificationchat.cpp:251 -msgid "The file transfer with %1 has failed!" +#: notification/chatnotification.cpp:241 +#, fuzzy +msgid "The file transfer with %1 has failed!" msgstr "La transferencia con %1 ha fallado!" -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:242 +#, fuzzy +msgid "%1's activity has ended with an error!" msgstr "La actividad de %1 ha finalizado con un error!" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -msgid "%1 is now online" +#: notification/contactstatusnotification.cpp:70 +#, fuzzy +msgid "%1 is now online" msgstr "%1 se ha conectado" -#: notification/notificationcontactstatus.cpp:76 -msgid "%1 has gone away" +#: notification/contactstatusnotification.cpp:71 +#, fuzzy +msgid "%1 has gone away" msgstr "%1 se ha puesto Ausente" -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/contactstatusnotification.cpp:72 +#, fuzzy +msgid "%1 will be right back" msgstr "%1 volvera enseguida" -#: notification/notificationcontactstatus.cpp:78 -msgid "%1 is now busy" +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" msgstr "%1 ahora estÔ Ocupado" -#: notification/notificationcontactstatus.cpp:79 -msgid "%1 has become invisible" +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" msgstr "%1 se ha puesto Invisible" -#: notification/notificationcontactstatus.cpp:80 -msgid "%1 has gone idle" +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" msgstr "%1 se ha puesto Inactivo" -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/contactstatusnotification.cpp:76 +#, fuzzy +msgid "%1 has logged out" msgstr "%1 se ha desconectado" -#: notification/notificationcontactstatus.cpp:82 -msgid "%1 is on the phone" +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" msgstr "%1 estÔ en el telefono" -#: notification/notificationcontactstatus.cpp:83 -msgid "%1 is out for lunch" +#: notification/contactstatusnotification.cpp:78 +#, fuzzy +msgid "%1 is out for lunch" msgstr "%1 salió a comer" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/newemailnotification.cpp:78 +#, fuzzy +msgid "New email:
'%1'
by '%2'" msgstr "Nuevo correo electrónico
'%1'
de '%2'" -#: settings/accountswidget.cpp:81 +#: settings/accountpage.cpp:69 msgid "Browse..." msgstr "" -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +#, fuzzy +msgid "Browse and crop picture..." msgstr "Examinar y cortar imagen..." -#: settings/accountswidget.cpp:404 -msgid "Display Picture" -msgstr "Mostrar foto" +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" +#: settings/accountpage.cpp:448 +#, fuzzy +msgid "Downloading of display picture failed" msgstr "Descarga de la imÔgen falló" -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 +#, fuzzy msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" "Ocurrión un error al tratar de cambiar la imÔgen mostrada.\n" "Asegurese de que eligipo el archivo de imÔgen correcto" -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "Hola, como estas? :)" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "Ana" - -#: settings/chatstylepage.cpp:317 -msgid "Great!" -msgstr "Genial!" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "/Acabo/ de llegar de mis vacaciones en Italia!" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 #, fuzzy msgid "&Delete" msgstr "&Eliminar contacto" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "Preferencias" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 msgid "Account" msgstr "Cuenta" -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 #, fuzzy msgid "My Account" msgstr "Cuenta" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "Avisos" -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 #, fuzzy msgid "Alerts and Notifications" msgstr "Notificación de KMess" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "Conversación" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "Registro de la charla" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +#, fuzzy +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "La dirección de contacto que has entrado no es valida: \"%1\"" + +#: settings/accountsettingsdialog.cpp:201 +#, fuzzy +msgid "The email address you have entered is already in use: '%1'" +msgstr "La dirección de contacto que has entrado no es valida: \"%1\"" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "¿EstÔ seguro de que quiere eliminar esta cuenta?" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "¿EstÔ seguro de que quiere eliminar esta cuenta?" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "Hola, como estas? :)" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "Ana" + +#: settings/chatstylepage.cpp:341 +msgid "Great!" +msgstr "Genial!" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "/Acabo/ de llegar de mis vacaciones en Italia!" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "Preferencias" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +msgid "Accounts" +msgstr "Cuentas" + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "Notificación de correo" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "Guardar los archivos de las conversaciones en este directorio:" + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." @@ -3500,14 +4202,151 @@ msgstr "" "Cuando cierres la ventana KMess seguirÔ funcionando. Usa 'salir' desde el " "menú conectar para cerrar la aplicación." -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "Mostrando el icono en la barra del sistema." -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "
%1 (%2)" +#: systemtraywidget.cpp:245 +#, fuzzy +msgid "- %1 (%2)" +msgstr "%1 %2" + +#~ msgid "Click to send an email to this contact." +#~ msgstr "Haz click para mandar un correo electrónico a este contacto." + +#~ msgid "Picture:" +#~ msgstr "Foto:" + +#, fuzzy +#~ msgid "Login Information" +#~ msgstr "Mostrar información referente al correo." + +#~ msgid "Logging in..." +#~ msgstr "Iniciando sesión..." + +#~ msgid "" +#~ "Allows you to choose which e-mail program KMess should open to view e-" +#~ "mail messages." +#~ msgstr "" +#~ "Le permite elegir que programa de correo electrónico abrirÔ KMess cuando " +#~ "intente ver un e-mail." + +#~ msgid "Use a specified command:" +#~ msgstr "Usar un comando especifico:" + +#~ msgid "This account does not have an Hotmail inbox!" +#~ msgstr "Esta cuenta no tiene una bandeja de entrada de Hotmail!" + +#, fuzzy +#~ msgid "Email: " +#~ msgstr "Email" + +#~ msgid "Remove group" +#~ msgstr "Eliminar grupo" + +#, fuzzy +#~ msgid "Show &Display Pictures" +#~ msgstr "Mostrar foto" + +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr "Mensaje nuevo en su bandeja de entrada" + +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr "%1 mensajes nuevos en su bandeja de entrada" + +#, fuzzy +#~ msgid "Guido Solinas" +#~ msgstr "&Se conecten" + +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "La transferencia de %1 falló. No se pudo abrir el archivo" + +#, fuzzy +#~ msgid "Sidebar" +#~ msgstr "Barra lateral" + +#, fuzzy +#~ msgid "New contact's group" +#~ msgstr "Nuevo &Contacto" + +#~ msgid "Enter your login information:" +#~ msgstr "Introduzca los datos de su cuenta:" + +#~ msgid "Your friendly name:" +#~ msgstr "Su nombre (nick):" + +#, fuzzy +#~ msgid "Your email address:" +#~ msgstr "Correo electronico: " + +#~ msgid "Your password:" +#~ msgstr "Su contraseña:" + +#~ msgid "Display picture:" +#~ msgstr "Foto del contacto:" + +#~ msgid "Don't show a displa&y picture" +#~ msgstr "No mostrar una imagen" + +#~ msgid "Status to set at login:" +#~ msgstr "Estado al iniciar sesión:" + +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "Mostrar una notificación cuando se reciba correo" + +#~ msgid "Organize chat folders by:" +#~ msgstr "Organizar las carpetas de conversaciones por:" + +#~ msgid "&Show graphics in chat messages" +#~ msgstr "Mostrar &grÔficos en los mensajes" + +#~ msgid "Use Hotmail" +#~ msgstr "Usar Hotmail" + +#~ msgid "says:" +#~ msgstr "dice:" + +#~ msgid "Current name: " +#~ msgstr "Nombre actual: " + +#, fuzzy +#~ msgid "" +#~ "KMess could not connect to the MSN Messenger service.\n" +#~ "Please, be sure to be connected to the internet.\n" +#~ "reason: %1." +#~ msgstr "" +#~ "KMess no ha podido conectar con el servidor de MSN Messenger. " +#~ "
Asegurese que esta conectado a internet
Error %1 (código %2)." + +#~ msgid "The remote server has closed the connection." +#~ msgstr "El servidor ha cerrado la conexión." + +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr "¿Mostrar estado del servicio .NET?" + +#~ msgid "Received user confirmation" +#~ msgstr "Confirmación de usuario recibida..." + +#~ msgid "Transfer to notification server" +#~ msgstr "Transferencia al servidor de notificación" + +#~ msgid "The server is too busy" +#~ msgstr "El servidor estÔ ocupado" + +#~ msgid "The server is unavailable" +#~ msgstr "El servidor no estÔ disponible" + +#~ msgid "KMess received an unknown error message from the server: %1" +#~ msgstr "KMess recibió un mensaje de error desconocido del servidor: %1" + +#~ msgid "Warning: Server closes for maintenance in 1 minute!" +#~ msgstr "" +#~ "Advertencia: El servidor cierra por mantenimiento dentro de 1 minuto!" + #~ msgid "Add contact" #~ msgstr "Agregar contacto" @@ -3515,9 +4354,6 @@ msgstr "
%1 (%2)" #~ msgid "KMess Notification" #~ msgstr "Notificación de correo" -#~ msgid "Accounts" -#~ msgstr "Cuentas" - #~ msgid "" #~ msgstr "" @@ -3531,9 +4367,6 @@ msgstr "
%1 (%2)" #~ "Your emails" #~ msgstr "yovoya30ks@hotmail.com achane4@gmail.com ckaiser139@gmail.com" -#~ msgid "Insert an emoticon" -#~ msgstr "Insertar un emoticono" - #~ msgid "Show/Hide &Contact Sidebar" #~ msgstr "Mostrar/Ocultar &barra lateral" @@ -3568,18 +4401,9 @@ msgstr "
%1 (%2)" #~ msgid "(On the Phone)" #~ msgstr "(Al teléfono)" -#~ msgid "Connection timeout" -#~ msgstr "Conexión fuera de tiempo." - #~ msgid "The current status of your contact." #~ msgstr "El estado actual de su contacto" -#~ msgid "Connect" -#~ msgstr "Conectar" - -#~ msgid "Listening to %1" -#~ msgstr "Escuchando %1" - #, fuzzy #~ msgid "The contact is listening to music" #~ msgstr "Este contacto aún no este en su lista." diff --git a/po/et.po b/po/et.po index 47e4300..f6df90d 100644 --- a/po/et.po +++ b/po/et.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: ee\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" "PO-Revision-Date: 2003-03-20 16:14+0100\n" "Last-Translator: Jyri Toomessoo \n" "Language-Team: Estonian \n" @@ -16,47 +16,41 @@ msgstr "" "X-Generator: KBabel 1.0\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "Login sisse..." - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -#, fuzzy -msgid "S&end" -msgstr "Saada" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 #, fuzzy msgid "Ne&w Line" msgstr "Uus Rida" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 #, fuzzy -msgid "Sidebar" -msgstr "Kuva/Peida &Kontakti Kylgriba" +msgid "S&end" +msgstr "Saada" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +#, fuzzy +msgid "Contacts" +msgstr "&Lisa Kontakt" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 #, fuzzy msgid "" "Enter here the email address of the person you wish to add to your contact " @@ -64,42 +58,40 @@ msgid "" msgstr "Sisesta eposti aadress keda soovid lisada:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 #, fuzzy msgid "Email address" msgstr "Eposti aadress:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 #, fuzzy -msgid "New contact's group" -msgstr "Uus &Kontakt" +msgid "Initial group" +msgstr "Ym&ber nimeta Grupp" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 #, fuzzy msgid "" "Enter a message to be automatically sent to people who try to message you." @@ -108,184 +100,390 @@ msgstr "" "neile kes sinuga suhelda yritavad:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 #, fuzzy msgid "&Automatic away message" msgstr "Sisesta Eemal teade" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, fuzzy, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" -msgstr "on lisanud sind oma kontaktidesse. Kas sa tahad:" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 #, fuzzy -msgid "&Add this contact to your \"Friends\" list" +msgid "&Add this person to my \"Friends\" list" msgstr "Lisa see kontakt oma \"Tuttavate\" loentisse" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 #, fuzzy -msgid "&Not add this contact, but let them see your online state" +msgid "Do not add this person; only allow them to see my online state" msgstr "Ei lisa seda kontakti, aga lase neil vaadata su olekut" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 #, fuzzy -msgid "Block this person from contacting &you or seeing your online state" +msgid "&Block this person from contacting me or seeing my online state" msgstr "Blokeeri see isik nii, et ta ei saaks sind segada ega vaadata." #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, fuzzy, no-c-format +msgid "Contact Properties for %1" +msgstr "Kontakti omadused " + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +#, fuzzy +msgid "Restore" +msgstr "Eemaldatud" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "Kasuta alternatiiv nime selle iskiku puhul" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "Teata mulle kui see inimene tuleb vai lahkub" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "Heli:" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +msgid "&Clear Cache" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +msgid "Notes" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +msgid "Standard" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "Saada" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 msgid "Cancel" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -#, fuzzy -msgid "Enter your login information:" -msgstr "Voi sisesta login info:" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" +msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 #, fuzzy -msgid "Password" +msgid "Email address:" +msgstr "Eposti aadress: " + +#. i18n: tag string +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +#, fuzzy +msgid "Password:" msgstr "Parool:" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 #, fuzzy msgid " Account options " msgstr "Kasutaja &Seaded" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 #, fuzzy msgid "Remem&ber this profile" msgstr "Pea profiil meeles" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "&Yhenda" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr "Kasutaja &Seaded" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 #, fuzzy -msgid "Your friendly name:" +msgid "&Friendly name:" msgstr "Sinu tore nimi:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 #, fuzzy -msgid "Your email address:" +msgid "&Email address:" msgstr "Eposti aadress: " #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" -msgstr "Sinu parool:" - -#. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 #, fuzzy -msgid "Remember Password" +msgid "&Password:" msgstr "Parool:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 #, fuzzy -msgid "Display picture:" +msgid "&Remember Password" +msgstr "Parool:" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 +#, fuzzy +msgid "Display Picture" msgstr "Pilt:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 msgid "C&hange..." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -#, fuzzy -msgid "Don't show a displa&y picture" -msgstr "Pilt:" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -296,35 +494,36 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +msgid "Re&member the settings of this account" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 #, fuzzy -msgid "Login &with this account automatically at start-up" +msgid "Login &with this account automatically" msgstr "Sisene alati selle kontoga automaatselt alguses" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "Logi kogu jutt" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -332,174 +531,285 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 msgid "https://accountservices.passport.net/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 #, fuzzy -msgid "Popup notifications" +msgid "Saved accounts:" +msgstr "Kasutajad" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +#, fuzzy +msgid "Click" +msgstr "(Blokeeritud)" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "Kasutajad" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "Eemaldatud" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "Eposti Teade" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "&Lisa Kontakt" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 #, fuzzy msgid "Show notifications when your contacts:" msgstr "Kuva teated kui kontaktid lahkuvad" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 #, fuzzy msgid "&Go online" msgstr "Offline'is" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 #, fuzzy msgid "S&end you a message" msgstr "Sisesta Eemal teade" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 #, fuzzy msgid "Go o&ffline" msgstr "Offline'is" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 #, fuzzy -msgid "Show notifications when you recei&ve an email" +msgid "Email Events" +msgstr "Eposti aadress:" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" msgstr "Kuva teade kui kiri tuleb \"teistesse kausta\"" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +#, fuzzy +msgid "In other folders" +msgstr "teises kaustas" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "Peida teade peale" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "sekundit" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "Alarmid" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "Kuva &Lubatud Kontaktid" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -510,206 +820,209 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 -msgid "Inform contacts w&hich song I am listening to." +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 +msgid "Inform contacts w&hich song I am listening to" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 #, fuzzy msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "Muuda olek \"Kaua vait\" kui vaikid" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 msgid "Become idle after" msgstr "Kuuluta ennast kaua vaikivaks peale" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "minutit" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 #, fuzzy msgid "Log &all chats" msgstr "Logi kogu jutt" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 msgid "" "Choose the directory on your system where you'd like to save the chat logs." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" msgstr "Salvesta jutu failid sellesse pea kausta:" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "Korralda jutu kaustad:" +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "Aasta" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 #, fuzzy msgid "Month" msgstr "Kuu" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "P4ev" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" msgstr "Salvesta jutud peakausta" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "Sinu teate kirjatyyp:" - +#. i18n: file ./settings/chatstylepage.ui line 45 #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "Sunni kontakti teated kasutama seda kausta:" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +msgid "&Chat style:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "Seaded" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 #, fuzzy -msgid "&Show graphics in chat messages" -msgstr "Kuva ajatempel jutus" +msgid "&Show emoticons" +msgstr "Tahan &Smile'si" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 #, fuzzy -msgid "S&how time in chat messages" +msgid "S&how messages time" msgstr "Kuva ajatempel jutus" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -718,152 +1031,302 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 -msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "Eposti klient" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "Kasuta Hotmail'i" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "Kasuta kindlat k4sku:" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "Eposti Teade" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 -msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 #, fuzzy -msgid "Show email information" -msgstr "Kuva eposti info kontakti loendis" +msgid "Always" +msgstr "Eemal" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 -msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "Su kontakti loendisse ei mahu enam" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "Serveri Viga" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" -msgstr "Kuva teade kui kiri tuleb \"teistesse kausta\"" +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." +msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "Sinu teate kirjatyyp:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 +msgid "" +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "Sunni kontakti teated kasutama seda kausta:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 +msgid "" +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "O&tsi Kontakti" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 #, fuzzy msgid "&Emoticon Themes" msgstr "Tahan &Smile'si" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 #, fuzzy msgid "Available emoticon styles:" msgstr "Tahan &Smile'si" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 #, fuzzy msgid "&Custom Emoticons" msgstr "Liikuvad smile'd" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 msgid "Custom emoticons for this account:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -#, fuzzy -msgid "Click" -msgstr "(Blokeeritud)" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 #, fuzzy msgid "Re&name" msgstr "Sinu nimi" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 #, fuzzy msgid "Remo&ve" msgstr "Eemaldatud" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +msgid "Web Browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +msgid "&Use the KDE default browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "lausub:" +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "Eposti klient" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +msgid "&Use the KDE default email client" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +#, fuzzy +msgid "File Transfers" +msgstr "Faili ylekanne valmis." + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "Salvesta jutu failid sellesse pea kausta:" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +msgid "and" +msgstr "ja" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "Faili ylekanne valmis." #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -873,453 +1336,532 @@ msgstr "Olen arvutist eemal" msgid "Your name" msgstr "Sinu nimi" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "sina@hotmail.com" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "Online" - -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "Eemal" - -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "Kohe tagasi" - -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "Tegevuses" - -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "Peidus" - -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "" - -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "Offline'is" - -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "Telefoneerin" - -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "Toitumas" - -#: chat/chatmaster.cpp:1061 -msgid "%1 is sending a wink: %2" -msgstr "" - -#: chat/chatmessagestyle.cpp:302 -#, fuzzy -msgid "%1 says:" -msgstr "lausub:" - -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 -msgid "Add this emoticon: %1" -msgstr "" - -#: chat/chatview.cpp:529 -msgid "" -"Could not save chat log. Make sure you have permission to write in the " -"folder where logs are being saved." -msgstr "" - -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 -msgid "" -"The file '%1' already exists.\n" -"do you want to overwrite it?" -msgstr "" - -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Overwrite File" -msgstr "" - -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Over&write" -msgstr "" - -#: chat/chatview.cpp:977 -#, fuzzy -msgid "Add this &Emoticon..." -msgstr "Tahan &Smile'si" - -#: chat/chatview.cpp:984 -#, fuzzy -msgid "Send &Email" -msgstr "&Saada epost" - -#: chat/chatview.cpp:988 -#, fuzzy -msgid "Copy E&mail" -msgstr "Epost" - -#: chat/chatview.cpp:995 -msgid "Visit &Link" -msgstr "" - -#: chat/chatview.cpp:999 -msgid "Copy &Address" -msgstr "" - -#: chat/chatview.cpp:1013 -msgid "&Copy text" -msgstr "" - -#: chat/chatview.cpp:1014 -msgid "Select &All" -msgstr "" - -#: chat/chatview.cpp:1015 -#, fuzzy -msgid "Save chat to &File" -msgstr "Saada &Fail" - -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "Jutt" - -#: chat/chatwindow.cpp:239 +#: chat/chat.cpp:124 msgid "" "You can't start this invitation because there are multiple contacts in this " "chat." msgstr "" -#: chat/chatwindow.cpp:276 +#: chat/chat.cpp:158 #, fuzzy -msgid "%1 has joined the chat." +msgid "%1 has joined the chat." msgstr "lisandus jutukasse." -#: chat/chatwindow.cpp:327 +#: chat/chat.cpp:211 #, fuzzy -msgid "The conversation went idle, %1 has left the chat." +msgid "The conversation went idle, %1 has left the chat." msgstr "lahkus jutukast." -#: chat/chatwindow.cpp:331 +#: chat/chat.cpp:215 #, fuzzy -msgid "%1 has left the chat." +msgid "%1 has left the chat." msgstr "lahkus jutukast." -#: chat/chatwindow.cpp:593 +#: chat/chat.cpp:364 #, fuzzy -msgid "%1 - Chat" -msgstr "Jutt" +msgctxt "Name of a chat tab" +msgid "%1 and %2" +msgstr " nokib nuppe." -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" -msgstr "" - -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" -msgstr "" - -#: chat/chatwindow.cpp:757 +#: chat/chat.cpp:371 #, fuzzy -msgid "Contacts" -msgstr "&Lisa Kontakt" +msgctxt "Name of a chat tab" +msgid "%1 et al." +msgstr " et al." -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 +#: chat/chat.cpp:630 #, fuzzy -msgid "Emoticons" -msgstr "Tahan &Smile'si" - -#: chat/chatwindow.cpp:819 -#, fuzzy -msgid "My emoticons" -msgstr "Tahan &Smile'si" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" msgstr " (See on automaat teade)" -#: chat/chatwindow.cpp:1502 +#: chat/chat.cpp:934 +msgid "You received a wink from %1." +msgstr "" + +#: chat/chat.cpp:971 msgid "" "The wink could not be displayed. Make sure you have 'cabextract' installed." msgstr "" -#: chat/chatwindow.cpp:1511 +#: chat/chat.cpp:980 msgid "The wink could not be displayed. The data could not be read." msgstr "" -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" +#: chat/chat.cpp:1080 +msgid "You have received a wink from %1" msgstr "" -#: chat/chatwindow.cpp:1755 -#, fuzzy -msgid "Show Side&bar" -msgstr "Kuva/Peida &Kontakti Kylgriba" +#: chat/chat.cpp:1100 +msgid "You received a nudge from %1!" +msgstr "" -#: chat/chatwindow.cpp:1756 +#: chat/chat.cpp:1119 #, fuzzy -msgid "Show the contact sidebar" -msgstr "Kuva, peida kontakti kylgriba" - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -#, fuzzy -msgid "Hide Side&bar" -msgstr "Kuva/Peida &Kontakti Kylgriba" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -#, fuzzy -msgid "Hide the contact sidebar" -msgstr "Kuva, peida kontakti kylgriba" - -#: chat/chatwindow.cpp:1787 -#, fuzzy -msgid "The message '%1' could not be sent." +msgid "The message '%1' could not be sent." msgstr "ei l4inud kohale." -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" -msgstr "" - -#: chat/chatwindow.cpp:1876 +#: chat/chat.cpp:1183 msgid "You've sent a nudge to %1!" msgstr "" -#: chat/chatwindow.cpp:1883 +#: chat/chat.cpp:1190 msgid "You've sent a nudge!" msgstr "" -#: chat/chatwindow.cpp:1972 -#, fuzzy -msgid "%1 is typing." -msgstr " nokib nuppe." - -#: chat/chatwindow.cpp:1981 -#, fuzzy -msgid "%1 and %2 are typing." -msgstr " nokib nuppe." - -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." +#: chat/chatmaster.cpp:1219 +msgid "%1 is sending a wink: %2" msgstr "" -#: chat/chatwindowinterface.cpp:175 -msgid "&Chat" -msgstr "&Jutusta" +#: chat/chatmessagestyle.cpp:298 +#, fuzzy +msgid "%1 says:" +msgstr "lausub:" -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 +msgid "Add this emoticon: %1" +msgstr "" + +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 msgid "&Invite" msgstr "&Kutsu" -#: chat/chatwindowinterface.cpp:179 +#: chat/chatview.cpp:695 +msgid "" +"Could not save chat log. Make sure you have permission to write in the " +"folder where logs are being saved." +msgstr "" + +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 +msgid "" +"The file '%1' already exists.\n" +"do you want to overwrite it?" +msgstr "" + +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Overwrite File" +msgstr "" + +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Over&write" +msgstr "" + +#: chat/chatview.cpp:1275 +#, fuzzy +msgid "Add this &Emoticon..." +msgstr "Tahan &Smile'si" + +#: chat/chatview.cpp:1282 +#, fuzzy +msgid "Send &Email" +msgstr "&Saada epost" + +#: chat/chatview.cpp:1286 +#, fuzzy +msgid "Copy E&mail" +msgstr "Epost" + +#: chat/chatview.cpp:1293 +msgid "Visit &Link" +msgstr "" + +#: chat/chatview.cpp:1297 +msgid "Copy &Address" +msgstr "" + +#: chat/chatview.cpp:1312 +msgid "&Copy text" +msgstr "" + +#: chat/chatview.cpp:1313 +msgid "Select &All" +msgstr "" + +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 +#, fuzzy +msgid "Save chat to &File" +msgstr "Saada &Fail" + +#: chat/chatwindow.cpp:489 +msgid "&Chat" +msgstr "&Jutusta" + +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "Saada &Fail" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "Alusta &Vestlust" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 #, fuzzy msgid "Send a &Nudge!" msgstr "Saada &Fail" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 #, fuzzy msgid "&Emoticons" msgstr "Tahan &Smile'si" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +msgid "Close &All Tabs" +msgstr "" + +#: chat/chatwindow.cpp:504 #, fuzzy msgid "Meeting" msgstr "Seaded" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "Muuda &Kirja" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "Muuda Kirja &Varvi" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 #, fuzzy msgid "&Font" msgstr "&Yhenda" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 #, fuzzy msgid "Font &Color" msgstr "Muuda Kirja &Varvi" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +#, fuzzy +msgid "Emoticons" +msgstr "Tahan &Smile'si" + +#: chat/chatwindow.cpp:658 +#, fuzzy +msgid "My emoticons" +msgstr "Tahan &Smile'si" + +#: chat/chatwindow.cpp:738 #, fuzzy msgid "&Settings" msgstr "Seaded" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "Tahan &Smile'si" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +#, fuzzy +msgid "Hide Side&bar" +msgstr "Kuva/Peida &Kontakti Kylgriba" + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "Kuva/Peida &Kontakti Kylgriba" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +#, fuzzy +msgid "Hide the contact sidebar" +msgstr "Kuva, peida kontakti kylgriba" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +msgid "Close all tabs" +msgstr "" + +#: chat/chatwindow.cpp:856 +msgid "Close current tab" +msgstr "" + +#: chat/chatwindow.cpp:1467 +#, fuzzy +msgid "Show Side&bar" +msgstr "Kuva/Peida &Kontakti Kylgriba" + +#: chat/chatwindow.cpp:1468 +#, fuzzy +msgid "Show the contact sidebar" +msgstr "Kuva, peida kontakti kylgriba" + +#: chat/chatwindow.cpp:1565 +#, fuzzy +msgid "%1 is typing." +msgstr " nokib nuppe." + +#: chat/chatwindow.cpp:1575 +#, fuzzy +msgid "%1 and %2 are typing." +msgstr " nokib nuppe." + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "" + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "Jutt" + +#: chat/chatwindow.cpp:1615 +#, fuzzy +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "Jutt" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "&Saada epost" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 #, fuzzy msgid "&View Profile" msgstr "&Kuva Profiil" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "&Lisa Kontakt" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 #, fuzzy msgid "A&llow Contact" msgstr "&Luba Kontakt" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 #, fuzzy msgid "&Delete Contact" msgstr "&Eemalda Kontakt" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "&Blokeeri Kontakt" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "&Eemalda Blokaad" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 #, fuzzy msgid "&Friendly Name" msgstr "Sinu tore nimi:" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 #, fuzzy msgid "&Email Address" msgstr "Eposti aadress:" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "" -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 #, fuzzy msgid "Blocked" msgstr "(Blokeeritud)" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 #, fuzzy msgid "The contact is %1" msgstr "Lisa see kontakt oma \"Tuttavate\" loentisse" -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +#, fuzzy +msgid "Add to Chat" +msgstr "Lisa kontakt" + +#: chat/emoticonsidebar.cpp:213 +#, fuzzy +msgid "Insert new" +msgstr "Topi yks smile'i" + +#: chat/emoticonsidebar.cpp:214 +msgid "Edit" +msgstr "" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +#, fuzzy +msgid "Remove" +msgstr "Eemaldatud" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 #, fuzzy msgid "Web Messenger" msgstr "Veebi kujundus" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +#, fuzzy +msgid "Windows Live Messenger %1" +msgstr "Veebi kujundus" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "Online" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "Offline'is" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "Lubatud" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "Eemaldatud" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 +#, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr " nokib nuppe." + +#: contactlistviewdelegate.cpp:150 msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "Eemal" + +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "Kohe tagasi" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "Tegevuses" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "Peidus" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" msgstr "" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "Telefoneerin" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "Toitumas" + +#: dialogs/addcontactdialog.cpp:48 #, fuzzy msgid "Add a Contact" msgstr "Lisa kontakt" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 #, fuzzy msgid "No group" msgstr "Ee&malda Grupp" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 #, fuzzy msgid "Add New Emoticon" msgstr "Tahan &Smile'si" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "Tahan &Smile'si" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "" @@ -1327,540 +1869,607 @@ msgstr "" msgid "Specify an Away message" msgstr "Sisesta Eemal teade" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "Kasuta alternatiiv nime selle iskiku puhul" - -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" -msgstr "Teata mulle kui see inimene tuleb vai lahkub" - -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "Pilt:" - -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "Heli:" - -#: dialogs/contactpropertiesdialog.cpp:234 +#: dialogs/contactaddeduserdialog.cpp:85 #, fuzzy -msgid "Contact Properties for %1" -msgstr "Kontakti omadused " +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " +msgstr "on lisanud sind oma kontaktidesse. Kas sa tahad:" -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " -msgstr "Eposti aadress: " +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "Yhenduses" -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "Hetke nimi: " - -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +msgid "Not seen yet" msgstr "" -#: dialogs/networkwindow.cpp:57 +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +#, fuzzy +msgid "No messages yet" +msgstr "Kuva ajatempel jutus" + +#: dialogs/contactpropertiesdialog.cpp:381 +msgid "Last seen: %1" +msgstr "" + +#: dialogs/contactpropertiesdialog.cpp:382 +#, fuzzy +msgid "Last message: %1" +msgstr "Sinu teate kirjatyyp:" + +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "Epost" + +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "Eposti klient" + +#: dialogs/networkwindow.cpp:79 msgid "S&ave tab" msgstr "" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 msgid "C&lear tab" msgstr "" -#: dialogs/networkwindow.cpp:59 -msgid "Cl&ose tab" -msgstr "" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 msgid "" "No connections are present.\n" "Cannot open the Network Window." msgstr "" -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 msgid "" "Could not save the Network Window log. Make sure you have permission to " "write in the folder where it is being saved." msgstr "" -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "" -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +msgid "Cannot send commands to this kind of connection!" +msgstr "" + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 #, fuzzy msgid "Completed" msgstr "Yhenduses" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +msgid "%1 of %2 received." msgstr "" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +msgid "%1 of %2 sent." msgstr "" -#: dialogs/transferwindow.cpp:55 -#, fuzzy -msgid "File Transfers" -msgstr "Faili ylekanne valmis." +#: dialogs/transferentry.cpp:373 +msgid "infinite" +msgstr "" -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 msgid "Cl&ean Up" msgstr "" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " "the theme folder '%1'." msgstr "" -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 #, fuzzy msgid "Smile" msgstr "Epost" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "" -#: emoticontheme.cpp:797 -msgid "Big smile" -msgstr "" - -#: emoticontheme.cpp:798 -#, fuzzy -msgid "Sad" -msgstr "ja" - -#: emoticontheme.cpp:799 -msgid "Crying" -msgstr "" - -#: emoticontheme.cpp:800 -msgid "Angry" -msgstr "" - -#: emoticontheme.cpp:801 -msgid "Confused" -msgstr "" - -#: emoticontheme.cpp:802 -msgid "Embarrassed" -msgstr "" - -#: emoticontheme.cpp:803 -#, fuzzy -msgid "Disappointed" -msgstr "Yhenduseta" - -#: emoticontheme.cpp:804 -msgid "Hot" -msgstr "" - -#: emoticontheme.cpp:805 -msgid "Baring teeth" -msgstr "" - -#: emoticontheme.cpp:806 -msgid "Nerd" -msgstr "" - -#: emoticontheme.cpp:807 -msgid "Sick" -msgstr "" - -#: emoticontheme.cpp:808 -msgid "Surprised" -msgstr "" - -#: emoticontheme.cpp:809 -msgid "Party" -msgstr "" - -#: emoticontheme.cpp:810 -msgid "Sleepy" -msgstr "" - -#: emoticontheme.cpp:811 -msgid "Thinking" -msgstr "" - #: emoticontheme.cpp:812 -msgid "Don't tell anyone" +msgid "Big smile" msgstr "" #: emoticontheme.cpp:813 #, fuzzy -msgid "Secret telling" -msgstr "Seaded" +msgid "Sad" +msgstr "ja" #: emoticontheme.cpp:814 -msgid "Eye-rolling" +msgid "Crying" msgstr "" #: emoticontheme.cpp:815 -msgid "Sarcastic" +msgid "Angry" msgstr "" #: emoticontheme.cpp:816 -msgid "I don't know" +msgid "Confused" msgstr "" #: emoticontheme.cpp:817 +msgid "Embarrassed" +msgstr "" + +#: emoticontheme.cpp:818 +#, fuzzy +msgid "Disappointed" +msgstr "Yhenduseta" + +#: emoticontheme.cpp:819 +msgid "Hot" +msgstr "" + +#: emoticontheme.cpp:820 +msgid "Baring teeth" +msgstr "" + +#: emoticontheme.cpp:821 +msgid "Nerd" +msgstr "" + +#: emoticontheme.cpp:822 +msgid "Sick" +msgstr "" + +#: emoticontheme.cpp:823 +msgid "Surprised" +msgstr "" + +#: emoticontheme.cpp:824 +msgid "Party" +msgstr "" + +#: emoticontheme.cpp:825 +msgid "Sleepy" +msgstr "" + +#: emoticontheme.cpp:826 +msgid "Thinking" +msgstr "" + +#: emoticontheme.cpp:827 +msgid "Don't tell anyone" +msgstr "" + +#: emoticontheme.cpp:828 +#, fuzzy +msgid "Secret telling" +msgstr "Seaded" + +#: emoticontheme.cpp:829 +msgid "Eye-rolling" +msgstr "" + +#: emoticontheme.cpp:830 +msgid "Sarcastic" +msgstr "" + +#: emoticontheme.cpp:831 +msgid "I don't know" +msgstr "" + +#: emoticontheme.cpp:832 #, fuzzy msgid "Be right back" msgstr "Kohe tagasi" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "" -#: emoticontheme.cpp:824 -msgid "Dog face" -msgstr "" - -#: emoticontheme.cpp:825 -#, fuzzy -msgid "Sun" -msgstr "Heli:" - -#: emoticontheme.cpp:826 -msgid "Devil" -msgstr "" - -#: emoticontheme.cpp:827 -msgid "Right hug" -msgstr "" - -#: emoticontheme.cpp:828 -msgid "Girl" -msgstr "" - -#: emoticontheme.cpp:829 -msgid "Broken heart" -msgstr "" - -#: emoticontheme.cpp:830 -msgid "Wilted rose" -msgstr "" - -#: emoticontheme.cpp:831 -msgid "Thumbs down" -msgstr "" - -#: emoticontheme.cpp:832 -msgid "Cat face" -msgstr "" - -#: emoticontheme.cpp:833 -msgid "Sleeping half-moon" -msgstr "" - -#: emoticontheme.cpp:834 -msgid "Red lips" -msgstr "" - -#: emoticontheme.cpp:835 -#, fuzzy -msgid "Clapping" -msgstr "Jutustamine" - -#: emoticontheme.cpp:836 -msgid "Crossed fingers" -msgstr "" - -#: emoticontheme.cpp:837 -msgid "Auto" -msgstr "" - -#: emoticontheme.cpp:838 -msgid "Airplane" -msgstr "" - #: emoticontheme.cpp:839 -msgid "Turtle" +msgid "Dog face" msgstr "" #: emoticontheme.cpp:840 #, fuzzy -msgid "Snail" -msgstr "&Saada epost" +msgid "Sun" +msgstr "Heli:" #: emoticontheme.cpp:841 -msgid "Black sheep" +msgid "Devil" msgstr "" #: emoticontheme.cpp:842 -msgid "Goat" +msgid "Right hug" msgstr "" #: emoticontheme.cpp:843 -msgid "Vampire bat" +msgid "Girl" msgstr "" #: emoticontheme.cpp:844 -msgid "Pizza" +msgid "Broken heart" msgstr "" #: emoticontheme.cpp:845 -msgid "Beer mug" +msgid "Wilted rose" msgstr "" #: emoticontheme.cpp:846 -msgid "Martini glass" +msgid "Thumbs down" msgstr "" #: emoticontheme.cpp:847 -msgid "Coffee cup" +msgid "Cat face" msgstr "" #: emoticontheme.cpp:848 -msgid "Birthday cake" +msgid "Sleeping half-moon" msgstr "" #: emoticontheme.cpp:849 -msgid "Plate" +msgid "Red lips" msgstr "" #: emoticontheme.cpp:850 -msgid "Bowl" -msgstr "" +#, fuzzy +msgid "Clapping" +msgstr "Jutustamine" #: emoticontheme.cpp:851 -msgid "Star" +msgid "Crossed fingers" msgstr "" #: emoticontheme.cpp:852 -msgid "Rainbow" +msgid "Auto" msgstr "" #: emoticontheme.cpp:853 -msgid "Stormy cloud" +msgid "Airplane" msgstr "" #: emoticontheme.cpp:854 -msgid "Lightning" +msgid "Turtle" msgstr "" #: emoticontheme.cpp:855 -msgid "Umbrella" -msgstr "" +#, fuzzy +msgid "Snail" +msgstr "&Saada epost" #: emoticontheme.cpp:856 -msgid "Island with a palm tree" +msgid "Black sheep" msgstr "" #: emoticontheme.cpp:857 -msgid "Telephone receiver" +msgid "Goat" msgstr "" #: emoticontheme.cpp:858 +msgid "Vampire bat" +msgstr "" + +#: emoticontheme.cpp:859 +msgid "Pizza" +msgstr "" + +#: emoticontheme.cpp:860 +msgid "Beer mug" +msgstr "" + +#: emoticontheme.cpp:861 +msgid "Martini glass" +msgstr "" + +#: emoticontheme.cpp:862 +msgid "Coffee cup" +msgstr "" + +#: emoticontheme.cpp:863 +msgid "Birthday cake" +msgstr "" + +#: emoticontheme.cpp:864 +msgid "Plate" +msgstr "" + +#: emoticontheme.cpp:865 +msgid "Bowl" +msgstr "" + +#: emoticontheme.cpp:866 +msgid "Star" +msgstr "" + +#: emoticontheme.cpp:867 +msgid "Rainbow" +msgstr "" + +#: emoticontheme.cpp:868 +msgid "Stormy cloud" +msgstr "" + +#: emoticontheme.cpp:869 +msgid "Lightning" +msgstr "" + +#: emoticontheme.cpp:870 +msgid "Umbrella" +msgstr "" + +#: emoticontheme.cpp:871 +msgid "Island with a palm tree" +msgstr "" + +#: emoticontheme.cpp:872 +msgid "Telephone receiver" +msgstr "" + +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "Epost" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 #, fuzzy msgid "Clock" msgstr "(Blokeeritud)" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 #, fuzzy msgid "Camera" msgstr "Sinu nimi" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 #, fuzzy msgid "Money" msgstr "Kuu" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 #, fuzzy msgid "KMess Icon" msgstr "KMess" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "Yhendus serveriga jupsib." + +#: initialview.cpp:377 +msgid "Connect" +msgstr "Yhenda" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "&Katkesta" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "" -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "" -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "Uus &Grupp" + +#: kmess.cpp:226 #, fuzzy msgid "Add a group" msgstr "&Lisa Grupp" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "Sisesta uus nimi sellele grupile:" -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "" - -#: kmess.cpp:638 +#: kmess.cpp:569 #, fuzzy msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" msgstr "Oled kindel et tahad grupi kustutada?" -#: kmess.cpp:640 +#: kmess.cpp:571 #, fuzzy msgid "Remove contact" msgstr "&Eemalda Kontakt" -#: kmess.cpp:641 kmess.cpp:684 -#, fuzzy -msgid "Remove" -msgstr "Eemaldatud" - -#: kmess.cpp:642 +#: kmess.cpp:573 #, fuzzy msgid "Remove and block" msgstr "Eemaldatud" -#: kmess.cpp:681 -#, fuzzy +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "Oled kindel et tahad grupi kustutada?" -#: kmess.cpp:683 +#: kmess.cpp:631 #, fuzzy -msgid "Remove group" -msgstr "Ee&malda Grupp" +msgctxt "dialog button" +msgid "Remove" +msgstr "Eemaldatud" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "Seda erilist gruppi ei saa muuta" -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 #, fuzzy msgid "Rename group" msgstr "Ym&ber nimeta Grupp" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "Yhenduses" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "Ei suutnud tuvastada" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "Yhenduseta" -#: kmess.cpp:1441 +#: kmess.cpp:1408 msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" -#: kmess.cpp:1445 +#: kmess.cpp:1412 #, fuzzy msgid "Error with notifications" msgstr "Eposti Teade" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "KMess" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "&Tegevused" @@ -1882,956 +2491,867 @@ msgstr "O&tsi Kontakti" msgid "Search by &Interest" msgstr "Otsi &Huvide alusel" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "O&tsi Kontakti" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "Uus &Kasutaja" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "Kasutaja &Seaded" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "Yh&enda" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "&Katkesta" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "Kuva Mu &Profiil" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "&Mu Staatus" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "Eemal teatega" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "Kuva &Lubatud Kontaktid" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 #, fuzzy msgid "Show &Offline Contacts" msgstr "Kuva &Lubatud Kontaktid" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "Kuva &Eemaldatud Kontaktid" -#: kmessinterface.cpp:303 +#: kmessinterface.cpp:318 #, fuzzy -msgid "Show &Display Pictures" +msgid "Show &Empty Groups" +msgstr "Tahan &Smile'si" + +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" msgstr "Pilt:" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "Epost" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "&Sorteeri Kontaktid" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "Grupp" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "Sidus/Vallas" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +#, fuzzy +msgid "[%1] %2 goes online" +msgstr " on offline'is" + +#: kmessview.cpp:363 +#, fuzzy +msgid "[%1] %2 goes offline" +msgstr " on offline'is" + +#: kmessview.cpp:559 #, fuzzy msgid "Cha&t" msgstr "Jutt" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "&Omadused" -#: kmessview.cpp:492 +#: kmessview.cpp:569 #, fuzzy msgid "&Remove from group" msgstr "Ee&malda Grupp" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +#, fuzzy +msgid "&Listening Music" +msgstr "Saadan faili " + +#: kmessview.cpp:601 #, fuzzy msgid "&Copy to Group" msgstr "&Liiguta Gruppi" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "&Liiguta Gruppi" -#: kmessview.cpp:549 +#: kmessview.cpp:646 #, fuzzy msgid "Move Group &Down" msgstr "&Liiguta Gruppi" -#: kmessview.cpp:550 +#: kmessview.cpp:647 #, fuzzy msgid "Move Group &Up" msgstr "&Liiguta Gruppi" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "Ee&malda Grupp" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "Ym&ber nimeta Grupp" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 #, fuzzy msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "Epost" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "" -#: kmessview.cpp:918 +#: kmessview.cpp:1075 +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "" + +#: kmessview.cpp:1076 +#, fuzzy +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "Sinu teate kirjatyyp:" + +#: kmessview.cpp:1085 msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "" -#: kmessview.cpp:921 +#: kmessview.cpp:1090 #, fuzzy -msgctxt "Contacts count in group tooltip" +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "&Lisa Kontakt" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +#, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "&Lisa Kontakt" + +#: kmessview.cpp:1504 msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "" -#: kmessview.cpp:1543 -#, fuzzy -msgid "You have 1 new e-mail in your inbox." -msgstr "uus kiri postkastis" +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" -#: kmessview.cpp:1547 -#, fuzzy -msgid "You have %1 new emails in your inbox." -msgstr "uut kirja postkastis" - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "KMess" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 msgid "Project support" msgstr "" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 #, fuzzy msgid "Current developer" msgstr "GnomeMeeting arendaja" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 #, fuzzy msgid "" "German translation, testing, documentation, web master, project management, " "etc..." msgstr "Saksa keelestanud, testimine, dokumentatsioon, ja veeb" -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "Veebi kujundus" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "Peamine ja kolla/sini/lilla smile'd ja Itaalia keelde pannud" -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "Liikuvad smile'd" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "Algne helitaust" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "" "Araabia keelestamine, faili salvestamise paranduseinternatsionaliseerimine." -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 #, fuzzy msgid "More Arabic translation" msgstr "Veel Tyrgi keelestamist" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "Braziilia ja Portigali keelde pannud" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 #, fuzzy msgid "Catalan translation" msgstr "Kataloonia keelde pannud" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 #, fuzzy msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "Lihtsustatud Hiina keelde pannud" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 #, fuzzy msgid "More Simplified Chinese translation" msgstr "Lihtsustatud Hiina keelde pannud" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 #, fuzzy msgid "Traditional Chinese translation" msgstr "Kataloonia keelde pannud" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 #, fuzzy msgid "Danish translation" msgstr "Hispaania keelde pannud" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 #, fuzzy msgid "More Danish translation" msgstr "Hispaania keelde pannud" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "Taani keelde pannud" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 #, fuzzy msgid "More Dutch translation" msgstr "Taani keelde pannud" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 #, fuzzy msgid "Estonian translation" msgstr "Korea keelde pannud" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 #, fuzzy msgid "Finnish translation" msgstr "Hispaania keelde pannud" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 #, fuzzy msgid "More Finnish translation" msgstr "Hispaania keelde pannud" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "Prantsuse keelde pannud" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 #, fuzzy msgid "More French translation, MSN6 emoticon definitions" msgstr "Prantsuse keelde pannud" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 #, fuzzy msgid "More French translation" msgstr "Prantsuse keelde pannud" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 #, fuzzy msgid "Hungarian translation" msgstr "Korea keelde pannud" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 #, fuzzy msgid "More Italian translation" msgstr "Korea keelde pannud" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "Korea keelde pannud" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 #, fuzzy msgid "Norsk BokmĆ„l translation" msgstr "Norra keelde pannud" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 #, fuzzy msgid "Slovenian translation" msgstr "Korea keelde pannud" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "Hispaania keelde pannud" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 #, fuzzy msgid "More Spanish translation" msgstr "lisa Hispaania keelde panekut" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 #, fuzzy msgid "Swedish translation" msgstr "Hispaania keelde pannud" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 #, fuzzy msgid "Thai translation" msgstr "Tai keelde pannud" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "Tyrgi keelde pannud" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "Veel Tyrgi keelestamist" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -#, fuzzy -msgid "Guido Solinas" -msgstr "Online" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "Faili ylekanne valmis." + +#: main.cpp:134 msgid "P4-Context field support" msgstr "" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "Xinerama parandused" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "Algne faili rabamis kood" -#: main.cpp:120 -msgid "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" msgstr "" -#: main.cpp:120 +#: main.cpp:138 +msgid "KWallet support" +msgstr "" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "Eri internatsionaliseerimise parandused." + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "Eri internatsionaliseerimise parandused." -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "GnomeMeeting arendaja" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "Kutt kellel on kott peas" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "Inspiraator ja osa koodist" -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 +#: main.cpp:150 #, fuzzy msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "Hyppava teate kood" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "EemalTaimeri kood" -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 +#: main.cpp:152 msgid "Close-to-tray icon screenshot code" msgstr "" -#: main.cpp:131 +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 #, fuzzy msgid "Your name here?" msgstr "Sinu nimi" -#: main.cpp:131 +#: main.cpp:156 msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" -#: main.cpp:134 +#: main.cpp:159 #, fuzzy msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Sinu nimi" -#: main.cpp:135 +#: main.cpp:160 #, fuzzy msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "Sinu eposti aadress:" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "Sisene automaatselt selle aadressiga" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 #, fuzzy msgid "The contact cancelled the session." msgstr "Sa loobusid kutsest." -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 #, fuzzy msgid "The contact rejected the invitation." msgstr "Kontakt keeldus kutsest." -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 #, fuzzy msgid "You have cancelled the session." msgstr "Sa loobusid kutsest." -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "Sa keeldusid kutsest." -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +msgid "Do you want to accept or cancel?" msgstr "" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +msgid "Click to cancel." msgstr "" -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 #, fuzzy msgid "Do you want to accept the file: %1 (%2)" msgstr "Tahad sa saada faili: " -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 #, fuzzy msgid "The transfer of %1 failed. Couldn't open file." msgstr "katkes. ei saanud faili avada." -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "Ylekanne kinnitatud." + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 #, fuzzy msgid "Connecting to %1, port %2" msgstr "Yhenduse sai taim-audi" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 #, fuzzy msgid "The transfer was cancelled" msgstr "Ylekanne kinnitatud." -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 #, fuzzy msgid "Connection established" msgstr "Yhenduse sai taim-audi" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 #, fuzzy msgid "Successfully transferred file: %1" msgstr "Edukalt rabatud fail: " -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 #, fuzzy msgid "The transfer of %1 failed. The file does not exist." msgstr "katkes. ei saanud faili avada." -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 #, fuzzy msgid "The transfer of %1 failed. The file could not be read." msgstr "katkes. Yhendust ei saanud avada" -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 #, fuzzy msgid "Sending file %1" msgstr "Saadan faili " -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "Ylekanne kinnitatud." - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 #, fuzzy msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "Sa loobusid kutsest." -#: network/applications/filetransferp2p.cpp:345 +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." +msgstr "" + +#: network/applications/filetransferp2p.cpp:348 +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "" + +#: network/applications/filetransferp2p.cpp:378 #, fuzzy -msgid "The transfer of %1 failed. Couldn't open file" +msgid "The transfer of file "%1" failed. Couldn't save the file." msgstr "katkes. ei saanud faili avada." -#: network/applications/filetransferp2p.cpp:524 +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 #, fuzzy -msgid "The contact cancelled the transfer." +msgid "The contact has cancelled the transfer of file "%1"." msgstr "Sa loobusid kutsest." -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "Sa loobusid kutsest." + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "" -#: network/applications/filetransferp2p.cpp:768 +#: network/applications/filetransferp2p.cpp:676 #, fuzzy -msgid "The transfer of %1 failed. The file does not exist." +msgid "Successfully sent file "%1"." +msgstr "Edukalt rabatud fail: " + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "Edukalt rabatud fail: " + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "katkes. ei saanud faili avada." -#: network/applications/filetransferp2p.cpp:773 +#: network/applications/filetransferp2p.cpp:818 #, fuzzy -msgid "The transfer of %1 failed. The file could not be read." +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "katkes. Yhendust ei saanud avada" -#: network/applications/filetransferp2p.cpp:809 +#: network/applications/filetransferp2p.cpp:855 #, fuzzy -msgid "Sending file %1 (%2)" +msgid "Sending file "%1" (%2)." msgstr "Saadan faili " -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "Sa loobusid kutsest." + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "Sind on kutsutud kohtumisele (kasutades GnomeMeeting'ut)." -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 #, fuzzy msgid "Starting GnomeMeeting. Connecting to %1." msgstr "Stardin GnomeMeeting'u. Yhendan " -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "Kutsun kontakti kohtumisele." -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "" -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 #, fuzzy msgid "The invitation was aborted. An internal error occured." msgstr "Kontakt keeldus kutsest." -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 #, fuzzy msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "katkes. Ei suutnud avada soketit" -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 #, fuzzy msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "Sa loobusid kutsest." -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "" -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 #, fuzzy msgid "The invitation was aborted." msgstr "Sa loobusid kutsest." -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "Sind kutsuti selle isiku lauda jagama." -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 #, fuzzy msgid "Starting KRDC. Connecting to %1." msgstr "Stardin KRDC. Yhendun " -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." -msgstr "" +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +#, fuzzy +msgid "The contact rejected the invitation. An internal error occured." +msgstr "Kontakt keeldus kutsest." -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +#, fuzzy +msgid "The transfer failed." +msgstr "Asja rabamine nagu " + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." msgstr "" -#: network/applications/p2papplication.cpp:1503 -#, fuzzy -msgid "The transfer failed. Data preparation failed." -msgstr "Sa loobusid kutsest." - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -#, fuzzy -msgid "The contact rejected the invitation. An internal error occured." -msgstr "Kontakt keeldus kutsest." - -#: network/applications/p2papplication.cpp:1626 -#, fuzzy -msgid "The transfer failed." -msgstr "Asja rabamine nagu " - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +#, fuzzy +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "katkes. Ei suutnud avada soketit" + +#: network/applications/p2papplicationbase.cpp:1015 +#, fuzzy +msgid "The transfer failed. An internal error occured." +msgstr "Kontakt keeldus kutsest." + +#: network/applications/p2papplicationbase.cpp:1176 +#, fuzzy +msgid "The transfer failed. Couldn't open data source." +msgstr "katkes. Ei suutnud avada soketit" + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "" + +#: network/applications/p2papplication.cpp:1071 +#, fuzzy +msgid "The transfer failed. Data preparation failed." +msgstr "Sa loobusid kutsest." + +#: network/applications/p2papplication.cpp:1178 #, fuzzy msgid "The invitation was cancelled. Message was not directed to us." msgstr "Sa loobusid kutsest." -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 #, fuzzy msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "katkes. Ei suutnud avada soketit" -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "" -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "" -#: network/applications/p2papplication.cpp:3297 -#, fuzzy -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "katkes. Ei suutnud avada soketit" - -#: network/applications/p2papplication.cpp:3316 -#, fuzzy -msgid "The transfer failed. An internal error occured." -msgstr "Kontakt keeldus kutsest." - -#: network/applications/p2papplication.cpp:3693 -#, fuzzy -msgid "The transfer failed. Couldn't open data source." -msgstr "katkes. Ei suutnud avada soketit" - -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:3113 msgid "Waiting for connection" msgstr "" -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 #, fuzzy msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " "accept." msgstr "katkes. Ei suutnud avada soketit" -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 #, fuzzy msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." msgstr "katkes. Ei suutnud avada soketit" -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "" -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 #, fuzzy msgid "You are invited to start a voice conversation." msgstr "Sind kutsuti selle isiku lauda jagama." -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 #, fuzzy msgid "" "You are invited to start a voice conversation but support for this was not " "installed" msgstr "Sind on kutsutud kohtumisele (kasutades GnomeMeeting'ut)." -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 #, fuzzy msgid "You have cancelled the voice conversation." msgstr "Sa loobusid kutsest." -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 #, fuzzy msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "Sa loobusid kutsest." -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 #, fuzzy msgid "Start voice conversation. Connecting to %1." msgstr "Stardin GnomeMeeting'u. Yhendan " -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 #, fuzzy msgid "Start voice conversation. Listening on %1." msgstr "Stardin GnomeMeeting'u. Yhendan " -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 #, fuzzy msgid "Inviting the contact to a voice conversation." msgstr "Kutsun kontakti kohtumisele." -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 #, fuzzy msgid "The contact is inviting you for '%1', but this is not implemented yet." @@ -2878,658 +3398,865 @@ msgstr "" msgid "Receiving file %1" msgstr "Raban faili " -#: network/msnconnection.cpp:477 -#, fuzzy -msgid "1 ping lost" -msgstr "Raban loendid" - -#: network/msnconnection.cpp:481 -#, fuzzy -msgid "%1 pings lost" -msgstr "Raban loendid" - -#: network/msnconnection.cpp:496 -#, fuzzy -msgid "The connection to the server was lost." -msgstr "Yhendus serveriga jupsib." - -#: network/msnconnection.cpp:704 -msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." +#: network/msnconnection.cpp:589 +msgid "KMess could not access the remote webservice.
Details: %1" msgstr "" -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "" - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" - -#: network/msnnotificationconnection.cpp:724 -#, fuzzy -msgid "Show MSN Messenger Service status?" -msgstr "Kuvan .NET teenuse staatuse?" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "Serveri Viga" - -#: network/msnnotificationconnection.cpp:1344 +#: network/msnnotificationconnection.cpp:1317 #, fuzzy msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" msgstr "Yhendus katkestatud teise logini kasuks" -#: network/msnnotificationconnection.cpp:1558 +#: network/msnnotificationconnection.cpp:1532 msgid "Got synchronization" msgstr "Saavutati synkroon" -#: network/msnnotificationconnection.cpp:1699 +#: network/msnnotificationconnection.cpp:1670 #, fuzzy -msgid "Authenticating" +msgid "Authenticating..." msgstr "Ei suutnud tuvastada" -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "Saabus kasutaja kinnitus" - -#: network/msnnotificationconnection.cpp:1752 +#: network/msnnotificationconnection.cpp:1719 msgid "Waiting for contact list..." msgstr "" -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "Saadan teate serverile" - -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." msgstr "" -#: network/msnnotificationconnection.cpp:2042 +#: network/msnnotificationconnection.cpp:1894 +msgid "Authentication failed, please verify your account name and password." +msgstr "" + +#: network/msnnotificationconnection.cpp:1993 #, fuzzy msgid "Connecting..." msgstr "Yhenda" -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" +#: network/msnnotificationconnection.cpp:2167 +msgid "Unknown command received from the server: %1" msgstr "" -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 +#: network/msnnotificationconnection.cpp:2192 msgid "Invalid command syntax" msgstr "" -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -#, fuzzy -msgid "There was an internal error in KMess: %1" -msgstr "Serveris oli sisene viga" - -#: network/msnnotificationconnection.cpp:2243 +#: network/msnnotificationconnection.cpp:2196 msgid "Invalid command parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2246 +#: network/msnnotificationconnection.cpp:2199 msgid "The email you have tried to add is not a MSN Messenger account" msgstr "" -#: network/msnnotificationconnection.cpp:2249 +#: network/msnnotificationconnection.cpp:2204 msgid "Domain name missing" msgstr "" -#: network/msnnotificationconnection.cpp:2252 +#: network/msnnotificationconnection.cpp:2208 msgid "Already logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2255 +#: network/msnnotificationconnection.cpp:2211 #, fuzzy msgid "The account name given is invalid" msgstr "Kasutaja nimi on vale" -#: network/msnnotificationconnection.cpp:2258 +#: network/msnnotificationconnection.cpp:2215 msgid "" "That account name is invalid, or your passport has not been confirmed yet" msgstr "" -#: network/msnnotificationconnection.cpp:2261 +#: network/msnnotificationconnection.cpp:2218 msgid "Your contact list is full" msgstr "Su kontakti loendisse ei mahu enam" -#: network/msnnotificationconnection.cpp:2264 +#: network/msnnotificationconnection.cpp:2223 msgid "Invalid SBP parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2267 +#: network/msnnotificationconnection.cpp:2226 #, fuzzy msgid "This contact is already on your list" msgstr "Lisa see kontakt oma \"Tuttavate\" loentisse" -#: network/msnnotificationconnection.cpp:2270 +#: network/msnnotificationconnection.cpp:2230 #, fuzzy msgid "This contact is not on your list" msgstr "Lisa see kontakt oma \"Tuttavate\" loentisse" -#: network/msnnotificationconnection.cpp:2273 +#: network/msnnotificationconnection.cpp:2234 msgid "This contact is not online" msgstr "" -#: network/msnnotificationconnection.cpp:2276 +#: network/msnnotificationconnection.cpp:2239 msgid "Already in this mode" msgstr "" -#: network/msnnotificationconnection.cpp:2279 +#: network/msnnotificationconnection.cpp:2243 #, fuzzy msgid "Contact is in the opposite list" msgstr "Lisa see kontakt oma \"Tuttavate\" loentisse" -#: network/msnnotificationconnection.cpp:2282 +#: network/msnnotificationconnection.cpp:2247 +msgid "" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." +msgstr "" + +#: network/msnnotificationconnection.cpp:2251 #, fuzzy msgid "Your contact list has too many groups" msgstr "Su kontakti loendisse ei mahu enam" -#: network/msnnotificationconnection.cpp:2285 +#: network/msnnotificationconnection.cpp:2255 #, fuzzy msgid "This group can't be changed" msgstr "Seda erilist gruppi ei saa muuta" -#: network/msnnotificationconnection.cpp:2288 +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "Su kontakti loendisse ei mahu enam" + +#: network/msnnotificationconnection.cpp:2264 msgid "This group is not empty" msgstr "" -#: network/msnnotificationconnection.cpp:2291 -msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" -msgstr "" - -#: network/msnnotificationconnection.cpp:2294 +#: network/msnnotificationconnection.cpp:2268 msgid "The group name is too long" msgstr "" -#: network/msnnotificationconnection.cpp:2297 +#: network/msnnotificationconnection.cpp:2273 msgid "Attempted to change group \"0\"" msgstr "" -#: network/msnnotificationconnection.cpp:2300 +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +#, fuzzy +msgid "There was an internal error in KMess: %1" +msgstr "Serveris oli sisene viga" + +#: network/msnnotificationconnection.cpp:2277 #, fuzzy msgid "Invalid Group" msgstr "Ym&ber nimeta Grupp" -#: network/msnnotificationconnection.cpp:2303 +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 msgid "Switchboard server failed" msgstr "" -#: network/msnnotificationconnection.cpp:2306 +#: network/msnnotificationconnection.cpp:2287 #, fuzzy msgid "Transfer to switchboard server failed" msgstr "Saadan teate serverile" -#: network/msnnotificationconnection.cpp:2309 +#: network/msnnotificationconnection.cpp:2291 msgid "Direct connection (MSNSLP) error, connection failed" msgstr "" -#: network/msnnotificationconnection.cpp:2312 +#: network/msnnotificationconnection.cpp:2295 msgid "Required field missing" msgstr "" -#: network/msnnotificationconnection.cpp:2315 +#: network/msnnotificationconnection.cpp:2299 msgid "Not logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" +#: network/msnnotificationconnection.cpp:2302 +msgid "No permissions given for this account" msgstr "" -#: network/msnnotificationconnection.cpp:2322 +#: network/msnnotificationconnection.cpp:2307 msgid "Command is disabled" msgstr "" -#: network/msnnotificationconnection.cpp:2325 +#: network/msnnotificationconnection.cpp:2310 msgid "Your account is banned." msgstr "" -#: network/msnnotificationconnection.cpp:2329 +#: network/msnnotificationconnection.cpp:2314 #, fuzzy msgid "Challenge response failed" msgstr "Asja rabamine nagu " -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" +#: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" msgstr "" -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" +#: network/msnnotificationconnection.cpp:2323 +msgid "You are opening chat sessions too fast" msgstr "" -#: network/msnnotificationconnection.cpp:2341 +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" +msgstr "Sa loobusid kutsest." + +#: network/msnnotificationconnection.cpp:2334 msgid "Unexpected command sequence" msgstr "" -#: network/msnnotificationconnection.cpp:2344 +#: network/msnnotificationconnection.cpp:2338 #, fuzzy msgid "Bad friend name" msgstr "Sinu tore nimi:" -#: network/msnnotificationconnection.cpp:2348 +#: network/msnnotificationconnection.cpp:2344 msgid "Bad CVR data" msgstr "" -#: network/msnnotificationconnection.cpp:2353 +#: network/msnnotificationconnection.cpp:2350 msgid "The server reports KMess is flooding it with too many data" msgstr "" -#: network/msnnotificationconnection.cpp:2358 +#: network/msnnotificationconnection.cpp:2357 #, fuzzy msgid "Authentication ticket was incorrect" msgstr "Ei suutnud tuvastada" -#: network/msnnotificationconnection.cpp:2362 +#: network/msnnotificationconnection.cpp:2360 msgid "You can't start a chat with someone while you are invisible." msgstr "" -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." +#: network/msnnotificationconnection.cpp:2364 +msgid "Not accepting new contacts" msgstr "" -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." +#: network/msnnotificationconnection.cpp:2368 +msgid "" +"You have a kids passport account, you need parental consent to chat online." msgstr "" -#: network/msnnotificationconnection.cpp:2373 +#: network/msnnotificationconnection.cpp:2371 +msgid "Your passport account needs to be verified first." +msgstr "" + +#: network/msnnotificationconnection.cpp:2375 msgid "Bad USR ticket" msgstr "" -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" msgstr "" -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" +#: network/msnnotificationconnection.cpp:2399 +#, fuzzy +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." msgstr "Serveris oli sisene viga" +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + #: network/msnnotificationconnection.cpp:2414 -#, fuzzy -msgid "The server is too busy" -msgstr "Server on umbes" - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "Server pole saadaval" - -#: network/msnnotificationconnection.cpp:2422 msgid "Peer notification server down" msgstr "Otsa teatis server on maas" -#: network/msnnotificationconnection.cpp:2426 +#: network/msnnotificationconnection.cpp:2418 #, fuzzy msgid "The server is going down" msgstr "Server tuleb maha varsti" -#: network/msnnotificationconnection.cpp:2429 +#: network/msnnotificationconnection.cpp:2422 msgid "The server is going down soon" msgstr "Server tuleb maha varsti" -#: network/msnnotificationconnection.cpp:2433 +#: network/msnnotificationconnection.cpp:2427 msgid "Write is blocking" msgstr "" -#: network/msnnotificationconnection.cpp:2436 +#: network/msnnotificationconnection.cpp:2431 msgid "Session is overloaded" msgstr "" -#: network/msnnotificationconnection.cpp:2441 +#: network/msnnotificationconnection.cpp:2438 #, fuzzy msgid "The server is not available" msgstr "Server pole saadaval" -#: network/msnnotificationconnection.cpp:2444 +#: network/msnnotificationconnection.cpp:2442 msgid "Authentication failed" msgstr "Ei suutnud tuvastada" -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" +#: network/msnnotificationconnection.cpp:2449 +msgid "Unknown error code received from the server: %1" msgstr "" -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +msgctxt "Error dialog box title" +msgid "MSN error" msgstr "" -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "" +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "minutit" +msgstr[1] "minutit" #: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." +msgid "Server closes for maintenance in %1!" msgstr "" #: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." msgstr "" -#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:2901 msgid "Lost reference to SOAP client" msgstr "" -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +msgid "KMess could not process Offline-IM messages.
Details: %1" msgstr "" -#: network/msnnotificationconnection.cpp:3209 +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "Ei suutnud tuvastada" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "Serveris oli sisene viga" + +#: network/msnnotificationconnection.cpp:3242 +msgctxt "Login error message, with more details for developer versions" msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" msgstr "" -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" msgstr "" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "Yhendus serveriga jupsib." + +#: network/msnnotificationconnection.cpp:3302 +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" +msgstr "" + +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "Serveri Viga" + +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "Yhenduse sai taim-audi" + +#: network/msnsockettcp.cpp:368 +#, fuzzy +msgid "1 ping lost" +msgstr "Raban loendid" + +#: network/msnsockettcp.cpp:372 +#, fuzzy +msgid "%1 pings lost" +msgstr "Raban loendid" + +#: network/msnsockettcp.cpp:387 +#, fuzzy +msgid "The connection to the server was lost." +msgstr "Yhendus serveriga jupsib." + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "See isik on offline'is v6i peidus" -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "" -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 #, fuzzy msgid "The message \"%1\" was not received!" msgstr "ei l4inud kohale." -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "" -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +msgid "In %1's chat: %2" msgstr "" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +msgid "%1 says:
'%2'" msgstr "" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" -msgstr "" - -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" -msgstr "" - -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" -msgstr "" - -#: notification/notificationchat.cpp:200 +#: notification/chatnotification.cpp:171 #, fuzzy -msgid "%1 has sent you a handwritten message!" +msgid "%1 has sent you an offline message:
'%2'" msgstr " on liinil" -#: notification/notificationchat.cpp:204 -#, fuzzy -msgid "%1 has sent you a nudge!" -msgstr " on liinil" - -#: notification/notificationchat.cpp:208 -#, fuzzy -msgid "%1 has sent you a wink!" -msgstr " on liinil" - -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" +#: notification/chatnotification.cpp:178 +msgid "%1's chat requests attention!" msgstr "" -#: notification/notificationchat.cpp:215 +#: notification/chatnotification.cpp:183 +msgid "%1:
%2" +msgstr "" + +#: notification/chatnotification.cpp:190 #, fuzzy -msgid "%1 is sending you a file!" +msgid "%1 has sent you a handwritten message!" msgstr " on liinil" -#: notification/notificationchat.cpp:216 +#: notification/chatnotification.cpp:194 #, fuzzy -msgid "%1 has sent you an invitation!" +msgid "%1 has sent you a nudge!" msgstr " on liinil" -#: notification/notificationchat.cpp:223 +#: notification/chatnotification.cpp:198 #, fuzzy -msgid "%1 has canceled the webcam session!" +msgid "%1 has sent you a wink!" +msgstr " on liinil" + +#: notification/chatnotification.cpp:204 +msgid "%1 wants to use the webcam!" +msgstr "" + +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" +msgstr " on liinil" + +#: notification/chatnotification.cpp:206 +#, fuzzy +msgid "%1 has sent you an invitation!" +msgstr " on liinil" + +#: notification/chatnotification.cpp:213 +#, fuzzy +msgid "%1 has canceled the webcam session!" msgstr "Sa loobusid kutsest." -#: notification/notificationchat.cpp:224 +#: notification/chatnotification.cpp:214 #, fuzzy -msgid "%1 has canceled the file transfer!" +msgid "%1 has canceled the file transfer!" msgstr "Sa loobusid kutsest." -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +msgid "%1's activity has been canceled!" msgstr "" -#: notification/notificationchat.cpp:232 -msgid "%1 has accepted to use the webcam!" -msgstr "" - -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" -msgstr "" - -#: notification/notificationchat.cpp:234 -msgid "%1 has accepted your invitation!" -msgstr "" - -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" -msgstr "" - -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" -msgstr "" - -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" -msgstr "" - -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" -msgstr "" - -#: notification/notificationchat.cpp:251 +#: notification/chatnotification.cpp:222 #, fuzzy -msgid "The file transfer with %1 has failed!" +msgid "%1 has accepted to use the webcam!" +msgstr "Sa loobusid kutsest." + +#: notification/chatnotification.cpp:223 +#, fuzzy +msgid "%1 has accepted the file transfer!" +msgstr "Sa loobusid kutsest." + +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" +msgstr " on liinil" + +#: notification/chatnotification.cpp:231 +#, fuzzy +msgid "%1 has ended the webcam session!" +msgstr "Sa loobusid kutsest." + +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "Asja rabamine nagu " -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:233 +msgid "%1's activity has ended!" msgstr "" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -#, fuzzy -msgid "%1 is now online" -msgstr " on liinil" - -#: notification/notificationcontactstatus.cpp:76 -#, fuzzy -msgid "%1 has gone away" -msgstr " on liinil" - -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/chatnotification.cpp:240 +msgid "%1's webcam session has failed!" msgstr "" -#: notification/notificationcontactstatus.cpp:78 +#: notification/chatnotification.cpp:241 #, fuzzy -msgid "%1 is now busy" -msgstr " on liinil" +msgid "The file transfer with %1 has failed!" +msgstr "Asja rabamine nagu " -#: notification/notificationcontactstatus.cpp:79 -#, fuzzy -msgid "%1 has become invisible" -msgstr " on liinil" - -#: notification/notificationcontactstatus.cpp:80 -#, fuzzy -msgid "%1 has gone idle" -msgstr " on liinil" - -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/chatnotification.cpp:242 +msgid "%1's activity has ended with an error!" msgstr "" -#: notification/notificationcontactstatus.cpp:82 +#: notification/contactstatusnotification.cpp:70 #, fuzzy -msgid "%1 is on the phone" +msgid "%1 is now online" msgstr " on liinil" -#: notification/notificationcontactstatus.cpp:83 +#: notification/contactstatusnotification.cpp:71 #, fuzzy -msgid "%1 is out for lunch" +msgid "%1 has gone away" msgstr " on liinil" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/contactstatusnotification.cpp:72 +msgid "%1 will be right back" msgstr "" -#: settings/accountswidget.cpp:81 +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" +msgstr " on liinil" + +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" +msgstr " on liinil" + +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" +msgstr " on liinil" + +#: notification/contactstatusnotification.cpp:76 +#, fuzzy +msgid "%1 has logged out" +msgstr " on liinil" + +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" +msgstr " on liinil" + +#: notification/contactstatusnotification.cpp:78 +#, fuzzy +msgid "%1 is out for lunch" +msgstr " on liinil" + +#: notification/newemailnotification.cpp:78 +msgid "New email:
'%1'
by '%2'" +msgstr "" + +#: settings/accountpage.cpp:69 msgid "Browse..." msgstr "" -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +msgid "Browse and crop picture..." msgstr "" -#: settings/accountswidget.cpp:404 +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" + +#: settings/accountpage.cpp:448 #, fuzzy -msgid "Display Picture" +msgid "Downloading of display picture failed" msgstr "Pilt:" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" -msgstr "" - -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "" - -#: settings/chatstylepage.cpp:317 -msgid "Great!" -msgstr "" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 #, fuzzy msgid "&Delete" msgstr "&Eemalda Kontakt" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "Seaded" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 #, fuzzy msgid "Account" msgstr "Kasutajad" -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 #, fuzzy msgid "My Account" msgstr "Kasutajad" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "Alarmid" -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 #, fuzzy msgid "Alerts and Notifications" msgstr "Eposti Teade" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "Jutustamine" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "Jutu logimine" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "" + +#: settings/accountsettingsdialog.cpp:201 +msgid "The email address you have entered is already in use: '%1'" +msgstr "" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "Oled kindel et tahad konto kustutada?" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "Oled kindel et tahad konto kustutada?" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "" + +#: settings/chatstylepage.cpp:341 +msgid "Great!" +msgstr "" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "Seaded" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +msgid "Accounts" +msgstr "Kasutajad" + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "Eposti Teade" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "Salvesta jutu failid sellesse pea kausta:" + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." msgstr "" -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "" +#: systemtraywidget.cpp:245 +msgid "- %1 (%2)" +msgstr "" + +#~ msgid "Picture:" +#~ msgstr "Pilt:" + +#, fuzzy +#~ msgid "Speed:" +#~ msgstr "Serveri Viga" + +#, fuzzy +#~ msgid "Login Information" +#~ msgstr "Kuva eposti info kontakti loendis" + +#~ msgid "Logging in..." +#~ msgstr "Login sisse..." + +#~ msgid "Use a specified command:" +#~ msgstr "Kasuta kindlat k4sku:" + +#, fuzzy +#~ msgid "Email: " +#~ msgstr "Epost" + +#, fuzzy +#~ msgid "Remove group" +#~ msgstr "Ee&malda Grupp" + +#, fuzzy +#~ msgid "Show &Display Pictures" +#~ msgstr "Pilt:" + +#, fuzzy +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr "uus kiri postkastis" + +#, fuzzy +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr "uut kirja postkastis" + +#, fuzzy +#~ msgid "Guido Solinas" +#~ msgstr "Online" + +#, fuzzy +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "katkes. ei saanud faili avada." + +#, fuzzy +#~ msgid "Sidebar" +#~ msgstr "Kuva/Peida &Kontakti Kylgriba" + +#, fuzzy +#~ msgid "New contact's group" +#~ msgstr "Uus &Kontakt" + +#, fuzzy +#~ msgid "Enter your login information:" +#~ msgstr "Voi sisesta login info:" + +#, fuzzy +#~ msgid "Your friendly name:" +#~ msgstr "Sinu tore nimi:" + +#, fuzzy +#~ msgid "Your email address:" +#~ msgstr "Eposti aadress: " + +#~ msgid "Your password:" +#~ msgstr "Sinu parool:" + +#, fuzzy +#~ msgid "Display picture:" +#~ msgstr "Pilt:" + +#, fuzzy +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "Kuva teade kui kiri tuleb \"teistesse kausta\"" + +#~ msgid "Organize chat folders by:" +#~ msgstr "Korralda jutu kaustad:" + +#, fuzzy +#~ msgid "&Show graphics in chat messages" +#~ msgstr "Kuva ajatempel jutus" + +#~ msgid "Use Hotmail" +#~ msgstr "Kasuta Hotmail'i" + +#~ msgid "says:" +#~ msgstr "lausub:" + +#~ msgid "Current name: " +#~ msgstr "Hetke nimi: " + +#, fuzzy +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr "Kuvan .NET teenuse staatuse?" + +#~ msgid "Received user confirmation" +#~ msgstr "Saabus kasutaja kinnitus" + +#~ msgid "Transfer to notification server" +#~ msgstr "Saadan teate serverile" + +#, fuzzy +#~ msgid "The server is too busy" +#~ msgstr "Server on umbes" + +#~ msgid "The server is unavailable" +#~ msgstr "Server pole saadaval" + #~ msgid "Add contact" #~ msgstr "Lisa kontakt" @@ -3537,9 +4264,6 @@ msgstr "" #~ msgid "KMess Notification" #~ msgstr "Eposti Teade" -#~ msgid "Accounts" -#~ msgstr "Kasutajad" - #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" @@ -3550,9 +4274,6 @@ msgstr "" #~ "Your emails" #~ msgstr "nuubik@hotmail.com" -#~ msgid "Insert an emoticon" -#~ msgstr "Topi yks smile'i" - #~ msgid "Away - Idle" #~ msgstr "Kaua vait" @@ -3581,17 +4302,6 @@ msgstr "" #~ msgid "(On the Phone)" #~ msgstr "(Telefoniga)" -#, fuzzy -#~ msgid "Connection timeout" -#~ msgstr "Yhenduse sai taim-audi" - -#~ msgid "Connect" -#~ msgstr "Yhenda" - -#, fuzzy -#~ msgid "Listening to %1" -#~ msgstr "Saadan faili " - #, fuzzy #~ msgid "File transfer dialog message" #~ msgstr "Faili ylekanne valmis." @@ -3626,9 +4336,6 @@ msgstr "" #~ msgid "You can't login to hotmail with this account." #~ msgstr "sa ei saa logida hotmail'i selle nimega." -#~ msgid "The connection to the server failed." -#~ msgstr "Yhendus serveriga jupsib." - #~ msgid "You may not be connected to the internet." #~ msgstr "Oled kindel, et sul netiyhendus on?" @@ -3652,10 +4359,6 @@ msgstr "" #~ msgid "Show popup notifications for program events" #~ msgstr "Kuva teated programmi syndmustest" -#, fuzzy -#~ msgid "Server:" -#~ msgstr "Serveri Viga" - #, fuzzy #~ msgid "Connection good" #~ msgstr "Yhenduse sai taim-audi" @@ -3672,10 +4375,6 @@ msgstr "" #~ msgid "New chat notification:" #~ msgstr "Eposti Teade" -#, fuzzy -#~ msgid "%1 is offline" -#~ msgstr " on offline'is" - #, fuzzy #~ msgid "You have new mail:" #~ msgstr "Sul on uus kiri" @@ -3687,16 +4386,6 @@ msgstr "" #~ "in your inbox" #~ msgstr "sinu postkastis" -#, fuzzy -#~ msgid "" -#~ "\"%1\"\n" -#~ "from %2\n" -#~ "in another folder" -#~ msgstr "teises kaustas" - -#~ msgid "and" -#~ msgstr "ja" - #~ msgid "says: " #~ msgstr "lausub:" @@ -3722,10 +4411,6 @@ msgstr "" #~ msgid "Chat - %1" #~ msgstr "Jutt" -#, fuzzy -#~ msgid "Chat - %1 et al." -#~ msgstr " et al." - #, fuzzy #~ msgid "The transfer of %1 failed. Couldn't create a socket." #~ msgstr "katkes. Ei suutnud avada soketit" @@ -3739,10 +4424,6 @@ msgstr "" #~ msgid "Get New Emoticon or Sound &Themes" #~ msgstr "Raba uusi smile'si ja helisi" -#, fuzzy -#~ msgid "Chat message layout:" -#~ msgstr "Sinu teate kirjatyyp:" - #, fuzzy #~ msgid "n&ame" #~ msgstr "Sinu nimi" diff --git a/po/fi.po b/po/fi.po index 942b8d1..79b560e 100644 --- a/po/fi.po +++ b/po/fi.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: fi\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" "PO-Revision-Date: 2007-08-12 22:01+0300\n" "Last-Translator: Jussi Timperi \n" "Language-Team: Finnish\n" @@ -19,47 +19,40 @@ msgstr "" "X-Generator: KBabel 1.11.4\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "Kirjaudutaan sisƤƤn..." - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -#, fuzzy -msgid "S&end" -msgstr "LƤ&hetƤ" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 #, fuzzy msgid "Ne&w Line" msgstr "Uusi rivi" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 #, fuzzy -msgid "Sidebar" -msgstr "NƤytƤ/Piilota &yhteystietopalkki" +msgid "S&end" +msgstr "LƤ&hetƤ" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +msgid "Contacts" +msgstr "Yhteistiedot" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 #, fuzzy msgid "" "Enter here the email address of the person you wish to add to your contact " @@ -67,42 +60,40 @@ msgid "" msgstr "SyƶtƤ lisƤttƤvƤn henkilƶn sƤhkƶpostiosoite:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 #, fuzzy msgid "Email address" msgstr "SƤhkƶpostiosoite:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 #, fuzzy -msgid "New contact's group" -msgstr "Uusi &Yhteystieto" +msgid "Initial group" +msgstr "&UudelleennimeƤ ryhmƤ" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 #, fuzzy msgid "" "Enter a message to be automatically sent to people who try to message you." @@ -111,125 +102,337 @@ msgstr "" "henkilƶlle, joka yrittƤƤ lƤhettƤƤ sinulle viestin:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 #, fuzzy msgid "&Automatic away message" msgstr "Kirjoita poissaoloviesti" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" msgstr "" -"%1\n" -"on lisƤnnyt sinut yhteystietolistalleen. Haluatko:" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 -msgid "&Add this contact to your \"Friends\" list" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 +#, fuzzy +msgid "&Add this person to my \"Friends\" list" msgstr "&LisƤƤ tƤmƤ yhteystieto \"YstƤvƤt\"-listallesi" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 -msgid "&Not add this contact, but let them see your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 +#, fuzzy +msgid "Do not add this person; only allow them to see my online state" msgstr "&ƄlƤ lisƤƤ tƤtƤ henkilƶƤ listalle, mutta anna hƤnen nƤhdƤ tilasi" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 -msgid "Block this person from contacting &you or seeing your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 +#, fuzzy +msgid "&Block this person from contacting me or seeing my online state" msgstr "&EstƤ tƤtƤ henkilƶƤ ottamasta sinuun yhteyttƤ ja nƤkemƤstƤ sinua" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, no-c-format +msgid "Contact Properties for %1" +msgstr "Yhteystiedon %1 ominaisuudet" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +#, fuzzy +msgid "Restore" +msgstr "Poistettu" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "KƤytƤ tƤlle henkilƶlle vaihtoehtoista nimeƤ" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "NƤytƤ viestikupla, kun tƤmƤ henkilƶ kirjautuu sisƤƤn tai ulos" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "ƄƤni:" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +#, fuzzy +msgid "&Clear Cache" +msgstr "TyhjennƤ vƤlilehti" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +#, fuzzy +msgid "Notes" +msgstr "Huomautus" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "Verkkoyhteysikkuna" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "Tyyppi:" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +#, fuzzy +msgid "Standard" +msgstr "TƤhti" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "LƤ&hetƤ" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 msgid "Cancel" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -msgid "Enter your login information:" -msgstr "SyƶtƤ kirjautumistiedot:" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" +msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 #, fuzzy -msgid "Password" +msgid "Email address:" +msgstr "SƤhkƶpostiosoite: " + +#. i18n: tag string +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +#, fuzzy +msgid "Password:" msgstr "Salasana:" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 #, fuzzy msgid " Account options " msgstr "Tilin &Asetukset" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 #, fuzzy msgid "Remem&ber this profile" msgstr "Muista tƤmƤ profiili" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "&YhdistƤ" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "SyƶtƤ henkilƶkohtainen viestisi tƤhƤn" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr "Tilin &Asetukset" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "SyƶtƤ nimi, jonka haluat paikalla olevien yhteystietojesi nƤkevƤn." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 -msgid "Your friendly name:" +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 +#, fuzzy +msgid "&Friendly name:" msgstr "Lempinimesi:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" @@ -238,15 +441,15 @@ msgstr "" "osoitteessa http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 #, fuzzy -msgid "Your email address:" +msgid "&Email address:" msgstr "SƤhkƶpostiosoite: " #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" @@ -255,40 +458,41 @@ msgstr "" "osoitteessa http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" -msgstr "Salasanasi:" - -#. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 #, fuzzy -msgid "Remember Password" +msgid "&Password:" msgstr "Salasana:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 -msgid "Display picture:" -msgstr "Keskustelukuvake:" +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 +#, fuzzy +msgid "&Remember Password" +msgstr "Salasana:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 +msgid "Display Picture" +msgstr "Keskustelukuvake" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 #, fuzzy msgid "C&hange..." msgstr "&Vaihda..." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -msgid "Don't show a displa&y picture" -msgstr "ƄlƤ nƤytƤ keskustelukuv&aketta" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -305,35 +509,37 @@ msgstr "" "olet julkisella tietokoneella (vaikkapa Internet-kahvilassa)." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +#, fuzzy +msgid "Re&member the settings of this account" msgstr "Muista tƤmƤn tilin asetukset" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "Jos valittu, KMess kirjautuu sisƤƤn automaattisesti tƤllƤ tunnuksella." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 #, fuzzy -msgid "Login &with this account automatically at start-up" +msgid "Login &with this account automatically" msgstr "KƤynnistettƤessƤ kirjaudu automaattisesti tƤllƤ tunnuksella" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "&Tallenna lokiin kaikki keskustelut" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -344,8 +550,8 @@ msgstr "" "tiliƤ." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." @@ -354,26 +560,26 @@ msgstr "" "varmistettu." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "PyydƤ varmistussƤhkƶpostia" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 msgid "https://accountservices.passport.net/" msgstr "https://accountservices.passport.net/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "Mene sivulle accountservices.passport.net" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." @@ -382,40 +588,103 @@ msgstr "" "sƤhkƶpostiosoite Passport-tiliksi." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "Luo uusi tili" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "http://register.passport.com" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "Mene sivulle register.passport.com" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 #, fuzzy -msgid "Popup notifications" +msgid "Saved accounts:" +msgstr "KƤyttƤjƤtilit" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +#, fuzzy +msgid "Click" +msgstr "Kello" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "KƤyttƤjƤtili" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "Poistettu" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "Virhe ilmoituksissa" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "Yhteistiedot" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 #, fuzzy msgid "Show notifications when your contacts:" msgstr "NƤytƤ ilmoitus kun yhteystieto lƤhtee pois linjoilta" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 #, fuzzy msgid "" "If enabled, a popup message is shown when one of your contacts connects to " @@ -425,15 +694,15 @@ msgstr "" "linjoilta." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 #, fuzzy msgid "&Go online" msgstr "Poissa linjoilta" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 #, fuzzy msgid "" "If enabled, a popup message is shown when one of your contacts starts a " @@ -443,14 +712,14 @@ msgstr "" "linjoilta." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 #, fuzzy msgid "" "If enabled, a popup message is shown every time one of your contacts sends " @@ -460,15 +729,15 @@ msgstr "" "linjoilta." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 #, fuzzy msgid "S&end you a message" msgstr "on lƤhettƤnyt sinulle poissa linjoilta -viestin viestin" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 #, fuzzy msgid "" "If enabled, a popup message is also shown when your contacts change their " @@ -478,16 +747,16 @@ msgstr "" "linjoilta." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." @@ -496,40 +765,90 @@ msgstr "" "linjoilta." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 #, fuzzy msgid "Go o&ffline" msgstr "Poissa linjoilta" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 #, fuzzy -msgid "Show notifications when you recei&ve an email" +msgid "Email Events" +msgstr "SƤhkƶpostiosoite:" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" msgstr "NƤytƤ tiedote kun saat sƤhkƶpostia \"muihin kansioihin\"" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" +"Jos otettu kƤyttƶƶn, viestikupla ilmestyy myƶs silloin, kun olet saanut " +"sƤhkƶpostia muihin kansioihin kuin vastaanotettuihin. TƤmƤ valinta toimii " +"vain Hotmail-tilien kanssa." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +msgid "In other folders" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "Muuttaa sekuntien mƤƤrƤƤ, jolloin puhekuplat katoavat." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "Piilota puhekuplat " #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "sekunnin kuluttua" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "HƤlytykset" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "NƤytƤ myƶs &poissaolevat" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -547,15 +866,33 @@ msgstr "" "ravistelee keskusteluikkunaa vain ensimmƤisellƤ herƤtteellƤ.

" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 #, fuzzy msgid "Shake the chat &window when a nudge is received or sent" msgstr "Ravistele keskusteluikkunaa kun vastaanotetaan tai lƤhetetƤƤn herƤte" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" +"Jos otettu kƤyttƶƶn, viestikupla nƤyttƤƤ, kun olet saanut sƤhkƶpostia. " +"Numero lukemattomista sƤhkƶposteista nƤkyy yhteystietolistan ylƤpuolella. " +"TƤmƤ valinta toimii vain Hotmail-tilien kanssa." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." @@ -564,31 +901,37 @@ msgstr "" "tieto haetaan aktiivisista musiikkisoitinohjelmista." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 #, fuzzy -msgid "Inform contacts w&hich song I am listening to." +msgid "Inform contacts w&hich song I am listening to" msgstr "Ilmoita keskustelukumppaneille mitƤ kappaletta kuuntelen." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 +#, fuzzy msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" "Jos valittu, tilasi muuttuu automaattisesti \"Poissa-Jouten\", kun et kƤytƤ " "tietokonetta muutamaan minuuttiin." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "&Vaihda tilaksi \"Poissa-jouten\", kun olet ollut hetken poissa" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." @@ -597,45 +940,46 @@ msgstr "" "\"." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 msgid "Become idle after" msgstr "Vaihda tila kun on kulunut" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "minuuttia" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "Jos valittu, keskustelut tallennetaan mƤƤritettyyn hakemistoon." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 msgid "Log &all chats" msgstr "&Tallenna lokiin kaikki keskustelut" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 msgid "" "Choose the directory on your system where you'd like to save the chat logs." msgstr "Valitse hakemisto, jonne haluat lokitiedostojen tallentuvan." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" msgstr "Tallennettujen keskustelujen juurihakemisto:" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." @@ -644,121 +988,99 @@ msgstr "" "jƤrjesteltƤvƤksi vuoden, kuukauden tai pƤivƤn mukaan." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "JƤrjestƤ keskusteluhakemistot:" +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "Vuosittain" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 msgid "Month" msgstr "Kuukausittain" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "PƤivittƤin" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" msgstr "Tallenna kaikki keskustelut samaan hakemistoon" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." -msgstr "TƤmƤ on kirjasimen tyyli ja vƤri, joka nƤkyy keskusteluviesteissƤsi." - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "Keskustelujen kirjasinlaji:" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" -"Sallii kƤytettƤvƤn tƤtƤ fonttia ennemmin kuin keskustelukavereiden " -"mƤƤrittƤmiƤ." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "Pakota keskustelukavereiden viesteihin kirjasinlaji:" - +#. i18n: file ./settings/chatstylepage.ui line 45 #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "Sallii KMessin kaikkien keskustelujen teeman vaihdon." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +#, fuzzy +msgid "&Chat style:" msgstr "Keskustelun tyyli:" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "Asetukset" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "Ottaa kƤyttƶƶn hymiƶt keskusteluissa." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 -msgid "&Show graphics in chat messages" -msgstr "&NƤytƤ grafiikat viesteissƤ" +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 +#, fuzzy +msgid "&Show emoticons" +msgstr "NƤytƤ &hymiƶt" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "NƤyttƤƤ aikaleiman jokaisessa viestissƤ." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 -msgid "S&how time in chat messages" +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 +#, fuzzy +msgid "S&how messages time" msgstr "NƤytƤ &aika viesteissƤ" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" -"Mahdollistaa kirjasinefektit seuraavalla tavalla: Kirjoittamalla " -"*lihavoitua*, /kursivoitua/ ja _alleviivattua_ tekstiƤ, saat lihavoitua, " -"kursivoitua tai alleviivattua tekstiƤ." - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "" -"KƤytƤ kirjasin&efektejƤ viesteissƤ, esim. *lihavointi*, /kursiivi/ ja " -"_alleviivaus_" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -770,158 +1092,314 @@ msgstr "" "yhtenƤ viestinƤ. Tarkka ulkonƤkƶ riippuu kƤyttƤmƤstƤsi keskustelutyylistƤ." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "&RyhmitƤ allekkain samalta henkilƶltƤ tulleet viestit" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 -msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." -msgstr "Ohjelma, jota KMess kƤskee nƤyttƤmƤƤn sƤhkƶpostiviestit." - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "SƤhkƶpostiohjelma" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "KƤytƤ Hotmailia" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "MƤƤritƤ komento itse:" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "SƤhkƶposti-ilmoitin" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 -msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" msgstr "" -"Jos otettu kƤyttƶƶn, viestikupla nƤyttƤƤ, kun olet saanut sƤhkƶpostia. " -"Numero lukemattomista sƤhkƶposteista nƤkyy yhteystietolistan ylƤpuolella. " -"TƤmƤ valinta toimii vain Hotmail-tilien kanssa." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 -msgid "Show email information" -msgstr "NƤytƤ sƤhkƶpostitiedot" +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 +#, fuzzy +msgid "Always" +msgstr "Poissa" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 -msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "Yhteystietolistallasi on liian monta ryhmƤƤ" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "Nƶrtti" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" msgstr "" -"Jos otettu kƤyttƶƶn, viestikupla ilmestyy myƶs silloin, kun olet saanut " -"sƤhkƶpostia muihin kansioihin kuin vastaanotettuihin. TƤmƤ valinta toimii " -"vain Hotmail-tilien kanssa." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" -msgstr "NƤytƤ tiedote kun saat sƤhkƶpostia \"muihin kansioihin\"" +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." +msgstr "TƤmƤ on kirjasimen tyyli ja vƤri, joka nƤkyy keskusteluviesteissƤsi." #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "Keskustelujen kirjasinlaji:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 +msgid "" +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." +msgstr "" +"Sallii kƤytettƤvƤn tƤtƤ fonttia ennemmin kuin keskustelukavereiden " +"mƤƤrittƤmiƤ." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "Pakota keskustelukavereiden viesteihin kirjasinlaji:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 +msgid "" +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." +msgstr "" +"Mahdollistaa kirjasinefektit seuraavalla tavalla: Kirjoittamalla " +"*lihavoitua*, /kursivoitua/ ja _alleviivattua_ tekstiƤ, saat lihavoitua, " +"kursivoitua tai alleviivattua tekstiƤ." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +#, fuzzy +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" +msgstr "" +"KƤytƤ kirjasin&efektejƤ viesteissƤ, esim. *lihavointi*, /kursiivi/ ja " +"_alleviivaus_" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "Odotetaan yhteystietolistaa..." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 #, fuzzy msgid "&Emoticon Themes" msgstr "Hymiƶt" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 #, fuzzy msgid "Available emoticon styles:" msgstr "Hymiƶiden tyyli:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 #, fuzzy msgid "&Custom Emoticons" msgstr "Cartoon-hymiƶteema" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 #, fuzzy msgid "Custom emoticons for this account:" msgstr "Muista tƤmƤn tilin asetukset" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -#, fuzzy -msgid "Click" -msgstr "Kello" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 #, fuzzy msgid "Re&name" msgstr "&UudelleennimeƤ ryhmƤ" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 #, fuzzy msgid "Remo&ve" msgstr "Poistettu" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +#, fuzzy +msgid "Web Browser" +msgstr "Kuihtunut ruusu" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +#, fuzzy +msgid "&Use the KDE default browser" +msgstr "&KƤytƤ oletuskuvaa" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "sanoo:" +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "SƤhkƶpostiohjelma" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +#, fuzzy +msgid "&Use the KDE default email client" +msgstr "&KƤytƤ oletuskuvaa" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +msgid "File Transfers" +msgstr "Tiedostosiirrot" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "Tallennettujen keskustelujen juurihakemisto:" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +#, fuzzy +msgid "and" +msgstr "Surullinen" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "Tiedostosiirrot" #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -931,135 +1409,12 @@ msgstr "Olen poissa koneelta" msgid "Your name" msgstr "Nimesi" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "sinƤ@hotmail.com" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "Paikalla" - -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "Poissa" - -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "Tulen pian takaisin" - -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "Kiireinen" - -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "NƤkymƤtƶn" - -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "" - -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "Poissa linjoilta" - -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "Puhelimessa" - -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "Lounaalla" - -#: chat/chatmaster.cpp:1061 -msgid "%1 is sending a wink: %2" -msgstr "%1 lƤhettƤƤ olion: %2" - -#: chat/chatmessagestyle.cpp:302 -msgid "%1 says:" -msgstr "%1 sanoo:" - -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 -msgid "Add this emoticon: %1" -msgstr "" - -#: chat/chatview.cpp:529 -msgid "" -"Could not save chat log. Make sure you have permission to write in the " -"folder where logs are being saved." -msgstr "" -"Keskustelulokia ei voitu tallentaa. Varmista ettƤ sinulla on " -"kirjoitusoikeudet kansioon johon lokit tallennetaan." - -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 -msgid "" -"The file '%1' already exists.\n" -"do you want to overwrite it?" -msgstr "" -"Tiedosto %1 on jo olemassa.\n" -"Haluatko ylikirjoittaa sen?" - -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Overwrite File" -msgstr "Ylikirjoita tiedosto" - -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Over&write" -msgstr "Yli&kirjoita" - -#: chat/chatview.cpp:977 -#, fuzzy -msgid "Add this &Emoticon..." -msgstr "NƤytƤ &hymiƶt" - -#: chat/chatview.cpp:984 -#, fuzzy -msgid "Send &Email" -msgstr "&LƤhetƤ sƤhkƶposti" - -#: chat/chatview.cpp:988 -#, fuzzy -msgid "Copy E&mail" -msgstr "SƤhkƶposti" - -#: chat/chatview.cpp:995 -msgid "Visit &Link" -msgstr "" - -#: chat/chatview.cpp:999 -msgid "Copy &Address" -msgstr "" - -#: chat/chatview.cpp:1013 -msgid "&Copy text" -msgstr "&Kopioi teksti" - -#: chat/chatview.cpp:1014 -msgid "Select &All" -msgstr "&Valitse Kaikki" - -#: chat/chatview.cpp:1015 -#, fuzzy -msgid "Save chat to &File" -msgstr "Tallenna &Tiedostoon" - -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "Keskustele" - -#: chat/chatwindow.cpp:239 +#: chat/chat.cpp:124 msgid "" "You can't start this invitation because there are multiple contacts in this " "chat." @@ -1067,313 +1422,525 @@ msgstr "" "Et voi aloittaa tƤtƤ kutsua, koska tƤssƤ keskustelussa on useita " "keskustelukumppaneita." -#: chat/chatwindow.cpp:276 -msgid "%1 has joined the chat." +#: chat/chat.cpp:158 +#, fuzzy +msgid "%1 has joined the chat." msgstr "%1 on liittynyt keskusteluun." -#: chat/chatwindow.cpp:327 +#: chat/chat.cpp:211 #, fuzzy -msgid "The conversation went idle, %1 has left the chat." +msgid "The conversation went idle, %1 has left the chat." msgstr "%1 poistunut keskustelusta." -#: chat/chatwindow.cpp:331 -msgid "%1 has left the chat." +#: chat/chat.cpp:215 +#, fuzzy +msgid "%1 has left the chat." msgstr "%1 poistunut keskustelusta." -#: chat/chatwindow.cpp:593 -msgid "%1 - Chat" -msgstr "%1 - Keskustele" - -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" +#: chat/chat.cpp:364 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 and %2" msgstr "%1 ja %2 - Keskustele" -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" +#: chat/chat.cpp:371 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 et al." msgstr "%1 ja muut - Keskustele" -#: chat/chatwindow.cpp:757 -msgid "Contacts" -msgstr "Yhteistiedot" - -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 -msgid "Emoticons" -msgstr "Hymiƶt" - -#: chat/chatwindow.cpp:819 +#: chat/chat.cpp:630 #, fuzzy -msgid "My emoticons" -msgstr "Hymiƶt" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" msgstr " (TƤmƤ viesti lƤhetettiin automaattisesti)" -#: chat/chatwindow.cpp:1502 +#: chat/chat.cpp:934 +#, fuzzy +msgid "You received a wink from %1." +msgstr "Olet vastaanottanut olion henkilƶltƤ %1" + +#: chat/chat.cpp:971 msgid "" "The wink could not be displayed. Make sure you have 'cabextract' installed." msgstr "" "Oliota ei voitu nƤyttƤƤ. Varmista, ettƤ sinulla on 'cabextract' asennettuna." -#: chat/chatwindow.cpp:1511 +#: chat/chat.cpp:980 msgid "The wink could not be displayed. The data could not be read." msgstr "Oliota ei voitu nƤyttƤƤ. Dataa ei voitu lukea." -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" +#: chat/chat.cpp:1080 +#, fuzzy +msgid "You have received a wink from %1" msgstr "Olet vastaanottanut olion henkilƶltƤ %1" -#: chat/chatwindow.cpp:1755 +#: chat/chat.cpp:1100 #, fuzzy -msgid "Show Side&bar" -msgstr "NƤytƤ/Piilota &yhteystietopalkki" - -#: chat/chatwindow.cpp:1756 -#, fuzzy -msgid "Show the contact sidebar" -msgstr "NƤytƤ tai piilota yhteystietopalkki" - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -#, fuzzy -msgid "Hide Side&bar" -msgstr "NƤytƤ/Piilota &yhteystietopalkki" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -#, fuzzy -msgid "Hide the contact sidebar" -msgstr "NƤytƤ tai piilota yhteystietopalkki" - -#: chat/chatwindow.cpp:1787 -#, fuzzy -msgid "The message '%1' could not be sent." -msgstr "ViestiƤ \"%1\" ei vastaanotettu." - -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" +msgid "You received a nudge from %1!" msgstr "Olet saanut herƤtteen henkilƶltƤ %1!" -#: chat/chatwindow.cpp:1876 +#: chat/chat.cpp:1119 +#, fuzzy +msgid "The message '%1' could not be sent." +msgstr "ViestiƤ \"%1\" ei vastaanotettu." + +#: chat/chat.cpp:1183 msgid "You've sent a nudge to %1!" msgstr "Olet lƤhettƤnyt herƤtteen henkilƶlle %1!" -#: chat/chatwindow.cpp:1883 +#: chat/chat.cpp:1190 msgid "You've sent a nudge!" msgstr "LƤhetit herƤtteen!" -#: chat/chatwindow.cpp:1972 -msgid "%1 is typing." -msgstr "%1 kirjoittaa viestiƤ." +#: chat/chatmaster.cpp:1219 +msgid "%1 is sending a wink: %2" +msgstr "%1 lƤhettƤƤ olion: %2" -#: chat/chatwindow.cpp:1981 -#, fuzzy -msgid "%1 and %2 are typing." -msgstr "%1 ja %2 - Keskustele" +#: chat/chatmessagestyle.cpp:298 +msgid "%1 says:" +msgstr "%1 sanoo:" -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 +msgid "Add this emoticon: %1" msgstr "" -#: chat/chatwindowinterface.cpp:175 -msgid "&Chat" -msgstr "&Keskustele" - -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 msgid "&Invite" msgstr "&Kutsu" -#: chat/chatwindowinterface.cpp:179 +#: chat/chatview.cpp:695 +msgid "" +"Could not save chat log. Make sure you have permission to write in the " +"folder where logs are being saved." +msgstr "" +"Keskustelulokia ei voitu tallentaa. Varmista ettƤ sinulla on " +"kirjoitusoikeudet kansioon johon lokit tallennetaan." + +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 +msgid "" +"The file '%1' already exists.\n" +"do you want to overwrite it?" +msgstr "" +"Tiedosto %1 on jo olemassa.\n" +"Haluatko ylikirjoittaa sen?" + +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Overwrite File" +msgstr "Ylikirjoita tiedosto" + +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Over&write" +msgstr "Yli&kirjoita" + +#: chat/chatview.cpp:1275 +#, fuzzy +msgid "Add this &Emoticon..." +msgstr "NƤytƤ &hymiƶt" + +#: chat/chatview.cpp:1282 +#, fuzzy +msgid "Send &Email" +msgstr "&LƤhetƤ sƤhkƶposti" + +#: chat/chatview.cpp:1286 +#, fuzzy +msgid "Copy E&mail" +msgstr "SƤhkƶposti" + +#: chat/chatview.cpp:1293 +msgid "Visit &Link" +msgstr "" + +#: chat/chatview.cpp:1297 +msgid "Copy &Address" +msgstr "" + +#: chat/chatview.cpp:1312 +msgid "&Copy text" +msgstr "&Kopioi teksti" + +#: chat/chatview.cpp:1313 +msgid "Select &All" +msgstr "&Valitse Kaikki" + +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 +#, fuzzy +msgid "Save chat to &File" +msgstr "Tallenna &Tiedostoon" + +#: chat/chatwindow.cpp:489 +msgid "&Chat" +msgstr "&Keskustele" + +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "LƤhetƤ &Tiedosto" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "Aloita &RyhmƤkeskustelu" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 msgid "Send a &Nudge!" msgstr "LƤhetƤ &HerƤte!" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "Tallenna keskustelu" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 #, fuzzy msgid "&Emoticons" msgstr "Hymiƶt" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +#, fuzzy +msgid "Close &All Tabs" +msgstr "Sulje vƤlilehti" + +#: chat/chatwindow.cpp:504 #, fuzzy msgid "Meeting" msgstr "Asetukset" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "&Aloita tai lopeta keskustelu" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "&Vaihda kirjasin" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "Vaihda kirjasimen vƤri&Ƥ" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 #, fuzzy msgid "&Font" msgstr "&YhdistƤ" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 #, fuzzy msgid "Font &Color" msgstr "Vaihda kirjasimen vƤri&Ƥ" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +msgid "Emoticons" +msgstr "Hymiƶt" + +#: chat/chatwindow.cpp:658 +#, fuzzy +msgid "My emoticons" +msgstr "Hymiƶt" + +#: chat/chatwindow.cpp:738 #, fuzzy msgid "&Settings" msgstr "Asetukset" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "NƤytƤ &hymiƶt" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +#, fuzzy +msgid "Hide Side&bar" +msgstr "NƤytƤ/Piilota &yhteystietopalkki" + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "NƤytƤ/Piilota &yhteystietopalkki" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +#, fuzzy +msgid "Hide the contact sidebar" +msgstr "NƤytƤ tai piilota yhteystietopalkki" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +#, fuzzy +msgid "Close all tabs" +msgstr "Sulje vƤlilehti" + +#: chat/chatwindow.cpp:856 +#, fuzzy +msgid "Close current tab" +msgstr "Sulje vƤlilehti" + +#: chat/chatwindow.cpp:1467 +#, fuzzy +msgid "Show Side&bar" +msgstr "NƤytƤ/Piilota &yhteystietopalkki" + +#: chat/chatwindow.cpp:1468 +#, fuzzy +msgid "Show the contact sidebar" +msgstr "NƤytƤ tai piilota yhteystietopalkki" + +#: chat/chatwindow.cpp:1565 +msgid "%1 is typing." +msgstr "%1 kirjoittaa viestiƤ." + +#: chat/chatwindow.cpp:1575 +#, fuzzy +msgid "%1 and %2 are typing." +msgstr "%1 ja %2 - Keskustele" + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "" + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "Keskustele" + +#: chat/chatwindow.cpp:1615 +#, fuzzy +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "%1 - Keskustele" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "&LƤhetƤ sƤhkƶposti" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 msgid "&View Profile" msgstr "&NƤytƤ profiili" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "&LisƤƤ yhteystieto" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 msgid "A&llow Contact" msgstr "Salli &keskustelukumppani" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 msgid "&Delete Contact" msgstr "&Poista yhteystieto" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "&EstƤ keskustelukumppani" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "&Salli kƤyttƤjƤ" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 #, fuzzy msgid "&Friendly Name" msgstr "Lempinimesi:" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 #, fuzzy msgid "&Email Address" msgstr "SƤhkƶpostiosoite:" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "" -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 msgid "Blocked" msgstr "Estetty" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 #, fuzzy msgid "The contact is %1" msgstr "TƤmƤ keskustelukumppani ei ole paikalla" -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +#, fuzzy +msgid "Add to Chat" +msgstr "LisƤƤ yhteystieto" + +#: chat/emoticonsidebar.cpp:213 +#, fuzzy +msgid "Insert new" +msgstr "LisƤƤ hymiƶ" + +#: chat/emoticonsidebar.cpp:214 +msgid "Edit" +msgstr "" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +#, fuzzy +msgid "Remove" +msgstr "Poistettu" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 #, fuzzy msgid "Web Messenger" msgstr "Web-suunnittelu" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +#, fuzzy +msgid "Windows Live Messenger %1" +msgstr "Web-suunnittelu" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "Paikalla" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "Poissa linjoilta" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "Sallittu" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "Poistettu" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 +#, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr "%1 Mt" + +#: contactlistviewdelegate.cpp:150 #, fuzzy msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "%1 Mt" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "Poissa" + +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "Tulen pian takaisin" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "Kiireinen" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "NƤkymƤtƶn" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" msgstr "" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "Puhelimessa" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "Lounaalla" + +#: dialogs/addcontactdialog.cpp:48 #, fuzzy msgid "Add a Contact" msgstr "LisƤƤ yhteystieto" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 #, fuzzy msgid "No group" msgstr "Poista ryhmƤ" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 #, fuzzy msgid "Add New Emoticon" msgstr "NƤytƤ &hymiƶt" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "Hymiƶt" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 #, fuzzy msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "" @@ -1384,65 +1951,72 @@ msgstr "" msgid "Specify an Away message" msgstr "Kirjoita poissaoloviesti" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "KƤytƤ tƤlle henkilƶlle vaihtoehtoista nimeƤ" +#: dialogs/contactaddeduserdialog.cpp:85 +#, fuzzy +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " +msgstr "" +"%1\n" +"on lisƤnnyt sinut yhteystietolistalleen. Haluatko:" -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" -msgstr "NƤytƤ viestikupla, kun tƤmƤ henkilƶ kirjautuu sisƤƤn tai ulos" +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "Yhdistetty" -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "Kuva:" +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +#, fuzzy +msgid "Not seen yet" +msgstr "on lƤhettƤnyt sinulle" -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "ƄƤni:" +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +#, fuzzy +msgid "No messages yet" +msgstr "NƤytƤ &aika viesteissƤ" -#: dialogs/contactpropertiesdialog.cpp:234 -msgid "Contact Properties for %1" -msgstr "Yhteystiedon %1 ominaisuudet" +#: dialogs/contactpropertiesdialog.cpp:381 +#, fuzzy +msgid "Last seen: %1" +msgstr "on lƤhettƤnyt sinulle" -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " -msgstr "SƤhkƶpostiosoite: " +#: dialogs/contactpropertiesdialog.cpp:382 +#, fuzzy +msgid "Last message: %1" +msgstr "on lƤhettƤnyt sinulle" -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "Nykyinen nimi: " +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "SƤhkƶposti" -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" -msgstr "Verkkoyhteysikkuna" +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "SƤhkƶpostiohjelma" -#: dialogs/networkwindow.cpp:57 +#: dialogs/networkwindow.cpp:79 #, fuzzy msgid "S&ave tab" msgstr "Tallenna vƤlilehti" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 #, fuzzy msgid "C&lear tab" msgstr "TyhjennƤ vƤlilehti" -#: dialogs/networkwindow.cpp:59 -#, fuzzy -msgid "Cl&ose tab" -msgstr "Sulje vƤlilehti" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 #, fuzzy msgid "" "No connections are present.\n" "Cannot open the Network Window." msgstr "YhteyksiƤ ei ole saatavilla. Verkkoikkunaa ei voi avata." -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 #, fuzzy msgid "" "Could not save the Network Window log. Make sure you have permission to " @@ -1451,59 +2025,86 @@ msgstr "" "Verkkoikkunan lokia ei voitu tallentaa. Varmista, ettƤ sinulla on " "kirjoitusoikeudet kansioon johon loki tallennetaan." -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "YhteysvƤlilehteƤ ei voida sulkea." -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +#, fuzzy +msgid "Cannot send commands to this kind of connection!" +msgstr "YhteysvƤlilehteƤ ei voida sulkea." + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 #, fuzzy msgid "Completed" msgstr "Tietokone" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "%1 Mt" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "%1 kt" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "%1 tavua" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +msgid "%1 of %2 received." msgstr "" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +msgid "%1 of %2 sent." msgstr "" -#: dialogs/transferwindow.cpp:55 -msgid "File Transfers" -msgstr "Tiedostosiirrot" +#: dialogs/transferentry.cpp:373 +msgid "infinite" +msgstr "" -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 #, fuzzy msgid "Cl&ean Up" msgstr "&Siivoa" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 #, fuzzy msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " @@ -1512,346 +2113,360 @@ msgstr "" "Verkkoikkunan lokia ei voitu tallentaa. Varmista, ettƤ sinulla on " "kirjoitusoikeudet kansioon johon loki tallennetaan." -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 msgid "Smile" msgstr "Hymy" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "Olio" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "Kieli ulkona" -#: emoticontheme.cpp:797 +#: emoticontheme.cpp:812 msgid "Big smile" msgstr "Iso hymy" -#: emoticontheme.cpp:798 +#: emoticontheme.cpp:813 msgid "Sad" msgstr "Surullinen" -#: emoticontheme.cpp:799 +#: emoticontheme.cpp:814 msgid "Crying" msgstr "Itkee" -#: emoticontheme.cpp:800 +#: emoticontheme.cpp:815 msgid "Angry" msgstr "Vihainen" -#: emoticontheme.cpp:801 +#: emoticontheme.cpp:816 msgid "Confused" msgstr "HƤmillƤƤn" -#: emoticontheme.cpp:802 +#: emoticontheme.cpp:817 msgid "Embarrassed" msgstr "HƤpeissƤƤn" -#: emoticontheme.cpp:803 +#: emoticontheme.cpp:818 msgid "Disappointed" msgstr "Pettynyt" -#: emoticontheme.cpp:804 +#: emoticontheme.cpp:819 msgid "Hot" msgstr "Kuuma" -#: emoticontheme.cpp:805 +#: emoticontheme.cpp:820 msgid "Baring teeth" msgstr "Hampaat paljaana" -#: emoticontheme.cpp:806 +#: emoticontheme.cpp:821 msgid "Nerd" msgstr "Nƶrtti" -#: emoticontheme.cpp:807 +#: emoticontheme.cpp:822 msgid "Sick" msgstr "Sairas" -#: emoticontheme.cpp:808 +#: emoticontheme.cpp:823 msgid "Surprised" msgstr "YllƤttynyt" -#: emoticontheme.cpp:809 +#: emoticontheme.cpp:824 msgid "Party" msgstr "Juhlii" -#: emoticontheme.cpp:810 +#: emoticontheme.cpp:825 msgid "Sleepy" msgstr "Uninen" -#: emoticontheme.cpp:811 +#: emoticontheme.cpp:826 msgid "Thinking" msgstr "Miettii" -#: emoticontheme.cpp:812 +#: emoticontheme.cpp:827 msgid "Don't tell anyone" msgstr "ƄlƤ kerro kenellekƤƤn" -#: emoticontheme.cpp:813 +#: emoticontheme.cpp:828 msgid "Secret telling" msgstr "Salainen juttu" -#: emoticontheme.cpp:814 +#: emoticontheme.cpp:829 msgid "Eye-rolling" msgstr "Pyƶrittelee silmiƤƤn" -#: emoticontheme.cpp:815 +#: emoticontheme.cpp:830 msgid "Sarcastic" msgstr "Sarkastinen" -#: emoticontheme.cpp:816 +#: emoticontheme.cpp:831 msgid "I don't know" msgstr "TietƤmƤtƶn" -#: emoticontheme.cpp:817 +#: emoticontheme.cpp:832 msgid "Be right back" msgstr "Tulen pian takaisin" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "Enkeli" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "Halaa vasemmalta" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "Poju" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "Punainen sydƤn" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "Punainen ruusu" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "Peukku pystyssƤ" -#: emoticontheme.cpp:824 +#: emoticontheme.cpp:839 msgid "Dog face" msgstr "Koiran naama" -#: emoticontheme.cpp:825 +#: emoticontheme.cpp:840 msgid "Sun" msgstr "Aurinko" -#: emoticontheme.cpp:826 +#: emoticontheme.cpp:841 msgid "Devil" msgstr "Piru" -#: emoticontheme.cpp:827 +#: emoticontheme.cpp:842 msgid "Right hug" msgstr "Halaa oikealta" -#: emoticontheme.cpp:828 +#: emoticontheme.cpp:843 msgid "Girl" msgstr "Tyttƶ" -#: emoticontheme.cpp:829 +#: emoticontheme.cpp:844 msgid "Broken heart" msgstr "SƤrkynyt sydƤn" -#: emoticontheme.cpp:830 +#: emoticontheme.cpp:845 msgid "Wilted rose" msgstr "Kuihtunut ruusu" -#: emoticontheme.cpp:831 +#: emoticontheme.cpp:846 msgid "Thumbs down" msgstr "Peukku alas" -#: emoticontheme.cpp:832 +#: emoticontheme.cpp:847 msgid "Cat face" msgstr "Kissan naama" -#: emoticontheme.cpp:833 +#: emoticontheme.cpp:848 msgid "Sleeping half-moon" msgstr "Nukkuva puolikuu" -#: emoticontheme.cpp:834 +#: emoticontheme.cpp:849 msgid "Red lips" msgstr "Punaiset huulet" -#: emoticontheme.cpp:835 +#: emoticontheme.cpp:850 msgid "Clapping" msgstr "Taputtaa" -#: emoticontheme.cpp:836 +#: emoticontheme.cpp:851 msgid "Crossed fingers" msgstr "Ristityt sormet" -#: emoticontheme.cpp:837 +#: emoticontheme.cpp:852 msgid "Auto" msgstr "Auto" -#: emoticontheme.cpp:838 +#: emoticontheme.cpp:853 msgid "Airplane" msgstr "Lentokone" -#: emoticontheme.cpp:839 +#: emoticontheme.cpp:854 msgid "Turtle" msgstr "Kilpikonna" -#: emoticontheme.cpp:840 +#: emoticontheme.cpp:855 msgid "Snail" msgstr "Etana" -#: emoticontheme.cpp:841 +#: emoticontheme.cpp:856 msgid "Black sheep" msgstr "Musta lammas" -#: emoticontheme.cpp:842 +#: emoticontheme.cpp:857 msgid "Goat" msgstr "Vuohi" -#: emoticontheme.cpp:843 +#: emoticontheme.cpp:858 msgid "Vampire bat" msgstr "Vampyyrilepakko" -#: emoticontheme.cpp:844 +#: emoticontheme.cpp:859 msgid "Pizza" msgstr "Pizza" -#: emoticontheme.cpp:845 +#: emoticontheme.cpp:860 msgid "Beer mug" msgstr "Olutmuki" -#: emoticontheme.cpp:846 +#: emoticontheme.cpp:861 msgid "Martini glass" msgstr "Martini-lasi" -#: emoticontheme.cpp:847 +#: emoticontheme.cpp:862 msgid "Coffee cup" msgstr "Kahvikuppi" -#: emoticontheme.cpp:848 +#: emoticontheme.cpp:863 msgid "Birthday cake" msgstr "SynttƤrikakku" -#: emoticontheme.cpp:849 +#: emoticontheme.cpp:864 msgid "Plate" msgstr "Lautanen" -#: emoticontheme.cpp:850 +#: emoticontheme.cpp:865 msgid "Bowl" msgstr "Kulho" -#: emoticontheme.cpp:851 +#: emoticontheme.cpp:866 msgid "Star" msgstr "TƤhti" -#: emoticontheme.cpp:852 +#: emoticontheme.cpp:867 msgid "Rainbow" msgstr "Sateenkaari" -#: emoticontheme.cpp:853 +#: emoticontheme.cpp:868 msgid "Stormy cloud" msgstr "Myrskypilvi" -#: emoticontheme.cpp:854 +#: emoticontheme.cpp:869 msgid "Lightning" msgstr "Salama" -#: emoticontheme.cpp:855 +#: emoticontheme.cpp:870 msgid "Umbrella" msgstr "Sateenvarjo" -#: emoticontheme.cpp:856 +#: emoticontheme.cpp:871 msgid "Island with a palm tree" msgstr "Palmusaari" -#: emoticontheme.cpp:857 +#: emoticontheme.cpp:872 msgid "Telephone receiver" msgstr "Puhelinvastaanotin" -#: emoticontheme.cpp:858 +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "KƤnnykkƤ" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "SƤhkƶposti" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 msgid "Clock" msgstr "Kello" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 msgid "Camera" msgstr "Kamera" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "FilminpƤtkƤ" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "Huomautus" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "KƤsiraudat" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 msgid "Money" msgstr "Raha" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "Hehkulamppu" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "Savuke" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "Jalkapallo" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "Lahja ja kumarrus" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "X-Box" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "Tietokone" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 msgid "KMess Icon" msgstr "KMess-ikoni" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "YhdistƤminen palvelimeen epƤonnistui." + +#: initialview.cpp:377 +msgid "Connect" +msgstr "YhdistƤ" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "&Katkaise yhteys" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "" -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "" -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "Uusi &RyhmƤ" + +#: kmess.cpp:226 msgid "Add a group" msgstr "LisƤƤ ryhmƤ" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "Anna ryhmƤlle uusi nimi:" -#: kmess.cpp:313 -#, fuzzy -msgid "The contact address you have entered is not valid: '%1'" -msgstr "Annettu yhteystiedon osoite ei ole kelvollinen: %1" - -#: kmess.cpp:638 +#: kmess.cpp:569 msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" @@ -1859,62 +2474,89 @@ msgstr "" " Oletko varma ettƤ haluat poistaa yhteystiedon %1 " "yhteystietoluettelostasi?" -#: kmess.cpp:640 +#: kmess.cpp:571 msgid "Remove contact" msgstr "Poista yhteystieto" -#: kmess.cpp:641 kmess.cpp:684 -#, fuzzy -msgid "Remove" -msgstr "Poistettu" - -#: kmess.cpp:642 +#: kmess.cpp:573 msgid "Remove and block" msgstr "Poista ja estƤ" -#: kmess.cpp:681 +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "" "Oletko varma, ettƤ haluat poistaa ryhmƤn %1 yhteystietolistastasi?" "" -#: kmess.cpp:683 -msgid "Remove group" -msgstr "Poista ryhmƤ" +#: kmess.cpp:631 +#, fuzzy +msgctxt "dialog button" +msgid "Remove" +msgstr "Poistettu" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "TƤmƤ on erityinen ryhmƤ eikƤ sitƤ voi muuttaa." -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 msgid "Rename group" msgstr "NimeƤ ryhmƤ uudelleen" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "Yhdistetty" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "Tunnistautuminen epƤonnistui" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "Yhteys poikki" -#: kmess.cpp:1441 +#: kmess.cpp:1408 +#, fuzzy msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" "

KMess ei voi toistaa ƤƤniƤ tai ilmoituksia.

KMess tiedostoa " "'eventsrc' ei lƶytynyt seuraavista kansioista: %1

Varmista asennus ja " "kopioi puuttuva tiedosto yhteen listatuista kansioista.

" -#: kmess.cpp:1445 +#: kmess.cpp:1412 msgid "Error with notifications" msgstr "Virhe ilmoituksissa" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "KMess" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "&Toiminnot" @@ -1936,212 +2578,245 @@ msgstr "&Etsi yhteystietoa" msgid "Search by &Interest" msgstr "Etsi &Kiinnostusten perusteella" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "&Etsi yhteystietoa" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "Uusi &Tili" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "Tilin &Asetukset" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "&YhdistƤ" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "&Katkaise yhteys" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "NƤytƤ oma &profiili" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "&Oma tila" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "Poissa (Automaattivastaus)" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "&NƤytƤ sallitut yhteystiedot" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 msgid "Show &Offline Contacts" msgstr "NƤytƤ myƶs &poissaolevat" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "NƤytƤ &poistetut yhteystiedot" -#: kmessinterface.cpp:303 +#: kmessinterface.cpp:318 #, fuzzy -msgid "Show &Display Pictures" +msgid "Show &Empty Groups" +msgstr "NƤytƤ &hymiƶt" + +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" msgstr "Keskustelukuvake" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "Hymy" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "&Yhteystietojen jƤrjestys..." -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "RyhmƤ" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "Paikalla/Poissa" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "NƤytƤ &siirtoikkuna" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "&NƤytƤ verkkoikkuna" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "Kuuntelee nyt %1" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +msgid "[%1] %2 goes online" +msgstr "" + +#: kmessview.cpp:363 +msgid "[%1] %2 goes offline" +msgstr "" + +#: kmessview.cpp:559 msgid "Cha&t" msgstr "Keskus&tele" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "&Ominaisuudet" -#: kmessview.cpp:492 +#: kmessview.cpp:569 msgid "&Remove from group" msgstr "&Poista ryhmƤstƤ" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +#, fuzzy +msgid "&Listening Music" +msgstr "Kuuntele kappaletta %1" + +#: kmessview.cpp:601 msgid "&Copy to Group" msgstr "&Kopioi ryhmƤƤn" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "SiirrƤ ryh&mƤƤn" -#: kmessview.cpp:549 +#: kmessview.cpp:646 msgid "Move Group &Down" msgstr "SiirrƤ ryhmƤƤ &alas" -#: kmessview.cpp:550 +#: kmessview.cpp:647 msgid "Move Group &Up" msgstr "SiirrƤ ryhmƤƤ &ylƶs" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "Poista ryh&mƤ" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "&UudelleennimeƤ ryhmƤ" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 #, fuzzy msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "SƤhkƶposti" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "" -#: kmessview.cpp:918 +#: kmessview.cpp:1075 +#, fuzzy +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "on lƤhettƤnyt sinulle" + +#: kmessview.cpp:1076 +#, fuzzy +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "on lƤhettƤnyt sinulle" + +#: kmessview.cpp:1085 msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "" -#: kmessview.cpp:921 +#: kmessview.cpp:1090 #, fuzzy -msgctxt "Contacts count in group tooltip" +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "Yhteistiedot" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +#, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "TƤmƤ keskustelukumppani ei ole paikalla" + +#: kmessview.cpp:1504 #, fuzzy msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "SyƶtƤ henkilƶkohtainen viestisi tƤhƤn" -#: kmessview.cpp:1543 -msgid "You have 1 new e-mail in your inbox." -msgstr "Postilaatikossasi on 1 uusi sƤhkƶposti" +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" -#: kmessview.cpp:1547 -msgid "You have %1 new emails in your inbox." -msgstr "Postilaatikossasi on %1 uutta sƤhkƶpostia" - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "KMess" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 msgid "Project support" msgstr "" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 #, fuzzy msgid "Current developer" msgstr "GnomeMeeting-kehittƤjƤ" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 msgid "" "German translation, testing, documentation, web master, project management, " "etc..." @@ -2149,596 +2824,487 @@ msgstr "" "Saksankielinen kƤƤnnƶs, testaus, dokumentointi, kotisivut, " "projektinhallinta, jne..." -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "Web-suunnittelu" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "" "Italiankielinen kƤƤnnƶs sekƤ oletushymiƶt ja keltainen/sininen/violetti " "hymiƶvalikoima" -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "Cartoon-hymiƶteema" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "OletusƤƤniteema" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "" "Arabinkielinen kƤƤnnƶs, tiedoston tallentamisen kansainvƤlistƤmiskorjaus." -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 #, fuzzy msgid "More Arabic translation" msgstr "LisƤƤ turkinkielisiƤ kƤƤnnƶksiƤ" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "Portugalinkielinen kƤƤnnƶs (Brasilia)" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 #, fuzzy msgid "Catalan translation" msgstr "Katalankielinen kƤƤnnƶs" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 #, fuzzy msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "" "Yksinkertaistetun kiinankielinen kƤƤnnƶs, tiedostonlƤhetyksen bugikorjaus" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 #, fuzzy msgid "More Simplified Chinese translation" msgstr "" "Yksinkertaistetun kiinankielinen kƤƤnnƶs, tiedostonlƤhetyksen bugikorjaus" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 #, fuzzy msgid "Traditional Chinese translation" msgstr "Perinteinen kiinankielinen kƤƤnnƶs" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 #, fuzzy msgid "Danish translation" msgstr "Tanskankielinen kƤƤnnƶs" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 #, fuzzy msgid "More Danish translation" msgstr "LisƤƤ TanskankielistƤ kƤƤnnƶstƤ" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "Hollanninkielinen kƤƤnnƶs" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 msgid "More Dutch translation" msgstr "LisƤƤ HollanninkielistƤ kƤƤnnƶstƤ" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 #, fuzzy msgid "Estonian translation" msgstr "Eestinkielinen kƤƤnnƶs" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 #, fuzzy msgid "Finnish translation" msgstr "Suomenkielinen kƤƤnnƶs" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 #, fuzzy msgid "More Finnish translation" msgstr "LisƤƤ SuomenkielistƤ kƤƤnnƶstƤ" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "Ranskankielinen kƤƤnnƶs" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 msgid "More French translation, MSN6 emoticon definitions" msgstr "Ranskankielinen lisƤkƤƤnnƶs, MSN6 hymiƶ -mƤƤritykset" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 #, fuzzy msgid "More French translation" msgstr "Ranskankielinen kƤƤnnƶs" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 #, fuzzy msgid "Hungarian translation" msgstr "Unkarinkielinen kƤƤnnƶs" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 #, fuzzy msgid "More Italian translation" msgstr "Koreankielinen kƤƤnnƶs" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "Koreankielinen kƤƤnnƶs" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 #, fuzzy msgid "Norsk BokmĆ„l translation" msgstr "Norjankielinen kƤƤnnƶs" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 msgid "Slovenian translation" msgstr "Sloveniankielinen kƤƤnnƶs" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "Espanajankielinen kƤƤnnƶs" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 #, fuzzy msgid "More Spanish translation" msgstr "Espanankieliset lisƤkƤƤnnƶkset" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 msgid "Swedish translation" msgstr "Ruotsinkielinen kƤƤnnƶs" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 #, fuzzy msgid "Thai translation" msgstr "Thaimaankielinen kƤƤnnƶs" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "Turkinkielinen kƤƤnnƶs" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "LisƤƤ turkinkielisiƤ kƤƤnnƶksiƤ" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -#, fuzzy -msgid "Guido Solinas" -msgstr "Paikalla" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "Tiedostosiirrot" + +#: main.cpp:134 msgid "P4-Context field support" msgstr "" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "Xinerama-korjaukset" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "AlkuperƤinen tiedostojen vastaanottokoodi" -#: main.cpp:120 -msgid "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" msgstr "" -#: main.cpp:120 +#: main.cpp:138 +msgid "KWallet support" +msgstr "" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "Erilaisia kansainvƤlistƤmiskorjauksia." + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "Erilaisia kansainvƤlistƤmiskorjauksia." -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "GnomeMeeting-kehittƤjƤ" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "Kaveri jolla on kassi pƤƤnsƤ pƤƤllƤ" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "Inspiraatio ja ohjelmakoodi" -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 +#: main.cpp:150 #, fuzzy msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "Puhekuplakoodit, alustava P2P-koodi, MSN:n kƤsittelijƤkoodi" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "Joutenololaskurin koodi" -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 +#: main.cpp:152 msgid "Close-to-tray icon screenshot code" msgstr "" -#: main.cpp:131 +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 #, fuzzy msgid "Your name here?" msgstr "Nimesi" -#: main.cpp:131 +#: main.cpp:156 msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" -#: main.cpp:134 +#: main.cpp:159 #, fuzzy msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Nimesi" -#: main.cpp:135 +#: main.cpp:160 #, fuzzy msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "SƤhkƶpostiosoitteesi:" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "Kirjaudu automaattisesti annetulla sƤhkƶpostiosoitteella" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 msgid "The contact cancelled the session." msgstr "Keskustelukumppani katkaisi istunnon." -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 msgid "The contact rejected the invitation." msgstr "Keskustelukummpani hylkƤsi kutsun." -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 msgid "You have cancelled the session." msgstr "Olet katkaissut istunnon." -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "Olet hylƤnnyt kutsun." -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +#, fuzzy +msgid "Do you want to accept or cancel?" msgstr "Haluatko hyvƤksyƤ vai hylƤtƤ ?" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +#, fuzzy +msgid "Click to cancel." msgstr "Paina hylƤtƤksesi." -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 #, fuzzy msgid "Do you want to accept the file: %1 (%2)" msgstr "Haluatko hyvƤksyƤ tiedoston: %1 (%2 tavua)" -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 msgid "The transfer of %1 failed. Couldn't open file." msgstr "Tiedoston %1 siirto epƤonnistui. Tiedostoa ei voitu avata." -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "Siirto hyvƤksytty." + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 msgid "Connecting to %1, port %2" msgstr "YhdistetƤƤn kohteeseen %1, portti %2" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 msgid "The transfer was cancelled" msgstr "Siirto peruuntui" -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 msgid "Connection established" msgstr "Yhteys muodostettu" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 msgid "Successfully transferred file: %1" msgstr "Siirrettiin onnistuneesti tiedosto: %1" -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 msgid "The transfer of %1 failed. The file does not exist." msgstr "Tiedoston %1 siirto epƤonnistui. Tiedostoa ei ole." -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 msgid "The transfer of %1 failed. The file could not be read." msgstr "Tiedoston %1 siirto epƤonnistui. Tiedostoa ei voitu lukea." -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 msgid "Sending file %1" msgstr "LƤhetetƤƤn tiedostoa %1" -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "Siirto hyvƤksytty." - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 #, fuzzy msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "Tiedostonsiirtokutsu peruttu viallisen vastaanotetun datan vuoksi." -#: network/applications/filetransferp2p.cpp:345 -#, fuzzy -msgid "The transfer of %1 failed. Couldn't open file" -msgstr "Tiedoston %1 siirto epƤonnistui. Tiedostoa ei voitu avata" +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." +msgstr "" -#: network/applications/filetransferp2p.cpp:524 -msgid "The contact cancelled the transfer." +#: network/applications/filetransferp2p.cpp:348 +#, fuzzy +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "" +"Tiedosto %1 on jo olemassa.\n" +"Haluatko ylikirjoittaa sen?" + +#: network/applications/filetransferp2p.cpp:378 +#, fuzzy +msgid "The transfer of file "%1" failed. Couldn't save the file." +msgstr "Tiedoston %1 siirto epƤonnistui. Tiedostoa ei voitu avata." + +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 +#, fuzzy +msgid "The contact has cancelled the transfer of file "%1"." msgstr "Keskustelukumppani peruutti siirron." -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "Olet katkaissut istunnon." + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "" -#: network/applications/filetransferp2p.cpp:768 +#: network/applications/filetransferp2p.cpp:676 #, fuzzy -msgid "The transfer of %1 failed. The file does not exist." +msgid "Successfully sent file "%1"." +msgstr "Siirrettiin onnistuneesti tiedosto: %1" + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "Siirrettiin onnistuneesti tiedosto: %1" + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "Tiedoston %1 siirto epƤonnistui. Tiedostoa ei ole." -#: network/applications/filetransferp2p.cpp:773 +#: network/applications/filetransferp2p.cpp:818 #, fuzzy -msgid "The transfer of %1 failed. The file could not be read." +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "Tiedoston %1 siirto epƤonnistui. Tiedostoa ei voitu lukea." -#: network/applications/filetransferp2p.cpp:809 +#: network/applications/filetransferp2p.cpp:855 #, fuzzy -msgid "Sending file %1 (%2)" +msgid "Sending file "%1" (%2)." msgstr "LƤhetetƤƤn tiedostoa %1" -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "Keskustelukumppani peruutti siirron." + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "Sinut on kutsuttu tapaamiseen (GnomeMeeting)." -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 #, fuzzy msgid "Starting GnomeMeeting. Connecting to %1." msgstr "KƤynnistetƤƤn GnomeMeeting. YhdistetƤƤn: %1" -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "Kutsutaan keskustelukumppania tapaamiseen." -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "Kutsu peruuntui. Toisen kƤyttƤjƤn sovellus ei tue kutsua." -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 msgid "The invitation was aborted. An internal error occured." msgstr "Kutsu peruuntui. Tapahtui sisƤinen virhe." -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "Kutsu keskeytyi. Aikaraja ylittyi kƤyttƤjƤn hyvƤksyntƤƤ odotettaessa." -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "Kutsu keskeytyi. Aikaraja ylittyi dataa odotettaessa." -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "Kutsu keskeytyi. KytkentƤkeskus sulki chat-yhteyden." -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 msgid "The invitation was aborted." msgstr "Kutsu keskeytyi." -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "Sinut on kutsuttu jakamaan henkilƶn tyƶpƶytƤ." -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 #, fuzzy msgid "Starting KRDC. Connecting to %1." msgstr "KƤynnistetƤƤn KRDC. YhdistetƤƤn: %1." -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." -msgstr "" -"Keskustelukumppanisi yritti kƤyttƤƤ MSN6-ominaisuutta, jota KMess ei vielƤ " -"osaa kƤsitellƤ." +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +msgid "The contact rejected the invitation. An internal error occured." +msgstr "Keskustelukumppani hylkƤsi kutsun. Tapahtui sisƤinen virhe." -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +msgid "The transfer failed." +msgstr "Siirto epƤonnistui." + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." @@ -2746,36 +3312,43 @@ msgstr "" "Kutsu peruttiin. Keskustelukumppani lƤhetti dataa, jota KMess ei tue tai " "joka on viallista." -#: network/applications/p2papplication.cpp:1503 -msgid "The transfer failed. Data preparation failed." -msgstr "Siirto epƤonnistui. Tietojen valmistelu ei onnistunut." - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -msgid "The contact rejected the invitation. An internal error occured." -msgstr "Keskustelukumppani hylkƤsi kutsun. Tapahtui sisƤinen virhe." - -#: network/applications/p2papplication.cpp:1626 -msgid "The transfer failed." -msgstr "Siirto epƤonnistui." - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "Siirto epƤonnistui. Keskustelukumppani lƤhetti dataa, jota KMess ei tue tai " "joka on viallista." -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "Siirto epƤonnistui. Aikaraja ylittyi hyvƤksyntƤƤ odotettaessa." + +#: network/applications/p2papplicationbase.cpp:1015 +msgid "The transfer failed. An internal error occured." +msgstr "Siirto epƤonnistui. Tapahtui sisƤinen virhe." + +#: network/applications/p2papplicationbase.cpp:1176 +#, fuzzy +msgid "The transfer failed. Couldn't open data source." +msgstr "Siirto epƤonnistui. Tietojen lƤhdettƤ ei saatu auki." + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "" +"Keskustelukumppanisi yritti kƤyttƤƤ MSN6-ominaisuutta, jota KMess ei vielƤ " +"osaa kƤsitellƤ." + +#: network/applications/p2papplication.cpp:1071 +msgid "The transfer failed. Data preparation failed." +msgstr "Siirto epƤonnistui. Tietojen valmistelu ei onnistunut." + +#: network/applications/p2papplication.cpp:1178 #, fuzzy msgid "The invitation was cancelled. Message was not directed to us." msgstr "Kutsu peruuntui. Viesti ei kohdistunut meihin." -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 #, fuzzy msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." @@ -2783,35 +3356,22 @@ msgstr "" "Siirto epƤonnistui. Keskustelukumppani lƤhetti dataa, jota KMess ei tue tai " "joka on viallista." -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "Odotetaan yhteyttƤ kohteeseen %1, portti %2" -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "Palataan ei-suoraan tiedostojen siirtoon (tƤmƤ voi olla hidasta)." -#: network/applications/p2papplication.cpp:3297 -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "Siirto epƤonnistui. Aikaraja ylittyi hyvƤksyntƤƤ odotettaessa." - -#: network/applications/p2papplication.cpp:3316 -msgid "The transfer failed. An internal error occured." -msgstr "Siirto epƤonnistui. Tapahtui sisƤinen virhe." - -#: network/applications/p2papplication.cpp:3693 -#, fuzzy -msgid "The transfer failed. Couldn't open data source." -msgstr "Siirto epƤonnistui. Tietojen lƤhdettƤ ei saatu auki." - -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:3113 #, fuzzy msgid "Waiting for connection" msgstr "Odotetaan yhteystietolistaa..." -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 #, fuzzy msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " @@ -2820,7 +3380,7 @@ msgstr "" "Kutsu peruuntui. Aikaraja ylittyi odotettaessa keskustelukumppanin " "hyvƤksyntƤƤ." -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." @@ -2828,16 +3388,16 @@ msgstr "" "Kutsu peruuntui. Aikaraja ylittyi odotettaessa yhteyden onnistumista tai " "epƤonnistumista." -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "Kutsu peruuntui. Aikaraja ylittyi dataa odotettaessa." -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 msgid "You are invited to start a voice conversation." msgstr "Sinut kutsuttiin aloittamaan puhekeskustelu." -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 msgid "" "You are invited to start a voice conversation but support for this was not " "installed" @@ -2845,30 +3405,30 @@ msgstr "" "Sinut kutsuttiin aloittamaan puhekeskustelu, mutta tukea ominaisuudelle ei " "ole asennettu" -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 msgid "You have cancelled the voice conversation." msgstr "Olet keskeyttƤnyt ƤƤnikeskustelun." -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 #, fuzzy msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "Kutsu on peruuntunut. ƄƤnilaitetta ei saatu avattua." -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 #, fuzzy msgid "Start voice conversation. Connecting to %1." msgstr "ƄƤnikeskustelua aloitetaan. YhdistetƤƤn: %1" -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 #, fuzzy msgid "Start voice conversation. Listening on %1." msgstr "ƄƤnikeskustelua aloitetaan. Kuunnellaan: %1" -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 msgid "Inviting the contact to a voice conversation." msgstr "Kutsutaan keskustelukumppania ƤƤnikeskusteluun." -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 msgid "The contact is inviting you for '%1', but this is not implemented yet." msgstr "" @@ -2912,662 +3472,777 @@ msgstr "Ei saada yhteyttƤ luotua: %1" msgid "Receiving file %1" msgstr "Vastaanotetaan tiedostoa %1" -#: network/msnconnection.cpp:477 -msgid "1 ping lost" -msgstr "1 ping hukattu" +#: network/msnconnection.cpp:589 +#, fuzzy +msgid "KMess could not access the remote webservice.
Details: %1" +msgstr "" +"KMess ei saanut yhteyttƤ etƤweb-palveluun.\n" +"\n" +"LisƤtiedot: %1" -#: network/msnconnection.cpp:481 -msgid "%1 pings lost" -msgstr "%1 pingiƤ hukattu." - -#: network/msnconnection.cpp:496 -msgid "The connection to the server was lost." -msgstr "Yhteys palvelimeen katosi." - -#: network/msnconnection.cpp:704 +#: network/msnnotificationconnection.cpp:1317 #, fuzzy msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." -msgstr "" -"KMess ei saanut yhteyttƤ MSN-palveluun. \n" -"JƤrjestelmƤvirhe: %1 (koodi %2)." - -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "EtƤpalvelin katkaisi yhteyden." - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" -"KMess ei saanut yhteyttƤ MSN Messenger palvelimiin. MSN Messenger -palvelun " -"palvelimet voivat olla alhaalla, tai sinun Internet-yhteydessƤsi on jotain " -"vikaa." - -#: network/msnnotificationconnection.cpp:724 -msgid "Show MSN Messenger Service status?" -msgstr "NƤytetƤƤnkƶ MSN Messenger -palvelun tila?" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "Palvelinvirhe" - -#: network/msnnotificationconnection.cpp:1344 -#, fuzzy -msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" msgstr "" "Yhteys on katkaistu koska koska olet \n" "yhdistƤnyt MSN Messenger palveluun \n" "toisella sovelluksella tai toiselta koneelta" -#: network/msnnotificationconnection.cpp:1558 +#: network/msnnotificationconnection.cpp:1532 msgid "Got synchronization" msgstr "Synkronoidaan" -#: network/msnnotificationconnection.cpp:1699 -msgid "Authenticating" +#: network/msnnotificationconnection.cpp:1670 +#, fuzzy +msgid "Authenticating..." msgstr "LƤhetetƤƤn kƤyttƶoikeustietoja" -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "Vastaanotetaan vahvistus" - -#: network/msnnotificationconnection.cpp:1752 +#: network/msnnotificationconnection.cpp:1719 msgid "Waiting for contact list..." msgstr "Odotetaan yhteystietolistaa..." -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "SiirretƤƤn tietoa ilmoituspalvelimelle" +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." +msgstr "" -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" +#: network/msnnotificationconnection.cpp:1894 +#, fuzzy +msgid "Authentication failed, please verify your account name and password." msgstr "Tunnustautuminen epƤonnistui. Tarkista tilinimi ja salasana." -#: network/msnnotificationconnection.cpp:2042 +#: network/msnnotificationconnection.cpp:1993 msgid "Connecting..." msgstr "YhdistetƤƤn..." -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" +#: network/msnnotificationconnection.cpp:2167 +#, fuzzy +msgid "Unknown command received from the server: %1" msgstr "KMess on vastaanottanut tuntemattoman kƤskyn palvelimelta: %1" -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 +#: network/msnnotificationconnection.cpp:2192 msgid "Invalid command syntax" msgstr "" -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -msgid "There was an internal error in KMess: %1" -msgstr "Tapahtui sisƤinen KMess-virhe: %1" - -#: network/msnnotificationconnection.cpp:2243 +#: network/msnnotificationconnection.cpp:2196 msgid "Invalid command parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2246 +#: network/msnnotificationconnection.cpp:2199 msgid "The email you have tried to add is not a MSN Messenger account" msgstr "Yritettiin lisƤtƤ sƤhkƶpostiosoite ei ole MSN Messenger tili" -#: network/msnnotificationconnection.cpp:2249 +#: network/msnnotificationconnection.cpp:2204 msgid "Domain name missing" msgstr "" -#: network/msnnotificationconnection.cpp:2252 +#: network/msnnotificationconnection.cpp:2208 msgid "Already logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2255 +#: network/msnnotificationconnection.cpp:2211 msgid "The account name given is invalid" msgstr "Annettu tilin nimi on virheellinen" -#: network/msnnotificationconnection.cpp:2258 +#: network/msnnotificationconnection.cpp:2215 msgid "" "That account name is invalid, or your passport has not been confirmed yet" msgstr "" "Annettu tilin nimi on virheellinen tai MSN passport -tiliƤsi ei ole vielƤ " "vahvistettu" -#: network/msnnotificationconnection.cpp:2261 +#: network/msnnotificationconnection.cpp:2218 msgid "Your contact list is full" msgstr "Yhteystietolistasi on tƤynnƤ" -#: network/msnnotificationconnection.cpp:2264 +#: network/msnnotificationconnection.cpp:2223 msgid "Invalid SBP parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2267 +#: network/msnnotificationconnection.cpp:2226 msgid "This contact is already on your list" msgstr "TƤmƤ yhteystieto on jo listallasi" -#: network/msnnotificationconnection.cpp:2270 +#: network/msnnotificationconnection.cpp:2230 msgid "This contact is not on your list" msgstr "TƤmƤ yhteystieto ei ole listallasi" -#: network/msnnotificationconnection.cpp:2273 +#: network/msnnotificationconnection.cpp:2234 msgid "This contact is not online" msgstr "TƤmƤ keskustelukumppani ei ole paikalla" -#: network/msnnotificationconnection.cpp:2276 +#: network/msnnotificationconnection.cpp:2239 msgid "Already in this mode" msgstr "" -#: network/msnnotificationconnection.cpp:2279 +#: network/msnnotificationconnection.cpp:2243 #, fuzzy msgid "Contact is in the opposite list" msgstr "TƤmƤ yhteystieto ei ole listallasi" -#: network/msnnotificationconnection.cpp:2282 -msgid "Your contact list has too many groups" -msgstr "Yhteystietolistallasi on liian monta ryhmƤƤ" - -#: network/msnnotificationconnection.cpp:2285 -msgid "This group can't be changed" -msgstr "TƤtƤ ryhmƤƤ ei voi muuttaa" - -#: network/msnnotificationconnection.cpp:2288 -msgid "This group is not empty" -msgstr "TƤmƤ ryhmƤ ei ole tyhjƤ" - -#: network/msnnotificationconnection.cpp:2291 +#: network/msnnotificationconnection.cpp:2247 +#, fuzzy msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." msgstr "" "TƤmƤ ryhmƤnimi on jo kƤytƶssƤ Messenger- tai Hotmail-yhteystietoilistallasi" -#: network/msnnotificationconnection.cpp:2294 +#: network/msnnotificationconnection.cpp:2251 +msgid "Your contact list has too many groups" +msgstr "Yhteystietolistallasi on liian monta ryhmƤƤ" + +#: network/msnnotificationconnection.cpp:2255 +msgid "This group can't be changed" +msgstr "TƤtƤ ryhmƤƤ ei voi muuttaa" + +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "Yhteystietolistallasi on liian monta ryhmƤƤ" + +#: network/msnnotificationconnection.cpp:2264 +msgid "This group is not empty" +msgstr "TƤmƤ ryhmƤ ei ole tyhjƤ" + +#: network/msnnotificationconnection.cpp:2268 msgid "The group name is too long" msgstr "RyhmƤn nimi liian pitkƤ" -#: network/msnnotificationconnection.cpp:2297 +#: network/msnnotificationconnection.cpp:2273 msgid "Attempted to change group \"0\"" msgstr "" -#: network/msnnotificationconnection.cpp:2300 +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +msgid "There was an internal error in KMess: %1" +msgstr "Tapahtui sisƤinen KMess-virhe: %1" + +#: network/msnnotificationconnection.cpp:2277 #, fuzzy msgid "Invalid Group" msgstr "&UudelleennimeƤ ryhmƤ" -#: network/msnnotificationconnection.cpp:2303 +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 msgid "Switchboard server failed" msgstr "KytkentƤpalvelimessa tapahtui virhe" -#: network/msnnotificationconnection.cpp:2306 +#: network/msnnotificationconnection.cpp:2287 msgid "Transfer to switchboard server failed" msgstr "Siirto kytkentƤpalvelimelle epƤonnistui" -#: network/msnnotificationconnection.cpp:2309 +#: network/msnnotificationconnection.cpp:2291 msgid "Direct connection (MSNSLP) error, connection failed" msgstr "" -#: network/msnnotificationconnection.cpp:2312 +#: network/msnnotificationconnection.cpp:2295 msgid "Required field missing" msgstr "" -#: network/msnnotificationconnection.cpp:2315 +#: network/msnnotificationconnection.cpp:2299 msgid "Not logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" -msgstr "" +#: network/msnnotificationconnection.cpp:2302 +#, fuzzy +msgid "No permissions given for this account" +msgstr "Muista tƤmƤn tilin asetukset" -#: network/msnnotificationconnection.cpp:2322 +#: network/msnnotificationconnection.cpp:2307 msgid "Command is disabled" msgstr "" -#: network/msnnotificationconnection.cpp:2325 +#: network/msnnotificationconnection.cpp:2310 msgid "Your account is banned." msgstr "" -#: network/msnnotificationconnection.cpp:2329 +#: network/msnnotificationconnection.cpp:2314 #, fuzzy msgid "Challenge response failed" msgstr "Siirto epƤonnistui." -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" +#: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" +msgstr "" + +#: network/msnnotificationconnection.cpp:2323 +#, fuzzy +msgid "You are opening chat sessions too fast" msgstr "Avaat istuntoja liian nopeaan tahtiin" -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" msgstr "Sinulla on liian monta istuntoa avoinna" -#: network/msnnotificationconnection.cpp:2341 +#: network/msnnotificationconnection.cpp:2334 msgid "Unexpected command sequence" msgstr "" -#: network/msnnotificationconnection.cpp:2344 +#: network/msnnotificationconnection.cpp:2338 msgid "Bad friend name" msgstr "Virheellinen ystƤvƤn nimi" -#: network/msnnotificationconnection.cpp:2348 +#: network/msnnotificationconnection.cpp:2344 msgid "Bad CVR data" msgstr "" -#: network/msnnotificationconnection.cpp:2353 +#: network/msnnotificationconnection.cpp:2350 msgid "The server reports KMess is flooding it with too many data" msgstr "Palvelin ilmoittaa KMessin tulvivan sitƤ datalla" -#: network/msnnotificationconnection.cpp:2358 +#: network/msnnotificationconnection.cpp:2357 #, fuzzy msgid "Authentication ticket was incorrect" msgstr "Tunnistautuminen epƤonnistui" -#: network/msnnotificationconnection.cpp:2362 +#: network/msnnotificationconnection.cpp:2360 msgid "You can't start a chat with someone while you are invisible." msgstr "Et voi aloittaa keskustelua kun olet nƤkymƤtƶn." -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." +#: network/msnnotificationconnection.cpp:2364 +#, fuzzy +msgid "Not accepting new contacts" +msgstr "Ei vastaanoteta uusia tavoitteita" + +#: network/msnnotificationconnection.cpp:2368 +#, fuzzy +msgid "" +"You have a kids passport account, you need parental consent to chat online." msgstr "" "Sinulla on lasten passport-tunnus ja tarvitset vanhempiesi hyvƤksynnƤn " "keskustellaksesi verkossa." -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." +#: network/msnnotificationconnection.cpp:2371 +#, fuzzy +msgid "Your passport account needs to be verified first." msgstr "Passport-tunnuksesi pitƤƤ ensin vahvistaa." -#: network/msnnotificationconnection.cpp:2373 +#: network/msnnotificationconnection.cpp:2375 msgid "Bad USR ticket" msgstr "" -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" -msgstr "KMess - MSN virhe" +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" +msgstr "" -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" +#: network/msnnotificationconnection.cpp:2399 +#, fuzzy +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." msgstr "Tapahtui sisƤinen palvelinvirhe" +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + #: network/msnnotificationconnection.cpp:2414 -msgid "The server is too busy" -msgstr "Palvelin on liian kiireinen" - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "Palvelin ei ole saatavilla" - -#: network/msnnotificationconnection.cpp:2422 msgid "Peer notification server down" msgstr "Tarkastuspalvelin alhaalla" -#: network/msnnotificationconnection.cpp:2426 +#: network/msnnotificationconnection.cpp:2418 msgid "The server is going down" msgstr "Palvelin on menossa alas" -#: network/msnnotificationconnection.cpp:2429 +#: network/msnnotificationconnection.cpp:2422 msgid "The server is going down soon" msgstr "Palvelin on pian menossa alas" -#: network/msnnotificationconnection.cpp:2433 +#: network/msnnotificationconnection.cpp:2427 msgid "Write is blocking" msgstr "Kirjoittaminen on estetty" -#: network/msnnotificationconnection.cpp:2436 +#: network/msnnotificationconnection.cpp:2431 msgid "Session is overloaded" msgstr "Istunto on ylikuormitettu" -#: network/msnnotificationconnection.cpp:2441 +#: network/msnnotificationconnection.cpp:2438 msgid "The server is not available" msgstr "Palvelin ei ole saatavilla" -#: network/msnnotificationconnection.cpp:2444 +#: network/msnnotificationconnection.cpp:2442 msgid "Authentication failed" msgstr "Tunnistautuminen epƤonnistui" -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" -msgstr "Ei vastaanoteta uusia tavoitteita" +#: network/msnnotificationconnection.cpp:2449 +#, fuzzy +msgid "Unknown error code received from the server: %1" +msgstr "KMess on vastaanottanut tuntemattoman kƤskyn palvelimelta: %1" -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" -msgstr "" -"KMess on vastaanottanut tuntemattoman virheilmoituksen palvelimelta: %1" +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +#, fuzzy +msgctxt "Error dialog box title" +msgid "MSN error" +msgstr "KMess - MSN virhe" -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "Varoitus: Palvelin sulkeutuu huollettavaksi 1 minuutin kuluttua!" +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "minuuttia" +msgstr[1] "minuuttia" #: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." +#, fuzzy +msgid "Server closes for maintenance in %1!" +msgstr "Varoitus: Palvelin sulkeutuu huollettavaksi %1 minuutin kuluttua!" + +#: network/msnnotificationconnection.cpp:2604 +#, fuzzy +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." msgstr "" "MSN Palvelin on ilmoittanut, ettƤ se menee alas huollettavaksi minuutin " "kuluttua." -#: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" -msgstr "Varoitus: Palvelin sulkeutuu huollettavaksi %1 minuutin kuluttua!" - -#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:2901 msgid "Lost reference to SOAP client" msgstr "" -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +#, fuzzy +msgid "KMess could not process Offline-IM messages.
Details: %1" msgstr "" "KMess ei voinut kƤsitellƤ Poissa linjoilta -viestejƤ.\n" "\n" "LisƤtiedot: %1" -#: network/msnnotificationconnection.cpp:3209 +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "Tunnistautuminen epƤonnistui" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "Tapahtui sisƤinen KMess-virhe: %1" + +#: network/msnnotificationconnection.cpp:3242 +#, fuzzy +msgctxt "Login error message, with more details for developer versions" msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" +msgstr "" +"KMess ei saanut yhteyttƤ MSN Messenger palvelimiin. MSN Messenger -palvelun " +"palvelimet voivat olla alhaalla, tai sinun Internet-yhteydessƤsi on jotain " +"vikaa." + +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "Yhteys palvelimeen katosi." + +#: network/msnnotificationconnection.cpp:3302 +#, fuzzy +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" msgstr "" "Tunnistautuminen epƤonnistui, KMess ei voinut kƤsitellƤ passport " "kirjautumista.\n" "\n" "LisƤtiedot: %1" -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" -msgstr "" -"KMess ei saanut yhteyttƤ etƤweb-palveluun.\n" -"\n" -"LisƤtiedot: %1" +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "Palvelinvirhe" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "Yhteyden aikakatkaisu" + +#: network/msnsockettcp.cpp:368 +msgid "1 ping lost" +msgstr "1 ping hukattu" + +#: network/msnsockettcp.cpp:372 +msgid "%1 pings lost" +msgstr "%1 pingiƤ hukattu." + +#: network/msnsockettcp.cpp:387 +msgid "The connection to the server was lost." +msgstr "Yhteys palvelimeen katosi." + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "Henkilƶ on poissa linjoilta tai nƤkymƤtƶn." -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "" "Keskustelukumppanisi yritti kƤyttƤƤ MSN7-ominaisuutta, jota KMess ei vielƤ " "osaa kƤsitellƤ." -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 #, fuzzy msgid "The message \"%1\" was not received!" msgstr "ViestiƤ \"%1\" ei vastaanotettu." -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "Ei saada yhteyttƤ luotua: %1" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "" -#: notification/notificationchat.cpp:173 +#: notification/chatnotification.cpp:163 #, fuzzy -msgid "In %1's chat: %2" +msgid "In %1's chat: %2" msgstr "Henkilƶn %1 keskustelussa" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +msgid "%1 says:
'%2'" msgstr "" -#: notification/notificationchat.cpp:181 +#: notification/chatnotification.cpp:171 #, fuzzy -msgid "%1 has sent you an offline message:
'%2'" +msgid "%1 has sent you an offline message:
'%2'" msgstr "on lƤhettƤnyt sinulle poissa linjoilta -viestin viestin" -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" +#: notification/chatnotification.cpp:178 +#, fuzzy +msgid "%1's chat requests attention!" msgstr "Henkilƶn %1 keskustelu vaatii huomiota!" -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" +#: notification/chatnotification.cpp:183 +msgid "%1:
%2" msgstr "" -#: notification/notificationchat.cpp:200 +#: notification/chatnotification.cpp:190 #, fuzzy -msgid "%1 has sent you a handwritten message!" +msgid "%1 has sent you a handwritten message!" msgstr "on lƤhettƤnyt sinulle herƤtteen!" -#: notification/notificationchat.cpp:204 +#: notification/chatnotification.cpp:194 #, fuzzy -msgid "%1 has sent you a nudge!" +msgid "%1 has sent you a nudge!" msgstr "on lƤhettƤnyt sinulle herƤtteen!" -#: notification/notificationchat.cpp:208 +#: notification/chatnotification.cpp:198 #, fuzzy -msgid "%1 has sent you a wink!" +msgid "%1 has sent you a wink!" msgstr "on lƤhettƤny sinulle olion!" -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" -msgstr "" - -#: notification/notificationchat.cpp:215 +#: notification/chatnotification.cpp:204 #, fuzzy -msgid "%1 is sending you a file!" +msgid "%1 wants to use the webcam!" +msgstr "%1 on kirjautunut ulos" + +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" msgstr "%1 on nyt paikalla" -#: notification/notificationchat.cpp:216 +#: notification/chatnotification.cpp:206 #, fuzzy -msgid "%1 has sent you an invitation!" +msgid "%1 has sent you an invitation!" msgstr "on lƤhettƤny sinulle olion!" -#: notification/notificationchat.cpp:223 +#: notification/chatnotification.cpp:213 #, fuzzy -msgid "%1 has canceled the webcam session!" +msgid "%1 has canceled the webcam session!" msgstr "Olet katkaissut istunnon." -#: notification/notificationchat.cpp:224 +#: notification/chatnotification.cpp:214 #, fuzzy -msgid "%1 has canceled the file transfer!" +msgid "%1 has canceled the file transfer!" msgstr "Keskustelukumppani peruutti siirron." -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +msgid "%1's activity has been canceled!" msgstr "" -#: notification/notificationchat.cpp:232 +#: notification/chatnotification.cpp:222 #, fuzzy -msgid "%1 has accepted to use the webcam!" +msgid "%1 has accepted to use the webcam!" msgstr "%1 on kirjautunut ulos" -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" -msgstr "" - -#: notification/notificationchat.cpp:234 +#: notification/chatnotification.cpp:223 #, fuzzy -msgid "%1 has accepted your invitation!" +msgid "%1 has accepted the file transfer!" +msgstr "Keskustelukumppani peruutti siirron." + +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" msgstr "%1 on kirjautunut ulos" -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" -msgstr "" - -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" -msgstr "" - -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" -msgstr "" - -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" -msgstr "" - -#: notification/notificationchat.cpp:251 +#: notification/chatnotification.cpp:231 #, fuzzy -msgid "The file transfer with %1 has failed!" +msgid "%1 has ended the webcam session!" +msgstr "Olet katkaissut istunnon." + +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "Tiedoston %1 siirto peruutettiin." -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:233 +msgid "%1's activity has ended!" msgstr "" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -msgid "%1 is now online" -msgstr "%1 on nyt paikalla" - -#: notification/notificationcontactstatus.cpp:76 -#, fuzzy -msgid "%1 has gone away" -msgstr "%1 on kirjautunut ulos" - -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/chatnotification.cpp:240 +msgid "%1's webcam session has failed!" msgstr "" -#: notification/notificationcontactstatus.cpp:78 +#: notification/chatnotification.cpp:241 #, fuzzy -msgid "%1 is now busy" +msgid "The file transfer with %1 has failed!" +msgstr "Tiedoston %1 siirto peruutettiin." + +#: notification/chatnotification.cpp:242 +msgid "%1's activity has ended with an error!" +msgstr "" + +#: notification/contactstatusnotification.cpp:70 +#, fuzzy +msgid "%1 is now online" msgstr "%1 on nyt paikalla" -#: notification/notificationcontactstatus.cpp:79 +#: notification/contactstatusnotification.cpp:71 #, fuzzy -msgid "%1 has become invisible" -msgstr "%1 on nyt paikalla" - -#: notification/notificationcontactstatus.cpp:80 -#, fuzzy -msgid "%1 has gone idle" +msgid "%1 has gone away" msgstr "%1 on kirjautunut ulos" -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/contactstatusnotification.cpp:72 +msgid "%1 will be right back" +msgstr "" + +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" +msgstr "%1 on nyt paikalla" + +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" +msgstr "%1 on nyt paikalla" + +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" msgstr "%1 on kirjautunut ulos" -#: notification/notificationcontactstatus.cpp:82 +#: notification/contactstatusnotification.cpp:76 #, fuzzy -msgid "%1 is on the phone" +msgid "%1 has logged out" +msgstr "%1 on kirjautunut ulos" + +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" msgstr "%1 on nyt paikalla" -#: notification/notificationcontactstatus.cpp:83 +#: notification/contactstatusnotification.cpp:78 #, fuzzy -msgid "%1 is out for lunch" +msgid "%1 is out for lunch" msgstr "%1 on nyt paikalla" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/newemailnotification.cpp:78 +#, fuzzy +msgid "New email:
'%1'
by '%2'" msgstr "Uusi sƤhkƶposti:
'%1'
kirjoittanut '%2'" -#: settings/accountswidget.cpp:81 +#: settings/accountpage.cpp:69 #, fuzzy msgid "Browse..." msgstr "&Selaa..." -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +#, fuzzy +msgid "Browse and crop picture..." msgstr "Selaa ja rajaa kuvaa..." -#: settings/accountswidget.cpp:404 -msgid "Display Picture" -msgstr "Keskustelukuvake" +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" +#: settings/accountpage.cpp:448 +#, fuzzy +msgid "Downloading of display picture failed" msgstr "Keskustelukuvakkeen lataus epƤonnistui" -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 +#, fuzzy msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" "Keskustelukuvan vaihdossa tapahtui virhe.\n" " Varmista ettƤ valitsit oikean kuvatiedoston" -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "Stacy" - -#: settings/chatstylepage.cpp:317 -#, fuzzy -msgid "Great!" -msgstr "Vuohi" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 #, fuzzy msgid "&Delete" msgstr "&Poista yhteystieto" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "Asetukset" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 msgid "Account" msgstr "KƤyttƤjƤtili" -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 #, fuzzy msgid "My Account" msgstr "KƤyttƤjƤtili" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "HƤlytykset" -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 #, fuzzy msgid "Alerts and Notifications" msgstr "KMess-ilmoitus" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "Keskustelee" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "Keskustelun kirjoitus lokiin" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +#, fuzzy +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "Annettu yhteystiedon osoite ei ole kelvollinen: %1" + +#: settings/accountsettingsdialog.cpp:201 +#, fuzzy +msgid "The email address you have entered is already in use: '%1'" +msgstr "Annettu yhteystiedon osoite ei ole kelvollinen: %1" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "Oletko varma, ettƤ haluat poistaa tƤmƤn tilin?" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "Oletko varma, ettƤ haluat poistaa tƤmƤn tilin?" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "Stacy" + +#: settings/chatstylepage.cpp:341 +#, fuzzy +msgid "Great!" +msgstr "Vuohi" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "Asetukset" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +msgid "Accounts" +msgstr "KƤyttƤjƤtilit" + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "SƤhkƶposti-ilmoitin" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "Tallennettujen keskustelujen juurihakemisto:" + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." @@ -3575,14 +4250,146 @@ msgstr "" "PƤƤikkunan ei sammuta KMessiƤ, vaan se pysyy kƤynnissƤ ilmoitusalueella. " "KƤytƤ 'YhdistƤ -> Lopeta' valikosta sulkeaksesi ohjelman." -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "PienennetƤƤn ilmoitusalueelle" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "" +#: systemtraywidget.cpp:245 +#, fuzzy +msgid "- %1 (%2)" +msgstr "%1 Mt" + +#~ msgid "Picture:" +#~ msgstr "Kuva:" + +#, fuzzy +#~ msgid "Speed:" +#~ msgstr "Palvelin:" + +#, fuzzy +#~ msgid "Login Information" +#~ msgstr "NƤytƤ sƤhkƶpostitiedot" + +#~ msgid "Logging in..." +#~ msgstr "Kirjaudutaan sisƤƤn..." + +#~ msgid "" +#~ "Allows you to choose which e-mail program KMess should open to view e-" +#~ "mail messages." +#~ msgstr "Ohjelma, jota KMess kƤskee nƤyttƤmƤƤn sƤhkƶpostiviestit." + +#~ msgid "Use a specified command:" +#~ msgstr "MƤƤritƤ komento itse:" + +#, fuzzy +#~ msgid "Email: " +#~ msgstr "SƤhkƶposti" + +#~ msgid "Remove group" +#~ msgstr "Poista ryhmƤ" + +#, fuzzy +#~ msgid "Show &Display Pictures" +#~ msgstr "Keskustelukuvake" + +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr "Postilaatikossasi on 1 uusi sƤhkƶposti" + +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr "Postilaatikossasi on %1 uutta sƤhkƶpostia" + +#, fuzzy +#~ msgid "Guido Solinas" +#~ msgstr "Paikalla" + +#, fuzzy +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "Tiedoston %1 siirto epƤonnistui. Tiedostoa ei voitu avata" + +#, fuzzy +#~ msgid "Sidebar" +#~ msgstr "NƤytƤ/Piilota &yhteystietopalkki" + +#, fuzzy +#~ msgid "New contact's group" +#~ msgstr "Uusi &Yhteystieto" + +#~ msgid "Enter your login information:" +#~ msgstr "SyƶtƤ kirjautumistiedot:" + +#~ msgid "Your friendly name:" +#~ msgstr "Lempinimesi:" + +#, fuzzy +#~ msgid "Your email address:" +#~ msgstr "SƤhkƶpostiosoite: " + +#~ msgid "Your password:" +#~ msgstr "Salasanasi:" + +#~ msgid "Display picture:" +#~ msgstr "Keskustelukuvake:" + +#~ msgid "Don't show a displa&y picture" +#~ msgstr "ƄlƤ nƤytƤ keskustelukuv&aketta" + +#, fuzzy +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "NƤytƤ tiedote kun saat sƤhkƶpostia \"muihin kansioihin\"" + +#~ msgid "Organize chat folders by:" +#~ msgstr "JƤrjestƤ keskusteluhakemistot:" + +#~ msgid "&Show graphics in chat messages" +#~ msgstr "&NƤytƤ grafiikat viesteissƤ" + +#~ msgid "Use Hotmail" +#~ msgstr "KƤytƤ Hotmailia" + +#~ msgid "says:" +#~ msgstr "sanoo:" + +#~ msgid "Current name: " +#~ msgstr "Nykyinen nimi: " + +#, fuzzy +#~ msgid "" +#~ "KMess could not connect to the MSN Messenger service.\n" +#~ "Please, be sure to be connected to the internet.\n" +#~ "reason: %1." +#~ msgstr "" +#~ "KMess ei saanut yhteyttƤ MSN-palveluun. \n" +#~ "JƤrjestelmƤvirhe: %1 (koodi %2)." + +#~ msgid "The remote server has closed the connection." +#~ msgstr "EtƤpalvelin katkaisi yhteyden." + +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr "NƤytetƤƤnkƶ MSN Messenger -palvelun tila?" + +#~ msgid "Received user confirmation" +#~ msgstr "Vastaanotetaan vahvistus" + +#~ msgid "Transfer to notification server" +#~ msgstr "SiirretƤƤn tietoa ilmoituspalvelimelle" + +#~ msgid "The server is too busy" +#~ msgstr "Palvelin on liian kiireinen" + +#~ msgid "The server is unavailable" +#~ msgstr "Palvelin ei ole saatavilla" + +#~ msgid "KMess received an unknown error message from the server: %1" +#~ msgstr "" +#~ "KMess on vastaanottanut tuntemattoman virheilmoituksen palvelimelta: %1" + +#~ msgid "Warning: Server closes for maintenance in 1 minute!" +#~ msgstr "Varoitus: Palvelin sulkeutuu huollettavaksi 1 minuutin kuluttua!" + #~ msgid "Add contact" #~ msgstr "LisƤƤ yhteystieto" @@ -3590,9 +4397,6 @@ msgstr "" #~ msgid "KMess Notification" #~ msgstr "SƤhkƶposti-ilmoitin" -#~ msgid "Accounts" -#~ msgstr "KƤyttƤjƤtilit" - #~ msgid "" #~ msgstr "" @@ -3606,9 +4410,6 @@ msgstr "" #~ "Your emails" #~ msgstr "markus@vuoret.net, juippis@roskakori.org, jussi.timperi@gmail.com" -#~ msgid "Insert an emoticon" -#~ msgstr "LisƤƤ hymiƶ" - #~ msgid "Away - Idle" #~ msgstr "Poissa - jouten" @@ -3639,15 +4440,6 @@ msgstr "" #~ msgid "(On the Phone)" #~ msgstr "(Puhelimessa)" -#~ msgid "Connection timeout" -#~ msgstr "Yhteyden aikakatkaisu" - -#~ msgid "Connect" -#~ msgstr "YhdistƤ" - -#~ msgid "Listening to %1" -#~ msgstr "Kuuntele kappaletta %1" - #, fuzzy #~ msgid "The contact is listening to music" #~ msgstr "TƤmƤ yhteystieto ei ole listallasi" @@ -3745,9 +4537,6 @@ msgstr "" #~ msgid "You can't login to hotmail with this account." #~ msgstr "Et voi kirjautua sisƤƤn Hotmailiin tƤllƤ tunnuksella." -#~ msgid "The connection to the server failed." -#~ msgstr "YhdistƤminen palvelimeen epƤonnistui." - #~ msgid "You may not be connected to the internet." #~ msgstr "Mahdollisesti sinulla ei ole yhteyttƤ Internetiin." @@ -3760,9 +4549,6 @@ msgstr "" #~ msgid "says" #~ msgstr "sanoo" -#~ msgid "has sent you" -#~ msgstr "on lƤhettƤnyt sinulle" - #~ msgid "Ctrl+Return" #~ msgstr "Ctrl+Return" @@ -3810,9 +4596,6 @@ msgstr "" #~ msgid "Preview:" #~ msgstr "Esikatselu:" -#~ msgid "&Use the default picture" -#~ msgstr "&KƤytƤ oletuskuvaa" - #~ msgid "If enabled, KMess uses it's default picture in chat conversations." #~ msgstr "Jos valittu, KMess kƤyttƤƤ sen oletuskuvaa keskusteluissa." @@ -3829,9 +4612,6 @@ msgstr "" #~ msgid "Port:" #~ msgstr "Portti:" -#~ msgid "Type:" -#~ msgstr "Tyyppi:" - #~ msgid "User ID:" #~ msgstr "KƤyttƤjƤn ID:" @@ -3844,9 +4624,6 @@ msgstr "" #~ msgid "SOCKS5 Proxy" #~ msgstr "SOCKS5-vƤlityspalvelin" -#~ msgid "Server:" -#~ msgstr "Palvelin:" - #~ msgid "Proxy" #~ msgstr "VƤlityspalvelin" diff --git a/po/fr.po b/po/fr.po index b3caefd..bb08460 100644 --- a/po/fr.po +++ b/po/fr.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: fr\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" "PO-Revision-Date: 2007-10-17 09:48+0200\n" "Last-Translator: Andrea Blankenstijn \n" "Language-Team: FranƧais \n" @@ -21,45 +21,38 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "Connexion en cours..." - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -msgid "S&end" -msgstr "&Envoyer" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 msgid "Ne&w Line" msgstr "Nouvelle ligne" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 -#, fuzzy -msgid "Sidebar" -msgstr "Bar latĆ©rale" +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 +msgid "S&end" +msgstr "&Envoyer" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +msgid "Contacts" +msgstr "Contacts" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "Cliquez ici pour affiche le profil de ce contact." #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." -msgstr "Cliquez pour envoyer un e-mail Ć  ce contact." +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 #, fuzzy msgid "" "Enter here the email address of the person you wish to add to your contact " @@ -67,41 +60,39 @@ msgid "" msgstr "Entrer l'adresse e-mail de la personne que vous voulez ajouter :" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 msgid "Email address" msgstr "Adresse e-mail :" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 #, fuzzy -msgid "New contact's group" -msgstr "Nouveau &Contact" +msgid "Initial group" +msgstr "Re&nommer le Groupe" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "Entrez un raccourci pour cette Ć©moticĆ“ne :" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "Choisissez une image _" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 #, fuzzy msgid "" "Enter a message to be automatically sent to people who try to message you." @@ -110,125 +101,338 @@ msgstr "" "aux personnes qui tenteront de vous contacter :" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 #, fuzzy msgid "&Automatic away message" msgstr "RĆ©diger un message d'Absence" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" msgstr "" -"%1\n" -"vous a ajoutĆ©(e) dans sa liste de contact. Que voulez-vous faire ?" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 -msgid "&Add this contact to your \"Friends\" list" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 +#, fuzzy +msgid "&Add this person to my \"Friends\" list" msgstr "&Ajouter cette personne dans votre liste de contact." #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 -msgid "&Not add this contact, but let them see your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 +#, fuzzy +msgid "Do not add this person; only allow them to see my online state" msgstr "&Ne pas ajouter ce contact, mais le laisser voir votre statut." #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 -msgid "Block this person from contacting &you or seeing your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 +#, fuzzy +msgid "&Block this person from contacting me or seeing my online state" msgstr "&EmpĆŖcher cette personne de vous contacter et de voir votre statut." #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, no-c-format +msgid "Contact Properties for %1" +msgstr "PropriĆ©tĆ©s du contact %s" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +#, fuzzy +msgid "Restore" +msgstr "SupprimĆ©" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "Choisir un autre pseudo pour cette personne" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "Afficher une Bulle quand ce contact se connecte ou se dĆ©connecte" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "Son : " + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +#, fuzzy +msgid "&Clear Cache" +msgstr "Effacer l'onglet" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +#, fuzzy +msgid "Notes" +msgstr "Note" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "FenĆŖtre du rĆ©seau" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +#, fuzzy +msgid "Standard" +msgstr "Etoille" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "&Envoyer" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 msgid "Cancel" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -msgid "Enter your login information:" -msgstr "Saisissez vos identifiants de connexion :" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" +msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 -msgid "Password" +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 +#, fuzzy +msgid "Email address:" +msgstr "Adresse e-mail : " + +#. i18n: tag string +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +#, fuzzy +msgid "Password:" msgstr "Mot de passe :" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "Ɖtat Ć  la connexion" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 #, fuzzy msgid " Account options " msgstr "&ParamĆØtres du Compte" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 msgid "Remem&ber this profile" msgstr "MĆ©moriser ce profil" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "&Connexion" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "RĆ©digez ici votre message perso " #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr "&ParamĆØtres du Compte" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "" "Entrez le nom que vous voulez que vos contacts voient lorsque vous " "apparaissez en ligne." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 -msgid "Your friendly name:" -msgstr "Votre pseudonyme :" +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 +#, fuzzy +msgid "&Friendly name:" +msgstr "&Pseudonyme" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" @@ -237,15 +441,15 @@ msgstr "" "nouveau compte sur http//register.passport.com/." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 #, fuzzy -msgid "Your email address:" +msgid "&Email address:" msgstr "Adresse e-mail : " #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" @@ -254,39 +458,40 @@ msgstr "" "nouveau compte sur http//register.passport.com/." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" -msgstr "Votre mot de passe :" - -#. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 #, fuzzy -msgid "Remember Password" +msgid "&Password:" msgstr "Mot de passe :" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 -msgid "Display picture:" -msgstr "Avatar :" +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 +#, fuzzy +msgid "&Remember Password" +msgstr "Mot de passe :" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 +msgid "Display Picture" +msgstr "Avatar" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 msgid "C&hange..." msgstr "&Changer..." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -msgid "Don't show a displa&y picture" -msgstr "Ne pas afficher d'avatar" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -303,34 +508,37 @@ msgstr "" "KMess en tant qu'invitĆ© ou bien dans un environement public (type cybercafĆ©)." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +#, fuzzy +msgid "Re&member the settings of this account" msgstr "MĆ©moriser les paramĆŖtres de ce compte" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "Si activĆ©, KMess se connectera automatiquement avec ce compte." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 -msgid "Login &with this account automatically at start-up" +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 +#, fuzzy +msgid "Login &with this account automatically" msgstr "Se &connecter automatiquement avec ce compte au dĆ©marrage" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "Ɖtat utilisĆ© Ć  la connexion" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "&Archiver toutes les conversations" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -341,8 +549,8 @@ msgstr "" "actuelle, ou utilisez un compte Hotmail pour vous connecter." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." @@ -351,26 +559,26 @@ msgstr "" "votre compte passport n'a pas Ć©tĆ© vĆ©rifiĆ©e." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "Demander un e-mail de vĆ©rification" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 msgid "https://accountservices.passport.net/" msgstr "https://accountservices.passport.net/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "Aller sur accountservices.passport.net" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." @@ -379,38 +587,103 @@ msgstr "" "un nouveau compte Passport liĆ© Ć  votre adresse e-mail." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "CrĆ©er un nouveau compte" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "Aller sur register.passport.com" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 -msgid "Popup notifications" +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 +#, fuzzy +msgid "Saved accounts:" +msgstr "Comptes" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +msgid "Click" +msgstr "Cliquez" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "" +"Cliquez ici pour ajouter une nouvelle Ć©moticĆ“ne personnalisĆ©e pour envoyer Ć  " +"vos contacts." + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "Compte" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "Choisissez une Ć©moticĆ“ne et cliquez ici pour la supprimer." + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "SupprimĆ©" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "Notification popup" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "Contacts" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 msgid "Show notifications when your contacts:" msgstr "Me notifier quand mes contacts :" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." @@ -419,15 +692,15 @@ msgstr "" "connecte." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 #, fuzzy msgid "&Go online" msgstr "Se &dĆ©connectent" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." @@ -436,14 +709,14 @@ msgstr "" "une conversation avec vous." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "DĆ©butent une conversation avec moi" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." @@ -452,14 +725,14 @@ msgstr "" "envoi un message." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 msgid "S&end you a message" msgstr "M'&envoient un message" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." @@ -468,16 +741,16 @@ msgstr "" "d'Ć©tat MSN." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "Changent d'Ć©tat" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." @@ -486,38 +759,89 @@ msgstr "" "se deconnecte." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 msgid "Go o&ffline" msgstr "Se &dĆ©connectent" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 -msgid "Show notifications when you recei&ve an email" -msgstr "Afficher une notification lors de la rĆ©ception d'un e-mail" +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 +#, fuzzy +msgid "Email Events" +msgstr "Adresse e-mail :" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" +msgstr "" +"Afficher une notification lorsqu'un e-mail est reƧu dans d'autres dossiers" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" +"Si activiĆ©, un popup apparait aussi lorsqu'un e-mail est reƧu dans d'autres " +"dossiers. Cette options n'est disponibles que pour les comptes Hotmail." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +msgid "In other folders" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "Choisissez la durĆ©e d'affichage des popups de notification." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "Masquer les popups aprĆØs" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "secondes" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "Alertes" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "Afficher les Contacts &DĆ©connectĆ©s" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -536,15 +860,33 @@ msgstr "" "fenêtre de conversation qu'à la réception du premier wizz.

" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "" "Remuer la fenĆŖtre de conversation lors de la rĆ©ception ou l'envois d'un wizz." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" +"Si activĆ©, une popup apparait lorsqu'un nouvel e-mail est arrivĆ© dans votre " +"boite de rĆ©ception. Le nombre de messages non-lus est afichĆ© au dessus de la " +"liste de contact. Cette option n'est disponible que pour les comptes Hotmail." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." @@ -554,31 +896,38 @@ msgstr "" "audio, s'il est en activitĆ© et supportĆ©. " #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 -msgid "Inform contacts w&hich song I am listening to." +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 +#, fuzzy +msgid "Inform contacts w&hich song I am listening to" msgstr "Informer les contacts du morceau que j'Ć©coute." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 +#, fuzzy msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" "Si activĆ©, votre statut sera modifiĆ© automatiquement en \"Absent - Innactif" "\" lorsque vous n'utilisez pas votre ordinateur depuis un certain nombre de " "minutes." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "Changer le statut en \"Absent - &Inactif\" quand vous ĆŖtes inactif" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." @@ -587,34 +936,34 @@ msgstr "" "votre statut en \"Absent - Innactif\"." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 msgid "Become idle after" msgstr "ApparaĆ®tre comme innactif aprĆØs" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "minutes" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "" "Si activivĆ©, les conversations seront archivĆ©es dans un rĆ©pertoire " "particulier." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 msgid "Log &all chats" msgstr "&Archiver toutes les conversations" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 msgid "" "Choose the directory on your system where you'd like to save the chat logs." msgstr "" @@ -622,14 +971,15 @@ msgstr "" "enregistrer les conversations." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" msgstr "Archiver les conversations dans ce rĆ©pertoire :" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." @@ -638,126 +988,103 @@ msgstr "" "organisation annuelle, mensuelle ou quotidienne." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "Organiser le dossier des conversations archivĆ©es par :" +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "AnnĆ©e" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 msgid "Month" msgstr "Mois" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "Jour" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" msgstr "Enregistrer toutes les conversations dans le rĆ©pertoire parent" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." -msgstr "Ceci est le style de police est la couleur utilisĆ©s pour vos messages." - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "Police de vos messages :" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" -"Permet d'avoir le dernier mot concernant la police de caractĆØre et la " -"couleur des messages de vos contacts, en utilisant celles que vous " -"choisissez." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "Contraindre les messages des contacts Ć  utiliser cette police :" - +#. i18n: file ./settings/chatstylepage.ui line 45 #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "" "Vous permet de modifier le thĆØme qu'utilise KMess pour afficher les messages " "lors des conversations." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +#, fuzzy +msgid "&Chat style:" msgstr "ThĆØme de la fĆ©nĆŖtre de discussion :" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "ParamĆØtres" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "Active l'affichage d'Ć©moticĆ“nes dans les conversations." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 -msgid "&Show graphics in chat messages" -msgstr "Afficher les &images dans les messages" +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 +#, fuzzy +msgid "&Show emoticons" +msgstr "Afficher les &EmoticĆ“nes" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "" "Active l'affichage de l'heure correspondant Ć  la recepetion de chaque " "message." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 -msgid "S&how time in chat messages" +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 +#, fuzzy +msgid "S&how messages time" msgstr "Afficher l'&heure Ć  cĆ“tĆ© des messages" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" -"Rend possible l'utilisation d'effet de police. Ecrire *gras*, /italique/ ou " -"_soulignĆ©_ fait que les mots encradrĆ©s apparaissent respectivement en gras, " -"italiques ou soulignĆ©s." - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "" -"&Utiliser les effets de police dans les messages, ex : *gras*, /italique/ et " -"_soulignĆ©_" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -770,156 +1097,308 @@ msgstr "" "thĆØme choisi pour les conversations." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "Re&grouper les suites de messages d'un mĆŖme contact" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 +#, fuzzy +msgid "Always" +msgstr "Absent" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "Votre liste de contacts contient trop de groupes" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "Nerd" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." +msgstr "Ceci est le style de police est la couleur utilisĆ©s pour vos messages." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "Police de vos messages :" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." msgstr "" -"Vous pouvez choisir quel logiciel de messagerie KMess doit lancer pour lire " -"vos e-mails." +"Permet d'avoir le dernier mot concernant la police de caractĆØre et la " +"couleur des messages de vos contacts, en utilisant celles que vous " +"choisissez." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "Client e-mail" +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "Contraindre les messages des contacts Ć  utiliser cette police :" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "Utiliser Hotmail" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "Utiliser une commande spĆ©cifique :" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "Notification d'e-mails" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." msgstr "" -"Si activĆ©, une popup apparait lorsqu'un nouvel e-mail est arrivĆ© dans votre " -"boite de rĆ©ception. Le nombre de messages non-lus est afichĆ© au dessus de la " -"liste de contact. Cette option n'est disponible que pour les comptes Hotmail." +"Rend possible l'utilisation d'effet de police. Ecrire *gras*, /italique/ ou " +"_soulignĆ©_ fait que les mots encradrĆ©s apparaissent respectivement en gras, " +"italiques ou soulignĆ©s." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 -msgid "Show email information" -msgstr "Afficher les infos relatives aux e-mails" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 -msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +#, fuzzy +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" msgstr "" -"Si activiĆ©, un popup apparait aussi lorsqu'un e-mail est reƧu dans d'autres " -"dossiers. Cette options n'est disponibles que pour les comptes Hotmail." +"&Utiliser les effets de police dans les messages, ex : *gras*, /italique/ et " +"_soulignĆ©_" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" msgstr "" -"Afficher une notification lorsqu'un e-mail est reƧu dans d'autres dossiers" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "En attente de la liste de contact..." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 msgid "&Emoticon Themes" msgstr "ThĆØmes d'&Ć©moticĆ“nes" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 msgid "Available emoticon styles:" msgstr "Styles d'Ć©moticĆ“nes disponibles :" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 msgid "&Custom Emoticons" msgstr "ƉmoticĆ“nes &personnalisĆ©es" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 msgid "Custom emoticons for this account:" msgstr "ƉmoticĆ“nes personnalisĆ©e de ce compte :" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -msgid "Click" -msgstr "Cliquez" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "" -"Cliquez ici pour ajouter une nouvelle Ć©moticĆ“ne personnalisĆ©e pour envoyer Ć  " -"vos contacts." - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "Ajouter" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 #, fuzzy msgid "Re&name" msgstr "Re&nommer le Groupe" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "Choisissez une Ć©moticĆ“ne et cliquez ici pour la supprimer." - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 msgid "Remo&ve" msgstr "Supprimer" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +#, fuzzy +msgid "Web Browser" +msgstr "Rose fanĆ©e" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +msgid "&Use the KDE default browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "dit :" +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "Client e-mail" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +msgid "&Use the KDE default email client" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +msgid "File Transfers" +msgstr "Transferts de fichiers" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "Archiver les conversations dans ce rĆ©pertoire :" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +#, fuzzy +msgid "and" +msgstr "Triste" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "Transferts de fichiers" #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -929,129 +1408,12 @@ msgstr "Je ne suis pas devant mon ordinateur" msgid "Your name" msgstr "Votre pseudo" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "vous@hotmail.com" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "En ligne" - -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "Absent" - -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "BientĆ“t de retour" - -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "OccupĆ©" - -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "Invisible" - -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "Inactif" - -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "DĆ©connectĆ©" - -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "Au tĆ©lĆ©phone" - -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "Parti manger" - -#: chat/chatmaster.cpp:1061 -msgid "%1 is sending a wink: %2" -msgstr "%1 vous envoie un clin d'œil : %2" - -#: chat/chatmessagestyle.cpp:302 -msgid "%1 says:" -msgstr "%1 dit :" - -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 -msgid "Add this emoticon: %1" -msgstr "Ajouter cette Ć©moticĆ“ne : %1" - -#: chat/chatview.cpp:529 -msgid "" -"Could not save chat log. Make sure you have permission to write in the " -"folder where logs are being saved." -msgstr "" -"Impossible d'archiver la conversation. VĆ©rifiez d'avoir les droits " -"d'Ć©criture dans le rĆ©pertoire où les archives sont enregistrĆ©es." - -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 -msgid "" -"The file '%1' already exists.\n" -"do you want to overwrite it?" -msgstr "Le fichier Ā« %1 Ā» existe dĆ©jĆ .
Voulez-vous l'Ć©craser ?" - -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Overwrite File" -msgstr "Ɖcraser le fichier" - -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Over&write" -msgstr "&Ecraser" - -#: chat/chatview.cpp:977 -msgid "Add this &Emoticon..." -msgstr "Afficher les &EmoticĆ“nes" - -#: chat/chatview.cpp:984 -msgid "Send &Email" -msgstr "&Envoyer un e-mail" - -#: chat/chatview.cpp:988 -msgid "Copy E&mail" -msgstr "Copier l'adresse e-mail" - -#: chat/chatview.cpp:995 -msgid "Visit &Link" -msgstr "Suivre le &lien" - -#: chat/chatview.cpp:999 -msgid "Copy &Address" -msgstr "Copier l'adresse" - -#: chat/chatview.cpp:1013 -msgid "&Copy text" -msgstr "&Copier le texte" - -#: chat/chatview.cpp:1014 -msgid "Select &All" -msgstr "Tout &sĆ©lectionner" - -#: chat/chatview.cpp:1015 -msgid "Save chat to &File" -msgstr "&Enregistrer la conversation" - -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "Conversation" - -#: chat/chatwindow.cpp:239 +#: chat/chat.cpp:124 msgid "" "You can't start this invitation because there are multiple contacts in this " "chat." @@ -1059,308 +1421,516 @@ msgstr "" "Vous ne pouvez pas lancer cette invitation car il y a plusieurs contacts " "dans cette conversation." -#: chat/chatwindow.cpp:276 -msgid "%1 has joined the chat." +#: chat/chat.cpp:158 +#, fuzzy +msgid "%1 has joined the chat." msgstr "%1 a rejoint la conversation." -#: chat/chatwindow.cpp:327 -msgid "The conversation went idle, %1 has left the chat." +#: chat/chat.cpp:211 +#, fuzzy +msgid "The conversation went idle, %1 has left the chat." msgstr "La conversation est devenue inactive, %1 a quittĆ© la conversation." -#: chat/chatwindow.cpp:331 -msgid "%1 has left the chat." +#: chat/chat.cpp:215 +#, fuzzy +msgid "%1 has left the chat." msgstr "%1 a quittĆ© la conversation." -#: chat/chatwindow.cpp:593 -msgid "%1 - Chat" -msgstr "%1 - Conversation" - -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" +#: chat/chat.cpp:364 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 and %2" msgstr "%1 et %1 - Conversation" -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" +#: chat/chat.cpp:371 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 et al." msgstr "%1 etc. - Conversation" -#: chat/chatwindow.cpp:757 -msgid "Contacts" -msgstr "Contacts" - -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 -msgid "Emoticons" -msgstr "EmoticĆ“nes" - -#: chat/chatwindow.cpp:819 -msgid "My emoticons" -msgstr "Mes Ć©moticĆ“nes" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" +#: chat/chat.cpp:630 +#, fuzzy +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" msgstr " (Ce message a Ć©tĆ© envoyĆ© automatiquement)" -#: chat/chatwindow.cpp:1502 +#: chat/chat.cpp:934 +#, fuzzy +msgid "You received a wink from %1." +msgstr "Vous avez reƧu un clin d'oeil de la part de %1" + +#: chat/chat.cpp:971 msgid "" "The wink could not be displayed. Make sure you have 'cabextract' installed." msgstr "" "Le clin d'oeil n'a pas pu ĆŖtre affichĆ©. VĆ©rifiez que \"cabextract\" soit " "bien installĆ©." -#: chat/chatwindow.cpp:1511 +#: chat/chat.cpp:980 msgid "The wink could not be displayed. The data could not be read." msgstr "" "Le clin d'oeil n'a pas pu ĆŖtre affichĆ©. Les donnĆ©es n'ont pas pu ĆŖtre lues." -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" +#: chat/chat.cpp:1080 +#, fuzzy +msgid "You have received a wink from %1" msgstr "Vous avez reƧu un clin d'oeil de la part de %1" -#: chat/chatwindow.cpp:1755 +#: chat/chat.cpp:1100 #, fuzzy -msgid "Show Side&bar" -msgstr "Bar latĆ©rale" - -#: chat/chatwindow.cpp:1756 -#, fuzzy -msgid "Show the contact sidebar" -msgstr "Afficher ou masquer la barre latĆ©rale" - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -#, fuzzy -msgid "Hide Side&bar" -msgstr "Bar latĆ©rale" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -#, fuzzy -msgid "Hide the contact sidebar" -msgstr "Afficher ou masquer la barre latĆ©rale" - -#: chat/chatwindow.cpp:1787 -msgid "The message '%1' could not be sent." -msgstr "Le message \"%1\" n'a pas pu ĆŖtre envoyĆ©." - -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" +msgid "You received a nudge from %1!" msgstr "Vous avez reƧu un wizz de la part de %1 !" -#: chat/chatwindow.cpp:1876 +#: chat/chat.cpp:1119 +#, fuzzy +msgid "The message '%1' could not be sent." +msgstr "Le message \"%1\" n'a pas pu ĆŖtre envoyĆ©." + +#: chat/chat.cpp:1183 msgid "You've sent a nudge to %1!" msgstr "Vous avez envoyĆ© un wizz Ć  %1 !" -#: chat/chatwindow.cpp:1883 +#: chat/chat.cpp:1190 msgid "You've sent a nudge!" msgstr "Vous avez envoyĆ© un wizz !" -#: chat/chatwindow.cpp:1972 -msgid "%1 is typing." -msgstr "%1 est en train d'Ć©crire." +#: chat/chatmaster.cpp:1219 +msgid "%1 is sending a wink: %2" +msgstr "%1 vous envoie un clin d'œil : %2" -#: chat/chatwindow.cpp:1981 -msgid "%1 and %2 are typing." -msgstr "%1 et %1 - sont en train d'Ć©crire." +#: chat/chatmessagestyle.cpp:298 +msgid "%1 says:" +msgstr "%1 dit :" -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." -msgstr "%1, %2 et %3 autres sont en train d'Ć©crire." +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 +msgid "Add this emoticon: %1" +msgstr "Ajouter cette Ć©moticĆ“ne : %1" -#: chat/chatwindowinterface.cpp:175 -msgid "&Chat" -msgstr "&Conversation" - -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 msgid "&Invite" msgstr "&Inviter" -#: chat/chatwindowinterface.cpp:179 +#: chat/chatview.cpp:695 +msgid "" +"Could not save chat log. Make sure you have permission to write in the " +"folder where logs are being saved." +msgstr "" +"Impossible d'archiver la conversation. VĆ©rifiez d'avoir les droits " +"d'Ć©criture dans le rĆ©pertoire où les archives sont enregistrĆ©es." + +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 +msgid "" +"The file '%1' already exists.\n" +"do you want to overwrite it?" +msgstr "Le fichier Ā« %1 Ā» existe dĆ©jĆ .
Voulez-vous l'Ć©craser ?" + +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Overwrite File" +msgstr "Ɖcraser le fichier" + +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Over&write" +msgstr "&Ecraser" + +#: chat/chatview.cpp:1275 +msgid "Add this &Emoticon..." +msgstr "Afficher les &EmoticĆ“nes" + +#: chat/chatview.cpp:1282 +msgid "Send &Email" +msgstr "&Envoyer un e-mail" + +#: chat/chatview.cpp:1286 +msgid "Copy E&mail" +msgstr "Copier l'adresse e-mail" + +#: chat/chatview.cpp:1293 +msgid "Visit &Link" +msgstr "Suivre le &lien" + +#: chat/chatview.cpp:1297 +msgid "Copy &Address" +msgstr "Copier l'adresse" + +#: chat/chatview.cpp:1312 +msgid "&Copy text" +msgstr "&Copier le texte" + +#: chat/chatview.cpp:1313 +msgid "Select &All" +msgstr "Tout &sĆ©lectionner" + +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 +msgid "Save chat to &File" +msgstr "&Enregistrer la conversation" + +#: chat/chatwindow.cpp:489 +msgid "&Chat" +msgstr "&Conversation" + +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "Envoyer un &Fichier" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "DĆ©marrer une &ConfĆ©rence" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 msgid "Send a &Nudge!" msgstr "Envoyer un &Wizz" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "Sauvegarder la conversation" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 #, fuzzy msgid "&Emoticons" msgstr "EmoticĆ“nes" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +#, fuzzy +msgid "Close &All Tabs" +msgstr "Fermer l'onglet" + +#: chat/chatwindow.cpp:504 #, fuzzy msgid "Meeting" msgstr "ParamĆØtres" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "DĆ©marrer ou ArrĆ©ter une &Conversation" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "Changer la &Police" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "Changer la &Couleur" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 #, fuzzy msgid "&Font" msgstr "&Connexion" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 #, fuzzy msgid "Font &Color" msgstr "Changer la &Couleur" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +msgid "Emoticons" +msgstr "EmoticĆ“nes" + +#: chat/chatwindow.cpp:658 +msgid "My emoticons" +msgstr "Mes Ć©moticĆ“nes" + +#: chat/chatwindow.cpp:738 #, fuzzy msgid "&Settings" msgstr "ParamĆØtres" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "Afficher les &EmoticĆ“nes" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +#, fuzzy +msgid "Hide Side&bar" +msgstr "Bar latĆ©rale" + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "Bar latĆ©rale" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +#, fuzzy +msgid "Hide the contact sidebar" +msgstr "Afficher ou masquer la barre latĆ©rale" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +#, fuzzy +msgid "Close all tabs" +msgstr "Fermer l'onglet" + +#: chat/chatwindow.cpp:856 +#, fuzzy +msgid "Close current tab" +msgstr "Fermer l'onglet" + +#: chat/chatwindow.cpp:1467 +#, fuzzy +msgid "Show Side&bar" +msgstr "Bar latƩrale" + +#: chat/chatwindow.cpp:1468 +#, fuzzy +msgid "Show the contact sidebar" +msgstr "Afficher ou masquer la barre latƩrale" + +#: chat/chatwindow.cpp:1565 +msgid "%1 is typing." +msgstr "%1 est en train d'Ʃcrire." + +#: chat/chatwindow.cpp:1575 +msgid "%1 and %2 are typing." +msgstr "%1 et %1 - sont en train d'Ʃcrire." + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "%1, %2 et %3 autres sont en train d'Ʃcrire." + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "Conversation" + +#: chat/chatwindow.cpp:1615 +#, fuzzy +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "%1 - Conversation" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "&Envoyer un e-mail" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 msgid "&View Profile" msgstr "&Voir son Profil" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "&Ajouter le Contact" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 msgid "A&llow Contact" msgstr "Autoriser &le Contact" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 msgid "&Delete Contact" msgstr "&Supprimer le contact" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "&Bloquer le Contact" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "&DƩbloquer le Contact" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 msgid "&Friendly Name" msgstr "&Pseudonyme" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "&Message Personnel" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 msgid "&Email Address" msgstr "&Adresse e-mail :" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "&Copier..." -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 msgid "Blocked" msgstr "BloquƩ" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 #, fuzzy msgid "The contact is %1" msgstr "Ce contact n'est pas en ligne" -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +#, fuzzy +msgid "Add to Chat" +msgstr "Ajouter un Contact" + +#: chat/emoticonsidebar.cpp:213 +#, fuzzy +msgid "Insert new" +msgstr "Insérer une émoticÓne" + +#: chat/emoticonsidebar.cpp:214 +msgid "Edit" +msgstr "" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +#, fuzzy +msgid "Remove" +msgstr "Supprimé" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 #, fuzzy msgid "Web Messenger" msgstr "Design web" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +#, fuzzy +msgid "Windows Live Messenger %1" +msgstr "Design web" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "En ligne" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "Déconnecté" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "Autorisé" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "Supprimé" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 +#, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr "%1 %2" + +#: contactlistviewdelegate.cpp:150 #, fuzzy msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "%1 %2" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" -msgstr "Ce compte n'a pas de boîte de réception Hotmail !" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "Absent" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "BientÓt de retour" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "Occupé" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "Invisible" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" +msgstr "Inactif" + +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "Au téléphone" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "Parti manger" + +#: dialogs/addcontactdialog.cpp:48 #, fuzzy msgid "Add a Contact" msgstr "Ajouter un Contact" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 #, fuzzy msgid "No group" msgstr "Supprimer le Groupe" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 msgid "Add New Emoticon" msgstr "Ajouter une nouvelle émoticÓne" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "EmoticÓnes" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "L'émoticÓne « %1 » existe déjà. Voulez-vous l'écraser ?" @@ -1368,58 +1938,62 @@ msgstr "L'émoticÓne « %1 » existe déjà. Voulez-vous l'écraser ?" msgid "Specify an Away message" msgstr "Rédiger un message d'Absence" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "Choisir un autre pseudo pour cette personne" +#: dialogs/contactaddeduserdialog.cpp:85 +#, fuzzy +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " +msgstr "" +"%1\n" +"vous a ajouté(e) dans sa liste de contact. Que voulez-vous faire ?" -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" -msgstr "Afficher une Bulle quand ce contact se connecte ou se déconnecte" +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "Connecté" -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "Image : " +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +msgid "Not seen yet" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "Son : " +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +#, fuzzy +msgid "No messages yet" +msgstr "Afficher l'&heure à cÓté des messages" -#: dialogs/contactpropertiesdialog.cpp:234 -msgid "Contact Properties for %1" -msgstr "Propriétés du contact %s" +#: dialogs/contactpropertiesdialog.cpp:381 +msgid "Last seen: %1" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " -msgstr "Adresse e-mail : " +#: dialogs/contactpropertiesdialog.cpp:382 +msgid "Last message: %1" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "Pseudo actuel : " +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "E-mail" -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" -msgstr "Fenêtre du réseau" +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "Client e-mail" -#: dialogs/networkwindow.cpp:57 +#: dialogs/networkwindow.cpp:79 #, fuzzy msgid "S&ave tab" msgstr "Sauvegarder l'onglet" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 #, fuzzy msgid "C&lear tab" msgstr "Effacer l'onglet" -#: dialogs/networkwindow.cpp:59 -#, fuzzy -msgid "Cl&ose tab" -msgstr "Fermer l'onglet" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 #, fuzzy msgid "" "No connections are present.\n" @@ -1427,7 +2001,7 @@ msgid "" msgstr "" "Pas de connexions disponibles. Impossible d'ouvrir la fenêtre du réseau" -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 #, fuzzy msgid "" "Could not save the Network Window log. Make sure you have permission to " @@ -1436,59 +2010,86 @@ msgstr "" "Impossible d'archiver la fenêtre du réseau. Vérifiez d'avoir les droits " "d'écriture dans le répertoire d'archivage." -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "Impossible de fermer l'onglet de connexion principal." -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +#, fuzzy +msgid "Cannot send commands to this kind of connection!" +msgstr "Impossible de fermer l'onglet de connexion principal." + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 #, fuzzy msgid "Completed" msgstr "Ordinateur" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "%1 Mo" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "%1 ko" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "%1 octets" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +msgid "%1 of %2 received." msgstr "" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +msgid "%1 of %2 sent." msgstr "" -#: dialogs/transferwindow.cpp:55 -msgid "File Transfers" -msgstr "Transferts de fichiers" +#: dialogs/transferentry.cpp:373 +msgid "infinite" +msgstr "" -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 #, fuzzy msgid "Cl&ean Up" msgstr "&Vider" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " "the theme folder '%1'." @@ -1496,345 +2097,360 @@ msgstr "" "Impossible de sauvegarder le thĆØme d'Ć©moticĆ“nes. VĆ©rifier que vous avez les " "droits d'Ć©criture sur le dossier de thĆØmes '%1'." -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 msgid "Smile" msgstr "Sourire" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "Clin d'œil" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "Tirrage de langue" -#: emoticontheme.cpp:797 +#: emoticontheme.cpp:812 msgid "Big smile" msgstr "Grand sourire" -#: emoticontheme.cpp:798 +#: emoticontheme.cpp:813 msgid "Sad" msgstr "Triste" -#: emoticontheme.cpp:799 +#: emoticontheme.cpp:814 msgid "Crying" msgstr "En pleur" -#: emoticontheme.cpp:800 +#: emoticontheme.cpp:815 msgid "Angry" msgstr "En colĆØre" -#: emoticontheme.cpp:801 +#: emoticontheme.cpp:816 msgid "Confused" msgstr "Perplexe" -#: emoticontheme.cpp:802 +#: emoticontheme.cpp:817 msgid "Embarrassed" msgstr "GĆ©nĆ©" -#: emoticontheme.cpp:803 +#: emoticontheme.cpp:818 msgid "Disappointed" msgstr "DƩƧu" -#: emoticontheme.cpp:804 +#: emoticontheme.cpp:819 msgid "Hot" msgstr "Lunette de soleil" -#: emoticontheme.cpp:805 +#: emoticontheme.cpp:820 msgid "Baring teeth" msgstr "Dents sorties" -#: emoticontheme.cpp:806 +#: emoticontheme.cpp:821 msgid "Nerd" msgstr "Nerd" -#: emoticontheme.cpp:807 +#: emoticontheme.cpp:822 msgid "Sick" msgstr "Malade" -#: emoticontheme.cpp:808 +#: emoticontheme.cpp:823 msgid "Surprised" msgstr "EtonnĆ©" -#: emoticontheme.cpp:809 +#: emoticontheme.cpp:824 msgid "Party" msgstr "FĆŖte" -#: emoticontheme.cpp:810 +#: emoticontheme.cpp:825 msgid "Sleepy" msgstr "FatiguĆ©" -#: emoticontheme.cpp:811 +#: emoticontheme.cpp:826 msgid "Thinking" msgstr "Songeur" -#: emoticontheme.cpp:812 +#: emoticontheme.cpp:827 msgid "Don't tell anyone" msgstr "Bouche cousue" -#: emoticontheme.cpp:813 +#: emoticontheme.cpp:828 msgid "Secret telling" msgstr "Chuchotement" -#: emoticontheme.cpp:814 +#: emoticontheme.cpp:829 msgid "Eye-rolling" msgstr "Mouvement occulaire" -#: emoticontheme.cpp:815 +#: emoticontheme.cpp:830 msgid "Sarcastic" msgstr "Sarcastique" -#: emoticontheme.cpp:816 +#: emoticontheme.cpp:831 msgid "I don't know" msgstr "HĆ©sitant" -#: emoticontheme.cpp:817 +#: emoticontheme.cpp:832 msgid "Be right back" msgstr "BientĆ“t de retour" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "Ange" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "Calin gauche" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "Homme" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "Cœur rouge" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "Rose rouge" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "Pouce en haut" -#: emoticontheme.cpp:824 +#: emoticontheme.cpp:839 msgid "Dog face" msgstr "TĆŖte de chien" -#: emoticontheme.cpp:825 +#: emoticontheme.cpp:840 msgid "Sun" msgstr "Soleil" -#: emoticontheme.cpp:826 +#: emoticontheme.cpp:841 msgid "Devil" msgstr "DĆ©mon" -#: emoticontheme.cpp:827 +#: emoticontheme.cpp:842 msgid "Right hug" msgstr "Calin droite" -#: emoticontheme.cpp:828 +#: emoticontheme.cpp:843 msgid "Girl" msgstr "Femme" -#: emoticontheme.cpp:829 +#: emoticontheme.cpp:844 msgid "Broken heart" msgstr "Cœur brisĆ©" -#: emoticontheme.cpp:830 +#: emoticontheme.cpp:845 msgid "Wilted rose" msgstr "Rose fanĆ©e" -#: emoticontheme.cpp:831 +#: emoticontheme.cpp:846 msgid "Thumbs down" msgstr "Pouce en bas" -#: emoticontheme.cpp:832 +#: emoticontheme.cpp:847 msgid "Cat face" msgstr "TĆŖte de chat" -#: emoticontheme.cpp:833 +#: emoticontheme.cpp:848 msgid "Sleeping half-moon" msgstr "Demi-lune assoupie" -#: emoticontheme.cpp:834 +#: emoticontheme.cpp:849 msgid "Red lips" msgstr "LĆØvres rouges" -#: emoticontheme.cpp:835 +#: emoticontheme.cpp:850 msgid "Clapping" msgstr "Applauddisement" -#: emoticontheme.cpp:836 +#: emoticontheme.cpp:851 msgid "Crossed fingers" msgstr "Doigts croisĆ©s" -#: emoticontheme.cpp:837 +#: emoticontheme.cpp:852 msgid "Auto" msgstr "Voiture" -#: emoticontheme.cpp:838 +#: emoticontheme.cpp:853 msgid "Airplane" msgstr "Avion" -#: emoticontheme.cpp:839 +#: emoticontheme.cpp:854 msgid "Turtle" msgstr "Tortue" -#: emoticontheme.cpp:840 +#: emoticontheme.cpp:855 msgid "Snail" msgstr "Escargot" -#: emoticontheme.cpp:841 +#: emoticontheme.cpp:856 msgid "Black sheep" msgstr "Mouton noir" -#: emoticontheme.cpp:842 +#: emoticontheme.cpp:857 msgid "Goat" msgstr "ChĆØvre" -#: emoticontheme.cpp:843 +#: emoticontheme.cpp:858 msgid "Vampire bat" msgstr "Chauve sourie" -#: emoticontheme.cpp:844 +#: emoticontheme.cpp:859 msgid "Pizza" msgstr "Pizza" -#: emoticontheme.cpp:845 +#: emoticontheme.cpp:860 msgid "Beer mug" msgstr "Choppe de biĆØre" -#: emoticontheme.cpp:846 +#: emoticontheme.cpp:861 msgid "Martini glass" msgstr "Verre de Martini" -#: emoticontheme.cpp:847 +#: emoticontheme.cpp:862 msgid "Coffee cup" msgstr "Tasse de cafĆ©" -#: emoticontheme.cpp:848 +#: emoticontheme.cpp:863 msgid "Birthday cake" msgstr "Gateau d'anniversaire" -#: emoticontheme.cpp:849 +#: emoticontheme.cpp:864 msgid "Plate" msgstr "Couverts" -#: emoticontheme.cpp:850 +#: emoticontheme.cpp:865 msgid "Bowl" msgstr "Bol" -#: emoticontheme.cpp:851 +#: emoticontheme.cpp:866 msgid "Star" msgstr "Etoille" -#: emoticontheme.cpp:852 +#: emoticontheme.cpp:867 msgid "Rainbow" msgstr "Arc-en-ciel" -#: emoticontheme.cpp:853 +#: emoticontheme.cpp:868 msgid "Stormy cloud" msgstr "Mauvais temps" -#: emoticontheme.cpp:854 +#: emoticontheme.cpp:869 msgid "Lightning" msgstr "Eclair" -#: emoticontheme.cpp:855 +#: emoticontheme.cpp:870 msgid "Umbrella" msgstr "Parapluie" -#: emoticontheme.cpp:856 +#: emoticontheme.cpp:871 msgid "Island with a palm tree" msgstr "Ǝle avec palmier" -#: emoticontheme.cpp:857 +#: emoticontheme.cpp:872 msgid "Telephone receiver" msgstr "Combinet tĆ©lĆ©phonique" -#: emoticontheme.cpp:858 +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "TĆ©lĆ©phone portable" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "E-mail" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 msgid "Clock" msgstr "Horloge" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 msgid "Camera" msgstr "Appareil photo" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "Bobine de film" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "Note" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "Menottes" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 msgid "Money" msgstr "Argent" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "Ampoulle" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "Cigarrette" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "Ballon de foot" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "Cadeau emballĆ©" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "X-Box" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "Ordinateur" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 msgid "KMess Icon" msgstr "Icone KMess" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "Le serveur est indisponible" + +#: initialview.cpp:377 +msgid "Connect" +msgstr "Connexion" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "&DĆ©connexion" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "" -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "" -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "Nouveau &Groupe" + +#: kmess.cpp:226 msgid "Add a group" msgstr "Ajouter un Groupe" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "Entrer le nouveau nom pour ce groupe :" -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "L'adresse de contacte que vous avez saisie est invalide : %1" - -#: kmess.cpp:638 +#: kmess.cpp:569 msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" @@ -1842,63 +2458,90 @@ msgstr "" "Etes-vous sĆ»r(e) de vouloir supprimer %1 de votre liste de " "contact ?" -#: kmess.cpp:640 +#: kmess.cpp:571 msgid "Remove contact" msgstr "Supprimer le Contact" -#: kmess.cpp:641 kmess.cpp:684 -#, fuzzy -msgid "Remove" -msgstr "SupprimĆ©" - -#: kmess.cpp:642 +#: kmess.cpp:573 msgid "Remove and block" msgstr "Supprimer et bloquer" -#: kmess.cpp:681 +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "" "Etes-vous sĆ»r(e) de vouloir supprimer le groupe %1 de votre liste " "de contact ?" -#: kmess.cpp:683 -msgid "Remove group" -msgstr "Supprimer le Groupe" +#: kmess.cpp:631 +#, fuzzy +msgctxt "dialog button" +msgid "Remove" +msgstr "SupprimĆ©" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "C'est un groupe spĆ©cial qui ne peut ĆŖtre changĆ©." -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 msgid "Rename group" msgstr "Renommer le Groupe" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "ConnectĆ©" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "L'authentification a ƩchouƩe" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "DƩconnectƩ" -#: kmess.cpp:1441 +#: kmess.cpp:1408 +#, fuzzy msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" "

KMess ne pourra pas jouer de son ou de notification.

Le fichier " -"KMess « eventsrc » ne peut être trouvé dans aucun des répertoires suivants : " -"%1

Veuillez vérifier votre installation et copier le fichier manquant " +"KMess « eventsrc » ne peut être trouvé dans aucun des répertoires suivants : %" +"1

Veuillez vérifier votre installation et copier le fichier manquant " "dans un des répertoires listés." -#: kmess.cpp:1445 +#: kmess.cpp:1412 msgid "Error with notifications" msgstr "Erreur avec notifications" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "KMess" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "Ac&tions" @@ -1920,214 +2563,245 @@ msgstr "Rech&ercher un Contact" msgid "Search by &Interest" msgstr "Rechercher par &Intérêts" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "Rech&ercher un Contact" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "Nouve&au Compte" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "&Paramètres du Compte" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "Con&nexion" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "&Déconnexion" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "Voir mon &Profil" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "&Mon Statut" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "Absent avec auto-réponse" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "Afficher les Contacts &Autorisés" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 msgid "Show &Offline Contacts" msgstr "Afficher les Contacts &Déconnectés" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "Afficher les Contacts Supp&rimés" -#: kmessinterface.cpp:303 +#: kmessinterface.cpp:318 #, fuzzy -msgid "Show &Display Pictures" +msgid "Show &Empty Groups" +msgstr "Afficher les &EmoticÓnes" + +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" msgstr "Avatar" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "Sourire" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "Cla&sser les Contacts par" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "Groupe" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "Connecté/Déconnecté" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "Afficher la fenêtre de &Transfert" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "Afficher la fenêtre du &Réseau" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "En train d'écouter %1" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +msgid "[%1] %2 goes online" +msgstr "" + +#: kmessview.cpp:363 +msgid "[%1] %2 goes offline" +msgstr "" + +#: kmessview.cpp:559 msgid "Cha&t" msgstr "Conversa&tion" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "&Propriétés" -#: kmessview.cpp:492 +#: kmessview.cpp:569 msgid "&Remove from group" msgstr "Supp&rimer du groupe" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +#, fuzzy +msgid "&Listening Music" +msgstr "En train d'écouter %1" + +#: kmessview.cpp:601 msgid "&Copy to Group" msgstr "&Copier dans le groupe" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "Déplacer dans le &Groupe" -#: kmessview.cpp:549 +#: kmessview.cpp:646 msgid "Move Group &Down" msgstr "Placer le Groupe en &Bas" -#: kmessview.cpp:550 +#: kmessview.cpp:647 msgid "Move Group &Up" msgstr "Placer le Groupe en &Haut" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "Suppri&mer le Groupe" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "Re&nommer le Groupe" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 #, fuzzy msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "E-mail" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "" -#: kmessview.cpp:918 +#: kmessview.cpp:1075 +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "" + +#: kmessview.cpp:1076 +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "" + +#: kmessview.cpp:1085 #, fuzzy msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "
%1 (%2)" -#: kmessview.cpp:921 +#: kmessview.cpp:1090 #, fuzzy -msgctxt "Contacts count in group tooltip" +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "Contacts" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +#, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "Ce contact n'est pas en ligne" + +#: kmessview.cpp:1504 #, fuzzy msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "RĆ©digez ici votre message perso " -#: kmessview.cpp:1543 -msgid "You have 1 new e-mail in your inbox." -msgstr "Vous avez 1 nouveau message dans votre boĆ®te de rĆ©ception." +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" -#: kmessview.cpp:1547 -msgid "You have %1 new emails in your inbox." -msgstr "Vous avez %1 nouveaux messages dans votre boĆ®te de rĆ©ception." - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "KMess" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 #, fuzzy msgid "Project support" msgstr "support du champ P4-Context" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 #, fuzzy msgid "Current developer" msgstr "DĆ©veloppeur de GnomeMeeting" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 msgid "" "German translation, testing, documentation, web master, project management, " "etc..." @@ -2135,381 +2809,230 @@ msgstr "" "Traduction allemande, tests, documentation, webmaster, gestion du projet, " "etc." -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "Design web" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "Traduction italienne et les Emoticons originaux/jaune/bleu/violet" -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "Les Emoticons \"Cartoon\"" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "ThĆØme sonore par defaut" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "" "Traduction arabe, Correction de l'internationalisation des fichiers " "sauvegardĆ©s." -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 msgid "More Arabic translation" msgstr "Traduction arabe supplĆ©mentaire" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "Traduction portugaise/brĆ©silienne" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 msgid "Catalan translation" msgstr "Traduction catalane" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "" "Traduction chinoise simplifiĆ©e, correction de bug dans l'envoi de fichiers " "et connexion au proxy" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 msgid "More Simplified Chinese translation" msgstr "Traduction chinois simplifiĆ© supplĆ©mentaire" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 msgid "Traditional Chinese translation" msgstr "Traduction chinois traditionnel" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 msgid "Danish translation" msgstr "Traduction danoise" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 msgid "More Danish translation" msgstr "Traduction danoise supplĆ©mentaire" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "Traduction nĆ©erlandaise" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 msgid "More Dutch translation" msgstr "Traduction nĆ©erlandaise supplĆ©mentaire" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 msgid "Estonian translation" msgstr "Traduction estonienne" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 msgid "Finnish translation" msgstr "Traduction finnoise" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 msgid "More Finnish translation" msgstr "Traduction finnoise supplĆ©mentaire" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "Traduction franƧaise" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 msgid "More French translation, MSN6 emoticon definitions" msgstr "Traduction franƧaise supplĆ©mentaire, dĆ©finitions des emoticons de MSN6" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 msgid "More French translation" msgstr "Traduction franƧaise supplĆ©mentaire" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 msgid "Hungarian translation" msgstr "Traduction hongroise" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 msgid "More Italian translation" msgstr "Traduction italienne supplĆ©mentaire" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "Traduction corĆ©enne" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 msgid "Norsk BokmĆ„l translation" msgstr "Traduction norvĆ©gien oriental (Norsk BokmĆ„l)" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 msgid "Slovenian translation" msgstr "Traduction slovĆØne" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "Traduction espagnole" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 msgid "More Spanish translation" msgstr "Traduction espagnole supplĆ©mentaire" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 msgid "Swedish translation" msgstr "Traduction suĆ©doise" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 msgid "Thai translation" msgstr "Traduction thaĆÆ" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "Traduction turque" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "Traduction turque supplĆ©mentaire" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -#, fuzzy -msgid "Guido Solinas" -msgstr "Se &connectent" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "Transferts de fichiers" + +#: main.cpp:134 msgid "P4-Context field support" msgstr "support du champ P4-Context" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "Correction Xinerama" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "Code Original pour le transfert de fichier" -#: main.cpp:120 -msgid "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" msgstr "" -#: main.cpp:120 +#: main.cpp:138 +#, fuzzy +msgid "KWallet support" +msgstr "support du champ P4-Context" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "Corrections d'internationalisation diverses." + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "Corrections d'internationalisation diverses." -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "DĆ©veloppeur de GnomeMeeting" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "Le gars avec un sac sur la tĆŖte" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "Inspirations et code allant avec" -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 +#: main.cpp:150 msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "" "Ancien code des popups de notification, dĆ©but du code pour le P2P, et " "gestion des problĆØme avec MSN" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "Code du compteur d'inactivitĆ©" -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 +#: main.cpp:152 msgid "Close-to-tray icon screenshot code" msgstr "" -#: main.cpp:131 +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 msgid "Your name here?" msgstr "Votre nom ici ?" -#: main.cpp:131 +#: main.cpp:156 #, fuzzy msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" "Vous ĆŖtes les bienvenus Ć  envoyer vos corrections de bugs et vos patches sur " @@ -2517,205 +3040,249 @@ msgstr "" "S'il vous semble que votre nom manque Ć  cette liste, s'il vous plaĆ®t " "contactez-nous Ć©galement !" -#: main.cpp:134 +#: main.cpp:159 #, fuzzy msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Votre pseudo" -#: main.cpp:135 +#: main.cpp:160 #, fuzzy msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "Votre adresse e-mail :" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "Se connecter automatiquement avec ce compte" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 msgid "The contact cancelled the session." msgstr "Le contact a annulĆ© la session." -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 msgid "The contact rejected the invitation." msgstr "Le contact a rejetĆ© l'invitation." -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 msgid "You have cancelled the session." msgstr "Vous avez annulĆ© la session.." -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "Vous avez rejetĆ© l'invitation." -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +#, fuzzy +msgid "Do you want to accept or cancel?" msgstr "Voulez-vous accepter ou refuser ?" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +#, fuzzy +msgid "Click to cancel." msgstr "Cliquez pour annuler." -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 msgid "Do you want to accept the file: %1 (%2)" msgstr "Voullez-vous accepter le fichier : %1 (%2)" -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 msgid "The transfer of %1 failed. Couldn't open file." msgstr "Le transfert de %1 a Ć©chouĆ©. Impossible d'ouvrir le fichier." -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "Transfert acceptĆ©." + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 msgid "Connecting to %1, port %2" msgstr "Connexion Ć  %1, port %2" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 msgid "The transfer was cancelled" msgstr "Le transfert a Ć©tĆ© annulĆ©" -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 msgid "Connection established" msgstr "Connexion Ć©tablie" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 msgid "Successfully transferred file: %1" msgstr "Fichier transfĆ©rĆ© avec succĆØs : %1" -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 msgid "The transfer of %1 failed. The file does not exist." msgstr "Le transfert de %1 a Ć©chouĆ©. Le fichier n'existe pas." -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 msgid "The transfer of %1 failed. The file could not be read." msgstr "Le transfert de %1 a Ć©chouĆ©. Le fichier n'a pas pu ĆŖtre lu." -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 msgid "Sending file %1" msgstr "Envoi du fichier %1" -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "Transfert acceptĆ©." - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "" "L'invitation au transfert du fichier a Ć©tĆ© annulĆ©e. Des donnĆ©es invalides " "ont Ć©tĆ© reƧues." -#: network/applications/filetransferp2p.cpp:345 -msgid "The transfer of %1 failed. Couldn't open file" -msgstr "Le transfert de % a Ć©chouĆ©. Impossible d'ouvrir le fichier" +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." +msgstr "" -#: network/applications/filetransferp2p.cpp:524 -msgid "The contact cancelled the transfer." +#: network/applications/filetransferp2p.cpp:348 +#, fuzzy +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "Le fichier Ā« %1 Ā» existe dĆ©jĆ .
Voulez-vous l'écraser ?" + +#: network/applications/filetransferp2p.cpp:378 +#, fuzzy +msgid "The transfer of file "%1" failed. Couldn't save the file." +msgstr "Le transfert de %1 a échoué. Impossible d'ouvrir le fichier." + +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 +#, fuzzy +msgid "The contact has cancelled the transfer of file "%1"." msgstr "Le contact a annulé le transfert." -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "Vous avez annulé la session.." + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "" -#: network/applications/filetransferp2p.cpp:768 -msgid "The transfer of %1 failed. The file does not exist." +#: network/applications/filetransferp2p.cpp:676 +#, fuzzy +msgid "Successfully sent file "%1"." +msgstr "Fichier transféré avec succès : %1" + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "Fichier transféré avec succès : %1" + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "Le transfert de %1 a échoué. Le fichier n'existe pas." -#: network/applications/filetransferp2p.cpp:773 -msgid "The transfer of %1 failed. The file could not be read." +#: network/applications/filetransferp2p.cpp:818 +#, fuzzy +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "Le transfert de %1 a échoué. Le fichier n'a pas pu être lu." -#: network/applications/filetransferp2p.cpp:809 +#: network/applications/filetransferp2p.cpp:855 #, fuzzy -msgid "Sending file %1 (%2)" +msgid "Sending file "%1" (%2)." msgstr "Envoi du fichier %1" -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "Le contact a annulé le transfert." + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "" "Vous êtes invité à démarrer une conférence (en utilisant GnomeMeeting)." -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 msgid "Starting GnomeMeeting. Connecting to %1." msgstr "Démarrage de GnomeMeeting. Connexion à %1." -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "Invitation du contact pour à une conférence." -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "" "L'invitation a été rejetée. La fonctionnalité n'est pas supportée par " "l'autre client." -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 msgid "The invitation was aborted. An internal error occured." msgstr "L'invitation a été annulée. Un erreur interne est survenue." -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "" "L'invitation a été annulée. Trop de temps s'est écoulé sans que " "l'utilisateur ne se prononce." -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "" "L'invitation·a·été·annulée. Trop·de·temps·s'est·écoulé·en attente de donnée." -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "" "L'invitation a été annulé. Le serveur de commutation a mis fin à la " "conversation." -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 msgid "The invitation was aborted." msgstr "L'invitation a été annulée." -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "Vous êtes invité(e) à partager le bureau de cette personne." -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 msgid "Starting KRDC. Connecting to %1." msgstr "Démarrage de KRDC. Connexion à %1." -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." -msgstr "" -"Le contact essaye d'utiliser une fonctionnalité MSN6 que KMess ne supporte " -"par encore." +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +msgid "The contact rejected the invitation. An internal error occured." +msgstr "Le contact a rejeté l'invitation. Une erreur interne s'est produite." -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +msgid "The transfer failed." +msgstr "Le transfert a échoué." + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." @@ -2723,73 +3290,67 @@ msgstr "" "L'invitation a été annulée. Le contact a envoyé des données invalides, ou " "bien KMess ne les comprend pas." -#: network/applications/p2papplication.cpp:1503 -msgid "The transfer failed. Data preparation failed." -msgstr "Le transfert à échoué. La préparation des données a échouée." - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -msgid "The contact rejected the invitation. An internal error occured." -msgstr "Le contact a rejeté l'invitation. Une erreur interne s'est produite." - -#: network/applications/p2papplication.cpp:1626 -msgid "The transfer failed." -msgstr "Le transfert a échoué." - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "Le transfert a échoué. Le contact a envoyé des données invalides, ou bien " "KMess ne les gère pas." -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "" +"Le transfert à échoué. Trop de temps s'est écoulé sans que l'utilisateur " +"n'accepte." + +#: network/applications/p2papplicationbase.cpp:1015 +msgid "The transfer failed. An internal error occured." +msgstr "Le transfert a échoué. Une erreur interne est survenue." + +#: network/applications/p2papplicationbase.cpp:1176 +msgid "The transfer failed. Couldn't open data source." +msgstr "Le transfert a échoué. Impossible d'ouvrir la source de données." + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "" +"Le contact essaye d'utiliser une fonctionnalité MSN6 que KMess ne supporte " +"par encore." + +#: network/applications/p2papplication.cpp:1071 +msgid "The transfer failed. Data preparation failed." +msgstr "Le transfert à échoué. La préparation des données a échouée." + +#: network/applications/p2papplication.cpp:1178 msgid "The invitation was cancelled. Message was not directed to us." msgstr "L'invitation a été annulé. Le message ne nous était pas destiné." -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "Le transfert a échoué. Le contact a envoyé des données invalides, ou KMess " "ne les gère pas." -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "En attente d'une connexion à %1, port %2." -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "" "Passage contraint en mode indirect de transfert de fichier (cela peut " "prendre du temps)." -#: network/applications/p2papplication.cpp:3297 -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "" -"Le transfert à échoué. Trop de temps s'est écoulé sans que l'utilisateur " -"n'accepte." - -#: network/applications/p2papplication.cpp:3316 -msgid "The transfer failed. An internal error occured." -msgstr "Le transfert a échoué. Une erreur interne est survenue." - -#: network/applications/p2papplication.cpp:3693 -msgid "The transfer failed. Couldn't open data source." -msgstr "Le transfert a échoué. Impossible d'ouvrir la source de données." - -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:3113 #, fuzzy msgid "Waiting for connection" msgstr "En attente de la liste de contact..." -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " "accept." @@ -2797,7 +3358,7 @@ msgstr "" "L'invitation a été annulée. Trop·de·temps·s'est " "écoulé·sans·que·l'utilisateur·n'accepte." -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." @@ -2805,17 +3366,17 @@ msgstr "" "L'invitation a été annulée. Trop·de·temps·s'est écoulé·en attendant que la " "connexion s'établisse." -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "" "L'invitation a été annulée. Trop·de·temps·s'est écoulé·en attente de donnée." -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 msgid "You are invited to start a voice conversation." msgstr "Vous êtes invité(e) à démarrer une conversation vocale." -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 msgid "" "You are invited to start a voice conversation but support for this was not " "installed" @@ -2823,28 +3384,28 @@ msgstr "" "Vous êtes invité(e) à démarrer une conférence, mais le support de cette " "fonctionnalité n'est pas installé." -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 msgid "You have cancelled the voice conversation." msgstr "Vous avez annulé la conversation vocale." -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "" "L'invitation a été annulée. Le périphérique audio n'a pas pu être ouvert." -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 msgid "Start voice conversation. Connecting to %1." msgstr "Démarrage de la conversation vocale. Connexion à %1." -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 msgid "Start voice conversation. Listening on %1." msgstr "Démarrage·de·la·conversation·vocale. A l'écoute sur %1." -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 msgid "Inviting the contact to a voice conversation." msgstr "Invitation du contact à une conversation vocale." -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 msgid "The contact is inviting you for '%1', but this is not implemented yet." msgstr "" @@ -2889,644 +3450,783 @@ msgstr "Impossible d'établir la connexion : %1" msgid "Receiving file %1" msgstr "Réception du fichier %1" -#: network/msnconnection.cpp:477 -msgid "1 ping lost" -msgstr "1 perte de ping" +#: network/msnconnection.cpp:589 +#, fuzzy +msgid "KMess could not access the remote webservice.
Details: %1" +msgstr "" +"Kmess n'a pas pu accéder au service web à distance.\n" +"\n" +"Détails : %1" -#: network/msnconnection.cpp:481 -msgid "%1 pings lost" -msgstr "% pertes de pings" - -#: network/msnconnection.cpp:496 -msgid "The connection to the server was lost." -msgstr "La connexion avec le serveur a été perdue." - -#: network/msnconnection.cpp:704 +#: network/msnnotificationconnection.cpp:1317 #, fuzzy msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." -msgstr "" -"KMess n'est pas arrivé à se connecter au service de messagerie MSN.\n" -"Veuillez vérifier d'être connecté à internet.\n" -"Erreur système : %1 (code %2)." - -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "Le serveur distant a interrompu la connexion." - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" -"KMess n'a pas été en mesure de se connecter aux serveurs de messagerie MSN. " -"Ces derniers peuvent être en phase maintenance temporaire, ou bien il s'agit " -"d'un problème concernant votre connexion à internet." - -#: network/msnnotificationconnection.cpp:724 -msgid "Show MSN Messenger Service status?" -msgstr "Voir l'état du service de messagerie MSN ?" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "Erreur du serveur" - -#: network/msnnotificationconnection.cpp:1344 -#, fuzzy -msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" msgstr "" "Vous avez Ć©tĆ© dĆ©connectĆ© car vous vous\n" "ĆŖtes connectĆ©(e) avec un autre client MSN ou\n" "depuis un autre endroit" -#: network/msnnotificationconnection.cpp:1558 +#: network/msnnotificationconnection.cpp:1532 msgid "Got synchronization" msgstr "Synchronisation" -#: network/msnnotificationconnection.cpp:1699 -msgid "Authenticating" +#: network/msnnotificationconnection.cpp:1670 +#, fuzzy +msgid "Authenticating..." msgstr "Authentification" -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "Confimation d'utilisateur reƧue" - -#: network/msnnotificationconnection.cpp:1752 +#: network/msnnotificationconnection.cpp:1719 msgid "Waiting for contact list..." msgstr "En attente de la liste de contact..." -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "Transfert au serveur de notification" +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." +msgstr "" -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" +#: network/msnnotificationconnection.cpp:1894 +#, fuzzy +msgid "Authentication failed, please verify your account name and password." msgstr "" "L'authentification a Ć©chouĆ©e, merci de vĆ©rifier vos identifiants (nom " "d'utilisateur et mot de passe)" -#: network/msnnotificationconnection.cpp:2042 +#: network/msnnotificationconnection.cpp:1993 msgid "Connecting..." msgstr "Connexion en cours..." -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" +#: network/msnnotificationconnection.cpp:2167 +#, fuzzy +msgid "Unknown command received from the server: %1" msgstr "KMess a reƧu une commande inconnue de la part du serveur: %1" -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 +#: network/msnnotificationconnection.cpp:2192 msgid "Invalid command syntax" msgstr "" -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -msgid "There was an internal error in KMess: %1" -msgstr "Il y a eu une erreur interne dans KMess : %1" - -#: network/msnnotificationconnection.cpp:2243 +#: network/msnnotificationconnection.cpp:2196 msgid "Invalid command parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2246 +#: network/msnnotificationconnection.cpp:2199 msgid "The email you have tried to add is not a MSN Messenger account" msgstr "" "L'e-mail que vous avez essayĆ© d'ajoutĆ© n'est pas un compte MSN Messenger" -#: network/msnnotificationconnection.cpp:2249 +#: network/msnnotificationconnection.cpp:2204 msgid "Domain name missing" msgstr "" -#: network/msnnotificationconnection.cpp:2252 +#: network/msnnotificationconnection.cpp:2208 msgid "Already logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2255 +#: network/msnnotificationconnection.cpp:2211 msgid "The account name given is invalid" msgstr "Le nom de compte entrĆ© est invalide" -#: network/msnnotificationconnection.cpp:2258 +#: network/msnnotificationconnection.cpp:2215 msgid "" "That account name is invalid, or your passport has not been confirmed yet" msgstr "" "Le nom de compte entrĆ© est invalide, ou bien votre adresse e-mail Passport " "n'a pas encore Ć©tĆ© confirmĆ©e" -#: network/msnnotificationconnection.cpp:2261 +#: network/msnnotificationconnection.cpp:2218 msgid "Your contact list is full" msgstr "Votre liste de contacts est pleine" -#: network/msnnotificationconnection.cpp:2264 +#: network/msnnotificationconnection.cpp:2223 msgid "Invalid SBP parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2267 +#: network/msnnotificationconnection.cpp:2226 msgid "This contact is already on your list" msgstr "Ce contact est dĆ©jĆ  prĆ©sent dans votre liste" -#: network/msnnotificationconnection.cpp:2270 +#: network/msnnotificationconnection.cpp:2230 msgid "This contact is not on your list" msgstr "Ce contact n'est pas dans votre liste" -#: network/msnnotificationconnection.cpp:2273 +#: network/msnnotificationconnection.cpp:2234 msgid "This contact is not online" msgstr "Ce contact n'est pas en ligne" -#: network/msnnotificationconnection.cpp:2276 +#: network/msnnotificationconnection.cpp:2239 msgid "Already in this mode" msgstr "" -#: network/msnnotificationconnection.cpp:2279 +#: network/msnnotificationconnection.cpp:2243 #, fuzzy msgid "Contact is in the opposite list" msgstr "Ce contact n'est pas dans votre liste" -#: network/msnnotificationconnection.cpp:2282 -msgid "Your contact list has too many groups" -msgstr "Votre liste de contacts contient trop de groupes" - -#: network/msnnotificationconnection.cpp:2285 -msgid "This group can't be changed" -msgstr "Ce groupe ne peut pas ĆŖtre modifiĆ©" - -#: network/msnnotificationconnection.cpp:2288 -msgid "This group is not empty" -msgstr "Ce groupe n'est pas vide" - -#: network/msnnotificationconnection.cpp:2291 +#: network/msnnotificationconnection.cpp:2247 +#, fuzzy msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." msgstr "" "Ce nom de groupe est dĆ©jĆ  utilisĆ© dans votre liste de contact MSN ou Hotmail" -#: network/msnnotificationconnection.cpp:2294 +#: network/msnnotificationconnection.cpp:2251 +msgid "Your contact list has too many groups" +msgstr "Votre liste de contacts contient trop de groupes" + +#: network/msnnotificationconnection.cpp:2255 +msgid "This group can't be changed" +msgstr "Ce groupe ne peut pas ĆŖtre modifiĆ©" + +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "Votre liste de contacts contient trop de groupes" + +#: network/msnnotificationconnection.cpp:2264 +msgid "This group is not empty" +msgstr "Ce groupe n'est pas vide" + +#: network/msnnotificationconnection.cpp:2268 msgid "The group name is too long" msgstr "Ce nom de groupe est trop long" -#: network/msnnotificationconnection.cpp:2297 +#: network/msnnotificationconnection.cpp:2273 msgid "Attempted to change group \"0\"" msgstr "" -#: network/msnnotificationconnection.cpp:2300 +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +msgid "There was an internal error in KMess: %1" +msgstr "Il y a eu une erreur interne dans KMess : %1" + +#: network/msnnotificationconnection.cpp:2277 #, fuzzy msgid "Invalid Group" msgstr "Re&nommer le Groupe" -#: network/msnnotificationconnection.cpp:2303 +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 msgid "Switchboard server failed" msgstr "Echec de commutation" -#: network/msnnotificationconnection.cpp:2306 +#: network/msnnotificationconnection.cpp:2287 msgid "Transfer to switchboard server failed" msgstr "Le transfert vers le serveur de commutation a Ć©chouĆ©" -#: network/msnnotificationconnection.cpp:2309 +#: network/msnnotificationconnection.cpp:2291 msgid "Direct connection (MSNSLP) error, connection failed" msgstr "Erreur de connexion directe (MSNSLP), la connexion a Ć©chouĆ©e" -#: network/msnnotificationconnection.cpp:2312 +#: network/msnnotificationconnection.cpp:2295 msgid "Required field missing" msgstr "" -#: network/msnnotificationconnection.cpp:2315 +#: network/msnnotificationconnection.cpp:2299 msgid "Not logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" -msgstr "Erreur en accĆ©dant Ć  la liste de contact, rĆ©essayez plus tard" +#: network/msnnotificationconnection.cpp:2302 +#, fuzzy +msgid "No permissions given for this account" +msgstr "ƉmoticĆ“nes personnalisĆ©e de ce compte :" -#: network/msnnotificationconnection.cpp:2322 +#: network/msnnotificationconnection.cpp:2307 msgid "Command is disabled" msgstr "" -#: network/msnnotificationconnection.cpp:2325 +#: network/msnnotificationconnection.cpp:2310 msgid "Your account is banned." msgstr "Votre compte est banni." -#: network/msnnotificationconnection.cpp:2329 +#: network/msnnotificationconnection.cpp:2314 #, fuzzy msgid "Challenge response failed" msgstr "Le transfert a Ć©chouĆ©." -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" +#: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" +msgstr "" + +#: network/msnnotificationconnection.cpp:2323 +#, fuzzy +msgid "You are opening chat sessions too fast" msgstr "Vous ouvrez des sessions trop rapidement" -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" msgstr "Vous avez trop de sessions ouvertes" -#: network/msnnotificationconnection.cpp:2341 +#: network/msnnotificationconnection.cpp:2334 msgid "Unexpected command sequence" msgstr "" -#: network/msnnotificationconnection.cpp:2344 +#: network/msnnotificationconnection.cpp:2338 msgid "Bad friend name" msgstr "Nom antipathique" -#: network/msnnotificationconnection.cpp:2348 +#: network/msnnotificationconnection.cpp:2344 msgid "Bad CVR data" msgstr "" -#: network/msnnotificationconnection.cpp:2353 +#: network/msnnotificationconnection.cpp:2350 msgid "The server reports KMess is flooding it with too many data" msgstr "" "Le serveur indique que KMess le polue avec un nombre trop important de " "donnĆ©es" -#: network/msnnotificationconnection.cpp:2358 +#: network/msnnotificationconnection.cpp:2357 #, fuzzy msgid "Authentication ticket was incorrect" msgstr "L'authentification a Ć©chouĆ©e" -#: network/msnnotificationconnection.cpp:2362 +#: network/msnnotificationconnection.cpp:2360 msgid "You can't start a chat with someone while you are invisible." msgstr "" "Vous ne pouvez entammer une conversation avec quiconque tant que vous ĆŖtes " "invisible." -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." +#: network/msnnotificationconnection.cpp:2364 +#, fuzzy +msgid "Not accepting new contacts" +msgstr "Nouveaux directeurs non acceptĆ©s" + +#: network/msnnotificationconnection.cpp:2368 +#, fuzzy +msgid "" +"You have a kids passport account, you need parental consent to chat online." msgstr "" "Tu as un compte Passport pour enfant, tu dois obtenir l'accord de tes " "parents pour discuter en ligne." -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." +#: network/msnnotificationconnection.cpp:2371 +#, fuzzy +msgid "Your passport account needs to be verified first." msgstr "Votre compte Passport doit d'abord ĆŖtre vĆ©rifiĆ©." -#: network/msnnotificationconnection.cpp:2373 +#: network/msnnotificationconnection.cpp:2375 msgid "Bad USR ticket" msgstr "" -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" -msgstr "KMess - Erreur MSN" +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" +msgstr "Erreur en accĆ©dant Ć  la liste de contact, rĆ©essayez plus tard" -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" +#: network/msnnotificationconnection.cpp:2399 +#, fuzzy +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." msgstr "Il y a eu une erreur interne au serveur" +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + #: network/msnnotificationconnection.cpp:2414 -msgid "The server is too busy" -msgstr "Le serveur est occupĆ©" - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "Le serveur est indisponible" - -#: network/msnnotificationconnection.cpp:2422 msgid "Peer notification server down" msgstr "Le serveur de notification est innaccessible" -#: network/msnnotificationconnection.cpp:2426 +#: network/msnnotificationconnection.cpp:2418 msgid "The server is going down" msgstr "Le serveur va ĆŖtre innaccessible" -#: network/msnnotificationconnection.cpp:2429 +#: network/msnnotificationconnection.cpp:2422 msgid "The server is going down soon" msgstr "LeĀ·serveurĀ·vaĀ·bientĆ“t ĆŖtreĀ·innaccessible" -#: network/msnnotificationconnection.cpp:2433 +#: network/msnnotificationconnection.cpp:2427 msgid "Write is blocking" msgstr "L'Ć©criture bloque" -#: network/msnnotificationconnection.cpp:2436 +#: network/msnnotificationconnection.cpp:2431 msgid "Session is overloaded" msgstr "La session sature" -#: network/msnnotificationconnection.cpp:2441 +#: network/msnnotificationconnection.cpp:2438 msgid "The server is not available" msgstr "Le serveur est indisponible" -#: network/msnnotificationconnection.cpp:2444 +#: network/msnnotificationconnection.cpp:2442 msgid "Authentication failed" msgstr "L'authentification a Ć©chouĆ©e" -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" -msgstr "Nouveaux directeurs non acceptĆ©s" +#: network/msnnotificationconnection.cpp:2449 +#, fuzzy +msgid "Unknown error code received from the server: %1" +msgstr "KMess a reƧu une commande inconnue de la part du serveur: %1" -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" -msgstr "KMess a reƧu un message d'erreur inconnu de la part du serveur: %1" +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +#, fuzzy +msgctxt "Error dialog box title" +msgid "MSN error" +msgstr "KMess - Erreur MSN" -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "Attention : Le serveur s'arrĆŖtera pour maintenance dans 1 minute !" +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "minutes" +msgstr[1] "minutes" #: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." -msgstr "Le serveur MSN subira un arrĆŖt pour maintenance dans une minute" - -#: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" +#, fuzzy +msgid "Server closes for maintenance in %1!" msgstr "Attention : Le serveur s'arrĆŖtera pour maintenance dans %1 minutes !" -#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:2604 +#, fuzzy +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." +msgstr "Le serveur MSN subira un arrĆŖt pour maintenance dans une minute" + +#: network/msnnotificationconnection.cpp:2901 msgid "Lost reference to SOAP client" msgstr "" -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +#, fuzzy +msgid "KMess could not process Offline-IM messages.
Details: %1" msgstr "" "KMess n'a pas pu procƩder Ơ l'envois de vos message en direction d'un " "contact dƩconnectƩ.\n" "\n" "DƩtails : %1" -#: network/msnnotificationconnection.cpp:3209 +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "L'authentification a ƩchouƩe" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "Il y a eu une erreur interne dans KMess : %1" + +#: network/msnnotificationconnection.cpp:3242 +#, fuzzy +msgctxt "Login error message, with more details for developer versions" msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" +msgstr "" +"KMess n'a pas été en mesure de se connecter aux serveurs de messagerie MSN. " +"Ces derniers peuvent être en phase maintenance temporaire, ou bien il s'agit " +"d'un problème concernant votre connexion à internet." + +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "La connexion avec le serveur a ƩtƩ perdue." + +#: network/msnnotificationconnection.cpp:3302 +#, fuzzy +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" msgstr "" "Ɖchec d'authentification, KMess ne peut procĆ©der au login passport.

" "Détails : %1" -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" -msgstr "" -"Kmess n'a pas pu accéder au service web à distance.\n" -"\n" -"Détails : %1" +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "Erreur du serveur" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "Temps limite de connexion" + +#: network/msnsockettcp.cpp:368 +msgid "1 ping lost" +msgstr "1 perte de ping" + +#: network/msnsockettcp.cpp:372 +msgid "%1 pings lost" +msgstr "% pertes de pings" + +#: network/msnsockettcp.cpp:387 +msgid "The connection to the server was lost." +msgstr "La connexion avec le serveur a été perdue." + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "Cette personne est déconnectée ou invisible." -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "Le·contact·essaye·d'utiliser·une·fonctionnalité·MSN7·que·KMess·ne·supporte·par·encore." -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 msgid "The message \"%1\" was not received!" msgstr "Le message \"%1\" n'a pas été reçu !" -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "Impossible d'établir la connexion : %1" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "Trop de redirections du service de login" -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +#, fuzzy +msgid "In %1's chat: %2" msgstr "Dans la conversation de %2" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +#, fuzzy +msgid "%1 says:
'%2'" msgstr "%1 dit :
'%2'" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" +#: notification/chatnotification.cpp:171 +#, fuzzy +msgid "%1 has sent you an offline message:
'%2'" msgstr "%1 vous a envoyƩ un message hors ligne :
'%2'" -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" +#: notification/chatnotification.cpp:178 +#, fuzzy +msgid "%1's chat requests attention!" msgstr "Conversation de %1 demande votre attention" -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" +#: notification/chatnotification.cpp:183 +#, fuzzy +msgid "%1:
%2" msgstr "%1 :
%2" -#: notification/notificationchat.cpp:200 +#: notification/chatnotification.cpp:190 #, fuzzy -msgid "%1 has sent you a handwritten message!" +msgid "%1 has sent you a handwritten message!" msgstr "%1 Vous a envoyez un wizz !" -#: notification/notificationchat.cpp:204 -msgid "%1 has sent you a nudge!" +#: notification/chatnotification.cpp:194 +#, fuzzy +msgid "%1 has sent you a nudge!" msgstr "%1 Vous a envoyez un wizz !" -#: notification/notificationchat.cpp:208 -msgid "%1 has sent you a wink!" +#: notification/chatnotification.cpp:198 +#, fuzzy +msgid "%1 has sent you a wink!" msgstr "%1 vous a envoyĆ© un clin d'œil !" -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" +#: notification/chatnotification.cpp:204 +#, fuzzy +msgid "%1 wants to use the webcam!" msgstr "%1 dĆ©sire utiliser la webcam !" -#: notification/notificationchat.cpp:215 -msgid "%1 is sending you a file!" +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" msgstr "%1 vous envoie un fichier !" -#: notification/notificationchat.cpp:216 -msgid "%1 has sent you an invitation!" +#: notification/chatnotification.cpp:206 +#, fuzzy +msgid "%1 has sent you an invitation!" msgstr "%1 vous a envoyĆ© une invitation !" -#: notification/notificationchat.cpp:223 -msgid "%1 has canceled the webcam session!" +#: notification/chatnotification.cpp:213 +#, fuzzy +msgid "%1 has canceled the webcam session!" msgstr "%1 a annulĆ© la session webcam !" -#: notification/notificationchat.cpp:224 -msgid "%1 has canceled the file transfer!" +#: notification/chatnotification.cpp:214 +#, fuzzy +msgid "%1 has canceled the file transfer!" msgstr "%1 a annulĆ© le transfert de fichier !" -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +#, fuzzy +msgid "%1's activity has been canceled!" msgstr "L'activitĆ© de %1 a Ć©tĆ© annulĆ©e !" -#: notification/notificationchat.cpp:232 -msgid "%1 has accepted to use the webcam!" +#: notification/chatnotification.cpp:222 +#, fuzzy +msgid "%1 has accepted to use the webcam!" msgstr "%1 a acceptĆ© d'afficher la webcam !" -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" +#: notification/chatnotification.cpp:223 +#, fuzzy +msgid "%1 has accepted the file transfer!" msgstr "%1 a acceptĆ© le transfert de fichier !" -#: notification/notificationchat.cpp:234 -msgid "%1 has accepted your invitation!" +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" msgstr "%1 a acceptĆ© votre invitation !" -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" +#: notification/chatnotification.cpp:231 +#, fuzzy +msgid "%1 has ended the webcam session!" msgstr "%1 a mis fin Ć  la session webcam !" -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "Le transfert de fichier avec %1 est terminĆ© !" -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" +#: notification/chatnotification.cpp:233 +#, fuzzy +msgid "%1's activity has ended!" msgstr "L'activitĆ© de %1 s'est terminĆ©e !" -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" +#: notification/chatnotification.cpp:240 +#, fuzzy +msgid "%1's webcam session has failed!" msgstr "La session webcam de %1 a Ć©chouĆ©e !" -#: notification/notificationchat.cpp:251 -msgid "The file transfer with %1 has failed!" +#: notification/chatnotification.cpp:241 +#, fuzzy +msgid "The file transfer with %1 has failed!" msgstr "Le transfert de fichier avec %1 a Ć©chouĆ© !" -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:242 +#, fuzzy +msgid "%1's activity has ended with an error!" msgstr "L'activitĆ© de %1 s'est terminĆ©e avec une erreur !" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -msgid "%1 is now online" +#: notification/contactstatusnotification.cpp:70 +#, fuzzy +msgid "%1 is now online" msgstr "%1 s'est connectĆ©" -#: notification/notificationcontactstatus.cpp:76 -msgid "%1 has gone away" +#: notification/contactstatusnotification.cpp:71 +#, fuzzy +msgid "%1 has gone away" msgstr "%1 s'est absentĆ©" -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/contactstatusnotification.cpp:72 +#, fuzzy +msgid "%1 will be right back" msgstr "%1 sera de retour dans un instant" -#: notification/notificationcontactstatus.cpp:78 -msgid "%1 is now busy" +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" msgstr "%1 est maintenant occupĆ©" -#: notification/notificationcontactstatus.cpp:79 -msgid "%1 has become invisible" +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" msgstr "%1 est devenu invisible" -#: notification/notificationcontactstatus.cpp:80 -msgid "%1 has gone idle" +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" msgstr "%1 est passĆ© inactif" -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/contactstatusnotification.cpp:76 +#, fuzzy +msgid "%1 has logged out" msgstr "%1 s'est dĆ©connectĆ©" -#: notification/notificationcontactstatus.cpp:82 -msgid "%1 is on the phone" +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" msgstr "%1 tĆ©lĆ©phone" -#: notification/notificationcontactstatus.cpp:83 -msgid "%1 is out for lunch" +#: notification/contactstatusnotification.cpp:78 +#, fuzzy +msgid "%1 is out for lunch" msgstr "%1 est partit manger" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/newemailnotification.cpp:78 +#, fuzzy +msgid "New email:
'%1'
by '%2'" msgstr "E-mail reƧu :
Ā« %1 Ā»
de « %2 »" -#: settings/accountswidget.cpp:81 +#: settings/accountpage.cpp:69 msgid "Browse..." msgstr "" -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +#, fuzzy +msgid "Browse and crop picture..." msgstr "Parcourir et couper l'image " -#: settings/accountswidget.cpp:404 -msgid "Display Picture" -msgstr "Avatar" +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" +#: settings/accountpage.cpp:448 +#, fuzzy +msgid "Downloading of display picture failed" msgstr "Le téléchargement de l'avatar a échoué." -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 +#, fuzzy msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" "Une erreur est survenue en tentant de modifier votre avatar.\n" "Vérifiez bien d'avoir sélectionner un fichier image valide." -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "Salut, comment ça va ? :)" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "Stacy" - -#: settings/chatstylepage.cpp:317 -msgid "Great!" -msgstr "Super !" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "Je viens /juste/ de rentrer de mes vacances en Italie !" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 #, fuzzy msgid "&Delete" msgstr "&Supprimer le contact" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "Paramètres" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 msgid "Account" msgstr "Compte" -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 #, fuzzy msgid "My Account" msgstr "Compte" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "Alertes" -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 #, fuzzy msgid "Alerts and Notifications" msgstr "Notification KMess" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "Conversation" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "Archivage des conversations" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +#, fuzzy +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "L'adresse de contacte que vous avez saisie est invalide : %1" + +#: settings/accountsettingsdialog.cpp:201 +#, fuzzy +msgid "The email address you have entered is already in use: '%1'" +msgstr "L'adresse de contacte que vous avez saisie est invalide : %1" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "Etes-vous sûr(e) de vouloir supprimer ce compte ?" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "Etes-vous sûr(e) de vouloir supprimer ce compte ?" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "Salut, comment ça va ? :)" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "Stacy" + +#: settings/chatstylepage.cpp:341 +msgid "Great!" +msgstr "Super !" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "Je viens /juste/ de rentrer de mes vacances en Italie !" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "Paramètres" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +msgid "Accounts" +msgstr "Comptes" + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "Notification d'e-mails" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "Archiver les conversations dans ce rƩpertoire :" + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." @@ -3535,14 +4235,151 @@ msgstr "" "plan. Cliquez sur \"Quitter\" dans le menu \"Fichier\" pour quitter " "vƩritablement le programme." -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "Ancrage dans le System Tray" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "
%1 (%2)" +#: systemtraywidget.cpp:245 +#, fuzzy +msgid "- %1 (%2)" +msgstr "%1 %2" + +#~ msgid "Click to send an email to this contact." +#~ msgstr "Cliquez pour envoyer un e-mail Ć  ce contact." + +#~ msgid "Picture:" +#~ msgstr "Image : " + +#, fuzzy +#~ msgid "Login Information" +#~ msgstr "Afficher les infos relatives aux e-mails" + +#~ msgid "Logging in..." +#~ msgstr "Connexion en cours..." + +#~ msgid "" +#~ "Allows you to choose which e-mail program KMess should open to view e-" +#~ "mail messages." +#~ msgstr "" +#~ "Vous pouvez choisir quel logiciel de messagerie KMess doit lancer pour " +#~ "lire vos e-mails." + +#~ msgid "Use a specified command:" +#~ msgstr "Utiliser une commande spĆ©cifique :" + +#~ msgid "This account does not have an Hotmail inbox!" +#~ msgstr "Ce compte n'a pas de boĆ®te de rĆ©ception Hotmail !" + +#, fuzzy +#~ msgid "Email: " +#~ msgstr "E-mail" + +#~ msgid "Remove group" +#~ msgstr "Supprimer le Groupe" + +#, fuzzy +#~ msgid "Show &Display Pictures" +#~ msgstr "Avatar" + +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr "Vous avez 1 nouveau message dans votre boĆ®te de rĆ©ception." + +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr "Vous avez %1 nouveaux messages dans votre boĆ®te de rĆ©ception." + +#, fuzzy +#~ msgid "Guido Solinas" +#~ msgstr "Se &connectent" + +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "Le transfert de % a Ć©chouĆ©. Impossible d'ouvrir le fichier" + +#, fuzzy +#~ msgid "Sidebar" +#~ msgstr "Bar latĆ©rale" + +#, fuzzy +#~ msgid "New contact's group" +#~ msgstr "Nouveau &Contact" + +#~ msgid "Enter your login information:" +#~ msgstr "Saisissez vos identifiants de connexion :" + +#~ msgid "Your friendly name:" +#~ msgstr "Votre pseudonyme :" + +#, fuzzy +#~ msgid "Your email address:" +#~ msgstr "Adresse e-mail : " + +#~ msgid "Your password:" +#~ msgstr "Votre mot de passe :" + +#~ msgid "Display picture:" +#~ msgstr "Avatar :" + +#~ msgid "Don't show a displa&y picture" +#~ msgstr "Ne pas afficher d'avatar" + +#~ msgid "Status to set at login:" +#~ msgstr "Ɖtat utilisĆ© Ć  la connexion" + +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "Afficher une notification lors de la rĆ©ception d'un e-mail" + +#~ msgid "Organize chat folders by:" +#~ msgstr "Organiser le dossier des conversations archivĆ©es par :" + +#~ msgid "&Show graphics in chat messages" +#~ msgstr "Afficher les &images dans les messages" + +#~ msgid "Use Hotmail" +#~ msgstr "Utiliser Hotmail" + +#~ msgid "says:" +#~ msgstr "dit :" + +#~ msgid "Current name: " +#~ msgstr "Pseudo actuel : " + +#, fuzzy +#~ msgid "" +#~ "KMess could not connect to the MSN Messenger service.\n" +#~ "Please, be sure to be connected to the internet.\n" +#~ "reason: %1." +#~ msgstr "" +#~ "KMess n'est pas arrivĆ© Ć  se connecter au service de messagerie MSN.\n" +#~ "Veuillez vĆ©rifier d'ĆŖtre connectĆ© Ć  internet.\n" +#~ "Erreur systĆØme : %1 (code %2)." + +#~ msgid "The remote server has closed the connection." +#~ msgstr "Le serveur distant a interrompu la connexion." + +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr "Voir l'Ć©tat du service de messagerie MSN ?" + +#~ msgid "Received user confirmation" +#~ msgstr "Confimation d'utilisateur reƧue" + +#~ msgid "Transfer to notification server" +#~ msgstr "Transfert au serveur de notification" + +#~ msgid "The server is too busy" +#~ msgstr "Le serveur est occupĆ©" + +#~ msgid "The server is unavailable" +#~ msgstr "Le serveur est indisponible" + +#~ msgid "KMess received an unknown error message from the server: %1" +#~ msgstr "KMess a reƧu un message d'erreur inconnu de la part du serveur: %1" + +#~ msgid "Warning: Server closes for maintenance in 1 minute!" +#~ msgstr "Attention : Le serveur s'arrĆŖtera pour maintenance dans 1 minute !" + #~ msgid "Add contact" #~ msgstr "Ajouter le contact" @@ -3550,9 +4387,6 @@ msgstr "
%1 (%2)" #~ msgid "KMess Notification" #~ msgstr "Notification d'e-mails" -#~ msgid "Accounts" -#~ msgstr "Comptes" - #~ msgid "" #~ msgstr "" @@ -3566,9 +4400,6 @@ msgstr "
%1 (%2)" #~ "Your emails" #~ msgstr "chopinou AT choplair DOT org, darkan9el AT gmail DOT com" -#~ msgid "Insert an emoticon" -#~ msgstr "InsƩrer une ƩmoticƓne" - #~ msgid "Show/Hide &Contact Sidebar" #~ msgstr "Afficher/Masquer la barre &latƩrale" @@ -3602,18 +4433,9 @@ msgstr "
%1 (%2)" #~ msgid "(On the Phone)" #~ msgstr "(Au tĆ©lĆ©phone)" -#~ msgid "Connection timeout" -#~ msgstr "Temps limite de connexion" - #~ msgid "The current status of your contact." #~ msgstr "L'Ć©tat actuel de votre contact." -#~ msgid "Connect" -#~ msgstr "Connexion" - -#~ msgid "Listening to %1" -#~ msgstr "En train d'Ć©couter %1" - #, fuzzy #~ msgid "The contact is listening to music" #~ msgstr "Ce contact n'est pas dans votre liste" diff --git a/po/hu.po b/po/hu.po index c9d2985..8526745 100644 --- a/po/hu.po +++ b/po/hu.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Kmess\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" "PO-Revision-Date: 2007-12-02 19:10+0100\n" "Last-Translator: rezso \n" "Language-Team: \n" @@ -18,45 +18,38 @@ msgstr "" "X-Poedit-Country: HUNGARY\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "BejelentkezĆ©s..." - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -msgid "S&end" -msgstr "&KüldĆ©s" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 msgid "Ne&w Line" msgstr "Új &sor" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 -#, fuzzy -msgid "Sidebar" -msgstr "OldalsĆ”v" +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 +msgid "S&end" +msgstr "&KüldĆ©s" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +msgid "Contacts" +msgstr "Partnerek" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "Kattints ide a partnered profiljĆ”nak megtekintĆ©sĆ©hez." #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." -msgstr "E-mail küldĆ©sĆ©hez a partnerednek kattints ide." +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 #, fuzzy msgid "" "Enter here the email address of the person you wish to add to your contact " @@ -64,41 +57,39 @@ msgid "" msgstr "A felvenni kĆ­vĆ”nt szemĆ©ly e-mail cĆ­me:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 msgid "Email address" msgstr "E-mail cĆ­m" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 #, fuzzy -msgid "New contact's group" -msgstr "Új &partner" +msgid "Initial group" +msgstr "Csoport Ć”t&nevezĆ©se" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "Add meg az emotikon kódjĆ”t:" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "VĆ”lassz egy kĆ©pfĆ”jlt:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 #, fuzzy msgid "" "Enter a message to be automatically sent to people who try to message you." @@ -107,126 +98,339 @@ msgstr "" "amit azok fognak megkapni, akik üzenni akarnak neked:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 #, fuzzy msgid "&Automatic away message" msgstr "TĆ”vollĆ©t üzenet megadĆ”sa" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" msgstr "" -"%1\n" -"felvett a partnerlistĆ”jĆ”ra. A Te vĆ”lasztĆ”sod:" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 -msgid "&Add this contact to your \"Friends\" list" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 +#, fuzzy +msgid "&Add this person to my \"Friends\" list" msgstr "Partner &felvĆ©tele a \"BarĆ”tok\" listĆ”jĆ”ra" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 -msgid "&Not add this contact, but let them see your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 +#, fuzzy +msgid "Do not add this person; only allow them to see my online state" msgstr "&Nem veszem fel, de lĆ”thatja, ha bejelentkezem." #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 -msgid "Block this person from contacting &you or seeing your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 +#, fuzzy +msgid "&Block this person from contacting me or seeing my online state" msgstr "" "Partner tiltĆ”sa (nem lĆ©phet kapcsolatba veled Ć©s az elĆ©rhetősĆ©gedet sem " "lĆ”thatja)" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, no-c-format +msgid "Contact Properties for %1" +msgstr "%1 partner adatai" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +#, fuzzy +msgid "Restore" +msgstr "Tƶrƶlve" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "AlternatĆ­v nĆ©v hasznĆ”lata e szemĆ©lyhez" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "BuborĆ©kjelző megjelenĆ­tĆ©se, amikor a partner be- vagy kijelentkezik" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "Hang:" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +#, fuzzy +msgid "&Clear Cache" +msgstr "Fül tƶrlĆ©se" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +#, fuzzy +msgid "Notes" +msgstr "Jegyzet" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "HĆ”lózat ablak" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +#, fuzzy +msgid "Standard" +msgstr "Csillag" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "&KüldĆ©s" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 #, fuzzy msgid "Cancel" msgstr "MegszakĆ­tva" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -msgid "Enter your login information:" -msgstr "Add meg a bejelentkező adatokat:" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" +msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 -msgid "Password" +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 +#, fuzzy +msgid "Email address:" +msgstr "E-mail cĆ­m: " + +#. i18n: tag string +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +#, fuzzy +msgid "Password:" msgstr "Jelszó" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "StĆ”tusz bejelentkezĆ©skor" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 #, fuzzy msgid " Account options " msgstr "Fiók &beĆ”llĆ­tĆ”sok" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 msgid "Remem&ber this profile" msgstr "Profil megje&gyzĆ©se" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "&Kapcsolat" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "Add meg a szemĆ©lyes üzeneted itt" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr "Fiók &beĆ”llĆ­tĆ”sok" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "Add meg a nevet, amit partnereid lĆ”tnak, amikor online vagy." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 -msgid "Your friendly name:" -msgstr "MegjelenĆ­tendő neved:" +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 +#, fuzzy +msgid "&Friendly name:" +msgstr "&BarĆ”ti nĆ©v" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" @@ -235,15 +439,15 @@ msgstr "" "passport.com/ cĆ­men tudsz lĆ©trehozni." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 #, fuzzy -msgid "Your email address:" +msgid "&Email address:" msgstr "E-mail cĆ­m: " #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" @@ -252,39 +456,40 @@ msgstr "" "passport.com/ cĆ­men tudsz lĆ©trehozni." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" -msgstr "Jelszavad:" - -#. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 #, fuzzy -msgid "Remember Password" +msgid "&Password:" msgstr "Jelszó" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 -msgid "Display picture:" -msgstr "MegjelenĆ­tendő kĆ©p:" +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 +#, fuzzy +msgid "&Remember Password" +msgstr "Jelszó" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 +msgid "Display Picture" +msgstr "KĆ©p megjelenĆ­tĆ©se" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 msgid "C&hange..." msgstr "&MódosĆ­tĆ”s..." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -msgid "Don't show a displa&y picture" -msgstr "Ne mutassa a megjelenĆ­tendő kĆ©pet" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -301,34 +506,37 @@ msgstr "" "hasznĆ”lod, ajĆ”nlott engedĆ©lyezni ezt az opciót." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +#, fuzzy +msgid "Re&member the settings of this account" msgstr "Fiók beĆ”llĆ­tĆ”sainak megjegyzĆ©se" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "Ha engedĆ©lyezett, a KMess automatikusan bejelentkezik e fiókkal." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 -msgid "Login &with this account automatically at start-up" +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 +#, fuzzy +msgid "Login &with this account automatically" msgstr "&Automatikus bejelentkezĆ©s e fiókkal indulĆ”skor" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "BeĆ”llĆ­tandó stĆ”tusz bejelentkezĆ©skor:" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "Ɩ&sszes tĆ”rsalgĆ”s naplózĆ”sa" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -339,8 +547,8 @@ msgstr "" "vagy hasznĆ”lj Hotmail fiókot a kapcsolódĆ”shoz." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." @@ -349,26 +557,26 @@ msgstr "" "megerősĆ­tve." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "MegerősĆ­tő e-mail kĆ©rĆ©se" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 msgid "https://accountservices.passport.net/" msgstr "https://accountservices.passport.net/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "UgrĆ”s az accountservices.passport.net cĆ­mre" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." @@ -377,38 +585,103 @@ msgstr "" "cĆ­met Passport fiókkĆ©nt." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "Új fiók lĆ©trehozĆ”sa" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "UgrĆ”s a register.passport.com cĆ­mre" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 -msgid "Popup notifications" +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 +#, fuzzy +msgid "Saved accounts:" +msgstr "Fiókok" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +msgid "Click" +msgstr "Kattints" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "" +"Kattints ide Ćŗj sajĆ”t emotikonok hozzĆ”adĆ”sĆ”hoz, hogy elküldhesd a " +"partnereidnek." + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "Fiók" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "VĆ”lassz egy emotikont Ć©s kattints ide a tƶrlĆ©sĆ©hez." + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "Tƶrƶlve" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "Popup Ć©rtesĆ­tĆ©sek" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "Partnerek" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 msgid "Show notifications when your contacts:" msgstr "ƉrtesĆ­tĆ©sek megjelenĆ­tĆ©se amikor egy partner:" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." @@ -417,15 +690,15 @@ msgstr "" "bejelentkezik." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 #, fuzzy msgid "&Go online" msgstr "&Kijelentkezik" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." @@ -434,14 +707,14 @@ msgstr "" "tĆ”rsalgĆ”st kezdemĆ©nyez." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "&TĆ”rsalgĆ”st kezdemĆ©nyez" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." @@ -450,14 +723,14 @@ msgstr "" "üzenetet küld." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 msgid "S&end you a message" msgstr "Üz&enetet küld" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." @@ -466,16 +739,16 @@ msgstr "" "stĆ”tusza megvĆ”ltozik." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "&StĆ”tusza megvĆ”ltozik" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." @@ -484,38 +757,88 @@ msgstr "" "kijelentkezik." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 msgid "Go o&ffline" msgstr "&Kijelentkezik" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 -msgid "Show notifications when you recei&ve an email" -msgstr "ƉrtesĆ­tĆ©s, ha e-mail Ć©rke&zik" +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 +#, fuzzy +msgid "Email Events" +msgstr "E-mail cĆ­m" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" +msgstr "ƉrtesĆ­tĆ©s, ha e-mail Ć©rkezik az \"egyĆ©b mappĆ”k\"-ba" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" +"Ha engedĆ©lyezett, egy felugró üzenet jelenik meg, amikor egyĆ©b mappĆ”kba e-" +"mail Ć©rkezik. Ez az opció csak Hotmail fiókoknĆ”l hasznĆ”lható." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +msgid "In other folders" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "Megadja, hogy hĆ”ny mĆ”sodpercig legyen lĆ”tható a buborĆ©kjelző." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "BuborĆ©kjelző megjelenĆ­tĆ©se ennyi ideig:" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "mĆ”sodperc" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "JelzĆ©sek" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "&Kijelentkezett partnerek megjelenĆ­tĆ©se" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -533,14 +856,32 @@ msgstr "" "elsőre reagĆ”l.

" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "A tĆ”rsalgĆ”s ablakĆ”nak megrĆ”zĆ”sa rezgő figyelmeztetĆ©snĆ©l" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" +"Ha engedĆ©lyezett, egy felugró üzenet jelenik meg, ha e-mail Ć©rkezik a bejƶvő " +"leveleid mappĆ”jĆ”ba. Az olvasatlan levelek szĆ”ma a partnerlista felett " +"jelenik meg. Ez az opció csak Hotmail fiókoknĆ”l hasznĆ”lható." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." @@ -549,30 +890,37 @@ msgstr "" "Ezt az informĆ”ciót az aktĆ­v lejĆ”tszóprogramtól kĆ©ri le a KMess." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 -msgid "Inform contacts w&hich song I am listening to." +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 +#, fuzzy +msgid "Inform contacts w&hich song I am listening to" msgstr "Az Ć”ltalam hallgatott dal kijelzĆ©se a partnereknek." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 +#, fuzzy msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" "Ha engedĆ©lyezett, a stĆ”tuszod automatikusan \"Nincs a gĆ©pnĆ©l\" lesz, ha pĆ”r " "percig nem hasznĆ”lod a gĆ©pet." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "StĆ”tusz módosĆ­tĆ”sa \"Nincs a gĆ©pnĆ©l\"-re tĆ©tlensĆ©g esetĆ©n" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." @@ -580,46 +928,47 @@ msgstr "" "A KMess ennyi idő utĆ”n vĆ”ltoztatja a stĆ”tuszod \"Nincs a gĆ©pnĆ©l\"-re (perc)." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 msgid "Become idle after" msgstr "TĆ”vollĆ©t ideje" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "perc" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "" "Ha engedĆ©lyezett, a tĆ”rsalgĆ”sok a megadott kƶnyvtĆ”rba lesznek elmentve." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 msgid "Log &all chats" msgstr "Ɩ&sszes tĆ”rsalgĆ”s naplózĆ”sa" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 msgid "" "Choose the directory on your system where you'd like to save the chat logs." msgstr "VĆ”laszd ki azt a kƶnyvtĆ”rat, ahovĆ” a tĆ”rsalgĆ”sokat szeretnĆ©d menteni." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" msgstr "TĆ”rsalgĆ”sok mentĆ©se e kƶnyvtĆ”rba:" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." @@ -628,123 +977,100 @@ msgstr "" "nap szerinti rendezĆ©st vĆ”lasztod." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "TĆ”rsalgĆ”sok mappĆ”inak rendezĆ©si módja:" +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "Ɖv" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 msgid "Month" msgstr "Hónap" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "Nap" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" msgstr "Ɩsszes tĆ”rsalgĆ”s mentĆ©se a főkƶnyvtĆ”rba" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." -msgstr "A tĆ”rsalgĆ”s üzeneteidben hasznĆ”lt betűtĆ­pus Ć©s betűszĆ­n." - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "Üzeneteid betűtĆ­pusa:" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" -"LehetővĆ© teszi, hogy a parnereid üzeneteinek betűtĆ­pusĆ”t Ć©s szĆ­nĆ©t az " -"Ć”ltalad vĆ”lasztottra cserĆ©ld." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "" -"Mindig e betűtĆ­pus hasznĆ”lata a partnerek üzeneteinek megjelenĆ­tĆ©sĆ©hez:" - +#. i18n: file ./settings/chatstylepage.ui line 45 #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "" "LehetővĆ© teszi a Kmess üzenetek megjelenĆ­tĆ©sĆ©hez hasznĆ”lt tĆ©mĆ”jĆ”nak cserĆ©jĆ©t." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +#, fuzzy +msgid "&Chat style:" msgstr "TĆ”rsalgĆ”s stĆ­lusa:" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "BeĆ”llĆ­tĆ”sok" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "Emotikonok hasznĆ”latĆ”nak engedĆ©lyezĆ©se a tĆ”rsalgĆ”sokban." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 -msgid "&Show graphics in chat messages" -msgstr "&GrafikĆ”k megjelenĆ­tĆ©se a tĆ”rsalgĆ”sok üzeneteiben" +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 +#, fuzzy +msgid "&Show emoticons" +msgstr "&Emotikonok megjelenĆ­tĆ©se" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "EngedĆ©lyezi az idő megjelenĆ­tĆ©sĆ©t minden üzenetnĆ©l." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 -msgid "S&how time in chat messages" +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 +#, fuzzy +msgid "S&how messages time" msgstr "&Idő megjelenĆ­tĆ©se a tĆ”rsalgĆ”sok üzeneteiben" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" -"Betűeffektusok hasznĆ”latĆ”nak engedĆ©lyezĆ©se. A *vastag*, /dőlt/, Ć©s " -"_alĆ”hĆŗzott_ az adott szavakat vastag betűvel, dƶntve vagy alĆ”hĆŗzva jelenĆ­ti " -"meg." - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "" -"&BetűformĆ”zĆ”sok hasznĆ”lata az üzenetekben, pl. *vastag*, /dőlt/, vagy " -"_alĆ”hĆŗzott_" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -756,154 +1082,307 @@ msgstr "" "csoportosĆ­tja ezeket, ennek megjelenĆ©se a vĆ”lasztott stĆ­lustól függ." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "Ugyanazon partner egymĆ”st kƶvető üzeneteinek ƶsszevonĆ”sa" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 -msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" msgstr "" -"KivĆ”laszthatod, hogy a KMess melyik levelezőprogramot indĆ­tsa el az e-mailek " -"elolvasĆ”sĆ”hoz." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "Levelező kliens" +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 +#, fuzzy +msgid "Always" +msgstr "TĆ”vol" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "Hotmail hasznĆ”lata" +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "TĆŗl sok csoport van a partnerlistĆ”don (max: 30)" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "Megadott parancs hasznĆ”lata:" +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "Idióta" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "E-mail Ć©rtesĆ­tĆ©s" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 -msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" msgstr "" -"Ha engedĆ©lyezett, egy felugró üzenet jelenik meg, ha e-mail Ć©rkezik a bejƶvő " -"leveleid mappĆ”jĆ”ba. Az olvasatlan levelek szĆ”ma a partnerlista felett " -"jelenik meg. Ez az opció csak Hotmail fiókoknĆ”l hasznĆ”lható." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 -msgid "Show email information" -msgstr "E-mail informĆ”ció megjelenĆ­tĆ©se" +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." +msgstr "A tĆ”rsalgĆ”s üzeneteidben hasznĆ”lt betűtĆ­pus Ć©s betűszĆ­n." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "Üzeneteid betűtĆ­pusa:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." msgstr "" -"Ha engedĆ©lyezett, egy felugró üzenet jelenik meg, amikor egyĆ©b mappĆ”kba e-" -"mail Ć©rkezik. Ez az opció csak Hotmail fiókoknĆ”l hasznĆ”lható." +"LehetővĆ© teszi, hogy a parnereid üzeneteinek betűtĆ­pusĆ”t Ć©s szĆ­nĆ©t az " +"Ć”ltalad vĆ”lasztottra cserĆ©ld." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" -msgstr "ƉrtesĆ­tĆ©s, ha e-mail Ć©rkezik az \"egyĆ©b mappĆ”k\"-ba" +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "" +"Mindig e betűtĆ­pus hasznĆ”lata a partnerek üzeneteinek megjelenĆ­tĆ©sĆ©hez:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 +msgid "" +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." +msgstr "" +"Betűeffektusok hasznĆ”latĆ”nak engedĆ©lyezĆ©se. A *vastag*, /dőlt/, Ć©s " +"_alĆ”hĆŗzott_ az adott szavakat vastag betűvel, dƶntve vagy alĆ”hĆŗzva jelenĆ­ti " +"meg." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +#, fuzzy +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" +msgstr "" +"&BetűformĆ”zĆ”sok hasznĆ”lata az üzenetekben, pl. *vastag*, /dőlt/, vagy " +"_alĆ”hĆŗzott_" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "VĆ”rakozĆ”s a partnerlistĆ”ra..." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 msgid "&Emoticon Themes" msgstr "&Emotikon tĆ©mĆ”k" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 msgid "Available emoticon styles:" msgstr "Jelenlegi emotikon stĆ­lusok:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 msgid "&Custom Emoticons" msgstr "&SajĆ”t emotikonok" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 msgid "Custom emoticons for this account:" msgstr "SajĆ”t emotikonok e fiókhoz:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -msgid "Click" -msgstr "Kattints" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "" -"Kattints ide Ćŗj sajĆ”t emotikonok hozzĆ”adĆ”sĆ”hoz, hogy elküldhesd a " -"partnereidnek." - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "Ú&j hozzĆ”adĆ”sa..." #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "Kattints ide a kivĆ”lasztott emotikon Ć”tnevezĆ©sĆ©hez." #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 msgid "Re&name" msgstr "Ɓt&nevezĆ©s" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "VĆ”lassz egy emotikont Ć©s kattints ide a tƶrlĆ©sĆ©hez." - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 msgid "Remo&ve" msgstr "Tƶr&lĆ©s" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +#, fuzzy +msgid "Web Browser" +msgstr "Hervadó rózsa" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +msgid "&Use the KDE default browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "üzenete: " +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "Levelező kliens" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +msgid "&Use the KDE default email client" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +msgid "File Transfers" +msgstr "FĆ”jlĆ”tvitelek" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "TĆ”rsalgĆ”sok mentĆ©se e kƶnyvtĆ”rba:" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +#, fuzzy +msgid "and" +msgstr "SzomorĆŗ" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "FĆ”jlĆ”tvitelek" #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -913,68 +1392,106 @@ msgstr "Nem vagyok a gĆ©pnĆ©l" msgid "Your name" msgstr "Neved" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "you@hotmail.com" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "ElĆ©rhető" +#: chat/chat.cpp:124 +msgid "" +"You can't start this invitation because there are multiple contacts in this " +"chat." +msgstr "Nem tudod elindĆ­tani a meghĆ­vĆ”st, mert tƶbb partnerrel tĆ”rsalogsz." -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "TĆ”vol" +#: chat/chat.cpp:158 +#, fuzzy +msgid "%1 has joined the chat." +msgstr "%1 csatlakozott a tĆ”rsalgĆ”shoz." -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "Rƶgtƶn jƶvƶk" +#: chat/chat.cpp:211 +#, fuzzy +msgid "The conversation went idle, %1 has left the chat." +msgstr "%1 elhagyta a tĆ”rsalgĆ”st, inaktĆ­vvĆ” vĆ”lt." -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "Elfoglalt" +#: chat/chat.cpp:215 +#, fuzzy +msgid "%1 has left the chat." +msgstr "%1 elhagyta a tĆ”rsalgĆ”st." -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "LĆ”thatatlan" +#: chat/chat.cpp:364 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 and %2" +msgstr "%1 Ć©s %2 - TĆ”rsalgĆ”s" -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "InaktĆ­v" +#: chat/chat.cpp:371 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 et al." +msgstr "%1 Ć©s mĆ”sok - TĆ”rsalgĆ”s" -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "Kijelentkezve" +#: chat/chat.cpp:630 +#, fuzzy +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" +msgstr " (Ez egy automatikusan küldƶtt üzenet)" -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "Telefon" +#: chat/chat.cpp:934 +#, fuzzy +msgid "You received a wink from %1." +msgstr "AnimĆ”ciót kaptĆ”l tőle: %1 " -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "EbĆ©d" +#: chat/chat.cpp:971 +msgid "" +"The wink could not be displayed. Make sure you have 'cabextract' installed." +msgstr "" +"Az animĆ”ció nem jelenĆ­thető meg. Győződj meg róla, hogy a 'cabextract' " +"telepĆ­tve van." -#: chat/chatmaster.cpp:1061 +#: chat/chat.cpp:980 +msgid "The wink could not be displayed. The data could not be read." +msgstr "Az animĆ”ció nem jelenĆ­thető meg. Az adat nem olvasható." + +#: chat/chat.cpp:1080 +#, fuzzy +msgid "You have received a wink from %1" +msgstr "AnimĆ”ciót kaptĆ”l tőle: %1 " + +#: chat/chat.cpp:1100 +#, fuzzy +msgid "You received a nudge from %1!" +msgstr "%1 rezgő figyelmeztetĆ©st küldƶtt." + +#: chat/chat.cpp:1119 +#, fuzzy +msgid "The message '%1' could not be sent." +msgstr "'%1' üzenet nem lett elküldve." + +#: chat/chat.cpp:1183 +msgid "You've sent a nudge to %1!" +msgstr "Rezgő figyelmeztetĆ©st küldtĆ©l neki: %1" + +#: chat/chat.cpp:1190 +msgid "You've sent a nudge!" +msgstr "Rezgő figyelmeztetĆ©st küldtĆ©l!" + +#: chat/chatmaster.cpp:1219 msgid "%1 is sending a wink: %2" msgstr "%1 animĆ”ciót küld: %2" -#: chat/chatmessagestyle.cpp:302 +#: chat/chatmessagestyle.cpp:298 msgid "%1 says:" msgstr "%1 üzenete:" -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 msgid "Add this emoticon: %1" msgstr "%1 emotikon hozzĆ”adĆ”sa" -#: chat/chatview.cpp:529 +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 +msgid "&Invite" +msgstr "&MeghĆ­vĆ”s" + +#: chat/chatview.cpp:695 msgid "" "Could not save chat log. Make sure you have permission to write in the " "folder where logs are being saved." @@ -982,8 +1499,7 @@ msgstr "" "A tĆ”rsalgĆ”si napló nem menthető. Győződj meg róla, hogy van Ć­rĆ”si " "jogosultsĆ”god a naplók kƶnyvtĆ”rĆ”ra." -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 msgid "" "The file '%1' already exists.\n" "do you want to overwrite it?" @@ -991,359 +1507,413 @@ msgstr "" "'%1' fĆ”jl mĆ”r lĆ©tezik.\n" "FelülĆ­rod?" -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 msgid "Overwrite File" msgstr "FĆ”jl felülĆ­rĆ”sa" -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 msgid "Over&write" msgstr "&FelülĆ­rĆ”s" -#: chat/chatview.cpp:977 +#: chat/chatview.cpp:1275 msgid "Add this &Emoticon..." msgstr "&Emotikon hozzĆ”adĆ”sa" -#: chat/chatview.cpp:984 +#: chat/chatview.cpp:1282 msgid "Send &Email" msgstr "&E-mail küldĆ©se" -#: chat/chatview.cpp:988 +#: chat/chatview.cpp:1286 msgid "Copy E&mail" msgstr "E-&mail mĆ”solĆ”sa" -#: chat/chatview.cpp:995 +#: chat/chatview.cpp:1293 msgid "Visit &Link" msgstr "UgrĆ”s a &link cĆ­mĆ©re" -#: chat/chatview.cpp:999 +#: chat/chatview.cpp:1297 msgid "Copy &Address" msgstr "&CĆ­m mĆ”solĆ”sa" -#: chat/chatview.cpp:1013 +#: chat/chatview.cpp:1312 msgid "&Copy text" msgstr "&Szƶveg mĆ”solĆ”sa" -#: chat/chatview.cpp:1014 +#: chat/chatview.cpp:1313 msgid "Select &All" msgstr "&Mindent kijelƶl" -#: chat/chatview.cpp:1015 +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 msgid "Save chat to &File" msgstr "TĆ”rsalgĆ”s mentĆ©se &fĆ”jlba" -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "TĆ”rsalgĆ”s" - -#: chat/chatwindow.cpp:239 -msgid "" -"You can't start this invitation because there are multiple contacts in this " -"chat." -msgstr "Nem tudod elindĆ­tani a meghĆ­vĆ”st, mert tƶbb partnerrel tĆ”rsalogsz." - -#: chat/chatwindow.cpp:276 -msgid "%1 has joined the chat." -msgstr "%1 csatlakozott a tĆ”rsalgĆ”shoz." - -#: chat/chatwindow.cpp:327 -msgid "The conversation went idle, %1 has left the chat." -msgstr "%1 elhagyta a tĆ”rsalgĆ”st, inaktĆ­vvĆ” vĆ”lt." - -#: chat/chatwindow.cpp:331 -msgid "%1 has left the chat." -msgstr "%1 elhagyta a tĆ”rsalgĆ”st." - -#: chat/chatwindow.cpp:593 -msgid "%1 - Chat" -msgstr "%1 - TĆ”rsalgĆ”s" - -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" -msgstr "%1 Ć©s %2 - TĆ”rsalgĆ”s" - -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" -msgstr "%1 Ć©s mĆ”sok - TĆ”rsalgĆ”s" - -#: chat/chatwindow.cpp:757 -msgid "Contacts" -msgstr "Partnerek" - -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 -msgid "Emoticons" -msgstr "Emotikonok" - -#: chat/chatwindow.cpp:819 -msgid "My emoticons" -msgstr "SajĆ”t emotikonok" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" -msgstr " (Ez egy automatikusan küldƶtt üzenet)" - -#: chat/chatwindow.cpp:1502 -msgid "" -"The wink could not be displayed. Make sure you have 'cabextract' installed." -msgstr "" -"Az animĆ”ció nem jelenĆ­thető meg. Győződj meg róla, hogy a 'cabextract' " -"telepĆ­tve van." - -#: chat/chatwindow.cpp:1511 -msgid "The wink could not be displayed. The data could not be read." -msgstr "Az animĆ”ció nem jelenĆ­thető meg. Az adat nem olvasható." - -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" -msgstr "AnimĆ”ciót kaptĆ”l tőle: %1 " - -#: chat/chatwindow.cpp:1755 -#, fuzzy -msgid "Show Side&bar" -msgstr "OldalsĆ”v" - -#: chat/chatwindow.cpp:1756 -#, fuzzy -msgid "Show the contact sidebar" -msgstr "Partnerek oldalsĆ”v megjelenĆ­tĆ©se/elrejtĆ©se" - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -#, fuzzy -msgid "Hide Side&bar" -msgstr "OldalsĆ”v" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -#, fuzzy -msgid "Hide the contact sidebar" -msgstr "Partnerek oldalsĆ”v megjelenĆ­tĆ©se/elrejtĆ©se" - -#: chat/chatwindow.cpp:1787 -msgid "The message '%1' could not be sent." -msgstr "'%1' üzenet nem lett elküldve." - -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" -msgstr "%1 rezgő figyelmeztetĆ©st küldƶtt." - -#: chat/chatwindow.cpp:1876 -msgid "You've sent a nudge to %1!" -msgstr "Rezgő figyelmeztetĆ©st küldtĆ©l neki: %1" - -#: chat/chatwindow.cpp:1883 -msgid "You've sent a nudge!" -msgstr "Rezgő figyelmeztetĆ©st küldtĆ©l!" - -#: chat/chatwindow.cpp:1972 -msgid "%1 is typing." -msgstr "%1 Ć­r." - -#: chat/chatwindow.cpp:1981 -msgid "%1 and %2 are typing." -msgstr "%1 Ć©s %2 üzenetet Ć­rnak." - -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." -msgstr "%1, %2 Ć©s %3 üzenetet Ć­rnak." - -#: chat/chatwindowinterface.cpp:175 +#: chat/chatwindow.cpp:489 msgid "&Chat" msgstr "&TĆ”rsalgĆ”s" -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 -msgid "&Invite" -msgstr "&MeghĆ­vĆ”s" - -#: chat/chatwindowinterface.cpp:179 +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "&FĆ”jl küldĆ©se" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "&MegbeszĆ©lĆ©s kezdĆ©se" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 msgid "Send a &Nudge!" msgstr "Rezgő figyelmeztetĆ©s küldĆ©se" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "TĆ”rsalgĆ”s mentĆ©se" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 #, fuzzy msgid "&Emoticons" msgstr "Emotikonok" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +#, fuzzy +msgid "Close &All Tabs" +msgstr "Fül bezĆ”rĆ”sa" + +#: chat/chatwindow.cpp:504 #, fuzzy msgid "Meeting" msgstr "BeĆ”llĆ­tĆ”sok" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "&MegbeszĆ©lĆ©s indĆ­tĆ”sa vagy befejezĆ©se" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "&BetűtĆ­pus módosĆ­tĆ”sa" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "BetűtĆ­pus &szĆ­nĆ©nek módosĆ­tĆ”sa" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 #, fuzzy msgid "&Font" msgstr "&Kapcsolat" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 #, fuzzy msgid "Font &Color" msgstr "BetűtĆ­pus &szĆ­nĆ©nek módosĆ­tĆ”sa" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +msgid "Emoticons" +msgstr "Emotikonok" + +#: chat/chatwindow.cpp:658 +msgid "My emoticons" +msgstr "SajĆ”t emotikonok" + +#: chat/chatwindow.cpp:738 #, fuzzy msgid "&Settings" msgstr "BeĆ”llĆ­tĆ”sok" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "&Emotikonok megjelenĆ­tĆ©se" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +#, fuzzy +msgid "Hide Side&bar" +msgstr "OldalsĆ”v" + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "OldalsĆ”v" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +#, fuzzy +msgid "Hide the contact sidebar" +msgstr "Partnerek oldalsĆ”v megjelenĆ­tĆ©se/elrejtĆ©se" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +#, fuzzy +msgid "Close all tabs" +msgstr "Fül bezÔrÔsa" + +#: chat/chatwindow.cpp:856 +#, fuzzy +msgid "Close current tab" +msgstr "Fül bezÔrÔsa" + +#: chat/chatwindow.cpp:1467 +#, fuzzy +msgid "Show Side&bar" +msgstr "OldalsÔv" + +#: chat/chatwindow.cpp:1468 +#, fuzzy +msgid "Show the contact sidebar" +msgstr "Partnerek oldalsÔv megjelenítése/elrejtése" + +#: chat/chatwindow.cpp:1565 +msgid "%1 is typing." +msgstr "%1 ír." + +#: chat/chatwindow.cpp:1575 +msgid "%1 and %2 are typing." +msgstr "%1 és %2 üzenetet írnak." + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "%1, %2 és %3 üzenetet írnak." + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "TÔrsalgÔs" + +#: chat/chatwindow.cpp:1615 +#, fuzzy +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "%1 - TÔrsalgÔs" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "E-mail küldé&se" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 msgid "&View Profile" msgstr "&Profil megjelenítése" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "Partner &felvétele" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 msgid "A&llow Contact" msgstr "Partner &engedélyezése" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 msgid "&Delete Contact" msgstr "Partner &törlése" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "Partner ti<Ôsa" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "Partner tiltÔsÔnak &feloldÔsa" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 msgid "&Friendly Name" msgstr "&BarÔti név" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "&Személyes üzenet" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 msgid "&Email Address" msgstr "&E-mail cím" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "&MÔsolÔs..." -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 msgid "Blocked" msgstr "Letiltott" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 #, fuzzy msgid "The contact is %1" msgstr "A partner nincs bejelentkezve" -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +#, fuzzy +msgid "Add to Chat" +msgstr "Partner felvĆ©tele" + +#: chat/emoticonsidebar.cpp:213 +#, fuzzy +msgid "Insert new" +msgstr "Emotikon beszĆŗrĆ”sa" + +#: chat/emoticonsidebar.cpp:214 +msgid "Edit" +msgstr "" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +#, fuzzy +msgid "Remove" +msgstr "Tƶrƶlve" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 #, fuzzy msgid "Web Messenger" msgstr "Web tervezĆ©s" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +#, fuzzy +msgid "Windows Live Messenger %1" +msgstr "Web tervezĆ©s" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "ElĆ©rhető" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "Kijelentkezve" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "EngedĆ©lyezett" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "Tƶrƶlve" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 +#, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr "%1 %2" + +#: contactlistviewdelegate.cpp:150 #, fuzzy msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "%1 %2" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" -msgstr "A fiókhoz nem tartozik Hotmail cĆ­m!" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "TĆ”vol" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "Rƶgtƶn jƶvƶk" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "Elfoglalt" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "LĆ”thatatlan" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" +msgstr "InaktĆ­v" + +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "Telefon" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "EbĆ©d" + +#: dialogs/addcontactdialog.cpp:48 #, fuzzy msgid "Add a Contact" msgstr "Partner felvĆ©tele" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 #, fuzzy msgid "No group" msgstr "Csoport tƶrlĆ©se" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 msgid "Add New Emoticon" msgstr "Új emotikon hozzĆ”adĆ”sa" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "Emotikonok" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "\"%1\" emotikon mĆ”r lĆ©tezik, lecserĆ©led?" @@ -1351,65 +1921,69 @@ msgstr "\"%1\" emotikon mĆ”r lĆ©tezik, lecserĆ©led?" msgid "Specify an Away message" msgstr "TĆ”vollĆ©t üzenet megadĆ”sa" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "AlternatĆ­v nĆ©v hasznĆ”lata e szemĆ©lyhez" +#: dialogs/contactaddeduserdialog.cpp:85 +#, fuzzy +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " +msgstr "" +"%1\n" +"felvett a partnerlistĆ”jĆ”ra. A Te vĆ”lasztĆ”sod:" -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" -msgstr "BuborĆ©kjelző megjelenĆ­tĆ©se, amikor a partner be- vagy kijelentkezik" +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "Kapcsolódva" -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "KĆ©p:" +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +msgid "Not seen yet" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "Hang:" +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +#, fuzzy +msgid "No messages yet" +msgstr "&Idő megjelenĆ­tĆ©se a tĆ”rsalgĆ”sok üzeneteiben" -#: dialogs/contactpropertiesdialog.cpp:234 -msgid "Contact Properties for %1" -msgstr "%1 partner adatai" +#: dialogs/contactpropertiesdialog.cpp:381 +msgid "Last seen: %1" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " -msgstr "E-mail cĆ­m: " +#: dialogs/contactpropertiesdialog.cpp:382 +msgid "Last message: %1" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "Jelenlegi nĆ©v:" +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "E-mail" -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" -msgstr "HĆ”lózat ablak" +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "Levelező kliens" -#: dialogs/networkwindow.cpp:57 +#: dialogs/networkwindow.cpp:79 #, fuzzy msgid "S&ave tab" msgstr "Fül mentĆ©se" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 #, fuzzy msgid "C&lear tab" msgstr "Fül tƶrlĆ©se" -#: dialogs/networkwindow.cpp:59 -#, fuzzy -msgid "Cl&ose tab" -msgstr "Fül bezĆ”rĆ”sa" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 #, fuzzy msgid "" "No connections are present.\n" "Cannot open the Network Window." msgstr "Nincsenek kapcsolatok. A hĆ”lózat ablak nem nyitható meg." -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 #, fuzzy msgid "" "Could not save the Network Window log. Make sure you have permission to " @@ -1418,58 +1992,87 @@ msgstr "" "A hĆ”lózat ablak napló nem menthető. Győződj meg róla, hogy van Ć­rĆ”si " "jogosultsĆ”god a naplók kƶnyvtĆ”rĆ”ra." -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "A fő kapcsolat fül nem zĆ”rható be." -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +#, fuzzy +msgid "Cannot send commands to this kind of connection!" +msgstr "A fő kapcsolat fül nem zĆ”rható be." + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "MegszakĆ­tva" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "Sikertelen!" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 msgid "Completed" msgstr "KĆ©sz" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "%1 MB" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "%1 kB" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "%1 byte" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +#, fuzzy +msgid "%1 of %2 received." msgstr "%1 / %2 fogadva" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +#, fuzzy +msgid "%1 of %2 sent." msgstr "%1 / %2 elküldve" -#: dialogs/transferwindow.cpp:55 -msgid "File Transfers" -msgstr "FĆ”jlĆ”tvitelek" +#: dialogs/transferentry.cpp:373 +msgid "infinite" +msgstr "" -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 #, fuzzy msgid "Cl&ean Up" msgstr "&TisztĆ­tĆ”s" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " "the theme folder '%1'." @@ -1477,408 +2080,450 @@ msgstr "" "Az emotikon tĆ©ma nem menthető. Győződj meg róla, hogy van Ć­rĆ”si " "jogosultsĆ”god e tĆ©makƶnyvtĆ”rra: '%1'." -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 msgid "Smile" msgstr "Mosoly" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "AnimĆ”ció" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "NyelvƶltĆ©s" -#: emoticontheme.cpp:797 +#: emoticontheme.cpp:812 msgid "Big smile" msgstr "Vigyor" -#: emoticontheme.cpp:798 +#: emoticontheme.cpp:813 msgid "Sad" msgstr "SzomorĆŗ" -#: emoticontheme.cpp:799 +#: emoticontheme.cpp:814 msgid "Crying" msgstr "SĆ­r" -#: emoticontheme.cpp:800 +#: emoticontheme.cpp:815 msgid "Angry" msgstr "MĆ©rges" -#: emoticontheme.cpp:801 +#: emoticontheme.cpp:816 msgid "Confused" msgstr "Zavarodott" -#: emoticontheme.cpp:802 +#: emoticontheme.cpp:817 msgid "Embarrassed" msgstr "Zavarban van" -#: emoticontheme.cpp:803 +#: emoticontheme.cpp:818 msgid "Disappointed" msgstr "Csalódott" -#: emoticontheme.cpp:804 +#: emoticontheme.cpp:819 msgid "Hot" msgstr "Forró" -#: emoticontheme.cpp:805 +#: emoticontheme.cpp:820 msgid "Baring teeth" msgstr "VicsorgĆ”s" -#: emoticontheme.cpp:806 +#: emoticontheme.cpp:821 msgid "Nerd" msgstr "Idióta" -#: emoticontheme.cpp:807 +#: emoticontheme.cpp:822 msgid "Sick" msgstr "Beteg" -#: emoticontheme.cpp:808 +#: emoticontheme.cpp:823 msgid "Surprised" msgstr "Meglepett" -#: emoticontheme.cpp:809 +#: emoticontheme.cpp:824 msgid "Party" msgstr "Party" -#: emoticontheme.cpp:810 +#: emoticontheme.cpp:825 msgid "Sleepy" msgstr "Ɓlmos" -#: emoticontheme.cpp:811 +#: emoticontheme.cpp:826 msgid "Thinking" msgstr "Gondolkodó" -#: emoticontheme.cpp:812 +#: emoticontheme.cpp:827 msgid "Don't tell anyone" msgstr "Ne mondd el senkinek" -#: emoticontheme.cpp:813 +#: emoticontheme.cpp:828 msgid "Secret telling" msgstr "Titok" -#: emoticontheme.cpp:814 +#: emoticontheme.cpp:829 msgid "Eye-rolling" msgstr "Meglepődik" -#: emoticontheme.cpp:815 +#: emoticontheme.cpp:830 msgid "Sarcastic" msgstr "GĆŗnyos" -#: emoticontheme.cpp:816 +#: emoticontheme.cpp:831 msgid "I don't know" msgstr "Nem tudom" -#: emoticontheme.cpp:817 +#: emoticontheme.cpp:832 msgid "Be right back" msgstr "Rƶgtƶn jƶvƶk" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "Angyal" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "ƖlelĆ©s (fiĆŗ)" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "FiĆŗ" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "Vƶrƶs szĆ­v" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "Vƶrƶs rózsa" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "OkĆ©!" -#: emoticontheme.cpp:824 +#: emoticontheme.cpp:839 msgid "Dog face" msgstr "Kutya pofa" -#: emoticontheme.cpp:825 +#: emoticontheme.cpp:840 msgid "Sun" msgstr "Nap" -#: emoticontheme.cpp:826 +#: emoticontheme.cpp:841 msgid "Devil" msgstr "Ɩrdƶg" -#: emoticontheme.cpp:827 +#: emoticontheme.cpp:842 msgid "Right hug" msgstr "ƖlelĆ©s (lĆ”ny)" -#: emoticontheme.cpp:828 +#: emoticontheme.cpp:843 msgid "Girl" msgstr "LĆ”ny" -#: emoticontheme.cpp:829 +#: emoticontheme.cpp:844 msgid "Broken heart" msgstr "Tƶrƶtt szĆ­v" -#: emoticontheme.cpp:830 +#: emoticontheme.cpp:845 msgid "Wilted rose" msgstr "Hervadó rózsa" -#: emoticontheme.cpp:831 +#: emoticontheme.cpp:846 msgid "Thumbs down" msgstr "Na ne..." -#: emoticontheme.cpp:832 +#: emoticontheme.cpp:847 msgid "Cat face" msgstr "Macska pofa" -#: emoticontheme.cpp:833 +#: emoticontheme.cpp:848 msgid "Sleeping half-moon" msgstr "Alvó fĆ©lhold" -#: emoticontheme.cpp:834 +#: emoticontheme.cpp:849 msgid "Red lips" msgstr "Vƶrƶs ajkak" -#: emoticontheme.cpp:835 +#: emoticontheme.cpp:850 msgid "Clapping" msgstr "Taps" -#: emoticontheme.cpp:836 +#: emoticontheme.cpp:851 msgid "Crossed fingers" msgstr "Keresztezett ujjak" -#: emoticontheme.cpp:837 +#: emoticontheme.cpp:852 msgid "Auto" msgstr "Autó" -#: emoticontheme.cpp:838 +#: emoticontheme.cpp:853 msgid "Airplane" msgstr "RepülőgĆ©p" -#: emoticontheme.cpp:839 +#: emoticontheme.cpp:854 msgid "Turtle" msgstr "Teknős" -#: emoticontheme.cpp:840 +#: emoticontheme.cpp:855 msgid "Snail" msgstr "KĆ­gyó" -#: emoticontheme.cpp:841 +#: emoticontheme.cpp:856 msgid "Black sheep" msgstr "Fekete bĆ”rĆ”ny" -#: emoticontheme.cpp:842 +#: emoticontheme.cpp:857 msgid "Goat" msgstr "Kecske" -#: emoticontheme.cpp:843 +#: emoticontheme.cpp:858 msgid "Vampire bat" msgstr "DenevĆ©r" -#: emoticontheme.cpp:844 +#: emoticontheme.cpp:859 msgid "Pizza" msgstr "Pizza" -#: emoticontheme.cpp:845 +#: emoticontheme.cpp:860 msgid "Beer mug" msgstr "Sƶrƶskorsó" -#: emoticontheme.cpp:846 +#: emoticontheme.cpp:861 msgid "Martini glass" msgstr "Martinis pohĆ”r" -#: emoticontheme.cpp:847 +#: emoticontheme.cpp:862 msgid "Coffee cup" msgstr "KĆ”vĆ©scsĆ©sze" -#: emoticontheme.cpp:848 +#: emoticontheme.cpp:863 msgid "Birthday cake" msgstr "SzületĆ©snapi torta" -#: emoticontheme.cpp:849 +#: emoticontheme.cpp:864 msgid "Plate" msgstr "TĆ”nyĆ©r" -#: emoticontheme.cpp:850 +#: emoticontheme.cpp:865 msgid "Bowl" msgstr "TĆ”l" -#: emoticontheme.cpp:851 +#: emoticontheme.cpp:866 msgid "Star" msgstr "Csillag" -#: emoticontheme.cpp:852 +#: emoticontheme.cpp:867 msgid "Rainbow" msgstr "SzivĆ”rvĆ”ny" -#: emoticontheme.cpp:853 +#: emoticontheme.cpp:868 msgid "Stormy cloud" msgstr "Viharfelhő" -#: emoticontheme.cpp:854 +#: emoticontheme.cpp:869 msgid "Lightning" msgstr "VillĆ”mlĆ”s" -#: emoticontheme.cpp:855 +#: emoticontheme.cpp:870 msgid "Umbrella" msgstr "Esernyő" -#: emoticontheme.cpp:856 +#: emoticontheme.cpp:871 msgid "Island with a palm tree" msgstr "Sziget pĆ”lmafĆ”val" -#: emoticontheme.cpp:857 +#: emoticontheme.cpp:872 msgid "Telephone receiver" msgstr "Telefonkagyló" -#: emoticontheme.cpp:858 +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "Mobiltelefon" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "E-mail" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 msgid "Clock" msgstr "Ɠra" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 msgid "Camera" msgstr "Kamera" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "Filmszalag" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "Jegyzet" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "Bilincs" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 msgid "Money" msgstr "PĆ©nz" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "Izzó" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "Cigaretta" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "Focilabda" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "AjĆ”ndĆ©k" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "X-Box" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "SzĆ”mĆ­tógĆ©p" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 msgid "KMess Icon" msgstr "KMess ikon" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "A szerver nem Ć©rhető el" + +#: initialview.cpp:377 +msgid "Connect" +msgstr "KapcsolódĆ”s" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "&KijelentkezĆ©s" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "" -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "" -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "Új &csoport" + +#: kmess.cpp:226 msgid "Add a group" msgstr "Csoport hozzĆ”adĆ”sa" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "A csoport Ćŗj neve:" -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "A megadott partnercĆ­m Ć©rvĆ©nytelen: '%1'" - -#: kmess.cpp:638 +#: kmess.cpp:569 msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" msgstr "" "Biztosan el akarod tĆ”volĆ­tani %1 partnert a partnerlistĆ”dról?" -#: kmess.cpp:640 +#: kmess.cpp:571 msgid "Remove contact" msgstr "Partner tƶrlĆ©se" -#: kmess.cpp:641 kmess.cpp:684 -#, fuzzy -msgid "Remove" -msgstr "Tƶrƶlve" - -#: kmess.cpp:642 +#: kmess.cpp:573 msgid "Remove and block" msgstr "TƶrlĆ©s Ć©s tiltĆ”s" -#: kmess.cpp:681 +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "" "Biztosan el akarod tĆ”volĆ­tani %1 csoportot a partnerlistĆ”dról?" -#: kmess.cpp:683 -msgid "Remove group" -msgstr "Csoport tƶrlĆ©se" +#: kmess.cpp:631 +#, fuzzy +msgctxt "dialog button" +msgid "Remove" +msgstr "Tƶrƶlve" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "SpeciĆ”lis csoport, nem módosĆ­tható" -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 msgid "Rename group" msgstr "Csoport Ć”tnevezĆ©se" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "Kapcsolódva" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "AzonosƭtƔs sikertelen" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "Kijelentkezett" -#: kmess.cpp:1441 +#: kmess.cpp:1408 +#, fuzzy msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" "

A KMess nem fogja tudni kezelni a hangokat Ʃs az ƩrtesƭtƩseket.

A KMess 'eventsrc' fÔjlja nem talÔlható egyik könyvtÔrban sem ezek " "közül: %1

Ellenőrizd a telepĆ­tĆ©st, Ć©s mĆ”sold a hiĆ”nyzó fĆ”jlt a " "felsorolt kƶnyvtĆ”rak egyikĆ©be.

" -#: kmess.cpp:1445 +#: kmess.cpp:1412 msgid "Error with notifications" msgstr "Hiba az Ć©rtesĆ­tĆ©seknĆ©l" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "KMess" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "&Műveletek" @@ -1900,784 +2545,711 @@ msgstr "Partner k&eresĆ©se" msgid "Search by &Interest" msgstr "KeresĆ©s Ć©r&deklődĆ©s szerint" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "Partner k&eresĆ©se" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "Új &fiók" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "Fiók &beĆ”llĆ­tĆ”sok" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "Bejele&ntkezĆ©s" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "&KijelentkezĆ©s" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "&Profilom megjelenĆ­tĆ©se" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "&StĆ”tuszom" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "TĆ”vol automatikus vĆ”lasszal" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "&EngedĆ©lyezett partnerek megjelenĆ­tĆ©se" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 msgid "Show &Offline Contacts" msgstr "&Kijelentkezett partnerek megjelenĆ­tĆ©se" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "&Tƶrƶlt partnerek megjelenĆ­tĆ©se" -#: kmessinterface.cpp:303 +#: kmessinterface.cpp:318 #, fuzzy -msgid "Show &Display Pictures" +msgid "Show &Empty Groups" +msgstr "&Emotikonok megjelenĆ­tĆ©se" + +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" msgstr "KĆ©p megjelenĆ­tĆ©se" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "Mosoly" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "Partnerek &rendezĆ©si módja" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "Csoport" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "Online/Offline" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "Ɓ&tvitel ablak megjelenĆ­tĆ©se" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "&HĆ”lózat ablak megjelenĆ­tĆ©se" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "VĆ©tel itt: %1" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +msgid "[%1] %2 goes online" +msgstr "" + +#: kmessview.cpp:363 +msgid "[%1] %2 goes offline" +msgstr "" + +#: kmessview.cpp:559 msgid "Cha&t" msgstr "&TĆ”rsalgĆ”s" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "&TulajdonsĆ”gok" -#: kmessview.cpp:492 +#: kmessview.cpp:569 msgid "&Remove from group" msgstr "Tƶr&lĆ©s a csoportból" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +#, fuzzy +msgid "&Listening Music" +msgstr "VĆ©tel itt: %1" + +#: kmessview.cpp:601 msgid "&Copy to Group" msgstr "&MĆ”solĆ”s mĆ”sik csoportba" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "Ɓ&thelyezĆ©s mĆ”sik csoportba" -#: kmessview.cpp:549 +#: kmessview.cpp:646 msgid "Move Group &Down" msgstr "Csoport mozgatĆ”sa &lefelĆ©" -#: kmessview.cpp:550 +#: kmessview.cpp:647 msgid "Move Group &Up" msgstr "Csoport mozgatĆ”sa &felfelĆ©" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "Csoport &tƶrlĆ©se" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "Csoport Ć”t&nevezĆ©se" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 #, fuzzy msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "E-mail" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "" -#: kmessview.cpp:918 +#: kmessview.cpp:1075 +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "" + +#: kmessview.cpp:1076 +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "" + +#: kmessview.cpp:1085 #, fuzzy msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "
%1 (%2)" -#: kmessview.cpp:921 +#: kmessview.cpp:1090 #, fuzzy -msgctxt "Contacts count in group tooltip" +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "Partnerek" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +#, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "A partner nincs bejelentkezve" + +#: kmessview.cpp:1504 #, fuzzy msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "Add meg a szemĆ©lyes üzeneted itt" -#: kmessview.cpp:1543 -msgid "You have 1 new e-mail in your inbox." -msgstr "1 Ćŗj leveled Ć©rkezett." +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" -#: kmessview.cpp:1547 -msgid "You have %1 new emails in your inbox." -msgstr "%1 Ćŗj leveled Ć©rkezett." - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "KMess" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 #, fuzzy msgid "Project support" msgstr "P4-Context mező tĆ”mogatĆ”s" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 #, fuzzy msgid "Current developer" msgstr "GnomeMeeting fejlesztő" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 msgid "" "German translation, testing, documentation, web master, project management, " "etc..." msgstr "" "NĆ©met fordĆ­tĆ”s, tesztelĆ©s, dokumentĆ”ció, webmester, project kezelĆ©s, stb..." -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "Web tervezĆ©s" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "A fő Ć©s sĆ”rga/kĆ©k/viola emotikonkĆ©szletek, olasz fordĆ­tĆ”s" -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "Cartoon emotikonok" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "AlapĆ©rtelmezett hangok" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "Arab fordĆ­tĆ”s, fĆ”jlmentĆ©s javĆ­tĆ”sĆ”nak nemzetkƶzisĆ©tĆ©se" -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 msgid "More Arabic translation" msgstr "TovĆ”bbi arab fordĆ­tĆ”sok" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "BrazĆ­liai portugĆ”l fordĆ­tĆ”s" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 msgid "Catalan translation" msgstr "KatalĆ”n fordĆ­tĆ”s" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "" "EgyszerűsĆ­tett kĆ­nai fordĆ­tĆ”s, fĆ”jlküldĆ©s hibajavĆ­tĆ”sa, proxy kapcsolat kódja" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 msgid "More Simplified Chinese translation" msgstr "TovĆ”bbi egyszerűsĆ­tett kĆ­nai fordĆ­tĆ”s" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 msgid "Traditional Chinese translation" msgstr "HagyomĆ”nyos kĆ­nai fordĆ­tĆ”s" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 msgid "Danish translation" msgstr "DĆ”n fordĆ­tĆ”s" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 msgid "More Danish translation" msgstr "TovĆ”bbi dĆ”n fordĆ­tĆ”sok" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "Holland fordĆ­tĆ”s" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 msgid "More Dutch translation" msgstr "TovĆ”bbi holland fordĆ­tĆ”sok" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 msgid "Estonian translation" msgstr "Ɖszt fordĆ­tĆ”s" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 msgid "Finnish translation" msgstr "Finn fordĆ­tĆ”s" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 msgid "More Finnish translation" msgstr "TovĆ”bbi finn fordĆ­tĆ”sok" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "Francia fordĆ­tĆ”s" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 msgid "More French translation, MSN6 emoticon definitions" msgstr "TovĆ”bbi francia fordĆ­tĆ”s, MSN6 emotikon definĆ­ciók" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 msgid "More French translation" msgstr "Francia fordĆ­tĆ”s" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 msgid "Hungarian translation" msgstr "Magyar fordĆ­tĆ”s" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 msgid "More Italian translation" msgstr "TovĆ”bbi olasz fordĆ­tĆ”sok" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "Koreai fordĆ­tĆ”s" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 msgid "Norsk BokmĆ„l translation" msgstr "NorvĆ©g Bokmal fordĆ­tĆ”s" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 msgid "Slovenian translation" msgstr "SzlovĆ©n fordĆ­tĆ”s" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "Spanyol fordĆ­tĆ”s" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 msgid "More Spanish translation" msgstr "TovĆ”bbi spanyol fordĆ­tĆ”sok" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 msgid "Swedish translation" msgstr "SvĆ©d fordĆ­tĆ”s" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 msgid "Thai translation" msgstr "Thai fordĆ­tĆ”s" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "Tƶrƶk fordĆ­tĆ”s" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "TovĆ”bbi tƶrƶk fordĆ­tĆ”s" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -#, fuzzy -msgid "Guido Solinas" -msgstr "&ElĆ©rhető" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "FĆ”jlĆ”tvitelek" + +#: main.cpp:134 msgid "P4-Context field support" msgstr "P4-Context mező tĆ”mogatĆ”s" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "Ximerama javĆ­tĆ”sok" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "Eredeti fĆ”jl vĆ©teli kód" -#: main.cpp:120 -msgid "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" msgstr "" -#: main.cpp:120 +#: main.cpp:138 +#, fuzzy +msgid "KWallet support" +msgstr "P4-Context mező tĆ”mogatĆ”s" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "Külƶnbƶző tƶbbnyelvűsĆ©gi javĆ­tĆ”sok." + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "Külƶnbƶző tƶbbnyelvűsĆ©gi javĆ­tĆ”sok." -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "GnomeMeeting fejlesztő" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "Mindenes" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "Alapƶtlet Ć©s kódrĆ©szletek" -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 +#: main.cpp:150 msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "Előző buborĆ©kjelző kódja, kezdeti p2p kód, msn feladatkezelő" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "TĆ©tlensĆ©gi időzĆ­tő kódja" -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 +#: main.cpp:152 msgid "Close-to-tray icon screenshot code" msgstr "" -#: main.cpp:131 +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 msgid "Your name here?" msgstr "A te neved itt lesz?" -#: main.cpp:131 +#: main.cpp:156 #, fuzzy msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" "Kƶszƶnettel vesszük a hibajavĆ­tĆ”saidat Ć©s patch-eidet a KMess segĆ­tsĆ©g " "fórumokban!\n" "Ha Ćŗgy Ć©rzed, a neved hiĆ”nyzik innĆ©t, vedd fel velünk a kapcsolatot!" -#: main.cpp:134 +#: main.cpp:159 #, fuzzy msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Neved" -#: main.cpp:135 +#: main.cpp:160 #, fuzzy msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "E-mail cĆ­med:" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "Automatikus bejelentkezĆ©s a megadott e-mail cĆ­mmel" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 msgid "The contact cancelled the session." msgstr "A partner visszavonta a folyamatot." -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 msgid "The contact rejected the invitation." msgstr "A partner visszautasĆ­totta a meghĆ­vĆ”st." -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 msgid "You have cancelled the session." msgstr "Visszavontad a folyamatot." -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "VisszautasĆ­tottad a meghĆ­vĆ”st." -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +#, fuzzy +msgid "Do you want to accept or cancel?" msgstr " Elfogadod vagy elutasĆ­tod?" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +#, fuzzy +msgid "Click to cancel." msgstr "VisszavonĆ”s." -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 msgid "Do you want to accept the file: %1 (%2)" msgstr "Elfogadod %1 fĆ”jlt (%2 byte)" -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 msgid "The transfer of %1 failed. Couldn't open file." msgstr "%1 fĆ”jl Ć”tvitele sikertelen. A fĆ”jl nem nyitható meg." -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "Ɓtvitel elfogadva." + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 msgid "Connecting to %1, port %2" msgstr "KapcsolódĆ”s %1 cĆ­mhez, %2 porton" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 msgid "The transfer was cancelled" msgstr "Az Ć”tvitel megszakĆ­tva" -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 msgid "Connection established" msgstr "A kapcsolat lĆ©rejƶtt" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 msgid "Successfully transferred file: %1" msgstr "%1 fĆ”jl Ć”tvitele sikeres." -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 msgid "The transfer of %1 failed. The file does not exist." msgstr "%1 Ć”tvitele sikertelen. A fĆ”jl nem talĆ”lható." -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 msgid "The transfer of %1 failed. The file could not be read." msgstr "%1 Ć”tvitele sikertelen. A fĆ”jl nem olvasható." -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 msgid "Sending file %1" msgstr "%1 fĆ”jl küldĆ©se." -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "Ɓtvitel elfogadva." - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "Opciók egyeztetĆ©se a kapcsolódĆ”shoz" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "A fĆ”jlĆ”tvitel meghĆ­vĆ”s tƶrƶlve. A vett adat rossz." -#: network/applications/filetransferp2p.cpp:345 -msgid "The transfer of %1 failed. Couldn't open file" +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." +msgstr "" + +#: network/applications/filetransferp2p.cpp:348 +#, fuzzy +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "" +"'%1' fĆ”jl mĆ”r lĆ©tezik.\n" +"FelülĆ­rod?" + +#: network/applications/filetransferp2p.cpp:378 +#, fuzzy +msgid "The transfer of file "%1" failed. Couldn't save the file." msgstr "%1 fĆ”jl Ć”tvitele sikertelen. A fĆ”jl nem nyitható meg." -#: network/applications/filetransferp2p.cpp:524 -msgid "The contact cancelled the transfer." +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 +#, fuzzy +msgid "The contact has cancelled the transfer of file "%1"." msgstr "A partner visszavonta a küldĆ©st." -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "Visszavontad a folyamatot." + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "A fĆ”jl nem Ć­rható" -#: network/applications/filetransferp2p.cpp:768 -msgid "The transfer of %1 failed. The file does not exist." +#: network/applications/filetransferp2p.cpp:676 +#, fuzzy +msgid "Successfully sent file "%1"." +msgstr "%1 fĆ”jl Ć”tvitele sikeres." + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "%1 fĆ”jl Ć”tvitele sikeres." + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "%1 Ć”tvitele sikertelen. A fĆ”jl nem talĆ”lható." -#: network/applications/filetransferp2p.cpp:773 -msgid "The transfer of %1 failed. The file could not be read." +#: network/applications/filetransferp2p.cpp:818 +#, fuzzy +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "%1 Ć”tvitele sikertelen. A fĆ”jl nem olvasható." -#: network/applications/filetransferp2p.cpp:809 -msgid "Sending file %1 (%2)" +#: network/applications/filetransferp2p.cpp:855 +#, fuzzy +msgid "Sending file "%1" (%2)." msgstr "%1 fĆ”jl küldĆ©se (%2)" -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "A partner visszavonta a küldĆ©st." + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "MegbeszĆ©lĆ©sre kaptĆ”l meghĆ­vĆ”st (a GnomeMeeting hasznĆ”latĆ”val)." -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 msgid "Starting GnomeMeeting. Connecting to %1." msgstr "Ekiga (GnomeMeeting) indĆ­tĆ”sa. KapcsolódĆ”s: %1." -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "Partner meghĆ­vĆ”sa megbeszĆ©lĆ©sre." -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "A meghĆ­vĆ”s elutasĆ­tva. MĆ”s kliens nem tĆ”mogatja." -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 msgid "The invitation was aborted. An internal error occured." msgstr "A meghĆ­vĆ”s megszakĆ­tva. Belső hiba tƶrtĆ©nt." -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "A meghĆ­vĆ”s megszakĆ­tva. A felhasznĆ”ló nem vĆ”laszolt." -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "A meghĆ­vĆ”s megszakĆ­tva. IdőtĆŗllĆ©pĆ©s a fĆ”jladatra vĆ”rakozĆ”s kƶzben." -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "A meghĆ­vĆ”s megszakĆ­tva. A szerver bontotta a csevegĆ©s kapcsolatot." -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 msgid "The invitation was aborted." msgstr "A meghĆ­vĆ”s megszakĆ­tva." -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "A partner az asztala megosztĆ”sĆ”t kezdemĆ©nyezte." -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 msgid "Starting KRDC. Connecting to %1." msgstr "KRDC indĆ­tĆ”sa. KapcsolódĆ”s: %1." -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." -msgstr "" -"A partner egy olyan MSN6 lehetősĆ©get kezdemĆ©nyezett, amit a KMess nem " -"tĆ”mogat." +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +msgid "The contact rejected the invitation. An internal error occured." +msgstr "A partner elutasĆ­totta a meghĆ­vĆ”st. Belső hiba lĆ©pett fel." -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +msgid "The transfer failed." +msgstr "Az Ć”tvitel nem sikerült." + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." @@ -2685,68 +3257,62 @@ msgstr "" "A meghĆ­vĆ”s megszakĆ­tva. A partner rossz adatot küldƶtt, vagy a KMess nem " "tĆ”mogatja azt." -#: network/applications/p2papplication.cpp:1503 -msgid "The transfer failed. Data preparation failed." -msgstr "Az Ć”tvitel nem sikerült. AdatelőkĆ©szĆ­tĆ©s sikertelen." - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -msgid "The contact rejected the invitation. An internal error occured." -msgstr "A partner elutasĆ­totta a meghĆ­vĆ”st. Belső hiba lĆ©pett fel." - -#: network/applications/p2papplication.cpp:1626 -msgid "The transfer failed." -msgstr "Az Ć”tvitel nem sikerült." - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "Az Ć”tvitel nem sikerült. A partner rossz adatot küldƶtt, vagy a KMess nem " "tĆ”mogatja azt." -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "Az Ć”tvitel nem sikerült. A felhasznĆ”ló nem vĆ”laszolt." + +#: network/applications/p2papplicationbase.cpp:1015 +msgid "The transfer failed. An internal error occured." +msgstr "Az Ć”tvitel nem sikerült. Belső hiba lĆ©pett fel." + +#: network/applications/p2papplicationbase.cpp:1176 +msgid "The transfer failed. Couldn't open data source." +msgstr "Az Ć”tvitel nem sikerült. Az adatforrĆ”s nem nyitható meg." + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "" +"A partner egy olyan MSN6 lehetősĆ©get kezdemĆ©nyezett, amit a KMess nem " +"tĆ”mogat." + +#: network/applications/p2papplication.cpp:1071 +msgid "The transfer failed. Data preparation failed." +msgstr "Az Ć”tvitel nem sikerült. AdatelőkĆ©szĆ­tĆ©s sikertelen." + +#: network/applications/p2papplication.cpp:1178 msgid "The invitation was cancelled. Message was not directed to us." msgstr "A meghĆ­vĆ”s tƶrƶlve. Az üzenet nem nekünk szól." -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "Az Ć”tvitel nem sikerült. A partner rossz adatot küldƶtt, vagy a KMess nem " "tĆ”mogatja azt." -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "VĆ”rakozĆ”s kapcsolatra %1 cĆ­mmel, %2 porton" -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "VisszatĆ©rĆ©s a kƶzvetett fĆ”jlĆ”tvitelhez (ez lassĆŗ lehet)." -#: network/applications/p2papplication.cpp:3297 -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "Az Ć”tvitel nem sikerült. A felhasznĆ”ló nem vĆ”laszolt." - -#: network/applications/p2papplication.cpp:3316 -msgid "The transfer failed. An internal error occured." -msgstr "Az Ć”tvitel nem sikerült. Belső hiba lĆ©pett fel." - -#: network/applications/p2papplication.cpp:3693 -msgid "The transfer failed. Couldn't open data source." -msgstr "Az Ć”tvitel nem sikerült. Az adatforrĆ”s nem nyitható meg." - -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:3113 msgid "Waiting for connection" msgstr "VĆ”rakozĆ”s a kapcsolódĆ”sra" -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " "accept." @@ -2754,22 +3320,22 @@ msgstr "" "A meghĆ­vĆ”s tƶrƶlve. IdőtĆŗllĆ©pĆ©s a partner elfogadó vĆ”laszĆ”ra vĆ”rakozĆ”s " "kƶzben." -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." msgstr "A meghĆ­vĆ”s tƶrƶlve. IdőtĆŗllĆ©pĆ©s a kapcsolat lĆ©trehozĆ”sakor." -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "A meghĆ­vĆ”s tƶrƶlve. IdőtĆŗllĆ©pĆ©s az adatra vĆ”rakozĆ”s kƶzben." -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 msgid "You are invited to start a voice conversation." msgstr "Hang alapĆŗ beszĆ©lgetĆ©sre kaptĆ”l meghĆ­vĆ”st." -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 msgid "" "You are invited to start a voice conversation but support for this was not " "installed" @@ -2777,27 +3343,27 @@ msgstr "" "Hang alapĆŗ beszĆ©lgetĆ©sre kaptĆ”l meghĆ­vĆ”st, de ennek tĆ”mogatĆ”sa nincs " "telepĆ­tve" -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 msgid "You have cancelled the voice conversation." msgstr "Tƶrƶlted a hang alapĆŗ beszĆ©lgetĆ©st." -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "A meghĆ­vĆ”s tƶrƶlve. Az audio eszkƶz nem nyitható meg." -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 msgid "Start voice conversation. Connecting to %1." msgstr "Hang alapĆŗ beszĆ©lgetĆ©s indĆ­tĆ”sa. KapcsolódĆ”s: %1" -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 msgid "Start voice conversation. Listening on %1." msgstr "Hang alapĆŗ beszĆ©lgetĆ©s indĆ­tĆ”sa. VĆ©tel: %1" -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 msgid "Inviting the contact to a voice conversation." msgstr "Partner meghĆ­vĆ”sa hang alapĆŗ beszĆ©lgetĆ©sre." -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 msgid "The contact is inviting you for '%1', but this is not implemented yet." msgstr "A partner '%1' meghĆ­vĆ”st küldƶtt, de ez nem tĆ”mogatott." @@ -2838,639 +3404,778 @@ msgstr "Nem hozható lĆ©tre kapcsolat." msgid "Receiving file %1" msgstr "%1 fĆ”jl vĆ©tele" -#: network/msnconnection.cpp:477 -msgid "1 ping lost" -msgstr "1 ping elveszett" +#: network/msnconnection.cpp:589 +#, fuzzy +msgid "KMess could not access the remote webservice.
Details: %1" +msgstr "" +"A Kmess nem tudja elĆ©rni a tĆ”voli webszolgĆ”ltatĆ”st.\n" +"\n" +"RĆ©szletek: %1" -#: network/msnconnection.cpp:481 -msgid "%1 pings lost" -msgstr "%1 ping elveszett" - -#: network/msnconnection.cpp:496 -msgid "The connection to the server was lost." -msgstr "A szerverkapcsolat elveszett." - -#: network/msnconnection.cpp:704 +#: network/msnnotificationconnection.cpp:1317 #, fuzzy msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." -msgstr "" -"A KMess nem tudott kapcsolódni az MSN Messenger szolgĆ”ltatĆ”shoz.\n" -"Győződj meg róla, hogy az internetkapcsolatod aktĆ­v.\n" -"Rendszerhiba: %1 (%2 kód)" - -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "A tĆ”voli szerver lezĆ”rta a kapcsolatot." - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" -"A KMess nem tud kapcsolódni az MSN Messenger szerverekhez. Lehet, hogy az " -"MSN Messenger szerverek Ć”tmenetileg nem elĆ©rhetőek, vagy hiba van az " -"internetkapcsolatodban." - -#: network/msnnotificationconnection.cpp:724 -msgid "Show MSN Messenger Service status?" -msgstr "MSN Messenger Service Ć”llapotĆ”nak megjelenĆ­tĆ©se?" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "Szerverhiba" - -#: network/msnnotificationconnection.cpp:1344 -#, fuzzy -msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" msgstr "" "Nem tudsz bejelentkezni.\n" "MĆ”s klienssel vagy mĆ”s helyről mĆ”r bejelentkeztĆ©l.\n" " " -#: network/msnnotificationconnection.cpp:1558 +#: network/msnnotificationconnection.cpp:1532 msgid "Got synchronization" msgstr "SzinkronizĆ”lĆ”s" -#: network/msnnotificationconnection.cpp:1699 -msgid "Authenticating" +#: network/msnnotificationconnection.cpp:1670 +#, fuzzy +msgid "Authenticating..." msgstr "AzonosĆ­tĆ”s" -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "Fogadott felhasznĆ”lói megerősĆ­tĆ©s" - -#: network/msnnotificationconnection.cpp:1752 +#: network/msnnotificationconnection.cpp:1719 msgid "Waiting for contact list..." msgstr "VĆ”rakozĆ”s a partnerlistĆ”ra..." -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "Adatok küldĆ©se a kapcsolatkezelő szervernek" +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." +msgstr "" -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" +#: network/msnnotificationconnection.cpp:1894 +#, fuzzy +msgid "Authentication failed, please verify your account name and password." msgstr "" "Az azonosĆ­tĆ”s nem sikerült, ellenőrizd a felhasznĆ”lóneved Ć©s a jelszavad" -#: network/msnnotificationconnection.cpp:2042 +#: network/msnnotificationconnection.cpp:1993 msgid "Connecting..." msgstr "KapcsolódĆ”s..." -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" +#: network/msnnotificationconnection.cpp:2167 +#, fuzzy +msgid "Unknown command received from the server: %1" msgstr "A KMess ismeretlen parancsot kapott a szervertől: %1" -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 +#: network/msnnotificationconnection.cpp:2192 msgid "Invalid command syntax" msgstr "" -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -msgid "There was an internal error in KMess: %1" -msgstr "KMess belső hiba: %1" - -#: network/msnnotificationconnection.cpp:2243 +#: network/msnnotificationconnection.cpp:2196 msgid "Invalid command parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2246 +#: network/msnnotificationconnection.cpp:2199 msgid "The email you have tried to add is not a MSN Messenger account" msgstr "A megadott e-mail cĆ­m nincs regisztrĆ”lva az MSN Messenger-hez" -#: network/msnnotificationconnection.cpp:2249 +#: network/msnnotificationconnection.cpp:2204 msgid "Domain name missing" msgstr "" -#: network/msnnotificationconnection.cpp:2252 +#: network/msnnotificationconnection.cpp:2208 msgid "Already logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2255 +#: network/msnnotificationconnection.cpp:2211 msgid "The account name given is invalid" msgstr "A megadott fióknĆ©v Ć©rvĆ©nytelen." -#: network/msnnotificationconnection.cpp:2258 +#: network/msnnotificationconnection.cpp:2215 msgid "" "That account name is invalid, or your passport has not been confirmed yet" msgstr "A fióknĆ©v Ć©rvĆ©nytelen, vagy a passport-od nincs megerősĆ­tve." -#: network/msnnotificationconnection.cpp:2261 +#: network/msnnotificationconnection.cpp:2218 msgid "Your contact list is full" msgstr "A partnerlistĆ”d megtelt" -#: network/msnnotificationconnection.cpp:2264 +#: network/msnnotificationconnection.cpp:2223 msgid "Invalid SBP parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2267 +#: network/msnnotificationconnection.cpp:2226 msgid "This contact is already on your list" msgstr "A partner mĆ”r szerepel a listĆ”don" -#: network/msnnotificationconnection.cpp:2270 +#: network/msnnotificationconnection.cpp:2230 msgid "This contact is not on your list" msgstr "A partner nincs rajta a listĆ”don" -#: network/msnnotificationconnection.cpp:2273 +#: network/msnnotificationconnection.cpp:2234 msgid "This contact is not online" msgstr "A partner nincs bejelentkezve" -#: network/msnnotificationconnection.cpp:2276 +#: network/msnnotificationconnection.cpp:2239 msgid "Already in this mode" msgstr "" -#: network/msnnotificationconnection.cpp:2279 +#: network/msnnotificationconnection.cpp:2243 #, fuzzy msgid "Contact is in the opposite list" msgstr "A partner nincs rajta a listĆ”don" -#: network/msnnotificationconnection.cpp:2282 -msgid "Your contact list has too many groups" -msgstr "TĆŗl sok csoport van a partnerlistĆ”don (max: 30)" - -#: network/msnnotificationconnection.cpp:2285 -msgid "This group can't be changed" -msgstr "A csoport nem módosĆ­tható" - -#: network/msnnotificationconnection.cpp:2288 -msgid "This group is not empty" -msgstr "A csoport nem üres" - -#: network/msnnotificationconnection.cpp:2291 +#: network/msnnotificationconnection.cpp:2247 +#, fuzzy msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." msgstr "" "A csoportnĆ©v mĆ”r hasznĆ”latban van a Messenger vagy Hotmail partnerlistĆ”don" -#: network/msnnotificationconnection.cpp:2294 +#: network/msnnotificationconnection.cpp:2251 +msgid "Your contact list has too many groups" +msgstr "TĆŗl sok csoport van a partnerlistĆ”don (max: 30)" + +#: network/msnnotificationconnection.cpp:2255 +msgid "This group can't be changed" +msgstr "A csoport nem módosĆ­tható" + +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "TĆŗl sok csoport van a partnerlistĆ”don (max: 30)" + +#: network/msnnotificationconnection.cpp:2264 +msgid "This group is not empty" +msgstr "A csoport nem üres" + +#: network/msnnotificationconnection.cpp:2268 msgid "The group name is too long" msgstr "A csoport neve tĆŗl hosszĆŗ (max. 61 karakter)" -#: network/msnnotificationconnection.cpp:2297 +#: network/msnnotificationconnection.cpp:2273 msgid "Attempted to change group \"0\"" msgstr "" -#: network/msnnotificationconnection.cpp:2300 +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +msgid "There was an internal error in KMess: %1" +msgstr "KMess belső hiba: %1" + +#: network/msnnotificationconnection.cpp:2277 #, fuzzy msgid "Invalid Group" msgstr "Csoport Ć”t&nevezĆ©se" -#: network/msnnotificationconnection.cpp:2303 +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 msgid "Switchboard server failed" msgstr "Az üzenetkezelő szerver nem Ć©rhető el" -#: network/msnnotificationconnection.cpp:2306 +#: network/msnnotificationconnection.cpp:2287 msgid "Transfer to switchboard server failed" msgstr "A küldĆ©s az üzenetkezelő szervernek nem sikerült" -#: network/msnnotificationconnection.cpp:2309 +#: network/msnnotificationconnection.cpp:2291 msgid "Direct connection (MSNSLP) error, connection failed" msgstr "Kƶzvetlen kapcsolat (MSNSLP) hiba, a kapcsolódĆ”s sikertelen" -#: network/msnnotificationconnection.cpp:2312 +#: network/msnnotificationconnection.cpp:2295 msgid "Required field missing" msgstr "" -#: network/msnnotificationconnection.cpp:2315 +#: network/msnnotificationconnection.cpp:2299 msgid "Not logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" -msgstr "Hiba a kapcsolatlista lekĆ©rdezĆ©sĆ©nĆ©l, próbĆ”ld meg kĆ©sőbb" +#: network/msnnotificationconnection.cpp:2302 +#, fuzzy +msgid "No permissions given for this account" +msgstr "SajĆ”t emotikonok e fiókhoz:" -#: network/msnnotificationconnection.cpp:2322 +#: network/msnnotificationconnection.cpp:2307 msgid "Command is disabled" msgstr "" -#: network/msnnotificationconnection.cpp:2325 +#: network/msnnotificationconnection.cpp:2310 msgid "Your account is banned." msgstr "A fiókod tiltott." -#: network/msnnotificationconnection.cpp:2329 +#: network/msnnotificationconnection.cpp:2314 #, fuzzy msgid "Challenge response failed" msgstr "Az Ć”tvitel nem sikerült." -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" +#: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" +msgstr "" + +#: network/msnnotificationconnection.cpp:2323 +#, fuzzy +msgid "You are opening chat sessions too fast" msgstr "TĆŗl gyorsan nyitod meg a folyamatokat" -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" msgstr "TĆŗl sok nyitott folyamatod van" -#: network/msnnotificationconnection.cpp:2341 +#: network/msnnotificationconnection.cpp:2334 msgid "Unexpected command sequence" msgstr "" -#: network/msnnotificationconnection.cpp:2344 +#: network/msnnotificationconnection.cpp:2338 msgid "Bad friend name" msgstr "Rossz megjelenĆ­tendő nĆ©v" -#: network/msnnotificationconnection.cpp:2348 +#: network/msnnotificationconnection.cpp:2344 msgid "Bad CVR data" msgstr "" -#: network/msnnotificationconnection.cpp:2353 +#: network/msnnotificationconnection.cpp:2350 msgid "The server reports KMess is flooding it with too many data" msgstr "A szerver azt jelzi, hogy a KMess tĆŗl sok adatot küld neki (flood)" -#: network/msnnotificationconnection.cpp:2358 +#: network/msnnotificationconnection.cpp:2357 #, fuzzy msgid "Authentication ticket was incorrect" msgstr "AzonosĆ­tĆ”s sikertelen" -#: network/msnnotificationconnection.cpp:2362 +#: network/msnnotificationconnection.cpp:2360 msgid "You can't start a chat with someone while you are invisible." msgstr "Nem kezdemĆ©nyezhetsz tĆ”rsalgĆ”st, amĆ­g lĆ”thatatlan vagy." -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." +#: network/msnnotificationconnection.cpp:2364 +#, fuzzy +msgid "Not accepting new contacts" +msgstr "Nem fogad Ćŗj megbĆ­zĆ”sokat" + +#: network/msnnotificationconnection.cpp:2368 +#, fuzzy +msgid "" +"You have a kids passport account, you need parental consent to chat online." msgstr "KorlĆ”tozott passportod van, szülői beleegyezĆ©s kell a csevegĆ©shez." -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." +#: network/msnnotificationconnection.cpp:2371 +#, fuzzy +msgid "Your passport account needs to be verified first." msgstr "Előszƶr meg kell erősĆ­tened a passportodat." -#: network/msnnotificationconnection.cpp:2373 +#: network/msnnotificationconnection.cpp:2375 msgid "Bad USR ticket" msgstr "" -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" -msgstr "KMess - MSN hiba" +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" +msgstr "Hiba a kapcsolatlista lekĆ©rdezĆ©sĆ©nĆ©l, próbĆ”ld meg kĆ©sőbb" -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" +#: network/msnnotificationconnection.cpp:2399 +#, fuzzy +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." msgstr "Belső szerverhiba" +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + #: network/msnnotificationconnection.cpp:2414 -msgid "The server is too busy" -msgstr "A szerver foglalt" - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "A szerver nem Ć©rhető el" - -#: network/msnnotificationconnection.cpp:2422 msgid "Peer notification server down" msgstr "A kapcsolatjelző szerver nem műkƶdik" -#: network/msnnotificationconnection.cpp:2426 +#: network/msnnotificationconnection.cpp:2418 msgid "The server is going down" msgstr "A szerver leĆ”ll" -#: network/msnnotificationconnection.cpp:2429 +#: network/msnnotificationconnection.cpp:2422 msgid "The server is going down soon" msgstr "A szerver hamarosan leĆ”ll" -#: network/msnnotificationconnection.cpp:2433 +#: network/msnnotificationconnection.cpp:2427 msgid "Write is blocking" msgstr "ƍrĆ”s tiltva" -#: network/msnnotificationconnection.cpp:2436 +#: network/msnnotificationconnection.cpp:2431 msgid "Session is overloaded" msgstr "A folyamat tĆŗlterhelt" -#: network/msnnotificationconnection.cpp:2441 +#: network/msnnotificationconnection.cpp:2438 msgid "The server is not available" msgstr "A szerver nem Ć©rhető el" -#: network/msnnotificationconnection.cpp:2444 +#: network/msnnotificationconnection.cpp:2442 msgid "Authentication failed" msgstr "AzonosĆ­tĆ”s sikertelen" -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" -msgstr "Nem fogad Ćŗj megbĆ­zĆ”sokat" +#: network/msnnotificationconnection.cpp:2449 +#, fuzzy +msgid "Unknown error code received from the server: %1" +msgstr "A KMess ismeretlen parancsot kapott a szervertől: %1" -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" -msgstr "A KMess ismeretlen hibaüzenetet kapott a szervertől: %1" +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +#, fuzzy +msgctxt "Error dialog box title" +msgid "MSN error" +msgstr "KMess - MSN hiba" -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "FigyelmeztetĆ©s: a szerver le fog Ć”llni karbantartĆ”sra 1 perc mĆŗlva!" +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "perc" +msgstr[1] "perc" #: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." +#, fuzzy +msgid "Server closes for maintenance in %1!" +msgstr "FigyelmeztetĆ©s: a szerver le fog Ć”llni karbantartĆ”sra %1 perc mĆŗlva!" + +#: network/msnnotificationconnection.cpp:2604 +#, fuzzy +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." msgstr "" "Az MSN szerver jelezte, hogy egy percen belül le fog Ć”llni karbantartĆ”sra." -#: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" -msgstr "FigyelmeztetĆ©s: a szerver le fog Ć”llni karbantartĆ”sra %1 perc mĆŗlva!" - -#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:2901 msgid "Lost reference to SOAP client" msgstr "" -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +#, fuzzy +msgid "KMess could not process Offline-IM messages.
Details: %1" msgstr "" "A KMess nem tudja feldolgozni a kijelentkezett Ôllapotban kapott " "üzeneteket.\n" "\n" "Részletek: %1" -#: network/msnnotificationconnection.cpp:3209 +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "AzonosítÔs sikertelen" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "KMess belső hiba: %1" + +#: network/msnnotificationconnection.cpp:3242 +#, fuzzy +msgctxt "Login error message, with more details for developer versions" msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" +msgstr "" +"A KMess nem tud kapcsolódni az MSN Messenger szerverekhez. Lehet, hogy az " +"MSN Messenger szerverek Ć”tmenetileg nem elĆ©rhetőek, vagy hiba van az " +"internetkapcsolatodban." + +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "A szerverkapcsolat elveszett." + +#: network/msnnotificationconnection.cpp:3302 +#, fuzzy +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" msgstr "" "Az azonosĆ­tĆ”s nem sikerült, a KMess nem tudta feldolgozni a passport " "logint.\n" "\n" "RĆ©szletek: %1" -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" -msgstr "" -"A Kmess nem tudja elĆ©rni a tĆ”voli webszolgĆ”ltatĆ”st.\n" -"\n" -"RĆ©szletek: %1" +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "Szerverhiba" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "KapcsolódĆ”si időtĆŗllĆ©pĆ©s" + +#: network/msnsockettcp.cpp:368 +msgid "1 ping lost" +msgstr "1 ping elveszett" + +#: network/msnsockettcp.cpp:372 +msgid "%1 pings lost" +msgstr "%1 ping elveszett" + +#: network/msnsockettcp.cpp:387 +msgid "The connection to the server was lost." +msgstr "A szerverkapcsolat elveszett." + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "A partner nincs bejelentkezve, vagy lĆ”thatatlan." -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "" "A partner egy MSN7 lehetősĆ©get kezdemĆ©nyezett, amit a KMess nem tĆ”mogat." -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 msgid "The message \"%1\" was not received!" msgstr "Nem fogadott üzenet: \"%1\"" -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "Nem hozható lĆ©tre kapcsolat: %1" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "" "SzerverproblĆ©ma: TĆŗl sok Ć”tirĆ”nyĆ­tĆ”s a bejelentkeztető szolgĆ”ltatĆ”stól." -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +#, fuzzy +msgid "In %1's chat: %2" msgstr "%1 tĆ”rsalgĆ”sĆ”ban: %2" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +#, fuzzy +msgid "%1 says:
'%2'" msgstr "%1 üzenete:
'%2'" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" +#: notification/chatnotification.cpp:171 +#, fuzzy +msgid "%1 has sent you an offline message:
'%2'" msgstr "%1 kapcsolat nélküli üzenetet küldött:
'%2'" -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" +#: notification/chatnotification.cpp:178 +#, fuzzy +msgid "%1's chat requests attention!" msgstr "%1 tƔrsalgƔsa figyelmet kƩr!" -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" +#: notification/chatnotification.cpp:183 +#, fuzzy +msgid "%1:
%2" msgstr "%1:
%2" -#: notification/notificationchat.cpp:200 +#: notification/chatnotification.cpp:190 #, fuzzy -msgid "%1 has sent you a handwritten message!" +msgid "%1 has sent you a handwritten message!" msgstr "%1 rezgő figyelmeztetĆ©st küldƶtt!" -#: notification/notificationchat.cpp:204 -msgid "%1 has sent you a nudge!" +#: notification/chatnotification.cpp:194 +#, fuzzy +msgid "%1 has sent you a nudge!" msgstr "%1 rezgő figyelmeztetĆ©st küldƶtt!" -#: notification/notificationchat.cpp:208 -msgid "%1 has sent you a wink!" +#: notification/chatnotification.cpp:198 +#, fuzzy +msgid "%1 has sent you a wink!" msgstr "%1 animĆ”ciót küldƶtt!" -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" +#: notification/chatnotification.cpp:204 +#, fuzzy +msgid "%1 wants to use the webcam!" msgstr "%1 webkamerĆ”t szeretne hasznĆ”lni." -#: notification/notificationchat.cpp:215 -msgid "%1 is sending you a file!" +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" msgstr "%1 fĆ”jlt küld!" -#: notification/notificationchat.cpp:216 -msgid "%1 has sent you an invitation!" +#: notification/chatnotification.cpp:206 +#, fuzzy +msgid "%1 has sent you an invitation!" msgstr "%1 meghĆ­vĆ”st küldƶtt!" -#: notification/notificationchat.cpp:223 -msgid "%1 has canceled the webcam session!" +#: notification/chatnotification.cpp:213 +#, fuzzy +msgid "%1 has canceled the webcam session!" msgstr "%1 tƶrƶlte a webkamera kapcsolatot!" -#: notification/notificationchat.cpp:224 -msgid "%1 has canceled the file transfer!" +#: notification/chatnotification.cpp:214 +#, fuzzy +msgid "%1 has canceled the file transfer!" msgstr "%1 tƶrƶlte a fĆ”jlĆ”tvitelt!" -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +#, fuzzy +msgid "%1's activity has been canceled!" msgstr "%1 aktivitĆ”sa tƶrƶlve." -#: notification/notificationchat.cpp:232 -msgid "%1 has accepted to use the webcam!" +#: notification/chatnotification.cpp:222 +#, fuzzy +msgid "%1 has accepted to use the webcam!" msgstr "%1 elfogadta a webkamera hasznĆ”latĆ”t." -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" +#: notification/chatnotification.cpp:223 +#, fuzzy +msgid "%1 has accepted the file transfer!" msgstr "%1 elfogadta a fĆ”jlĆ”tvitelt." -#: notification/notificationchat.cpp:234 -msgid "%1 has accepted your invitation!" +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" msgstr "%1 elfogadta a meghĆ­vĆ”st." -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" +#: notification/chatnotification.cpp:231 +#, fuzzy +msgid "%1 has ended the webcam session!" msgstr "%1 bezĆ”rta a webkamera folyamatot." -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "A fĆ”jl Ć”tvitele kĆ©sz: %1" -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" +#: notification/chatnotification.cpp:233 +#, fuzzy +msgid "%1's activity has ended!" msgstr "%1 aktivitĆ”sa befejeződƶtt." -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" +#: notification/chatnotification.cpp:240 +#, fuzzy +msgid "%1's webcam session has failed!" msgstr "%1 webkamera folyamata sikertelen." -#: notification/notificationchat.cpp:251 -msgid "The file transfer with %1 has failed!" +#: notification/chatnotification.cpp:241 +#, fuzzy +msgid "The file transfer with %1 has failed!" msgstr "A fĆ”jlĆ”tvitel sikertelen: %1 !" -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:242 +#, fuzzy +msgid "%1's activity has ended with an error!" msgstr "%1 aktivitĆ”sa hibĆ”val befejeződƶtt." -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -msgid "%1 is now online" +#: notification/contactstatusnotification.cpp:70 +#, fuzzy +msgid "%1 is now online" msgstr "%1 elĆ©rhető" -#: notification/notificationcontactstatus.cpp:76 -msgid "%1 has gone away" +#: notification/contactstatusnotification.cpp:71 +#, fuzzy +msgid "%1 has gone away" msgstr "%1 Ćŗj stĆ”tusza: tĆ”vol" -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/contactstatusnotification.cpp:72 +#, fuzzy +msgid "%1 will be right back" msgstr "%1 Ćŗj stĆ”tusza: rƶgtƶn jƶvƶk" -#: notification/notificationcontactstatus.cpp:78 -msgid "%1 is now busy" +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" msgstr "%1 Ćŗj stĆ”tusza: elfoglalt" -#: notification/notificationcontactstatus.cpp:79 -msgid "%1 has become invisible" +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" msgstr "%1 lĆ”thatatlan" -#: notification/notificationcontactstatus.cpp:80 -msgid "%1 has gone idle" +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" msgstr "%1 Ćŗj stĆ”tusza: nincs a gĆ©pnĆ©l" -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/contactstatusnotification.cpp:76 +#, fuzzy +msgid "%1 has logged out" msgstr "%1 kijelentkezett" -#: notification/notificationcontactstatus.cpp:82 -msgid "%1 is on the phone" +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" msgstr "%1 Ćŗj stĆ”tusza: telefonĆ”l" -#: notification/notificationcontactstatus.cpp:83 -msgid "%1 is out for lunch" +#: notification/contactstatusnotification.cpp:78 +#, fuzzy +msgid "%1 is out for lunch" msgstr "%1 Ćŗj stĆ”tusza: ebĆ©del" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/newemailnotification.cpp:78 +#, fuzzy +msgid "New email:
'%1'
by '%2'" msgstr "Új e-mail:
'%1'
feladó: '%2'" -#: settings/accountswidget.cpp:81 +#: settings/accountpage.cpp:69 msgid "Browse..." msgstr "" -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +#, fuzzy +msgid "Browse and crop picture..." msgstr "KĆ©p keresĆ©se Ć©s vĆ”gĆ”sa..." -#: settings/accountswidget.cpp:404 -msgid "Display Picture" -msgstr "KĆ©p megjelenĆ­tĆ©se" +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" +#: settings/accountpage.cpp:448 +#, fuzzy +msgid "Downloading of display picture failed" msgstr "A megjelenĆ­tendő kĆ©p letƶltĆ©se nem sikerült" -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 +#, fuzzy msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" "Hiba tƶrtĆ©nt a megjelenĆ­tendő kĆ©p cserĆ©je kƶzben.\n" "Győződj meg róla, hogy jó kĆ©pfĆ”jlt vĆ”lasztottĆ”l-e." -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "Hello, milyen a kedved most? :)" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "Manó" - -#: settings/chatstylepage.cpp:317 -msgid "Great!" -msgstr "Nagyon jó!" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "/Most/ Ć©rtem haza egy *remek* buliból!" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 #, fuzzy msgid "&Delete" msgstr "Partner &tƶrlĆ©se" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "BeĆ”llĆ­tĆ”sok" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 msgid "Account" msgstr "Fiók" -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 #, fuzzy msgid "My Account" msgstr "Fiók" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "JelzĆ©sek" -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 #, fuzzy msgid "Alerts and Notifications" msgstr "KMess Ć©rtesĆ­tĆ©s" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "TĆ”rsalgĆ”s" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "TĆ”rsalgĆ”s naplózĆ”sa" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +#, fuzzy +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "A megadott partnercĆ­m Ć©rvĆ©nytelen: '%1'" + +#: settings/accountsettingsdialog.cpp:201 +#, fuzzy +msgid "The email address you have entered is already in use: '%1'" +msgstr "A megadott partnercĆ­m Ć©rvĆ©nytelen: '%1'" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "Biztosan tƶrƶlni akarod ezt a fiókot?" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "Biztosan törölni akarod ezt a fiókot?" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "Hello, milyen a kedved most? :)" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "Manó" + +#: settings/chatstylepage.cpp:341 +msgid "Great!" +msgstr "Nagyon jó!" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "/Most/ értem haza egy *remek* buliból!" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "BeÔllítÔsok" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +msgid "Accounts" +msgstr "Fiókok" + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "E-mail értesítés" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "TĆ”rsalgĆ”sok mentĆ©se e kƶnyvtĆ”rba:" + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." @@ -3478,14 +4183,151 @@ msgstr "" "A főablak bezĆ”rĆ”sa utĆ”n a KMess mĆ©g tovĆ”bb fog futni a rendszertĆ”lcĆ”n " "ikonkĆ©nt. A program bezĆ”rĆ”sĆ”hoz hasznĆ”ld a 'KilĆ©pĆ©s'-t a FĆ”jl menüben." -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "DokkolĆ”s a rendszertĆ”lcĆ”ban" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "
%1 (%2)" +#: systemtraywidget.cpp:245 +#, fuzzy +msgid "- %1 (%2)" +msgstr "%1 %2" + +#~ msgid "Click to send an email to this contact." +#~ msgstr "E-mail küldĆ©sĆ©hez a partnerednek kattints ide." + +#~ msgid "Picture:" +#~ msgstr "KĆ©p:" + +#, fuzzy +#~ msgid "Login Information" +#~ msgstr "E-mail informĆ”ció megjelenĆ­tĆ©se" + +#~ msgid "Logging in..." +#~ msgstr "BejelentkezĆ©s..." + +#~ msgid "" +#~ "Allows you to choose which e-mail program KMess should open to view e-" +#~ "mail messages." +#~ msgstr "" +#~ "KivĆ”laszthatod, hogy a KMess melyik levelezőprogramot indĆ­tsa el az e-" +#~ "mailek elolvasĆ”sĆ”hoz." + +#~ msgid "Use a specified command:" +#~ msgstr "Megadott parancs hasznĆ”lata:" + +#~ msgid "This account does not have an Hotmail inbox!" +#~ msgstr "A fiókhoz nem tartozik Hotmail cĆ­m!" + +#, fuzzy +#~ msgid "Email: " +#~ msgstr "E-mail" + +#~ msgid "Remove group" +#~ msgstr "Csoport tƶrlĆ©se" + +#, fuzzy +#~ msgid "Show &Display Pictures" +#~ msgstr "KĆ©p megjelenĆ­tĆ©se" + +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr "1 Ćŗj leveled Ć©rkezett." + +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr "%1 Ćŗj leveled Ć©rkezett." + +#, fuzzy +#~ msgid "Guido Solinas" +#~ msgstr "&ElĆ©rhető" + +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "%1 fĆ”jl Ć”tvitele sikertelen. A fĆ”jl nem nyitható meg." + +#, fuzzy +#~ msgid "Sidebar" +#~ msgstr "OldalsĆ”v" + +#, fuzzy +#~ msgid "New contact's group" +#~ msgstr "Új &partner" + +#~ msgid "Enter your login information:" +#~ msgstr "Add meg a bejelentkező adatokat:" + +#~ msgid "Your friendly name:" +#~ msgstr "MegjelenĆ­tendő neved:" + +#, fuzzy +#~ msgid "Your email address:" +#~ msgstr "E-mail cĆ­m: " + +#~ msgid "Your password:" +#~ msgstr "Jelszavad:" + +#~ msgid "Display picture:" +#~ msgstr "MegjelenĆ­tendő kĆ©p:" + +#~ msgid "Don't show a displa&y picture" +#~ msgstr "Ne mutassa a megjelenĆ­tendő kĆ©pet" + +#~ msgid "Status to set at login:" +#~ msgstr "BeĆ”llĆ­tandó stĆ”tusz bejelentkezĆ©skor:" + +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "ƉrtesĆ­tĆ©s, ha e-mail Ć©rke&zik" + +#~ msgid "Organize chat folders by:" +#~ msgstr "TĆ”rsalgĆ”sok mappĆ”inak rendezĆ©si módja:" + +#~ msgid "&Show graphics in chat messages" +#~ msgstr "&GrafikĆ”k megjelenĆ­tĆ©se a tĆ”rsalgĆ”sok üzeneteiben" + +#~ msgid "Use Hotmail" +#~ msgstr "Hotmail hasznĆ”lata" + +#~ msgid "says:" +#~ msgstr "üzenete: " + +#~ msgid "Current name: " +#~ msgstr "Jelenlegi nĆ©v:" + +#, fuzzy +#~ msgid "" +#~ "KMess could not connect to the MSN Messenger service.\n" +#~ "Please, be sure to be connected to the internet.\n" +#~ "reason: %1." +#~ msgstr "" +#~ "A KMess nem tudott kapcsolódni az MSN Messenger szolgĆ”ltatĆ”shoz.\n" +#~ "Győződj meg róla, hogy az internetkapcsolatod aktĆ­v.\n" +#~ "Rendszerhiba: %1 (%2 kód)" + +#~ msgid "The remote server has closed the connection." +#~ msgstr "A tĆ”voli szerver lezĆ”rta a kapcsolatot." + +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr "MSN Messenger Service Ć”llapotĆ”nak megjelenĆ­tĆ©se?" + +#~ msgid "Received user confirmation" +#~ msgstr "Fogadott felhasznĆ”lói megerősĆ­tĆ©s" + +#~ msgid "Transfer to notification server" +#~ msgstr "Adatok küldĆ©se a kapcsolatkezelő szervernek" + +#~ msgid "The server is too busy" +#~ msgstr "A szerver foglalt" + +#~ msgid "The server is unavailable" +#~ msgstr "A szerver nem Ć©rhető el" + +#~ msgid "KMess received an unknown error message from the server: %1" +#~ msgstr "A KMess ismeretlen hibaüzenetet kapott a szervertől: %1" + +#~ msgid "Warning: Server closes for maintenance in 1 minute!" +#~ msgstr "FigyelmeztetĆ©s: a szerver le fog Ć”llni karbantartĆ”sra 1 perc mĆŗlva!" + #~ msgid "Add contact" #~ msgstr "Partner felvĆ©tele" @@ -3493,9 +4335,6 @@ msgstr "
%1 (%2)" #~ msgid "KMess Notification" #~ msgstr "E-mail Ć©rtesĆ­tĆ©s" -#~ msgid "Accounts" -#~ msgstr "Fiókok" - #~ msgid "" #~ msgstr "<ƍrd be ide a szemĆ©lyes üzeneted>" @@ -3509,9 +4348,6 @@ msgstr "
%1 (%2)" #~ "Your emails" #~ msgstr "rezso@rezso.net" -#~ msgid "Insert an emoticon" -#~ msgstr "Emotikon beszúrÔsa" - #~ msgid "Show/Hide &Contact Sidebar" #~ msgstr "&Partnerek oldalsÔv megjelenítése/elrejtése" @@ -3545,18 +4381,9 @@ msgstr "
%1 (%2)" #~ msgid "(On the Phone)" #~ msgstr "(Telefon)" -#~ msgid "Connection timeout" -#~ msgstr "KapcsolódĆ”si időtĆŗllĆ©pĆ©s" - #~ msgid "The current status of your contact." #~ msgstr "A partnered jelenlegi stĆ”tusza." -#~ msgid "Connect" -#~ msgstr "KapcsolódĆ”s" - -#~ msgid "Listening to %1" -#~ msgstr "VĆ©tel itt: %1" - #, fuzzy #~ msgid "The contact is listening to music" #~ msgstr "A partner nincs rajta a listĆ”don" diff --git a/po/it.po b/po/it.po index 141039c..1a62008 100644 --- a/po/it.po +++ b/po/it.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: it\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" "PO-Revision-Date: 2008-04-12 00:56+0200\n" "Last-Translator: Valerio Pilo \n" "Language-Team: Italian \n" @@ -20,201 +20,417 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "Mi connetto..." - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -msgid "S&end" -msgstr "Inv&ia" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 msgid "Ne&w Line" msgstr "&A capo" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 -msgid "Sidebar" -msgstr "Barra laterale" +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 +msgid "S&end" +msgstr "Inv&ia" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +msgid "Contacts" +msgstr "Contatti" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "Clicca qui per mostrare il profilo di questo contatto." #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." -msgstr "Clicca per inviare una email a questo contatto." +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 msgid "" "Enter here the email address of the person you wish to add to your contact " "list" -msgstr "Inserisci l'indirizzo email della persona che vorresti aggiungere ai tuoi contatti" +msgstr "" +"Inserisci l'indirizzo email della persona che vorresti aggiungere ai tuoi " +"contatti" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 msgid "Email address" msgstr "Indirizzo email" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" -msgstr "Opzionalmente, puoi scegliere in quale gruppo posizionare il nuovo contatto" +msgstr "" +"Opzionalmente, puoi scegliere in quale gruppo posizionare il nuovo contatto" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 +#, fuzzy +msgid "Initial group" +msgstr "Gruppo non valido" + +#. i18n: tag string +#. i18n: file ./dialogs/addemoticondialog.ui line 96 #: rc.cpp:36 -msgid "New contact's group" -msgstr "Gruppo del nuovo contatto" - -#. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 msgid "Enter a shortcut for this emoticon:" msgstr "Inserisci un collegamento per questa emoticon:" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "Seleziona un file immagine:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 -msgid "Enter a message to be automatically sent to people who try to message you." -msgstr "Inserisci un messaggio che sarĆ  inviato automaticamente a chi cercherĆ  di contattarti." +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 +msgid "" +"Enter a message to be automatically sent to people who try to message you." +msgstr "" +"Inserisci un messaggio che sarĆ  inviato automaticamente a chi cercherĆ  di " +"contattarti." #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 msgid "&Automatic away message" msgstr "Messaggio di assenza &Automatico" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" -msgstr "%1\tn ti ha aggiunto alla sua lista contatti. Vuoi:" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 -msgid "&Add this contact to your \"Friends\" list" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 +#, fuzzy +msgid "&Add this person to my \"Friends\" list" msgstr "&Aggiungi il contatto alla mia lista di \"Amici\"" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 -msgid "&Not add this contact, but let them see your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 +#, fuzzy +msgid "Do not add this person; only allow them to see my online state" msgstr "&Non aggiungere il contatto, ma consentigli di vedere il tuo stato" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 -msgid "Block this person from contacting &you or seeing your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 +#, fuzzy +msgid "&Block this person from contacting me or seeing my online state" msgstr "&Blocca il contatto e impedisci di vedere il tuo stato" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, no-c-format +msgid "Contact Properties for %1" +msgstr "ProprietĆ  del contatto %1" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +#, fuzzy +msgid "Restore" +msgstr "Rimuovi" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "Usa un nome alternativo per questo contatto" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "" +"Mostra un messaggio di avviso quando questo contatto va in linea o non in " +"linea" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "Suono:" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +#, fuzzy +msgid "&Clear Cache" +msgstr "Pu&lisci scheda" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +#, fuzzy +msgid "Notes" +msgstr "Nota" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "Finestra di rete" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +#, fuzzy +msgid "Standard" +msgstr "Stella" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "Inv&ia" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "Apri" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 msgid "Cancel" msgstr "Annulla" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -msgid "Enter your login information:" -msgstr "Inserisci i tuoi dati di accesso:" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" +msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 -msgid "Password" +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 +#, fuzzy +msgid "Email address:" +msgstr "Indirizzo email: " + +#. i18n: tag string +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +#, fuzzy +msgid "Password:" msgstr "Password" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "Stato all'accesso" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "Altre opzioni..." #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 msgid " Account options " msgstr "Impostazioni account" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 msgid "Remem&ber this profile" msgstr "&Ricorda questo profilo" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "Ricorda anche la password" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "&Connetti" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "Inserisci un tuo messaggio personale qui" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr "Impostazioni account" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "Inserisci il nome che gli altri contatti vedranno quando sei in linea." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 -msgid "Your friendly name:" -msgstr "Il tuo nome:" +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 +#, fuzzy +msgid "&Friendly name:" +msgstr "&Nome Personale" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" @@ -223,14 +439,15 @@ msgstr "" "nuovo account su http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 -msgid "Your email address:" -msgstr "Il tuo indirizzo email:" +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 +#, fuzzy +msgid "&Email address:" +msgstr "Indirizzo email: " #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" @@ -239,38 +456,40 @@ msgstr "" "account su http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" -msgstr "La tua password:" +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 +#, fuzzy +msgid "&Password:" +msgstr "Password" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 -msgid "Remember Password" +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 +#, fuzzy +msgid "&Remember Password" msgstr "Ricorda Password" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 -msgid "Display picture:" -msgstr "Immagine personale:" +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 +msgid "Display Picture" +msgstr "Immagine personale" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 msgid "C&hange..." msgstr "C&ambia..." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -msgid "Don't show a displa&y picture" -msgstr "Non mos&trare un'immagine personale" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -289,34 +508,37 @@ msgstr "" "café)." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +#, fuzzy +msgid "Re&member the settings of this account" msgstr "Ricorda le impostazioni di questo account" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "Se abilitata, KMess accederà automaticamente con questo account." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 -msgid "Login &with this account automatically at start-up" +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 +#, fuzzy +msgid "Login &with this account automatically" msgstr "&Accesso automatico con questo account all'avvio" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "Stato da impostare all'accesso:" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "Registr&a tutte le conversazioni" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -327,8 +549,8 @@ msgstr "" "oppure usare un account di Hotmail per accedere." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." @@ -337,26 +559,26 @@ msgstr "" "verificato su MSN Passport." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "Richiedi email di verifica" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 msgid "https://accountservices.passport.net/" msgstr "https://accountservices.passport.net/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "Vai a accountservices.passport.net" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." @@ -365,38 +587,102 @@ msgstr "" "come account Passport." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "Registra un nuovo account" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "Vai su register.passport.com" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 -msgid "Popup notifications" +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 +msgid "Saved accounts:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +msgid "Click" +msgstr "Clicca" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "" +"Clicca qui per aggiungere nuove emoticon personalizzate da inviare ai tuoi " +"contatti." + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "Account" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "Seleziona una emoticon e clicca qui per eliminarla." + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "&Modifica" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "Rimuovi" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "Notifiche a comparsa" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "Contatti" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 msgid "Show notifications when your contacts:" msgstr "Mostra notifiche quando i tuoi contatti:" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." @@ -405,14 +691,14 @@ msgstr "" "aMSN." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 msgid "&Go online" msgstr "Si &connettono" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." @@ -421,14 +707,14 @@ msgstr "" "conversazione con te." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "Iniziano una &conversazione con te" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." @@ -437,14 +723,14 @@ msgstr "" "un contatto." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 msgid "S&end you a message" msgstr "&Ti inviano un messaggio" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." @@ -453,16 +739,16 @@ msgstr "" "il lorostato su MSN." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "Cambiano il loro &stato" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." @@ -471,38 +757,90 @@ msgstr "" "disconnettono." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 msgid "Go o&ffline" msgstr "Si &disconnettono" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 -msgid "Show notifications when you recei&ve an email" -msgstr "Mostra una notifica quando ricevi un'&email" +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 +#, fuzzy +msgid "Email Events" +msgstr "Indirizzo email" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" +msgstr "Mostra una notifica quando ricevi un'email in altre cartelle" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" +"Se abilitato, un pop-up viene mostrato quando una email viene ricevuta in " +"un'altra cartella. Il numero di email non lette viene mostrato sopra la " +"lista contatti. Questa opzione è attiva solamente per gli account di Hotmail." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +msgid "In other folders" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." -msgstr "Controlla il numero di secondi per i quali i pop-up resteranno visibili." +msgstr "" +"Controlla il numero di secondi per i quali i pop-up resteranno visibili." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "Nascondi pop-up dopo" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "secondi" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "Segnalazioni" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "Mostra contatti n&on in linea" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -520,14 +858,33 @@ msgstr "" "KMess scuoterĆ  la finestra solo dopo il primo trillo ricevuto.

" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "Scuoti la finestra della conversazione quando ricevi o invii un trillo" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" +"Se abilitato, un pop-up viene mostrato quando una email viene ricevuta nella " +"casella Posta in arrivo. Il numero di email non lette viene mostrato sopra " +"la lista contatti. Questa opzione è attiva solamente per gli account di " +"Hotmail." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." @@ -537,30 +894,37 @@ msgstr "" "vicino al tuo nome." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 -msgid "Inform contacts w&hich song I am listening to." +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 +#, fuzzy +msgid "Inform contacts w&hich song I am listening to" msgstr "In&forma i contatti su quale canzone sto ascoltando." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 +#, fuzzy msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" "Se abilitato, il tuo stato sarà cambiato automaticamente a \"Assente - " "Inattivo\" quando non starai usando il computer per qualche minuto." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "Cambia s&tato a \"Assente - Inattivo\" quando non sei al computer" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." @@ -569,48 +933,50 @@ msgstr "" "\"Assente - Inattivo\"." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 msgid "Become idle after" msgstr "Diventa inattivo dopo" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "minuti" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "" "Se abilitata, le conversazioni verranno automaticamente salvate nella " "cartella selezionata." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 msgid "Log &all chats" msgstr "Registr&a tutte le conversazioni" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 -msgid "Choose the directory on your system where you'd like to save the chat logs." +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 +msgid "" +"Choose the directory on your system where you'd like to save the chat logs." msgstr "" "Scegli la cartella sul tuo sistema dove vuoi salvare le registrazioni delle " "conversazioni." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" msgstr "Salva i file di chat nella cartella selezionata:" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." @@ -619,123 +985,101 @@ msgstr "" "ordinandole per anno, mese o giorno." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "Organizza cartelle di chat per:" +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "Anno" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 msgid "Month" msgstr "Mese" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "Giorno" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" msgstr "Salva tutte le conversaione nella cartella principale" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." -msgstr "Questo stile e colore sarà usato nei tuoi messaggi." - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "Carattere per i tuoi messaggi:" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" -"Consente di non vedere lo stile usato nei messaggi dai tuoi contatti, e " -"invece di usare quelli scelti qui sotto." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "Forza i messaggi dei contatti ad usare questo carattere:" - +#. i18n: file ./settings/chatstylepage.ui line 45 #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "" "Consente di cambiare il tema che KMess usa per visualizzare i messaggi delle " "chat." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +#, fuzzy +msgid "&Chat style:" msgstr "Stile della chat:" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "Impostazioni" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "Mostra le emoticon nelle conversazioni." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 -msgid "&Show graphics in chat messages" -msgstr "Mo&stra elementi grafici nei messaggi di conversazione" +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 +#, fuzzy +msgid "&Show emoticons" +msgstr "Mostra &emoticon" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "Mostra l'ora di invio di ogni messaggio nelle conversazioni." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 -msgid "S&how time in chat messages" +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 +#, fuzzy +msgid "S&how messages time" msgstr "Mostra &ora nei messaggi di conversazione" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" -"Abilita l'uso di effetti di formattazione. Scrivere *grassetto*, /corsivo/, " -"e _sottolineato_ farà apparire il testo in grassetto, corsivo, " -"e sottolineato, rispettivamente." - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "" -"&Usa effetti dei caratteri nei messaggi per *grassetto*, /corsivo/, e " -"_sottolineato_ " - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -748,156 +1092,306 @@ msgstr "" "selezionato." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "Ra&ggruppa messaggi consecutivi dallo stesso contatto" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 -msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" msgstr "" -"Consente di scegliere quale client di posta elettronica KMess userà per " -"aprire le email." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "Client di posta" +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 +#, fuzzy +msgid "Always" +msgstr "Assente" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "Usa il servizio Hotmail" +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "La tua lista dei contatti ha troppi gruppi" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "Usa un comando specifico:" +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "Secchione" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "Notifica email" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 -msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" msgstr "" -"Se abilitato, un pop-up viene mostrato quando una email viene ricevuta nella " -"casella Posta in arrivo. Il numero di email non lette viene mostrato sopra " -"la lista contatti. Questa opzione è attiva solamente per gli account di " -"Hotmail." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 -msgid "Show email information" -msgstr "Mostra l'email nella lista dei contatti" +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." +msgstr "Questo stile e colore sarà usato nei tuoi messaggi." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "Carattere per i tuoi messaggi:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." msgstr "" -"Se abilitato, un pop-up viene mostrato quando una email viene ricevuta in " -"un'altra cartella. Il numero di email non lette viene mostrato sopra la " -"lista contatti. Questa opzione è attiva solamente per gli account di Hotmail." +"Consente di non vedere lo stile usato nei messaggi dai tuoi contatti, e " +"invece di usare quelli scelti qui sotto." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" -msgstr "Mostra una notifica quando ricevi un'email in altre cartelle" +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "Forza i messaggi dei contatti ad usare questo carattere:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 +msgid "" +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." +msgstr "" +"Abilita l'uso di effetti di formattazione. Scrivere *grassetto*, /corsivo/, " +"e _sottolineato_ farà apparire il testo in grassetto, corsivo, " +"e sottolineato, rispettivamente." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +#, fuzzy +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" +msgstr "" +"&Usa effetti dei caratteri nei messaggi per *grassetto*, /corsivo/, e " +"_sottolineato_ " + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "In attesa della lista contatti..." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 msgid "&Emoticon Themes" msgstr "Temi di &Emoticon" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 msgid "Available emoticon styles:" msgstr "Stili di emoticon disponibili:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 msgid "&Custom Emoticons" msgstr "Emoti&con Personali" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 msgid "Custom emoticons for this account:" msgstr "Emoticon personali per questo account:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -msgid "Click" -msgstr "Clicca" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "" -"Clicca qui per aggiungere nuove emoticon personalizzate da inviare ai tuoi " -"contatti." - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "Aggiungi nuo&va..." #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "Clicca qui per rinominare l'emoticon selezionata." #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 msgid "Re&name" msgstr "Ri&nomina" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "Seleziona una emoticon e clicca qui per eliminarla." - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 msgid "Remo&ve" msgstr "Rimuo&vi" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +#, fuzzy +msgid "Web Browser" +msgstr "Rosa appassita" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +msgid "&Use the KDE default browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "dice:" +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "Client di posta" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +msgid "&Use the KDE default email client" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +msgid "File Transfers" +msgstr "Trasferimenti File" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "Salva i file di chat nella cartella selezionata:" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +#, fuzzy +msgid "and" +msgstr "Triste" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "Trasferimenti File" #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -907,68 +1401,108 @@ msgstr "Non sono al computer" msgid "Your name" msgstr "Nome" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "utente@hotmail.com" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "In linea" +#: chat/chat.cpp:124 +msgid "" +"You can't start this invitation because there are multiple contacts in this " +"chat." +msgstr "Non puoi inviare questo invito a una chat con più di una persona." -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "Assente" +#: chat/chat.cpp:158 +#, fuzzy +msgid "%1 has joined the chat." +msgstr "%1 si è unito alla conversazione." -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "Torno subito" +#: chat/chat.cpp:211 +#, fuzzy +msgid "The conversation went idle, %1 has left the chat." +msgstr "" +"La conversazione è diventata inattiva, %1 ha lasciato la conversazione." -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "Occupato" +#: chat/chat.cpp:215 +#, fuzzy +msgid "%1 has left the chat." +msgstr "%1 ha lasciato la conversazione." -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "Invisibile" +#: chat/chat.cpp:364 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 and %2" +msgstr "%1 e %2 - Chat" -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "Inattivo" +#: chat/chat.cpp:371 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 et al." +msgstr "%1 e altri - Chat" -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "Non in linea" +#: chat/chat.cpp:630 +#, fuzzy +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" +msgstr " (Questo messaggio è stato spedito automaticamente)" -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "Al telefono" +#: chat/chat.cpp:934 +#, fuzzy +msgid "You received a wink from %1." +msgstr "Hai ricevuto una animoticon da %1" -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "A pranzo" +#: chat/chat.cpp:971 +msgid "" +"The wink could not be displayed. Make sure you have 'cabextract' installed." +msgstr "" +"Non è stato possibile mostrare l'animoticon. Assicurati di avere installato " +"'cabextract'." -#: chat/chatmaster.cpp:1061 +#: chat/chat.cpp:980 +msgid "The wink could not be displayed. The data could not be read." +msgstr "" +"Non è stato possibile mostrare l'animoticon. I dati non erano leggibili." + +#: chat/chat.cpp:1080 +#, fuzzy +msgid "You have received a wink from %1" +msgstr "Hai ricevuto una animoticon da %1" + +#: chat/chat.cpp:1100 +#, fuzzy +msgid "You received a nudge from %1!" +msgstr "Hai ricevuto un trillo da %1!" + +#: chat/chat.cpp:1119 +#, fuzzy +msgid "The message '%1' could not be sent." +msgstr "Il messaggio '%1' non è stato inviato." + +#: chat/chat.cpp:1183 +msgid "You've sent a nudge to %1!" +msgstr "Hai inviato un trillo a %1!" + +#: chat/chat.cpp:1190 +msgid "You've sent a nudge!" +msgstr "Hai inviato un trillo!" + +#: chat/chatmaster.cpp:1219 msgid "%1 is sending a wink: %2" msgstr "%1 sta inviando una animoticon: %2" -#: chat/chatmessagestyle.cpp:302 +#: chat/chatmessagestyle.cpp:298 msgid "%1 says:" msgstr "%1 dice:" -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 msgid "Add this emoticon: %1" msgstr "Aggiungi questa emoticon: %1" -#: chat/chatview.cpp:529 +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 +msgid "&Invite" +msgstr "&Invita" + +#: chat/chatview.cpp:695 msgid "" "Could not save chat log. Make sure you have permission to write in the " "folder where logs are being saved." @@ -976,8 +1510,7 @@ msgstr "" "Impossibile salvare la conversazione. Assicurati di avere i permessi per " "scrivere nella cartella dove le conversazioni vengono salvate." -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 msgid "" "The file '%1' already exists.\n" "do you want to overwrite it?" @@ -985,343 +1518,398 @@ msgstr "" "Il file '%1' esiste già.\n" "Vuoi sovrascriverlo?" -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 msgid "Overwrite File" msgstr "Sovrascrivi File" -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 msgid "Over&write" msgstr "So&vrascrivi" -#: chat/chatview.cpp:977 +#: chat/chatview.cpp:1275 msgid "Add this &Emoticon..." msgstr "Aggiungi questa &Emoticon..." -#: chat/chatview.cpp:984 +#: chat/chatview.cpp:1282 msgid "Send &Email" msgstr "Invia &Email" -#: chat/chatview.cpp:988 +#: chat/chatview.cpp:1286 msgid "Copy E&mail" msgstr "Copia E&mail" -#: chat/chatview.cpp:995 +#: chat/chatview.cpp:1293 msgid "Visit &Link" msgstr "Visita Co&llegamento" -#: chat/chatview.cpp:999 +#: chat/chatview.cpp:1297 msgid "Copy &Address" msgstr "Copia Colleg&amento" -#: chat/chatview.cpp:1013 +#: chat/chatview.cpp:1312 msgid "&Copy text" msgstr "&Copia testo" -#: chat/chatview.cpp:1014 +#: chat/chatview.cpp:1313 msgid "Select &All" msgstr "Selezion&a Tutto" -#: chat/chatview.cpp:1015 +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 msgid "Save chat to &File" msgstr "Salva conversazione su &file" -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "Chat" - -#: chat/chatwindow.cpp:239 -msgid "" -"You can't start this invitation because there are multiple contacts in this " -"chat." -msgstr "Non puoi inviare questo invito a una chat con più di una persona." - -#: chat/chatwindow.cpp:276 -msgid "%1 has joined the chat." -msgstr "%1 si è unito alla conversazione." - -#: chat/chatwindow.cpp:327 -msgid "The conversation went idle, %1 has left the chat." -msgstr "La conversazione è diventata inattiva, %1 ha lasciato la conversazione." - -#: chat/chatwindow.cpp:331 -msgid "%1 has left the chat." -msgstr "%1 ha lasciato la conversazione." - -#: chat/chatwindow.cpp:593 -msgid "%1 - Chat" -msgstr "%1 - Chat" - -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" -msgstr "%1 e %2 - Chat" - -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" -msgstr "%1 e altri - Chat" - -#: chat/chatwindow.cpp:757 -msgid "Contacts" -msgstr "Contatti" - -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 -msgid "Emoticons" -msgstr "Emoticon" - -#: chat/chatwindow.cpp:819 -msgid "My emoticons" -msgstr "Mie emoticon" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" -msgstr " (Questo messaggio è stato spedito automaticamente)" - -#: chat/chatwindow.cpp:1502 -msgid "The wink could not be displayed. Make sure you have 'cabextract' installed." -msgstr "" -"Non è stato possibile mostrare l'animoticon. Assicurati di avere installato " -"'cabextract'." - -#: chat/chatwindow.cpp:1511 -msgid "The wink could not be displayed. The data could not be read." -msgstr "Non è stato possibile mostrare l'animoticon. I dati non erano leggibili." - -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" -msgstr "Hai ricevuto una animoticon da %1" - -#: chat/chatwindow.cpp:1755 -msgid "Show Side&bar" -msgstr "Mostra la &Barra laterale" - -#: chat/chatwindow.cpp:1756 -msgid "Show the contact sidebar" -msgstr "Mostra il pannello laterale dei contatti" - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -msgid "Hide Side&bar" -msgstr "Nascondi la &Barra laterale" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -msgid "Hide the contact sidebar" -msgstr "Nascondi il pannello laterale dei contatti" - -#: chat/chatwindow.cpp:1787 -msgid "The message '%1' could not be sent." -msgstr "Il messaggio '%1' non è stato inviato." - -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" -msgstr "Hai ricevuto un trillo da %1!" - -#: chat/chatwindow.cpp:1876 -msgid "You've sent a nudge to %1!" -msgstr "Hai inviato un trillo a %1!" - -#: chat/chatwindow.cpp:1883 -msgid "You've sent a nudge!" -msgstr "Hai inviato un trillo!" - -#: chat/chatwindow.cpp:1972 -msgid "%1 is typing." -msgstr "%1 sta scrivendo." - -#: chat/chatwindow.cpp:1981 -msgid "%1 and %2 are typing." -msgstr "%1 e %2 stanno scrivendo." - -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." -msgstr "%1, %2 e altri %3 stanno scrivendo." - -#: chat/chatwindowinterface.cpp:175 +#: chat/chatwindow.cpp:489 msgid "&Chat" msgstr "&Chat" -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 -msgid "&Invite" -msgstr "&Invita" - -#: chat/chatwindowinterface.cpp:179 +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "Invia un &file" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "Avvia una con&ferenza" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 msgid "Send a &Nudge!" msgstr "I&nvia un trillo" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "Salva chat" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 msgid "&Emoticons" msgstr "&Emoticons" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +#, fuzzy +msgid "Close &All Tabs" +msgstr "&Chiudi scheda" + +#: chat/chatwindow.cpp:504 msgid "Meeting" msgstr "Meeting" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "Trillo" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "Avvia o termina una &conversazione" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "&Modifica" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "Cambia &carattere" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "Cambia c&olore del carattere" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 msgid "&Font" msgstr "&Carattere" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 msgid "Font &Color" msgstr "&Colore del carattere" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "&Aiuto" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +msgid "Emoticons" +msgstr "Emoticon" + +#: chat/chatwindow.cpp:658 +msgid "My emoticons" +msgstr "Mie emoticon" + +#: chat/chatwindow.cpp:738 msgid "&Settings" msgstr "&Impostazioni" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "Usa &Controllo Ortografico" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "Mostra &emoticon" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +msgid "Hide Side&bar" +msgstr "Nascondi la &Barra laterale" + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "Nascondi la &Barra laterale" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +msgid "Hide the contact sidebar" +msgstr "Nascondi il pannello laterale dei contatti" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +#, fuzzy +msgid "Close all tabs" +msgstr "&Chiudi scheda" + +#: chat/chatwindow.cpp:856 +#, fuzzy +msgid "Close current tab" +msgstr "&Chiudi scheda" + +#: chat/chatwindow.cpp:1467 +msgid "Show Side&bar" +msgstr "Mostra la &Barra laterale" + +#: chat/chatwindow.cpp:1468 +msgid "Show the contact sidebar" +msgstr "Mostra il pannello laterale dei contatti" + +#: chat/chatwindow.cpp:1565 +msgid "%1 is typing." +msgstr "%1 sta scrivendo." + +#: chat/chatwindow.cpp:1575 +msgid "%1 and %2 are typing." +msgstr "%1 e %2 stanno scrivendo." + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "%1, %2 e altri %3 stanno scrivendo." + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "Chat" + +#: chat/chatwindow.cpp:1615 +#, fuzzy +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "%1 - Chat" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "Invia &email" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 msgid "&View Profile" msgstr "&Visualizza profilo" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "&Aggiungi contatto" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 msgid "A&llow Contact" msgstr "A&utorizza contatto" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 msgid "&Delete Contact" msgstr "Eli&mina contatto" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "&Blocca contatto" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "Sbl&occa contatto" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 msgid "&Friendly Name" msgstr "&Nome Personale" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "Messaggio &Personale" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 msgid "&Email Address" msgstr "Indirizzo &Email" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "&Copia..." -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 msgid "Blocked" msgstr "Bloccato" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 msgid "The contact is %1" msgstr "Il contatto ĆØ %1" -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +#, fuzzy +msgid "Add to Chat" +msgstr "Aggiungi un Contatto" + +#: chat/emoticonsidebar.cpp:213 +msgid "Insert new" +msgstr "" + +#: chat/emoticonsidebar.cpp:214 +#, fuzzy +msgid "Edit" +msgstr "&Modifica" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +msgid "Remove" +msgstr "Rimuovi" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "Windows Mobile" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 msgid "Web Messenger" msgstr "Web Messenger" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "Offica Communicator" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "Messenger Bot" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "MSN Messenger %1 o compatibile" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +#, fuzzy +msgid "Windows Live Messenger %1" +msgstr "Windows Live Messenger" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "Windows Live Messenger %1 o compatibile" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "Windows Live Messenger" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "In linea" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "Non in linea" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "Autorizzato" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "Rimosso" -#: contactlistviewdelegate.cpp:117 -msgctxt "Group name in the contact list with online/total contacts of that group" +#: contactlistviewdelegate.cpp:143 +#, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr "%1 (%2/%3)" + +#: contactlistviewdelegate.cpp:150 +msgctxt "" +"Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "%1 (%2/%3)" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" -msgstr "Questo account non ha una casella di posta di Hotmail!" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "Assente" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "Torno subito" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "Occupato" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "Invisibile" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" +msgstr "Inattivo" + +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "Al telefono" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "A pranzo" + +#: dialogs/addcontactdialog.cpp:48 msgid "Add a Contact" msgstr "Aggiungi un Contatto" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 msgid "No group" msgstr "Nessun gruppo" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 msgid "Add New Emoticon" msgstr "Aggiungi Nuova Emoticon" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "Emoticon" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "L'emoticon \"%1\" esiste giĆ , vuoi sostituirla?" @@ -1329,63 +1917,66 @@ msgstr "L'emoticon \"%1\" esiste giĆ , vuoi sostituirla?" msgid "Specify an Away message" msgstr "Specifica un messaggio di assenza" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "Sei stato aggiunto da qualcuno" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "Usa un nome alternativo per questo contatto" +#: dialogs/contactaddeduserdialog.cpp:85 +#, fuzzy +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " +msgstr "%1\tn ti ha aggiunto alla sua lista contatti. Vuoi:" -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "Connesso" + +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +msgid "Not seen yet" msgstr "" -"Mostra un messaggio di avviso quando questo contatto va in linea o non in " -"linea" -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "Immagine:" +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +#, fuzzy +msgid "No messages yet" +msgstr "Mostra &ora nei messaggi di conversazione" -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "Suono:" +#: dialogs/contactpropertiesdialog.cpp:381 +msgid "Last seen: %1" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:234 -msgid "Contact Properties for %1" -msgstr "ProprietĆ  del contatto %1" +#: dialogs/contactpropertiesdialog.cpp:382 +msgid "Last message: %1" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " -msgstr "Indirizzo email: " +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "Email: %1" -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "Nome attuale: " +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "Client: %1" -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" -msgstr "Finestra di rete" - -#: dialogs/networkwindow.cpp:57 +#: dialogs/networkwindow.cpp:79 msgid "S&ave tab" msgstr "S&alva scheda" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 msgid "C&lear tab" msgstr "Pu&lisci scheda" -#: dialogs/networkwindow.cpp:59 -msgid "Cl&ose tab" -msgstr "&Chiudi scheda" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 msgid "" "No connections are present.\n" "Cannot open the Network Window." -msgstr "Nessuna connessione ĆØ presente.\nImpossibile aprire la Finestra di Rete." +msgstr "" +"Nessuna connessione ĆØ presente.\n" +"Impossibile aprire la Finestra di Rete." -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 msgid "" "Could not save the Network Window log. Make sure you have permission to " "write in the folder where it is being saved." @@ -1393,57 +1984,86 @@ msgstr "" "Impossibile salvare il registro della Finestra di Rete. Assicurati di avere " "i permessi di scrivere nella cartella dove il registro deve essere salvato." -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "Impossibile chiudere la scheda della connessione principale." -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +#, fuzzy +msgid "Cannot send commands to this kind of connection!" +msgstr "Impossibile chiudere la scheda della connessione principale." + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "Annullato" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "Fallito!" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 msgid "Completed" msgstr "Completato" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "%1 MB" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "%1 kB" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "%1 byte" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +#, fuzzy +msgid "%1 of %2 received." msgstr "Ricevuti %1 di %2" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +#, fuzzy +msgid "%1 of %2 sent." msgstr "Inviati %1 di %2" -#: dialogs/transferwindow.cpp:55 -msgid "File Transfers" -msgstr "Trasferimenti File" +#: dialogs/transferentry.cpp:373 +msgid "infinite" +msgstr "" -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 msgid "Cl&ean Up" msgstr "P&ulisci" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " "the theme folder '%1'." @@ -1451,404 +2071,450 @@ msgstr "" "Impossibile salvare il tema delle emoticon. Assicurati di avere i permessi " "di scrittura per la cartella del tema '%1'." -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 msgid "Smile" msgstr "Sorriso" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "Occhiolino" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "Linguaccia" -#: emoticontheme.cpp:797 +#: emoticontheme.cpp:812 msgid "Big smile" msgstr "Sorrisone" -#: emoticontheme.cpp:798 +#: emoticontheme.cpp:813 msgid "Sad" msgstr "Triste" -#: emoticontheme.cpp:799 +#: emoticontheme.cpp:814 msgid "Crying" msgstr "Pianto" -#: emoticontheme.cpp:800 +#: emoticontheme.cpp:815 msgid "Angry" msgstr "Rabbia" -#: emoticontheme.cpp:801 +#: emoticontheme.cpp:816 msgid "Confused" msgstr "Confuso" -#: emoticontheme.cpp:802 +#: emoticontheme.cpp:817 msgid "Embarrassed" msgstr "Imbarazzato" -#: emoticontheme.cpp:803 +#: emoticontheme.cpp:818 msgid "Disappointed" msgstr "Disappunto" -#: emoticontheme.cpp:804 +#: emoticontheme.cpp:819 msgid "Hot" msgstr "Caldo" -#: emoticontheme.cpp:805 +#: emoticontheme.cpp:820 msgid "Baring teeth" msgstr "Denti scoperti" -#: emoticontheme.cpp:806 +#: emoticontheme.cpp:821 msgid "Nerd" msgstr "Secchione" -#: emoticontheme.cpp:807 +#: emoticontheme.cpp:822 msgid "Sick" msgstr "Disgustato" -#: emoticontheme.cpp:808 +#: emoticontheme.cpp:823 msgid "Surprised" msgstr "Sorpreso" -#: emoticontheme.cpp:809 +#: emoticontheme.cpp:824 msgid "Party" msgstr "Festa" -#: emoticontheme.cpp:810 +#: emoticontheme.cpp:825 msgid "Sleepy" msgstr "Sonno" -#: emoticontheme.cpp:811 +#: emoticontheme.cpp:826 msgid "Thinking" msgstr "Pensieroso" -#: emoticontheme.cpp:812 +#: emoticontheme.cpp:827 msgid "Don't tell anyone" msgstr "Segreto" -#: emoticontheme.cpp:813 +#: emoticontheme.cpp:828 msgid "Secret telling" msgstr "Racconto un segreto" -#: emoticontheme.cpp:814 +#: emoticontheme.cpp:829 msgid "Eye-rolling" msgstr "Stufo" -#: emoticontheme.cpp:815 +#: emoticontheme.cpp:830 msgid "Sarcastic" msgstr "Sarcastico" -#: emoticontheme.cpp:816 +#: emoticontheme.cpp:831 msgid "I don't know" msgstr "Non saprei" -#: emoticontheme.cpp:817 +#: emoticontheme.cpp:832 msgid "Be right back" msgstr "Torno subito" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "Angelico" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "Abbraccio (sinistra)" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "Ragazzo" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "Cuore" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "Rosa rossa" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "Pollice in su" -#: emoticontheme.cpp:824 +#: emoticontheme.cpp:839 msgid "Dog face" msgstr "Cane" -#: emoticontheme.cpp:825 +#: emoticontheme.cpp:840 msgid "Sun" msgstr "Sole" -#: emoticontheme.cpp:826 +#: emoticontheme.cpp:841 msgid "Devil" msgstr "Demone" -#: emoticontheme.cpp:827 +#: emoticontheme.cpp:842 msgid "Right hug" msgstr "Abbraccio (destra)" -#: emoticontheme.cpp:828 +#: emoticontheme.cpp:843 msgid "Girl" msgstr "Ragazza" -#: emoticontheme.cpp:829 +#: emoticontheme.cpp:844 msgid "Broken heart" msgstr "Cuore spezzato" -#: emoticontheme.cpp:830 +#: emoticontheme.cpp:845 msgid "Wilted rose" msgstr "Rosa appassita" -#: emoticontheme.cpp:831 +#: emoticontheme.cpp:846 msgid "Thumbs down" msgstr "Pollice verso" -#: emoticontheme.cpp:832 +#: emoticontheme.cpp:847 msgid "Cat face" msgstr "Gatto" -#: emoticontheme.cpp:833 +#: emoticontheme.cpp:848 msgid "Sleeping half-moon" msgstr "Mezza luna" -#: emoticontheme.cpp:834 +#: emoticontheme.cpp:849 msgid "Red lips" msgstr "Bacio" -#: emoticontheme.cpp:835 +#: emoticontheme.cpp:850 msgid "Clapping" msgstr "Applauso" -#: emoticontheme.cpp:836 +#: emoticontheme.cpp:851 msgid "Crossed fingers" msgstr "Dita incrociate" -#: emoticontheme.cpp:837 +#: emoticontheme.cpp:852 msgid "Auto" msgstr "Auto" -#: emoticontheme.cpp:838 +#: emoticontheme.cpp:853 msgid "Airplane" msgstr "Aereo" -#: emoticontheme.cpp:839 +#: emoticontheme.cpp:854 msgid "Turtle" msgstr "Tartaruga" -#: emoticontheme.cpp:840 +#: emoticontheme.cpp:855 msgid "Snail" msgstr "Lumaca" -#: emoticontheme.cpp:841 +#: emoticontheme.cpp:856 msgid "Black sheep" msgstr "Pecora nera" -#: emoticontheme.cpp:842 +#: emoticontheme.cpp:857 msgid "Goat" msgstr "Capra" -#: emoticontheme.cpp:843 +#: emoticontheme.cpp:858 msgid "Vampire bat" msgstr "Pipistrello" -#: emoticontheme.cpp:844 +#: emoticontheme.cpp:859 msgid "Pizza" msgstr "Pizza" -#: emoticontheme.cpp:845 +#: emoticontheme.cpp:860 msgid "Beer mug" msgstr "Birra" -#: emoticontheme.cpp:846 +#: emoticontheme.cpp:861 msgid "Martini glass" msgstr "Cocktail" -#: emoticontheme.cpp:847 +#: emoticontheme.cpp:862 msgid "Coffee cup" msgstr "Caffè" -#: emoticontheme.cpp:848 +#: emoticontheme.cpp:863 msgid "Birthday cake" msgstr "Torta di compleanno" -#: emoticontheme.cpp:849 +#: emoticontheme.cpp:864 msgid "Plate" msgstr "Piatto" -#: emoticontheme.cpp:850 +#: emoticontheme.cpp:865 msgid "Bowl" msgstr "Ciotola" -#: emoticontheme.cpp:851 +#: emoticontheme.cpp:866 msgid "Star" msgstr "Stella" -#: emoticontheme.cpp:852 +#: emoticontheme.cpp:867 msgid "Rainbow" msgstr "Arcobaleno " -#: emoticontheme.cpp:853 +#: emoticontheme.cpp:868 msgid "Stormy cloud" msgstr "Nuvoloso" -#: emoticontheme.cpp:854 +#: emoticontheme.cpp:869 msgid "Lightning" msgstr "Fulmine" -#: emoticontheme.cpp:855 +#: emoticontheme.cpp:870 msgid "Umbrella" msgstr "Ombrello" -#: emoticontheme.cpp:856 +#: emoticontheme.cpp:871 msgid "Island with a palm tree" msgstr "Palme" -#: emoticontheme.cpp:857 +#: emoticontheme.cpp:872 msgid "Telephone receiver" msgstr "Cornetta" -#: emoticontheme.cpp:858 +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "Cellulare" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "Email" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 msgid "Clock" msgstr "Orologio" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 msgid "Camera" msgstr "Fotocamera" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "Film" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "Nota" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "Manette" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 msgid "Money" msgstr "Soldi" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "Lampadina" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "Sigaretta" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "Pallone da calcio" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "Regalo" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "X-Box" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "Computer" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 msgid "KMess Icon" msgstr "KMess" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "Il server non è disponibile" + +#: initialview.cpp:377 +#, fuzzy +msgid "Connect" +msgstr "&Connetti" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "&Disconnetti" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "Meno opzioni..." -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "Alre opzioni..." -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "Nuovo &gruppo" + +#: kmess.cpp:226 msgid "Add a group" msgstr "Aggiungi un gruppo" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "Inserisci un nuovo nome per questo gruppo:" -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "L'indirizzo del contatto che hai inserito non è valido: '%1'" - -#: kmess.cpp:638 +#: kmess.cpp:569 msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" -msgstr "Sei sicuro di voler rimuovere il contatto %1 dalla tua lista?" +msgstr "" +"Sei sicuro di voler rimuovere il contatto %1 dalla tua lista?" -#: kmess.cpp:640 +#: kmess.cpp:571 msgid "Remove contact" msgstr "Rimuovi un contatto" -#: kmess.cpp:641 kmess.cpp:684 -msgid "Remove" -msgstr "Rimuovi" - -#: kmess.cpp:642 +#: kmess.cpp:573 msgid "Remove and block" msgstr "Rimuovi e blocca" -#: kmess.cpp:681 +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" -msgstr "Sei sicuro di voler rimuovere il gruppo %1 dalla tua lista?" +msgstr "" +"Sei sicuro di voler rimuovere il gruppo %1 dalla tua lista?" -#: kmess.cpp:683 -msgid "Remove group" -msgstr "Rimuovi un gruppo" +#: kmess.cpp:631 +#, fuzzy +msgctxt "dialog button" +msgid "Remove" +msgstr "Rimuovi" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "Questo è un gruppo speciale e non può essere modificato." -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 msgid "Rename group" msgstr "Rinomina un gruppo" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "Connesso" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "Autenticazione non riuscita" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "Disconnesso" -#: kmess.cpp:1441 +#: kmess.cpp:1408 +#, fuzzy msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" "

KMess non sarƠ in grado di riprodurre suoni nƩ notifiche.

Il " "file 'kmess.eventsrc' non ĆØ stato trovato in una delle seguenti cartelle: %" "1

Verifica la tua installazione di KMess, e copia il file mancante in " "una delle cartelle elencate.

" -#: kmess.cpp:1445 +#: kmess.cpp:1412 msgid "Error with notifications" msgstr "Errore delle notifiche" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "KMess" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "&Azioni" @@ -1869,210 +2535,239 @@ msgstr "C&erca un Contatto" msgid "Search by &Interest" msgstr "Cerca per &interessi" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "C&erca un Contatto" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "Nuovo &account" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "Impo&stazioni account" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "Co&nnetti" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "&Disconnetti" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "Mostra il mio &profilo" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "Il mio &stato" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "Assente con risposta automatica" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "&Visualizza" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "Mostra cont&atti autorizzati" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 msgid "Show &Offline Contacts" msgstr "Mostra contatti n&on in linea" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "Mostra contatti &rimossi" -#: kmessinterface.cpp:303 -msgid "Show &Display Pictures" -msgstr "Mostra &Immagini Personali" +#: kmessinterface.cpp:318 +#, fuzzy +msgid "Show &Empty Groups" +msgstr "Mostra &emoticon" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" +msgstr "Immagine personale" + +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "Sorriso" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "&Ordina contatti per" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "Gruppo" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "In linea/Non in linea" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "Mostra finestra dei &trasferimenti" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "Mostra Barra degli S&trumenti" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "Mostra fi&nestra di rete" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "Sto ascoltando %1" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +msgid "[%1] %2 goes online" +msgstr "" + +#: kmessview.cpp:363 +msgid "[%1] %2 goes offline" +msgstr "" + +#: kmessview.cpp:559 msgid "Cha&t" msgstr "Cha&t" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "&ProprietĆ " -#: kmessview.cpp:492 +#: kmessview.cpp:569 msgid "&Remove from group" msgstr "&Rimuovi dal gruppo" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +msgid "&Listening Music" +msgstr "" + +#: kmessview.cpp:601 msgid "&Copy to Group" msgstr "&Copia al gruppo" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "&Sposta al gruppo" -#: kmessview.cpp:549 +#: kmessview.cpp:646 msgid "Move Group &Down" msgstr "Sposta &gruppo in basso" -#: kmessview.cpp:550 +#: kmessview.cpp:647 msgid "Move Group &Up" msgstr "Sposta gr&uppo in alto" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "Ri&muovi gruppo" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "Ri&nomina gruppo" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "Email: %1" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "Client: %1" -#: kmessview.cpp:918 +#: kmessview.cpp:1075 +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "" + +#: kmessview.cpp:1076 +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "" + +#: kmessview.cpp:1085 msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "Gruppo %1" -#: kmessview.cpp:921 -msgctxt "Contacts count in group tooltip" +#: kmessview.cpp:1090 +#, fuzzy +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "%1 contatti" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +#, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "Questo contatto non ĆØ in linea" + +#: kmessview.cpp:1504 msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "<Inserisci un tuo messaggio personale qui>" -#: kmessview.cpp:1543 -msgid "You have 1 new e-mail in your inbox." -msgstr "Hai un nuovo messaggio di posta." +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" -#: kmessview.cpp:1547 -msgid "You have %1 new emails in your inbox." -msgstr "Hai %1 nuovi messaggi di posta." - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "KMess" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "Un client per KDE di MSN Messenger" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "Mike K. Bennett" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "Sviluppatore e fondatore del progetto" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "Michael Curtis" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "Sviluppatore" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "Jan Tƶnjes" - -#: main.cpp:59 +#: main.cpp:72 msgid "Project support" msgstr "Supporto al progetto" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "Diederik van der Boor" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 msgid "Current developer" msgstr "Attuale sviluppatore" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "Richard Conway" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "Valerio Pilo" - -#: main.cpp:65 +#: main.cpp:78 msgid "" "German translation, testing, documentation, web master, project management, " "etc..." @@ -2080,573 +2775,474 @@ msgstr "" "Traduzione tedesca, test, documentazione, gestione sito web, responsabile " "del progetto, ecc..." -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "Dane Harnett" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "Web design" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "David Vignoni" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "Set di emoticon gialle/blu/viola e traduzione italiana" -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "Julien Joubin" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "Set di emoticon Cartoon" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "Christian Müller" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "Tema sonoro predefinito" -#: main.cpp:73 -msgid "Mohamed Aser" -msgstr "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" +msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "" "Traduzione araba, internazionalizzazione del correzioni per il salvataggio " "dei file." -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "Youssef Chahibi" - -#: main.cpp:74 +#: main.cpp:88 msgid "More Arabic translation" msgstr "Ulteriore traduzione araba" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "Mauricio Rother" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "Traduzione portoghese/brasiliano" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "Jaume Cornadó" - -#: main.cpp:76 +#: main.cpp:90 msgid "Catalan translation" msgstr "Traduzione catalana" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "Lin Haoxiang" - -#: main.cpp:78 +#: main.cpp:92 msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "" "Traduzione in cinese semplificato, correzione del bug di invio file, codice " "di connessione a proxy" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "Liu Sizhuang" - -#: main.cpp:79 +#: main.cpp:93 msgid "More Simplified Chinese translation" msgstr "Ulteriore traduzione in cinese semplificato" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "Yen-chou Chen" - -#: main.cpp:80 +#: main.cpp:94 msgid "Traditional Chinese translation" msgstr "Traduzione cinese tradizionale" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "Lars Sommer" - -#: main.cpp:82 +#: main.cpp:96 msgid "Danish translation" msgstr "Traduzione danese" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "Pascal d'Hermilly" - -#: main.cpp:83 +#: main.cpp:97 msgid "More Danish translation" msgstr "Ulteriore traduzione danese" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "Arend van Beelen Jr." - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "Traduzione olandese" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "Jaap Woldringh" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 msgid "More Dutch translation" msgstr "Ulteriore traduzione tedesca" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "Jyri Toomessoo" - -#: main.cpp:87 +#: main.cpp:102 msgid "Estonian translation" msgstr "Traduzione estone" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "Markus Vuori" - -#: main.cpp:88 +#: main.cpp:103 msgid "Finnish translation" msgstr "Traduzione finlandese" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "Joonas Niilola" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 msgid "More Finnish translation" msgstr "Ulteriore traduzione danese" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "Jussi Timperi" - -#: main.cpp:92 -msgid "Choplair" -msgstr "Choplair" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "Traduzione francese" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "Vincent Fretin" - -#: main.cpp:93 +#: main.cpp:108 msgid "More French translation, MSN6 emoticon definitions" msgstr "Ulteriore traduzione francese, definizioni emoticon MSN6" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "Andrea Blankenstijn" - -#: main.cpp:94 +#: main.cpp:109 msgid "More French translation" msgstr "Ulteriore traduzione francese" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "PĆ”der RezsƵ" - -#: main.cpp:96 +#: main.cpp:111 msgid "Hungarian translation" msgstr "Traduzione ungherese" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 msgid "More Italian translation" msgstr "Ulteriore traduzione italiana" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "Vincenzo Reale" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "Park Dong Cheon" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "Traduzione coreana" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "Ƙyvind SƦther" - -#: main.cpp:100 +#: main.cpp:115 msgid "Norsk BokmĆ„l translation" msgstr "Traduzione norvegese BokmĆ„l" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "Matjaž kaÅ”e" - -#: main.cpp:102 +#: main.cpp:117 msgid "Slovenian translation" msgstr "Traduzione slovena" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "Johanna Gersch" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "Traduzione spagnola" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "J.C.A. Javi" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 msgid "More Spanish translation" msgstr "Ulteriore traduzione spagnola" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "Alejandro Araiza Alvarado" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "Jaume CorbĆ­" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "Christian Kaiser" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "Christian Lundgren" - -#: main.cpp:108 +#: main.cpp:123 msgid "Swedish translation" msgstr "Traduzione svedese" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "Rachan Hongpairote" - -#: main.cpp:110 +#: main.cpp:125 msgid "Thai translation" msgstr "Traduzione thailandese" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "Gorkem Cetin" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "Traduzione turca" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "Barbaros Ulutas" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "Ulteriori traduzioni in turco" -#: main.cpp:113 -msgid "Uğur Ƈetin" -msgstr "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." +msgstr "" -#: main.cpp:116 -msgid "Guido Solinas" -msgstr "Guido Solinas" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "" "Codice per le immagini nella lista contatti, informazioni client usato dai " "contatti, zoom delle font di chat" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "Trasferimenti File" + +#: main.cpp:134 msgid "P4-Context field support" msgstr "Supporto campo P4-Context" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "Scott Morgan" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "Correzioni di Xinerama" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "Laurence Anderson" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "Codice originale per la ricezione di file" -#: main.cpp:120 -msgid "Choe Hwanjin" -msgstr "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" +msgstr "" -#: main.cpp:120 +#: main.cpp:138 +#, fuzzy +msgid "KWallet support" +msgstr "Supporto al progetto" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "Varie correzioni sull'internazionalizzazione." + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "Varie correzioni sull'internazionalizzazione." -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "Damien Sandras" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "Sviluppatore GnomeMeeting" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "Tobias Tƶnjes" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "Ragazzo con un sacchetto in testa" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "KMerlin (kmerlin.olsd.de)" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "Ispirazione e parti di codice" -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "Kopete (kopete.kde.org)" - -#: main.cpp:126 +#: main.cpp:150 msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "" "Vecchio codice fumetti di notifica, codice P2P iniziale, gestore " "autenticazioni" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "KScreensaver" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "Codice tempo di inattivitĆ " -#: main.cpp:128 -msgid "BasKet" -msgstr "BasKet" - -#: main.cpp:128 +#: main.cpp:152 msgid "Close-to-tray icon screenshot code" msgstr "Codice per l'immagine alla chiusura in tray" -#: main.cpp:131 +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 msgid "Your name here?" msgstr "Il tuo nome qui?" -#: main.cpp:131 +#: main.cpp:156 +#, fuzzy msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" "Sei invitato a inviare le tue correzioni di bug e patch ai forum di KMess!\n" "Se pensi che il tuo nome manchi in questa lista, contattaci!" -#: main.cpp:134 +#: main.cpp:159 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "I vostri nomi" -#: main.cpp:135 +#: main.cpp:160 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "I vostri indirizzi email" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "Accesso automatico con questo indirizzo email" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "Esegue una prova di debugging (solo build per sviluppatori)" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 msgid "The contact cancelled the session." msgstr "Il contatto ha chiuso la sessione." -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 msgid "The contact rejected the invitation." msgstr "Il contatto ha rifiutato l'invito." -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 msgid "You have cancelled the session." msgstr "Hai chiuso la sessione." -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "Hai rifiutato l'invito." -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +#, fuzzy +msgid "Do you want to accept or cancel?" msgstr "Desideri accettare o rifiutare?" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +#, fuzzy +msgid "Click to cancel." msgstr "Fai clic per rifiutare." -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 msgid "Do you want to accept the file: %1 (%2)" msgstr "Vuoi accettare il file: %1 (%2)" -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 msgid "The transfer of %1 failed. Couldn't open file." msgstr "Il trasferimento di %1 non ĆØ riuscito. Impossibile aprire il file." -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "Trasferimento accettato." + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 msgid "Connecting to %1, port %2" msgstr "Connessione a %1, sulla porta %2" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 msgid "The transfer was cancelled" msgstr "Il trasferimento ĆØ stato annullato" -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 msgid "Connection established" msgstr "Connessione stabilita" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 msgid "Successfully transferred file: %1" msgstr "Trasferimento completato del file: %1" -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 msgid "The transfer of %1 failed. The file does not exist." msgstr "Il trasferimento di %1 non ĆØ riuscito. Il file non esiste." -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 msgid "The transfer of %1 failed. The file could not be read." msgstr "Il trasferimento di %1 non ĆØ riuscito. Il file non può essere letto." -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 msgid "Sending file %1" msgstr "Invio del file %1" -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "Trasferimento accettato." - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "Negoziazione modalitĆ  di connessione" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "" "L'invito a trasferire il file ĆØ stato annullato, sono state ricevutidati non " "validi." -#: network/applications/filetransferp2p.cpp:345 -msgid "The transfer of %1 failed. Couldn't open file" +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." +msgstr "" + +#: network/applications/filetransferp2p.cpp:348 +#, fuzzy +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "" +"Il file '%1' esiste giĆ .\n" +"Vuoi sovrascriverlo?" + +#: network/applications/filetransferp2p.cpp:378 +#, fuzzy +msgid "The transfer of file "%1" failed. Couldn't save the file." msgstr "Il trasferimento di %1 non ĆØ riuscito. Impossibile aprire il file." -#: network/applications/filetransferp2p.cpp:524 -msgid "The contact cancelled the transfer." +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 +#, fuzzy +msgid "The contact has cancelled the transfer of file "%1"." msgstr "Il contatto ha annullato il trasferimento." -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "Hai chiuso la sessione." + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "Impossibile scrivere sul file." -#: network/applications/filetransferp2p.cpp:768 -msgid "The transfer of %1 failed. The file does not exist." +#: network/applications/filetransferp2p.cpp:676 +#, fuzzy +msgid "Successfully sent file "%1"." +msgstr "Trasferimento completato del file: %1" + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "Trasferimento completato del file: %1" + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "Il trasferimento di %1 non ĆØ riuscito. Il file non esiste." -#: network/applications/filetransferp2p.cpp:773 -msgid "The transfer of %1 failed. The file could not be read." +#: network/applications/filetransferp2p.cpp:818 +#, fuzzy +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "Il trasferimento di %1 non ĆØ riuscito. Il file non può essere letto." -#: network/applications/filetransferp2p.cpp:809 -msgid "Sending file %1 (%2)" +#: network/applications/filetransferp2p.cpp:855 +#, fuzzy +msgid "Sending file "%1" (%2)." msgstr "Invio del file %1 (%2)" -#: network/applications/gnomemeeting.cpp:54 -msgid "You are invited to start a meeting (using GnomeMeeting)." -msgstr "Sei stato invitato a partecipare ad una conferenza (tramite GnomeMeeting)." +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "Il contatto ha annullato il trasferimento." -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:56 +msgid "You are invited to start a meeting (using GnomeMeeting)." +msgstr "" +"Sei stato invitato a partecipare ad una conferenza (tramite GnomeMeeting)." + +#: network/applications/gnomemeeting.cpp:118 msgid "Starting GnomeMeeting. Connecting to %1." msgstr "Avvio di GnomeMeeting. Connessione a %1." -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "Invio di un invito a partecipare a una conferenza." -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "L'invito ĆØ stato rifiutato, il programma del contatto non lo supporta." -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 msgid "The invitation was aborted. An internal error occured." msgstr "Invio dell'invito annullato a causa di un errore interno." -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "Invio dell'invito annullato per mancata risposta." -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "Invio dell'invito annullato a causa di un errore di timeout." -#: network/applications/mimeapplication.cpp:135 -msgid "The invitation was aborted. The switchboard closed the chat connection." -msgstr "Invio dell'invito annullato a causa della chiusura forzata della connessione." +#: network/applications/mimeapplication.cpp:138 +msgid "" +"The invitation was aborted. The switchboard closed the chat connection." +msgstr "" +"Invio dell'invito annullato a causa della chiusura forzata della connessione." -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 msgid "The invitation was aborted." msgstr "Invito annullato." -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "Sei stato invitato a condividere il desktop del contatto." -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 msgid "Starting KRDC. Connecting to %1." msgstr "Avvio di KRDC. Connessione a %1." -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." -msgstr "" -"Il contatto ha richiesto una caratteristica di MSN non ancora supportata da " -"KMess." +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +msgid "The contact rejected the invitation. An internal error occured." +msgstr "Il contatto ha rifiutato l'invito, a causa di un errore interno." -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +msgid "The transfer failed." +msgstr "Il trasferimento non ĆØ riuscito." + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." @@ -2654,76 +3250,72 @@ msgstr "" "Invito rifiutato a causa di un errore di trasferimento, o di una " "caratteristica non supportata da KMess." -#: network/applications/p2papplication.cpp:1503 -msgid "The transfer failed. Data preparation failed." -msgstr "Il trasferimento non ĆØ riuscito, a causa di un errore interno." - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -msgid "The contact rejected the invitation. An internal error occured." -msgstr "Il contatto ha rifiutato l'invito, a causa di un errore interno." - -#: network/applications/p2papplication.cpp:1626 -msgid "The transfer failed." -msgstr "Il trasferimento non ĆØ riuscito." - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 -msgid "The transfer failed. The contact sent bad data, or KMess doesn't support it." +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 +msgid "" +"The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "Il trasferimento non ĆØ riuscito. Sono state ricevute informazioni non " "valide, oppure KMess non lo supporta." -#: network/applications/p2papplication.cpp:2055 -msgid "The invitation was cancelled. Message was not directed to us." -msgstr "L'invito ĆØ stato annullato. Il messaggio non era per noi." - -#: network/applications/p2papplication.cpp:2605 -msgid "The transfer failed. The contact sent bad data, or KMess doesn't support it." -msgstr "" -"Il trasferimento non ĆØ riuscito. Sono state ricevuti dati non validi, oppure " -"KMess non lo supporta." - -#: network/applications/p2papplication.cpp:2961 -#: network/extra/msnftpconnection.cpp:398 -msgid "Awaiting connection at %1, port %2" -msgstr "Attesa di una connessione a %1, sulla porta %2" - -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 -msgid "Reverting to indirect file transfer (this could be slow)." -msgstr "" -"Utilizzo del trasferimento indiretto (tramite i server di MSN). La velocitĆ  " -"di trasferimento sarĆ  molto ridotta." - -#: network/applications/p2papplication.cpp:3297 +#: network/applications/p2papplicationbase.cpp:996 msgid "The transfer failed. Timeout while waiting for user to accept." msgstr "Il trasferimento non ĆØ riuscito, a causa di una mancata risposta." -#: network/applications/p2papplication.cpp:3316 +#: network/applications/p2papplicationbase.cpp:1015 msgid "The transfer failed. An internal error occured." msgstr "Il trasferimento non ĆØ riuscito, a causa di un errore interno." -#: network/applications/p2papplication.cpp:3693 +#: network/applications/p2papplicationbase.cpp:1176 msgid "The transfer failed. Couldn't open data source." msgstr "" "Il trasferimento non ĆØ riuscito, a causa di un errore nell'apertura della " "sorgente dati." -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "" +"Il contatto ha richiesto una caratteristica di MSN non ancora supportata da " +"KMess." + +#: network/applications/p2papplication.cpp:1071 +msgid "The transfer failed. Data preparation failed." +msgstr "Il trasferimento non ĆØ riuscito, a causa di un errore interno." + +#: network/applications/p2papplication.cpp:1178 +msgid "The invitation was cancelled. Message was not directed to us." +msgstr "L'invito ĆØ stato annullato. Il messaggio non era per noi." + +#: network/applications/p2papplication.cpp:1716 +msgid "" +"The transfer failed. The contact sent bad data, or KMess doesn't support it." +msgstr "" +"Il trasferimento non ĆØ riuscito. Sono state ricevuti dati non validi, oppure " +"KMess non lo supporta." + +#: network/applications/p2papplication.cpp:2068 +#: network/extra/msnftpconnection.cpp:398 +msgid "Awaiting connection at %1, port %2" +msgstr "Attesa di una connessione a %1, sulla porta %2" + +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 +msgid "Reverting to indirect file transfer (this could be slow)." +msgstr "" +"Utilizzo del trasferimento indiretto (tramite i server di MSN). La velocitĆ  " +"di trasferimento sarĆ  molto ridotta." + +#: network/applications/p2papplication.cpp:3113 msgid "Waiting for connection" msgstr "In attesa di connessione" -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " "accept." msgstr "L'invito ĆØ stato annullato, a causa di una mancata risposta." -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." @@ -2731,18 +3323,18 @@ msgstr "" "L'invito ĆØ stato annullato, a causa di una mancata risposta dalla " "connessione." -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "" "L'invito ĆØ stato annullato, a causa di una mancata risposta all'attesa di " "dati." -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 msgid "You are invited to start a voice conversation." msgstr "Sei stato invitato a partecipare a una conversazione vocale." -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 msgid "" "You are invited to start a voice conversation but support for this was not " "installed" @@ -2750,29 +3342,29 @@ msgstr "" "Sei stato invitato a partecipare a una conversazione vocale ma non ĆØ stato " "installato il programma di supporto." -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 msgid "You have cancelled the voice conversation." msgstr "Hai annullato la conversazione vocale." -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "" "L'invito ĆØ stato annullato, a causa di un errore nell'apertura della " "periferica audio." -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 msgid "Start voice conversation. Connecting to %1." msgstr "Inizio conversazione vocale. Connessione a %1." -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 msgid "Start voice conversation. Listening on %1." msgstr "Inizio conversazione vocale. In attesa da %1." -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 msgid "Inviting the contact to a voice conversation." msgstr "Invio dell'invito a partecipare a una conversazione vocale." -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 msgid "The contact is inviting you for '%1', but this is not implemented yet." msgstr "" @@ -2819,626 +3411,776 @@ msgstr "Impossibile effettuare la connessione." msgid "Receiving file %1" msgstr "Ricezione del file %1" -#: network/msnconnection.cpp:477 -msgid "1 ping lost" -msgstr "1 ping perduto" - -#: network/msnconnection.cpp:481 -msgid "%1 pings lost" -msgstr "%1 ping perduti" - -#: network/msnconnection.cpp:496 -msgid "The connection to the server was lost." -msgstr "La connessione al server ĆØ stata persa." - -#: network/msnconnection.cpp:704 -msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." +#: network/msnconnection.cpp:589 +#, fuzzy +msgid "KMess could not access the remote webservice.
Details: %1" msgstr "" -"KMess non ĆØ riuscito a connettersi al servizio MSN Messenger.\n" -"Per favore, assicurati di essere connesso a Internet.\n" -"motivo: %1." +"Impossibile accedere al servizio web remoto.\n" +"Dettagli: %1" -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "Il server remoto ha chiuso la connessione." - -#: network/msnnotificationconnection.cpp:548 +#: network/msnnotificationconnection.cpp:1317 +#, fuzzy msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" -"KMess non ĆØ riuscito a effettuare la connessione al servizio MSN Messenger. " -"I server MSN potrebbero essere temporaneamente non funzionanti, oppure " -"potrebbe esserci un problema con la tua connessione a Internet." - -#: network/msnnotificationconnection.cpp:724 -msgid "Show MSN Messenger Service status?" -msgstr "Mostra lo stato del servizio MSN Messenger" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "Errore del server" - -#: network/msnnotificationconnection.cpp:1344 -msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" msgstr "" "Sei stato disconnesso perché \n" "ti sei connesso con un altro client MSN Messenger\n" "o da un'altra postazione" -#: network/msnnotificationconnection.cpp:1558 +#: network/msnnotificationconnection.cpp:1532 msgid "Got synchronization" msgstr "Sincronizzazione avvenuta" -#: network/msnnotificationconnection.cpp:1699 -msgid "Authenticating" +#: network/msnnotificationconnection.cpp:1670 +#, fuzzy +msgid "Authenticating..." msgstr "Autenticazione" -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "Ricevuta conferma utente" - -#: network/msnnotificationconnection.cpp:1752 +#: network/msnnotificationconnection.cpp:1719 msgid "Waiting for contact list..." msgstr "In attesa della lista contatti..." -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "Trasferimento al server di notifica" +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." +msgstr "" -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" -msgstr "Autenticazione non riuscita, controlla il nome dell'account e la password" +#: network/msnnotificationconnection.cpp:1894 +#, fuzzy +msgid "Authentication failed, please verify your account name and password." +msgstr "" +"Autenticazione non riuscita, controlla il nome dell'account e la password" -#: network/msnnotificationconnection.cpp:2042 +#: network/msnnotificationconnection.cpp:1993 msgid "Connecting..." msgstr "Connessione in corso..." -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" -msgstr "KMess ha ricevuto un messaggio di errore sconosciuto dal server: \"%1\"" +#: network/msnnotificationconnection.cpp:2167 +#, fuzzy +msgid "Unknown command received from the server: %1" +msgstr "" +"KMess ha ricevuto un messaggio di errore sconosciuto dal server: \"%1\"" -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "Avviso della build per sviluppatori" - -#: network/msnnotificationconnection.cpp:2240 +#: network/msnnotificationconnection.cpp:2192 msgid "Invalid command syntax" msgstr "Sintassi non valida del comando" -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -msgid "There was an internal error in KMess: %1" -msgstr "Errore interno di KMess: %1" - -#: network/msnnotificationconnection.cpp:2243 +#: network/msnnotificationconnection.cpp:2196 msgid "Invalid command parameter" msgstr "Parametro non valido del comando" -#: network/msnnotificationconnection.cpp:2246 +#: network/msnnotificationconnection.cpp:2199 msgid "The email you have tried to add is not a MSN Messenger account" -msgstr "L'email che hai provato ad aggiungere non è un account di MSN Messenger" +msgstr "" +"L'email che hai provato ad aggiungere non è un account di MSN Messenger" -#: network/msnnotificationconnection.cpp:2249 +#: network/msnnotificationconnection.cpp:2204 msgid "Domain name missing" msgstr "Nome del dominio mancante" -#: network/msnnotificationconnection.cpp:2252 +#: network/msnnotificationconnection.cpp:2208 msgid "Already logged in" msgstr "Già connesso" -#: network/msnnotificationconnection.cpp:2255 +#: network/msnnotificationconnection.cpp:2211 msgid "The account name given is invalid" msgstr "Questo nome di account non è valido" -#: network/msnnotificationconnection.cpp:2258 -msgid "That account name is invalid, or your passport has not been confirmed yet" +#: network/msnnotificationconnection.cpp:2215 +msgid "" +"That account name is invalid, or your passport has not been confirmed yet" msgstr "" "Questo nome di account non è valido, oppure il tuo indirizzo email non è " "stato verificato su MSN Passport." -#: network/msnnotificationconnection.cpp:2261 +#: network/msnnotificationconnection.cpp:2218 msgid "Your contact list is full" msgstr "La tua lista dei contatti è piena" -#: network/msnnotificationconnection.cpp:2264 +#: network/msnnotificationconnection.cpp:2223 msgid "Invalid SBP parameter" msgstr "Parametro SBP non valido" -#: network/msnnotificationconnection.cpp:2267 +#: network/msnnotificationconnection.cpp:2226 msgid "This contact is already on your list" msgstr "Questo contatto è già presente nella tua lista" -#: network/msnnotificationconnection.cpp:2270 +#: network/msnnotificationconnection.cpp:2230 msgid "This contact is not on your list" msgstr "Questo contatto non è presente nella tua lista" -#: network/msnnotificationconnection.cpp:2273 +#: network/msnnotificationconnection.cpp:2234 msgid "This contact is not online" msgstr "Questo contatto non è in linea" -#: network/msnnotificationconnection.cpp:2276 +#: network/msnnotificationconnection.cpp:2239 msgid "Already in this mode" msgstr "Già in questa modalità" -#: network/msnnotificationconnection.cpp:2279 +#: network/msnnotificationconnection.cpp:2243 msgid "Contact is in the opposite list" msgstr "Il contatto è nella lista opposta" -#: network/msnnotificationconnection.cpp:2282 -msgid "Your contact list has too many groups" -msgstr "La tua lista dei contatti ha troppi gruppi" - -#: network/msnnotificationconnection.cpp:2285 -msgid "This group can't be changed" -msgstr "Questo è un gruppo speciale e non può essere modificato" - -#: network/msnnotificationconnection.cpp:2288 -msgid "This group is not empty" -msgstr "Questo gruppo non è vuoto" - -#: network/msnnotificationconnection.cpp:2291 -msgid "The group name is already in use by your Messenger or Hotmail contact list" +#: network/msnnotificationconnection.cpp:2247 +#, fuzzy +msgid "" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." msgstr "" "Questo nome di gruppo è già usato nella tua lista di contatti di Messenger o " "di Hotmail" -#: network/msnnotificationconnection.cpp:2294 +#: network/msnnotificationconnection.cpp:2251 +msgid "Your contact list has too many groups" +msgstr "La tua lista dei contatti ha troppi gruppi" + +#: network/msnnotificationconnection.cpp:2255 +msgid "This group can't be changed" +msgstr "Questo è un gruppo speciale e non può essere modificato" + +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "La tua lista dei contatti ha troppi gruppi" + +#: network/msnnotificationconnection.cpp:2264 +msgid "This group is not empty" +msgstr "Questo gruppo non è vuoto" + +#: network/msnnotificationconnection.cpp:2268 msgid "The group name is too long" msgstr "Il nome del gruppo è troppo lungo" -#: network/msnnotificationconnection.cpp:2297 +#: network/msnnotificationconnection.cpp:2273 msgid "Attempted to change group \"0\"" msgstr "Tentativo di cambiare il gruppo \"0\"" -#: network/msnnotificationconnection.cpp:2300 +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +msgid "There was an internal error in KMess: %1" +msgstr "Errore interno di KMess: %1" + +#: network/msnnotificationconnection.cpp:2277 msgid "Invalid Group" msgstr "Gruppo non valido" -#: network/msnnotificationconnection.cpp:2303 +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 msgid "Switchboard server failed" msgstr "Connessione al server di scambio non riuscita" -#: network/msnnotificationconnection.cpp:2306 +#: network/msnnotificationconnection.cpp:2287 msgid "Transfer to switchboard server failed" msgstr "Trasferimento al server di notifica non riuscito" -#: network/msnnotificationconnection.cpp:2309 +#: network/msnnotificationconnection.cpp:2291 msgid "Direct connection (MSNSLP) error, connection failed" msgstr "Errore nella connessione diretta (MSNSLP), connessione non riuscita" -#: network/msnnotificationconnection.cpp:2312 +#: network/msnnotificationconnection.cpp:2295 msgid "Required field missing" msgstr "Campo richiesto mancante" -#: network/msnnotificationconnection.cpp:2315 +#: network/msnnotificationconnection.cpp:2299 msgid "Not logged in" msgstr "Non connesso" -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" -msgstr "Errore nell'accesso alla lista contatti, riprova più tardi" +#: network/msnnotificationconnection.cpp:2302 +#, fuzzy +msgid "No permissions given for this account" +msgstr "Emoticon personali per questo account:" -#: network/msnnotificationconnection.cpp:2322 +#: network/msnnotificationconnection.cpp:2307 msgid "Command is disabled" msgstr "Comando disabilitato" -#: network/msnnotificationconnection.cpp:2325 +#: network/msnnotificationconnection.cpp:2310 msgid "Your account is banned." msgstr "Il tuo account è stato bandito." -#: network/msnnotificationconnection.cpp:2329 +#: network/msnnotificationconnection.cpp:2314 msgid "Challenge response failed" msgstr "Risposta alla sfida fallita" -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" +#: network/msnnotificationconnection.cpp:2319 +#, fuzzy +msgid "Bad command data" +msgstr "Sintassi non valida del comando" + +#: network/msnnotificationconnection.cpp:2323 +#, fuzzy +msgid "You are opening chat sessions too fast" msgstr "Stai aprendo sessioni troppo rapidamente" -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" msgstr "Hai troppe sessioni aperte" -#: network/msnnotificationconnection.cpp:2341 +#: network/msnnotificationconnection.cpp:2334 msgid "Unexpected command sequence" msgstr "Sequenza non attesa di comandi" -#: network/msnnotificationconnection.cpp:2344 +#: network/msnnotificationconnection.cpp:2338 msgid "Bad friend name" msgstr "Nome personale non valido" -#: network/msnnotificationconnection.cpp:2348 +#: network/msnnotificationconnection.cpp:2344 msgid "Bad CVR data" msgstr "Dati CVR non validi" -#: network/msnnotificationconnection.cpp:2353 +#: network/msnnotificationconnection.cpp:2350 msgid "The server reports KMess is flooding it with too many data" msgstr "Il server riporta un sovraccarico di dati da parte di KMess" -#: network/msnnotificationconnection.cpp:2358 +#: network/msnnotificationconnection.cpp:2357 msgid "Authentication ticket was incorrect" msgstr "Il biglietto di autenticazione non era valido" -#: network/msnnotificationconnection.cpp:2362 +#: network/msnnotificationconnection.cpp:2360 msgid "You can't start a chat with someone while you are invisible." msgstr "Non puoi avviare una chat quando sei invisibile." -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." +#: network/msnnotificationconnection.cpp:2364 +#, fuzzy +msgid "Not accepting new contacts" +msgstr "Non accettiamo nuovi principali" + +#: network/msnnotificationconnection.cpp:2368 +#, fuzzy +msgid "" +"You have a kids passport account, you need parental consent to chat online." msgstr "" "Hai un Passport per bambini, devi chiedere il permesso dei tuoi genitori per " "conversare in linea." -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." +#: network/msnnotificationconnection.cpp:2371 +#, fuzzy +msgid "Your passport account needs to be verified first." msgstr "Il tuo account deve essere prima verificato su MSN Passport." -#: network/msnnotificationconnection.cpp:2373 +#: network/msnnotificationconnection.cpp:2375 msgid "Bad USR ticket" msgstr "Biglietto USR non valido" -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" -msgstr "KMess - Errore MSN" +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" +msgstr "Errore nell'accesso alla lista contatti, riprova più tardi" -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" +#: network/msnnotificationconnection.cpp:2399 +#, fuzzy +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." msgstr "È avvenuto un errore interno nel server" +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + #: network/msnnotificationconnection.cpp:2414 -msgid "The server is too busy" -msgstr "Il server è occupato" - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "Il server non è raggiungibile" - -#: network/msnnotificationconnection.cpp:2422 msgid "Peer notification server down" msgstr "Connessione al server di scambio notifiche utenti persa" -#: network/msnnotificationconnection.cpp:2426 +#: network/msnnotificationconnection.cpp:2418 msgid "The server is going down" msgstr "La connessione al server sta per cadere" -#: network/msnnotificationconnection.cpp:2429 +#: network/msnnotificationconnection.cpp:2422 msgid "The server is going down soon" msgstr "La connessione al server cadrà presto" -#: network/msnnotificationconnection.cpp:2433 +#: network/msnnotificationconnection.cpp:2427 msgid "Write is blocking" msgstr "Scrittura non permessa" -#: network/msnnotificationconnection.cpp:2436 +#: network/msnnotificationconnection.cpp:2431 msgid "Session is overloaded" msgstr "Sessione troppo carica" -#: network/msnnotificationconnection.cpp:2441 +#: network/msnnotificationconnection.cpp:2438 msgid "The server is not available" msgstr "Il server non è disponibile" -#: network/msnnotificationconnection.cpp:2444 +#: network/msnnotificationconnection.cpp:2442 msgid "Authentication failed" msgstr "Autenticazione non riuscita" -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" -msgstr "Non accettiamo nuovi principali" +#: network/msnnotificationconnection.cpp:2449 +#, fuzzy +msgid "Unknown error code received from the server: %1" +msgstr "" +"KMess ha ricevuto un messaggio di errore sconosciuto dal server: \"%1\"" -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" -msgstr "KMess ha ricevuto un messaggio di errore sconosciuto dal server, \"%1\"" +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +#, fuzzy +msgctxt "Error dialog box title" +msgid "MSN error" +msgstr "KMess - Errore MSN" -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "Attenzione: Il server chiude per manutenzione tra 1 minuto!" +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "minuti" +msgstr[1] "minuti" #: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." -msgstr "Il server MSN ha indicato che chiuderà per manutenzione tra un minuto." - -#: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" +#, fuzzy +msgid "Server closes for maintenance in %1!" msgstr "Attenzione: Il server chiude per manutenzione tra %1 minuti!" -#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:2604 +#, fuzzy +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." +msgstr "Il server MSN ha indicato che chiuderà per manutenzione tra un minuto." + +#: network/msnnotificationconnection.cpp:2901 msgid "Lost reference to SOAP client" msgstr "Perso riferimento al client SOAP" -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +#, fuzzy +msgid "KMess could not process Offline-IM messages.
Details: %1" msgstr "" "Impossibile gestire i messaggi non in linea.\n" "Dettagli: %1" -#: network/msnnotificationconnection.cpp:3209 +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "Autenticazione non riuscita" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "Errore interno di KMess: %1" + +#: network/msnnotificationconnection.cpp:3242 +#, fuzzy +msgctxt "Login error message, with more details for developer versions" msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" +msgstr "" +"KMess non ĆØ riuscito a effettuare la connessione al servizio MSN Messenger. " +"I server MSN potrebbero essere temporaneamente non funzionanti, oppure " +"potrebbe esserci un problema con la tua connessione a Internet." + +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "La connessione al server ĆØ stata persa." + +#: network/msnnotificationconnection.cpp:3302 +#, fuzzy +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" msgstr "" "Autenticazione non riuscita, KMess non ĆØ riuscito a elaborare l'accesso a " "Passport.\n" "Dettagli: %1" -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" -msgstr "" -"Impossibile accedere al servizio web remoto.\n" -"Dettagli: %1" +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "Errore del server" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "Connessione stabilita" + +#: network/msnsockettcp.cpp:368 +msgid "1 ping lost" +msgstr "1 ping perduto" + +#: network/msnsockettcp.cpp:372 +msgid "%1 pings lost" +msgstr "%1 ping perduti" + +#: network/msnsockettcp.cpp:387 +msgid "The connection to the server was lost." +msgstr "La connessione al server ĆØ stata persa." + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "Questa persona non ĆØ in linea o ĆØ invisibile." -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "" "Questo contatto ti ha invitato a usare una caratteristica che KMess ancora " "non supporta." -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 msgid "The message \"%1\" was not received!" msgstr "Il messaggio \"%1\" non ĆØ stato ricevuto!" -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "Impossibile effettuare la connessione a %1" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "Impossibile analizzare la risposta SOAP" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "Troppe redirezioni da parte del servizio di accesso" -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +#, fuzzy +msgid "In %1's chat: %2" msgstr "Nella chat di %1: %2" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +#, fuzzy +msgid "%1 says:
'%2'" msgstr "%1 scrive:
'%2'" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" +#: notification/chatnotification.cpp:171 +#, fuzzy +msgid "%1 has sent you an offline message:
'%2'" msgstr "%1 ti ha inviato un messaggio non in linea:
'%2'" -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" +#: notification/chatnotification.cpp:178 +#, fuzzy +msgid "%1's chat requests attention!" msgstr "La chat di %1 richiede attenzione!" -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" +#: notification/chatnotification.cpp:183 +#, fuzzy +msgid "%1:
%2" msgstr "%1:
%2" -#: notification/notificationchat.cpp:200 -msgid "%1 has sent you a handwritten message!" +#: notification/chatnotification.cpp:190 +#, fuzzy +msgid "%1 has sent you a handwritten message!" msgstr "%1 ti ha inviato un messaggio scritto a mano!" -#: notification/notificationchat.cpp:204 -msgid "%1 has sent you a nudge!" +#: notification/chatnotification.cpp:194 +#, fuzzy +msgid "%1 has sent you a nudge!" msgstr "%1 ti ha inviato un trillo!" -#: notification/notificationchat.cpp:208 -msgid "%1 has sent you a wink!" +#: notification/chatnotification.cpp:198 +#, fuzzy +msgid "%1 has sent you a wink!" msgstr "%1 ti ha inviato una animoticon!" -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" +#: notification/chatnotification.cpp:204 +#, fuzzy +msgid "%1 wants to use the webcam!" msgstr "%1 vuole usare la webcam!" -#: notification/notificationchat.cpp:215 -msgid "%1 is sending you a file!" +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" msgstr "%1 ti sta inviando un file!" -#: notification/notificationchat.cpp:216 -msgid "%1 has sent you an invitation!" +#: notification/chatnotification.cpp:206 +#, fuzzy +msgid "%1 has sent you an invitation!" msgstr "%1 ti ha mandato un invito!" -#: notification/notificationchat.cpp:223 -msgid "%1 has canceled the webcam session!" +#: notification/chatnotification.cpp:213 +#, fuzzy +msgid "%1 has canceled the webcam session!" msgstr "%1 ha annullato la sessione webcam!" -#: notification/notificationchat.cpp:224 -msgid "%1 has canceled the file transfer!" +#: notification/chatnotification.cpp:214 +#, fuzzy +msgid "%1 has canceled the file transfer!" msgstr "%1 ha annullato il trasferimento file!" -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +#, fuzzy +msgid "%1's activity has been canceled!" msgstr "L'attività con %1 è stata annullata!" -#: notification/notificationchat.cpp:232 -msgid "%1 has accepted to use the webcam!" +#: notification/chatnotification.cpp:222 +#, fuzzy +msgid "%1 has accepted to use the webcam!" msgstr "%1 ha accettato di usare la webcam!" -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" +#: notification/chatnotification.cpp:223 +#, fuzzy +msgid "%1 has accepted the file transfer!" msgstr "%1 ha accettato il trasferimento file!" -#: notification/notificationchat.cpp:234 -msgid "%1 has accepted your invitation!" +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" msgstr "%1 ha accettato il tuo invito!" -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" +#: notification/chatnotification.cpp:231 +#, fuzzy +msgid "%1 has ended the webcam session!" msgstr "%1 ha concluso la sessione webcam!" -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "Il trasferimento file con %1 è stato completato!" -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" +#: notification/chatnotification.cpp:233 +#, fuzzy +msgid "%1's activity has ended!" msgstr "L'attività con %1 è conclusa!" -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" +#: notification/chatnotification.cpp:240 +#, fuzzy +msgid "%1's webcam session has failed!" msgstr "La sessione webcam con %1 non è riuscita!" -#: notification/notificationchat.cpp:251 -msgid "The file transfer with %1 has failed!" +#: notification/chatnotification.cpp:241 +#, fuzzy +msgid "The file transfer with %1 has failed!" msgstr "Il trasferimento di file con %1 non è riuscito!" -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:242 +#, fuzzy +msgid "%1's activity has ended with an error!" msgstr "L'attività con %1 è conclusa con un errore!" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -msgid "%1 is now online" +#: notification/contactstatusnotification.cpp:70 +#, fuzzy +msgid "%1 is now online" msgstr "%1 è ora connesso" -#: notification/notificationcontactstatus.cpp:76 -msgid "%1 has gone away" +#: notification/contactstatusnotification.cpp:71 +#, fuzzy +msgid "%1 has gone away" msgstr "%1 non è più al computer" -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/contactstatusnotification.cpp:72 +#, fuzzy +msgid "%1 will be right back" msgstr "%1 torna subito" -#: notification/notificationcontactstatus.cpp:78 -msgid "%1 is now busy" +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" msgstr "%1 è occupato" -#: notification/notificationcontactstatus.cpp:79 -msgid "%1 has become invisible" +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" msgstr "%1 è diventato invisibile" -#: notification/notificationcontactstatus.cpp:80 -msgid "%1 has gone idle" +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" msgstr "%1 è inattivo" -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/contactstatusnotification.cpp:76 +#, fuzzy +msgid "%1 has logged out" msgstr "%1 si è disconnesso" -#: notification/notificationcontactstatus.cpp:82 -msgid "%1 is on the phone" +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" msgstr "%1 è al telefono" -#: notification/notificationcontactstatus.cpp:83 -msgid "%1 is out for lunch" +#: notification/contactstatusnotification.cpp:78 +#, fuzzy +msgid "%1 is out for lunch" msgstr "%1 è andato a pranzo" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/newemailnotification.cpp:78 +#, fuzzy +msgid "New email:
'%1'
by '%2'" msgstr "Nuova email:
'%1'
da '%2'" -#: settings/accountswidget.cpp:81 +#: settings/accountpage.cpp:69 msgid "Browse..." msgstr "Sfoglia..." -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +#, fuzzy +msgid "Browse and crop picture..." msgstr "Sfoglia e ritaglia immagine..." -#: settings/accountswidget.cpp:404 -msgid "Display Picture" -msgstr "Immagine personale" +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" +#: settings/accountpage.cpp:448 +#, fuzzy +msgid "Downloading of display picture failed" msgstr "Ricezione dell'immagine personale non riuscita" -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 +#, fuzzy msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" "Si ĆØ verificato un errore nel tentativo di cambiare l'immagine personale.\n" "Verifica di aver selezionato un file immagine corretto." -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "Ciao, come va? :)" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "Stacy" - -#: settings/chatstylepage.cpp:317 -msgid "Great!" -msgstr "Bene!" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "Sono /appena/ tornata dalle mie vacanze in Italia!" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "Rimpiazza Emoticon Esistente" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 msgid "&Delete" msgstr "Eli&mina" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "Impostazioni" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 msgid "Account" msgstr "Account" -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 msgid "My Account" msgstr "Il Mio Account" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "Segnalazioni" -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 msgid "Alerts and Notifications" msgstr "Avvisi e Notifiche" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "Chat" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "Registrazione conversazioni" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +#, fuzzy +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "L'indirizzo del contatto che hai inserito non ĆØ valido: '%1'" + +#: settings/accountsettingsdialog.cpp:201 +#, fuzzy +msgid "The email address you have entered is already in use: '%1'" +msgstr "L'indirizzo del contatto che hai inserito non ĆØ valido: '%1'" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "Sei sicuro di voler eliminare questo profilo?" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "Sei sicuro di voler eliminare questo profilo?" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "Ciao, come va? :)" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "Stacy" + +#: settings/chatstylepage.cpp:341 +msgid "Great!" +msgstr "Bene!" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "Sono /appena/ tornata dalle mie vacanze in Italia!" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "Rimpiazza Emoticon Esistente" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "Impostazioni" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +#, fuzzy +msgid "Accounts" +msgstr "Account" + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "Notifica email" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "Salva i file di chat nella cartella selezionata:" + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." @@ -3446,11 +4188,321 @@ msgstr "" "Chiudere la finestra principale manterrĆ  KMess aperto, ma nella barra " "applicazioni. Usa 'Esci' dal menu 'File' per uscire da KMess." -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "Riduzione nella vassoio di sistema" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "
%1 (%2)" +#: systemtraywidget.cpp:245 +#, fuzzy +msgid "- %1 (%2)" +msgstr "%1 (%2/%3)" + +#~ msgid "Click to send an email to this contact." +#~ msgstr "Clicca per inviare una email a questo contatto." + +#~ msgid "Picture:" +#~ msgstr "Immagine:" + +#, fuzzy +#~ msgid "Login Information" +#~ msgstr "Mostra l'email nella lista dei contatti" + +#~ msgid "Logging in..." +#~ msgstr "Mi connetto..." + +#~ msgid "" +#~ "Allows you to choose which e-mail program KMess should open to view e-" +#~ "mail messages." +#~ msgstr "" +#~ "Consente di scegliere quale client di posta elettronica KMess userĆ  per " +#~ "aprire le email." + +#~ msgid "Use a specified command:" +#~ msgstr "Usa un comando specifico:" + +#~ msgid "This account does not have an Hotmail inbox!" +#~ msgstr "Questo account non ha una casella di posta di Hotmail!" + +#, fuzzy +#~ msgid "Email: " +#~ msgstr "Email: %1" + +#, fuzzy +#~ msgid "Client: " +#~ msgstr "Client: %1" + +#~ msgid "Remove group" +#~ msgstr "Rimuovi un gruppo" + +#~ msgid "Show &Display Pictures" +#~ msgstr "Mostra &Immagini Personali" + +#~ msgid "Show &Tool bar" +#~ msgstr "Mostra Barra degli S&trumenti" + +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr "Hai un nuovo messaggio di posta." + +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr "Hai %1 nuovi messaggi di posta." + +#~ msgid "" +#~ "(c) 2002-2008, Mike K. Bennett\n" +#~ "(c) 2005-2008, Diederik van der Boor\n" +#~ "(c) 2007-2008, Valerio Pilo\n" +#~ msgstr "" +#~ "(c) 2002-2008, Mike K. Bennett\n" +#~ "(c) 2005-2008, Diederik van der Boor\n" +#~ "(c) 2007-2008, Valerio Pilo\n" + +#~ msgid "Mike K. Bennett" +#~ msgstr "Mike K. Bennett" + +#~ msgid "Michael Curtis" +#~ msgstr "Michael Curtis" + +#~ msgid "Jan Tƶnjes" +#~ msgstr "Jan Tƶnjes" + +#~ msgid "Diederik van der Boor" +#~ msgstr "Diederik van der Boor" + +#~ msgid "Richard Conway" +#~ msgstr "Richard Conway" + +#~ msgid "Valerio Pilo" +#~ msgstr "Valerio Pilo" + +#~ msgid "Dane Harnett" +#~ msgstr "Dane Harnett" + +#~ msgid "David Vignoni" +#~ msgstr "David Vignoni" + +#~ msgid "Julien Joubin" +#~ msgstr "Julien Joubin" + +#~ msgid "Christian Müller" +#~ msgstr "Christian Müller" + +#, fuzzy +#~ msgid "Michael Anderton" +#~ msgstr "Michael Curtis" + +#~ msgid "Mohamed Aser" +#~ msgstr "Mohamed Aser" + +#~ msgid "Youssef Chahibi" +#~ msgstr "Youssef Chahibi" + +#~ msgid "Mauricio Rother" +#~ msgstr "Mauricio Rother" + +#~ msgid "Jaume Cornadó" +#~ msgstr "Jaume Cornadó" + +#~ msgid "Lin Haoxiang" +#~ msgstr "Lin Haoxiang" + +#~ msgid "Liu Sizhuang" +#~ msgstr "Liu Sizhuang" + +#~ msgid "Yen-chou Chen" +#~ msgstr "Yen-chou Chen" + +#~ msgid "Lars Sommer" +#~ msgstr "Lars Sommer" + +#~ msgid "Pascal d'Hermilly" +#~ msgstr "Pascal d'Hermilly" + +#~ msgid "Arend van Beelen Jr." +#~ msgstr "Arend van Beelen Jr." + +#~ msgid "Jaap Woldringh" +#~ msgstr "Jaap Woldringh" + +#~ msgid "Jyri Toomessoo" +#~ msgstr "Jyri Toomessoo" + +#~ msgid "Markus Vuori" +#~ msgstr "Markus Vuori" + +#~ msgid "Joonas Niilola" +#~ msgstr "Joonas Niilola" + +#~ msgid "Jussi Timperi" +#~ msgstr "Jussi Timperi" + +#~ msgid "Choplair" +#~ msgstr "Choplair" + +#~ msgid "Vincent Fretin" +#~ msgstr "Vincent Fretin" + +#~ msgid "Andrea Blankenstijn" +#~ msgstr "Andrea Blankenstijn" + +#~ msgid "PĆ”der RezsƵ" +#~ msgstr "PĆ”der RezsƵ" + +#~ msgid "Vincenzo Reale" +#~ msgstr "Vincenzo Reale" + +#~ msgid "Park Dong Cheon" +#~ msgstr "Park Dong Cheon" + +#~ msgid "Ƙyvind SƦther" +#~ msgstr "Ƙyvind SƦther" + +#~ msgid "Matjaž kaÅ”e" +#~ msgstr "Matjaž kaÅ”e" + +#~ msgid "Johanna Gersch" +#~ msgstr "Johanna Gersch" + +#~ msgid "J.C.A. Javi" +#~ msgstr "J.C.A. Javi" + +#~ msgid "Alejandro Araiza Alvarado" +#~ msgstr "Alejandro Araiza Alvarado" + +#~ msgid "Jaume CorbĆ­" +#~ msgstr "Jaume CorbĆ­" + +#~ msgid "Christian Kaiser" +#~ msgstr "Christian Kaiser" + +#~ msgid "Christian Lundgren" +#~ msgstr "Christian Lundgren" + +#~ msgid "Rachan Hongpairote" +#~ msgstr "Rachan Hongpairote" + +#~ msgid "Gorkem Cetin" +#~ msgstr "Gorkem Cetin" + +#~ msgid "Barbaros Ulutas" +#~ msgstr "Barbaros Ulutas" + +#~ msgid "Uğur Ƈetin" +#~ msgstr "Uğur Ƈetin" + +#~ msgid "Guido Solinas" +#~ msgstr "Guido Solinas" + +#~ msgid "Scott Morgan" +#~ msgstr "Scott Morgan" + +#~ msgid "Laurence Anderson" +#~ msgstr "Laurence Anderson" + +#~ msgid "Choe Hwanjin" +#~ msgstr "Choe Hwanjin" + +#~ msgid "Damien Sandras" +#~ msgstr "Damien Sandras" + +#~ msgid "Tobias Tƶnjes" +#~ msgstr "Tobias Tƶnjes" + +#~ msgid "KMerlin (kmerlin.olsd.de)" +#~ msgstr "KMerlin (kmerlin.olsd.de)" + +#~ msgid "Kopete (kopete.kde.org)" +#~ msgstr "Kopete (kopete.kde.org)" + +#~ msgid "KScreensaver" +#~ msgstr "KScreensaver" + +#~ msgid "BasKet" +#~ msgstr "BasKet" + +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "Il trasferimento di %1 non ĆØ riuscito. Impossibile aprire il file." + +#~ msgid "Sidebar" +#~ msgstr "Barra laterale" + +#~ msgid "New contact's group" +#~ msgstr "Gruppo del nuovo contatto" + +#~ msgid "Enter your login information:" +#~ msgstr "Inserisci i tuoi dati di accesso:" + +#~ msgid "Your friendly name:" +#~ msgstr "Il tuo nome:" + +#~ msgid "Your email address:" +#~ msgstr "Il tuo indirizzo email:" + +#~ msgid "Your password:" +#~ msgstr "La tua password:" + +#~ msgid "Display picture:" +#~ msgstr "Immagine personale:" + +#~ msgid "Don't show a displa&y picture" +#~ msgstr "Non mos&trare un'immagine personale" + +#~ msgid "Status to set at login:" +#~ msgstr "Stato da impostare all'accesso:" + +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "Mostra una notifica quando ricevi un'&email" + +#~ msgid "Organize chat folders by:" +#~ msgstr "Organizza cartelle di chat per:" + +#~ msgid "&Show graphics in chat messages" +#~ msgstr "Mo&stra elementi grafici nei messaggi di conversazione" + +#~ msgid "Use Hotmail" +#~ msgstr "Usa il servizio Hotmail" + +#~ msgid "says:" +#~ msgstr "dice:" + +#~ msgid "Current name: " +#~ msgstr "Nome attuale: " + +#~ msgid "" +#~ "KMess could not connect to the MSN Messenger service.\n" +#~ "Please, be sure to be connected to the internet.\n" +#~ "reason: %1." +#~ msgstr "" +#~ "KMess non ĆØ riuscito a connettersi al servizio MSN Messenger.\n" +#~ "Per favore, assicurati di essere connesso a Internet.\n" +#~ "motivo: %1." + +#~ msgid "The remote server has closed the connection." +#~ msgstr "Il server remoto ha chiuso la connessione." + +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr "Mostra lo stato del servizio MSN Messenger" + +#~ msgid "Received user confirmation" +#~ msgstr "Ricevuta conferma utente" + +#~ msgid "Transfer to notification server" +#~ msgstr "Trasferimento al server di notifica" + +#~ msgid "Developer build warning" +#~ msgstr "Avviso della build per sviluppatori" + +#~ msgid "The server is too busy" +#~ msgstr "Il server ĆØ occupato" + +#~ msgid "The server is unavailable" +#~ msgstr "Il server non ĆØ raggiungibile" + +#~ msgid "KMess received an unknown error message from the server: %1" +#~ msgstr "" +#~ "KMess ha ricevuto un messaggio di errore sconosciuto dal server, \"%1\"" + +#~ msgid "Warning: Server closes for maintenance in 1 minute!" +#~ msgstr "Attenzione: Il server chiude per manutenzione tra 1 minuto!" diff --git a/po/kmess.pot b/po/kmess.pot index 0272bee..620c884 100644 --- a/po/kmess.pot +++ b/po/kmess.pot @@ -8,263 +8,457 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -msgid "S&end" -msgstr "" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 msgid "Ne&w Line" msgstr "" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 -msgid "Sidebar" +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 +msgid "S&end" msgstr "" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +msgid "Contacts" +msgstr "" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 msgid "" "Enter here the email address of the person you wish to add to your contact " "list" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 msgid "Email address" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 -msgid "New contact's group" +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 +msgid "Initial group" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 msgid "" "Enter a message to be automatically sent to people who try to message you." msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 msgid "&Automatic away message" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 +msgid "&Add this person to my \"Friends\" list" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 +msgid "Do not add this person; only allow them to see my online state" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 +msgid "&Block this person from contacting me or seeing my online state" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 #, no-c-format +msgid "Contact Properties for %1" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +msgid "Restore" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 -msgid "&Add this contact to your \"Friends\" list" +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 -msgid "&Not add this contact, but let them see your online state" +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +msgid "Use alternative name for this person" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 -msgid "Block this person from contacting &you or seeing your online state" +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +msgid "Show a popup when the contact goes online/offline" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +msgid "&Clear Cache" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +msgid "Notes" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +msgid "Standard" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +msgid "Send" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 msgid "Cancel" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -msgid "Enter your login information:" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 -msgid "Password" +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 +msgid "Email address:" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +msgid "Password:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 msgid " Account options " msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 msgid "Remem&ber this profile" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +msgid "Your Account Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 -msgid "Your friendly name:" +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 +msgid "&Friendly name:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 -msgid "Your email address:" +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 +msgid "&Email address:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 +msgid "&Password:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 -msgid "Remember Password" +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 +msgid "&Remember Password" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 -msgid "Display picture:" +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 +msgid "Display Picture" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 msgid "C&hange..." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -msgid "Don't show a displa&y picture" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -275,34 +469,34 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +msgid "Re&member the settings of this account" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 -msgid "Login &with this account automatically at start-up" +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 +msgid "Login &with this account automatically" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +msgid "Login &as" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -310,168 +504,270 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 msgid "https://accountservices.passport.net/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 -msgid "Popup notifications" +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 +msgid "Saved accounts:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +msgid "Click" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +msgid "&Add account..." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +msgid "&Remove" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +msgid "Popup Notifications" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +msgid "Contact Events" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 msgid "Show notifications when your contacts:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 msgid "&Go online" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 msgid "S&end you a message" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 msgid "Go o&ffline" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 -msgid "Show notifications when you recei&ve an email" +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 +msgid "Email Events" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +msgid "Show notifications when email is received:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +msgid "In other folders" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +msgid "Other Alerts" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +msgid "&Show winks from contacts" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -482,201 +778,201 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 -msgid "Inform contacts w&hich song I am listening to." +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 +msgid "Inform contacts w&hich song I am listening to" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 msgid "Become idle after" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 msgid "Log &all chats" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 msgid "" "Choose the directory on your system where you'd like to save the chat logs." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +msgid "Save chat files in this directory:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 msgid "Month" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +msgid "Save directly in the specified directory" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "" - +#. i18n: file ./settings/chatstylepage.ui line 45 #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +msgid "&Chat style:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +msgid "Chat Settings" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 -msgid "&Show graphics in chat messages" +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 +msgid "&Show emoticons" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 -msgid "S&how time in chat messages" +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 +msgid "S&how messages time" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -685,144 +981,286 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 +msgid "Always" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +msgid "For contacts in the same group" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +msgid "Never" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +msgid "Your &message font:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +msgid "&Force contacts' messages to use this font:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 -msgid "Show email information" +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 -msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +msgid "Enable in the contact list" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 msgid "&Emoticon Themes" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 msgid "Available emoticon styles:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 msgid "&Custom Emoticons" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 msgid "Custom emoticons for this account:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -msgid "Click" -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 msgid "Re&name" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 msgid "Remo&ve" msgstr "" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +msgid "Web Browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +msgid "&Use the KDE default browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +msgid "Email Client" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +msgid "&Use the KDE default email client" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +msgid "File Transfers" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +msgid "&Save all received files in one directory:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +msgid "and" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +msgid "for file transfers" msgstr "" #: account.cpp:44 account.cpp:745 @@ -833,417 +1271,486 @@ msgstr "" msgid "Your name" msgstr "" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "" - -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "" - -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "" - -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "" - -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "" - -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "" - -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "" - -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "" - -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "" - -#: chat/chatmaster.cpp:1061 -msgid "%1 is sending a wink: %2" -msgstr "" - -#: chat/chatmessagestyle.cpp:302 -msgid "%1 says:" -msgstr "" - -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 -msgid "Add this emoticon: %1" -msgstr "" - -#: chat/chatview.cpp:529 -msgid "" -"Could not save chat log. Make sure you have permission to write in the " -"folder where logs are being saved." -msgstr "" - -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 -msgid "" -"The file '%1' already exists.\n" -"do you want to overwrite it?" -msgstr "" - -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Overwrite File" -msgstr "" - -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Over&write" -msgstr "" - -#: chat/chatview.cpp:977 -msgid "Add this &Emoticon..." -msgstr "" - -#: chat/chatview.cpp:984 -msgid "Send &Email" -msgstr "" - -#: chat/chatview.cpp:988 -msgid "Copy E&mail" -msgstr "" - -#: chat/chatview.cpp:995 -msgid "Visit &Link" -msgstr "" - -#: chat/chatview.cpp:999 -msgid "Copy &Address" -msgstr "" - -#: chat/chatview.cpp:1013 -msgid "&Copy text" -msgstr "" - -#: chat/chatview.cpp:1014 -msgid "Select &All" -msgstr "" - -#: chat/chatview.cpp:1015 -msgid "Save chat to &File" -msgstr "" - -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "" - -#: chat/chatwindow.cpp:239 +#: chat/chat.cpp:124 msgid "" "You can't start this invitation because there are multiple contacts in this " "chat." msgstr "" -#: chat/chatwindow.cpp:276 -msgid "%1 has joined the chat." +#: chat/chat.cpp:158 +msgid "%1 has joined the chat." msgstr "" -#: chat/chatwindow.cpp:327 -msgid "The conversation went idle, %1 has left the chat." +#: chat/chat.cpp:211 +msgid "The conversation went idle, %1 has left the chat." msgstr "" -#: chat/chatwindow.cpp:331 -msgid "%1 has left the chat." +#: chat/chat.cpp:215 +msgid "%1 has left the chat." msgstr "" -#: chat/chatwindow.cpp:593 -msgid "%1 - Chat" +#: chat/chat.cpp:364 +msgctxt "Name of a chat tab" +msgid "%1 and %2" msgstr "" -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" +#: chat/chat.cpp:371 +msgctxt "Name of a chat tab" +msgid "%1 et al." msgstr "" -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" +#: chat/chat.cpp:630 +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" msgstr "" -#: chat/chatwindow.cpp:757 -msgid "Contacts" +#: chat/chat.cpp:934 +msgid "You received a wink from %1." msgstr "" -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 -msgid "Emoticons" -msgstr "" - -#: chat/chatwindow.cpp:819 -msgid "My emoticons" -msgstr "" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" -msgstr "" - -#: chat/chatwindow.cpp:1502 +#: chat/chat.cpp:971 msgid "" "The wink could not be displayed. Make sure you have 'cabextract' installed." msgstr "" -#: chat/chatwindow.cpp:1511 +#: chat/chat.cpp:980 msgid "The wink could not be displayed. The data could not be read." msgstr "" -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" +#: chat/chat.cpp:1080 +msgid "You have received a wink from %1" msgstr "" -#: chat/chatwindow.cpp:1755 -msgid "Show Side&bar" +#: chat/chat.cpp:1100 +msgid "You received a nudge from %1!" msgstr "" -#: chat/chatwindow.cpp:1756 -msgid "Show the contact sidebar" +#: chat/chat.cpp:1119 +msgid "The message '%1' could not be sent." msgstr "" -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -msgid "Hide Side&bar" -msgstr "" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -msgid "Hide the contact sidebar" -msgstr "" - -#: chat/chatwindow.cpp:1787 -msgid "The message '%1' could not be sent." -msgstr "" - -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" -msgstr "" - -#: chat/chatwindow.cpp:1876 +#: chat/chat.cpp:1183 msgid "You've sent a nudge to %1!" msgstr "" -#: chat/chatwindow.cpp:1883 +#: chat/chat.cpp:1190 msgid "You've sent a nudge!" msgstr "" -#: chat/chatwindow.cpp:1972 -msgid "%1 is typing." +#: chat/chatmaster.cpp:1219 +msgid "%1 is sending a wink: %2" msgstr "" -#: chat/chatwindow.cpp:1981 -msgid "%1 and %2 are typing." +#: chat/chatmessagestyle.cpp:298 +msgid "%1 says:" msgstr "" -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 +msgid "Add this emoticon: %1" msgstr "" -#: chat/chatwindowinterface.cpp:175 -msgid "&Chat" -msgstr "" - -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 msgid "&Invite" msgstr "" -#: chat/chatwindowinterface.cpp:179 +#: chat/chatview.cpp:695 +msgid "" +"Could not save chat log. Make sure you have permission to write in the " +"folder where logs are being saved." +msgstr "" + +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 +msgid "" +"The file '%1' already exists.\n" +"do you want to overwrite it?" +msgstr "" + +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Overwrite File" +msgstr "" + +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Over&write" +msgstr "" + +#: chat/chatview.cpp:1275 +msgid "Add this &Emoticon..." +msgstr "" + +#: chat/chatview.cpp:1282 +msgid "Send &Email" +msgstr "" + +#: chat/chatview.cpp:1286 +msgid "Copy E&mail" +msgstr "" + +#: chat/chatview.cpp:1293 +msgid "Visit &Link" +msgstr "" + +#: chat/chatview.cpp:1297 +msgid "Copy &Address" +msgstr "" + +#: chat/chatview.cpp:1312 +msgid "&Copy text" +msgstr "" + +#: chat/chatview.cpp:1313 +msgid "Select &All" +msgstr "" + +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 +msgid "Save chat to &File" +msgstr "" + +#: chat/chatwindow.cpp:489 +msgid "&Chat" +msgstr "" + +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 msgid "Send a &Nudge!" msgstr "" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 msgid "&Emoticons" msgstr "" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +msgid "Close &All Tabs" +msgstr "" + +#: chat/chatwindow.cpp:504 msgid "Meeting" msgstr "" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 msgid "&Font" msgstr "" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 msgid "Font &Color" msgstr "" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +msgid "Emoticons" +msgstr "" + +#: chat/chatwindow.cpp:658 +msgid "My emoticons" +msgstr "" + +#: chat/chatwindow.cpp:738 msgid "&Settings" msgstr "" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +msgid "Hide Side&bar" +msgstr "" + +#: chat/chatwindow.cpp:744 +msgid "Hide &Toolbar" +msgstr "" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +msgid "Hide the contact sidebar" +msgstr "" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +msgid "Close all tabs" +msgstr "" + +#: chat/chatwindow.cpp:856 +msgid "Close current tab" +msgstr "" + +#: chat/chatwindow.cpp:1467 +msgid "Show Side&bar" +msgstr "" + +#: chat/chatwindow.cpp:1468 +msgid "Show the contact sidebar" +msgstr "" + +#: chat/chatwindow.cpp:1565 +msgid "%1 is typing." +msgstr "" + +#: chat/chatwindow.cpp:1575 +msgid "%1 and %2 are typing." +msgstr "" + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "" + +#: chat/chatwindow.cpp:1611 +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "" + +#: chat/chatwindow.cpp:1615 +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 msgid "&View Profile" msgstr "" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 msgid "A&llow Contact" msgstr "" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 msgid "&Delete Contact" msgstr "" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 msgid "&Friendly Name" msgstr "" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 msgid "&Email Address" msgstr "" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "" -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 msgid "Blocked" msgstr "" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 msgid "The contact is %1" msgstr "" -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +msgid "Add to Chat" +msgstr "" + +#: chat/emoticonsidebar.cpp:213 +msgid "Insert new" +msgstr "" + +#: chat/emoticonsidebar.cpp:214 +msgid "Edit" +msgstr "" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +msgid "Remove" +msgstr "" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 msgid "Web Messenger" msgstr "" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +msgid "Windows Live Messenger %1" +msgstr "" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr "" + +#: contactlistviewdelegate.cpp:150 msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" msgstr "" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" +msgstr "" + +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "" + +#: dialogs/addcontactdialog.cpp:48 msgid "Add a Contact" msgstr "" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 msgid "No group" msgstr "" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 msgid "Add New Emoticon" msgstr "" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +msgid "Edit Emoticon" +msgstr "" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "" @@ -1251,516 +1758,576 @@ msgstr "" msgid "Specify an Away message" msgstr "" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" +#: dialogs/contactaddeduserdialog.cpp:85 +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " msgstr "" -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +msgid "Not seen yet" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +msgid "No messages yet" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:234 -msgid "Contact Properties for %1" +#: dialogs/contactpropertiesdialog.cpp:381 +msgid "Last seen: %1" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " +#: dialogs/contactpropertiesdialog.cpp:382 +msgid "Last message: %1" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " +#: dialogs/contactpropertiesdialog.cpp:383 +msgid "Email: %1" msgstr "" -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" +#: dialogs/contactpropertiesdialog.cpp:384 +msgid "Client: %1" msgstr "" -#: dialogs/networkwindow.cpp:57 +#: dialogs/networkwindow.cpp:79 msgid "S&ave tab" msgstr "" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 msgid "C&lear tab" msgstr "" -#: dialogs/networkwindow.cpp:59 -msgid "Cl&ose tab" -msgstr "" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 msgid "" "No connections are present.\n" "Cannot open the Network Window." msgstr "" -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 msgid "" "Could not save the Network Window log. Make sure you have permission to " "write in the folder where it is being saved." msgstr "" -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "" -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +msgid "Cannot send commands to this kind of connection!" +msgstr "" + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 msgid "Completed" msgstr "" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +msgid "%1 of %2 received." msgstr "" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +msgid "%1 of %2 sent." msgstr "" -#: dialogs/transferwindow.cpp:55 -msgid "File Transfers" +#: dialogs/transferentry.cpp:373 +msgid "infinite" msgstr "" -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 msgid "Cl&ean Up" msgstr "" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " "the theme folder '%1'." msgstr "" -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 msgid "Smile" msgstr "" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "" -#: emoticontheme.cpp:797 +#: emoticontheme.cpp:812 msgid "Big smile" msgstr "" -#: emoticontheme.cpp:798 +#: emoticontheme.cpp:813 msgid "Sad" msgstr "" -#: emoticontheme.cpp:799 +#: emoticontheme.cpp:814 msgid "Crying" msgstr "" -#: emoticontheme.cpp:800 +#: emoticontheme.cpp:815 msgid "Angry" msgstr "" -#: emoticontheme.cpp:801 +#: emoticontheme.cpp:816 msgid "Confused" msgstr "" -#: emoticontheme.cpp:802 +#: emoticontheme.cpp:817 msgid "Embarrassed" msgstr "" -#: emoticontheme.cpp:803 +#: emoticontheme.cpp:818 msgid "Disappointed" msgstr "" -#: emoticontheme.cpp:804 +#: emoticontheme.cpp:819 msgid "Hot" msgstr "" -#: emoticontheme.cpp:805 +#: emoticontheme.cpp:820 msgid "Baring teeth" msgstr "" -#: emoticontheme.cpp:806 +#: emoticontheme.cpp:821 msgid "Nerd" msgstr "" -#: emoticontheme.cpp:807 +#: emoticontheme.cpp:822 msgid "Sick" msgstr "" -#: emoticontheme.cpp:808 +#: emoticontheme.cpp:823 msgid "Surprised" msgstr "" -#: emoticontheme.cpp:809 +#: emoticontheme.cpp:824 msgid "Party" msgstr "" -#: emoticontheme.cpp:810 +#: emoticontheme.cpp:825 msgid "Sleepy" msgstr "" -#: emoticontheme.cpp:811 +#: emoticontheme.cpp:826 msgid "Thinking" msgstr "" -#: emoticontheme.cpp:812 +#: emoticontheme.cpp:827 msgid "Don't tell anyone" msgstr "" -#: emoticontheme.cpp:813 +#: emoticontheme.cpp:828 msgid "Secret telling" msgstr "" -#: emoticontheme.cpp:814 +#: emoticontheme.cpp:829 msgid "Eye-rolling" msgstr "" -#: emoticontheme.cpp:815 +#: emoticontheme.cpp:830 msgid "Sarcastic" msgstr "" -#: emoticontheme.cpp:816 +#: emoticontheme.cpp:831 msgid "I don't know" msgstr "" -#: emoticontheme.cpp:817 +#: emoticontheme.cpp:832 msgid "Be right back" msgstr "" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "" -#: emoticontheme.cpp:824 +#: emoticontheme.cpp:839 msgid "Dog face" msgstr "" -#: emoticontheme.cpp:825 +#: emoticontheme.cpp:840 msgid "Sun" msgstr "" -#: emoticontheme.cpp:826 +#: emoticontheme.cpp:841 msgid "Devil" msgstr "" -#: emoticontheme.cpp:827 +#: emoticontheme.cpp:842 msgid "Right hug" msgstr "" -#: emoticontheme.cpp:828 +#: emoticontheme.cpp:843 msgid "Girl" msgstr "" -#: emoticontheme.cpp:829 +#: emoticontheme.cpp:844 msgid "Broken heart" msgstr "" -#: emoticontheme.cpp:830 +#: emoticontheme.cpp:845 msgid "Wilted rose" msgstr "" -#: emoticontheme.cpp:831 +#: emoticontheme.cpp:846 msgid "Thumbs down" msgstr "" -#: emoticontheme.cpp:832 +#: emoticontheme.cpp:847 msgid "Cat face" msgstr "" -#: emoticontheme.cpp:833 +#: emoticontheme.cpp:848 msgid "Sleeping half-moon" msgstr "" -#: emoticontheme.cpp:834 +#: emoticontheme.cpp:849 msgid "Red lips" msgstr "" -#: emoticontheme.cpp:835 +#: emoticontheme.cpp:850 msgid "Clapping" msgstr "" -#: emoticontheme.cpp:836 +#: emoticontheme.cpp:851 msgid "Crossed fingers" msgstr "" -#: emoticontheme.cpp:837 +#: emoticontheme.cpp:852 msgid "Auto" msgstr "" -#: emoticontheme.cpp:838 +#: emoticontheme.cpp:853 msgid "Airplane" msgstr "" -#: emoticontheme.cpp:839 +#: emoticontheme.cpp:854 msgid "Turtle" msgstr "" -#: emoticontheme.cpp:840 +#: emoticontheme.cpp:855 msgid "Snail" msgstr "" -#: emoticontheme.cpp:841 +#: emoticontheme.cpp:856 msgid "Black sheep" msgstr "" -#: emoticontheme.cpp:842 +#: emoticontheme.cpp:857 msgid "Goat" msgstr "" -#: emoticontheme.cpp:843 +#: emoticontheme.cpp:858 msgid "Vampire bat" msgstr "" -#: emoticontheme.cpp:844 +#: emoticontheme.cpp:859 msgid "Pizza" msgstr "" -#: emoticontheme.cpp:845 +#: emoticontheme.cpp:860 msgid "Beer mug" msgstr "" -#: emoticontheme.cpp:846 +#: emoticontheme.cpp:861 msgid "Martini glass" msgstr "" -#: emoticontheme.cpp:847 +#: emoticontheme.cpp:862 msgid "Coffee cup" msgstr "" -#: emoticontheme.cpp:848 +#: emoticontheme.cpp:863 msgid "Birthday cake" msgstr "" -#: emoticontheme.cpp:849 +#: emoticontheme.cpp:864 msgid "Plate" msgstr "" -#: emoticontheme.cpp:850 +#: emoticontheme.cpp:865 msgid "Bowl" msgstr "" -#: emoticontheme.cpp:851 +#: emoticontheme.cpp:866 msgid "Star" msgstr "" -#: emoticontheme.cpp:852 +#: emoticontheme.cpp:867 msgid "Rainbow" msgstr "" -#: emoticontheme.cpp:853 +#: emoticontheme.cpp:868 msgid "Stormy cloud" msgstr "" -#: emoticontheme.cpp:854 +#: emoticontheme.cpp:869 msgid "Lightning" msgstr "" -#: emoticontheme.cpp:855 +#: emoticontheme.cpp:870 msgid "Umbrella" msgstr "" -#: emoticontheme.cpp:856 +#: emoticontheme.cpp:871 msgid "Island with a palm tree" msgstr "" -#: emoticontheme.cpp:857 +#: emoticontheme.cpp:872 msgid "Telephone receiver" msgstr "" -#: emoticontheme.cpp:858 +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 msgid "Clock" msgstr "" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 msgid "Camera" msgstr "" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 msgid "Money" msgstr "" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 msgid "KMess Icon" msgstr "" -#: initialview.cpp:360 +#: initialview.cpp:226 +msgid "Internet connection not available." +msgstr "" + +#: initialview.cpp:377 +msgid "Connect" +msgstr "" + +#: initialview.cpp:382 +msgid "Disconnect" +msgstr "" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "" -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "" -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +msgid "New Group" +msgstr "" + +#: kmess.cpp:226 msgid "Add a group" msgstr "" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "" -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "" - -#: kmess.cpp:638 +#: kmess.cpp:569 msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" msgstr "" -#: kmess.cpp:640 +#: kmess.cpp:571 msgid "Remove contact" msgstr "" -#: kmess.cpp:641 kmess.cpp:684 -msgid "Remove" -msgstr "" - -#: kmess.cpp:642 +#: kmess.cpp:573 msgid "Remove and block" msgstr "" -#: kmess.cpp:681 +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "" -#: kmess.cpp:683 -msgid "Remove group" +#: kmess.cpp:631 +msgctxt "dialog button" +msgid "Remove" msgstr "" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "" -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 msgid "Rename group" msgstr "" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "" -#: kmess.cpp:1441 +#: kmess.cpp:1408 msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" -#: kmess.cpp:1445 +#: kmess.cpp:1412 msgid "Error with notifications" msgstr "" +#: kmess.cpp:1589 +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "" @@ -1781,876 +2348,776 @@ msgstr "" msgid "Search by &Interest" msgstr "" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +msgid "Search in Contact List" +msgstr "" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 msgid "Show &Offline Contacts" msgstr "" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "" -#: kmessinterface.cpp:303 -msgid "Show &Display Pictures" +#: kmessinterface.cpp:318 +msgid "Show &Empty Groups" msgstr "" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:321 +msgid "Display Pictures Size" +msgstr "" + +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +msgid "Small" +msgstr "" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +msgid "[%1] %2 goes online" +msgstr "" + +#: kmessview.cpp:363 +msgid "[%1] %2 goes offline" +msgstr "" + +#: kmessview.cpp:559 msgid "Cha&t" msgstr "" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "" -#: kmessview.cpp:492 +#: kmessview.cpp:569 msgid "&Remove from group" msgstr "" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +msgid "&Listening Music" +msgstr "" + +#: kmessview.cpp:601 msgid "&Copy to Group" msgstr "" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "" -#: kmessview.cpp:549 +#: kmessview.cpp:646 msgid "Move Group &Down" msgstr "" -#: kmessview.cpp:550 +#: kmessview.cpp:647 msgid "Move Group &Up" msgstr "" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "" -#: kmessview.cpp:918 +#: kmessview.cpp:1075 +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "" + +#: kmessview.cpp:1076 +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "" + +#: kmessview.cpp:1085 msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "" -#: kmessview.cpp:921 -msgctxt "Contacts count in group tooltip" +#: kmessview.cpp:1090 +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "" + +#: kmessview.cpp:1504 msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "" -#: kmessview.cpp:1543 -msgid "You have 1 new e-mail in your inbox." -msgstr "" +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" -#: kmessview.cpp:1547 -msgid "You have %1 new emails in your inbox." -msgstr "" - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 msgid "Project support" msgstr "" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 msgid "Current developer" msgstr "" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 msgid "" "German translation, testing, documentation, web master, project management, " "etc..." msgstr "" -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "" -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "" -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 msgid "More Arabic translation" msgstr "" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 msgid "Catalan translation" msgstr "" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 msgid "More Simplified Chinese translation" msgstr "" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 msgid "Traditional Chinese translation" msgstr "" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 msgid "Danish translation" msgstr "" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 msgid "More Danish translation" msgstr "" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 msgid "More Dutch translation" msgstr "" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 msgid "Estonian translation" msgstr "" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 msgid "Finnish translation" msgstr "" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 msgid "More Finnish translation" msgstr "" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 msgid "More French translation, MSN6 emoticon definitions" msgstr "" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 msgid "More French translation" msgstr "" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 msgid "Hungarian translation" msgstr "" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 msgid "More Italian translation" msgstr "" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 msgid "Norsk BokmĆ„l translation" msgstr "" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 msgid "Slovenian translation" msgstr "" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 msgid "More Spanish translation" msgstr "" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 msgid "Swedish translation" msgstr "" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 msgid "Thai translation" msgstr "" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -msgid "Guido Solinas" -msgstr "" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "" -#: main.cpp:117 -msgid "P4-Context field support" -msgstr "" - -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 -msgid "Xinerama fixes" -msgstr "" - -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 -msgid "Original file receive code" -msgstr "" - -#: main.cpp:120 -msgid "Choe Hwanjin" -msgstr "" - -#: main.cpp:120 -msgid "Various internationalization fixes." -msgstr "" - -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 -msgid "GnomeMeeting developer" -msgstr "" - -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 -msgid "Guy with a bag over his head" -msgstr "" - -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 -msgid "Inspiration and assorted code" -msgstr "" - -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 -msgid "Old popup balloons code, initial p2p code, msn challenge handler" -msgstr "" - -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 -msgid "Idle timer code" -msgstr "" - -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 -msgid "Close-to-tray icon screenshot code" -msgstr "" - -#: main.cpp:131 -msgid "Your name here?" -msgstr "" - -#: main.cpp:131 -msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" -"If you feel your name is missing here, please contact us too!" +#: main.cpp:133 +msgid "File transfer thumbnails" msgstr "" #: main.cpp:134 +msgid "P4-Context field support" +msgstr "" + +#: main.cpp:135 +msgid "Xinerama fixes" +msgstr "" + +#: main.cpp:136 +msgid "Original file receive code" +msgstr "" + +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" +msgstr "" + +#: main.cpp:138 +msgid "KWallet support" +msgstr "" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +msgid "Various internationalization fixes" +msgstr "" + +#: main.cpp:143 +msgid "Various internationalization fixes." +msgstr "" + +#: main.cpp:145 +msgid "GnomeMeeting developer" +msgstr "" + +#: main.cpp:146 +msgid "Guy with a bag over his head" +msgstr "" + +#: main.cpp:149 +msgid "Inspiration and assorted code" +msgstr "" + +#: main.cpp:150 +msgid "Old popup balloons code, initial p2p code, msn challenge handler" +msgstr "" + +#: main.cpp:151 +msgid "Idle timer code" +msgstr "" + +#: main.cpp:152 +msgid "Close-to-tray icon screenshot code" +msgstr "" + +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 +msgid "Your name here?" +msgstr "" + +#: main.cpp:156 +msgid "" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" +"If you feel your name is missing here, please contact us too!" +msgstr "" + +#: main.cpp:159 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" -#: main.cpp:135 +#: main.cpp:160 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 msgid "The contact cancelled the session." msgstr "" -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 msgid "The contact rejected the invitation." msgstr "" -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 msgid "You have cancelled the session." msgstr "" -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "" -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +msgid "Do you want to accept or cancel?" msgstr "" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +msgid "Click to cancel." msgstr "" -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 msgid "Do you want to accept the file: %1 (%2)" msgstr "" -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 msgid "The transfer of %1 failed. Couldn't open file." msgstr "" -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "" + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 msgid "Connecting to %1, port %2" msgstr "" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 msgid "The transfer was cancelled" msgstr "" -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 msgid "Connection established" msgstr "" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 msgid "Successfully transferred file: %1" msgstr "" -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 msgid "The transfer of %1 failed. The file does not exist." msgstr "" -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 msgid "The transfer of %1 failed. The file could not be read." msgstr "" -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 msgid "Sending file %1" msgstr "" -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "" - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "" -#: network/applications/filetransferp2p.cpp:345 -msgid "The transfer of %1 failed. Couldn't open file" +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." msgstr "" -#: network/applications/filetransferp2p.cpp:524 -msgid "The contact cancelled the transfer." +#: network/applications/filetransferp2p.cpp:348 +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" msgstr "" -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:378 +msgid "The transfer of file "%1" failed. Couldn't save the file." +msgstr "" + +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 +msgid "The contact has cancelled the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:572 +msgid "You have cancelled the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "" -#: network/applications/filetransferp2p.cpp:768 -msgid "The transfer of %1 failed. The file does not exist." +#: network/applications/filetransferp2p.cpp:676 +msgid "Successfully sent file "%1"." msgstr "" -#: network/applications/filetransferp2p.cpp:773 -msgid "The transfer of %1 failed. The file could not be read." +#: network/applications/filetransferp2p.cpp:680 +msgid "Successfully received file "%1"." msgstr "" -#: network/applications/filetransferp2p.cpp:809 -msgid "Sending file %1 (%2)" +#: network/applications/filetransferp2p.cpp:813 +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "" -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:818 +msgid "The transfer of file "%1" failed. The file could not be read." +msgstr "" + +#: network/applications/filetransferp2p.cpp:855 +msgid "Sending file "%1" (%2)." +msgstr "" + +#: network/applications/filetransferp2p.cpp:893 +msgid "The contact has accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "" -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 msgid "Starting GnomeMeeting. Connecting to %1." msgstr "" -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "" -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "" -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 msgid "The invitation was aborted. An internal error occured." msgstr "" -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "" -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "" -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "" -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 msgid "The invitation was aborted." msgstr "" -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "" -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 msgid "Starting KRDC. Connecting to %1." msgstr "" -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +msgid "The contact rejected the invitation. An internal error occured." msgstr "" -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +msgid "The transfer failed." +msgstr "" + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." msgstr "" -#: network/applications/p2papplication.cpp:1503 -msgid "The transfer failed. Data preparation failed." -msgstr "" - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -msgid "The contact rejected the invitation. An internal error occured." -msgstr "" - -#: network/applications/p2papplication.cpp:1626 -msgid "The transfer failed." -msgstr "" - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "" + +#: network/applications/p2papplicationbase.cpp:1015 +msgid "The transfer failed. An internal error occured." +msgstr "" + +#: network/applications/p2papplicationbase.cpp:1176 +msgid "The transfer failed. Couldn't open data source." +msgstr "" + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "" + +#: network/applications/p2papplication.cpp:1071 +msgid "The transfer failed. Data preparation failed." +msgstr "" + +#: network/applications/p2papplication.cpp:1178 msgid "The invitation was cancelled. Message was not directed to us." msgstr "" -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "" -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "" -#: network/applications/p2papplication.cpp:3297 -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "" - -#: network/applications/p2papplication.cpp:3316 -msgid "The transfer failed. An internal error occured." -msgstr "" - -#: network/applications/p2papplication.cpp:3693 -msgid "The transfer failed. Couldn't open data source." -msgstr "" - -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:3113 msgid "Waiting for connection" msgstr "" -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " "accept." msgstr "" -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." msgstr "" -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "" -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 msgid "You are invited to start a voice conversation." msgstr "" -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 msgid "" "You are invited to start a voice conversation but support for this was not " "installed" msgstr "" -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 msgid "You have cancelled the voice conversation." msgstr "" -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "" -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 msgid "Start voice conversation. Connecting to %1." msgstr "" -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 msgid "Start voice conversation. Listening on %1." msgstr "" -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 msgid "Inviting the contact to a voice conversation." msgstr "" -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 msgid "The contact is inviting you for '%1', but this is not implemented yet." msgstr "" @@ -2691,611 +3158,691 @@ msgstr "" msgid "Receiving file %1" msgstr "" -#: network/msnconnection.cpp:477 -msgid "1 ping lost" +#: network/msnconnection.cpp:589 +msgid "KMess could not access the remote webservice.
Details: %1" msgstr "" -#: network/msnconnection.cpp:481 -msgid "%1 pings lost" -msgstr "" - -#: network/msnconnection.cpp:496 -msgid "The connection to the server was lost." -msgstr "" - -#: network/msnconnection.cpp:704 +#: network/msnnotificationconnection.cpp:1317 msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" msgstr "" -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "" - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" - -#: network/msnnotificationconnection.cpp:724 -msgid "Show MSN Messenger Service status?" -msgstr "" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "" - -#: network/msnnotificationconnection.cpp:1344 -msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" -msgstr "" - -#: network/msnnotificationconnection.cpp:1558 +#: network/msnnotificationconnection.cpp:1532 msgid "Got synchronization" msgstr "" -#: network/msnnotificationconnection.cpp:1699 -msgid "Authenticating" +#: network/msnnotificationconnection.cpp:1670 +msgid "Authenticating..." msgstr "" -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "" - -#: network/msnnotificationconnection.cpp:1752 +#: network/msnnotificationconnection.cpp:1719 msgid "Waiting for contact list..." msgstr "" -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." msgstr "" -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" +#: network/msnnotificationconnection.cpp:1894 +msgid "Authentication failed, please verify your account name and password." msgstr "" -#: network/msnnotificationconnection.cpp:2042 +#: network/msnnotificationconnection.cpp:1993 msgid "Connecting..." msgstr "" -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" +#: network/msnnotificationconnection.cpp:2167 +msgid "Unknown command received from the server: %1" msgstr "" -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 +#: network/msnnotificationconnection.cpp:2192 msgid "Invalid command syntax" msgstr "" -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -msgid "There was an internal error in KMess: %1" -msgstr "" - -#: network/msnnotificationconnection.cpp:2243 +#: network/msnnotificationconnection.cpp:2196 msgid "Invalid command parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2246 +#: network/msnnotificationconnection.cpp:2199 msgid "The email you have tried to add is not a MSN Messenger account" msgstr "" -#: network/msnnotificationconnection.cpp:2249 +#: network/msnnotificationconnection.cpp:2204 msgid "Domain name missing" msgstr "" -#: network/msnnotificationconnection.cpp:2252 +#: network/msnnotificationconnection.cpp:2208 msgid "Already logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2255 +#: network/msnnotificationconnection.cpp:2211 msgid "The account name given is invalid" msgstr "" -#: network/msnnotificationconnection.cpp:2258 +#: network/msnnotificationconnection.cpp:2215 msgid "" "That account name is invalid, or your passport has not been confirmed yet" msgstr "" -#: network/msnnotificationconnection.cpp:2261 +#: network/msnnotificationconnection.cpp:2218 msgid "Your contact list is full" msgstr "" -#: network/msnnotificationconnection.cpp:2264 +#: network/msnnotificationconnection.cpp:2223 msgid "Invalid SBP parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2267 +#: network/msnnotificationconnection.cpp:2226 msgid "This contact is already on your list" msgstr "" -#: network/msnnotificationconnection.cpp:2270 +#: network/msnnotificationconnection.cpp:2230 msgid "This contact is not on your list" msgstr "" -#: network/msnnotificationconnection.cpp:2273 +#: network/msnnotificationconnection.cpp:2234 msgid "This contact is not online" msgstr "" -#: network/msnnotificationconnection.cpp:2276 +#: network/msnnotificationconnection.cpp:2239 msgid "Already in this mode" msgstr "" -#: network/msnnotificationconnection.cpp:2279 +#: network/msnnotificationconnection.cpp:2243 msgid "Contact is in the opposite list" msgstr "" -#: network/msnnotificationconnection.cpp:2282 +#: network/msnnotificationconnection.cpp:2247 +msgid "" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." +msgstr "" + +#: network/msnnotificationconnection.cpp:2251 msgid "Your contact list has too many groups" msgstr "" -#: network/msnnotificationconnection.cpp:2285 +#: network/msnnotificationconnection.cpp:2255 msgid "This group can't be changed" msgstr "" -#: network/msnnotificationconnection.cpp:2288 +#: network/msnnotificationconnection.cpp:2260 +msgid "Contact is not added to this group" +msgstr "" + +#: network/msnnotificationconnection.cpp:2264 msgid "This group is not empty" msgstr "" -#: network/msnnotificationconnection.cpp:2291 -msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" -msgstr "" - -#: network/msnnotificationconnection.cpp:2294 +#: network/msnnotificationconnection.cpp:2268 msgid "The group name is too long" msgstr "" -#: network/msnnotificationconnection.cpp:2297 +#: network/msnnotificationconnection.cpp:2273 msgid "Attempted to change group \"0\"" msgstr "" -#: network/msnnotificationconnection.cpp:2300 +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +msgid "There was an internal error in KMess: %1" +msgstr "" + +#: network/msnnotificationconnection.cpp:2277 msgid "Invalid Group" msgstr "" -#: network/msnnotificationconnection.cpp:2303 +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 msgid "Switchboard server failed" msgstr "" -#: network/msnnotificationconnection.cpp:2306 +#: network/msnnotificationconnection.cpp:2287 msgid "Transfer to switchboard server failed" msgstr "" -#: network/msnnotificationconnection.cpp:2309 +#: network/msnnotificationconnection.cpp:2291 msgid "Direct connection (MSNSLP) error, connection failed" msgstr "" -#: network/msnnotificationconnection.cpp:2312 +#: network/msnnotificationconnection.cpp:2295 msgid "Required field missing" msgstr "" -#: network/msnnotificationconnection.cpp:2315 +#: network/msnnotificationconnection.cpp:2299 msgid "Not logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" +#: network/msnnotificationconnection.cpp:2302 +msgid "No permissions given for this account" msgstr "" -#: network/msnnotificationconnection.cpp:2322 +#: network/msnnotificationconnection.cpp:2307 msgid "Command is disabled" msgstr "" -#: network/msnnotificationconnection.cpp:2325 +#: network/msnnotificationconnection.cpp:2310 msgid "Your account is banned." msgstr "" -#: network/msnnotificationconnection.cpp:2329 +#: network/msnnotificationconnection.cpp:2314 msgid "Challenge response failed" msgstr "" -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" +#: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" msgstr "" -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" +#: network/msnnotificationconnection.cpp:2323 +msgid "You are opening chat sessions too fast" msgstr "" -#: network/msnnotificationconnection.cpp:2341 +#: network/msnnotificationconnection.cpp:2327 +msgid "You have too many open chat sessions" +msgstr "" + +#: network/msnnotificationconnection.cpp:2334 msgid "Unexpected command sequence" msgstr "" -#: network/msnnotificationconnection.cpp:2344 +#: network/msnnotificationconnection.cpp:2338 msgid "Bad friend name" msgstr "" -#: network/msnnotificationconnection.cpp:2348 +#: network/msnnotificationconnection.cpp:2344 msgid "Bad CVR data" msgstr "" -#: network/msnnotificationconnection.cpp:2353 +#: network/msnnotificationconnection.cpp:2350 msgid "The server reports KMess is flooding it with too many data" msgstr "" -#: network/msnnotificationconnection.cpp:2358 +#: network/msnnotificationconnection.cpp:2357 msgid "Authentication ticket was incorrect" msgstr "" -#: network/msnnotificationconnection.cpp:2362 +#: network/msnnotificationconnection.cpp:2360 msgid "You can't start a chat with someone while you are invisible." msgstr "" -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." +#: network/msnnotificationconnection.cpp:2364 +msgid "Not accepting new contacts" msgstr "" -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." +#: network/msnnotificationconnection.cpp:2368 +msgid "" +"You have a kids passport account, you need parental consent to chat online." msgstr "" -#: network/msnnotificationconnection.cpp:2373 +#: network/msnnotificationconnection.cpp:2371 +msgid "Your passport account needs to be verified first." +msgstr "" + +#: network/msnnotificationconnection.cpp:2375 msgid "Bad USR ticket" msgstr "" -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" msgstr "" -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" +#: network/msnnotificationconnection.cpp:2399 +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." +msgstr "" + +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" msgstr "" #: network/msnnotificationconnection.cpp:2414 -msgid "The server is too busy" -msgstr "" - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "" - -#: network/msnnotificationconnection.cpp:2422 msgid "Peer notification server down" msgstr "" -#: network/msnnotificationconnection.cpp:2426 +#: network/msnnotificationconnection.cpp:2418 msgid "The server is going down" msgstr "" -#: network/msnnotificationconnection.cpp:2429 +#: network/msnnotificationconnection.cpp:2422 msgid "The server is going down soon" msgstr "" -#: network/msnnotificationconnection.cpp:2433 +#: network/msnnotificationconnection.cpp:2427 msgid "Write is blocking" msgstr "" -#: network/msnnotificationconnection.cpp:2436 +#: network/msnnotificationconnection.cpp:2431 msgid "Session is overloaded" msgstr "" -#: network/msnnotificationconnection.cpp:2441 +#: network/msnnotificationconnection.cpp:2438 msgid "The server is not available" msgstr "" -#: network/msnnotificationconnection.cpp:2444 +#: network/msnnotificationconnection.cpp:2442 msgid "Authentication failed" msgstr "" -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" +#: network/msnnotificationconnection.cpp:2449 +msgid "Unknown error code received from the server: %1" msgstr "" -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +msgctxt "Error dialog box title" +msgid "MSN error" msgstr "" -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "" +#: network/msnnotificationconnection.cpp:2596 +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "" +msgstr[1] "" #: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." +msgid "Server closes for maintenance in %1!" msgstr "" #: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." msgstr "" -#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:2901 msgid "Lost reference to SOAP client" msgstr "" -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +msgid "KMess could not process Offline-IM messages.
Details: %1" msgstr "" -#: network/msnnotificationconnection.cpp:3209 -msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:3172 +msgid "Authentication time limit exceeded" msgstr "" -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:3218 +msgid "
Internal error reason: %1" msgstr "" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnnotificationconnection.cpp:3242 +msgctxt "Login error message, with more details for developer versions" +msgid "" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3302 +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" +msgstr "" + +#: network/msnsockethttp.cpp:765 +msgid "SSL Error" +msgstr "" + +#: network/msnsockettcp.cpp:352 +msgid "Connection time limit exceeded" +msgstr "" + +#: network/msnsockettcp.cpp:368 +msgid "1 ping lost" +msgstr "" + +#: network/msnsockettcp.cpp:372 +msgid "%1 pings lost" +msgstr "" + +#: network/msnsockettcp.cpp:387 +msgid "The connection to the server was lost." +msgstr "" + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "" -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "" -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 msgid "The message \"%1\" was not received!" msgstr "" -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "" -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +msgid "In %1's chat: %2" msgstr "" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +msgid "%1 says:
'%2'" msgstr "" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" +#: notification/chatnotification.cpp:171 +msgid "%1 has sent you an offline message:
'%2'" msgstr "" -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" +#: notification/chatnotification.cpp:178 +msgid "%1's chat requests attention!" msgstr "" -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" +#: notification/chatnotification.cpp:183 +msgid "%1:
%2" msgstr "" -#: notification/notificationchat.cpp:200 -msgid "%1 has sent you a handwritten message!" +#: notification/chatnotification.cpp:190 +msgid "%1 has sent you a handwritten message!" msgstr "" -#: notification/notificationchat.cpp:204 -msgid "%1 has sent you a nudge!" +#: notification/chatnotification.cpp:194 +msgid "%1 has sent you a nudge!" msgstr "" -#: notification/notificationchat.cpp:208 -msgid "%1 has sent you a wink!" +#: notification/chatnotification.cpp:198 +msgid "%1 has sent you a wink!" msgstr "" -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" +#: notification/chatnotification.cpp:204 +msgid "%1 wants to use the webcam!" msgstr "" -#: notification/notificationchat.cpp:215 -msgid "%1 is sending you a file!" +#: notification/chatnotification.cpp:205 +msgid "%1 is sending you a file!" msgstr "" -#: notification/notificationchat.cpp:216 -msgid "%1 has sent you an invitation!" +#: notification/chatnotification.cpp:206 +msgid "%1 has sent you an invitation!" msgstr "" -#: notification/notificationchat.cpp:223 -msgid "%1 has canceled the webcam session!" +#: notification/chatnotification.cpp:213 +msgid "%1 has canceled the webcam session!" msgstr "" -#: notification/notificationchat.cpp:224 -msgid "%1 has canceled the file transfer!" +#: notification/chatnotification.cpp:214 +msgid "%1 has canceled the file transfer!" msgstr "" -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +msgid "%1's activity has been canceled!" msgstr "" -#: notification/notificationchat.cpp:232 -msgid "%1 has accepted to use the webcam!" +#: notification/chatnotification.cpp:222 +msgid "%1 has accepted to use the webcam!" msgstr "" -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" +#: notification/chatnotification.cpp:223 +msgid "%1 has accepted the file transfer!" msgstr "" -#: notification/notificationchat.cpp:234 -msgid "%1 has accepted your invitation!" +#: notification/chatnotification.cpp:224 +msgid "%1 has accepted your invitation!" msgstr "" -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" +#: notification/chatnotification.cpp:231 +msgid "%1 has ended the webcam session!" msgstr "" -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" +#: notification/chatnotification.cpp:232 +msgid "The file transfer with %1 is done!" msgstr "" -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" +#: notification/chatnotification.cpp:233 +msgid "%1's activity has ended!" msgstr "" -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" +#: notification/chatnotification.cpp:240 +msgid "%1's webcam session has failed!" msgstr "" -#: notification/notificationchat.cpp:251 -msgid "The file transfer with %1 has failed!" +#: notification/chatnotification.cpp:241 +msgid "The file transfer with %1 has failed!" msgstr "" -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:242 +msgid "%1's activity has ended with an error!" msgstr "" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -msgid "%1 is now online" +#: notification/contactstatusnotification.cpp:70 +msgid "%1 is now online" msgstr "" -#: notification/notificationcontactstatus.cpp:76 -msgid "%1 has gone away" +#: notification/contactstatusnotification.cpp:71 +msgid "%1 has gone away" msgstr "" -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/contactstatusnotification.cpp:72 +msgid "%1 will be right back" msgstr "" -#: notification/notificationcontactstatus.cpp:78 -msgid "%1 is now busy" +#: notification/contactstatusnotification.cpp:73 +msgid "%1 is now busy" msgstr "" -#: notification/notificationcontactstatus.cpp:79 -msgid "%1 has become invisible" +#: notification/contactstatusnotification.cpp:74 +msgid "%1 has become invisible" msgstr "" -#: notification/notificationcontactstatus.cpp:80 -msgid "%1 has gone idle" +#: notification/contactstatusnotification.cpp:75 +msgid "%1 has gone idle" msgstr "" -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/contactstatusnotification.cpp:76 +msgid "%1 has logged out" msgstr "" -#: notification/notificationcontactstatus.cpp:82 -msgid "%1 is on the phone" +#: notification/contactstatusnotification.cpp:77 +msgid "%1 is on the phone" msgstr "" -#: notification/notificationcontactstatus.cpp:83 -msgid "%1 is out for lunch" +#: notification/contactstatusnotification.cpp:78 +msgid "%1 is out for lunch" msgstr "" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/newemailnotification.cpp:78 +msgid "New email:
'%1'
by '%2'" msgstr "" -#: settings/accountswidget.cpp:81 +#: settings/accountpage.cpp:69 msgid "Browse..." msgstr "" -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +msgid "Browse and crop picture..." msgstr "" -#: settings/accountswidget.cpp:404 -msgid "Display Picture" +#: settings/accountpage.cpp:71 +msgid "Set previous image..." msgstr "" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" +#: settings/accountpage.cpp:448 +msgid "Downloading of display picture failed" msgstr "" -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "" - -#: settings/chatstylepage.cpp:317 -msgid "Great!" -msgstr "" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 msgid "&Delete" msgstr "" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 msgid "Account" msgstr "" -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 msgid "My Account" msgstr "" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "" -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 msgid "Alerts and Notifications" msgstr "" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "" + +#: settings/accountsettingsdialog.cpp:201 +msgid "The email address you have entered is already in use: '%1'" +msgstr "" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "" + +#: settings/chatstylepage.cpp:341 +msgid "Great!" +msgstr "" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "" + +#: settings/globalsettingsdialog.cpp:45 +msgid "KMess Settings" +msgstr "" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +msgid "Accounts" +msgstr "" + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +msgid "Notification" +msgstr "" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, possible-c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, possible-c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +msgid "Select Files Directory" +msgstr "" + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." msgstr "" -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "" + +#: systemtraywidget.cpp:245 +msgid "- %1 (%2)" +msgstr "" diff --git a/po/ko.po b/po/ko.po index c1bb25d..2c9fcd5 100644 --- a/po/ko.po +++ b/po/ko.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: KMess 1.3\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" "PO-Revision-Date: 2003-10-18 16:22+0900\n" "Last-Translator: DongCheon Park \n" "Language-Team: Korean \n" @@ -16,47 +16,41 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "ė”œź·øģøķ•˜ėŠ” 중..." - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -#, fuzzy -msgid "S&end" -msgstr "볓낓기" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 #, fuzzy msgid "Ne&w Line" msgstr "새 줄" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 #, fuzzy -msgid "Sidebar" -msgstr "ėŒ€ķ™” ģƒėŒ€ ė„źµ¬ķ•Ø(&C)" +msgid "S&end" +msgstr "볓낓기" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +#, fuzzy +msgid "Contacts" +msgstr "ėŒ€ķ™” ģƒėŒ€ 추가(&A)" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 #, fuzzy msgid "" "Enter here the email address of the person you wish to add to your contact " @@ -64,42 +58,40 @@ msgid "" msgstr "추가할 ėŒ€ķ™” ģƒėŒ€ģ˜ ģ“ė©”ģ¼ ģ£¼ģ†Œ ģž…ė „:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 #, fuzzy msgid "Email address" msgstr "ģ“ė©”ģ¼ ģ£¼ģ†Œ:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 #, fuzzy -msgid "New contact's group" -msgstr "ėŒ€ķ™” ģƒėŒ€ 추가(&C)" +msgid "Initial group" +msgstr "그룹 ģ“ė¦„ 바꾸기(&N)" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 #, fuzzy msgid "" "Enter a message to be automatically sent to people who try to message you." @@ -108,184 +100,391 @@ msgstr "" "ģžė™ģœ¼ė”œ 볓낼 ė©”ģ‹œģ§€ ģž…ė „:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 #, fuzzy msgid "&Automatic away message" msgstr "ģžė¦¬ 비움 ė©”ģ‹œģ§€ 지정" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, fuzzy, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" -msgstr "ė‹˜ģ“ ė‹¹ģ‹ ģ„ ėŒ€ķ™” ģƒėŒ€ ėŖ©ė”ģ— ģ¶”ź°€ķ•˜ģ˜€ģŠµė‹ˆė‹¤. ģ–“ė–»ź²Œ ķ• ź¹Œģš”?:" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 #, fuzzy -msgid "&Add this contact to your \"Friends\" list" +msgid "&Add this person to my \"Friends\" list" msgstr "ģ“ ėŒ€ķ™” ģƒėŒ€ė„¼ ė‚“ \"친구\" ėŖ©ė”ģ— ģ¶”ź°€ķ•©ė‹ˆė‹¤." #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 #, fuzzy -msgid "&Not add this contact, but let them see your online state" +msgid "Do not add this person; only allow them to see my online state" msgstr "ėŖ©ė”ģ— ģ¶”ź°€ķ•˜ģ§€ ģ•Šģ§€ė§Œ, ė‚“ ģ˜Øė¼ģø ģƒķƒœėŠ” ė³¼ 수 ģžˆź²Œ ķ•©ė‹ˆė‹¤." #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 #, fuzzy -msgid "Block this person from contacting &you or seeing your online state" +msgid "&Block this person from contacting me or seeing my online state" msgstr "ė‚“ 상태넼 ė³“ź±°ė‚˜ ė‚˜ģ™€ ėŒ€ķ™”ķ•  수 ģ—†ė„ė” ģ°Øė‹Øķ•©ė‹ˆė‹¤." #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, fuzzy, no-c-format +msgid "Contact Properties for %1" +msgstr "ėŒ€ķ™” ģƒėŒ€ģ˜ ģ†ģ„±: " + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +#, fuzzy +msgid "Restore" +msgstr "ģ‚­ģ œėœ ėŒ€ķ™” ģƒėŒ€" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "ģ“ ėŒ€ķ™” ģƒėŒ€ģ˜ ėŒ€ķ™”ėŖ… ėŒ€ģ‹ ģ— 별칭 ģ‚¬ģš©" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "ģ“ ėŒ€ķ™” ģƒėŒ€ź°€ ė”œź·øģø ė˜ėŠ” ė”œź·øģ•„ģ›ƒķ•  ė•Œ ķŒģ—… ķ’ģ„  ķ‘œģ‹œ" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "ģ†Œė¦¬ķŒŒģ¼:" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +msgid "&Clear Cache" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +msgid "Notes" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "ķ˜•ģ‹:" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +#, fuzzy +msgid "Standard" +msgstr "ė™ģŖ½ķ•˜ėŠ˜" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "볓낓기" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 msgid "Cancel" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -#, fuzzy -msgid "Enter your login information:" -msgstr "직접 ė”œź·øģø 정볓 ģž…ė „:" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" +msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 #, fuzzy -msgid "Password" +msgid "Email address:" +msgstr "ģ“ė©”ģ¼ ģ£¼ģ†Œ:" + +#. i18n: tag string +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +#, fuzzy +msgid "Password:" msgstr "ģ•”ķ˜ø:" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 #, fuzzy msgid " Account options " msgstr "계정 설정(&S)" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 #, fuzzy msgid "Remem&ber this profile" msgstr "ģ“ ķ”„ė”œķ•„ ģ €ģž„" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "ė”œź·øģø(&C)" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr "계정 설정(&S)" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 #, fuzzy -msgid "Your friendly name:" +msgid "&Friendly name:" msgstr "ėŒ€ķ™”ėŖ…:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 #, fuzzy -msgid "Your email address:" +msgid "&Email address:" msgstr "ģ“ė©”ģ¼ ģ£¼ģ†Œ:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 +#, fuzzy +msgid "&Password:" msgstr "ģ•”ķ˜ø:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 #, fuzzy -msgid "Remember Password" +msgid "&Remember Password" msgstr "ģ•”ķ˜ø:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 #, fuzzy -msgid "Display picture:" +msgid "Display Picture" msgstr "ź·øė¦¼ķŒŒģ¼:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 msgid "C&hange..." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -#, fuzzy -msgid "Don't show a displa&y picture" -msgstr "ķ”„ė”ģ‹œ ģ‚¬ģš©" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -296,35 +495,36 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +msgid "Re&member the settings of this account" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 #, fuzzy -msgid "Login &with this account automatically at start-up" +msgid "Login &with this account automatically" msgstr "ģ‹œģž‘ķ•  ė•Œ ģ“ ź³„ģ •ģœ¼ė”œ ģžė™ ė”œź·øģø" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "ėŖØė“  ėŒ€ķ™”ė„¼ źø°ė”" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -332,174 +532,285 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 msgid "https://accountservices.passport.net/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 #, fuzzy -msgid "Popup notifications" +msgid "Saved accounts:" +msgstr "계정" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +#, fuzzy +msgid "Click" +msgstr "(차단됨)" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "계정" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "ģ‚­ģ œėœ ėŒ€ķ™” ģƒėŒ€" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "ģ“ė©”ģ¼ ģ•Œė¦¼" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "ėŒ€ķ™” ģƒėŒ€ 추가(&A)" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 #, fuzzy msgid "Show notifications when your contacts:" msgstr "ėŒ€ķ™” ģƒėŒ€ź°€ ė”œź·øģ•„ģ›ƒķ•˜ė©“ ģ•Œė¦¼" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 #, fuzzy msgid "&Go online" msgstr "ģ˜¤ķ”„ė¼ģø" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 #, fuzzy msgid "S&end you a message" msgstr "ģžė¦¬ 비움 ė©”ģ‹œģ§€ 지정" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 #, fuzzy msgid "Go o&ffline" msgstr "ģ˜¤ķ”„ė¼ģø" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 #, fuzzy -msgid "Show notifications when you recei&ve an email" +msgid "Email Events" +msgstr "ģ“ė©”ģ¼ ģ£¼ģ†Œ:" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" msgstr "\"다넸 ķŽøģ§€ķ•Ø\"에 ģ“ė©”ģ¼ģ“ ė„ģ°©ķ•˜ė©“ ģ•Œė¦¼" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +#, fuzzy +msgid "In other folders" +msgstr "다넸 ķŽøģ§€ķ•Ø ķ¬ķ•Ø" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "ķ‘œģ‹œķ•  ģ‹œź°„" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "쓈" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "ģ•Œė¦¼" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "ģ˜¤ķ”„ė¼ģø ėŒ€ķ™” ģƒėŒ€(&A)" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -510,207 +821,209 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 -msgid "Inform contacts w&hich song I am listening to." +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 +msgid "Inform contacts w&hich song I am listening to" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 #, fuzzy msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "ģž…ė „ģ“ ģ—†ģ„ ė•Œ \"ģžė¦¬ 비움-ģ‹œź°„ģ“ˆź³¼\" 상태딜 ģ „ķ™˜" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 msgid "Become idle after" msgstr "ėŒ€źø°ķ•  ģ‹œź°„" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "ė¶„" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 #, fuzzy msgid "Log &all chats" msgstr "ėŖØė“  ėŒ€ķ™”ė„¼ źø°ė”" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 msgid "" "Choose the directory on your system where you'd like to save the chat logs." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" msgstr "ėŒ€ķ™”ė„¼ ģ €ģž„ķ•  ķ“ė” 지정:" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "ėŒ€ķ™”ė„¼ źø°ė”ķ•  ķ“ė”ģ˜ 구성:" +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "ė…„ė„ 별" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 #, fuzzy msgid "Month" msgstr "ģ›” 별" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "ė‚ ģ§œ 별" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" msgstr "ėŖØė“  ėŒ€ķ™”ė„¼ ķ•œ ķ“ė”ģ— ģ €ģž„" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "ė‚“ ė©”ģ‹œģ§€ģ˜ 글꼓:" - +#. i18n: file ./settings/chatstylepage.ui line 45 #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "ģƒėŒ€ė°© ė©”ģ‹œģ§€ģ˜ 글꼓 지정:" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +msgid "&Chat style:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "ķ™˜ź²½ 설정" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 #, fuzzy -msgid "&Show graphics in chat messages" -msgstr "ė©”ģ‹œģ§€ģ— ģ“ėŖØķ‹°ģ½˜ ķ‘œģ‹œ" +msgid "&Show emoticons" +msgstr "ģ“ėŖØķ‹°ģ½˜ ķ‘œģ‹œ(&E)" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 #, fuzzy -msgid "S&how time in chat messages" +msgid "S&how messages time" msgstr "ė©”ģ‹œģ§€ģ— ģ“ėŖØķ‹°ģ½˜ ķ‘œģ‹œ" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -#, fuzzy -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "ė©”ģ‹œģ§€ģ— 글꼓 효과 ģ‚¬ģš© (*굵게*, /źø°ģšøģž„/, _밑줄_)" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -719,151 +1032,303 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 -msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "ė©”ģ¼ ķ“ė¼ģ“ģ–øķŠø" +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 +#, fuzzy +msgid "Always" +msgstr "ģžė¦¬ 비움" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "Hotmail ģ‚¬ģš©" +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "ėŒ€ķ™” ģƒėŒ€ ėŖ©ė”ģ“ 꽉 ģ°¼ģŠµė‹ˆė‹¤" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "ģ§€ģ •ķ•œ ėŖ…ė ¹ ģ‚¬ģš©" +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "ģ„œė²„:" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "ģ“ė©”ģ¼ ģ•Œė¦¼" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 -msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 -msgid "Show email information" -msgstr "ģ“ė©”ģ¼ 정볓 ķ‘œģ‹œ" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 -msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" -msgstr "\"다넸 ķŽøģ§€ķ•Ø\"에 ģ“ė©”ģ¼ģ“ ė„ģ°©ķ•˜ė©“ ģ•Œė¦¼" +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "ė‚“ ė©”ģ‹œģ§€ģ˜ 글꼓:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 +msgid "" +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "ģƒėŒ€ė°© ė©”ģ‹œģ§€ģ˜ 글꼓 지정:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 +msgid "" +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +#, fuzzy +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" +msgstr "ė©”ģ‹œģ§€ģ— 글꼓 효과 ģ‚¬ģš© (*굵게*, /źø°ģšøģž„/, _밑줄_)" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "ėŒ€ķ™” ģƒėŒ€ 찾기(&E)" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 #, fuzzy msgid "&Emoticon Themes" msgstr "ģ“ėŖØķ‹°ģ½˜ ķ‘œģ‹œ(&E)" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 #, fuzzy msgid "Available emoticon styles:" msgstr "ģ“ėŖØķ‹°ģ½˜ ķ‘œģ‹œ(&E)" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 #, fuzzy msgid "&Custom Emoticons" msgstr "칓툰 ģ“ėŖØķ‹°ģ½˜" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 msgid "Custom emoticons for this account:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -#, fuzzy -msgid "Click" -msgstr "(차단됨)" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 #, fuzzy msgid "Re&name" msgstr "ėŒ€ķ™”ėŖ…" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 #, fuzzy msgid "Remo&ve" msgstr "ģ‚­ģ œėœ ėŒ€ķ™” ģƒėŒ€" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +msgid "Web Browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +msgid "&Use the KDE default browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "ė‹˜ģ˜ 말:" +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "ė©”ģ¼ ķ“ė¼ģ“ģ–øķŠø" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +msgid "&Use the KDE default email client" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +#, fuzzy +msgid "File Transfers" +msgstr "ķŒŒģ¼ ģ „ģ†”ģ„ ģ™„ė£Œķ–ˆģŠµė‹ˆė‹¤." + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "ėŒ€ķ™”ė„¼ ģ €ģž„ķ•  ķ“ė” 지정:" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +msgid "and" +msgstr "그리고" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "ķŒŒģ¼ ģ „ģ†”ģ„ ģ™„ė£Œķ–ˆģŠµė‹ˆė‹¤." #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -873,449 +1338,530 @@ msgstr "컓퓨터 ģžė¦¬ė„¼ ė¹„ģš“ ģƒķƒœģž…ė‹ˆė‹¤." msgid "Your name" msgstr "ėŒ€ķ™”ėŖ…" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "you@hotmail.com" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "ģ˜Øė¼ģø" - -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "ģžė¦¬ 비움" - -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "ź³§ ėŒģ•„ģ˜¤ź² ģŒ" - -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "다넸 용묓 중" - -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "ģ˜¤ķ”„ė¼ģøģœ¼ė”œ ķ‘œģ‹œ" - -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "" - -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "ģ˜¤ķ”„ė¼ģø" - -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "통화 중" - -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "ģ‹ģ‚¬ 중" - -#: chat/chatmaster.cpp:1061 -msgid "%1 is sending a wink: %2" -msgstr "" - -#: chat/chatmessagestyle.cpp:302 -#, fuzzy -msgid "%1 says:" -msgstr "ė‹˜ģ˜ 말: " - -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 -msgid "Add this emoticon: %1" -msgstr "" - -#: chat/chatview.cpp:529 -msgid "" -"Could not save chat log. Make sure you have permission to write in the " -"folder where logs are being saved." -msgstr "" - -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 -msgid "" -"The file '%1' already exists.\n" -"do you want to overwrite it?" -msgstr "" - -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Overwrite File" -msgstr "" - -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Over&write" -msgstr "" - -#: chat/chatview.cpp:977 -#, fuzzy -msgid "Add this &Emoticon..." -msgstr "ģ“ėŖØķ‹°ģ½˜ ķ‘œģ‹œ(&E)" - -#: chat/chatview.cpp:984 -#, fuzzy -msgid "Send &Email" -msgstr "ķŽøģ§€ 볓낓기(&S)" - -#: chat/chatview.cpp:988 -#, fuzzy -msgid "Copy E&mail" -msgstr "ģ“ė©”ģ¼" - -#: chat/chatview.cpp:995 -msgid "Visit &Link" -msgstr "" - -#: chat/chatview.cpp:999 -msgid "Copy &Address" -msgstr "" - -#: chat/chatview.cpp:1013 -msgid "&Copy text" -msgstr "" - -#: chat/chatview.cpp:1014 -msgid "Select &All" -msgstr "" - -#: chat/chatview.cpp:1015 -#, fuzzy -msgid "Save chat to &File" -msgstr "ķŒŒģ¼ 볓낓기(&F)" - -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "ėŒ€ķ™”" - -#: chat/chatwindow.cpp:239 +#: chat/chat.cpp:124 msgid "" "You can't start this invitation because there are multiple contacts in this " "chat." msgstr "" -#: chat/chatwindow.cpp:276 -msgid "%1 has joined the chat." +#: chat/chat.cpp:158 +#, fuzzy +msgid "%1 has joined the chat." msgstr "%1ė‹˜ģ“ ėŒ€ķ™”ģ— ģ°øź°€ķ–ˆģŠµė‹ˆė‹¤." -#: chat/chatwindow.cpp:327 +#: chat/chat.cpp:211 #, fuzzy -msgid "The conversation went idle, %1 has left the chat." +msgid "The conversation went idle, %1 has left the chat." msgstr "%1ė‹˜ģ“ ėŒ€ķ™”ė„¼ ė– ė‚¬ģŠµė‹ˆė‹¤." -#: chat/chatwindow.cpp:331 -msgid "%1 has left the chat." +#: chat/chat.cpp:215 +#, fuzzy +msgid "%1 has left the chat." msgstr "%1ė‹˜ģ“ ėŒ€ķ™”ė„¼ ė– ė‚¬ģŠµė‹ˆė‹¤." -#: chat/chatwindow.cpp:593 +#: chat/chat.cpp:364 #, fuzzy -msgid "%1 - Chat" -msgstr "ėŒ€ķ™”" +msgctxt "Name of a chat tab" +msgid "%1 and %2" +msgstr "%1ė‹˜ģ“ ė©”ģ‹œģ§€ė„¼ ģž…ė „ķ•˜ź³  ģžˆģŠµė‹ˆė‹¤." -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" -msgstr "" - -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" -msgstr "" - -#: chat/chatwindow.cpp:757 +#: chat/chat.cpp:371 #, fuzzy -msgid "Contacts" -msgstr "ėŒ€ķ™” ģƒėŒ€ 추가(&A)" +msgctxt "Name of a chat tab" +msgid "%1 et al." +msgstr "%1 등등." -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 +#: chat/chat.cpp:630 #, fuzzy -msgid "Emoticons" -msgstr "ģ“ėŖØķ‹°ģ½˜ ķ‘œģ‹œ(&E)" - -#: chat/chatwindow.cpp:819 -#, fuzzy -msgid "My emoticons" -msgstr "ģ“ėŖØķ‹°ģ½˜ ķ‘œģ‹œ(&E)" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" msgstr " (ģ“ ė©”ģ‹œģ§€ėŠ” ģžė™ģ‘ė‹µģœ¼ė”œ 볓낓진 ź²ƒģž…ė‹ˆė‹¤.)" -#: chat/chatwindow.cpp:1502 +#: chat/chat.cpp:934 +msgid "You received a wink from %1." +msgstr "" + +#: chat/chat.cpp:971 msgid "" "The wink could not be displayed. Make sure you have 'cabextract' installed." msgstr "" -#: chat/chatwindow.cpp:1511 +#: chat/chat.cpp:980 msgid "The wink could not be displayed. The data could not be read." msgstr "" -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" +#: chat/chat.cpp:1080 +msgid "You have received a wink from %1" msgstr "" -#: chat/chatwindow.cpp:1755 -#, fuzzy -msgid "Show Side&bar" -msgstr "ėŒ€ķ™” ģƒėŒ€ ė„źµ¬ķ•Ø(&C)" +#: chat/chat.cpp:1100 +msgid "You received a nudge from %1!" +msgstr "" -#: chat/chatwindow.cpp:1756 +#: chat/chat.cpp:1119 #, fuzzy -msgid "Show the contact sidebar" -msgstr "ėŒ€ķ™” ģƒėŒ€ ė„źµ¬ķ•Ø" - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -#, fuzzy -msgid "Hide Side&bar" -msgstr "ėŒ€ķ™” ģƒėŒ€ ė„źµ¬ķ•Ø(&C)" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -#, fuzzy -msgid "Hide the contact sidebar" -msgstr "ėŒ€ķ™” ģƒėŒ€ ė„źµ¬ķ•Ø" - -#: chat/chatwindow.cpp:1787 -#, fuzzy -msgid "The message '%1' could not be sent." +msgid "The message '%1' could not be sent." msgstr "ė©”ģ‹œģ§€ \"%1\"ģ˜ ģ „ė‹¬ģ„ ģ‹¤ķŒØķ–ˆģŠµė‹ˆė‹¤." -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" -msgstr "" - -#: chat/chatwindow.cpp:1876 +#: chat/chat.cpp:1183 msgid "You've sent a nudge to %1!" msgstr "" -#: chat/chatwindow.cpp:1883 +#: chat/chat.cpp:1190 msgid "You've sent a nudge!" msgstr "" -#: chat/chatwindow.cpp:1972 -msgid "%1 is typing." -msgstr "%1ė‹˜ģ“ ė©”ģ‹œģ§€ė„¼ ģž…ė „ķ•˜ź³  ģžˆģŠµė‹ˆė‹¤." - -#: chat/chatwindow.cpp:1981 -#, fuzzy -msgid "%1 and %2 are typing." -msgstr "%1ė‹˜ģ“ ė©”ģ‹œģ§€ė„¼ ģž…ė „ķ•˜ź³  ģžˆģŠµė‹ˆė‹¤." - -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." +#: chat/chatmaster.cpp:1219 +msgid "%1 is sending a wink: %2" msgstr "" -#: chat/chatwindowinterface.cpp:175 -msgid "&Chat" -msgstr "ėŒ€ķ™”(&C)" +#: chat/chatmessagestyle.cpp:298 +#, fuzzy +msgid "%1 says:" +msgstr "ė‹˜ģ˜ 말: " -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 +msgid "Add this emoticon: %1" +msgstr "" + +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 msgid "&Invite" msgstr "ģ“ˆėŒ€ķ•˜źø°(&I)" -#: chat/chatwindowinterface.cpp:179 +#: chat/chatview.cpp:695 +msgid "" +"Could not save chat log. Make sure you have permission to write in the " +"folder where logs are being saved." +msgstr "" + +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 +msgid "" +"The file '%1' already exists.\n" +"do you want to overwrite it?" +msgstr "" + +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Overwrite File" +msgstr "" + +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Over&write" +msgstr "" + +#: chat/chatview.cpp:1275 +#, fuzzy +msgid "Add this &Emoticon..." +msgstr "ģ“ėŖØķ‹°ģ½˜ ķ‘œģ‹œ(&E)" + +#: chat/chatview.cpp:1282 +#, fuzzy +msgid "Send &Email" +msgstr "ķŽøģ§€ 볓낓기(&S)" + +#: chat/chatview.cpp:1286 +#, fuzzy +msgid "Copy E&mail" +msgstr "ģ“ė©”ģ¼" + +#: chat/chatview.cpp:1293 +msgid "Visit &Link" +msgstr "" + +#: chat/chatview.cpp:1297 +msgid "Copy &Address" +msgstr "" + +#: chat/chatview.cpp:1312 +msgid "&Copy text" +msgstr "" + +#: chat/chatview.cpp:1313 +msgid "Select &All" +msgstr "" + +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 +#, fuzzy +msgid "Save chat to &File" +msgstr "ķŒŒģ¼ 볓낓기(&F)" + +#: chat/chatwindow.cpp:489 +msgid "&Chat" +msgstr "ėŒ€ķ™”(&C)" + +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "ķŒŒģ¼ 볓낓기(&F)" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "ķ™”ģƒķšŒģ˜ ģ‹œģž‘(&M)" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 #, fuzzy msgid "Send a &Nudge!" msgstr "ķŒŒģ¼ 볓낓기(&F)" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 #, fuzzy msgid "&Emoticons" msgstr "ģ“ėŖØķ‹°ģ½˜ ķ‘œģ‹œ(&E)" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +msgid "Close &All Tabs" +msgstr "" + +#: chat/chatwindow.cpp:504 #, fuzzy msgid "Meeting" msgstr "ķ™˜ź²½ 설정" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "글꼓 바꾸기(&F)" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "źø€ģžģƒ‰ 바꾸기(&C)" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 #, fuzzy msgid "&Font" msgstr "ė”œź·øģø(&C)" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 #, fuzzy msgid "Font &Color" msgstr "źø€ģžģƒ‰ 바꾸기(&C)" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +#, fuzzy +msgid "Emoticons" +msgstr "ģ“ėŖØķ‹°ģ½˜ ķ‘œģ‹œ(&E)" + +#: chat/chatwindow.cpp:658 +#, fuzzy +msgid "My emoticons" +msgstr "ģ“ėŖØķ‹°ģ½˜ ķ‘œģ‹œ(&E)" + +#: chat/chatwindow.cpp:738 #, fuzzy msgid "&Settings" msgstr "ķ™˜ź²½ 설정" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "ģ“ėŖØķ‹°ģ½˜ ķ‘œģ‹œ(&E)" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +#, fuzzy +msgid "Hide Side&bar" +msgstr "ėŒ€ķ™” ģƒėŒ€ ė„źµ¬ķ•Ø(&C)" + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "ėŒ€ķ™” ģƒėŒ€ ė„źµ¬ķ•Ø(&C)" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +#, fuzzy +msgid "Hide the contact sidebar" +msgstr "ėŒ€ķ™” ģƒėŒ€ ė„źµ¬ķ•Ø" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +msgid "Close all tabs" +msgstr "" + +#: chat/chatwindow.cpp:856 +msgid "Close current tab" +msgstr "" + +#: chat/chatwindow.cpp:1467 +#, fuzzy +msgid "Show Side&bar" +msgstr "ėŒ€ķ™” ģƒėŒ€ ė„źµ¬ķ•Ø(&C)" + +#: chat/chatwindow.cpp:1468 +#, fuzzy +msgid "Show the contact sidebar" +msgstr "ėŒ€ķ™” ģƒėŒ€ ė„źµ¬ķ•Ø" + +#: chat/chatwindow.cpp:1565 +msgid "%1 is typing." +msgstr "%1ė‹˜ģ“ ė©”ģ‹œģ§€ė„¼ ģž…ė „ķ•˜ź³  ģžˆģŠµė‹ˆė‹¤." + +#: chat/chatwindow.cpp:1575 +#, fuzzy +msgid "%1 and %2 are typing." +msgstr "%1ė‹˜ģ“ ė©”ģ‹œģ§€ė„¼ ģž…ė „ķ•˜ź³  ģžˆģŠµė‹ˆė‹¤." + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "" + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "ėŒ€ķ™”" + +#: chat/chatwindow.cpp:1615 +#, fuzzy +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "ėŒ€ķ™”" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "ķŽøģ§€ 볓낓기(&S)" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 #, fuzzy msgid "&View Profile" msgstr "ķ”„ė”œķ•„ 볓기(&S)" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "ėŒ€ķ™” ģƒėŒ€ 추가(&A)" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 #, fuzzy msgid "A&llow Contact" msgstr "ėŒ€ķ™” ģƒėŒ€ ķ—ˆģš©(&A)" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 #, fuzzy msgid "&Delete Contact" msgstr "ėŒ€ķ™” ģƒėŒ€ ģ‚­ģ œ(&R)" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "차단(&B)" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "차단 ķ•“ģ œ(&U)" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 #, fuzzy msgid "&Friendly Name" msgstr "ėŒ€ķ™”ėŖ…:" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 #, fuzzy msgid "&Email Address" msgstr "ģ“ė©”ģ¼ ģ£¼ģ†Œ:" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "" -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 msgid "Blocked" msgstr "(차단됨)" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 #, fuzzy msgid "The contact is %1" msgstr "ģ“ ėŒ€ķ™” ģƒėŒ€ė„¼ ė‚“ \"친구\" ėŖ©ė”ģ— ģ¶”ź°€ķ•©ė‹ˆė‹¤." -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +#, fuzzy +msgid "Add to Chat" +msgstr "ėŒ€ķ™” ģƒėŒ€ 추가" + +#: chat/emoticonsidebar.cpp:213 +#, fuzzy +msgid "Insert new" +msgstr "ģ“ėŖØķ‹°ģ½˜ ģ‚½ģž…" + +#: chat/emoticonsidebar.cpp:214 +msgid "Edit" +msgstr "" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +#, fuzzy +msgid "Remove" +msgstr "ģ‚­ģ œėœ ėŒ€ķ™” ģƒėŒ€" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 #, fuzzy msgid "Web Messenger" msgstr "웹 ė””ģžģø" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +#, fuzzy +msgid "Windows Live Messenger %1" +msgstr "웹 ė””ģžģø" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "ģ˜Øė¼ģø" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "ģ˜¤ķ”„ė¼ģø" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "ķ—ˆģš©ėœ ėŒ€ķ™” ģƒėŒ€" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "ģ‚­ģ œėœ ėŒ€ķ™” ģƒėŒ€" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 +#, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr "%1ė‹˜ģ“ ė©”ģ‹œģ§€ė„¼ ģž…ė „ķ•˜ź³  ģžˆģŠµė‹ˆė‹¤." + +#: contactlistviewdelegate.cpp:150 msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "ģžė¦¬ 비움" + +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "ź³§ ėŒģ•„ģ˜¤ź² ģŒ" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "다넸 용묓 중" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "ģ˜¤ķ”„ė¼ģøģœ¼ė”œ ķ‘œģ‹œ" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" msgstr "" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "통화 중" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "ģ‹ģ‚¬ 중" + +#: dialogs/addcontactdialog.cpp:48 #, fuzzy msgid "Add a Contact" msgstr "ėŒ€ķ™” ģƒėŒ€ 추가" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 #, fuzzy msgid "No group" msgstr "그룹 ģ‚­ģ œ(&M)" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 #, fuzzy msgid "Add New Emoticon" msgstr "ģ“ėŖØķ‹°ģ½˜ ķ‘œģ‹œ(&E)" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "ģ“ėŖØķ‹°ģ½˜ ķ‘œģ‹œ(&E)" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "" @@ -1323,542 +1869,609 @@ msgstr "" msgid "Specify an Away message" msgstr "ģžė¦¬ 비움 ė©”ģ‹œģ§€ 지정" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "ģ“ ėŒ€ķ™” ģƒėŒ€ģ˜ ėŒ€ķ™”ėŖ… ėŒ€ģ‹ ģ— 별칭 ģ‚¬ģš©" - -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" -msgstr "ģ“ ėŒ€ķ™” ģƒėŒ€ź°€ ė”œź·øģø ė˜ėŠ” ė”œź·øģ•„ģ›ƒķ•  ė•Œ ķŒģ—… ķ’ģ„  ķ‘œģ‹œ" - -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "ź·øė¦¼ķŒŒģ¼:" - -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "ģ†Œė¦¬ķŒŒģ¼:" - -#: dialogs/contactpropertiesdialog.cpp:234 +#: dialogs/contactaddeduserdialog.cpp:85 #, fuzzy -msgid "Contact Properties for %1" -msgstr "ėŒ€ķ™” ģƒėŒ€ģ˜ ģ†ģ„±: " +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " +msgstr "ė‹˜ģ“ ė‹¹ģ‹ ģ„ ėŒ€ķ™” ģƒėŒ€ ėŖ©ė”ģ— ģ¶”ź°€ķ•˜ģ˜€ģŠµė‹ˆė‹¤. ģ–“ė–»ź²Œ ķ• ź¹Œģš”?:" -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " -msgstr "ģ“ė©”ģ¼ ģ£¼ģ†Œ:" +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "ė”œź·øģøė˜ģ–“ ģžˆģŒ" -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "ķ˜„ģž¬ ėŒ€ķ™”ėŖ…: " - -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +msgid "Not seen yet" msgstr "" -#: dialogs/networkwindow.cpp:57 +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +#, fuzzy +msgid "No messages yet" +msgstr "ė©”ģ‹œģ§€ģ— ģ“ėŖØķ‹°ģ½˜ ķ‘œģ‹œ" + +#: dialogs/contactpropertiesdialog.cpp:381 +msgid "Last seen: %1" +msgstr "" + +#: dialogs/contactpropertiesdialog.cpp:382 +#, fuzzy +msgid "Last message: %1" +msgstr "ė‚“ ė©”ģ‹œģ§€ģ˜ 글꼓:" + +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "ģ“ė©”ģ¼" + +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "ė©”ģ¼ ķ“ė¼ģ“ģ–øķŠø" + +#: dialogs/networkwindow.cpp:79 msgid "S&ave tab" msgstr "" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 msgid "C&lear tab" msgstr "" -#: dialogs/networkwindow.cpp:59 -msgid "Cl&ose tab" -msgstr "" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 msgid "" "No connections are present.\n" "Cannot open the Network Window." msgstr "" -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 msgid "" "Could not save the Network Window log. Make sure you have permission to " "write in the folder where it is being saved." msgstr "" -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "" -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +msgid "Cannot send commands to this kind of connection!" +msgstr "" + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 #, fuzzy msgid "Completed" msgstr "ė”œź·øģøė˜ģ–“ ģžˆģŒ" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +msgid "%1 of %2 received." msgstr "" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +msgid "%1 of %2 sent." msgstr "" -#: dialogs/transferwindow.cpp:55 -#, fuzzy -msgid "File Transfers" -msgstr "ķŒŒģ¼ ģ „ģ†”ģ„ ģ™„ė£Œķ–ˆģŠµė‹ˆė‹¤." +#: dialogs/transferentry.cpp:373 +msgid "infinite" +msgstr "" -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 msgid "Cl&ean Up" msgstr "" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " "the theme folder '%1'." msgstr "" -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 #, fuzzy msgid "Smile" msgstr "ģ“ė©”ģ¼" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "" -#: emoticontheme.cpp:797 -msgid "Big smile" -msgstr "" - -#: emoticontheme.cpp:798 -#, fuzzy -msgid "Sad" -msgstr "그리고" - -#: emoticontheme.cpp:799 -msgid "Crying" -msgstr "" - -#: emoticontheme.cpp:800 -msgid "Angry" -msgstr "" - -#: emoticontheme.cpp:801 -msgid "Confused" -msgstr "" - -#: emoticontheme.cpp:802 -msgid "Embarrassed" -msgstr "" - -#: emoticontheme.cpp:803 -#, fuzzy -msgid "Disappointed" -msgstr "ė”œź·øģøė˜ģ–“ ģžˆģ§€ ģ•ŠģŒ" - -#: emoticontheme.cpp:804 -msgid "Hot" -msgstr "" - -#: emoticontheme.cpp:805 -msgid "Baring teeth" -msgstr "" - -#: emoticontheme.cpp:806 -msgid "Nerd" -msgstr "" - -#: emoticontheme.cpp:807 -msgid "Sick" -msgstr "" - -#: emoticontheme.cpp:808 -msgid "Surprised" -msgstr "" - -#: emoticontheme.cpp:809 -#, fuzzy -msgid "Party" -msgstr "ķ”„ė”ģ‹œ" - -#: emoticontheme.cpp:810 -msgid "Sleepy" -msgstr "" - -#: emoticontheme.cpp:811 -msgid "Thinking" -msgstr "" - #: emoticontheme.cpp:812 -msgid "Don't tell anyone" +msgid "Big smile" msgstr "" #: emoticontheme.cpp:813 #, fuzzy -msgid "Secret telling" -msgstr "ķ™˜ź²½ 설정" +msgid "Sad" +msgstr "그리고" #: emoticontheme.cpp:814 -msgid "Eye-rolling" +msgid "Crying" msgstr "" #: emoticontheme.cpp:815 -msgid "Sarcastic" +msgid "Angry" msgstr "" #: emoticontheme.cpp:816 -msgid "I don't know" +msgid "Confused" msgstr "" #: emoticontheme.cpp:817 +msgid "Embarrassed" +msgstr "" + +#: emoticontheme.cpp:818 +#, fuzzy +msgid "Disappointed" +msgstr "ė”œź·øģøė˜ģ–“ ģžˆģ§€ ģ•ŠģŒ" + +#: emoticontheme.cpp:819 +msgid "Hot" +msgstr "" + +#: emoticontheme.cpp:820 +msgid "Baring teeth" +msgstr "" + +#: emoticontheme.cpp:821 +msgid "Nerd" +msgstr "" + +#: emoticontheme.cpp:822 +msgid "Sick" +msgstr "" + +#: emoticontheme.cpp:823 +msgid "Surprised" +msgstr "" + +#: emoticontheme.cpp:824 +#, fuzzy +msgid "Party" +msgstr "ķ”„ė”ģ‹œ" + +#: emoticontheme.cpp:825 +msgid "Sleepy" +msgstr "" + +#: emoticontheme.cpp:826 +msgid "Thinking" +msgstr "" + +#: emoticontheme.cpp:827 +msgid "Don't tell anyone" +msgstr "" + +#: emoticontheme.cpp:828 +#, fuzzy +msgid "Secret telling" +msgstr "ķ™˜ź²½ 설정" + +#: emoticontheme.cpp:829 +msgid "Eye-rolling" +msgstr "" + +#: emoticontheme.cpp:830 +msgid "Sarcastic" +msgstr "" + +#: emoticontheme.cpp:831 +msgid "I don't know" +msgstr "" + +#: emoticontheme.cpp:832 #, fuzzy msgid "Be right back" msgstr "ź³§ ėŒģ•„ģ˜¤ź² ģŒ" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "" -#: emoticontheme.cpp:824 -msgid "Dog face" -msgstr "" - -#: emoticontheme.cpp:825 -#, fuzzy -msgid "Sun" -msgstr "ģ†Œė¦¬ķŒŒģ¼:" - -#: emoticontheme.cpp:826 -msgid "Devil" -msgstr "" - -#: emoticontheme.cpp:827 -msgid "Right hug" -msgstr "" - -#: emoticontheme.cpp:828 -msgid "Girl" -msgstr "" - -#: emoticontheme.cpp:829 -msgid "Broken heart" -msgstr "" - -#: emoticontheme.cpp:830 -msgid "Wilted rose" -msgstr "" - -#: emoticontheme.cpp:831 -msgid "Thumbs down" -msgstr "" - -#: emoticontheme.cpp:832 -msgid "Cat face" -msgstr "" - -#: emoticontheme.cpp:833 -msgid "Sleeping half-moon" -msgstr "" - -#: emoticontheme.cpp:834 -msgid "Red lips" -msgstr "" - -#: emoticontheme.cpp:835 -#, fuzzy -msgid "Clapping" -msgstr "ėŒ€ķ™”" - -#: emoticontheme.cpp:836 -msgid "Crossed fingers" -msgstr "" - -#: emoticontheme.cpp:837 -msgid "Auto" -msgstr "" - -#: emoticontheme.cpp:838 -msgid "Airplane" -msgstr "" - #: emoticontheme.cpp:839 -msgid "Turtle" +msgid "Dog face" msgstr "" #: emoticontheme.cpp:840 #, fuzzy -msgid "Snail" -msgstr "ķŽøģ§€ 볓낓기(&S)" +msgid "Sun" +msgstr "ģ†Œė¦¬ķŒŒģ¼:" #: emoticontheme.cpp:841 -msgid "Black sheep" +msgid "Devil" msgstr "" #: emoticontheme.cpp:842 -msgid "Goat" +msgid "Right hug" msgstr "" #: emoticontheme.cpp:843 -msgid "Vampire bat" +msgid "Girl" msgstr "" #: emoticontheme.cpp:844 -msgid "Pizza" +msgid "Broken heart" msgstr "" #: emoticontheme.cpp:845 -msgid "Beer mug" +msgid "Wilted rose" msgstr "" #: emoticontheme.cpp:846 -msgid "Martini glass" +msgid "Thumbs down" msgstr "" #: emoticontheme.cpp:847 -msgid "Coffee cup" +msgid "Cat face" msgstr "" #: emoticontheme.cpp:848 -msgid "Birthday cake" +msgid "Sleeping half-moon" msgstr "" #: emoticontheme.cpp:849 -msgid "Plate" +msgid "Red lips" msgstr "" #: emoticontheme.cpp:850 +#, fuzzy +msgid "Clapping" +msgstr "ėŒ€ķ™”" + +#: emoticontheme.cpp:851 +msgid "Crossed fingers" +msgstr "" + +#: emoticontheme.cpp:852 +msgid "Auto" +msgstr "" + +#: emoticontheme.cpp:853 +msgid "Airplane" +msgstr "" + +#: emoticontheme.cpp:854 +msgid "Turtle" +msgstr "" + +#: emoticontheme.cpp:855 +#, fuzzy +msgid "Snail" +msgstr "ķŽøģ§€ 볓낓기(&S)" + +#: emoticontheme.cpp:856 +msgid "Black sheep" +msgstr "" + +#: emoticontheme.cpp:857 +msgid "Goat" +msgstr "" + +#: emoticontheme.cpp:858 +msgid "Vampire bat" +msgstr "" + +#: emoticontheme.cpp:859 +msgid "Pizza" +msgstr "" + +#: emoticontheme.cpp:860 +msgid "Beer mug" +msgstr "" + +#: emoticontheme.cpp:861 +msgid "Martini glass" +msgstr "" + +#: emoticontheme.cpp:862 +msgid "Coffee cup" +msgstr "" + +#: emoticontheme.cpp:863 +msgid "Birthday cake" +msgstr "" + +#: emoticontheme.cpp:864 +msgid "Plate" +msgstr "" + +#: emoticontheme.cpp:865 msgid "Bowl" msgstr "" -#: emoticontheme.cpp:851 +#: emoticontheme.cpp:866 #, fuzzy msgid "Star" msgstr "ė™ģŖ½ķ•˜ėŠ˜" -#: emoticontheme.cpp:852 +#: emoticontheme.cpp:867 msgid "Rainbow" msgstr "" -#: emoticontheme.cpp:853 +#: emoticontheme.cpp:868 msgid "Stormy cloud" msgstr "" -#: emoticontheme.cpp:854 +#: emoticontheme.cpp:869 msgid "Lightning" msgstr "" -#: emoticontheme.cpp:855 +#: emoticontheme.cpp:870 msgid "Umbrella" msgstr "" -#: emoticontheme.cpp:856 +#: emoticontheme.cpp:871 msgid "Island with a palm tree" msgstr "" -#: emoticontheme.cpp:857 +#: emoticontheme.cpp:872 msgid "Telephone receiver" msgstr "" -#: emoticontheme.cpp:858 +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "ģ“ė©”ģ¼" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 #, fuzzy msgid "Clock" msgstr "(차단됨)" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 #, fuzzy msgid "Camera" msgstr "ėŒ€ķ™”ėŖ…" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 #, fuzzy msgid "Money" msgstr "ģ›” 별" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 #, fuzzy msgid "KMess Icon" msgstr "KMess" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "ģ„œė²„ė”œė¶€ķ„° ģ—°ź²°ģ“ ėŠģ–“ģ”ŒģŠµė‹ˆė‹¤." + +#: initialview.cpp:377 +msgid "Connect" +msgstr "ė”œź·øģø" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "ė”œź·øģ•„ģ›ƒ(&D)" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "" -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "" -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "그룹 추가(&G)" + +#: kmess.cpp:226 #, fuzzy msgid "Add a group" msgstr "그룹 추가(&A)" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "새 ź·øė£¹ģ˜ ģ“ė¦„ ģž…ė „:" -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "" - -#: kmess.cpp:638 +#: kmess.cpp:569 #, fuzzy msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" msgstr "ģ“ ź·øė£¹ģ„ ģ •ė§ė”œ ģ‚­ģ œķ•˜ģ‹œź² ģŠµė‹ˆź¹Œ?" -#: kmess.cpp:640 +#: kmess.cpp:571 #, fuzzy msgid "Remove contact" msgstr "ėŒ€ķ™” ģƒėŒ€ ģ‚­ģ œ(&R)" -#: kmess.cpp:641 kmess.cpp:684 -#, fuzzy -msgid "Remove" -msgstr "ģ‚­ģ œėœ ėŒ€ķ™” ģƒėŒ€" - -#: kmess.cpp:642 +#: kmess.cpp:573 #, fuzzy msgid "Remove and block" msgstr "ģ‚­ģ œėœ ėŒ€ķ™” ģƒėŒ€" -#: kmess.cpp:681 -#, fuzzy +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "ģ“ ź·øė£¹ģ„ ģ •ė§ė”œ ģ‚­ģ œķ•˜ģ‹œź² ģŠµė‹ˆź¹Œ?" -#: kmess.cpp:683 +#: kmess.cpp:631 #, fuzzy -msgid "Remove group" -msgstr "그룹 ģ‚­ģ œ(&M)" +msgctxt "dialog button" +msgid "Remove" +msgstr "ģ‚­ģ œėœ ėŒ€ķ™” ģƒėŒ€" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "ģ“ ź·øė£¹ģ€ źø°ė³ø ź·øė£¹ģ“ėÆ€ė”œ ģˆ˜ģ •ķ•  수 ģ—†ģŠµė‹ˆė‹¤." -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 #, fuzzy msgid "Rename group" msgstr "그룹 ģ“ė¦„ 바꾸기(&N)" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "ė”œź·øģøė˜ģ–“ ģžˆģŒ" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "ģøģ¦ģ„ ģ‹¤ķŒØķ–ˆģŠµė‹ˆė‹¤" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "ė”œź·øģøė˜ģ–“ ģžˆģ§€ ģ•ŠģŒ" -#: kmess.cpp:1441 +#: kmess.cpp:1408 msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" -#: kmess.cpp:1445 +#: kmess.cpp:1412 #, fuzzy msgid "Error with notifications" msgstr "ģ“ė©”ģ¼ ģ•Œė¦¼" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "KMess" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "ė™ģž‘(&A)" @@ -1880,951 +2493,863 @@ msgstr "ėŒ€ķ™” ģƒėŒ€ 찾기(&E)" msgid "Search by &Interest" msgstr "ź“€ģ‹¬ė¶„ģ•¼ė”œ ź²€ģƒ‰(&I)" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "ėŒ€ķ™” ģƒėŒ€ 찾기(&E)" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "계정 추가(&A)" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "계정 설정(&S)" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "ė”œź·øģø(&N)" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "ė”œź·øģ•„ģ›ƒ(&D)" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "ė‚“ ķ”„ė”œķ•„ 볓기(&P)" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "ė‚“ 상태(&M)" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "ģžė¦¬ 비움 -ģžė™ģ‘ė‹µ" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "ķ—ˆģš©ėœ ėŒ€ķ™” ģƒėŒ€(&A)" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 msgid "Show &Offline Contacts" msgstr "ģ˜¤ķ”„ė¼ģø ėŒ€ķ™” ģƒėŒ€(&A)" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "ģ‚­ģ œėœ ėŒ€ķ™” ģƒėŒ€(&R)" -#: kmessinterface.cpp:303 +#: kmessinterface.cpp:318 #, fuzzy -msgid "Show &Display Pictures" +msgid "Show &Empty Groups" +msgstr "ģ“ėŖØķ‹°ģ½˜ ķ‘œģ‹œ(&E)" + +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" msgstr "ź·øė¦¼ķŒŒģ¼:" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "ģ“ė©”ģ¼" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "ėŒ€ķ™” ģƒėŒ€ ģ •ė ¬(&S)" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "그룹" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "ģ˜Øė¼ģø/ģ˜¤ķ”„ė¼ģø" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +#, fuzzy +msgid "[%1] %2 goes online" +msgstr "%1ė‹˜ģ“ ė”œź·øģ•„ģ›ƒķ–ˆģŠµė‹ˆė‹¤." + +#: kmessview.cpp:363 +#, fuzzy +msgid "[%1] %2 goes offline" +msgstr "%1ė‹˜ģ“ ė”œź·øģ•„ģ›ƒķ–ˆģŠµė‹ˆė‹¤." + +#: kmessview.cpp:559 #, fuzzy msgid "Cha&t" msgstr "ėŒ€ķ™”" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "ģ†ģ„±(&P)" -#: kmessview.cpp:492 +#: kmessview.cpp:569 #, fuzzy msgid "&Remove from group" msgstr "그룹 ģ‚­ģ œ(&M)" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +#, fuzzy +msgid "&Listening Music" +msgstr "ė³“ė‚“ėŠ” ķŒŒģ¼ %1" + +#: kmessview.cpp:601 #, fuzzy msgid "&Copy to Group" msgstr "그룹으딜 ģ“ė™(&M)" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "그룹으딜 ģ“ė™(&M)" -#: kmessview.cpp:549 +#: kmessview.cpp:646 msgid "Move Group &Down" msgstr "ź·øė£¹ģ„ ģ•„ėž˜ė”œ ģ“ė™(&D)" -#: kmessview.cpp:550 +#: kmessview.cpp:647 msgid "Move Group &Up" msgstr "ź·øė£¹ģ„ ģœ„ė”œ ģ“ė™(&U)" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "그룹 ģ‚­ģ œ(&M)" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "그룹 ģ“ė¦„ 바꾸기(&N)" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 #, fuzzy msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "ģ“ė©”ģ¼" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "" -#: kmessview.cpp:918 +#: kmessview.cpp:1075 +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "" + +#: kmessview.cpp:1076 +#, fuzzy +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "ė‚“ ė©”ģ‹œģ§€ģ˜ 글꼓:" + +#: kmessview.cpp:1085 msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "" -#: kmessview.cpp:921 +#: kmessview.cpp:1090 #, fuzzy -msgctxt "Contacts count in group tooltip" +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "ėŒ€ķ™” ģƒėŒ€ 추가(&A)" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +#, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "ėŒ€ķ™” ģƒėŒ€ 추가(&A)" + +#: kmessview.cpp:1504 msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "" -#: kmessview.cpp:1543 -#, fuzzy -msgid "You have 1 new e-mail in your inbox." -msgstr "ź°œģ˜ 새딜욓 ķŽøģ§€ź°€ ģžˆģŠµė‹ˆė‹¤." +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" -#: kmessview.cpp:1547 -#, fuzzy -msgid "You have %1 new emails in your inbox." -msgstr "ź°œģ˜ 새딜욓 ķŽøģ§€ź°€ ģžˆģŠµė‹ˆė‹¤." - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "KMess" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 msgid "Project support" msgstr "" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 #, fuzzy msgid "Current developer" msgstr "ź·øė†ˆėÆøķŒ… ź°œė°œģž" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 #, fuzzy msgid "" "German translation, testing, documentation, web master, project management, " "etc..." msgstr "ė…ģ¼ģ–“ ė²ˆģ—­, ķ…ŒģŠ¤ķŠø, ė¬øģ„œķ™”, ģ›¹ė§ˆģŠ¤ķ„°, ķ”„ė”œģ ķŠø ꓀리 ė° ź·ø 외" -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "웹 ė””ģžģø" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "źø°ė³ø ģ“ėŖØķ‹°ģ½˜ź³¼ ė…øėž‘/ķŒŒėž‘/ė³“ė¼ ģ“ėŖØķ‹°ģ½˜ ģ„øķŠø ė° ģ“ķƒˆė¦¬ģ•„ģ–“ ė²ˆģ—­" -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "칓툰 ģ“ėŖØķ‹°ģ½˜" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "źø°ė³ø ķšØź³¼ģŒ" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "ģ•„ėžģ–“ ė²ˆģ—­, ķŒŒģ¼ ģ €ģž„ģ˜ źµ­ģ œķ™” 문제 고침" -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 #, fuzzy msgid "More Arabic translation" msgstr "터키얓 추가 ė²ˆģ—­" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "ėøŒė¼ģ§ˆģ–“ ķ¬ė„“ķˆ¬ź°ˆģ–“ ė²ˆģ—­" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 #, fuzzy msgid "Catalan translation" msgstr "ģ¹“ķƒˆė”œė‹ˆģ•„ģ–“ ė²ˆģ—­" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 #, fuzzy msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "중국얓 간첓 ė²ˆģ—­, ķŒŒģ¼ 전솔 버그 고침" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 #, fuzzy msgid "More Simplified Chinese translation" msgstr "중국얓 간첓 ė²ˆģ—­, ķŒŒģ¼ 전솔 버그 고침" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 #, fuzzy msgid "Traditional Chinese translation" msgstr "ģ¹“ķƒˆė”œė‹ˆģ•„ģ–“ ė²ˆģ—­" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 #, fuzzy msgid "Danish translation" msgstr "ė“ė§ˆķ¬ģ–“ ė²ˆģ—­" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 #, fuzzy msgid "More Danish translation" msgstr "ė“ė§ˆķ¬ģ–“ ė²ˆģ—­" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "ė„¤ėœėž€ė“œģ–“ ė²ˆģ—­" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 #, fuzzy msgid "More Dutch translation" msgstr "ė„¤ėœėž€ė“œģ–“ ė²ˆģ—­" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 #, fuzzy msgid "Estonian translation" msgstr "ģ—ģŠ¤ķ† ė‹ˆģ•„ģ–“ ė²ˆģ—­" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 #, fuzzy msgid "Finnish translation" msgstr "ė“ė§ˆķ¬ģ–“ ė²ˆģ—­" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 #, fuzzy msgid "More Finnish translation" msgstr "ė“ė§ˆķ¬ģ–“ ė²ˆģ—­" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "ķ”„ėž‘ģŠ¤ģ–“ ė²ˆģ—­" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 msgid "More French translation, MSN6 emoticon definitions" msgstr "ķ”„ėž‘ģŠ¤ģ–“ 추가 ė²ˆģ—­, MSN6 ģ“ėŖØķ‹°ģ½˜ ģ •ģ˜" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 #, fuzzy msgid "More French translation" msgstr "ķ”„ėž‘ģŠ¤ģ–“ ė²ˆģ—­" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 #, fuzzy msgid "Hungarian translation" msgstr "ģ—ģŠ¤ķ† ė‹ˆģ•„ģ–“ ė²ˆģ—­" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 #, fuzzy msgid "More Italian translation" msgstr "ķ•œźµ­ģ–“ ė²ˆģ—­" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "ķ•œźµ­ģ–“ ė²ˆģ—­" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 #, fuzzy msgid "Norsk BokmĆ„l translation" msgstr "북 ė…øė„“ģ›Øģ“ģ–“ ė²ˆģ—­" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 #, fuzzy msgid "Slovenian translation" msgstr "ķ•œźµ­ģ–“ ė²ˆģ—­" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "ģŠ¤ķŽ˜ģøģ–“ ė²ˆģ—­" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 #, fuzzy msgid "More Spanish translation" msgstr "ģŠ¤ķŽ˜ģøģ–“ 추가 ė²ˆģ—­" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 #, fuzzy msgid "Swedish translation" msgstr "ģŠ¤ķŽ˜ģøģ–“ ė²ˆģ—­" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 #, fuzzy msgid "Thai translation" msgstr "ķƒ€ģ“ģ–“ ė²ˆģ—­" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "터키얓 ė²ˆģ—­" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "터키얓 추가 ė²ˆģ—­" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -#, fuzzy -msgid "Guido Solinas" -msgstr "ģ˜Øė¼ģø" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "ķŒŒģ¼ ģ „ģ†”ģ„ ģ™„ė£Œķ–ˆģŠµė‹ˆė‹¤." + +#: main.cpp:134 msgid "P4-Context field support" msgstr "" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "Xinerama 고침" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "원본 ķŒŒģ¼ 전솔 ģ½”ė“œ" -#: main.cpp:120 -msgid "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" msgstr "" -#: main.cpp:120 +#: main.cpp:138 +msgid "KWallet support" +msgstr "" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "ģ—¬ėŸ¬ź°€ģ§€ źµ­ģ œķ™” 문제 고침" + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "ģ—¬ėŸ¬ź°€ģ§€ źµ­ģ œķ™” 문제 고침" -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "ź·øė†ˆėÆøķŒ… ź°œė°œģž" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "ė§Žģ€ ģ•„ģ“ė””ģ–“ 제공" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "착상 ė° ģ½”ė“œģ˜ 구성" -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 +#: main.cpp:150 #, fuzzy msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "ķŒģ—… ķ’ģ„  ģ½”ė“œ" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "ģžė¦¬ 비움 ķƒ€ģ“ėØø ģ½”ė“œ" -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 +#: main.cpp:152 msgid "Close-to-tray icon screenshot code" msgstr "" -#: main.cpp:131 +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 #, fuzzy msgid "Your name here?" msgstr "ėŒ€ķ™”ėŖ…" -#: main.cpp:131 +#: main.cpp:156 msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" -#: main.cpp:134 +#: main.cpp:159 #, fuzzy msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "ėŒ€ķ™”ėŖ…" -#: main.cpp:135 +#: main.cpp:160 #, fuzzy msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "ģ“ė©”ģ¼ ģ£¼ģ†Œ:" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "ģ“ ģ“ė©”ģ¼ ģ£¼ģ†Œė”œ ģžė™ ė”œź·øģø" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 #, fuzzy msgid "The contact cancelled the session." msgstr "ėŒ€ķ™” ģƒėŒ€ź°€ ģ“ˆėŒ€ė„¼ ģ·Øģ†Œķ–ˆģŠµė‹ˆė‹¤." -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 #, fuzzy msgid "The contact rejected the invitation." msgstr "ėŒ€ķ™” ģƒėŒ€ź°€ ģ“ˆėŒ€ė„¼ ź±°ģ ˆķ–ˆģŠµė‹ˆė‹¤." -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 #, fuzzy msgid "You have cancelled the session." msgstr "ģ“ˆėŒ€ė„¼ ģ·Øģ†Œķ•˜ģ˜€ģŠµė‹ˆė‹¤." -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "ģ“ˆėŒ€ė„¼ ź±°ģ ˆķ•˜ģ˜€ģŠµė‹ˆė‹¤." -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +#, fuzzy +msgid "Do you want to accept or cancel?" msgstr "ģˆ˜ė½ķ•˜ź±°ė‚˜ ģ·Øģ†Œķ•  수 ģžˆģŠµė‹ˆė‹¤." -#: network/applications/application.cpp:535 +#: network/applications/application.cpp:581 #, fuzzy -msgid "Click to cancel." +msgid "Click to cancel." msgstr "ķ“ė¦­ķ•˜ģ—¬ ģ·Øģ†Œķ•  수 ģžˆģŠµė‹ˆė‹¤." -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 #, fuzzy msgid "Do you want to accept the file: %1 (%2)" msgstr "ģ“ ķŒŒģ¼ģ„ ģˆ˜ė½ķ•˜ģ‹œź² ģŠµė‹ˆź¹Œ?: %1 (%2 bytes)" -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 #, fuzzy msgid "The transfer of %1 failed. Couldn't open file." msgstr "ģ‹¤ķŒØ. ķŒŒģ¼ģ„ ģ—“ 수 ģ—†ģŠµė‹ˆė‹¤" -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "ģ „ģ†”ģ„ ģˆ˜ė½ķ–ˆģŠµė‹ˆė‹¤." + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 #, fuzzy msgid "Connecting to %1, port %2" msgstr "ģ—°ź²° ģ‹œź°„ 쓈과" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 #, fuzzy msgid "The transfer was cancelled" msgstr "ģ „ģ†”ģ„ ģˆ˜ė½ķ–ˆģŠµė‹ˆė‹¤." -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 #, fuzzy msgid "Connection established" msgstr "ģ—°ź²° ģ‹œź°„ 쓈과" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 msgid "Successfully transferred file: %1" msgstr "ģ„±ź³µģ ģœ¼ė”œ ģ „ģ†”ėœ ķŒŒģ¼: %1" -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 #, fuzzy msgid "The transfer of %1 failed. The file does not exist." msgstr "ģ‹¤ķŒØ. ķŒŒģ¼ģ“ ģ”“ģž¬ķ•˜ģ§€ ģ•ŠģŠµė‹ˆė‹¤" -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 #, fuzzy msgid "The transfer of %1 failed. The file could not be read." msgstr "ģ‹¤ķŒØ. ģ—°ź²°ķ•  수 ģ—†ģŠµė‹ˆė‹¤" -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 msgid "Sending file %1" msgstr "ė³“ė‚“ėŠ” ķŒŒģ¼ %1" -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "ģ „ģ†”ģ„ ģˆ˜ė½ķ–ˆģŠµė‹ˆė‹¤." - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 #, fuzzy msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "ėŒ€ķ™” ģƒėŒ€ź°€ ģ“ˆėŒ€ė„¼ ģ·Øģ†Œķ–ˆģŠµė‹ˆė‹¤." -#: network/applications/filetransferp2p.cpp:345 +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." +msgstr "" + +#: network/applications/filetransferp2p.cpp:348 +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "" + +#: network/applications/filetransferp2p.cpp:378 #, fuzzy -msgid "The transfer of %1 failed. Couldn't open file" +msgid "The transfer of file "%1" failed. Couldn't save the file." msgstr "ģ‹¤ķŒØ. ķŒŒģ¼ģ„ ģ—“ 수 ģ—†ģŠµė‹ˆė‹¤" -#: network/applications/filetransferp2p.cpp:524 +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 #, fuzzy -msgid "The contact cancelled the transfer." +msgid "The contact has cancelled the transfer of file "%1"." msgstr "ėŒ€ķ™” ģƒėŒ€ź°€ ģ“ˆėŒ€ė„¼ ģ·Øģ†Œķ–ˆģŠµė‹ˆė‹¤." -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "ģ“ˆėŒ€ė„¼ ģ·Øģ†Œķ•˜ģ˜€ģŠµė‹ˆė‹¤." + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "" -#: network/applications/filetransferp2p.cpp:768 +#: network/applications/filetransferp2p.cpp:676 #, fuzzy -msgid "The transfer of %1 failed. The file does not exist." +msgid "Successfully sent file "%1"." +msgstr "ģ„±ź³µģ ģœ¼ė”œ ģ „ģ†”ėœ ķŒŒģ¼: %1" + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "ģ„±ź³µģ ģœ¼ė”œ ģ „ģ†”ėœ ķŒŒģ¼: %1" + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "ģ‹¤ķŒØ. ķŒŒģ¼ģ“ ģ”“ģž¬ķ•˜ģ§€ ģ•ŠģŠµė‹ˆė‹¤" -#: network/applications/filetransferp2p.cpp:773 +#: network/applications/filetransferp2p.cpp:818 #, fuzzy -msgid "The transfer of %1 failed. The file could not be read." +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "ģ‹¤ķŒØ. ģ—°ź²°ķ•  수 ģ—†ģŠµė‹ˆė‹¤" -#: network/applications/filetransferp2p.cpp:809 +#: network/applications/filetransferp2p.cpp:855 #, fuzzy -msgid "Sending file %1 (%2)" +msgid "Sending file "%1" (%2)." msgstr "ė³“ė‚“ėŠ” ķŒŒģ¼ %1" -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "ėŒ€ķ™” ģƒėŒ€ź°€ ģ“ˆėŒ€ė„¼ ģ·Øģ†Œķ–ˆģŠµė‹ˆė‹¤." + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "ķ™”ģƒķšŒģ˜ģ— ģ“ˆėŒ€ė„¼ ė°›ģ•˜ģŠµė‹ˆė‹¤. (GnomeMeeting ģ‚¬ģš©)" -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 #, fuzzy msgid "Starting GnomeMeeting. Connecting to %1." msgstr "GnomeMeetingģ„ ģ‹œģž‘ķ•©ė‹ˆė‹¤. %1에 ģ—°ź²°ķ•˜ėŠ” 중..." -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "ėŒ€ķ™” ģƒėŒ€ė„¼ ķ™”ģƒķšŒģ˜ģ— ģ“ˆėŒ€ķ•©ė‹ˆė‹¤." -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "" -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 #, fuzzy msgid "The invitation was aborted. An internal error occured." msgstr "ėŒ€ķ™” ģƒėŒ€ź°€ ģ“ˆėŒ€ė„¼ ź±°ģ ˆķ–ˆģŠµė‹ˆė‹¤." -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 #, fuzzy msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "ģ‹¤ķŒØ. ģ†Œģ¼“ģ„ ģƒģ„±ķ•  수 ģ—†ģŠµė‹ˆė‹¤" -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 #, fuzzy msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "ėŒ€ķ™” ģƒėŒ€ź°€ ģ“ˆėŒ€ė„¼ ģ·Øģ†Œķ–ˆģŠµė‹ˆė‹¤." -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "" -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 #, fuzzy msgid "The invitation was aborted." msgstr "ėŒ€ķ™” ģƒėŒ€ź°€ ģ“ˆėŒ€ė„¼ ģ·Øģ†Œķ–ˆģŠµė‹ˆė‹¤." -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "ģ“ ėŒ€ķ™” ģƒėŒ€ģ˜ ė°ģŠ¤ķ¬ķƒ‘ģ„ ź³µģœ ķ•˜ė„ė” ģ“ˆėŒ€ė°›ģ•˜ģŠµė‹ˆė‹¤." -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 #, fuzzy msgid "Starting KRDC. Connecting to %1." msgstr "KRDC넼 ģ‹œģž‘ķ•©ė‹ˆė‹¤. %1에 ģ—°ź²°ķ•˜ėŠ” 중... " -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." -msgstr "" +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +#, fuzzy +msgid "The contact rejected the invitation. An internal error occured." +msgstr "ėŒ€ķ™” ģƒėŒ€ź°€ ģ“ˆėŒ€ė„¼ ź±°ģ ˆķ–ˆģŠµė‹ˆė‹¤." -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +#, fuzzy +msgid "The transfer failed." +msgstr "%1 ķŒŒģ¼ģ˜ 전솔 " + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." msgstr "" -#: network/applications/p2papplication.cpp:1503 -#, fuzzy -msgid "The transfer failed. Data preparation failed." -msgstr "ėŒ€ķ™” ģƒėŒ€ź°€ ģ“ˆėŒ€ė„¼ ģ·Øģ†Œķ–ˆģŠµė‹ˆė‹¤." - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -#, fuzzy -msgid "The contact rejected the invitation. An internal error occured." -msgstr "ėŒ€ķ™” ģƒėŒ€ź°€ ģ“ˆėŒ€ė„¼ ź±°ģ ˆķ–ˆģŠµė‹ˆė‹¤." - -#: network/applications/p2papplication.cpp:1626 -#, fuzzy -msgid "The transfer failed." -msgstr "%1 ķŒŒģ¼ģ˜ 전솔 " - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 #, fuzzy msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "ģ‹¤ķŒØ. ķŒŒģ¼ģ“ ģ”“ģž¬ķ•˜ģ§€ ģ•ŠģŠµė‹ˆė‹¤" -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +#, fuzzy +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "ģ‹¤ķŒØ. ģ†Œģ¼“ģ„ ģƒģ„±ķ•  수 ģ—†ģŠµė‹ˆė‹¤" + +#: network/applications/p2papplicationbase.cpp:1015 +#, fuzzy +msgid "The transfer failed. An internal error occured." +msgstr "ėŒ€ķ™” ģƒėŒ€ź°€ ģ“ˆėŒ€ė„¼ ź±°ģ ˆķ–ˆģŠµė‹ˆė‹¤." + +#: network/applications/p2papplicationbase.cpp:1176 +#, fuzzy +msgid "The transfer failed. Couldn't open data source." +msgstr "ģ‹¤ķŒØ. ģ†Œģ¼“ģ„ ģƒģ„±ķ•  수 ģ—†ģŠµė‹ˆė‹¤" + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "" + +#: network/applications/p2papplication.cpp:1071 +#, fuzzy +msgid "The transfer failed. Data preparation failed." +msgstr "ėŒ€ķ™” ģƒėŒ€ź°€ ģ“ˆėŒ€ė„¼ ģ·Øģ†Œķ–ˆģŠµė‹ˆė‹¤." + +#: network/applications/p2papplication.cpp:1178 #, fuzzy msgid "The invitation was cancelled. Message was not directed to us." msgstr "ėŒ€ķ™” ģƒėŒ€ź°€ ģ“ˆėŒ€ė„¼ ģ·Øģ†Œķ–ˆģŠµė‹ˆė‹¤." -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 #, fuzzy msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "ģ‹¤ķŒØ. ķŒŒģ¼ģ“ ģ”“ģž¬ķ•˜ģ§€ ģ•ŠģŠµė‹ˆė‹¤" -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "" -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "" -#: network/applications/p2papplication.cpp:3297 -#, fuzzy -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "ģ‹¤ķŒØ. ģ†Œģ¼“ģ„ ģƒģ„±ķ•  수 ģ—†ģŠµė‹ˆė‹¤" - -#: network/applications/p2papplication.cpp:3316 -#, fuzzy -msgid "The transfer failed. An internal error occured." -msgstr "ėŒ€ķ™” ģƒėŒ€ź°€ ģ“ˆėŒ€ė„¼ ź±°ģ ˆķ–ˆģŠµė‹ˆė‹¤." - -#: network/applications/p2papplication.cpp:3693 -#, fuzzy -msgid "The transfer failed. Couldn't open data source." -msgstr "ģ‹¤ķŒØ. ģ†Œģ¼“ģ„ ģƒģ„±ķ•  수 ģ—†ģŠµė‹ˆė‹¤" - -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:3113 msgid "Waiting for connection" msgstr "" -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 #, fuzzy msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " "accept." msgstr "ģ‹¤ķŒØ. ģ†Œģ¼“ģ„ ģƒģ„±ķ•  수 ģ—†ģŠµė‹ˆė‹¤" -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 #, fuzzy msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." msgstr "ģ‹¤ķŒØ. ģ†Œģ¼“ģ„ ģƒģ„±ķ•  수 ģ—†ģŠµė‹ˆė‹¤" -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "" -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 #, fuzzy msgid "You are invited to start a voice conversation." msgstr "ģ“ ėŒ€ķ™” ģƒėŒ€ģ˜ ė°ģŠ¤ķ¬ķƒ‘ģ„ ź³µģœ ķ•˜ė„ė” ģ“ˆėŒ€ė°›ģ•˜ģŠµė‹ˆė‹¤." -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 #, fuzzy msgid "" "You are invited to start a voice conversation but support for this was not " "installed" msgstr "ķ™”ģƒķšŒģ˜ģ— ģ“ˆėŒ€ė„¼ ė°›ģ•˜ģŠµė‹ˆė‹¤. (GnomeMeeting ģ‚¬ģš©)" -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 #, fuzzy msgid "You have cancelled the voice conversation." msgstr "ģ“ˆėŒ€ė„¼ ģ·Øģ†Œķ•˜ģ˜€ģŠµė‹ˆė‹¤." -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 #, fuzzy msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "ėŒ€ķ™” ģƒėŒ€ź°€ ģ“ˆėŒ€ė„¼ ģ·Øģ†Œķ–ˆģŠµė‹ˆė‹¤." -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 #, fuzzy msgid "Start voice conversation. Connecting to %1." msgstr "GnomeMeetingģ„ ģ‹œģž‘ķ•©ė‹ˆė‹¤. %1에 ģ—°ź²°ķ•˜ėŠ” 중..." -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 #, fuzzy msgid "Start voice conversation. Listening on %1." msgstr "GnomeMeetingģ„ ģ‹œģž‘ķ•©ė‹ˆė‹¤. %1에 ģ—°ź²°ķ•˜ėŠ” 중..." -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 #, fuzzy msgid "Inviting the contact to a voice conversation." msgstr "ėŒ€ķ™” ģƒėŒ€ė„¼ ķ™”ģƒķšŒģ˜ģ— ģ“ˆėŒ€ķ•©ė‹ˆė‹¤." -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 #, fuzzy msgid "The contact is inviting you for '%1', but this is not implemented yet." @@ -2873,658 +3398,866 @@ msgstr "" msgid "Receiving file %1" msgstr "ė°›ėŠ” ķŒŒģ¼ " -#: network/msnconnection.cpp:477 -#, fuzzy -msgid "1 ping lost" -msgstr "ź°œģ˜ ķ•‘ģ“ 손실됨" - -#: network/msnconnection.cpp:481 -#, fuzzy -msgid "%1 pings lost" -msgstr "ź°œģ˜ ķ•‘ģ“ 손실됨" - -#: network/msnconnection.cpp:496 -#, fuzzy -msgid "The connection to the server was lost." -msgstr "ģ„œė²„ė”œė¶€ķ„° ģ—°ź²°ģ“ ėŠģ–“ģ”ŒģŠµė‹ˆė‹¤." - -#: network/msnconnection.cpp:704 -msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." +#: network/msnconnection.cpp:589 +msgid "KMess could not access the remote webservice.
Details: %1" msgstr "" -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "" - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" - -#: network/msnnotificationconnection.cpp:724 -#, fuzzy -msgid "Show MSN Messenger Service status?" -msgstr ".NET ģ„œė¹„ģŠ¤ 상태넼 ė³“ģ‹œź² ģŠµė‹ˆź¹Œ?" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "ģ„œė²„ ģ—ėŸ¬" - -#: network/msnnotificationconnection.cpp:1344 +#: network/msnnotificationconnection.cpp:1317 #, fuzzy msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" msgstr "" "다넸 MSN 메신저 ķ“ė¼ģ“ģ–øķŠøė‚˜ 다넸 ź³³ģ—ģ„œ \n" "ė”œź·øģøķ–ˆģœ¼ėÆ€ė”œ ģ ‘ģ†ģ“ ėŠģ–“ģ”ŒģŠµė‹ˆė‹¤." -#: network/msnnotificationconnection.cpp:1558 +#: network/msnnotificationconnection.cpp:1532 msgid "Got synchronization" msgstr "ė™źø°ķ™” ģ™„ė£Œ" -#: network/msnnotificationconnection.cpp:1699 -msgid "Authenticating" +#: network/msnnotificationconnection.cpp:1670 +#, fuzzy +msgid "Authenticating..." msgstr "ģøģ¦ ģ²˜ė¦¬ģ¤‘" -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "ģ‚¬ģš©ģž ķ™•ģø ė°›ģŒ" - -#: network/msnnotificationconnection.cpp:1752 +#: network/msnnotificationconnection.cpp:1719 msgid "Waiting for contact list..." msgstr "" -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "ģ•Œė¦¼ ģ„œė²„ė”œ ė³“ėƒ„" - -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." msgstr "" -#: network/msnnotificationconnection.cpp:2042 +#: network/msnnotificationconnection.cpp:1894 +msgid "Authentication failed, please verify your account name and password." +msgstr "" + +#: network/msnnotificationconnection.cpp:1993 msgid "Connecting..." msgstr "ģ—°ź²°ķ•˜ėŠ” 중..." -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" +#: network/msnnotificationconnection.cpp:2167 +msgid "Unknown command received from the server: %1" msgstr "" -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 +#: network/msnnotificationconnection.cpp:2192 msgid "Invalid command syntax" msgstr "" -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -#, fuzzy -msgid "There was an internal error in KMess: %1" -msgstr "ė‚“ė¶€ģ ģø ģ„œė²„ ģ—ėŸ¬ź°€ ė°œģƒķ–ˆģŠµė‹ˆė‹¤" - -#: network/msnnotificationconnection.cpp:2243 +#: network/msnnotificationconnection.cpp:2196 msgid "Invalid command parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2246 +#: network/msnnotificationconnection.cpp:2199 msgid "The email you have tried to add is not a MSN Messenger account" msgstr "" -#: network/msnnotificationconnection.cpp:2249 +#: network/msnnotificationconnection.cpp:2204 msgid "Domain name missing" msgstr "" -#: network/msnnotificationconnection.cpp:2252 +#: network/msnnotificationconnection.cpp:2208 msgid "Already logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2255 +#: network/msnnotificationconnection.cpp:2211 #, fuzzy msgid "The account name given is invalid" msgstr "ģ‚¬ģš©ģžėŖ…ģ„ ģž˜ėŖ» ģž…ė „ķ•˜ģ˜€ģŠµė‹ˆė‹¤" -#: network/msnnotificationconnection.cpp:2258 +#: network/msnnotificationconnection.cpp:2215 msgid "" "That account name is invalid, or your passport has not been confirmed yet" msgstr "" -#: network/msnnotificationconnection.cpp:2261 +#: network/msnnotificationconnection.cpp:2218 msgid "Your contact list is full" msgstr "ėŒ€ķ™” ģƒėŒ€ ėŖ©ė”ģ“ 꽉 ģ°¼ģŠµė‹ˆė‹¤" -#: network/msnnotificationconnection.cpp:2264 +#: network/msnnotificationconnection.cpp:2223 msgid "Invalid SBP parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2267 +#: network/msnnotificationconnection.cpp:2226 #, fuzzy msgid "This contact is already on your list" msgstr "ģ“ ėŒ€ķ™” ģƒėŒ€ė„¼ ė‚“ \"친구\" ėŖ©ė”ģ— ģ¶”ź°€ķ•©ė‹ˆė‹¤." -#: network/msnnotificationconnection.cpp:2270 +#: network/msnnotificationconnection.cpp:2230 #, fuzzy msgid "This contact is not on your list" msgstr "ģ“ ėŒ€ķ™” ģƒėŒ€ė„¼ ė‚“ \"친구\" ėŖ©ė”ģ— ģ¶”ź°€ķ•©ė‹ˆė‹¤." -#: network/msnnotificationconnection.cpp:2273 +#: network/msnnotificationconnection.cpp:2234 msgid "This contact is not online" msgstr "" -#: network/msnnotificationconnection.cpp:2276 +#: network/msnnotificationconnection.cpp:2239 msgid "Already in this mode" msgstr "" -#: network/msnnotificationconnection.cpp:2279 +#: network/msnnotificationconnection.cpp:2243 #, fuzzy msgid "Contact is in the opposite list" msgstr "ģ“ ėŒ€ķ™” ģƒėŒ€ė„¼ ė‚“ \"친구\" ėŖ©ė”ģ— ģ¶”ź°€ķ•©ė‹ˆė‹¤." -#: network/msnnotificationconnection.cpp:2282 +#: network/msnnotificationconnection.cpp:2247 +msgid "" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." +msgstr "" + +#: network/msnnotificationconnection.cpp:2251 #, fuzzy msgid "Your contact list has too many groups" msgstr "ėŒ€ķ™” ģƒėŒ€ ėŖ©ė”ģ“ 꽉 ģ°¼ģŠµė‹ˆė‹¤" -#: network/msnnotificationconnection.cpp:2285 +#: network/msnnotificationconnection.cpp:2255 #, fuzzy msgid "This group can't be changed" msgstr "ģ“ ź·øė£¹ģ€ źø°ė³ø ź·øė£¹ģ“ėÆ€ė”œ ģˆ˜ģ •ķ•  수 ģ—†ģŠµė‹ˆė‹¤." -#: network/msnnotificationconnection.cpp:2288 +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "ėŒ€ķ™” ģƒėŒ€ ėŖ©ė”ģ“ 꽉 ģ°¼ģŠµė‹ˆė‹¤" + +#: network/msnnotificationconnection.cpp:2264 msgid "This group is not empty" msgstr "" -#: network/msnnotificationconnection.cpp:2291 -msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" -msgstr "" - -#: network/msnnotificationconnection.cpp:2294 +#: network/msnnotificationconnection.cpp:2268 msgid "The group name is too long" msgstr "" -#: network/msnnotificationconnection.cpp:2297 +#: network/msnnotificationconnection.cpp:2273 msgid "Attempted to change group \"0\"" msgstr "" -#: network/msnnotificationconnection.cpp:2300 +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +#, fuzzy +msgid "There was an internal error in KMess: %1" +msgstr "ė‚“ė¶€ģ ģø ģ„œė²„ ģ—ėŸ¬ź°€ ė°œģƒķ–ˆģŠµė‹ˆė‹¤" + +#: network/msnnotificationconnection.cpp:2277 #, fuzzy msgid "Invalid Group" msgstr "그룹 ģ“ė¦„ 바꾸기(&N)" -#: network/msnnotificationconnection.cpp:2303 +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 msgid "Switchboard server failed" msgstr "" -#: network/msnnotificationconnection.cpp:2306 +#: network/msnnotificationconnection.cpp:2287 #, fuzzy msgid "Transfer to switchboard server failed" msgstr "ģ•Œė¦¼ ģ„œė²„ė”œ ė³“ėƒ„" -#: network/msnnotificationconnection.cpp:2309 +#: network/msnnotificationconnection.cpp:2291 msgid "Direct connection (MSNSLP) error, connection failed" msgstr "" -#: network/msnnotificationconnection.cpp:2312 +#: network/msnnotificationconnection.cpp:2295 msgid "Required field missing" msgstr "" -#: network/msnnotificationconnection.cpp:2315 +#: network/msnnotificationconnection.cpp:2299 msgid "Not logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" +#: network/msnnotificationconnection.cpp:2302 +msgid "No permissions given for this account" msgstr "" -#: network/msnnotificationconnection.cpp:2322 +#: network/msnnotificationconnection.cpp:2307 msgid "Command is disabled" msgstr "" -#: network/msnnotificationconnection.cpp:2325 +#: network/msnnotificationconnection.cpp:2310 msgid "Your account is banned." msgstr "" -#: network/msnnotificationconnection.cpp:2329 +#: network/msnnotificationconnection.cpp:2314 #, fuzzy msgid "Challenge response failed" msgstr "%1 ķŒŒģ¼ģ˜ 전솔 " -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" +#: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" msgstr "" -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" +#: network/msnnotificationconnection.cpp:2323 +msgid "You are opening chat sessions too fast" msgstr "" -#: network/msnnotificationconnection.cpp:2341 +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" +msgstr "ģ“ˆėŒ€ė„¼ ģ·Øģ†Œķ•˜ģ˜€ģŠµė‹ˆė‹¤." + +#: network/msnnotificationconnection.cpp:2334 msgid "Unexpected command sequence" msgstr "" -#: network/msnnotificationconnection.cpp:2344 +#: network/msnnotificationconnection.cpp:2338 #, fuzzy msgid "Bad friend name" msgstr "ėŒ€ķ™”ėŖ…:" -#: network/msnnotificationconnection.cpp:2348 +#: network/msnnotificationconnection.cpp:2344 msgid "Bad CVR data" msgstr "" -#: network/msnnotificationconnection.cpp:2353 +#: network/msnnotificationconnection.cpp:2350 msgid "The server reports KMess is flooding it with too many data" msgstr "" -#: network/msnnotificationconnection.cpp:2358 +#: network/msnnotificationconnection.cpp:2357 #, fuzzy msgid "Authentication ticket was incorrect" msgstr "ģøģ¦ģ„ ģ‹¤ķŒØķ–ˆģŠµė‹ˆė‹¤" -#: network/msnnotificationconnection.cpp:2362 +#: network/msnnotificationconnection.cpp:2360 msgid "You can't start a chat with someone while you are invisible." msgstr "'ģ˜¤ķ”„ė¼ģøģœ¼ė”œ ķ‘œģ‹œ' ģƒķƒœģ—ģ„œėŠ” 다넸 ģ‚¬ėžŒź³¼ ėŒ€ķ™”ķ•  수 ģ—†ģŠµė‹ˆė‹¤." -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." +#: network/msnnotificationconnection.cpp:2364 +msgid "Not accepting new contacts" msgstr "" -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." +#: network/msnnotificationconnection.cpp:2368 +msgid "" +"You have a kids passport account, you need parental consent to chat online." msgstr "" -#: network/msnnotificationconnection.cpp:2373 +#: network/msnnotificationconnection.cpp:2371 +msgid "Your passport account needs to be verified first." +msgstr "" + +#: network/msnnotificationconnection.cpp:2375 msgid "Bad USR ticket" msgstr "" -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" msgstr "" -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" +#: network/msnnotificationconnection.cpp:2399 +#, fuzzy +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." msgstr "ė‚“ė¶€ģ ģø ģ„œė²„ ģ—ėŸ¬ź°€ ė°œģƒķ–ˆģŠµė‹ˆė‹¤" +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + #: network/msnnotificationconnection.cpp:2414 -#, fuzzy -msgid "The server is too busy" -msgstr "ģ„œė²„ź°€ ķ­ģ£¼ ģƒķƒœģž…ė‹ˆė‹¤" - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "ģ„œė²„ź°€ ģ‚¬ģš© ė¶ˆź°€ ģƒķƒœģž…ė‹ˆė‹¤" - -#: network/msnnotificationconnection.cpp:2422 msgid "Peer notification server down" msgstr "ėŒ€ķ™” ģƒėŒ€ ģ•Œė¦¼ ģ„œė²„ź°€ ė‹¤ģš“ė˜ģ—ˆģŠµė‹ˆė‹¤" -#: network/msnnotificationconnection.cpp:2426 +#: network/msnnotificationconnection.cpp:2418 #, fuzzy msgid "The server is going down" msgstr "ģ„œė²„ź°€ ź³§ ė‹¤ģš“ė©ė‹ˆė‹¤" -#: network/msnnotificationconnection.cpp:2429 +#: network/msnnotificationconnection.cpp:2422 msgid "The server is going down soon" msgstr "ģ„œė²„ź°€ ź³§ ė‹¤ģš“ė©ė‹ˆė‹¤" -#: network/msnnotificationconnection.cpp:2433 +#: network/msnnotificationconnection.cpp:2427 msgid "Write is blocking" msgstr "" -#: network/msnnotificationconnection.cpp:2436 +#: network/msnnotificationconnection.cpp:2431 msgid "Session is overloaded" msgstr "" -#: network/msnnotificationconnection.cpp:2441 +#: network/msnnotificationconnection.cpp:2438 #, fuzzy msgid "The server is not available" msgstr "ģ„œė²„ź°€ ģ‚¬ģš© ė¶ˆź°€ ģƒķƒœģž…ė‹ˆė‹¤" -#: network/msnnotificationconnection.cpp:2444 +#: network/msnnotificationconnection.cpp:2442 msgid "Authentication failed" msgstr "ģøģ¦ģ„ ģ‹¤ķŒØķ–ˆģŠµė‹ˆė‹¤" -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" +#: network/msnnotificationconnection.cpp:2449 +msgid "Unknown error code received from the server: %1" msgstr "" -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +msgctxt "Error dialog box title" +msgid "MSN error" msgstr "" -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "" +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "ė¶„" +msgstr[1] "ė¶„" #: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." +msgid "Server closes for maintenance in %1!" msgstr "" #: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." msgstr "" -#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:2901 msgid "Lost reference to SOAP client" msgstr "" -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +msgid "KMess could not process Offline-IM messages.
Details: %1" msgstr "" -#: network/msnnotificationconnection.cpp:3209 +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "ģøģ¦ģ„ ģ‹¤ķŒØķ–ˆģŠµė‹ˆė‹¤" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "ė‚“ė¶€ģ ģø ģ„œė²„ ģ—ėŸ¬ź°€ ė°œģƒķ–ˆģŠµė‹ˆė‹¤" + +#: network/msnnotificationconnection.cpp:3242 +msgctxt "Login error message, with more details for developer versions" msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" msgstr "" -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" msgstr "" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "ģ„œė²„ė”œė¶€ķ„° ģ—°ź²°ģ“ ėŠģ–“ģ”ŒģŠµė‹ˆė‹¤." + +#: network/msnnotificationconnection.cpp:3302 +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" +msgstr "" + +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "ģ„œė²„ ģ—ėŸ¬" + +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "ģ—°ź²° ģ‹œź°„ 쓈과" + +#: network/msnsockettcp.cpp:368 +#, fuzzy +msgid "1 ping lost" +msgstr "ź°œģ˜ ķ•‘ģ“ 손실됨" + +#: network/msnsockettcp.cpp:372 +#, fuzzy +msgid "%1 pings lost" +msgstr "ź°œģ˜ ķ•‘ģ“ 손실됨" + +#: network/msnsockettcp.cpp:387 +#, fuzzy +msgid "The connection to the server was lost." +msgstr "ģ„œė²„ė”œė¶€ķ„° ģ—°ź²°ģ“ ėŠģ–“ģ”ŒģŠµė‹ˆė‹¤." + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "ģ“ ėŒ€ķ™” ģƒėŒ€ėŠ” ģ˜¤ķ”„ė¼ģøģ“ź±°ė‚˜ ģ˜¤ķ”„ė¼ģøģœ¼ė”œ ķ‘œģ‹œ ģƒķƒœģž…ė‹ˆė‹¤." -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "" -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 #, fuzzy msgid "The message \"%1\" was not received!" msgstr "ė©”ģ‹œģ§€ \"%1\"ģ˜ ģ „ė‹¬ģ„ ģ‹¤ķŒØķ–ˆģŠµė‹ˆė‹¤." -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "" -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +msgid "In %1's chat: %2" msgstr "" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +msgid "%1 says:
'%2'" msgstr "" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" -msgstr "" - -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" -msgstr "" - -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" -msgstr "" - -#: notification/notificationchat.cpp:200 +#: notification/chatnotification.cpp:171 #, fuzzy -msgid "%1 has sent you a handwritten message!" +msgid "%1 has sent you an offline message:
'%2'" msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." -#: notification/notificationchat.cpp:204 -#, fuzzy -msgid "%1 has sent you a nudge!" -msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." - -#: notification/notificationchat.cpp:208 -#, fuzzy -msgid "%1 has sent you a wink!" -msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." - -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" +#: notification/chatnotification.cpp:178 +msgid "%1's chat requests attention!" msgstr "" -#: notification/notificationchat.cpp:215 +#: notification/chatnotification.cpp:183 +msgid "%1:
%2" +msgstr "" + +#: notification/chatnotification.cpp:190 #, fuzzy -msgid "%1 is sending you a file!" +msgid "%1 has sent you a handwritten message!" msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." -#: notification/notificationchat.cpp:216 +#: notification/chatnotification.cpp:194 #, fuzzy -msgid "%1 has sent you an invitation!" +msgid "%1 has sent you a nudge!" msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." -#: notification/notificationchat.cpp:223 +#: notification/chatnotification.cpp:198 #, fuzzy -msgid "%1 has canceled the webcam session!" +msgid "%1 has sent you a wink!" +msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." + +#: notification/chatnotification.cpp:204 +msgid "%1 wants to use the webcam!" +msgstr "" + +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" +msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." + +#: notification/chatnotification.cpp:206 +#, fuzzy +msgid "%1 has sent you an invitation!" +msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." + +#: notification/chatnotification.cpp:213 +#, fuzzy +msgid "%1 has canceled the webcam session!" msgstr "ģ“ˆėŒ€ė„¼ ģ·Øģ†Œķ•˜ģ˜€ģŠµė‹ˆė‹¤." -#: notification/notificationchat.cpp:224 +#: notification/chatnotification.cpp:214 #, fuzzy -msgid "%1 has canceled the file transfer!" +msgid "%1 has canceled the file transfer!" msgstr "ėŒ€ķ™” ģƒėŒ€ź°€ ģ“ˆėŒ€ė„¼ ģ·Øģ†Œķ–ˆģŠµė‹ˆė‹¤." -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +msgid "%1's activity has been canceled!" msgstr "" -#: notification/notificationchat.cpp:232 -msgid "%1 has accepted to use the webcam!" -msgstr "" - -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" -msgstr "" - -#: notification/notificationchat.cpp:234 -msgid "%1 has accepted your invitation!" -msgstr "" - -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" -msgstr "" - -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" -msgstr "" - -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" -msgstr "" - -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" -msgstr "" - -#: notification/notificationchat.cpp:251 +#: notification/chatnotification.cpp:222 #, fuzzy -msgid "The file transfer with %1 has failed!" +msgid "%1 has accepted to use the webcam!" +msgstr "ģ“ˆėŒ€ė„¼ ģ·Øģ†Œķ•˜ģ˜€ģŠµė‹ˆė‹¤." + +#: notification/chatnotification.cpp:223 +#, fuzzy +msgid "%1 has accepted the file transfer!" +msgstr "ėŒ€ķ™” ģƒėŒ€ź°€ ģ“ˆėŒ€ė„¼ ģ·Øģ†Œķ–ˆģŠµė‹ˆė‹¤." + +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" +msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." + +#: notification/chatnotification.cpp:231 +#, fuzzy +msgid "%1 has ended the webcam session!" +msgstr "ģ“ˆėŒ€ė„¼ ģ·Øģ†Œķ•˜ģ˜€ģŠµė‹ˆė‹¤." + +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "%1 ķŒŒģ¼ģ˜ 전솔 " -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:233 +msgid "%1's activity has ended!" msgstr "" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -#, fuzzy -msgid "%1 is now online" -msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." - -#: notification/notificationcontactstatus.cpp:76 -#, fuzzy -msgid "%1 has gone away" -msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." - -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/chatnotification.cpp:240 +msgid "%1's webcam session has failed!" msgstr "" -#: notification/notificationcontactstatus.cpp:78 +#: notification/chatnotification.cpp:241 #, fuzzy -msgid "%1 is now busy" -msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." +msgid "The file transfer with %1 has failed!" +msgstr "%1 ķŒŒģ¼ģ˜ 전솔 " -#: notification/notificationcontactstatus.cpp:79 -#, fuzzy -msgid "%1 has become invisible" -msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." - -#: notification/notificationcontactstatus.cpp:80 -#, fuzzy -msgid "%1 has gone idle" -msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." - -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/chatnotification.cpp:242 +msgid "%1's activity has ended with an error!" msgstr "" -#: notification/notificationcontactstatus.cpp:82 +#: notification/contactstatusnotification.cpp:70 #, fuzzy -msgid "%1 is on the phone" +msgid "%1 is now online" msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." -#: notification/notificationcontactstatus.cpp:83 +#: notification/contactstatusnotification.cpp:71 #, fuzzy -msgid "%1 is out for lunch" +msgid "%1 has gone away" msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/contactstatusnotification.cpp:72 +msgid "%1 will be right back" msgstr "" -#: settings/accountswidget.cpp:81 +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" +msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." + +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" +msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." + +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" +msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." + +#: notification/contactstatusnotification.cpp:76 +#, fuzzy +msgid "%1 has logged out" +msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." + +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" +msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." + +#: notification/contactstatusnotification.cpp:78 +#, fuzzy +msgid "%1 is out for lunch" +msgstr "%1ė‹˜ģ“ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." + +#: notification/newemailnotification.cpp:78 +msgid "New email:
'%1'
by '%2'" +msgstr "" + +#: settings/accountpage.cpp:69 msgid "Browse..." msgstr "" -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +msgid "Browse and crop picture..." msgstr "" -#: settings/accountswidget.cpp:404 +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" + +#: settings/accountpage.cpp:448 #, fuzzy -msgid "Display Picture" -msgstr "ź·øė¦¼ķŒŒģ¼:" +msgid "Downloading of display picture failed" +msgstr "ķ”„ė”ģ‹œ ģ‚¬ģš©" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" -msgstr "" - -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "ė™ģŖ½ķ•˜ėŠ˜" - -#: settings/chatstylepage.cpp:317 -msgid "Great!" -msgstr "" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 #, fuzzy msgid "&Delete" msgstr "ėŒ€ķ™” ģƒėŒ€ ģ‚­ģ œ(&R)" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "ķ™˜ź²½ 설정" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 #, fuzzy msgid "Account" msgstr "계정" -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 #, fuzzy msgid "My Account" msgstr "계정" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "ģ•Œė¦¼" -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 #, fuzzy msgid "Alerts and Notifications" msgstr "ģ“ė©”ģ¼ ģ•Œė¦¼" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "ėŒ€ķ™”" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "ėŒ€ķ™” źø°ė”" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "" + +#: settings/accountsettingsdialog.cpp:201 +msgid "The email address you have entered is already in use: '%1'" +msgstr "" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "ģ“ ź³„ģ •ģ„ ģ •ė§ė”œ ģ‚­ģ œķ•˜ģ‹œź² ģŠµė‹ˆź¹Œ?" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "ģ“ ź³„ģ •ģ„ ģ •ė§ė”œ ģ‚­ģ œķ•˜ģ‹œź² ģŠµė‹ˆź¹Œ?" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "ė™ģŖ½ķ•˜ėŠ˜" + +#: settings/chatstylepage.cpp:341 +msgid "Great!" +msgstr "" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "ķ™˜ź²½ 설정" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +msgid "Accounts" +msgstr "계정" + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "ģ“ė©”ģ¼ ģ•Œė¦¼" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "ėŒ€ķ™”ė„¼ ģ €ģž„ķ•  ķ“ė” 지정:" + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." msgstr "" -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "" +#: systemtraywidget.cpp:245 +msgid "- %1 (%2)" +msgstr "" + +#~ msgid "Picture:" +#~ msgstr "ź·øė¦¼ķŒŒģ¼:" + +#, fuzzy +#~ msgid "Speed:" +#~ msgstr "ģ„œė²„:" + +#, fuzzy +#~ msgid "Login Information" +#~ msgstr "ģ“ė©”ģ¼ 정볓 ķ‘œģ‹œ" + +#~ msgid "Logging in..." +#~ msgstr "ė”œź·øģøķ•˜ėŠ” 중..." + +#~ msgid "Use a specified command:" +#~ msgstr "ģ§€ģ •ķ•œ ėŖ…ė ¹ ģ‚¬ģš©" + +#, fuzzy +#~ msgid "Email: " +#~ msgstr "ģ“ė©”ģ¼" + +#, fuzzy +#~ msgid "Remove group" +#~ msgstr "그룹 ģ‚­ģ œ(&M)" + +#, fuzzy +#~ msgid "Show &Display Pictures" +#~ msgstr "ź·øė¦¼ķŒŒģ¼:" + +#, fuzzy +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr "ź°œģ˜ 새딜욓 ķŽøģ§€ź°€ ģžˆģŠµė‹ˆė‹¤." + +#, fuzzy +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr "ź°œģ˜ 새딜욓 ķŽøģ§€ź°€ ģžˆģŠµė‹ˆė‹¤." + +#, fuzzy +#~ msgid "Guido Solinas" +#~ msgstr "ģ˜Øė¼ģø" + +#, fuzzy +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "ģ‹¤ķŒØ. ķŒŒģ¼ģ„ ģ—“ 수 ģ—†ģŠµė‹ˆė‹¤" + +#, fuzzy +#~ msgid "Sidebar" +#~ msgstr "ėŒ€ķ™” ģƒėŒ€ ė„źµ¬ķ•Ø(&C)" + +#, fuzzy +#~ msgid "New contact's group" +#~ msgstr "ėŒ€ķ™” ģƒėŒ€ 추가(&C)" + +#, fuzzy +#~ msgid "Enter your login information:" +#~ msgstr "직접 ė”œź·øģø 정볓 ģž…ė „:" + +#, fuzzy +#~ msgid "Your friendly name:" +#~ msgstr "ėŒ€ķ™”ėŖ…:" + +#, fuzzy +#~ msgid "Your email address:" +#~ msgstr "ģ“ė©”ģ¼ ģ£¼ģ†Œ:" + +#~ msgid "Your password:" +#~ msgstr "ģ•”ķ˜ø:" + +#, fuzzy +#~ msgid "Display picture:" +#~ msgstr "ź·øė¦¼ķŒŒģ¼:" + +#, fuzzy +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "\"다넸 ķŽøģ§€ķ•Ø\"에 ģ“ė©”ģ¼ģ“ ė„ģ°©ķ•˜ė©“ ģ•Œė¦¼" + +#~ msgid "Organize chat folders by:" +#~ msgstr "ėŒ€ķ™”ė„¼ źø°ė”ķ•  ķ“ė”ģ˜ 구성:" + +#, fuzzy +#~ msgid "&Show graphics in chat messages" +#~ msgstr "ė©”ģ‹œģ§€ģ— ģ“ėŖØķ‹°ģ½˜ ķ‘œģ‹œ" + +#~ msgid "Use Hotmail" +#~ msgstr "Hotmail ģ‚¬ģš©" + +#~ msgid "says:" +#~ msgstr "ė‹˜ģ˜ 말:" + +#~ msgid "Current name: " +#~ msgstr "ķ˜„ģž¬ ėŒ€ķ™”ėŖ…: " + +#, fuzzy +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr ".NET ģ„œė¹„ģŠ¤ 상태넼 ė³“ģ‹œź² ģŠµė‹ˆź¹Œ?" + +#~ msgid "Received user confirmation" +#~ msgstr "ģ‚¬ģš©ģž ķ™•ģø ė°›ģŒ" + +#~ msgid "Transfer to notification server" +#~ msgstr "ģ•Œė¦¼ ģ„œė²„ė”œ ė³“ėƒ„" + +#, fuzzy +#~ msgid "The server is too busy" +#~ msgstr "ģ„œė²„ź°€ ķ­ģ£¼ ģƒķƒœģž…ė‹ˆė‹¤" + +#~ msgid "The server is unavailable" +#~ msgstr "ģ„œė²„ź°€ ģ‚¬ģš© ė¶ˆź°€ ģƒķƒœģž…ė‹ˆė‹¤" + #~ msgid "Add contact" #~ msgstr "ėŒ€ķ™” ģƒėŒ€ 추가" @@ -3532,9 +4265,6 @@ msgstr "" #~ msgid "KMess Notification" #~ msgstr "ģ“ė©”ģ¼ ģ•Œė¦¼" -#~ msgid "Accounts" -#~ msgstr "계정" - #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" @@ -3545,9 +4275,6 @@ msgstr "" #~ "Your emails" #~ msgstr "dcpark@kaist.ac.kr" -#~ msgid "Insert an emoticon" -#~ msgstr "ģ“ėŖØķ‹°ģ½˜ ģ‚½ģž…" - #~ msgid "Away - Idle" #~ msgstr "ģžė¦¬ 비움 -ģ‹œź°„ģ“ˆź³¼" @@ -3576,17 +4303,6 @@ msgstr "" #~ msgid "(On the Phone)" #~ msgstr "(통화 중)" -#, fuzzy -#~ msgid "Connection timeout" -#~ msgstr "ģ—°ź²° ģ‹œź°„ 쓈과" - -#~ msgid "Connect" -#~ msgstr "ė”œź·øģø" - -#, fuzzy -#~ msgid "Listening to %1" -#~ msgstr "ė³“ė‚“ėŠ” ķŒŒģ¼ %1" - #, fuzzy #~ msgid "File transfer dialog message" #~ msgstr "ķŒŒģ¼ ģ „ģ†”ģ„ ģ™„ė£Œķ–ˆģŠµė‹ˆė‹¤." @@ -3620,9 +4336,6 @@ msgstr "" #~ msgid "You can't login to hotmail with this account." #~ msgstr "ģ“ ź³„ģ •ģœ¼ė”œ hotmail에 ė”œź·øģøķ•  수 ģ—†ģŠµė‹ˆė‹¤." -#~ msgid "The connection to the server failed." -#~ msgstr "ģ„œė²„ė”œė¶€ķ„° ģ—°ź²°ģ“ ėŠģ–“ģ”ŒģŠµė‹ˆė‹¤." - #~ msgid "You may not be connected to the internet." #~ msgstr "ģøķ„°ė„·ģ— ģ—°ź²°ė˜ģ§€ ģ•Šģ€ 것 ź°™ģŠµė‹ˆė‹¤." @@ -3662,9 +4375,6 @@ msgstr "" #~ msgid "Port:" #~ msgstr "ķ¬ķŠø:" -#~ msgid "Type:" -#~ msgstr "ķ˜•ģ‹:" - #~ msgid "User ID:" #~ msgstr "ģ‚¬ģš©ģž ID:" @@ -3678,9 +4388,6 @@ msgstr "" #~ msgid "SOCKS5 Proxy" #~ msgstr "SOCKS5 ķ”„ė”ģ‹œ" -#~ msgid "Server:" -#~ msgstr "ģ„œė²„:" - #~ msgid "Proxy" #~ msgstr "ķ”„ė”ģ‹œ" @@ -3712,9 +4419,6 @@ msgstr "" #~ msgid "The following people are offline" #~ msgstr "ė‹¤ģŒ ėŒ€ķ™” ģƒėŒ€ź°€ ė”œź·øģ•„ģ›ƒķ–ˆģŠµė‹ˆė‹¤." -#~ msgid "%1 is offline" -#~ msgstr "%1ė‹˜ģ“ ė”œź·øģ•„ģ›ƒķ–ˆģŠµė‹ˆė‹¤." - #~ msgid "The following people are online" #~ msgstr "ė‹¤ģŒ ėŒ€ķ™” ģƒėŒ€ź°€ ė”œź·øģøķ–ˆģŠµė‹ˆė‹¤." @@ -3728,16 +4432,6 @@ msgstr "" #~ "in your inbox" #~ msgstr "ģžˆģŠµė‹ˆė‹¤." -#, fuzzy -#~ msgid "" -#~ "\"%1\"\n" -#~ "from %2\n" -#~ "in another folder" -#~ msgstr "다넸 ķŽøģ§€ķ•Ø ķ¬ķ•Ø" - -#~ msgid "and" -#~ msgstr "그리고" - #~ msgid "says: " #~ msgstr "ė‹˜ģ˜ 말: " @@ -3766,10 +4460,6 @@ msgstr "" #~ msgid "Chat - %1" #~ msgstr "ėŒ€ķ™”" -#, fuzzy -#~ msgid "Chat - %1 et al." -#~ msgstr "%1 등등." - #, fuzzy #~ msgid "The transfer of %1 failed. Couldn't create a socket." #~ msgstr "ģ‹¤ķŒØ. ģ†Œģ¼“ģ„ ģƒģ„±ķ•  수 ģ—†ģŠµė‹ˆė‹¤" @@ -3790,10 +4480,6 @@ msgstr "" #~ msgid "Get New Emoticon or Sound &Themes" #~ msgstr "ģ“ėŖØķ‹°ģ½˜/ķšØź³¼ģŒ 받기(&T)" -#, fuzzy -#~ msgid "Chat message layout:" -#~ msgstr "ė‚“ ė©”ģ‹œģ§€ģ˜ 글꼓:" - #, fuzzy #~ msgid "n&ame" #~ msgstr "ėŒ€ķ™”ėŖ…" diff --git a/po/maketrans b/po/maketrans index 22d7b81..0e8e690 100755 --- a/po/maketrans +++ b/po/maketrans @@ -8,7 +8,7 @@ # -BASEDIR="../kmess/" # root of translatable sources +BASEDIR="../src/" # root of translatable sources PROJECT="kmess" # project name BUGADDR="http://www.kmess.org/board/" WDIR=`pwd` @@ -31,7 +31,7 @@ xargs --arg-file=$RC_LIST ${EXTRACTRC} > $RC_CPP # Parse .xsl files echo "extracting translations from *.xsl files.." -sh ./styles/extract-xsl-messages >> $RC_CPP +sh ../data/chatstyles/extract-xsl-messages >> $RC_CPP # Parse .cpp files echo "extracting translations from *.cpp files.." @@ -41,14 +41,14 @@ find . -name '*.cpp' -o -name '*.h' -o -name '*.c' | sort >> $IN_LIST cd $WDIR xgettext --from-code=UTF-8 --language=C++ -kde \ -ci18n \ - -ki18n:1 -ki18nc:1c,2 -ki18np:1,2 -ki18ncp:1c,2,3 -ktr2i18n:1 \ - -kki18n:1 -kki18nc:1c,2 -kki18np:1,2 -kki18ncp:1c,2,3 \ + -ki18n:1 -ki18nc:1c,2 -ki18np:1,2 -ki18ncp:1c,2,3 -ktr2i18n:1 \ + -kki18n:1 -kki18nc:1c,2 -kki18np:1,2 -kki18ncp:1c,2,3 \ -kI18N_NOOP:1 -kI18N_NOOP2:1c,2 -kaliasLocale \ - --debug \ + --debug \ --msgid-bugs-address="$BUGADDR" \ - --exclude-file=kmess.pot.ignore \ + --exclude-file=kmess.pot.ignore \ --files-from=$IN_LIST -D $BASEDIR -D $WDIR \ - -o $PROJECT.pot || { echo "error while calling xgettext. aborting."; exit 1; } + -o $PROJECT.pot || { echo "error while calling xgettext. aborting."; exit 1; } # Cleanup rm $IN_LIST diff --git a/po/nb.po b/po/nb.po index 93ae737..bdfb184 100644 --- a/po/nb.po +++ b/po/nb.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: kmess\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" "PO-Revision-Date: 2003-04-28 20:18+0200\n" "Last-Translator: Oyvind Sather \n" "Language-Team: Norsk bokmĆ„l \n" @@ -20,47 +20,41 @@ msgstr "" "X-Generator: KBabel 1.0.1\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "Logger pĆ„..." - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -#, fuzzy -msgid "S&end" -msgstr "Send" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 #, fuzzy msgid "Ne&w Line" msgstr "Ny Linje" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 #, fuzzy -msgid "Sidebar" -msgstr "Vis/skjul &Kontaktpanel" +msgid "S&end" +msgstr "Send" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +#, fuzzy +msgid "Contacts" +msgstr "&Legg til Kontakt" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 #, fuzzy msgid "" "Enter here the email address of the person you wish to add to your contact " @@ -68,42 +62,40 @@ msgid "" msgstr "Skriv inn epostadressen til den du vil legge til:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 #, fuzzy msgid "Email address" msgstr "E-postadresse:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 #, fuzzy -msgid "New contact's group" -msgstr "&Ny Kontakt" +msgid "Initial group" +msgstr "E&ndre navn pĆ„ gruppe" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 #, fuzzy msgid "" "Enter a message to be automatically sent to people who try to message you." @@ -112,184 +104,390 @@ msgstr "" "hvis noen prĆøver Ć„ gi deg en beskjed:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 #, fuzzy msgid "&Automatic away message" msgstr "Skriv inn Borte-beskjed" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, fuzzy, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" -msgstr "har lagt deg til pĆ„ hans/hennes kontaktliste. Ƙnsker du Ć„:" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 #, fuzzy -msgid "&Add this contact to your \"Friends\" list" +msgid "&Add this person to my \"Friends\" list" msgstr "Legg denne kontakten til din \"Friends\"-liste" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 #, fuzzy -msgid "&Not add this contact, but let them see your online state" +msgid "Do not add this person; only allow them to see my online state" msgstr "Ikke legg til denne kontakten, men la dem se din status" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 #, fuzzy -msgid "Block this person from contacting &you or seeing your online state" +msgid "&Block this person from contacting me or seeing my online state" msgstr "Nekt denne personen Ć„ kontakte deg eller se din status." #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, fuzzy, no-c-format +msgid "Contact Properties for %1" +msgstr "Kontaktegenskaper for " + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +#, fuzzy +msgid "Restore" +msgstr "Fjernet" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "Bruk kallenavn for denne personen" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "Vis en oppsprettsballong nƄr personen koblers til/fra" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "Lyd:" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +msgid "&Clear Cache" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +msgid "Notes" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +msgid "Standard" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "Send" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 msgid "Cancel" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -#, fuzzy -msgid "Enter your login information:" -msgstr "Eller skriv inn din pƄlogginsinformasjon:" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" +msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 #, fuzzy -msgid "Password" +msgid "Email address:" +msgstr "E-postadresse: " + +#. i18n: tag string +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +#, fuzzy +msgid "Password:" msgstr "Passord:" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 #, fuzzy msgid " Account options " msgstr "Brukerkonto I&nnstillinger" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 #, fuzzy msgid "Remem&ber this profile" msgstr "Husk denne profilen " #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "Kobl &til" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr "Brukerkonto I&nnstillinger" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 #, fuzzy -msgid "Your friendly name:" +msgid "&Friendly name:" msgstr "Ditt vennskapsnavn:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 #, fuzzy -msgid "Your email address:" +msgid "&Email address:" msgstr "E-postadresse: " #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" -msgstr "Ditt Passord:" - -#. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 #, fuzzy -msgid "Remember Password" +msgid "&Password:" msgstr "Passord:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 #, fuzzy -msgid "Display picture:" +msgid "&Remember Password" +msgstr "Passord:" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 +#, fuzzy +msgid "Display Picture" msgstr "Bilde:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 msgid "C&hange..." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -#, fuzzy -msgid "Don't show a displa&y picture" -msgstr "Bilde:" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -300,35 +498,36 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +msgid "Re&member the settings of this account" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 #, fuzzy -msgid "Login &with this account automatically at start-up" +msgid "Login &with this account automatically" msgstr "Tilknytt automatisk med denne kontoen ved oppstart" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "Logg all prat" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -336,174 +535,285 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 msgid "https://accountservices.passport.net/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 #, fuzzy -msgid "Popup notifications" +msgid "Saved accounts:" +msgstr "Kontoer " + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +#, fuzzy +msgid "Click" +msgstr "Blokkert" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "Kontoer " + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "Fjernet" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "E-Post varsling" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "&Legg til Kontakt" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 #, fuzzy msgid "Show notifications when your contacts:" msgstr "Gi beskjed nƄr kontakter logger av" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 #, fuzzy msgid "&Go online" msgstr "Frakoblet" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 #, fuzzy msgid "S&end you a message" msgstr "Skriv inn Borte-beskjed" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 #, fuzzy msgid "Go o&ffline" msgstr "Frakoblet" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 #, fuzzy -msgid "Show notifications when you recei&ve an email" +msgid "Email Events" +msgstr "E-postadresse:" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" msgstr "Vis en beskjed nƄr epost mottas i \"andre mapper\"" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +#, fuzzy +msgid "In other folders" +msgstr "i en annen mappe" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "Skjul oppspretter etter" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "sekunder" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "Varsler" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "Vis &Frakoblede Kontakter" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -514,207 +824,209 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 -msgid "Inform contacts w&hich song I am listening to." +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 +msgid "Inform contacts w&hich song I am listening to" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 #, fuzzy msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "Endre status til \"Borte - Inaktiv\" nĆ„r inaktiv" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 msgid "Become idle after" msgstr "Bli inaktiv etter " #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "minutter " #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 #, fuzzy msgid "Log &all chats" msgstr "Logg all prat" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 msgid "" "Choose the directory on your system where you'd like to save the chat logs." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" msgstr "Lagre logger i denne mappen:" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "Organizer logger i mapper etter" +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "ƅr" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 #, fuzzy msgid "Month" msgstr "MĆ„ned" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "Dag" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" msgstr "Lagre alle logger i samme mappe" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "Din meldingsskrifttype:" - +#. i18n: file ./settings/chatstylepage.ui line 45 #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "Tving kontakters beskjeder til Ć„ bruke skrifttypen" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +msgid "&Chat style:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "Innstillinger" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 #, fuzzy -msgid "&Show graphics in chat messages" -msgstr "Vis tidspunkt for beskjeder" +msgid "&Show emoticons" +msgstr "Vis &HumĆørikoner" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 #, fuzzy -msgid "S&how time in chat messages" +msgid "S&how messages time" msgstr "Vis tidspunkt for beskjeder" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -#, fuzzy -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "Bruk skrifttypeeffekter som *fet* og _understreket_ i beskjeder" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -723,152 +1035,303 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 -msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "Epost program" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "Bruk Hotmail" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "Bruk egendefinert kommando:" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "E-Post varsling" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 -msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 #, fuzzy -msgid "Show email information" -msgstr "Vis epost informasjon i kontaktlisten" +msgid "Always" +msgstr "Borte" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 -msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "Din kontaktliste er full." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "Tjener Feil" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" -msgstr "Vis en beskjed nĆ„r epost mottas i \"andre mapper\"" +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." +msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "Din meldingsskrifttype:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 +msgid "" +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "Tving kontakters beskjeder til Ć„ bruke skrifttypen" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 +msgid "" +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +#, fuzzy +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" +msgstr "Bruk skrifttypeeffekter som *fet* og _understreket_ i beskjeder" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "SĆøk etter &Kontakt" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 #, fuzzy msgid "&Emoticon Themes" msgstr "Vis &HumĆørikoner" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 #, fuzzy msgid "Available emoticon styles:" msgstr "Vis &HumĆørikoner" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 #, fuzzy msgid "&Custom Emoticons" msgstr "Tegneserie humĆørikoner" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 msgid "Custom emoticons for this account:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -#, fuzzy -msgid "Click" -msgstr "Blokkert" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 #, fuzzy msgid "Re&name" msgstr "Ditt navn" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 #, fuzzy msgid "Remo&ve" msgstr "Fjernet" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +msgid "Web Browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +msgid "&Use the KDE default browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "sier:" +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "Epost program" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +msgid "&Use the KDE default email client" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +#, fuzzy +msgid "File Transfers" +msgstr "FiloverfĆøring fullfĆørt." + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "Lagre logger i denne mappen:" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +msgid "and" +msgstr "og" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "FiloverfĆøring fullfĆørt." #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -878,452 +1341,531 @@ msgstr "Jeg er borte fra datamaskinen" msgid "Your name" msgstr "Ditt navn" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "deg@hotmail.com" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "Tilgjengelig" - -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "Borte" - -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "Snart tilbake" - -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "Opptatt" - -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "Usynlig" - -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "" - -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "Frakoblet" - -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "Prater i telefonen" - -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "Ut til lunsj" - -#: chat/chatmaster.cpp:1061 -msgid "%1 is sending a wink: %2" -msgstr "" - -#: chat/chatmessagestyle.cpp:302 -#, fuzzy -msgid "%1 says:" -msgstr " sier: " - -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 -msgid "Add this emoticon: %1" -msgstr "" - -#: chat/chatview.cpp:529 -msgid "" -"Could not save chat log. Make sure you have permission to write in the " -"folder where logs are being saved." -msgstr "" - -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 -msgid "" -"The file '%1' already exists.\n" -"do you want to overwrite it?" -msgstr "" - -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Overwrite File" -msgstr "" - -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Over&write" -msgstr "" - -#: chat/chatview.cpp:977 -#, fuzzy -msgid "Add this &Emoticon..." -msgstr "Vis &HumĆørikoner" - -#: chat/chatview.cpp:984 -#, fuzzy -msgid "Send &Email" -msgstr "&Send epost" - -#: chat/chatview.cpp:988 -#, fuzzy -msgid "Copy E&mail" -msgstr "EPost" - -#: chat/chatview.cpp:995 -msgid "Visit &Link" -msgstr "" - -#: chat/chatview.cpp:999 -msgid "Copy &Address" -msgstr "" - -#: chat/chatview.cpp:1013 -msgid "&Copy text" -msgstr "" - -#: chat/chatview.cpp:1014 -msgid "Select &All" -msgstr "" - -#: chat/chatview.cpp:1015 -#, fuzzy -msgid "Save chat to &File" -msgstr "Send en &Fil" - -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "Prat" - -#: chat/chatwindow.cpp:239 +#: chat/chat.cpp:124 msgid "" "You can't start this invitation because there are multiple contacts in this " "chat." msgstr "" -#: chat/chatwindow.cpp:276 +#: chat/chat.cpp:158 #, fuzzy -msgid "%1 has joined the chat." +msgid "%1 has joined the chat." msgstr "er med pĆ„ praten." -#: chat/chatwindow.cpp:327 +#: chat/chat.cpp:211 #, fuzzy -msgid "The conversation went idle, %1 has left the chat." +msgid "The conversation went idle, %1 has left the chat." msgstr " forlot praten." -#: chat/chatwindow.cpp:331 +#: chat/chat.cpp:215 #, fuzzy -msgid "%1 has left the chat." +msgid "%1 has left the chat." msgstr " forlot praten." -#: chat/chatwindow.cpp:593 +#: chat/chat.cpp:364 #, fuzzy -msgid "%1 - Chat" -msgstr "Prat" +msgctxt "Name of a chat tab" +msgid "%1 and %2" +msgstr " skriver." -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" -msgstr "" - -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" -msgstr "" - -#: chat/chatwindow.cpp:757 +#: chat/chat.cpp:371 #, fuzzy -msgid "Contacts" -msgstr "&Legg til Kontakt" +msgctxt "Name of a chat tab" +msgid "%1 et al." +msgstr " et al." -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 +#: chat/chat.cpp:630 #, fuzzy -msgid "Emoticons" -msgstr "Vis &HumĆørikoner" - -#: chat/chatwindow.cpp:819 -#, fuzzy -msgid "My emoticons" -msgstr "Vis &HumĆørikoner" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" msgstr " (This message was sent automatically)" -#: chat/chatwindow.cpp:1502 +#: chat/chat.cpp:934 +msgid "You received a wink from %1." +msgstr "" + +#: chat/chat.cpp:971 msgid "" "The wink could not be displayed. Make sure you have 'cabextract' installed." msgstr "" -#: chat/chatwindow.cpp:1511 +#: chat/chat.cpp:980 msgid "The wink could not be displayed. The data could not be read." msgstr "" -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" +#: chat/chat.cpp:1080 +msgid "You have received a wink from %1" msgstr "" -#: chat/chatwindow.cpp:1755 -#, fuzzy -msgid "Show Side&bar" -msgstr "Vis/skjul &Kontaktpanel" +#: chat/chat.cpp:1100 +msgid "You received a nudge from %1!" +msgstr "" -#: chat/chatwindow.cpp:1756 +#: chat/chat.cpp:1119 #, fuzzy -msgid "Show the contact sidebar" -msgstr "Viser eller skjuler kontaktpanelet" - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -#, fuzzy -msgid "Hide Side&bar" -msgstr "Vis/skjul &Kontaktpanel" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -#, fuzzy -msgid "Hide the contact sidebar" -msgstr "Viser eller skjuler kontaktpanelet" - -#: chat/chatwindow.cpp:1787 -#, fuzzy -msgid "The message '%1' could not be sent." +msgid "The message '%1' could not be sent." msgstr "ble ikke mottatt." -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" -msgstr "" - -#: chat/chatwindow.cpp:1876 +#: chat/chat.cpp:1183 msgid "You've sent a nudge to %1!" msgstr "" -#: chat/chatwindow.cpp:1883 +#: chat/chat.cpp:1190 msgid "You've sent a nudge!" msgstr "" -#: chat/chatwindow.cpp:1972 -#, fuzzy -msgid "%1 is typing." -msgstr " skriver." - -#: chat/chatwindow.cpp:1981 -#, fuzzy -msgid "%1 and %2 are typing." -msgstr " skriver." - -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." +#: chat/chatmaster.cpp:1219 +msgid "%1 is sending a wink: %2" msgstr "" -#: chat/chatwindowinterface.cpp:175 -msgid "&Chat" -msgstr "&Prat " +#: chat/chatmessagestyle.cpp:298 +#, fuzzy +msgid "%1 says:" +msgstr " sier: " -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 +msgid "Add this emoticon: %1" +msgstr "" + +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 msgid "&Invite" msgstr "&Inviter " -#: chat/chatwindowinterface.cpp:179 +#: chat/chatview.cpp:695 +msgid "" +"Could not save chat log. Make sure you have permission to write in the " +"folder where logs are being saved." +msgstr "" + +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 +msgid "" +"The file '%1' already exists.\n" +"do you want to overwrite it?" +msgstr "" + +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Overwrite File" +msgstr "" + +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Over&write" +msgstr "" + +#: chat/chatview.cpp:1275 +#, fuzzy +msgid "Add this &Emoticon..." +msgstr "Vis &HumĆørikoner" + +#: chat/chatview.cpp:1282 +#, fuzzy +msgid "Send &Email" +msgstr "&Send epost" + +#: chat/chatview.cpp:1286 +#, fuzzy +msgid "Copy E&mail" +msgstr "EPost" + +#: chat/chatview.cpp:1293 +msgid "Visit &Link" +msgstr "" + +#: chat/chatview.cpp:1297 +msgid "Copy &Address" +msgstr "" + +#: chat/chatview.cpp:1312 +msgid "&Copy text" +msgstr "" + +#: chat/chatview.cpp:1313 +msgid "Select &All" +msgstr "" + +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 +#, fuzzy +msgid "Save chat to &File" +msgstr "Send en &Fil" + +#: chat/chatwindow.cpp:489 +msgid "&Chat" +msgstr "&Prat " + +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "Send en &Fil" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "Start et &MĆøte" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 #, fuzzy msgid "Send a &Nudge!" msgstr "Send en &Fil" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 #, fuzzy msgid "&Emoticons" msgstr "Vis &HumĆørikoner" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +msgid "Close &All Tabs" +msgstr "" + +#: chat/chatwindow.cpp:504 #, fuzzy msgid "Meeting" msgstr "Innstillinger" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "Endre &Skriftype" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "Endre Skrift&Farge" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 #, fuzzy msgid "&Font" msgstr "Kobl &til" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 #, fuzzy msgid "Font &Color" msgstr "Endre Skrift&Farge" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +#, fuzzy +msgid "Emoticons" +msgstr "Vis &HumĆørikoner" + +#: chat/chatwindow.cpp:658 +#, fuzzy +msgid "My emoticons" +msgstr "Vis &HumĆørikoner" + +#: chat/chatwindow.cpp:738 #, fuzzy msgid "&Settings" msgstr "Innstillinger" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "Vis &HumĆørikoner" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +#, fuzzy +msgid "Hide Side&bar" +msgstr "Vis/skjul &Kontaktpanel" + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "Vis/skjul &Kontaktpanel" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +#, fuzzy +msgid "Hide the contact sidebar" +msgstr "Viser eller skjuler kontaktpanelet" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +msgid "Close all tabs" +msgstr "" + +#: chat/chatwindow.cpp:856 +msgid "Close current tab" +msgstr "" + +#: chat/chatwindow.cpp:1467 +#, fuzzy +msgid "Show Side&bar" +msgstr "Vis/skjul &Kontaktpanel" + +#: chat/chatwindow.cpp:1468 +#, fuzzy +msgid "Show the contact sidebar" +msgstr "Viser eller skjuler kontaktpanelet" + +#: chat/chatwindow.cpp:1565 +#, fuzzy +msgid "%1 is typing." +msgstr " skriver." + +#: chat/chatwindow.cpp:1575 +#, fuzzy +msgid "%1 and %2 are typing." +msgstr " skriver." + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "" + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "Prat" + +#: chat/chatwindow.cpp:1615 +#, fuzzy +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "Prat" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "&Send epost" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 #, fuzzy msgid "&View Profile" msgstr "&Vis profil" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "&Legg til Kontakt" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 #, fuzzy msgid "A&llow Contact" msgstr "&Tillat Kontakt" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 #, fuzzy msgid "&Delete Contact" msgstr "Fjern K&ontakt" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "&Blokker Kontakt" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "&Fjern blokkering av Kontakt" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 #, fuzzy msgid "&Friendly Name" msgstr "Ditt vennskapsnavn:" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 #, fuzzy msgid "&Email Address" msgstr "E-postadresse:" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "" -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 msgid "Blocked" msgstr "Blokkert" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 #, fuzzy msgid "The contact is %1" msgstr "Legg denne kontakten til din \"Friends\"-liste" -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +#, fuzzy +msgid "Add to Chat" +msgstr "Legg til kontakt" + +#: chat/emoticonsidebar.cpp:213 +#, fuzzy +msgid "Insert new" +msgstr "Sett inn humørikon" + +#: chat/emoticonsidebar.cpp:214 +msgid "Edit" +msgstr "" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +#, fuzzy +msgid "Remove" +msgstr "Fjernet" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 #, fuzzy msgid "Web Messenger" msgstr "Web design" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +#, fuzzy +msgid "Windows Live Messenger %1" +msgstr "Web design" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "Tilgjengelig" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "Frakoblet" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "Tillatt" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "Fjernet" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 +#, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr " skriver." + +#: contactlistviewdelegate.cpp:150 msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "Borte" + +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "Snart tilbake" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "Opptatt" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "Usynlig" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" msgstr "" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "Prater i telefonen" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "Ut til lunsj" + +#: dialogs/addcontactdialog.cpp:48 #, fuzzy msgid "Add a Contact" msgstr "Legg til kontakt" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 #, fuzzy msgid "No group" msgstr "&Fjern Gruppe" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 #, fuzzy msgid "Add New Emoticon" msgstr "Vis &Humørikoner" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "Vis &Humørikoner" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "" @@ -1331,540 +1873,607 @@ msgstr "" msgid "Specify an Away message" msgstr "Skriv inn Borte-beskjed" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "Bruk kallenavn for denne personen" - -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" -msgstr "Vis en oppsprettsballong nÄr personen koblers til/fra" - -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "Bilde:" - -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "Lyd:" - -#: dialogs/contactpropertiesdialog.cpp:234 +#: dialogs/contactaddeduserdialog.cpp:85 #, fuzzy -msgid "Contact Properties for %1" -msgstr "Kontaktegenskaper for " +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " +msgstr "har lagt deg til pÄ hans/hennes kontaktliste. Ønsker du Ä:" -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " -msgstr "E-postadresse: " +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "Tilkoblet" -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "NÄværende navn: " - -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +msgid "Not seen yet" msgstr "" -#: dialogs/networkwindow.cpp:57 +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +#, fuzzy +msgid "No messages yet" +msgstr "Vis tidspunkt for beskjeder" + +#: dialogs/contactpropertiesdialog.cpp:381 +msgid "Last seen: %1" +msgstr "" + +#: dialogs/contactpropertiesdialog.cpp:382 +#, fuzzy +msgid "Last message: %1" +msgstr "Din meldingsskrifttype:" + +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "EPost" + +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "Epost program" + +#: dialogs/networkwindow.cpp:79 msgid "S&ave tab" msgstr "" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 msgid "C&lear tab" msgstr "" -#: dialogs/networkwindow.cpp:59 -msgid "Cl&ose tab" -msgstr "" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 msgid "" "No connections are present.\n" "Cannot open the Network Window." msgstr "" -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 msgid "" "Could not save the Network Window log. Make sure you have permission to " "write in the folder where it is being saved." msgstr "" -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "" -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +msgid "Cannot send commands to this kind of connection!" +msgstr "" + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 #, fuzzy msgid "Completed" msgstr "Tilkoblet" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +msgid "%1 of %2 received." msgstr "" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +msgid "%1 of %2 sent." msgstr "" -#: dialogs/transferwindow.cpp:55 -#, fuzzy -msgid "File Transfers" -msgstr "Filoverføring fullført." +#: dialogs/transferentry.cpp:373 +msgid "infinite" +msgstr "" -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 msgid "Cl&ean Up" msgstr "" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " "the theme folder '%1'." msgstr "" -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 #, fuzzy msgid "Smile" msgstr "EPost" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "" -#: emoticontheme.cpp:797 -msgid "Big smile" -msgstr "" - -#: emoticontheme.cpp:798 -#, fuzzy -msgid "Sad" -msgstr "og" - -#: emoticontheme.cpp:799 -msgid "Crying" -msgstr "" - -#: emoticontheme.cpp:800 -msgid "Angry" -msgstr "" - -#: emoticontheme.cpp:801 -msgid "Confused" -msgstr "" - -#: emoticontheme.cpp:802 -msgid "Embarrassed" -msgstr "" - -#: emoticontheme.cpp:803 -#, fuzzy -msgid "Disappointed" -msgstr "Frakoblet" - -#: emoticontheme.cpp:804 -msgid "Hot" -msgstr "" - -#: emoticontheme.cpp:805 -msgid "Baring teeth" -msgstr "" - -#: emoticontheme.cpp:806 -msgid "Nerd" -msgstr "" - -#: emoticontheme.cpp:807 -msgid "Sick" -msgstr "" - -#: emoticontheme.cpp:808 -msgid "Surprised" -msgstr "" - -#: emoticontheme.cpp:809 -msgid "Party" -msgstr "" - -#: emoticontheme.cpp:810 -msgid "Sleepy" -msgstr "" - -#: emoticontheme.cpp:811 -msgid "Thinking" -msgstr "" - #: emoticontheme.cpp:812 -msgid "Don't tell anyone" +msgid "Big smile" msgstr "" #: emoticontheme.cpp:813 #, fuzzy -msgid "Secret telling" -msgstr "Innstillinger" +msgid "Sad" +msgstr "og" #: emoticontheme.cpp:814 -msgid "Eye-rolling" +msgid "Crying" msgstr "" #: emoticontheme.cpp:815 -msgid "Sarcastic" +msgid "Angry" msgstr "" #: emoticontheme.cpp:816 -msgid "I don't know" +msgid "Confused" msgstr "" #: emoticontheme.cpp:817 +msgid "Embarrassed" +msgstr "" + +#: emoticontheme.cpp:818 +#, fuzzy +msgid "Disappointed" +msgstr "Frakoblet" + +#: emoticontheme.cpp:819 +msgid "Hot" +msgstr "" + +#: emoticontheme.cpp:820 +msgid "Baring teeth" +msgstr "" + +#: emoticontheme.cpp:821 +msgid "Nerd" +msgstr "" + +#: emoticontheme.cpp:822 +msgid "Sick" +msgstr "" + +#: emoticontheme.cpp:823 +msgid "Surprised" +msgstr "" + +#: emoticontheme.cpp:824 +msgid "Party" +msgstr "" + +#: emoticontheme.cpp:825 +msgid "Sleepy" +msgstr "" + +#: emoticontheme.cpp:826 +msgid "Thinking" +msgstr "" + +#: emoticontheme.cpp:827 +msgid "Don't tell anyone" +msgstr "" + +#: emoticontheme.cpp:828 +#, fuzzy +msgid "Secret telling" +msgstr "Innstillinger" + +#: emoticontheme.cpp:829 +msgid "Eye-rolling" +msgstr "" + +#: emoticontheme.cpp:830 +msgid "Sarcastic" +msgstr "" + +#: emoticontheme.cpp:831 +msgid "I don't know" +msgstr "" + +#: emoticontheme.cpp:832 #, fuzzy msgid "Be right back" msgstr "Snart tilbake" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "" -#: emoticontheme.cpp:824 -msgid "Dog face" -msgstr "" - -#: emoticontheme.cpp:825 -#, fuzzy -msgid "Sun" -msgstr "Lyd:" - -#: emoticontheme.cpp:826 -msgid "Devil" -msgstr "" - -#: emoticontheme.cpp:827 -msgid "Right hug" -msgstr "" - -#: emoticontheme.cpp:828 -msgid "Girl" -msgstr "" - -#: emoticontheme.cpp:829 -msgid "Broken heart" -msgstr "" - -#: emoticontheme.cpp:830 -msgid "Wilted rose" -msgstr "" - -#: emoticontheme.cpp:831 -msgid "Thumbs down" -msgstr "" - -#: emoticontheme.cpp:832 -msgid "Cat face" -msgstr "" - -#: emoticontheme.cpp:833 -msgid "Sleeping half-moon" -msgstr "" - -#: emoticontheme.cpp:834 -msgid "Red lips" -msgstr "" - -#: emoticontheme.cpp:835 -#, fuzzy -msgid "Clapping" -msgstr "Prat" - -#: emoticontheme.cpp:836 -msgid "Crossed fingers" -msgstr "" - -#: emoticontheme.cpp:837 -msgid "Auto" -msgstr "" - -#: emoticontheme.cpp:838 -msgid "Airplane" -msgstr "" - #: emoticontheme.cpp:839 -msgid "Turtle" +msgid "Dog face" msgstr "" #: emoticontheme.cpp:840 #, fuzzy -msgid "Snail" -msgstr "&Send epost" +msgid "Sun" +msgstr "Lyd:" #: emoticontheme.cpp:841 -msgid "Black sheep" +msgid "Devil" msgstr "" #: emoticontheme.cpp:842 -msgid "Goat" +msgid "Right hug" msgstr "" #: emoticontheme.cpp:843 -msgid "Vampire bat" +msgid "Girl" msgstr "" #: emoticontheme.cpp:844 -msgid "Pizza" +msgid "Broken heart" msgstr "" #: emoticontheme.cpp:845 -msgid "Beer mug" +msgid "Wilted rose" msgstr "" #: emoticontheme.cpp:846 -msgid "Martini glass" +msgid "Thumbs down" msgstr "" #: emoticontheme.cpp:847 -msgid "Coffee cup" +msgid "Cat face" msgstr "" #: emoticontheme.cpp:848 -msgid "Birthday cake" +msgid "Sleeping half-moon" msgstr "" #: emoticontheme.cpp:849 -msgid "Plate" +msgid "Red lips" msgstr "" #: emoticontheme.cpp:850 -msgid "Bowl" -msgstr "" +#, fuzzy +msgid "Clapping" +msgstr "Prat" #: emoticontheme.cpp:851 -msgid "Star" +msgid "Crossed fingers" msgstr "" #: emoticontheme.cpp:852 -msgid "Rainbow" +msgid "Auto" msgstr "" #: emoticontheme.cpp:853 -msgid "Stormy cloud" +msgid "Airplane" msgstr "" #: emoticontheme.cpp:854 -msgid "Lightning" +msgid "Turtle" msgstr "" #: emoticontheme.cpp:855 -msgid "Umbrella" -msgstr "" +#, fuzzy +msgid "Snail" +msgstr "&Send epost" #: emoticontheme.cpp:856 -msgid "Island with a palm tree" +msgid "Black sheep" msgstr "" #: emoticontheme.cpp:857 -msgid "Telephone receiver" +msgid "Goat" msgstr "" #: emoticontheme.cpp:858 +msgid "Vampire bat" +msgstr "" + +#: emoticontheme.cpp:859 +msgid "Pizza" +msgstr "" + +#: emoticontheme.cpp:860 +msgid "Beer mug" +msgstr "" + +#: emoticontheme.cpp:861 +msgid "Martini glass" +msgstr "" + +#: emoticontheme.cpp:862 +msgid "Coffee cup" +msgstr "" + +#: emoticontheme.cpp:863 +msgid "Birthday cake" +msgstr "" + +#: emoticontheme.cpp:864 +msgid "Plate" +msgstr "" + +#: emoticontheme.cpp:865 +msgid "Bowl" +msgstr "" + +#: emoticontheme.cpp:866 +msgid "Star" +msgstr "" + +#: emoticontheme.cpp:867 +msgid "Rainbow" +msgstr "" + +#: emoticontheme.cpp:868 +msgid "Stormy cloud" +msgstr "" + +#: emoticontheme.cpp:869 +msgid "Lightning" +msgstr "" + +#: emoticontheme.cpp:870 +msgid "Umbrella" +msgstr "" + +#: emoticontheme.cpp:871 +msgid "Island with a palm tree" +msgstr "" + +#: emoticontheme.cpp:872 +msgid "Telephone receiver" +msgstr "" + +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "EPost" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 #, fuzzy msgid "Clock" msgstr "Blokkert" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 #, fuzzy msgid "Camera" msgstr "Ditt navn" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 #, fuzzy msgid "Money" msgstr "MÄned" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 #, fuzzy msgid "KMess Icon" msgstr "KMess" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "Kunne ikke koble til tjener." + +#: initialview.cpp:377 +msgid "Connect" +msgstr "Koble til" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "Kobl &fra" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "" -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "" -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "Ny &Gruppe" + +#: kmess.cpp:226 #, fuzzy msgid "Add a group" msgstr "&Legg til Gruppe" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "Skriv inn nytt navn pÄ gruppen:" -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "" - -#: kmess.cpp:638 +#: kmess.cpp:569 #, fuzzy msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" msgstr "Er du sikker pÄ at du vil fjerne denne gruppen?" -#: kmess.cpp:640 +#: kmess.cpp:571 #, fuzzy msgid "Remove contact" msgstr "Fjern K&ontakt" -#: kmess.cpp:641 kmess.cpp:684 -#, fuzzy -msgid "Remove" -msgstr "Fjernet" - -#: kmess.cpp:642 +#: kmess.cpp:573 #, fuzzy msgid "Remove and block" msgstr "Fjernet" -#: kmess.cpp:681 -#, fuzzy +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "Er du sikker pÄ at du vil fjerne denne gruppen?" -#: kmess.cpp:683 +#: kmess.cpp:631 #, fuzzy -msgid "Remove group" -msgstr "&Fjern Gruppe" +msgctxt "dialog button" +msgid "Remove" +msgstr "Fjernet" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "Dette er en spesiell gruppe som ikke kan endres." -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 #, fuzzy msgid "Rename group" msgstr "E&ndre navn pÄ gruppe" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "Tilkoblet" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "Autentisering feilet" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "Frakoblet" -#: kmess.cpp:1441 +#: kmess.cpp:1408 msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" -#: kmess.cpp:1445 +#: kmess.cpp:1412 #, fuzzy msgid "Error with notifications" msgstr "E-Post varsling" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "KMess" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "&Handlinger" @@ -1886,953 +2495,864 @@ msgstr "SĆøk etter &Kontakt" msgid "Search by &Interest" msgstr "SĆøk etter &Interesser" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "SĆøk etter &Kontakt" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "Ny &Brukerkonto" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "Brukerkonto I&nnstillinger" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "&Tilkoble" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "Kobl &fra" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "Vis min &Profil" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "&Min Status" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "Borte med auto-svar" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "Vis &Tillate Kontakter" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 msgid "Show &Offline Contacts" msgstr "Vis &Frakoblede Kontakter" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "Vis &Fjernede Kontakter" -#: kmessinterface.cpp:303 +#: kmessinterface.cpp:318 #, fuzzy -msgid "Show &Display Pictures" +msgid "Show &Empty Groups" +msgstr "Vis &HumĆørikoner" + +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" msgstr "Bilde:" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "EPost" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "&Sorter Kontakter etter" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "Grupper" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "Tilkoblet/Frakoblet" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +#, fuzzy +msgid "[%1] %2 goes online" +msgstr "er frakoblet" + +#: kmessview.cpp:363 +#, fuzzy +msgid "[%1] %2 goes offline" +msgstr "er frakoblet" + +#: kmessview.cpp:559 #, fuzzy msgid "Cha&t" msgstr "Prat" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "&Egenskaper" -#: kmessview.cpp:492 +#: kmessview.cpp:569 #, fuzzy msgid "&Remove from group" msgstr "&Fjern Gruppe" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +#, fuzzy +msgid "&Listening Music" +msgstr "Sender fil " + +#: kmessview.cpp:601 #, fuzzy msgid "&Copy to Group" msgstr "&Fytt til gruppe" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "&Fytt til gruppe" -#: kmessview.cpp:549 +#: kmessview.cpp:646 msgid "Move Group &Down" msgstr "Flytt gryppe &Ned" -#: kmessview.cpp:550 +#: kmessview.cpp:647 msgid "Move Group &Up" msgstr "Flytt gryppe &Opp" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "&Fjern Gruppe" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "E&ndre navn pĆ„ gruppe" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 #, fuzzy msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "EPost" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "" -#: kmessview.cpp:918 +#: kmessview.cpp:1075 +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "" + +#: kmessview.cpp:1076 +#, fuzzy +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "Din meldingsskrifttype:" + +#: kmessview.cpp:1085 msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "" -#: kmessview.cpp:921 +#: kmessview.cpp:1090 #, fuzzy -msgctxt "Contacts count in group tooltip" +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "&Legg til Kontakt" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +#, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "&Legg til Kontakt" + +#: kmessview.cpp:1504 msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "" -#: kmessview.cpp:1543 -#, fuzzy -msgid "You have 1 new e-mail in your inbox." -msgstr "ny epost i innboksen." +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" -#: kmessview.cpp:1547 -#, fuzzy -msgid "You have %1 new emails in your inbox." -msgstr "nye epost i innboksen." - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "KMess" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 msgid "Project support" msgstr "" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 #, fuzzy msgid "Current developer" msgstr "GnomeMetting utvikler" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 #, fuzzy msgid "" "German translation, testing, documentation, web master, project management, " "etc..." msgstr "Tysk oversettelse, testing, dokumentajson og webside" -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "Web design" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "Hoved- og gul/blĆ„/fiolett humĆørikoner og Italiensk oversettelse" -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "Tegneserie humĆørikoner" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "Standard lyd-tema" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "Arabisk oversettelse, Fiks for internasjonalisering av fillagring." -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 #, fuzzy msgid "More Arabic translation" msgstr "Mer Tyrkisk oversettelse" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "Brasiliansk Portugisisk oversettelse" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 #, fuzzy msgid "Catalan translation" msgstr "Catalan oversettelse" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 #, fuzzy msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "Enkel Kinesisk oversettelse, fiks for filoverfĆøringsfeil" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 #, fuzzy msgid "More Simplified Chinese translation" msgstr "Enkel Kinesisk oversettelse, fiks for filoverfĆøringsfeil" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 #, fuzzy msgid "Traditional Chinese translation" msgstr "Catalan oversettelse" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 #, fuzzy msgid "Danish translation" msgstr "Dansk oversettelse" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 #, fuzzy msgid "More Danish translation" msgstr "Dansk oversettelse" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "Nederlandsk oversettelse" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 #, fuzzy msgid "More Dutch translation" msgstr "Nederlandsk oversettelse" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 #, fuzzy msgid "Estonian translation" msgstr "Oversettelse for Estonia" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 #, fuzzy msgid "Finnish translation" msgstr "Dansk oversettelse" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 #, fuzzy msgid "More Finnish translation" msgstr "Dansk oversettelse" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "Fransk oversettelse" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 #, fuzzy msgid "More French translation, MSN6 emoticon definitions" msgstr "Fransk oversettelse" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 #, fuzzy msgid "More French translation" msgstr "Fransk oversettelse" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 #, fuzzy msgid "Hungarian translation" msgstr "Oversettelse for Estonia" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 #, fuzzy msgid "More Italian translation" msgstr "Koreansk oversettelse" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "Koreansk oversettelse" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 #, fuzzy msgid "Norsk BokmĆ„l translation" msgstr "Norsk (bokmĆ„l) oversettelse" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 #, fuzzy msgid "Slovenian translation" msgstr "Koreansk oversettelse" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "Spansk oversettelse" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 #, fuzzy msgid "More Spanish translation" msgstr "Mer Spansk oversettelse" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 #, fuzzy msgid "Swedish translation" msgstr "Spansk oversettelse" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 #, fuzzy msgid "Thai translation" msgstr "Thailands oversettelse" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "Tyrkisk oversettelse" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "Mer Tyrkisk oversettelse" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -#, fuzzy -msgid "Guido Solinas" -msgstr "Tilgjengelig" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "FiloverfĆøring fullfĆørt." + +#: main.cpp:134 msgid "P4-Context field support" msgstr "" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "Xinerama fikser" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "Original fil mottatt kode " -#: main.cpp:120 -msgid "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" msgstr "" -#: main.cpp:120 +#: main.cpp:138 +msgid "KWallet support" +msgstr "" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "Varierende internasjonaliseringsfikser." + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "Varierende internasjonaliseringsfikser." -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "GnomeMetting utvikler" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "Person med en pose over hodet hans" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "Inspirasjon og diverse kode" -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 +#: main.cpp:150 #, fuzzy msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "Oppspretts Ballong kode" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "Inaktiv tid kode" -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 +#: main.cpp:152 msgid "Close-to-tray icon screenshot code" msgstr "" -#: main.cpp:131 +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 #, fuzzy msgid "Your name here?" msgstr "Ditt navn" -#: main.cpp:131 +#: main.cpp:156 msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" -#: main.cpp:134 +#: main.cpp:159 #, fuzzy msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Ditt navn" -#: main.cpp:135 +#: main.cpp:160 #, fuzzy msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "Din E-postadresse:" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "Tilknytt automatisk med gitt epostadresse" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 #, fuzzy msgid "The contact cancelled the session." msgstr "Kontakten har kansellert invitasjonen" -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 #, fuzzy msgid "The contact rejected the invitation." msgstr "Kontakten har nektet invitasjonen" -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 #, fuzzy msgid "You have cancelled the session." msgstr "Du har kansellert invitasjonen." -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "Du har nektet Ć„ godta invitasjonen." -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +msgid "Do you want to accept or cancel?" msgstr "" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +msgid "Click to cancel." msgstr "" -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 #, fuzzy msgid "Do you want to accept the file: %1 (%2)" msgstr "Vil du goddta filen: " -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 #, fuzzy msgid "The transfer of %1 failed. Couldn't open file." msgstr "feilet. Kunne ikke Ć„pne fil" -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "OverfĆøring akseptert." + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 #, fuzzy msgid "Connecting to %1, port %2" msgstr "Tidsavbrudd pĆ„ forbindelse" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 #, fuzzy msgid "The transfer was cancelled" msgstr "OverfĆøring akseptert." -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 #, fuzzy msgid "Connection established" msgstr "Tidsavbrudd pĆ„ forbindelse" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 #, fuzzy msgid "Successfully transferred file: %1" msgstr "Korrekt fullfĆørt overfĆøring av filen: " -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 #, fuzzy msgid "The transfer of %1 failed. The file does not exist." msgstr "feilet. Filen finnes ikke" -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 #, fuzzy msgid "The transfer of %1 failed. The file could not be read." msgstr "feilet. Kunne ikke opprette forbindelse" -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 #, fuzzy msgid "Sending file %1" msgstr "Sender fil " -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "OverfĆøring akseptert." - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 #, fuzzy msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "Kontakten har kansellert invitasjonen" -#: network/applications/filetransferp2p.cpp:345 +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." +msgstr "" + +#: network/applications/filetransferp2p.cpp:348 +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "" + +#: network/applications/filetransferp2p.cpp:378 #, fuzzy -msgid "The transfer of %1 failed. Couldn't open file" +msgid "The transfer of file "%1" failed. Couldn't save the file." msgstr "feilet. Kunne ikke Ć„pne fil" -#: network/applications/filetransferp2p.cpp:524 +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 #, fuzzy -msgid "The contact cancelled the transfer." +msgid "The contact has cancelled the transfer of file "%1"." msgstr "Kontakten har kansellert invitasjonen" -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "Du har kansellert invitasjonen." + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "" -#: network/applications/filetransferp2p.cpp:768 +#: network/applications/filetransferp2p.cpp:676 #, fuzzy -msgid "The transfer of %1 failed. The file does not exist." +msgid "Successfully sent file "%1"." +msgstr "Korrekt fullfĆørt overfĆøring av filen: " + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "Korrekt fullfĆørt overfĆøring av filen: " + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "feilet. Filen finnes ikke" -#: network/applications/filetransferp2p.cpp:773 +#: network/applications/filetransferp2p.cpp:818 #, fuzzy -msgid "The transfer of %1 failed. The file could not be read." +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "feilet. Kunne ikke opprette forbindelse" -#: network/applications/filetransferp2p.cpp:809 +#: network/applications/filetransferp2p.cpp:855 #, fuzzy -msgid "Sending file %1 (%2)" +msgid "Sending file "%1" (%2)." msgstr "Sender fil " -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "Kontakten har kansellert invitasjonen" + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "Du er invitert til et mĆøte (bruker GnomeMeeting)." -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 #, fuzzy msgid "Starting GnomeMeeting. Connecting to %1." msgstr "Starter GnomeMetting. Tilknytter " -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "Inviterer kontakten til et mĆøte." -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "" -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 #, fuzzy msgid "The invitation was aborted. An internal error occured." msgstr "Kontakten har nektet invitasjonen" -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 #, fuzzy msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "feilet. Kunne ikke opprette stĆøpsel" -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 #, fuzzy msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "Kontakten har kansellert invitasjonen" -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "" -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 #, fuzzy msgid "The invitation was aborted." msgstr "Kontakten har kansellert invitasjonen" -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "Du er invitert til Ć„ dele denne personens skrivebord." -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 #, fuzzy msgid "Starting KRDC. Connecting to %1." msgstr "Starter KRDC. Tilknytter " -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." -msgstr "" +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +#, fuzzy +msgid "The contact rejected the invitation. An internal error occured." +msgstr "Kontakten har nektet invitasjonen" -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +#, fuzzy +msgid "The transfer failed." +msgstr "Oversetteren av " + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." msgstr "" -#: network/applications/p2papplication.cpp:1503 -#, fuzzy -msgid "The transfer failed. Data preparation failed." -msgstr "Kontakten har kansellert invitasjonen" - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -#, fuzzy -msgid "The contact rejected the invitation. An internal error occured." -msgstr "Kontakten har nektet invitasjonen" - -#: network/applications/p2papplication.cpp:1626 -#, fuzzy -msgid "The transfer failed." -msgstr "Oversetteren av " - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 #, fuzzy msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "feilet. Filen finnes ikke" -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +#, fuzzy +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "feilet. Kunne ikke opprette stĆøpsel" + +#: network/applications/p2papplicationbase.cpp:1015 +#, fuzzy +msgid "The transfer failed. An internal error occured." +msgstr "Kontakten har nektet invitasjonen" + +#: network/applications/p2papplicationbase.cpp:1176 +#, fuzzy +msgid "The transfer failed. Couldn't open data source." +msgstr "feilet. Kunne ikke opprette stĆøpsel" + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "" + +#: network/applications/p2papplication.cpp:1071 +#, fuzzy +msgid "The transfer failed. Data preparation failed." +msgstr "Kontakten har kansellert invitasjonen" + +#: network/applications/p2papplication.cpp:1178 #, fuzzy msgid "The invitation was cancelled. Message was not directed to us." msgstr "Kontakten har kansellert invitasjonen" -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 #, fuzzy msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "feilet. Filen finnes ikke" -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "" -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "" -#: network/applications/p2papplication.cpp:3297 -#, fuzzy -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "feilet. Kunne ikke opprette stĆøpsel" - -#: network/applications/p2papplication.cpp:3316 -#, fuzzy -msgid "The transfer failed. An internal error occured." -msgstr "Kontakten har nektet invitasjonen" - -#: network/applications/p2papplication.cpp:3693 -#, fuzzy -msgid "The transfer failed. Couldn't open data source." -msgstr "feilet. Kunne ikke opprette stĆøpsel" - -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:3113 msgid "Waiting for connection" msgstr "" -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 #, fuzzy msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " "accept." msgstr "feilet. Kunne ikke opprette stĆøpsel" -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 #, fuzzy msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." msgstr "feilet. Kunne ikke opprette stĆøpsel" -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "" -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 #, fuzzy msgid "You are invited to start a voice conversation." msgstr "Du er invitert til Ć„ dele denne personens skrivebord." -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 #, fuzzy msgid "" "You are invited to start a voice conversation but support for this was not " "installed" msgstr "Du er invitert til et mĆøte (bruker GnomeMeeting)." -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 #, fuzzy msgid "You have cancelled the voice conversation." msgstr "Du har kansellert invitasjonen." -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 #, fuzzy msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "Kontakten har kansellert invitasjonen" -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 #, fuzzy msgid "Start voice conversation. Connecting to %1." msgstr "Starter GnomeMetting. Tilknytter " -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 #, fuzzy msgid "Start voice conversation. Listening on %1." msgstr "Starter GnomeMetting. Tilknytter " -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 #, fuzzy msgid "Inviting the contact to a voice conversation." msgstr "Inviterer kontakten til et mĆøte." -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 #, fuzzy msgid "The contact is inviting you for '%1', but this is not implemented yet." @@ -2879,661 +3399,868 @@ msgstr "" msgid "Receiving file %1" msgstr "Mottar fil " -#: network/msnconnection.cpp:477 -#, fuzzy -msgid "1 ping lost" -msgstr "Henter lister" - -#: network/msnconnection.cpp:481 -#, fuzzy -msgid "%1 pings lost" -msgstr "Henter lister" - -#: network/msnconnection.cpp:496 -#, fuzzy -msgid "The connection to the server was lost." -msgstr "Kunne ikke koble til tjener." - -#: network/msnconnection.cpp:704 -msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." +#: network/msnconnection.cpp:589 +msgid "KMess could not access the remote webservice.
Details: %1" msgstr "" -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "" - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" - -#: network/msnnotificationconnection.cpp:724 -#, fuzzy -msgid "Show MSN Messenger Service status?" -msgstr "Vis .net tjenestestatus?" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "Tjener Feil" - -#: network/msnnotificationconnection.cpp:1344 +#: network/msnnotificationconnection.cpp:1317 #, fuzzy msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" msgstr "" "Forbindelsen ble brutt fordi du \n" "er tilknyttet fra en annen MSN klient\n" "eller tilknyttet fra et annet sted," -#: network/msnnotificationconnection.cpp:1558 +#: network/msnnotificationconnection.cpp:1532 msgid "Got synchronization" msgstr "Synkronisert" -#: network/msnnotificationconnection.cpp:1699 +#: network/msnnotificationconnection.cpp:1670 #, fuzzy -msgid "Authenticating" +msgid "Authenticating..." msgstr "Autentisering feilet" -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "Mottok bekreftelse fra bruker" - -#: network/msnnotificationconnection.cpp:1752 +#: network/msnnotificationconnection.cpp:1719 msgid "Waiting for contact list..." msgstr "" -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "Overfør til meldingstjener" - -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." msgstr "" -#: network/msnnotificationconnection.cpp:2042 +#: network/msnnotificationconnection.cpp:1894 +msgid "Authentication failed, please verify your account name and password." +msgstr "" + +#: network/msnnotificationconnection.cpp:1993 #, fuzzy msgid "Connecting..." msgstr "Koble til" -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" +#: network/msnnotificationconnection.cpp:2167 +msgid "Unknown command received from the server: %1" msgstr "" -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 +#: network/msnnotificationconnection.cpp:2192 msgid "Invalid command syntax" msgstr "" -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -#, fuzzy -msgid "There was an internal error in KMess: %1" -msgstr "Intern tjenerfeil" - -#: network/msnnotificationconnection.cpp:2243 +#: network/msnnotificationconnection.cpp:2196 msgid "Invalid command parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2246 +#: network/msnnotificationconnection.cpp:2199 msgid "The email you have tried to add is not a MSN Messenger account" msgstr "" -#: network/msnnotificationconnection.cpp:2249 +#: network/msnnotificationconnection.cpp:2204 msgid "Domain name missing" msgstr "" -#: network/msnnotificationconnection.cpp:2252 +#: network/msnnotificationconnection.cpp:2208 msgid "Already logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2255 +#: network/msnnotificationconnection.cpp:2211 #, fuzzy msgid "The account name given is invalid" msgstr "Det brukernavnet er ugyldig" -#: network/msnnotificationconnection.cpp:2258 +#: network/msnnotificationconnection.cpp:2215 msgid "" "That account name is invalid, or your passport has not been confirmed yet" msgstr "" -#: network/msnnotificationconnection.cpp:2261 +#: network/msnnotificationconnection.cpp:2218 msgid "Your contact list is full" msgstr "Din kontaktliste er full." -#: network/msnnotificationconnection.cpp:2264 +#: network/msnnotificationconnection.cpp:2223 msgid "Invalid SBP parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2267 +#: network/msnnotificationconnection.cpp:2226 #, fuzzy msgid "This contact is already on your list" msgstr "Legg denne kontakten til din \"Friends\"-liste" -#: network/msnnotificationconnection.cpp:2270 +#: network/msnnotificationconnection.cpp:2230 #, fuzzy msgid "This contact is not on your list" msgstr "Legg denne kontakten til din \"Friends\"-liste" -#: network/msnnotificationconnection.cpp:2273 +#: network/msnnotificationconnection.cpp:2234 msgid "This contact is not online" msgstr "" -#: network/msnnotificationconnection.cpp:2276 +#: network/msnnotificationconnection.cpp:2239 msgid "Already in this mode" msgstr "" -#: network/msnnotificationconnection.cpp:2279 +#: network/msnnotificationconnection.cpp:2243 #, fuzzy msgid "Contact is in the opposite list" msgstr "Legg denne kontakten til din \"Friends\"-liste" -#: network/msnnotificationconnection.cpp:2282 +#: network/msnnotificationconnection.cpp:2247 +msgid "" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." +msgstr "" + +#: network/msnnotificationconnection.cpp:2251 #, fuzzy msgid "Your contact list has too many groups" msgstr "Din kontaktliste er full." -#: network/msnnotificationconnection.cpp:2285 +#: network/msnnotificationconnection.cpp:2255 #, fuzzy msgid "This group can't be changed" msgstr "Dette er en spesiell gruppe som ikke kan endres." -#: network/msnnotificationconnection.cpp:2288 +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "Din kontaktliste er full." + +#: network/msnnotificationconnection.cpp:2264 msgid "This group is not empty" msgstr "" -#: network/msnnotificationconnection.cpp:2291 -msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" -msgstr "" - -#: network/msnnotificationconnection.cpp:2294 +#: network/msnnotificationconnection.cpp:2268 msgid "The group name is too long" msgstr "" -#: network/msnnotificationconnection.cpp:2297 +#: network/msnnotificationconnection.cpp:2273 msgid "Attempted to change group \"0\"" msgstr "" -#: network/msnnotificationconnection.cpp:2300 +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +#, fuzzy +msgid "There was an internal error in KMess: %1" +msgstr "Intern tjenerfeil" + +#: network/msnnotificationconnection.cpp:2277 #, fuzzy msgid "Invalid Group" msgstr "E&ndre navn pÄ gruppe" -#: network/msnnotificationconnection.cpp:2303 +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 msgid "Switchboard server failed" msgstr "" -#: network/msnnotificationconnection.cpp:2306 +#: network/msnnotificationconnection.cpp:2287 #, fuzzy msgid "Transfer to switchboard server failed" msgstr "Overfør til meldingstjener" -#: network/msnnotificationconnection.cpp:2309 +#: network/msnnotificationconnection.cpp:2291 msgid "Direct connection (MSNSLP) error, connection failed" msgstr "" -#: network/msnnotificationconnection.cpp:2312 +#: network/msnnotificationconnection.cpp:2295 msgid "Required field missing" msgstr "" -#: network/msnnotificationconnection.cpp:2315 +#: network/msnnotificationconnection.cpp:2299 msgid "Not logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" +#: network/msnnotificationconnection.cpp:2302 +msgid "No permissions given for this account" msgstr "" -#: network/msnnotificationconnection.cpp:2322 +#: network/msnnotificationconnection.cpp:2307 msgid "Command is disabled" msgstr "" -#: network/msnnotificationconnection.cpp:2325 +#: network/msnnotificationconnection.cpp:2310 msgid "Your account is banned." msgstr "" -#: network/msnnotificationconnection.cpp:2329 +#: network/msnnotificationconnection.cpp:2314 #, fuzzy msgid "Challenge response failed" msgstr "Oversetteren av " -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" +#: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" msgstr "" -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" +#: network/msnnotificationconnection.cpp:2323 +msgid "You are opening chat sessions too fast" msgstr "" -#: network/msnnotificationconnection.cpp:2341 +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" +msgstr "Du har kansellert invitasjonen." + +#: network/msnnotificationconnection.cpp:2334 msgid "Unexpected command sequence" msgstr "" -#: network/msnnotificationconnection.cpp:2344 +#: network/msnnotificationconnection.cpp:2338 #, fuzzy msgid "Bad friend name" msgstr "Ditt vennskapsnavn:" -#: network/msnnotificationconnection.cpp:2348 +#: network/msnnotificationconnection.cpp:2344 msgid "Bad CVR data" msgstr "" -#: network/msnnotificationconnection.cpp:2353 +#: network/msnnotificationconnection.cpp:2350 msgid "The server reports KMess is flooding it with too many data" msgstr "" -#: network/msnnotificationconnection.cpp:2358 +#: network/msnnotificationconnection.cpp:2357 #, fuzzy msgid "Authentication ticket was incorrect" msgstr "Autentisering feilet" -#: network/msnnotificationconnection.cpp:2362 +#: network/msnnotificationconnection.cpp:2360 msgid "You can't start a chat with someone while you are invisible." msgstr "Du kan ikke starte en prat med noen med egen status Usynelig." -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." +#: network/msnnotificationconnection.cpp:2364 +msgid "Not accepting new contacts" msgstr "" -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." +#: network/msnnotificationconnection.cpp:2368 +msgid "" +"You have a kids passport account, you need parental consent to chat online." msgstr "" -#: network/msnnotificationconnection.cpp:2373 +#: network/msnnotificationconnection.cpp:2371 +msgid "Your passport account needs to be verified first." +msgstr "" + +#: network/msnnotificationconnection.cpp:2375 msgid "Bad USR ticket" msgstr "" -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" msgstr "" -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" +#: network/msnnotificationconnection.cpp:2399 +#, fuzzy +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." msgstr "Intern tjenerfeil" +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + #: network/msnnotificationconnection.cpp:2414 -#, fuzzy -msgid "The server is too busy" -msgstr "Tjeneren er opptatt" - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "Tjeneren er utilgjengelig" - -#: network/msnnotificationconnection.cpp:2422 msgid "Peer notification server down" msgstr "Brukers kunngjøringstjener er nede" -#: network/msnnotificationconnection.cpp:2426 +#: network/msnnotificationconnection.cpp:2418 #, fuzzy msgid "The server is going down" msgstr "Tjeneren kobles snart ned." -#: network/msnnotificationconnection.cpp:2429 +#: network/msnnotificationconnection.cpp:2422 msgid "The server is going down soon" msgstr "Tjeneren kobles snart ned." -#: network/msnnotificationconnection.cpp:2433 +#: network/msnnotificationconnection.cpp:2427 msgid "Write is blocking" msgstr "" -#: network/msnnotificationconnection.cpp:2436 +#: network/msnnotificationconnection.cpp:2431 msgid "Session is overloaded" msgstr "" -#: network/msnnotificationconnection.cpp:2441 +#: network/msnnotificationconnection.cpp:2438 #, fuzzy msgid "The server is not available" msgstr "Tjeneren er utilgjengelig" -#: network/msnnotificationconnection.cpp:2444 +#: network/msnnotificationconnection.cpp:2442 msgid "Authentication failed" msgstr "Autentisering feilet" -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" +#: network/msnnotificationconnection.cpp:2449 +msgid "Unknown error code received from the server: %1" msgstr "" -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +msgctxt "Error dialog box title" +msgid "MSN error" msgstr "" -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "" +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "minutter " +msgstr[1] "minutter " #: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." +msgid "Server closes for maintenance in %1!" msgstr "" #: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." msgstr "" -#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:2901 msgid "Lost reference to SOAP client" msgstr "" -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +msgid "KMess could not process Offline-IM messages.
Details: %1" msgstr "" -#: network/msnnotificationconnection.cpp:3209 +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "Autentisering feilet" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "Intern tjenerfeil" + +#: network/msnnotificationconnection.cpp:3242 +msgctxt "Login error message, with more details for developer versions" msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" msgstr "" -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" msgstr "" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "Kunne ikke koble til tjener." + +#: network/msnnotificationconnection.cpp:3302 +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" +msgstr "" + +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "Tjener Feil" + +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "Tidsavbrudd pƄ forbindelse" + +#: network/msnsockettcp.cpp:368 +#, fuzzy +msgid "1 ping lost" +msgstr "Henter lister" + +#: network/msnsockettcp.cpp:372 +#, fuzzy +msgid "%1 pings lost" +msgstr "Henter lister" + +#: network/msnsockettcp.cpp:387 +#, fuzzy +msgid "The connection to the server was lost." +msgstr "Kunne ikke koble til tjener." + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "Personen er frakoblet eller usynlig" -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "" -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 #, fuzzy msgid "The message \"%1\" was not received!" msgstr "ble ikke mottatt." -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "" -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +msgid "In %1's chat: %2" msgstr "" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +msgid "%1 says:
'%2'" msgstr "" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" -msgstr "" - -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" -msgstr "" - -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" -msgstr "" - -#: notification/notificationchat.cpp:200 +#: notification/chatnotification.cpp:171 #, fuzzy -msgid "%1 has sent you a handwritten message!" +msgid "%1 has sent you an offline message:
'%2'" msgstr "er tilgjengelig" -#: notification/notificationchat.cpp:204 -#, fuzzy -msgid "%1 has sent you a nudge!" -msgstr "er tilgjengelig" - -#: notification/notificationchat.cpp:208 -#, fuzzy -msgid "%1 has sent you a wink!" -msgstr "er tilgjengelig" - -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" +#: notification/chatnotification.cpp:178 +msgid "%1's chat requests attention!" msgstr "" -#: notification/notificationchat.cpp:215 +#: notification/chatnotification.cpp:183 +msgid "%1:
%2" +msgstr "" + +#: notification/chatnotification.cpp:190 #, fuzzy -msgid "%1 is sending you a file!" +msgid "%1 has sent you a handwritten message!" msgstr "er tilgjengelig" -#: notification/notificationchat.cpp:216 +#: notification/chatnotification.cpp:194 #, fuzzy -msgid "%1 has sent you an invitation!" +msgid "%1 has sent you a nudge!" msgstr "er tilgjengelig" -#: notification/notificationchat.cpp:223 +#: notification/chatnotification.cpp:198 #, fuzzy -msgid "%1 has canceled the webcam session!" +msgid "%1 has sent you a wink!" +msgstr "er tilgjengelig" + +#: notification/chatnotification.cpp:204 +msgid "%1 wants to use the webcam!" +msgstr "" + +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" +msgstr "er tilgjengelig" + +#: notification/chatnotification.cpp:206 +#, fuzzy +msgid "%1 has sent you an invitation!" +msgstr "er tilgjengelig" + +#: notification/chatnotification.cpp:213 +#, fuzzy +msgid "%1 has canceled the webcam session!" msgstr "Du har kansellert invitasjonen." -#: notification/notificationchat.cpp:224 +#: notification/chatnotification.cpp:214 #, fuzzy -msgid "%1 has canceled the file transfer!" +msgid "%1 has canceled the file transfer!" msgstr "Kontakten har kansellert invitasjonen" -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +msgid "%1's activity has been canceled!" msgstr "" -#: notification/notificationchat.cpp:232 -msgid "%1 has accepted to use the webcam!" -msgstr "" - -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" -msgstr "" - -#: notification/notificationchat.cpp:234 -msgid "%1 has accepted your invitation!" -msgstr "" - -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" -msgstr "" - -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" -msgstr "" - -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" -msgstr "" - -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" -msgstr "" - -#: notification/notificationchat.cpp:251 +#: notification/chatnotification.cpp:222 #, fuzzy -msgid "The file transfer with %1 has failed!" +msgid "%1 has accepted to use the webcam!" +msgstr "Du har kansellert invitasjonen." + +#: notification/chatnotification.cpp:223 +#, fuzzy +msgid "%1 has accepted the file transfer!" +msgstr "Kontakten har kansellert invitasjonen" + +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" +msgstr "er tilgjengelig" + +#: notification/chatnotification.cpp:231 +#, fuzzy +msgid "%1 has ended the webcam session!" +msgstr "Du har kansellert invitasjonen." + +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "Oversetteren av " -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:233 +msgid "%1's activity has ended!" msgstr "" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -#, fuzzy -msgid "%1 is now online" -msgstr "er tilgjengelig" - -#: notification/notificationcontactstatus.cpp:76 -#, fuzzy -msgid "%1 has gone away" -msgstr "er tilgjengelig" - -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/chatnotification.cpp:240 +msgid "%1's webcam session has failed!" msgstr "" -#: notification/notificationcontactstatus.cpp:78 +#: notification/chatnotification.cpp:241 #, fuzzy -msgid "%1 is now busy" -msgstr "er tilgjengelig" +msgid "The file transfer with %1 has failed!" +msgstr "Oversetteren av " -#: notification/notificationcontactstatus.cpp:79 -#, fuzzy -msgid "%1 has become invisible" -msgstr "er tilgjengelig" - -#: notification/notificationcontactstatus.cpp:80 -#, fuzzy -msgid "%1 has gone idle" -msgstr "er tilgjengelig" - -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/chatnotification.cpp:242 +msgid "%1's activity has ended with an error!" msgstr "" -#: notification/notificationcontactstatus.cpp:82 +#: notification/contactstatusnotification.cpp:70 #, fuzzy -msgid "%1 is on the phone" +msgid "%1 is now online" msgstr "er tilgjengelig" -#: notification/notificationcontactstatus.cpp:83 +#: notification/contactstatusnotification.cpp:71 #, fuzzy -msgid "%1 is out for lunch" +msgid "%1 has gone away" msgstr "er tilgjengelig" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/contactstatusnotification.cpp:72 +msgid "%1 will be right back" msgstr "" -#: settings/accountswidget.cpp:81 +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" +msgstr "er tilgjengelig" + +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" +msgstr "er tilgjengelig" + +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" +msgstr "er tilgjengelig" + +#: notification/contactstatusnotification.cpp:76 +#, fuzzy +msgid "%1 has logged out" +msgstr "er tilgjengelig" + +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" +msgstr "er tilgjengelig" + +#: notification/contactstatusnotification.cpp:78 +#, fuzzy +msgid "%1 is out for lunch" +msgstr "er tilgjengelig" + +#: notification/newemailnotification.cpp:78 +msgid "New email:
'%1'
by '%2'" +msgstr "" + +#: settings/accountpage.cpp:69 msgid "Browse..." msgstr "" -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +msgid "Browse and crop picture..." msgstr "" -#: settings/accountswidget.cpp:404 +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" + +#: settings/accountpage.cpp:448 #, fuzzy -msgid "Display Picture" +msgid "Downloading of display picture failed" msgstr "Bilde:" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" -msgstr "" - -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "" - -#: settings/chatstylepage.cpp:317 -msgid "Great!" -msgstr "" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 #, fuzzy msgid "&Delete" msgstr "Fjern K&ontakt" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "Innstillinger" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 #, fuzzy msgid "Account" msgstr "Kontoer " -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 #, fuzzy msgid "My Account" msgstr "Kontoer " -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "Varsler" -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 #, fuzzy msgid "Alerts and Notifications" msgstr "E-Post varsling" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "Prat" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "Loggføring" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "" + +#: settings/accountsettingsdialog.cpp:201 +msgid "The email address you have entered is already in use: '%1'" +msgstr "" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "Er du sikker pÄ at du vil slette denne profilen?" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "Er du sikker pƄ at du vil slette denne profilen?" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "" + +#: settings/chatstylepage.cpp:341 +msgid "Great!" +msgstr "" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "Innstillinger" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +msgid "Accounts" +msgstr "Kontoer " + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "E-Post varsling" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "Lagre logger i denne mappen:" + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." msgstr "" -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "" +#: systemtraywidget.cpp:245 +msgid "- %1 (%2)" +msgstr "" + +#~ msgid "Picture:" +#~ msgstr "Bilde:" + +#, fuzzy +#~ msgid "Speed:" +#~ msgstr "Tjener Feil" + +#, fuzzy +#~ msgid "Login Information" +#~ msgstr "Vis epost informasjon i kontaktlisten" + +#~ msgid "Logging in..." +#~ msgstr "Logger pÄ..." + +#~ msgid "Use a specified command:" +#~ msgstr "Bruk egendefinert kommando:" + +#, fuzzy +#~ msgid "Email: " +#~ msgstr "EPost" + +#, fuzzy +#~ msgid "Remove group" +#~ msgstr "&Fjern Gruppe" + +#, fuzzy +#~ msgid "Show &Display Pictures" +#~ msgstr "Bilde:" + +#, fuzzy +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr "ny epost i innboksen." + +#, fuzzy +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr "nye epost i innboksen." + +#, fuzzy +#~ msgid "Guido Solinas" +#~ msgstr "Tilgjengelig" + +#, fuzzy +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "feilet. Kunne ikke Äpne fil" + +#, fuzzy +#~ msgid "Sidebar" +#~ msgstr "Vis/skjul &Kontaktpanel" + +#, fuzzy +#~ msgid "New contact's group" +#~ msgstr "&Ny Kontakt" + +#, fuzzy +#~ msgid "Enter your login information:" +#~ msgstr "Eller skriv inn din pÄlogginsinformasjon:" + +#, fuzzy +#~ msgid "Your friendly name:" +#~ msgstr "Ditt vennskapsnavn:" + +#, fuzzy +#~ msgid "Your email address:" +#~ msgstr "E-postadresse: " + +#~ msgid "Your password:" +#~ msgstr "Ditt Passord:" + +#, fuzzy +#~ msgid "Display picture:" +#~ msgstr "Bilde:" + +#, fuzzy +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "Vis en beskjed nÄr epost mottas i \"andre mapper\"" + +#~ msgid "Organize chat folders by:" +#~ msgstr "Organizer logger i mapper etter" + +#, fuzzy +#~ msgid "&Show graphics in chat messages" +#~ msgstr "Vis tidspunkt for beskjeder" + +#~ msgid "Use Hotmail" +#~ msgstr "Bruk Hotmail" + +#~ msgid "says:" +#~ msgstr "sier:" + +#~ msgid "Current name: " +#~ msgstr "NÄværende navn: " + +#, fuzzy +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr "Vis .net tjenestestatus?" + +#~ msgid "Received user confirmation" +#~ msgstr "Mottok bekreftelse fra bruker" + +#~ msgid "Transfer to notification server" +#~ msgstr "Overfør til meldingstjener" + +#, fuzzy +#~ msgid "The server is too busy" +#~ msgstr "Tjeneren er opptatt" + +#~ msgid "The server is unavailable" +#~ msgstr "Tjeneren er utilgjengelig" + #~ msgid "Add contact" #~ msgstr "Legg til kontakt" @@ -3541,9 +4268,6 @@ msgstr "" #~ msgid "KMess Notification" #~ msgstr "E-Post varsling" -#~ msgid "Accounts" -#~ msgstr "Kontoer " - #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" @@ -3554,9 +4278,6 @@ msgstr "" #~ "Your emails" #~ msgstr "oyvind@sather.tk" -#~ msgid "Insert an emoticon" -#~ msgstr "Sett inn humørikon" - #~ msgid "Away - Idle" #~ msgstr "Borte - Inaktiv" @@ -3585,17 +4306,6 @@ msgstr "" #~ msgid "(On the Phone)" #~ msgstr "(I telefonen)" -#, fuzzy -#~ msgid "Connection timeout" -#~ msgstr "Tidsavbrudd pÄ forbindelse" - -#~ msgid "Connect" -#~ msgstr "Koble til" - -#, fuzzy -#~ msgid "Listening to %1" -#~ msgstr "Sender fil " - #, fuzzy #~ msgid "File transfer dialog message" #~ msgstr "Filoverføring fullført." @@ -3630,9 +4340,6 @@ msgstr "" #~ msgid "You can't login to hotmail with this account." #~ msgstr "Dette er ikke en gyldig hotmail-konto." -#~ msgid "The connection to the server failed." -#~ msgstr "Kunne ikke koble til tjener." - #~ msgid "You may not be connected to the internet." #~ msgstr "Kanskje du ikke er tilkoblet internett?" @@ -3660,10 +4367,6 @@ msgstr "" #~ msgid "Show popup notifications for program events" #~ msgstr "Vis oppsprettsbeskjeder for programhendelser" -#, fuzzy -#~ msgid "Server:" -#~ msgstr "Tjener Feil" - #, fuzzy #~ msgid "Connection good" #~ msgstr "Tidsavbrudd pÄ forbindelse" @@ -3680,10 +4383,6 @@ msgstr "" #~ msgid "New chat notification:" #~ msgstr "E-Post varsling" -#, fuzzy -#~ msgid "%1 is offline" -#~ msgstr "er frakoblet" - #, fuzzy #~ msgid "You have new mail:" #~ msgstr "Du har ny epost." @@ -3695,16 +4394,6 @@ msgstr "" #~ "in your inbox" #~ msgstr "i din innboks" -#, fuzzy -#~ msgid "" -#~ "\"%1\"\n" -#~ "from %2\n" -#~ "in another folder" -#~ msgstr "i en annen mappe" - -#~ msgid "and" -#~ msgstr "og" - #~ msgid "says: " #~ msgstr " sier: " @@ -3730,10 +4419,6 @@ msgstr "" #~ msgid "Chat - %1" #~ msgstr "Prat" -#, fuzzy -#~ msgid "Chat - %1 et al." -#~ msgstr " et al." - #, fuzzy #~ msgid "The transfer of %1 failed. Couldn't create a socket." #~ msgstr "feilet. Kunne ikke opprette støpsel" @@ -3747,10 +4432,6 @@ msgstr "" #~ msgid "Get New Emoticon or Sound &Themes" #~ msgstr "Hent nye Humørikoner eller lyd &Temaer" -#, fuzzy -#~ msgid "Chat message layout:" -#~ msgstr "Din meldingsskrifttype:" - #, fuzzy #~ msgid "n&ame" #~ msgstr "Ditt navn" diff --git a/po/nl.po b/po/nl.po index dd2af9a..d91912e 100644 --- a/po/nl.po +++ b/po/nl.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: kmess\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" "PO-Revision-Date: 2007-11-04 16:17+0100\n" "Last-Translator: Jaap Woldringh \n" "Language-Team: Nederlands \n" @@ -20,45 +20,38 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "Bezig met aanmelden..." - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -msgid "S&end" -msgstr "Verz&enden" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 msgid "Ne&w Line" msgstr "Nieu&we regel" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 -#, fuzzy -msgid "Sidebar" -msgstr "Zijbalk" +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 +msgid "S&end" +msgstr "Verz&enden" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +msgid "Contacts" +msgstr "Contactpersonen" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "Klik hier om het profiel te tonen van deze contactpersoon." #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." -msgstr "Klik om een email naar deze contactpersoon te sturen." +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 #, fuzzy msgid "" "Enter here the email address of the person you wish to add to your contact " @@ -66,41 +59,39 @@ msgid "" msgstr "Geef het emailadres van de persoon die u wilt toevoegen:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 msgid "Email address" msgstr "Emailadres" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 #, fuzzy -msgid "New contact's group" -msgstr "&Nieuwe contactpersoon" +msgid "Initial group" +msgstr "Groep &hernoemen" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "Voer een sneltoets in voor deze emoticon:" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "Selecteer een afbeeldingsbestand:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 #, fuzzy msgid "" "Enter a message to be automatically sent to people who try to message you." @@ -109,125 +100,338 @@ msgstr "" "aan mensen die u een bericht proberen te sturen:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 #, fuzzy msgid "&Automatic away message" msgstr "Stel een Afwezig-bericht op" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" msgstr "" -"%1\n" -"heeft u toegevoegd aan zijn/haar lijst van contactpersonen. Wilt u:" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 -msgid "&Add this contact to your \"Friends\" list" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 +#, fuzzy +msgid "&Add this person to my \"Friends\" list" msgstr "Deze contactpersoon &toevoegen aan uw lijst van \"Vrienden\"" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 -msgid "&Not add this contact, but let them see your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 +#, fuzzy +msgid "Do not add this person; only allow them to see my online state" msgstr "" "Deze contactpersoon &niet toevoegen, maar hem/haar uw online-status tonen" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 -msgid "Block this person from contacting &you or seeing your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 +#, fuzzy +msgid "&Block this person from contacting me or seeing my online state" msgstr "" "&Blokkeren dat deze persoon contact met u maakt of uw online-status ziet" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, no-c-format +msgid "Contact Properties for %1" +msgstr "Eigenschappen van contactpersoon %1" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +#, fuzzy +msgid "Restore" +msgstr "Verwijderd" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "Gebruik een alternatieve naam voor deze persoon" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "Toon aankondiging wanneer deze persoon online of offline gaat" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "Geluid:" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +#, fuzzy +msgid "&Clear Cache" +msgstr "Tabblad wissen" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +#, fuzzy +msgid "Notes" +msgstr "Notitie" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "Netwerkvenster" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +#, fuzzy +msgid "Standard" +msgstr "Ster" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "Verz&enden" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 msgid "Cancel" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -msgid "Enter your login information:" -msgstr "Vul uw inloggegevens in:" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" +msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 -msgid "Password" +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 +#, fuzzy +msgid "Email address:" +msgstr "Emailadres: " + +#. i18n: tag string +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +#, fuzzy +msgid "Password:" msgstr "Wachtwoord" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "Status bij inloggen" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 #, fuzzy msgid " Account options " msgstr "Accounti&nstellingen" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 msgid "Remem&ber this profile" msgstr "&Onthoud dit profiel" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "&Verbinden" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "Type hier uw persoonlijke bericht in" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr "Accounti&nstellingen" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "Vul de naam in die contactpersonen zullen zien als u online bent." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 -msgid "Your friendly name:" -msgstr "Uw bijnaam:" +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 +#, fuzzy +msgid "&Friendly name:" +msgstr "&Uw roepnaam" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" @@ -236,15 +440,15 @@ msgstr "" "verkrijgen op http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 #, fuzzy -msgid "Your email address:" +msgid "&Email address:" msgstr "Emailadres: " #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" @@ -253,39 +457,40 @@ msgstr "" "verkrijgen op http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" -msgstr "Uw wachtwoord:" - -#. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 #, fuzzy -msgid "Remember Password" +msgid "&Password:" msgstr "Wachtwoord" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 -msgid "Display picture:" -msgstr "Afbeelding:" +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 +#, fuzzy +msgid "&Remember Password" +msgstr "Wachtwoord" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 +msgid "Display Picture" +msgstr "Afbeelding tonen" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 msgid "C&hange..." msgstr "&Wijzigen..." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -msgid "Don't show a displa&y picture" -msgstr "&Geen afbeelding tonen" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -303,36 +508,39 @@ msgstr "" "gast of met een publiek systeem werkt (bijvoorbeeld in een InternetcafƩ)." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +#, fuzzy +msgid "Re&member the settings of this account" msgstr "Onthoud de instellingen van deze account" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "" "Als deze optie aanstaat wordt bij het opstarten van Kmess automatisch " "ingelogd met deze account." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 -msgid "Login &with this account automatically at start-up" +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 +#, fuzzy +msgid "Login &with this account automatically" msgstr "&Automatisch aanmelden met deze account tijdens het starten van KMess" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "In te stellen status bij het inloggen:" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "&Alle chats opslaan" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -344,8 +552,8 @@ msgstr "" "gebruiken." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." @@ -354,26 +562,26 @@ msgstr "" "niet bevestigd kan worden." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "Verzoek om een email ter bevestiging" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 msgid "https://accountservices.passport.net/" msgstr "https://accountservices.passport.net/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "Ga naar accountservices.passport.net" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." @@ -382,38 +590,103 @@ msgstr "" "verkrijgen voor een Passport account." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "Registreer nieuwe account" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "Ga naar register.passport.com" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 -msgid "Popup notifications" +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 +#, fuzzy +msgid "Saved accounts:" +msgstr "Accounts" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +msgid "Click" +msgstr "Klik" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "" +"Klik hier om nieuwe aangepaste emoticons toe te voegen die u naar uw " +"contactpersonen wilt kunnen sturen." + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "Account" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "Selecteer een emoticon en klik hier om die te verwijderen." + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "Verwijderd" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "Meldingen" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "Contactpersonen" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 msgid "Show notifications when your contacts:" msgstr "Toon een melding wanneer uw contactpersoon:" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." @@ -422,15 +695,15 @@ msgstr "" "contactpersonen verbinding maakt met MSN." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 #, fuzzy msgid "&Go online" msgstr "O&ffline gaat" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." @@ -439,14 +712,14 @@ msgstr "" "contactpersonen een conversatie met u begint." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "Een &chat met u begint" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." @@ -455,14 +728,14 @@ msgstr "" "uw contactpersonen u een bericht stuurt." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 msgid "S&end you a message" msgstr "U &een bericht stuurt" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." @@ -471,16 +744,16 @@ msgstr "" "contactpersonen zijn MSN-status wijzigt." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "Zijn/haar &status wijzigt" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." @@ -489,38 +762,90 @@ msgstr "" "contactpersonen offline gaat." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 msgid "Go o&ffline" msgstr "O&ffline gaat" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 -msgid "Show notifications when you recei&ve an email" -msgstr "Toon een melding als u een email ont&vangt" +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 +#, fuzzy +msgid "Email Events" +msgstr "Emailadres" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" +msgstr "" +"Toon een melding als een emailbericht in een \"andere map\" wordt ontvangen" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" +"Als deze optie aanstaat wordt er ook een aankondiging getoond als er email " +"in een andere map wordt ontvangen. Deze optie is alleen beschikbaar voor " +"Hotmail-accounts." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +msgid "In other folders" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "Bepaalt na hoeveel seconden aankondigingen weer weggaan." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "Verberg aankondigingen na" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "seconden" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "Waarschuwingen" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "Toon &offline contactpersonen" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -538,14 +863,32 @@ msgstr "" "maar alleen de eerste buzzer heeft effect.

" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "&Schud het chatvenster bij zenden of ontvangen van een buzzer" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" +"Als deze optie actief is ziet u een aankondiging als nieuwe email wordt " +"ontvangen. Het aantal ongelezen berichten wordt ook getoond, boven de lijst " +"van contactpersonen. Deze optie is alleen beschikbaar voor Hotmail-accounts." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." @@ -555,30 +898,37 @@ msgstr "" "voor audio." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 -msgid "Inform contacts w&hich song I am listening to." +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 +#, fuzzy +msgid "Inform contacts w&hich song I am listening to" msgstr "Contactpersonen informeren naar &welk liedje ik nu luister." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 +#, fuzzy msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" "Als deze optie aan staat wordt uw status automatisch veranderd in \"Afwezig " "- niet actief\" wanneer u de computer enkele minuten niet heeft gebruikt." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "Verander de status in \"&Afwezig-niet actief\" indien niet actief" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." @@ -587,47 +937,48 @@ msgstr "" "\"Afwezig - niet actief\" wordt veranderd." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 msgid "Become idle after" msgstr "Word \"Niet actief\" na" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "minuten" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "" "Als deze optie aanstaat worden chatgesprekken opgeslagen in een opgegeven " "map." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 msgid "Log &all chats" msgstr "&Alle chats opslaan" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 msgid "" "Choose the directory on your system where you'd like to save the chat logs." msgstr "Kies de map waarin chatgesprekken bewaard moeten worden." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" msgstr "Bewaar chat-bestanden in deze hoofdmap:" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." @@ -636,124 +987,102 @@ msgstr "" "mappen in naar jaar, maand of dag\" aan staat." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "Deel de chat-mappen in naar:" +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "Jaar" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 msgid "Month" msgstr "Maand" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "Dag" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" msgstr "Bewaar alle chats in de hoofdmap" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." -msgstr "Dit is het lettertype en de kleur ervan, gebruikt in uw chatberichten." - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "Het lettertype voor uw berichten:" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" -"Deze optie geeft de mogelijkheid om een ander lettertype en -kleur in te " -"stellen voor de berichten van contactpersonen." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "Gebruik dit lettertype voor de berichten van uw contactpersonen:" - +#. i18n: file ./settings/chatstylepage.ui line 45 #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "" "Dit geeft de mogelijkheid om de stijl te veranderen die KMess voor alle " "chatberichten gebruikt." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +#, fuzzy +msgid "&Chat style:" msgstr "Chatstijl:" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "Instellingen" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "Dit zorgt ervoor dat emoticons in chatberichten getoond worden." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 -msgid "&Show graphics in chat messages" -msgstr "Toon &afbeeldingen in chatberichten" +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 +#, fuzzy +msgid "&Show emoticons" +msgstr "&Emoticons weergeven" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "" "Dit zorgt ervoor dat in chatberichten de tijd van ontvangst wordt getoond." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 -msgid "S&how time in chat messages" +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 +#, fuzzy +msgid "S&how messages time" msgstr "Toon &tijd in chatberichten" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" -"Dit geeft de mogelijkheid om een effect aan lettertypen mee te geven. Door " -"*vet*, /schuin/ of _onderstreept_ te typen worden die woorden vet, schuin of " -"onderstreept weergegeven." - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "" -"&Gebruik effecten van lettertypen in berichten, zoals *vet*, /cursief/ en " -"_onderstreept_" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -766,155 +1095,306 @@ msgstr "" "De uiteindelijke weergave is afhankelijk van de gekozen chatstijl." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "&Voeg op elkaar volgende berichten van dezelfde contactpersoon samen" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 +#, fuzzy +msgid "Always" +msgstr "Afwezig" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "Er zijn teveel groepen in uw lijst van contactpersonen" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "Watje" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." +msgstr "Dit is het lettertype en de kleur ervan, gebruikt in uw chatberichten." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "Het lettertype voor uw berichten:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." msgstr "" -"U kunt het emailprogramma kiezen waarmee KMess uw emailberichten opent." +"Deze optie geeft de mogelijkheid om een ander lettertype en -kleur in te " +"stellen voor de berichten van contactpersonen." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "Emailprogramma" +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "Gebruik dit lettertype voor de berichten van uw contactpersonen:" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "Gebruik Hotmail" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "Gebruik een bepaalde opdracht:" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "Melding van email" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." msgstr "" -"Als deze optie actief is ziet u een aankondiging als nieuwe email wordt " -"ontvangen. Het aantal ongelezen berichten wordt ook getoond, boven de lijst " -"van contactpersonen. Deze optie is alleen beschikbaar voor Hotmail-accounts." +"Dit geeft de mogelijkheid om een effect aan lettertypen mee te geven. Door " +"*vet*, /schuin/ of _onderstreept_ te typen worden die woorden vet, schuin of " +"onderstreept weergegeven." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 -msgid "Show email information" -msgstr "Toon informatie over nieuwe email" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 -msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +#, fuzzy +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" msgstr "" -"Als deze optie aanstaat wordt er ook een aankondiging getoond als er email " -"in een andere map wordt ontvangen. Deze optie is alleen beschikbaar voor " -"Hotmail-accounts." +"&Gebruik effecten van lettertypen in berichten, zoals *vet*, /cursief/ en " +"_onderstreept_" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" msgstr "" -"Toon een melding als een emailbericht in een \"andere map\" wordt ontvangen" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "Wachten op lijst met contactpersonen..." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 msgid "&Emoticon Themes" msgstr "Thema's voor &Emoticons" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 msgid "Available emoticon styles:" msgstr "Beschibare emoticontypen:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 msgid "&Custom Emoticons" msgstr "&Aangepaste emoticons" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 msgid "Custom emoticons for this account:" msgstr "Aangepaste emoticons voor deze account:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -msgid "Click" -msgstr "Klik" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "" -"Klik hier om nieuwe aangepaste emoticons toe te voegen die u naar uw " -"contactpersonen wilt kunnen sturen." - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "Nieu&we toevoegen..." #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "Klik hier om de geselecteerde emoticon een andere naam te geven." #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 msgid "Re&name" msgstr "Her&noemen" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "Selecteer een emoticon en klik hier om die te verwijderen." - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 msgid "Remo&ve" msgstr "&Verwijderen" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +#, fuzzy +msgid "Web Browser" +msgstr "Verlepte roos" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +msgid "&Use the KDE default browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "zegt:" +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "Emailprogramma" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +msgid "&Use the KDE default email client" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +msgid "File Transfers" +msgstr "Bestandsoverdrachten" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "Bewaar chat-bestanden in deze hoofdmap:" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +#, fuzzy +msgid "and" +msgstr "Verdrietig" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "Bestandsoverdrachten" #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -924,131 +1404,12 @@ msgstr "Ik ben even weg van mijn computer" msgid "Your name" msgstr "Uw naam" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "uw_naam@hotmail.com" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "Online" - -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "Afwezig" - -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "Ben zo terug" - -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "Bezig" - -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "Onzichtbaar" - -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "Niets te doen" - -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "Offline" - -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "Aan de telefoon" - -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "Aan het lunchen" - -#: chat/chatmaster.cpp:1061 -msgid "%1 is sending a wink: %2" -msgstr "%1 stuurt een wink: %2" - -#: chat/chatmessagestyle.cpp:302 -msgid "%1 says:" -msgstr "%1 zegt:" - -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 -msgid "Add this emoticon: %1" -msgstr "Voeg deze emoticon toe: %1" - -#: chat/chatview.cpp:529 -msgid "" -"Could not save chat log. Make sure you have permission to write in the " -"folder where logs are being saved." -msgstr "" -"Kon de log van deze chat niet opslaan. Controleer uw permissie voor " -"schrijven in de map waar logs in worden opgeslagen." - -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 -msgid "" -"The file '%1' already exists.\n" -"do you want to overwrite it?" -msgstr "" -"Bestand '%1' bestaat al.\n" -"wilt u het overschrijven?" - -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Overwrite File" -msgstr "Bestand overschrijven" - -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Over&write" -msgstr "&Overschrijven" - -#: chat/chatview.cpp:977 -msgid "Add this &Emoticon..." -msgstr "Deze &Emoticon toevoegen..." - -#: chat/chatview.cpp:984 -msgid "Send &Email" -msgstr "&Email sturen" - -#: chat/chatview.cpp:988 -msgid "Copy E&mail" -msgstr "E&mail kopiëren" - -#: chat/chatview.cpp:995 -msgid "Visit &Link" -msgstr "Koppe&ling bezoeken" - -#: chat/chatview.cpp:999 -msgid "Copy &Address" -msgstr "&Adres kopiëren" - -#: chat/chatview.cpp:1013 -msgid "&Copy text" -msgstr "Tekst &kopiëren" - -#: chat/chatview.cpp:1014 -msgid "Select &All" -msgstr "&Alles selecteren" - -#: chat/chatview.cpp:1015 -msgid "Save chat to &File" -msgstr "Chat in &bestand opslaan" - -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "Chat" - -#: chat/chatwindow.cpp:239 +#: chat/chat.cpp:124 msgid "" "You can't start this invitation because there are multiple contacts in this " "chat." @@ -1056,308 +1417,518 @@ msgstr "" "U kunt deze uitnodiging niet sturen omdat er meerdere personen actief zijn " "in deze chat." -#: chat/chatwindow.cpp:276 -msgid "%1 has joined the chat." +#: chat/chat.cpp:158 +#, fuzzy +msgid "%1 has joined the chat." msgstr "%1 neemt nu ook deel aan deze chat." -#: chat/chatwindow.cpp:327 -msgid "The conversation went idle, %1 has left the chat." +#: chat/chat.cpp:211 +#, fuzzy +msgid "The conversation went idle, %1 has left the chat." msgstr "Het gesprek valt stil, %1 heeft de chat verlaten." -#: chat/chatwindow.cpp:331 -msgid "%1 has left the chat." +#: chat/chat.cpp:215 +#, fuzzy +msgid "%1 has left the chat." msgstr "%1 heeft de chat verlaten." -#: chat/chatwindow.cpp:593 -msgid "%1 - Chat" -msgstr "%1 - Chat" - -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" +#: chat/chat.cpp:364 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 and %2" msgstr "%1 en %2 - Chat" -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" +#: chat/chat.cpp:371 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 et al." msgstr "%1 en anderen - Chat" -#: chat/chatwindow.cpp:757 -msgid "Contacts" -msgstr "Contactpersonen" - -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 -msgid "Emoticons" -msgstr "Emoticons" - -#: chat/chatwindow.cpp:819 -msgid "My emoticons" -msgstr "Mijn emoticons" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" +#: chat/chat.cpp:630 +#, fuzzy +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" msgstr " (Dit bericht werd automatisch verzonden)" -#: chat/chatwindow.cpp:1502 +#: chat/chat.cpp:934 +#, fuzzy +msgid "You received a wink from %1." +msgstr "U heeft een wink ontvangen van %1" + +#: chat/chat.cpp:971 msgid "" "The wink could not be displayed. Make sure you have 'cabextract' installed." msgstr "" "De wink kon niet worden getoond. Controleer of het programma 'cabextract' is " "geïnstalleerd." -#: chat/chatwindow.cpp:1511 +#: chat/chat.cpp:980 msgid "The wink could not be displayed. The data could not be read." msgstr "" "De wink kon niet worden getoond. De gegevens konden niet worden gelezen." -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" +#: chat/chat.cpp:1080 +#, fuzzy +msgid "You have received a wink from %1" msgstr "U heeft een wink ontvangen van %1" -#: chat/chatwindow.cpp:1755 +#: chat/chat.cpp:1100 #, fuzzy -msgid "Show Side&bar" -msgstr "Zijbalk" - -#: chat/chatwindow.cpp:1756 -#, fuzzy -msgid "Show the contact sidebar" -msgstr "Weergeven of verbergen van de zijbalk met contactpersonen" - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -#, fuzzy -msgid "Hide Side&bar" -msgstr "Zijbalk" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -#, fuzzy -msgid "Hide the contact sidebar" -msgstr "Weergeven of verbergen van de zijbalk met contactpersonen" - -#: chat/chatwindow.cpp:1787 -msgid "The message '%1' could not be sent." -msgstr "Het bericht '%1' kon niet worden verstuurd." - -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" +msgid "You received a nudge from %1!" msgstr "U heeft een buzzer ontvangen van %1!" -#: chat/chatwindow.cpp:1876 +#: chat/chat.cpp:1119 +#, fuzzy +msgid "The message '%1' could not be sent." +msgstr "Het bericht '%1' kon niet worden verstuurd." + +#: chat/chat.cpp:1183 msgid "You've sent a nudge to %1!" msgstr "U heeft een buzzer verstuurd naar %1!" -#: chat/chatwindow.cpp:1883 +#: chat/chat.cpp:1190 msgid "You've sent a nudge!" msgstr "U heeft een buzzer verstuurd!" -#: chat/chatwindow.cpp:1972 -msgid "%1 is typing." -msgstr "%1 typt een bericht." +#: chat/chatmaster.cpp:1219 +msgid "%1 is sending a wink: %2" +msgstr "%1 stuurt een wink: %2" -#: chat/chatwindow.cpp:1981 -msgid "%1 and %2 are typing." -msgstr "%1 en %2 typen een bericht." +#: chat/chatmessagestyle.cpp:298 +msgid "%1 says:" +msgstr "%1 zegt:" -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." -msgstr "%1, %2 en nog %3 anderen typen een bericht." +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 +msgid "Add this emoticon: %1" +msgstr "Voeg deze emoticon toe: %1" -#: chat/chatwindowinterface.cpp:175 -msgid "&Chat" -msgstr "&Chat" - -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 msgid "&Invite" msgstr "U&itnodigen" -#: chat/chatwindowinterface.cpp:179 +#: chat/chatview.cpp:695 +msgid "" +"Could not save chat log. Make sure you have permission to write in the " +"folder where logs are being saved." +msgstr "" +"Kon de log van deze chat niet opslaan. Controleer uw permissie voor " +"schrijven in de map waar logs in worden opgeslagen." + +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 +msgid "" +"The file '%1' already exists.\n" +"do you want to overwrite it?" +msgstr "" +"Bestand '%1' bestaat al.\n" +"wilt u het overschrijven?" + +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Overwrite File" +msgstr "Bestand overschrijven" + +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Over&write" +msgstr "&Overschrijven" + +#: chat/chatview.cpp:1275 +msgid "Add this &Emoticon..." +msgstr "Deze &Emoticon toevoegen..." + +#: chat/chatview.cpp:1282 +msgid "Send &Email" +msgstr "&Email sturen" + +#: chat/chatview.cpp:1286 +msgid "Copy E&mail" +msgstr "E&mail kopiëren" + +#: chat/chatview.cpp:1293 +msgid "Visit &Link" +msgstr "Koppe&ling bezoeken" + +#: chat/chatview.cpp:1297 +msgid "Copy &Address" +msgstr "&Adres kopiëren" + +#: chat/chatview.cpp:1312 +msgid "&Copy text" +msgstr "Tekst &kopiëren" + +#: chat/chatview.cpp:1313 +msgid "Select &All" +msgstr "&Alles selecteren" + +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 +msgid "Save chat to &File" +msgstr "Chat in &bestand opslaan" + +#: chat/chatwindow.cpp:489 +msgid "&Chat" +msgstr "&Chat" + +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "Stuur een &bestand" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "Een &vergadering starten" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 msgid "Send a &Nudge!" msgstr "Stuur een &buzzer!" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "Chat bewaren" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 #, fuzzy msgid "&Emoticons" msgstr "Emoticons" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +#, fuzzy +msgid "Close &All Tabs" +msgstr "Tabblad afsluiten" + +#: chat/chatwindow.cpp:504 #, fuzzy msgid "Meeting" msgstr "Instellingen" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "Start of stop een &conversatie" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "Le&ttertype veranderen" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "&Kleur van de letters veranderen" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 #, fuzzy msgid "&Font" msgstr "&Verbinden" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 #, fuzzy msgid "Font &Color" msgstr "&Kleur van de letters veranderen" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +msgid "Emoticons" +msgstr "Emoticons" + +#: chat/chatwindow.cpp:658 +msgid "My emoticons" +msgstr "Mijn emoticons" + +#: chat/chatwindow.cpp:738 #, fuzzy msgid "&Settings" msgstr "Instellingen" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "&Emoticons weergeven" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +#, fuzzy +msgid "Hide Side&bar" +msgstr "Zijbalk" + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "Zijbalk" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +#, fuzzy +msgid "Hide the contact sidebar" +msgstr "Weergeven of verbergen van de zijbalk met contactpersonen" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +#, fuzzy +msgid "Close all tabs" +msgstr "Tabblad afsluiten" + +#: chat/chatwindow.cpp:856 +#, fuzzy +msgid "Close current tab" +msgstr "Tabblad afsluiten" + +#: chat/chatwindow.cpp:1467 +#, fuzzy +msgid "Show Side&bar" +msgstr "Zijbalk" + +#: chat/chatwindow.cpp:1468 +#, fuzzy +msgid "Show the contact sidebar" +msgstr "Weergeven of verbergen van de zijbalk met contactpersonen" + +#: chat/chatwindow.cpp:1565 +msgid "%1 is typing." +msgstr "%1 typt een bericht." + +#: chat/chatwindow.cpp:1575 +msgid "%1 and %2 are typing." +msgstr "%1 en %2 typen een bericht." + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "%1, %2 en nog %3 anderen typen een bericht." + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "Chat" + +#: chat/chatwindow.cpp:1615 +#, fuzzy +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "%1 - Chat" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "Een email &sturen" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 msgid "&View Profile" msgstr "&Profiel tonen" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "&Contactpersoon toevoegen" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 msgid "A&llow Contact" msgstr "Cont&actpersoon toestaan" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 msgid "&Delete Contact" msgstr "Contactpersoon verwij&deren" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "Contactpersoon &blokkeren" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "Blokkering &opheffen" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 msgid "&Friendly Name" msgstr "&Uw roepnaam" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "&Persoonlijk bericht" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 msgid "&Email Address" msgstr "&Emailadres" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "&Kopiƫren..." -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 msgid "Blocked" msgstr "Geblokkeerd" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 #, fuzzy msgid "The contact is %1" msgstr "Deze contactpersoon is niet online" -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +#, fuzzy +msgid "Add to Chat" +msgstr "Contactpersoon toevoegen" + +#: chat/emoticonsidebar.cpp:213 +#, fuzzy +msgid "Insert new" +msgstr "Emoticon invoegen" + +#: chat/emoticonsidebar.cpp:214 +msgid "Edit" +msgstr "" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +#, fuzzy +msgid "Remove" +msgstr "Verwijderd" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 #, fuzzy msgid "Web Messenger" msgstr "Webdesign" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +#, fuzzy +msgid "Windows Live Messenger %1" +msgstr "Webdesign" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "Online" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "Offline" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "Toegestaan" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "Verwijderd" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 +#, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr "%1 %2" + +#: contactlistviewdelegate.cpp:150 #, fuzzy msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "%1 %2" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" -msgstr "Deze account heeft geen inbox voor Hotmail!" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "Afwezig" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "Ben zo terug" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "Bezig" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "Onzichtbaar" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" +msgstr "Niets te doen" + +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "Aan de telefoon" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "Aan het lunchen" + +#: dialogs/addcontactdialog.cpp:48 #, fuzzy msgid "Add a Contact" msgstr "Contactpersoon toevoegen" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 #, fuzzy msgid "No group" msgstr "Groep verwijderen" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 msgid "Add New Emoticon" msgstr "Emoticon toevoegen" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "Emoticons" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "De emoticon \"%1\" bestaat al, wilt u die vervangen?" @@ -1365,65 +1936,69 @@ msgstr "De emoticon \"%1\" bestaat al, wilt u die vervangen?" msgid "Specify an Away message" msgstr "Stel een Afwezig-bericht op" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "Gebruik een alternatieve naam voor deze persoon" +#: dialogs/contactaddeduserdialog.cpp:85 +#, fuzzy +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " +msgstr "" +"%1\n" +"heeft u toegevoegd aan zijn/haar lijst van contactpersonen. Wilt u:" -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" -msgstr "Toon aankondiging wanneer deze persoon online of offline gaat" +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "Verbonden" -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "Afbeelding:" +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +msgid "Not seen yet" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "Geluid:" +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +#, fuzzy +msgid "No messages yet" +msgstr "Toon &tijd in chatberichten" -#: dialogs/contactpropertiesdialog.cpp:234 -msgid "Contact Properties for %1" -msgstr "Eigenschappen van contactpersoon %1" +#: dialogs/contactpropertiesdialog.cpp:381 +msgid "Last seen: %1" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " -msgstr "Emailadres: " +#: dialogs/contactpropertiesdialog.cpp:382 +msgid "Last message: %1" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "Huidige naam: " +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "Email" -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" -msgstr "Netwerkvenster" +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "Emailprogramma" -#: dialogs/networkwindow.cpp:57 +#: dialogs/networkwindow.cpp:79 #, fuzzy msgid "S&ave tab" msgstr "Tabblad bewaren" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 #, fuzzy msgid "C&lear tab" msgstr "Tabblad wissen" -#: dialogs/networkwindow.cpp:59 -#, fuzzy -msgid "Cl&ose tab" -msgstr "Tabblad afsluiten" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 #, fuzzy msgid "" "No connections are present.\n" "Cannot open the Network Window." msgstr "Er zijn geen verbindingen. Kan het netwerkvenster niet openen." -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 #, fuzzy msgid "" "Could not save the Network Window log. Make sure you have permission to " @@ -1432,59 +2007,86 @@ msgstr "" "Kan de log voor het netwerkvenster niet opslaan. Controleer uw permissie " "voor schrijven in de map waar de log moet worden opgeslagen." -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "Kan het tabblad niet sluiten voor de voornaamste verbinding." -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +#, fuzzy +msgid "Cannot send commands to this kind of connection!" +msgstr "Kan het tabblad niet sluiten voor de voornaamste verbinding." + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 #, fuzzy msgid "Completed" msgstr "Computer" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "%1 MB" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "%1 kB" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "%1 bytes" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +msgid "%1 of %2 received." msgstr "" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +msgid "%1 of %2 sent." msgstr "" -#: dialogs/transferwindow.cpp:55 -msgid "File Transfers" -msgstr "Bestandsoverdrachten" +#: dialogs/transferentry.cpp:373 +msgid "infinite" +msgstr "" -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 #, fuzzy msgid "Cl&ean Up" msgstr "&Opschonen" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " "the theme folder '%1'." @@ -1492,345 +2094,360 @@ msgstr "" "Kon het thema voor de emoticons niet opslaan. Controleer uw permissie voor " "schrijven in de themamap '%1'." -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 msgid "Smile" msgstr "Lach" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "Wink" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "Tong uitsteken" -#: emoticontheme.cpp:797 +#: emoticontheme.cpp:812 msgid "Big smile" msgstr "Grote grijns" -#: emoticontheme.cpp:798 +#: emoticontheme.cpp:813 msgid "Sad" msgstr "Verdrietig" -#: emoticontheme.cpp:799 +#: emoticontheme.cpp:814 msgid "Crying" msgstr "Huilen" -#: emoticontheme.cpp:800 +#: emoticontheme.cpp:815 msgid "Angry" msgstr "Kwaad" -#: emoticontheme.cpp:801 +#: emoticontheme.cpp:816 msgid "Confused" msgstr "Verward" -#: emoticontheme.cpp:802 +#: emoticontheme.cpp:817 msgid "Embarrassed" msgstr "Beschaamd" -#: emoticontheme.cpp:803 +#: emoticontheme.cpp:818 msgid "Disappointed" msgstr "Teleurgesteld" -#: emoticontheme.cpp:804 +#: emoticontheme.cpp:819 msgid "Hot" msgstr "Heet" -#: emoticontheme.cpp:805 +#: emoticontheme.cpp:820 msgid "Baring teeth" msgstr "Woest" -#: emoticontheme.cpp:806 +#: emoticontheme.cpp:821 msgid "Nerd" msgstr "Watje" -#: emoticontheme.cpp:807 +#: emoticontheme.cpp:822 msgid "Sick" msgstr "Ziek" -#: emoticontheme.cpp:808 +#: emoticontheme.cpp:823 msgid "Surprised" msgstr "Verrast" -#: emoticontheme.cpp:809 +#: emoticontheme.cpp:824 msgid "Party" msgstr "Feest" -#: emoticontheme.cpp:810 +#: emoticontheme.cpp:825 msgid "Sleepy" msgstr "Slaperig" -#: emoticontheme.cpp:811 +#: emoticontheme.cpp:826 msgid "Thinking" msgstr "Denk na" -#: emoticontheme.cpp:812 +#: emoticontheme.cpp:827 msgid "Don't tell anyone" msgstr "Niet doorvertellen" -#: emoticontheme.cpp:813 +#: emoticontheme.cpp:828 msgid "Secret telling" msgstr "Stiekem vertellen" -#: emoticontheme.cpp:814 +#: emoticontheme.cpp:829 msgid "Eye-rolling" msgstr "Nou moe" -#: emoticontheme.cpp:815 +#: emoticontheme.cpp:830 msgid "Sarcastic" msgstr "Sarcastisch" -#: emoticontheme.cpp:816 +#: emoticontheme.cpp:831 msgid "I don't know" msgstr "Ik weet het niet" -#: emoticontheme.cpp:817 +#: emoticontheme.cpp:832 msgid "Be right back" msgstr "Ben zo terug" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "Engel" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "Knuffel links" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "Jongen" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "Rood hartje" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "Rode roos" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "Duim omhoog" -#: emoticontheme.cpp:824 +#: emoticontheme.cpp:839 msgid "Dog face" msgstr "Hondekop" -#: emoticontheme.cpp:825 +#: emoticontheme.cpp:840 msgid "Sun" msgstr "Zon" -#: emoticontheme.cpp:826 +#: emoticontheme.cpp:841 msgid "Devil" msgstr "Duivel" -#: emoticontheme.cpp:827 +#: emoticontheme.cpp:842 msgid "Right hug" msgstr "Knuffel rechts" -#: emoticontheme.cpp:828 +#: emoticontheme.cpp:843 msgid "Girl" msgstr "Meisje" -#: emoticontheme.cpp:829 +#: emoticontheme.cpp:844 msgid "Broken heart" msgstr "Gebroken hart" -#: emoticontheme.cpp:830 +#: emoticontheme.cpp:845 msgid "Wilted rose" msgstr "Verlepte roos" -#: emoticontheme.cpp:831 +#: emoticontheme.cpp:846 msgid "Thumbs down" msgstr "Duim omlaag" -#: emoticontheme.cpp:832 +#: emoticontheme.cpp:847 msgid "Cat face" msgstr "Kattekop" -#: emoticontheme.cpp:833 +#: emoticontheme.cpp:848 msgid "Sleeping half-moon" msgstr "Maansikkel" -#: emoticontheme.cpp:834 +#: emoticontheme.cpp:849 msgid "Red lips" msgstr "Rode lippen" -#: emoticontheme.cpp:835 +#: emoticontheme.cpp:850 msgid "Clapping" msgstr "Klappen" -#: emoticontheme.cpp:836 +#: emoticontheme.cpp:851 msgid "Crossed fingers" msgstr "Duimen" -#: emoticontheme.cpp:837 +#: emoticontheme.cpp:852 msgid "Auto" msgstr "Auto" -#: emoticontheme.cpp:838 +#: emoticontheme.cpp:853 msgid "Airplane" msgstr "Vliegtuig" -#: emoticontheme.cpp:839 +#: emoticontheme.cpp:854 msgid "Turtle" msgstr "Schildpad" -#: emoticontheme.cpp:840 +#: emoticontheme.cpp:855 msgid "Snail" msgstr "Slak" -#: emoticontheme.cpp:841 +#: emoticontheme.cpp:856 msgid "Black sheep" msgstr "Zwart schaap" -#: emoticontheme.cpp:842 +#: emoticontheme.cpp:857 msgid "Goat" msgstr "Geit" -#: emoticontheme.cpp:843 +#: emoticontheme.cpp:858 msgid "Vampire bat" msgstr "Vampier" -#: emoticontheme.cpp:844 +#: emoticontheme.cpp:859 msgid "Pizza" msgstr "Pizza" -#: emoticontheme.cpp:845 +#: emoticontheme.cpp:860 msgid "Beer mug" msgstr "Bier" -#: emoticontheme.cpp:846 +#: emoticontheme.cpp:861 msgid "Martini glass" msgstr "Wijnglas" -#: emoticontheme.cpp:847 +#: emoticontheme.cpp:862 msgid "Coffee cup" msgstr "Koffie" -#: emoticontheme.cpp:848 +#: emoticontheme.cpp:863 msgid "Birthday cake" msgstr "Taart" -#: emoticontheme.cpp:849 +#: emoticontheme.cpp:864 msgid "Plate" msgstr "Bord" -#: emoticontheme.cpp:850 +#: emoticontheme.cpp:865 msgid "Bowl" msgstr "Schaal" -#: emoticontheme.cpp:851 +#: emoticontheme.cpp:866 msgid "Star" msgstr "Ster" -#: emoticontheme.cpp:852 +#: emoticontheme.cpp:867 msgid "Rainbow" msgstr "Regenboog" -#: emoticontheme.cpp:853 +#: emoticontheme.cpp:868 msgid "Stormy cloud" msgstr "Onweer" -#: emoticontheme.cpp:854 +#: emoticontheme.cpp:869 msgid "Lightning" msgstr "Bliksem" -#: emoticontheme.cpp:855 +#: emoticontheme.cpp:870 msgid "Umbrella" msgstr "Paraplu" -#: emoticontheme.cpp:856 +#: emoticontheme.cpp:871 msgid "Island with a palm tree" msgstr "Tropisch eiland" -#: emoticontheme.cpp:857 +#: emoticontheme.cpp:872 msgid "Telephone receiver" msgstr "Telefoon" -#: emoticontheme.cpp:858 +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "Mobieltje" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "Email" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 msgid "Clock" msgstr "Klok" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 msgid "Camera" msgstr "Camera" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "Filmstrook" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "Notitie" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "Handboeien" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 msgid "Money" msgstr "Geld" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "Lampje" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "Sigaret" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "Voetbal" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "Cadeautje" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "X-Box" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "Computer" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 msgid "KMess Icon" msgstr "Pictogram KMess" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "De server is niet bereikbaar" + +#: initialview.cpp:377 +msgid "Connect" +msgstr "Verbinden" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "Verbin&ding verbreken" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "" -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "" -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "Nieuwe &groep" + +#: kmess.cpp:226 msgid "Add a group" msgstr "Groep toevoegen" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "Geef de naam voor deze groep:" -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "Het adres dat u opgaf voor de contactpersoon, is ongeldig: '%1'" - -#: kmess.cpp:638 +#: kmess.cpp:569 msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" @@ -1838,63 +2455,90 @@ msgstr "" "Weet u zeker dat u contactpersoon %1 wilt verwijderen uit de " "lijst?" -#: kmess.cpp:640 +#: kmess.cpp:571 msgid "Remove contact" msgstr "Contactpersoon verwijderen" -#: kmess.cpp:641 kmess.cpp:684 -#, fuzzy -msgid "Remove" -msgstr "Verwijderd" - -#: kmess.cpp:642 +#: kmess.cpp:573 msgid "Remove and block" msgstr "Verwijderen en blokkeren" -#: kmess.cpp:681 +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "" "Weet u zeker dat u groep %1 wilt verwijderen uit de lijst met " "contactpersonen?" -#: kmess.cpp:683 -msgid "Remove group" -msgstr "Groep verwijderen" +#: kmess.cpp:631 +#, fuzzy +msgctxt "dialog button" +msgid "Remove" +msgstr "Verwijderd" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "Dit is een speciale groep die niet kan worden gewijzigd." -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 msgid "Rename group" msgstr "Groep hernoemen" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "Verbonden" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "Aanmelden is mislukt" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "Niet verbonden" -#: kmess.cpp:1441 +#: kmess.cpp:1408 +#, fuzzy msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" "

Geluid afspelen en meldingen zijn niet mogelijk.

Het KMess-" "bestand 'eventsrc' is niet aanwezig in een van de volgende mappen: %1

" "Controleer uw installatie en kopieer het ontbrekende bestand in een van de " "genoemde mappen.

" -#: kmess.cpp:1445 +#: kmess.cpp:1412 msgid "Error with notifications" msgstr "Fout met meldingen" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "KMess" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "&Acties" @@ -1916,798 +2560,727 @@ msgstr "Zoeken naar &contactpersoon" msgid "Search by &Interest" msgstr "Zoeken volgens &interesse" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "Zoeken naar &contactpersoon" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "Nieuwe &account" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "Accounti&nstellingen" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "&Verbinden" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "Verbin&ding verbreken" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "Mijn &profiel tonen" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "&Mijn status" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "Afwezig met auto-antwoord" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "Toon toegest&ane contactpersonen" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 msgid "Show &Offline Contacts" msgstr "Toon &offline contactpersonen" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "Toon verwijde&rde contactpersonen" -#: kmessinterface.cpp:303 +#: kmessinterface.cpp:318 #, fuzzy -msgid "Show &Display Pictures" +msgid "Show &Empty Groups" +msgstr "&Emoticons weergeven" + +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" msgstr "Afbeelding tonen" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "Lach" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "&Contactpersonen sorteren op" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "Groep" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "Online/Offline" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "Venster voor &bestandsoverdrachten" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "Toon &netwerkvenster" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "Luistert nu naar %1" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +msgid "[%1] %2 goes online" +msgstr "" + +#: kmessview.cpp:363 +msgid "[%1] %2 goes offline" +msgstr "" + +#: kmessview.cpp:559 msgid "Cha&t" msgstr "Cha&t" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "&Eigenschappen" -#: kmessview.cpp:492 +#: kmessview.cpp:569 msgid "&Remove from group" msgstr "Verwij&deren uit groep" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +#, fuzzy +msgid "&Listening Music" +msgstr "Luistert naar %1" + +#: kmessview.cpp:601 msgid "&Copy to Group" msgstr "Naar &groep kopiƫren" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "Naar &groep verplaatsen" -#: kmessview.cpp:549 +#: kmessview.cpp:646 msgid "Move Group &Down" msgstr "Groep om&laag verplaatsen" -#: kmessview.cpp:550 +#: kmessview.cpp:647 msgid "Move Group &Up" msgstr "Groep &omhoog verplaatsen" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "Groep verwij&deren" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "Groep &hernoemen" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 #, fuzzy msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "Email" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "" -#: kmessview.cpp:918 +#: kmessview.cpp:1075 +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "" + +#: kmessview.cpp:1076 +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "" + +#: kmessview.cpp:1085 #, fuzzy msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "
%1 (%2)" -#: kmessview.cpp:921 +#: kmessview.cpp:1090 #, fuzzy -msgctxt "Contacts count in group tooltip" +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "Contactpersonen" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +#, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "Deze contactpersoon is niet online" + +#: kmessview.cpp:1504 #, fuzzy msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "Type hier uw persoonlijke bericht in" -#: kmessview.cpp:1543 -msgid "You have 1 new e-mail in your inbox." -msgstr "U heeft 1 nieuwe email in uw postvak in." +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" -#: kmessview.cpp:1547 -msgid "You have %1 new emails in your inbox." -msgstr "U heeft %1 nieuwe emails in uw postvak in." - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "KMess" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 #, fuzzy msgid "Project support" msgstr "Ondersteuning voor 'P4-context'veld" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 #, fuzzy msgid "Current developer" msgstr "Ontwikkelaar van GnomeMeeting" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 msgid "" "German translation, testing, documentation, web master, project management, " "etc..." msgstr "" "Duitse vertaling, testen, documentatie, webmaster, projectbeheer, etc..." -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "Webdesign" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "" "De verzamelingen van belangrijkste en geel/blauw/paarse emoticons, en de " "Italiaanse vertaling" -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "Cartoonemoticons" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "Standaard geluidsthema" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "" "Arabische vertaling, internationalisatie van verbetering opslaan bestanden." -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 msgid "More Arabic translation" msgstr "Verdere Arabische vertaling" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "Braziliaans-Portugese vertaling" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 msgid "Catalan translation" msgstr "Catalaanse vertaling" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "" "Eenvoudig-Chinese vertaling, verbetering fout bestandsoverdracht, " "programmacode voor verbinden met proxy" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 msgid "More Simplified Chinese translation" msgstr "Verdere Eenvoudig-Chinese vertaling" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 msgid "Traditional Chinese translation" msgstr "Traditioneel-Chinese vertaling" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 msgid "Danish translation" msgstr "Deense vertaling" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 msgid "More Danish translation" msgstr "Verdere Deense vertaling" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "Nederlandse vertaling" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 msgid "More Dutch translation" msgstr "Verdere Nederlandse vertaling" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 msgid "Estonian translation" msgstr "Estse vertaling" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 msgid "Finnish translation" msgstr "Finse vertaling" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 msgid "More Finnish translation" msgstr "Verdere Finse vertaling" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "Franse vertaling" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 msgid "More French translation, MSN6 emoticon definitions" msgstr "Verdere Franse vertaling, definities MSN6-emoticons" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 msgid "More French translation" msgstr "Verdere Franse vertaling" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 msgid "Hungarian translation" msgstr "Hongaarse vertaling" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 msgid "More Italian translation" msgstr "Verdere Italiaanse vertaling" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "Koreaanse vertaling" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 msgid "Norsk BokmĆ„l translation" msgstr "Vertaling naar Noors BokmĆ„l" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 msgid "Slovenian translation" msgstr "Sloveense vertaling" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "Spaanse vertaling" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 msgid "More Spanish translation" msgstr "Verdere Spaanse vertaling" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 msgid "Swedish translation" msgstr "Zweedse vertaling" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 msgid "Thai translation" msgstr "Siamese vertaling" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "Turkse vertaling" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "Verdere Turkse vertaling" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -#, fuzzy -msgid "Guido Solinas" -msgstr "&Online komt" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "Bestandsoverdrachten" + +#: main.cpp:134 msgid "P4-Context field support" msgstr "Ondersteuning voor 'P4-context'veld" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "Verbeterde ondersteuning van Xinerama" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "Originele programmacode voor de ontvangst van bestanden" -#: main.cpp:120 -msgid "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" msgstr "" -#: main.cpp:120 +#: main.cpp:138 +#, fuzzy +msgid "KWallet support" +msgstr "Ondersteuning voor 'P4-context'veld" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "Verscheidene verbeteringen van internationalisatie." + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "Verscheidene verbeteringen van internationalisatie." -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "Ontwikkelaar van GnomeMeeting" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "Jongen met zak over zijn hoofd" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "Inspiratie en wat programmeerwerk" -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 +#: main.cpp:150 msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "" "Oude programmacode voor aankondigingen, basis van de p2p-code, \"msn " "challenge handler\"" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "Programmacode voor \"Niet actief\"-tijdsduur" -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 +#: main.cpp:152 msgid "Close-to-tray icon screenshot code" msgstr "" -#: main.cpp:131 +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 msgid "Your name here?" msgstr "Uw naam hier?" -#: main.cpp:131 +#: main.cpp:156 #, fuzzy msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" "Wij zien gaarne uw verbeteringen en bijbehorende programmacode tegemoet in " "de helpforums van KMess!\n" "Als u meent dat uw naam hier ontbreekt, neemt u dan contact met ons op!" -#: main.cpp:134 +#: main.cpp:159 #, fuzzy msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Uw naam" -#: main.cpp:135 +#: main.cpp:160 #, fuzzy msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "Uw emailadres:" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "Automatisch inloggen met opgegeven emailadres" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 msgid "The contact cancelled the session." msgstr "De contactpersoon heeft de sessie afgebroken." -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 msgid "The contact rejected the invitation." msgstr "De contactpersoon heeft de uitnodiging geweigerd." -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 msgid "You have cancelled the session." msgstr "U heeft de sessie afgebroken." -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "U heeft de uitnodiging geweigerd." -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +#, fuzzy +msgid "Do you want to accept or cancel?" msgstr "Wilt u aanvaarden of weigeren?" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +#, fuzzy +msgid "Click to cancel." msgstr "Klik om te weigeren." -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 msgid "Do you want to accept the file: %1 (%2)" msgstr "Wilt u dit bestand accepteren: %1 (%2)" -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 msgid "The transfer of %1 failed. Couldn't open file." msgstr "De overdracht van %1 is mislukt. Kon het bestand niet openen." -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "Overdracht geaccepteerd." + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 msgid "Connecting to %1, port %2" msgstr "Wordt verbonden met %1, poort %2" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 msgid "The transfer was cancelled" msgstr "De overdracht werd afgebroken" -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 msgid "Connection established" msgstr "Verbinding gemaakt" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 msgid "Successfully transferred file: %1" msgstr "Bestand met succes verzonden: %1" -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 msgid "The transfer of %1 failed. The file does not exist." msgstr "De overdracht van %1 is mislukt. Het bestand bestaat niet." -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 msgid "The transfer of %1 failed. The file could not be read." msgstr "De overdracht van %1 is mislukt. Het bestand kon niet worden gelezen." -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 msgid "Sending file %1" msgstr "%1 wordt nu verzonden" -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "Overdracht geaccepteerd." - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "De bestandsoverdracht werd afgebroken. Verkeerde gegevens ontvangen." -#: network/applications/filetransferp2p.cpp:345 -msgid "The transfer of %1 failed. Couldn't open file" -msgstr "De overdracht van %1 is mislukt. Bestand kon niet worden geopend" +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." +msgstr "" -#: network/applications/filetransferp2p.cpp:524 -msgid "The contact cancelled the transfer." +#: network/applications/filetransferp2p.cpp:348 +#, fuzzy +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "" +"Bestand '%1' bestaat al.\n" +"wilt u het overschrijven?" + +#: network/applications/filetransferp2p.cpp:378 +#, fuzzy +msgid "The transfer of file "%1" failed. Couldn't save the file." +msgstr "De overdracht van %1 is mislukt. Kon het bestand niet openen." + +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 +#, fuzzy +msgid "The contact has cancelled the transfer of file "%1"." msgstr "De contactpersoon heeft de overdracht afgebroken." -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "U heeft de sessie afgebroken." + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "" -#: network/applications/filetransferp2p.cpp:768 -msgid "The transfer of %1 failed. The file does not exist." +#: network/applications/filetransferp2p.cpp:676 +#, fuzzy +msgid "Successfully sent file "%1"." +msgstr "Bestand met succes verzonden: %1" + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "Bestand met succes verzonden: %1" + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "De overdracht van %1 is mislukt. Het bestand bestaat niet." -#: network/applications/filetransferp2p.cpp:773 -msgid "The transfer of %1 failed. The file could not be read." +#: network/applications/filetransferp2p.cpp:818 +#, fuzzy +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "De overdracht van %1 is mislukt. Het bestand kon niet worden gelezen." -#: network/applications/filetransferp2p.cpp:809 -msgid "Sending file %1 (%2)" +#: network/applications/filetransferp2p.cpp:855 +#, fuzzy +msgid "Sending file "%1" (%2)." msgstr "Bestand %1 (%2) wordt nu verzonden" -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "De contactpersoon heeft de overdracht afgebroken." + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "U wordt uitgenodigd een vergadering te starten (met GnomeMeeting)." -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 msgid "Starting GnomeMeeting. Connecting to %1." msgstr "GnomeMeeting wordt gestart. Wordt verbonden met %1." -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "De contactpersoon uitnodigen voor een vergadering." -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "" "De uitnodiging werd geweigerd. Het programma dat de contactpersoon gebruikt " "ondersteunt deze functie niet." -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 msgid "The invitation was aborted. An internal error occured." msgstr "De uitnodiging is afgebroken. Er is een interne fout is opgetreden." -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "" "De uitnodiging is afgebroken. Er is niet tijdig gereageerd op de " "uitnodiging." -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "" "De uitnodiging is afgebroken. Het wachten op bestandsgegevens duurde te " "lang." -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "" "De uitnodiging is afgebroken. De chatverbinding werd afgesloten door de " "schakelserver." -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 msgid "The invitation was aborted." msgstr "De uitnodiging werd afgebroken." -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "U wordt uitgenodigd het bureaublad van deze persoon te delen." -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 msgid "Starting KRDC. Connecting to %1." msgstr "KRDC wordt gestart. Wordt verbonden met %1." -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +msgid "The contact rejected the invitation. An internal error occured." msgstr "" -"De contactpersoon heeft een MSN6-functie gestart die KMess nog niet " -"ondersteunt." +"De contactpersoon heeft de uitnodiging afgewezen. Er is een interne fout " +"opgestreden." -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +msgid "The transfer failed." +msgstr "De overdracht is mislukt." + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." @@ -2715,73 +3288,65 @@ msgstr "" "De uitnodiging is afgebroken. De contactpersoon stuurde onjuiste gegevens, " "of KMess ondersteunt die niet." -#: network/applications/p2papplication.cpp:1503 -msgid "The transfer failed. Data preparation failed." -msgstr "De overdracht is mislukt. Gereed maken van gegevens niet gelukt." - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -msgid "The contact rejected the invitation. An internal error occured." -msgstr "" -"De contactpersoon heeft de uitnodiging afgewezen. Er is een interne fout " -"opgestreden." - -#: network/applications/p2papplication.cpp:1626 -msgid "The transfer failed." -msgstr "De overdracht is mislukt." - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "De overdracht is mislukt. De contactpersoon stuurde onjuiste gegevens, of " "KMess ondersteunt die niet." -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "" +"De overdracht is mislukt. Het wachten op acceptatie door contactpersoon " +"duurde te lang." + +#: network/applications/p2papplicationbase.cpp:1015 +msgid "The transfer failed. An internal error occured." +msgstr "De overdracht is mislukt. Er is een interne fout is opgetreden." + +#: network/applications/p2papplicationbase.cpp:1176 +msgid "The transfer failed. Couldn't open data source." +msgstr "De overdracht is mislukt. Kon gegevensbron niet openen." + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "" +"De contactpersoon heeft een MSN6-functie gestart die KMess nog niet " +"ondersteunt." + +#: network/applications/p2papplication.cpp:1071 +msgid "The transfer failed. Data preparation failed." +msgstr "De overdracht is mislukt. Gereed maken van gegevens niet gelukt." + +#: network/applications/p2papplication.cpp:1178 msgid "The invitation was cancelled. Message was not directed to us." msgstr "De uitnodiging is afgebroken. Het bericht was niet voor ons." -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "De overdracht is mislukt. De contactpersoon stuurde onjuiste gegevens, of " "KMess ondersteunt die niet." -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "Wacht op verbinding op %1, poort %2" -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "Terug naar indirecte bestandsoverdracht (mogelijk langzamer)." -#: network/applications/p2papplication.cpp:3297 -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "" -"De overdracht is mislukt. Het wachten op acceptatie door contactpersoon " -"duurde te lang." - -#: network/applications/p2papplication.cpp:3316 -msgid "The transfer failed. An internal error occured." -msgstr "De overdracht is mislukt. Er is een interne fout is opgetreden." - -#: network/applications/p2papplication.cpp:3693 -msgid "The transfer failed. Couldn't open data source." -msgstr "De overdracht is mislukt. Kon gegevensbron niet openen." - -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:3113 #, fuzzy msgid "Waiting for connection" msgstr "Wachten op lijst met contactpersonen..." -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " "accept." @@ -2789,7 +3354,7 @@ msgstr "" "De uitnodiging is afgebroken. Er werd door contactpersoon niet tijdig " "gereageerd op de uitnodiging." -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." @@ -2797,16 +3362,16 @@ msgstr "" "De uitnodiging is geannuleerd. Het wachten op het slagen of mislukken van de " "verbinding duurde te lang." -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "De uitnodiging is geannuleerd. Het wachten op gegevens duurde te lang." -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 msgid "You are invited to start a voice conversation." msgstr "U wordt uitgenodigd voor een gesprek (microfoon)." -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 msgid "" "You are invited to start a voice conversation but support for this was not " "installed" @@ -2814,27 +3379,27 @@ msgstr "" "U wordt uitgenodigd voor een gesprek (microfoon), maar deze mogelijkheid is " "niet geĆÆnstalleerd" -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 msgid "You have cancelled the voice conversation." msgstr "U heeft de uitnodiging voor een gesprek (microfoon) geannuleerd." -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "De uitnodiging werd geannuleerd. Er is geen microfoon beschikbaar." -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 msgid "Start voice conversation. Connecting to %1." msgstr "Start gesprek (microfoon). Verbinden met %1." -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 msgid "Start voice conversation. Listening on %1." msgstr "Start gesprek (microfoon). Luisteren op %1." -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 msgid "Inviting the contact to a voice conversation." msgstr "De contactpersoon wordt uitgenodigd voor een gesprek (microfoon)." -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 msgid "The contact is inviting you for '%1', but this is not implemented yet." msgstr "" @@ -2882,645 +3447,784 @@ msgstr "Er kon geen verbinding worden gemaakt: %1" msgid "Receiving file %1" msgstr "Bestand %1 wordt ontvangen" -#: network/msnconnection.cpp:477 -msgid "1 ping lost" -msgstr "1 ping gemist" +#: network/msnconnection.cpp:589 +#, fuzzy +msgid "KMess could not access the remote webservice.
Details: %1" +msgstr "" +"KMess heeft geen toegang tot de andere webservice.\n" +"\n" +"Details: %1" -#: network/msnconnection.cpp:481 -msgid "%1 pings lost" -msgstr "%1 pings gemist" - -#: network/msnconnection.cpp:496 -msgid "The connection to the server was lost." -msgstr "De verbinding met de server is verbroken." - -#: network/msnconnection.cpp:704 +#: network/msnnotificationconnection.cpp:1317 #, fuzzy msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." -msgstr "" -"KMess kon geen verbinding maken met de MSN Messenger service.\n" -"Controleer uw verbinding met het internet.\n" -"Systeemfout: %1 (code %2)." - -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "De verbinding werd door de andere server beƫindigd." - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" -"KMess kon geen verbinding maken met de servers van MSN Messenger. Deze " -"servers kunnen tijdelijk buiten dienst zijn of er is een probleem met uw " -"Internetverbinding." - -#: network/msnnotificationconnection.cpp:724 -msgid "Show MSN Messenger Service status?" -msgstr "Status van MSN Messenger Service weergeven?" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "Serverfout" - -#: network/msnnotificationconnection.cpp:1344 -#, fuzzy -msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" msgstr "" "Uw verbinding is verbroken omdat u reeds een\n" "verbinding heeft via een ander MSN Messenger-\n" "programma of vanaf een andere locatie" -#: network/msnnotificationconnection.cpp:1558 +#: network/msnnotificationconnection.cpp:1532 msgid "Got synchronization" msgstr "Synchronisatie verkregen" -#: network/msnnotificationconnection.cpp:1699 -msgid "Authenticating" +#: network/msnnotificationconnection.cpp:1670 +#, fuzzy +msgid "Authenticating..." msgstr "Aanmelden" -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "Ontving bevestiging gebruiker" - -#: network/msnnotificationconnection.cpp:1752 +#: network/msnnotificationconnection.cpp:1719 msgid "Waiting for contact list..." msgstr "Wachten op lijst met contactpersonen..." -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "Overdracht naar meldingenserver" +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." +msgstr "" -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" +#: network/msnnotificationconnection.cpp:1894 +#, fuzzy +msgid "Authentication failed, please verify your account name and password." msgstr "Aanmelden is mislukt, controleer uw gebruikersnaam en wachtwoord" -#: network/msnnotificationconnection.cpp:2042 +#: network/msnnotificationconnection.cpp:1993 msgid "Connecting..." msgstr "Verbinden..." -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" +#: network/msnnotificationconnection.cpp:2167 +#, fuzzy +msgid "Unknown command received from the server: %1" msgstr "KMess ontving een onbekende opdracht van de server: %1" -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 +#: network/msnnotificationconnection.cpp:2192 msgid "Invalid command syntax" msgstr "" -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -msgid "There was an internal error in KMess: %1" -msgstr "Er is een interne fout opgetreden in KMess: %1" - -#: network/msnnotificationconnection.cpp:2243 +#: network/msnnotificationconnection.cpp:2196 msgid "Invalid command parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2246 +#: network/msnnotificationconnection.cpp:2199 msgid "The email you have tried to add is not a MSN Messenger account" msgstr "" "Het emailadres dat u probeert toe te voegen is geen account van MSN Messenger" -#: network/msnnotificationconnection.cpp:2249 +#: network/msnnotificationconnection.cpp:2204 msgid "Domain name missing" msgstr "" -#: network/msnnotificationconnection.cpp:2252 +#: network/msnnotificationconnection.cpp:2208 msgid "Already logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2255 +#: network/msnnotificationconnection.cpp:2211 msgid "The account name given is invalid" msgstr "De opgegeven gebruikersnaam is ongeldig" -#: network/msnnotificationconnection.cpp:2258 +#: network/msnnotificationconnection.cpp:2215 msgid "" "That account name is invalid, or your passport has not been confirmed yet" msgstr "" "De opgegeven gebruikersnaam is ongeldig, of uw \"paspoort\" is nog niet " "bevestigd" -#: network/msnnotificationconnection.cpp:2261 +#: network/msnnotificationconnection.cpp:2218 msgid "Your contact list is full" msgstr "Uw lijst met contactpersonen is vol" -#: network/msnnotificationconnection.cpp:2264 +#: network/msnnotificationconnection.cpp:2223 msgid "Invalid SBP parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2267 +#: network/msnnotificationconnection.cpp:2226 msgid "This contact is already on your list" msgstr "Deze contactpersoon is al in uw lijst opgenomen" -#: network/msnnotificationconnection.cpp:2270 +#: network/msnnotificationconnection.cpp:2230 msgid "This contact is not on your list" msgstr "Deze contactpersoon is niet in uw lijst opgenomen" -#: network/msnnotificationconnection.cpp:2273 +#: network/msnnotificationconnection.cpp:2234 msgid "This contact is not online" msgstr "Deze contactpersoon is niet online" -#: network/msnnotificationconnection.cpp:2276 +#: network/msnnotificationconnection.cpp:2239 msgid "Already in this mode" msgstr "" -#: network/msnnotificationconnection.cpp:2279 +#: network/msnnotificationconnection.cpp:2243 #, fuzzy msgid "Contact is in the opposite list" msgstr "Deze contactpersoon is niet in uw lijst opgenomen" -#: network/msnnotificationconnection.cpp:2282 -msgid "Your contact list has too many groups" -msgstr "Er zijn teveel groepen in uw lijst van contactpersonen" - -#: network/msnnotificationconnection.cpp:2285 -msgid "This group can't be changed" -msgstr "Deze groep kan niet gewijzigd worden" - -#: network/msnnotificationconnection.cpp:2288 -msgid "This group is not empty" -msgstr "Deze groep is niet leeg" - -#: network/msnnotificationconnection.cpp:2291 +#: network/msnnotificationconnection.cpp:2247 +#, fuzzy msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." msgstr "" "Deze naam voor een groep komt reeds voor in uw lijst van contactpersonen " "voor Messenger of Hotmail" -#: network/msnnotificationconnection.cpp:2294 +#: network/msnnotificationconnection.cpp:2251 +msgid "Your contact list has too many groups" +msgstr "Er zijn teveel groepen in uw lijst van contactpersonen" + +#: network/msnnotificationconnection.cpp:2255 +msgid "This group can't be changed" +msgstr "Deze groep kan niet gewijzigd worden" + +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "Er zijn teveel groepen in uw lijst van contactpersonen" + +#: network/msnnotificationconnection.cpp:2264 +msgid "This group is not empty" +msgstr "Deze groep is niet leeg" + +#: network/msnnotificationconnection.cpp:2268 msgid "The group name is too long" msgstr "De opgegeven naam voor een groep is te lang" -#: network/msnnotificationconnection.cpp:2297 +#: network/msnnotificationconnection.cpp:2273 msgid "Attempted to change group \"0\"" msgstr "" -#: network/msnnotificationconnection.cpp:2300 +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +msgid "There was an internal error in KMess: %1" +msgstr "Er is een interne fout opgetreden in KMess: %1" + +#: network/msnnotificationconnection.cpp:2277 #, fuzzy msgid "Invalid Group" msgstr "Groep &hernoemen" -#: network/msnnotificationconnection.cpp:2303 +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 msgid "Switchboard server failed" msgstr "Schakelserver is uitgevallen" -#: network/msnnotificationconnection.cpp:2306 +#: network/msnnotificationconnection.cpp:2287 msgid "Transfer to switchboard server failed" msgstr "Overdracht naar schakelserver is mislukt" -#: network/msnnotificationconnection.cpp:2309 +#: network/msnnotificationconnection.cpp:2291 msgid "Direct connection (MSNSLP) error, connection failed" msgstr "Fout in de directe verbinding (MSNSLP), verbinden is mislukt" -#: network/msnnotificationconnection.cpp:2312 +#: network/msnnotificationconnection.cpp:2295 msgid "Required field missing" msgstr "" -#: network/msnnotificationconnection.cpp:2315 +#: network/msnnotificationconnection.cpp:2299 msgid "Not logged in" msgstr "" +#: network/msnnotificationconnection.cpp:2302 +#, fuzzy +msgid "No permissions given for this account" +msgstr "Aangepaste emoticons voor deze account:" + +#: network/msnnotificationconnection.cpp:2307 +msgid "Command is disabled" +msgstr "" + +#: network/msnnotificationconnection.cpp:2310 +msgid "Your account is banned." +msgstr "Uw account is in de ban gedaan." + +#: network/msnnotificationconnection.cpp:2314 +#, fuzzy +msgid "Challenge response failed" +msgstr "De overdracht is mislukt." + #: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" +msgstr "" + +#: network/msnnotificationconnection.cpp:2323 +#, fuzzy +msgid "You are opening chat sessions too fast" +msgstr "U heeft teveel sessies kort na elkaar geopend" + +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" +msgstr "U heeft teveel sessies geopend" + +#: network/msnnotificationconnection.cpp:2334 +msgid "Unexpected command sequence" +msgstr "" + +#: network/msnnotificationconnection.cpp:2338 +msgid "Bad friend name" +msgstr "Ongeldige bijnaam" + +#: network/msnnotificationconnection.cpp:2344 +msgid "Bad CVR data" +msgstr "" + +#: network/msnnotificationconnection.cpp:2350 +msgid "The server reports KMess is flooding it with too many data" +msgstr "De server meldt dat het van KMess teveel gegevens tegelijk ontvangt" + +#: network/msnnotificationconnection.cpp:2357 +#, fuzzy +msgid "Authentication ticket was incorrect" +msgstr "Aanmelden is mislukt" + +#: network/msnnotificationconnection.cpp:2360 +msgid "You can't start a chat with someone while you are invisible." +msgstr "U kunt geen chat beginnen met iemand als u onzichtbaar bent." + +#: network/msnnotificationconnection.cpp:2364 +#, fuzzy +msgid "Not accepting new contacts" +msgstr "De server accepteert geen nieuwe personen" + +#: network/msnnotificationconnection.cpp:2368 +#, fuzzy +msgid "" +"You have a kids passport account, you need parental consent to chat online." +msgstr "" +"Je gebruikt een \"kinderpaspoort\", vraag aan je ouders toestemming om te " +"chatten." + +#: network/msnnotificationconnection.cpp:2371 +#, fuzzy +msgid "Your passport account needs to be verified first." +msgstr "Uw \"paspoort\" moet eerst bevestigd worden." + +#: network/msnnotificationconnection.cpp:2375 +msgid "Bad USR ticket" +msgstr "" + +#: network/msnnotificationconnection.cpp:2385 msgid "Error accessing contact list, try again later" msgstr "" "Fout bij de toegang tot de lijst van contactpersonen, probeer het later " "opnieuw" -#: network/msnnotificationconnection.cpp:2322 -msgid "Command is disabled" -msgstr "" - -#: network/msnnotificationconnection.cpp:2325 -msgid "Your account is banned." -msgstr "Uw account is in de ban gedaan." - -#: network/msnnotificationconnection.cpp:2329 +#: network/msnnotificationconnection.cpp:2399 #, fuzzy -msgid "Challenge response failed" -msgstr "De overdracht is mislukt." - -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" -msgstr "U heeft teveel sessies kort na elkaar geopend" - -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" -msgstr "U heeft teveel sessies geopend" - -#: network/msnnotificationconnection.cpp:2341 -msgid "Unexpected command sequence" -msgstr "" - -#: network/msnnotificationconnection.cpp:2344 -msgid "Bad friend name" -msgstr "Ongeldige bijnaam" - -#: network/msnnotificationconnection.cpp:2348 -msgid "Bad CVR data" -msgstr "" - -#: network/msnnotificationconnection.cpp:2353 -msgid "The server reports KMess is flooding it with too many data" -msgstr "De server meldt dat het van KMess teveel gegevens tegelijk ontvangt" - -#: network/msnnotificationconnection.cpp:2358 -#, fuzzy -msgid "Authentication ticket was incorrect" -msgstr "Aanmelden is mislukt" - -#: network/msnnotificationconnection.cpp:2362 -msgid "You can't start a chat with someone while you are invisible." -msgstr "U kunt geen chat beginnen met iemand als u onzichtbaar bent." - -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." -msgstr "" -"Je gebruikt een \"kinderpaspoort\", vraag aan je ouders toestemming om te " -"chatten." - -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." -msgstr "Uw \"paspoort\" moet eerst bevestigd worden." - -#: network/msnnotificationconnection.cpp:2373 -msgid "Bad USR ticket" -msgstr "" - -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" -msgstr "KMess - MSN-fout" - -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." msgstr "Er is een interne serverfout" +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + #: network/msnnotificationconnection.cpp:2414 -msgid "The server is too busy" -msgstr "De server is te druk bezet" - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "De server is niet bereikbaar" - -#: network/msnnotificationconnection.cpp:2422 msgid "Peer notification server down" msgstr "Peer meldingsserver is uitgevallen" -#: network/msnnotificationconnection.cpp:2426 +#: network/msnnotificationconnection.cpp:2418 msgid "The server is going down" msgstr "De server wordt uitgezet" -#: network/msnnotificationconnection.cpp:2429 +#: network/msnnotificationconnection.cpp:2422 msgid "The server is going down soon" msgstr "De server zal zo dadelijk worden uitgezet" -#: network/msnnotificationconnection.cpp:2433 +#: network/msnnotificationconnection.cpp:2427 msgid "Write is blocking" msgstr "Schrijven is geblokkeerd" -#: network/msnnotificationconnection.cpp:2436 +#: network/msnnotificationconnection.cpp:2431 msgid "Session is overloaded" msgstr "Sessie is overbelast" -#: network/msnnotificationconnection.cpp:2441 +#: network/msnnotificationconnection.cpp:2438 msgid "The server is not available" msgstr "De server is niet bereikbaar" -#: network/msnnotificationconnection.cpp:2444 +#: network/msnnotificationconnection.cpp:2442 msgid "Authentication failed" msgstr "Aanmelden is mislukt" -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" -msgstr "De server accepteert geen nieuwe personen" +#: network/msnnotificationconnection.cpp:2449 +#, fuzzy +msgid "Unknown error code received from the server: %1" +msgstr "KMess ontving een onbekende opdracht van de server: %1" -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" -msgstr "KMess ontving een onbekende foutmelding van de server: %1" +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +#, fuzzy +msgctxt "Error dialog box title" +msgid "MSN error" +msgstr "KMess - MSN-fout" -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "Waarschuwing: de server wordt over 1 minuut voor onderhoud uitgezet!" +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "minuten" +msgstr[1] "minuten" #: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." +#, fuzzy +msgid "Server closes for maintenance in %1!" +msgstr "Waarschuwing: de server wordt over %1 minuten voor onderhoud uitgezet!" + +#: network/msnnotificationconnection.cpp:2604 +#, fuzzy +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." msgstr "" "De MSN-server meldt dat die over een minuut voor onderhoud wordt uitgezet." -#: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" -msgstr "Waarschuwing: de server wordt over %1 minuten voor onderhoud uitgezet!" - -#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:2901 msgid "Lost reference to SOAP client" msgstr "" -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +#, fuzzy +msgid "KMess could not process Offline-IM messages.
Details: %1" msgstr "" "KMess kon Offline-IM-berichten niet verwerken.\n" "\n" "Details: %1" -#: network/msnnotificationconnection.cpp:3209 +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "Aanmelden is mislukt" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "Er is een interne fout opgetreden in KMess: %1" + +#: network/msnnotificationconnection.cpp:3242 +#, fuzzy +msgctxt "Login error message, with more details for developer versions" msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" +msgstr "" +"KMess kon geen verbinding maken met de servers van MSN Messenger. Deze " +"servers kunnen tijdelijk buiten dienst zijn of er is een probleem met uw " +"Internetverbinding." + +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "De verbinding met de server is verbroken." + +#: network/msnnotificationconnection.cpp:3302 +#, fuzzy +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" msgstr "" "Aanmelden is mislukt, KMess kon het inloggen van het paspoort niet " "verwerken.\n" "\n" "Details: %1" -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" -msgstr "" -"KMess heeft geen toegang tot de andere webservice.\n" -"\n" -"Details: %1" +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "Serverfout" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "Verbinding maken duurt te lang" + +#: network/msnsockettcp.cpp:368 +msgid "1 ping lost" +msgstr "1 ping gemist" + +#: network/msnsockettcp.cpp:372 +msgid "%1 pings lost" +msgstr "%1 pings gemist" + +#: network/msnsockettcp.cpp:387 +msgid "The connection to the server was lost." +msgstr "De verbinding met de server is verbroken." + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "Deze persoon is offline of onzichtbaar." -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "" "De contactpersoon heeft een MSN7-functie gestart die KMess nog niet " "ondersteunt." -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 msgid "The message \"%1\" was not received!" msgstr "Het bericht \"%1\" is niet aangekomen!" -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "Er kon geen verbinding worden gemaakt: %1" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "Te veel omleidingen door de logindienst" -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +#, fuzzy +msgid "In %1's chat: %2" msgstr "In %1's chat: %2" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +#, fuzzy +msgid "%1 says:
'%2'" msgstr "%1 zegt:
'%2'" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" +#: notification/chatnotification.cpp:171 +#, fuzzy +msgid "%1 has sent you an offline message:
'%2'" msgstr "%1 heeft u een offline-bericht gestuurd:
'%2'" -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" +#: notification/chatnotification.cpp:178 +#, fuzzy +msgid "%1's chat requests attention!" msgstr "%1's chat vraagt aandacht!" -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" +#: notification/chatnotification.cpp:183 +#, fuzzy +msgid "%1:
%2" msgstr "%1:
%2" -#: notification/notificationchat.cpp:200 +#: notification/chatnotification.cpp:190 #, fuzzy -msgid "%1 has sent you a handwritten message!" +msgid "%1 has sent you a handwritten message!" msgstr "%1 heeft u een buzzer verstuurd!" -#: notification/notificationchat.cpp:204 -msgid "%1 has sent you a nudge!" +#: notification/chatnotification.cpp:194 +#, fuzzy +msgid "%1 has sent you a nudge!" msgstr "%1 heeft u een buzzer verstuurd!" -#: notification/notificationchat.cpp:208 -msgid "%1 has sent you a wink!" +#: notification/chatnotification.cpp:198 +#, fuzzy +msgid "%1 has sent you a wink!" msgstr "%1heeft u een wink verstuurd!" -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" +#: notification/chatnotification.cpp:204 +#, fuzzy +msgid "%1 wants to use the webcam!" msgstr "%1 wil de webcam gebruiken!" -#: notification/notificationchat.cpp:215 -msgid "%1 is sending you a file!" +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" msgstr "%1 zendt u een bestand!" -#: notification/notificationchat.cpp:216 -msgid "%1 has sent you an invitation!" +#: notification/chatnotification.cpp:206 +#, fuzzy +msgid "%1 has sent you an invitation!" msgstr "%1 heeft u een uitnodiging gestuurd!" -#: notification/notificationchat.cpp:223 -msgid "%1 has canceled the webcam session!" +#: notification/chatnotification.cpp:213 +#, fuzzy +msgid "%1 has canceled the webcam session!" msgstr "%1 heeft de webcam-sessie afgbroken!" -#: notification/notificationchat.cpp:224 -msgid "%1 has canceled the file transfer!" +#: notification/chatnotification.cpp:214 +#, fuzzy +msgid "%1 has canceled the file transfer!" msgstr "%1 heeft de bestandsoverdracht afgebroken!" -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +#, fuzzy +msgid "%1's activity has been canceled!" msgstr "De activiteit van %1 is beƫindigd!" -#: notification/notificationchat.cpp:232 -msgid "%1 has accepted to use the webcam!" +#: notification/chatnotification.cpp:222 +#, fuzzy +msgid "%1 has accepted to use the webcam!" msgstr "%1 gaat accoord met het gebruik van de webcam!" -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" +#: notification/chatnotification.cpp:223 +#, fuzzy +msgid "%1 has accepted the file transfer!" msgstr "%1 gaat accoord met de bestandsoverdracht!" -#: notification/notificationchat.cpp:234 -msgid "%1 has accepted your invitation!" +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" msgstr "%1 heeft uw uitnodiging aanvaard!" -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" +#: notification/chatnotification.cpp:231 +#, fuzzy +msgid "%1 has ended the webcam session!" msgstr "%1 heeft de webcam-sessie beƫindigd!" -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "De bestandsuitwisseling met %1 is klaar!" -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" +#: notification/chatnotification.cpp:233 +#, fuzzy +msgid "%1's activity has ended!" msgstr "De activiteit van %1 is beƫindigd!" -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" +#: notification/chatnotification.cpp:240 +#, fuzzy +msgid "%1's webcam session has failed!" msgstr "De webcam-sessie met %1 is mislukt!" -#: notification/notificationchat.cpp:251 -msgid "The file transfer with %1 has failed!" +#: notification/chatnotification.cpp:241 +#, fuzzy +msgid "The file transfer with %1 has failed!" msgstr "De bestandsuitwisseling met %1 is mislukt!" -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:242 +#, fuzzy +msgid "%1's activity has ended with an error!" msgstr "De activiteit van %1 is met een foutmelding beƫindigd!" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -msgid "%1 is now online" +#: notification/contactstatusnotification.cpp:70 +#, fuzzy +msgid "%1 is now online" msgstr "%1 is nu online" -#: notification/notificationcontactstatus.cpp:76 -msgid "%1 has gone away" +#: notification/contactstatusnotification.cpp:71 +#, fuzzy +msgid "%1 has gone away" msgstr "%1 is weggegaan" -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/contactstatusnotification.cpp:72 +#, fuzzy +msgid "%1 will be right back" msgstr "%1 komt zodadelijk terug" -#: notification/notificationcontactstatus.cpp:78 -msgid "%1 is now busy" +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" msgstr "%1 is nu bezig" -#: notification/notificationcontactstatus.cpp:79 -msgid "%1 has become invisible" +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" msgstr "%1 is nu onzichtbaar" -#: notification/notificationcontactstatus.cpp:80 -msgid "%1 has gone idle" +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" msgstr "%1 is nu niet actief" -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/contactstatusnotification.cpp:76 +#, fuzzy +msgid "%1 has logged out" msgstr "%1 heeft uitgelogd" -#: notification/notificationcontactstatus.cpp:82 -msgid "%1 is on the phone" +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" msgstr "%1 is aan de telefoon" -#: notification/notificationcontactstatus.cpp:83 -msgid "%1 is out for lunch" +#: notification/contactstatusnotification.cpp:78 +#, fuzzy +msgid "%1 is out for lunch" msgstr "%1 is gaan lunchen" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/newemailnotification.cpp:78 +#, fuzzy +msgid "New email:
'%1'
by '%2'" msgstr "Nieuwe email:
'%1'
van '%2'" -#: settings/accountswidget.cpp:81 +#: settings/accountpage.cpp:69 msgid "Browse..." msgstr "" -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +#, fuzzy +msgid "Browse and crop picture..." msgstr "Bladeren naar en bijsnijden van afbeelding..." -#: settings/accountswidget.cpp:404 -msgid "Display Picture" -msgstr "Afbeelding tonen" +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" +#: settings/accountpage.cpp:448 +#, fuzzy +msgid "Downloading of display picture failed" msgstr "Het ophalen van de afbeelding is mislukt" -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 +#, fuzzy msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" "Er is een fout opgetreden bij het veranderen van uw afbeelding.\n" "Gebruik een afbeeldingsbestand van het juiste type" -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "Hai, hoe gaat het ermee? :)" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "Stacy" - -#: settings/chatstylepage.cpp:317 -msgid "Great!" -msgstr "Groots!" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "Ik kom /juist/ terug van vakantie in Italiƫ!" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 #, fuzzy msgid "&Delete" msgstr "Contactpersoon verwij&deren" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "Instellingen" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 msgid "Account" msgstr "Account" -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 #, fuzzy msgid "My Account" msgstr "Account" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "Waarschuwingen" -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 #, fuzzy msgid "Alerts and Notifications" msgstr "KMess-melding" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "Chatten" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "Chat bewaren" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +#, fuzzy +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "Het adres dat u opgaf voor de contactpersoon, is ongeldig: '%1'" + +#: settings/accountsettingsdialog.cpp:201 +#, fuzzy +msgid "The email address you have entered is already in use: '%1'" +msgstr "Het adres dat u opgaf voor de contactpersoon, is ongeldig: '%1'" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "Weet u zeker dat u deze account wilt verwijderen?" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "Weet u zeker dat u deze account wilt verwijderen?" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "Hai, hoe gaat het ermee? :)" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "Stacy" + +#: settings/chatstylepage.cpp:341 +msgid "Great!" +msgstr "Groots!" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "Ik kom /juist/ terug van vakantie in Italiƫ!" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "Instellingen" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +msgid "Accounts" +msgstr "Accounts" + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "Melding van email" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "Bewaar chat-bestanden in deze hoofdmap:" + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." @@ -3529,14 +4233,151 @@ msgstr "" "de optie 'Afsluiten' in het menu 'Bestanden' als u KMess helemaal wilt " "afsluiten." -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "Actief in systeemvak" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "
%1 (%2)" +#: systemtraywidget.cpp:245 +#, fuzzy +msgid "- %1 (%2)" +msgstr "%1 %2" + +#~ msgid "Click to send an email to this contact." +#~ msgstr "Klik om een email naar deze contactpersoon te sturen." + +#~ msgid "Picture:" +#~ msgstr "Afbeelding:" + +#, fuzzy +#~ msgid "Login Information" +#~ msgstr "Toon informatie over nieuwe email" + +#~ msgid "Logging in..." +#~ msgstr "Bezig met aanmelden..." + +#~ msgid "" +#~ "Allows you to choose which e-mail program KMess should open to view e-" +#~ "mail messages." +#~ msgstr "" +#~ "U kunt het emailprogramma kiezen waarmee KMess uw emailberichten opent." + +#~ msgid "Use a specified command:" +#~ msgstr "Gebruik een bepaalde opdracht:" + +#~ msgid "This account does not have an Hotmail inbox!" +#~ msgstr "Deze account heeft geen inbox voor Hotmail!" + +#, fuzzy +#~ msgid "Email: " +#~ msgstr "Email" + +#~ msgid "Remove group" +#~ msgstr "Groep verwijderen" + +#, fuzzy +#~ msgid "Show &Display Pictures" +#~ msgstr "Afbeelding tonen" + +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr "U heeft 1 nieuwe email in uw postvak in." + +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr "U heeft %1 nieuwe emails in uw postvak in." + +#, fuzzy +#~ msgid "Guido Solinas" +#~ msgstr "&Online komt" + +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "De overdracht van %1 is mislukt. Bestand kon niet worden geopend" + +#, fuzzy +#~ msgid "Sidebar" +#~ msgstr "Zijbalk" + +#, fuzzy +#~ msgid "New contact's group" +#~ msgstr "&Nieuwe contactpersoon" + +#~ msgid "Enter your login information:" +#~ msgstr "Vul uw inloggegevens in:" + +#~ msgid "Your friendly name:" +#~ msgstr "Uw bijnaam:" + +#, fuzzy +#~ msgid "Your email address:" +#~ msgstr "Emailadres: " + +#~ msgid "Your password:" +#~ msgstr "Uw wachtwoord:" + +#~ msgid "Display picture:" +#~ msgstr "Afbeelding:" + +#~ msgid "Don't show a displa&y picture" +#~ msgstr "&Geen afbeelding tonen" + +#~ msgid "Status to set at login:" +#~ msgstr "In te stellen status bij het inloggen:" + +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "Toon een melding als u een email ont&vangt" + +#~ msgid "Organize chat folders by:" +#~ msgstr "Deel de chat-mappen in naar:" + +#~ msgid "&Show graphics in chat messages" +#~ msgstr "Toon &afbeeldingen in chatberichten" + +#~ msgid "Use Hotmail" +#~ msgstr "Gebruik Hotmail" + +#~ msgid "says:" +#~ msgstr "zegt:" + +#~ msgid "Current name: " +#~ msgstr "Huidige naam: " + +#, fuzzy +#~ msgid "" +#~ "KMess could not connect to the MSN Messenger service.\n" +#~ "Please, be sure to be connected to the internet.\n" +#~ "reason: %1." +#~ msgstr "" +#~ "KMess kon geen verbinding maken met de MSN Messenger service.\n" +#~ "Controleer uw verbinding met het internet.\n" +#~ "Systeemfout: %1 (code %2)." + +#~ msgid "The remote server has closed the connection." +#~ msgstr "De verbinding werd door de andere server beƫindigd." + +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr "Status van MSN Messenger Service weergeven?" + +#~ msgid "Received user confirmation" +#~ msgstr "Ontving bevestiging gebruiker" + +#~ msgid "Transfer to notification server" +#~ msgstr "Overdracht naar meldingenserver" + +#~ msgid "The server is too busy" +#~ msgstr "De server is te druk bezet" + +#~ msgid "The server is unavailable" +#~ msgstr "De server is niet bereikbaar" + +#~ msgid "KMess received an unknown error message from the server: %1" +#~ msgstr "KMess ontving een onbekende foutmelding van de server: %1" + +#~ msgid "Warning: Server closes for maintenance in 1 minute!" +#~ msgstr "" +#~ "Waarschuwing: de server wordt over 1 minuut voor onderhoud uitgezet!" + #~ msgid "Add contact" #~ msgstr "Contactpersoon toevoegen" @@ -3544,9 +4385,6 @@ msgstr "
%1 (%2)" #~ msgid "KMess Notification" #~ msgstr "Melding van email" -#~ msgid "Accounts" -#~ msgstr "Accounts" - #~ msgid "" #~ msgstr "" @@ -3562,9 +4400,6 @@ msgstr "
%1 (%2)" #~ "arend op auton.nl, vdboor op codingdomain punt com, jjh punt woldringh op " #~ "planet punt nl" -#~ msgid "Insert an emoticon" -#~ msgstr "Emoticon invoegen" - #~ msgid "Show/Hide &Contact Sidebar" #~ msgstr "Zijbalk &Contactpersonen weergeven/verbergen" @@ -3598,18 +4433,9 @@ msgstr "
%1 (%2)" #~ msgid "(On the Phone)" #~ msgstr "(Aan de telefoon)" -#~ msgid "Connection timeout" -#~ msgstr "Verbinding maken duurt te lang" - #~ msgid "The current status of your contact." #~ msgstr "De huidige status van uw contactpersoon." -#~ msgid "Connect" -#~ msgstr "Verbinden" - -#~ msgid "Listening to %1" -#~ msgstr "Luistert naar %1" - #, fuzzy #~ msgid "The contact is listening to music" #~ msgstr "Deze contactpersoon is niet in uw lijst opgenomen" diff --git a/po/pt_BR.po b/po/pt_BR.po index c299186..f8ebb12 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: pt_BR\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" "PO-Revision-Date: 2003-04-26 19:03-0300\n" "Last-Translator: Mauricio Röther \n" "Language-Team: Português Brasileiro \n" @@ -19,47 +19,41 @@ msgstr "" "X-Generator: KBabel 1.0.1\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "Conectando..." - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -#, fuzzy -msgid "S&end" -msgstr "Enviar" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 #, fuzzy msgid "Ne&w Line" msgstr "Nova Linha" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 #, fuzzy -msgid "Sidebar" -msgstr "Mostrar/Esconder Barra de &Contatos" +msgid "S&end" +msgstr "Enviar" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +#, fuzzy +msgid "Contacts" +msgstr "&Adicionar Contato" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 #, fuzzy msgid "" "Enter here the email address of the person you wish to add to your contact " @@ -67,42 +61,40 @@ msgid "" msgstr "Informe o email da pessoa que você deseja adicionar:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 #, fuzzy msgid "Email address" msgstr "Endereço de Email:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 #, fuzzy -msgid "New contact's group" -msgstr "Novo &Contato" +msgid "Initial group" +msgstr "Re&nomear Grupo" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 #, fuzzy msgid "" "Enter a message to be automatically sent to people who try to message you." @@ -111,183 +103,390 @@ msgstr "" "enviada à pessoa que tentar entrar em contato:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 #, fuzzy msgid "&Automatic away message" msgstr "Especificar uma mensagem de Ausente" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, fuzzy, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" -msgstr "adicionou você a lista de contato dele(a). Você deseja:" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 #, fuzzy -msgid "&Add this contact to your \"Friends\" list" +msgid "&Add this person to my \"Friends\" list" msgstr "Adicionar este contato à sua lista \"Amigos\"" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 #, fuzzy -msgid "&Not add this contact, but let them see your online state" +msgid "Do not add this person; only allow them to see my online state" msgstr "Não adicionar este contato, mas deixÔ-lo ver seu estado online" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 #, fuzzy -msgid "Block this person from contacting &you or seeing your online state" +msgid "&Block this person from contacting me or seeing my online state" msgstr "Bloquear esta pessoa para não contactar você ou ver seu estado online." #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, fuzzy, no-c-format +msgid "Contact Properties for %1" +msgstr "Propriedades de contato para " + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +#, fuzzy +msgid "Restore" +msgstr "Removido" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "Usar um nome diferente para essa pessoa" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "Exibir um balão popup quando essa pessoa mudar online/offline" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "Som:" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +msgid "&Clear Cache" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +msgid "Notes" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +msgid "Standard" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "Enviar" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 msgid "Cancel" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -#, fuzzy -msgid "Enter your login information:" -msgstr "Ou entre seus dados de login:" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" +msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 #, fuzzy -msgid "Password" +msgid "Email address:" +msgstr "Endereço de Email: " + +#. i18n: tag string +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +#, fuzzy +msgid "Password:" msgstr "Senha:" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 #, fuzzy msgid " Account options " msgstr "Con&figurações de Conta" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 #, fuzzy msgid "Remem&ber this profile" msgstr "Lembrar este perfil" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "&Conectar" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr "Con&figurações de Conta" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 -msgid "Your friendly name:" +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 +#, fuzzy +msgid "&Friendly name:" msgstr "Seu nome amigÔvel:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 #, fuzzy -msgid "Your email address:" +msgid "&Email address:" msgstr "Endereço de Email: " #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" -msgstr "Sua senha:" - -#. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 #, fuzzy -msgid "Remember Password" +msgid "&Password:" msgstr "Senha:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 #, fuzzy -msgid "Display picture:" +msgid "&Remember Password" +msgstr "Senha:" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 +#, fuzzy +msgid "Display Picture" msgstr "Imagem:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 msgid "C&hange..." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -#, fuzzy -msgid "Don't show a displa&y picture" -msgstr "Imagem:" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -298,35 +497,36 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +msgid "Re&member the settings of this account" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 #, fuzzy -msgid "Login &with this account automatically at start-up" +msgid "Login &with this account automatically" msgstr "Logar com esta conta automaticamente ao iniciar" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "Logar todos os chats" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -334,175 +534,286 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 msgid "https://accountservices.passport.net/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 #, fuzzy -msgid "Popup notifications" +msgid "Saved accounts:" +msgstr "Contas" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +#, fuzzy +msgid "Click" +msgstr "Bloqueado" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "Contas" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "Removido" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "Notificação de email" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "&Adicionar Contato" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 #, fuzzy msgid "Show notifications when your contacts:" msgstr "Exibir notificações quando contatos mudar para offline" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 #, fuzzy msgid "&Go online" msgstr "Offline" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 #, fuzzy msgid "S&end you a message" msgstr "Especificar uma mensagem de Ausente" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 #, fuzzy msgid "Go o&ffline" msgstr "Offline" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 #, fuzzy -msgid "Show notifications when you recei&ve an email" +msgid "Email Events" +msgstr "Endereço de Email:" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" msgstr "" "Exibir uma notificação quando o email for recebido em \"outras pastas\"" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +#, fuzzy +msgid "In other folders" +msgstr "em outra pasta" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "Esconder pop-ups após" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "segundos" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "Alertas" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "Exibir Contatos &Offline" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -513,208 +824,209 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 -msgid "Inform contacts w&hich song I am listening to." +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 +msgid "Inform contacts w&hich song I am listening to" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 #, fuzzy msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "Mudar status para \"Ausente - Inativo\" quando inativo" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 msgid "Become idle after" msgstr "Ficar Inativo após" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "minutos" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 #, fuzzy msgid "Log &all chats" msgstr "Logar todos os chats" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 msgid "" "Choose the directory on your system where you'd like to save the chat logs." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" msgstr "Salvar arquivos de chat neste diretório principal:" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "Organizar pastas de chat por:" +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "Ano" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 #, fuzzy msgid "Month" msgstr "Mês" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "Dia" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" msgstr "Salvar todos os chats no diretório principal" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "Sua fonte para mensagens:" - +#. i18n: file ./settings/chatstylepage.ui line 45 #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "Forçar mensagens dos contatos a usar esta fonte:" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +msgid "&Chat style:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "Configurações" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 #, fuzzy -msgid "&Show graphics in chat messages" -msgstr "Mostrar data/hora nas mensagens" +msgid "&Show emoticons" +msgstr "Mostrar &Emoticons" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 #, fuzzy -msgid "S&how time in chat messages" +msgid "S&how messages time" msgstr "Mostrar data/hora nas mensagens" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -#, fuzzy -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "" -"Usar efeitos de fontes nas mensagens (*negrito*, /ItÔlico/ e _sublinhado_)" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -723,153 +1035,304 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 -msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "Cliente de email" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "Usar Hotmail" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "Usar um comando específico:" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "Notificação de email" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 -msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 #, fuzzy -msgid "Show email information" -msgstr "Exibir informação de email na lista de contatos" +msgid "Always" +msgstr "Ausente" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "Sua lista de contatos estÔ cheia" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "Erro no servidor" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "Sua fonte para mensagens:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" -msgstr "" -"Exibir uma notificação quando o email for recebido em \"outras pastas\"" +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "Forçar mensagens dos contatos a usar esta fonte:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 +msgid "" +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +#, fuzzy +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" +msgstr "" +"Usar efeitos de fontes nas mensagens (*negrito*, /ItÔlico/ e _sublinhado_)" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "&Localizar Contato" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 #, fuzzy msgid "&Emoticon Themes" msgstr "Mostrar &Emoticons" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 #, fuzzy msgid "Available emoticon styles:" msgstr "Mostrar &Emoticons" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 #, fuzzy msgid "&Custom Emoticons" msgstr "Emoticons Cartoon" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 msgid "Custom emoticons for this account:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -#, fuzzy -msgid "Click" -msgstr "Bloqueado" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 #, fuzzy msgid "Re&name" msgstr "Seu nome" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 #, fuzzy msgid "Remo&ve" msgstr "Removido" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +msgid "Web Browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +msgid "&Use the KDE default browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "diz:" +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "Cliente de email" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +msgid "&Use the KDE default email client" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +#, fuzzy +msgid "File Transfers" +msgstr "Transferência de arquivo completada." + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "Salvar arquivos de chat neste diretório principal:" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +msgid "and" +msgstr "e" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "Transferência de arquivo completada." #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -879,449 +1342,527 @@ msgstr "Estou distante do computador" msgid "Your name" msgstr "Seu nome" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "voce@hotmail.com" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "Online" - -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "Ausente" - -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "Volto Logo" - -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "Ocupado" - -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "Invisível" - -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "" - -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "Offline" - -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "No telefone" - -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "Saiu para Comer" - -#: chat/chatmaster.cpp:1061 -msgid "%1 is sending a wink: %2" -msgstr "" - -#: chat/chatmessagestyle.cpp:302 -#, fuzzy -msgid "%1 says:" -msgstr "diz: " - -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 -msgid "Add this emoticon: %1" -msgstr "" - -#: chat/chatview.cpp:529 -msgid "" -"Could not save chat log. Make sure you have permission to write in the " -"folder where logs are being saved." -msgstr "" - -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 -msgid "" -"The file '%1' already exists.\n" -"do you want to overwrite it?" -msgstr "" - -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Overwrite File" -msgstr "" - -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Over&write" -msgstr "" - -#: chat/chatview.cpp:977 -#, fuzzy -msgid "Add this &Emoticon..." -msgstr "Mostrar &Emoticons" - -#: chat/chatview.cpp:984 -#, fuzzy -msgid "Send &Email" -msgstr "&Enviar email" - -#: chat/chatview.cpp:988 -msgid "Copy E&mail" -msgstr "" - -#: chat/chatview.cpp:995 -msgid "Visit &Link" -msgstr "" - -#: chat/chatview.cpp:999 -msgid "Copy &Address" -msgstr "" - -#: chat/chatview.cpp:1013 -msgid "&Copy text" -msgstr "" - -#: chat/chatview.cpp:1014 -msgid "Select &All" -msgstr "" - -#: chat/chatview.cpp:1015 -#, fuzzy -msgid "Save chat to &File" -msgstr "Enviar um &Arquivo" - -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "" - -#: chat/chatwindow.cpp:239 +#: chat/chat.cpp:124 msgid "" "You can't start this invitation because there are multiple contacts in this " "chat." msgstr "" -#: chat/chatwindow.cpp:276 +#: chat/chat.cpp:158 #, fuzzy -msgid "%1 has joined the chat." +msgid "%1 has joined the chat." msgstr "entrou no chat" -#: chat/chatwindow.cpp:327 +#: chat/chat.cpp:211 #, fuzzy -msgid "The conversation went idle, %1 has left the chat." +msgid "The conversation went idle, %1 has left the chat." msgstr "saiu do chat" -#: chat/chatwindow.cpp:331 +#: chat/chat.cpp:215 #, fuzzy -msgid "%1 has left the chat." +msgid "%1 has left the chat." msgstr "saiu do chat" -#: chat/chatwindow.cpp:593 -msgid "%1 - Chat" -msgstr "" - -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" -msgstr "" - -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" -msgstr "" - -#: chat/chatwindow.cpp:757 +#: chat/chat.cpp:364 #, fuzzy -msgid "Contacts" -msgstr "&Adicionar Contato" +msgctxt "Name of a chat tab" +msgid "%1 and %2" +msgstr " estÔ digitando." -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 +#: chat/chat.cpp:371 #, fuzzy -msgid "Emoticons" -msgstr "Mostrar &Emoticons" +msgctxt "Name of a chat tab" +msgid "%1 et al." +msgstr " et al." -#: chat/chatwindow.cpp:819 +#: chat/chat.cpp:630 #, fuzzy -msgid "My emoticons" -msgstr "Mostrar &Emoticons" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" msgstr " (Esta mensagem foi enviada automaticamente)" -#: chat/chatwindow.cpp:1502 +#: chat/chat.cpp:934 +msgid "You received a wink from %1." +msgstr "" + +#: chat/chat.cpp:971 msgid "" "The wink could not be displayed. Make sure you have 'cabextract' installed." msgstr "" -#: chat/chatwindow.cpp:1511 +#: chat/chat.cpp:980 msgid "The wink could not be displayed. The data could not be read." msgstr "" -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" +#: chat/chat.cpp:1080 +msgid "You have received a wink from %1" msgstr "" -#: chat/chatwindow.cpp:1755 -#, fuzzy -msgid "Show Side&bar" -msgstr "Mostrar/Esconder Barra de &Contatos" +#: chat/chat.cpp:1100 +msgid "You received a nudge from %1!" +msgstr "" -#: chat/chatwindow.cpp:1756 +#: chat/chat.cpp:1119 #, fuzzy -msgid "Show the contact sidebar" -msgstr "Mostrar ou esconder barra de contatos" - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -#, fuzzy -msgid "Hide Side&bar" -msgstr "Mostrar/Esconder Barra de &Contatos" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -#, fuzzy -msgid "Hide the contact sidebar" -msgstr "Mostrar ou esconder barra de contatos" - -#: chat/chatwindow.cpp:1787 -#, fuzzy -msgid "The message '%1' could not be sent." +msgid "The message '%1' could not be sent." msgstr "não foi recebida" -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" -msgstr "" - -#: chat/chatwindow.cpp:1876 +#: chat/chat.cpp:1183 msgid "You've sent a nudge to %1!" msgstr "" -#: chat/chatwindow.cpp:1883 +#: chat/chat.cpp:1190 msgid "You've sent a nudge!" msgstr "" -#: chat/chatwindow.cpp:1972 -#, fuzzy -msgid "%1 is typing." -msgstr " estÔ digitando." - -#: chat/chatwindow.cpp:1981 -#, fuzzy -msgid "%1 and %2 are typing." -msgstr " estÔ digitando." - -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." +#: chat/chatmaster.cpp:1219 +msgid "%1 is sending a wink: %2" msgstr "" -#: chat/chatwindowinterface.cpp:175 -msgid "&Chat" -msgstr "&Chat" +#: chat/chatmessagestyle.cpp:298 +#, fuzzy +msgid "%1 says:" +msgstr "diz: " -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 +msgid "Add this emoticon: %1" +msgstr "" + +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 msgid "&Invite" msgstr "Conv&idar" -#: chat/chatwindowinterface.cpp:179 +#: chat/chatview.cpp:695 +msgid "" +"Could not save chat log. Make sure you have permission to write in the " +"folder where logs are being saved." +msgstr "" + +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 +msgid "" +"The file '%1' already exists.\n" +"do you want to overwrite it?" +msgstr "" + +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Overwrite File" +msgstr "" + +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Over&write" +msgstr "" + +#: chat/chatview.cpp:1275 +#, fuzzy +msgid "Add this &Emoticon..." +msgstr "Mostrar &Emoticons" + +#: chat/chatview.cpp:1282 +#, fuzzy +msgid "Send &Email" +msgstr "&Enviar email" + +#: chat/chatview.cpp:1286 +msgid "Copy E&mail" +msgstr "" + +#: chat/chatview.cpp:1293 +msgid "Visit &Link" +msgstr "" + +#: chat/chatview.cpp:1297 +msgid "Copy &Address" +msgstr "" + +#: chat/chatview.cpp:1312 +msgid "&Copy text" +msgstr "" + +#: chat/chatview.cpp:1313 +msgid "Select &All" +msgstr "" + +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 +#, fuzzy +msgid "Save chat to &File" +msgstr "Enviar um &Arquivo" + +#: chat/chatwindow.cpp:489 +msgid "&Chat" +msgstr "&Chat" + +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "Enviar um &Arquivo" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "Iniciar uma &Conferência" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 #, fuzzy msgid "Send a &Nudge!" msgstr "Enviar um &Arquivo" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 #, fuzzy msgid "&Emoticons" msgstr "Mostrar &Emoticons" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +msgid "Close &All Tabs" +msgstr "" + +#: chat/chatwindow.cpp:504 #, fuzzy msgid "Meeting" msgstr "Configurações" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "Mudar &Fonte" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "Mudar &Cor de Fonte" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 #, fuzzy msgid "&Font" msgstr "&Conectar" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 #, fuzzy msgid "Font &Color" msgstr "Mudar &Cor de Fonte" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +#, fuzzy +msgid "Emoticons" +msgstr "Mostrar &Emoticons" + +#: chat/chatwindow.cpp:658 +#, fuzzy +msgid "My emoticons" +msgstr "Mostrar &Emoticons" + +#: chat/chatwindow.cpp:738 #, fuzzy msgid "&Settings" msgstr "Configurações" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "Mostrar &Emoticons" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +#, fuzzy +msgid "Hide Side&bar" +msgstr "Mostrar/Esconder Barra de &Contatos" + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "Mostrar/Esconder Barra de &Contatos" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +#, fuzzy +msgid "Hide the contact sidebar" +msgstr "Mostrar ou esconder barra de contatos" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +msgid "Close all tabs" +msgstr "" + +#: chat/chatwindow.cpp:856 +msgid "Close current tab" +msgstr "" + +#: chat/chatwindow.cpp:1467 +#, fuzzy +msgid "Show Side&bar" +msgstr "Mostrar/Esconder Barra de &Contatos" + +#: chat/chatwindow.cpp:1468 +#, fuzzy +msgid "Show the contact sidebar" +msgstr "Mostrar ou esconder barra de contatos" + +#: chat/chatwindow.cpp:1565 +#, fuzzy +msgid "%1 is typing." +msgstr " estÔ digitando." + +#: chat/chatwindow.cpp:1575 +#, fuzzy +msgid "%1 and %2 are typing." +msgstr " estÔ digitando." + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "" + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "&Chat" + +#: chat/chatwindow.cpp:1615 +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "&Enviar email" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 #, fuzzy msgid "&View Profile" msgstr "Mo&strar Perfil" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "&Adicionar Contato" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 #, fuzzy msgid "A&llow Contact" msgstr "&Permitir Contato" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 #, fuzzy msgid "&Delete Contact" msgstr "&Remover Contato" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "&Bloquear Contato" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "&Desbloquear Contato" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 #, fuzzy msgid "&Friendly Name" msgstr "Seu nome amigÔvel:" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 #, fuzzy msgid "&Email Address" msgstr "Endereço de Email:" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "" -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 msgid "Blocked" msgstr "Bloqueado" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 #, fuzzy msgid "The contact is %1" msgstr "O contato estÔ convidando você a iniciar " -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +#, fuzzy +msgid "Add to Chat" +msgstr "Adicionar um contato" + +#: chat/emoticonsidebar.cpp:213 +#, fuzzy +msgid "Insert new" +msgstr "Inserir um emoticon" + +#: chat/emoticonsidebar.cpp:214 +msgid "Edit" +msgstr "" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +#, fuzzy +msgid "Remove" +msgstr "Removido" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 msgid "Web Messenger" msgstr "" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +msgid "Windows Live Messenger %1" +msgstr "" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "Online" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "Offline" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "Permitido" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "Removido" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 +#, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr " estÔ digitando." + +#: contactlistviewdelegate.cpp:150 msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "Ausente" + +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "Volto Logo" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "Ocupado" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "Invisível" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" msgstr "" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "No telefone" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "Saiu para Comer" + +#: dialogs/addcontactdialog.cpp:48 #, fuzzy msgid "Add a Contact" msgstr "Adicionar um contato" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 #, fuzzy msgid "No group" msgstr "Re&mover Grupo" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 #, fuzzy msgid "Add New Emoticon" msgstr "Mostrar &Emoticons" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "Mostrar &Emoticons" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "" @@ -1329,540 +1870,607 @@ msgstr "" msgid "Specify an Away message" msgstr "Especificar uma mensagem de Ausente" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "Usar um nome diferente para essa pessoa" - -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" -msgstr "Exibir um balão popup quando essa pessoa mudar online/offline" - -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "Imagem:" - -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "Som:" - -#: dialogs/contactpropertiesdialog.cpp:234 +#: dialogs/contactaddeduserdialog.cpp:85 #, fuzzy -msgid "Contact Properties for %1" -msgstr "Propriedades de contato para " +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " +msgstr "adicionou você a lista de contato dele(a). Você deseja:" -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " -msgstr "Endereço de Email: " +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "Conectado" -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "Nome atual: " - -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +msgid "Not seen yet" msgstr "" -#: dialogs/networkwindow.cpp:57 +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +#, fuzzy +msgid "No messages yet" +msgstr "Mostrar data/hora nas mensagens" + +#: dialogs/contactpropertiesdialog.cpp:381 +msgid "Last seen: %1" +msgstr "" + +#: dialogs/contactpropertiesdialog.cpp:382 +#, fuzzy +msgid "Last message: %1" +msgstr "Sua fonte para mensagens:" + +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "Endereço de Email: " + +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "Cliente de email" + +#: dialogs/networkwindow.cpp:79 msgid "S&ave tab" msgstr "" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 msgid "C&lear tab" msgstr "" -#: dialogs/networkwindow.cpp:59 -msgid "Cl&ose tab" -msgstr "" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 msgid "" "No connections are present.\n" "Cannot open the Network Window." msgstr "" -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 msgid "" "Could not save the Network Window log. Make sure you have permission to " "write in the folder where it is being saved." msgstr "" -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "" -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +msgid "Cannot send commands to this kind of connection!" +msgstr "" + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 #, fuzzy msgid "Completed" msgstr "Conectado" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +msgid "%1 of %2 received." msgstr "" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +msgid "%1 of %2 sent." msgstr "" -#: dialogs/transferwindow.cpp:55 -#, fuzzy -msgid "File Transfers" -msgstr "Transferência de arquivo completada." +#: dialogs/transferentry.cpp:373 +msgid "infinite" +msgstr "" -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 msgid "Cl&ean Up" msgstr "" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " "the theme folder '%1'." msgstr "" -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 msgid "Smile" msgstr "" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "" -#: emoticontheme.cpp:797 -msgid "Big smile" -msgstr "" - -#: emoticontheme.cpp:798 -#, fuzzy -msgid "Sad" -msgstr "e" - -#: emoticontheme.cpp:799 -msgid "Crying" -msgstr "" - -#: emoticontheme.cpp:800 -msgid "Angry" -msgstr "" - -#: emoticontheme.cpp:801 -msgid "Confused" -msgstr "" - -#: emoticontheme.cpp:802 -msgid "Embarrassed" -msgstr "" - -#: emoticontheme.cpp:803 -#, fuzzy -msgid "Disappointed" -msgstr "Desconectado" - -#: emoticontheme.cpp:804 -msgid "Hot" -msgstr "" - -#: emoticontheme.cpp:805 -msgid "Baring teeth" -msgstr "" - -#: emoticontheme.cpp:806 -msgid "Nerd" -msgstr "" - -#: emoticontheme.cpp:807 -msgid "Sick" -msgstr "" - -#: emoticontheme.cpp:808 -msgid "Surprised" -msgstr "" - -#: emoticontheme.cpp:809 -msgid "Party" -msgstr "" - -#: emoticontheme.cpp:810 -msgid "Sleepy" -msgstr "" - -#: emoticontheme.cpp:811 -msgid "Thinking" -msgstr "" - #: emoticontheme.cpp:812 -msgid "Don't tell anyone" +msgid "Big smile" msgstr "" #: emoticontheme.cpp:813 #, fuzzy -msgid "Secret telling" -msgstr "Configurações" +msgid "Sad" +msgstr "e" #: emoticontheme.cpp:814 -msgid "Eye-rolling" +msgid "Crying" msgstr "" #: emoticontheme.cpp:815 -msgid "Sarcastic" +msgid "Angry" msgstr "" #: emoticontheme.cpp:816 -msgid "I don't know" +msgid "Confused" msgstr "" #: emoticontheme.cpp:817 +msgid "Embarrassed" +msgstr "" + +#: emoticontheme.cpp:818 +#, fuzzy +msgid "Disappointed" +msgstr "Desconectado" + +#: emoticontheme.cpp:819 +msgid "Hot" +msgstr "" + +#: emoticontheme.cpp:820 +msgid "Baring teeth" +msgstr "" + +#: emoticontheme.cpp:821 +msgid "Nerd" +msgstr "" + +#: emoticontheme.cpp:822 +msgid "Sick" +msgstr "" + +#: emoticontheme.cpp:823 +msgid "Surprised" +msgstr "" + +#: emoticontheme.cpp:824 +msgid "Party" +msgstr "" + +#: emoticontheme.cpp:825 +msgid "Sleepy" +msgstr "" + +#: emoticontheme.cpp:826 +msgid "Thinking" +msgstr "" + +#: emoticontheme.cpp:827 +msgid "Don't tell anyone" +msgstr "" + +#: emoticontheme.cpp:828 +#, fuzzy +msgid "Secret telling" +msgstr "Configurações" + +#: emoticontheme.cpp:829 +msgid "Eye-rolling" +msgstr "" + +#: emoticontheme.cpp:830 +msgid "Sarcastic" +msgstr "" + +#: emoticontheme.cpp:831 +msgid "I don't know" +msgstr "" + +#: emoticontheme.cpp:832 #, fuzzy msgid "Be right back" msgstr "(Volto Logo)" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "" -#: emoticontheme.cpp:824 -msgid "Dog face" -msgstr "" - -#: emoticontheme.cpp:825 -#, fuzzy -msgid "Sun" -msgstr "Som:" - -#: emoticontheme.cpp:826 -msgid "Devil" -msgstr "" - -#: emoticontheme.cpp:827 -msgid "Right hug" -msgstr "" - -#: emoticontheme.cpp:828 -msgid "Girl" -msgstr "" - -#: emoticontheme.cpp:829 -msgid "Broken heart" -msgstr "" - -#: emoticontheme.cpp:830 -msgid "Wilted rose" -msgstr "" - -#: emoticontheme.cpp:831 -msgid "Thumbs down" -msgstr "" - -#: emoticontheme.cpp:832 -msgid "Cat face" -msgstr "" - -#: emoticontheme.cpp:833 -msgid "Sleeping half-moon" -msgstr "" - -#: emoticontheme.cpp:834 -msgid "Red lips" -msgstr "" - -#: emoticontheme.cpp:835 -#, fuzzy -msgid "Clapping" -msgstr "Conversando" - -#: emoticontheme.cpp:836 -msgid "Crossed fingers" -msgstr "" - -#: emoticontheme.cpp:837 -msgid "Auto" -msgstr "" - -#: emoticontheme.cpp:838 -msgid "Airplane" -msgstr "" - #: emoticontheme.cpp:839 -msgid "Turtle" +msgid "Dog face" msgstr "" #: emoticontheme.cpp:840 #, fuzzy -msgid "Snail" -msgstr "&Enviar email" +msgid "Sun" +msgstr "Som:" #: emoticontheme.cpp:841 -msgid "Black sheep" +msgid "Devil" msgstr "" #: emoticontheme.cpp:842 -msgid "Goat" +msgid "Right hug" msgstr "" #: emoticontheme.cpp:843 -msgid "Vampire bat" +msgid "Girl" msgstr "" #: emoticontheme.cpp:844 -msgid "Pizza" +msgid "Broken heart" msgstr "" #: emoticontheme.cpp:845 -msgid "Beer mug" +msgid "Wilted rose" msgstr "" #: emoticontheme.cpp:846 -msgid "Martini glass" +msgid "Thumbs down" msgstr "" #: emoticontheme.cpp:847 -msgid "Coffee cup" +msgid "Cat face" msgstr "" #: emoticontheme.cpp:848 -msgid "Birthday cake" +msgid "Sleeping half-moon" msgstr "" #: emoticontheme.cpp:849 -msgid "Plate" +msgid "Red lips" msgstr "" #: emoticontheme.cpp:850 -msgid "Bowl" -msgstr "" +#, fuzzy +msgid "Clapping" +msgstr "Conversando" #: emoticontheme.cpp:851 -msgid "Star" +msgid "Crossed fingers" msgstr "" #: emoticontheme.cpp:852 -msgid "Rainbow" +msgid "Auto" msgstr "" #: emoticontheme.cpp:853 -msgid "Stormy cloud" +msgid "Airplane" msgstr "" #: emoticontheme.cpp:854 -msgid "Lightning" +msgid "Turtle" msgstr "" #: emoticontheme.cpp:855 -msgid "Umbrella" -msgstr "" +#, fuzzy +msgid "Snail" +msgstr "&Enviar email" #: emoticontheme.cpp:856 -msgid "Island with a palm tree" +msgid "Black sheep" msgstr "" #: emoticontheme.cpp:857 -msgid "Telephone receiver" +msgid "Goat" msgstr "" #: emoticontheme.cpp:858 -msgid "Mobile Phone" +msgid "Vampire bat" msgstr "" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 -msgid "Email" +#: emoticontheme.cpp:859 +msgid "Pizza" msgstr "" #: emoticontheme.cpp:860 +msgid "Beer mug" +msgstr "" + +#: emoticontheme.cpp:861 +msgid "Martini glass" +msgstr "" + +#: emoticontheme.cpp:862 +msgid "Coffee cup" +msgstr "" + +#: emoticontheme.cpp:863 +msgid "Birthday cake" +msgstr "" + +#: emoticontheme.cpp:864 +msgid "Plate" +msgstr "" + +#: emoticontheme.cpp:865 +msgid "Bowl" +msgstr "" + +#: emoticontheme.cpp:866 +msgid "Star" +msgstr "" + +#: emoticontheme.cpp:867 +msgid "Rainbow" +msgstr "" + +#: emoticontheme.cpp:868 +msgid "Stormy cloud" +msgstr "" + +#: emoticontheme.cpp:869 +msgid "Lightning" +msgstr "" + +#: emoticontheme.cpp:870 +msgid "Umbrella" +msgstr "" + +#: emoticontheme.cpp:871 +msgid "Island with a palm tree" +msgstr "" + +#: emoticontheme.cpp:872 +msgid "Telephone receiver" +msgstr "" + +#: emoticontheme.cpp:873 +msgid "Mobile Phone" +msgstr "" + +#: emoticontheme.cpp:874 +msgid "Email" +msgstr "" + +#: emoticontheme.cpp:875 #, fuzzy msgid "Clock" msgstr "Bloqueado" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 #, fuzzy msgid "Camera" msgstr "Seu nome" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 #, fuzzy msgid "Money" msgstr "Mês" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 #, fuzzy msgid "Light bulb" msgstr "Lista cheia" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 #, fuzzy msgid "KMess Icon" msgstr "KMess" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "A conexão ao servidor falhou." + +#: initialview.cpp:377 +msgid "Connect" +msgstr "Conectar" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "&Desconectar" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "" -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "" -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "Novo &Grupo" + +#: kmess.cpp:226 #, fuzzy msgid "Add a group" msgstr "&Adicionar Grupo" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "Informe o nove nome para esse grupo:" -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "" - -#: kmess.cpp:638 +#: kmess.cpp:569 #, fuzzy msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" msgstr "Tem certeza que deseja remover este grupo?" -#: kmess.cpp:640 +#: kmess.cpp:571 #, fuzzy msgid "Remove contact" msgstr "&Remover Contato" -#: kmess.cpp:641 kmess.cpp:684 -#, fuzzy -msgid "Remove" -msgstr "Removido" - -#: kmess.cpp:642 +#: kmess.cpp:573 #, fuzzy msgid "Remove and block" msgstr "Removido" -#: kmess.cpp:681 -#, fuzzy +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "Tem certeza que deseja remover este grupo?" -#: kmess.cpp:683 +#: kmess.cpp:631 #, fuzzy -msgid "Remove group" -msgstr "Re&mover Grupo" +msgctxt "dialog button" +msgid "Remove" +msgstr "Removido" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "Este é um grupo especial e não pode ser alterado." -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 #, fuzzy msgid "Rename group" msgstr "Re&nomear Grupo" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "Conectado" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "Autenticação falhou" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "Desconectado" -#: kmess.cpp:1441 +#: kmess.cpp:1408 msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" -#: kmess.cpp:1445 +#: kmess.cpp:1412 #, fuzzy msgid "Error with notifications" msgstr "Notificação de email" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "KMess" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "&AƧƵes" @@ -1884,953 +2492,864 @@ msgstr "&Localizar Contato" msgid "Search by &Interest" msgstr "Pesquisar por &Interesse" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "&Localizar Contato" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "Nova Cont&a" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "Con&figuraƧƵes de Conta" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "Co&nectado" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "&Desconectar" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "Mostrar Meu &Perfil" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "&Meu Status" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "Ausente com auto-resposta" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "E&xibir Contatos Permitidos" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 msgid "Show &Offline Contacts" msgstr "Exibir Contatos &Offline" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "Exibir Contatos &Removidos" -#: kmessinterface.cpp:303 +#: kmessinterface.cpp:318 #, fuzzy -msgid "Show &Display Pictures" +msgid "Show &Empty Groups" +msgstr "Mostrar &Emoticons" + +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" msgstr "Imagem:" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "&Enviar email" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "&Ordenar Contatos por" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "Grupo" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "Online/Offline" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +#, fuzzy +msgid "[%1] %2 goes online" +msgstr " estĆ” offline" + +#: kmessview.cpp:363 +#, fuzzy +msgid "[%1] %2 goes offline" +msgstr " estĆ” offline" + +#: kmessview.cpp:559 #, fuzzy msgid "Cha&t" msgstr "&Chat" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "&Propriedades" -#: kmessview.cpp:492 +#: kmessview.cpp:569 #, fuzzy msgid "&Remove from group" msgstr "Re&mover Grupo" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +#, fuzzy +msgid "&Listening Music" +msgstr "Enviando arquivo " + +#: kmessview.cpp:601 #, fuzzy msgid "&Copy to Group" msgstr "&Mover para Grupo" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "&Mover para Grupo" -#: kmessview.cpp:549 +#: kmessview.cpp:646 msgid "Move Group &Down" msgstr "Mover Grupo para &Baixo" -#: kmessview.cpp:550 +#: kmessview.cpp:647 msgid "Move Group &Up" msgstr "Mover Grupo para &Cima" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "Re&mover Grupo" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "Re&nomear Grupo" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "" -#: kmessview.cpp:918 +#: kmessview.cpp:1075 +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "" + +#: kmessview.cpp:1076 +#, fuzzy +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "Sua fonte para mensagens:" + +#: kmessview.cpp:1085 msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "" -#: kmessview.cpp:921 +#: kmessview.cpp:1090 #, fuzzy -msgctxt "Contacts count in group tooltip" +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "&Adicionar Contato" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +#, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "&Adicionar Contato" + +#: kmessview.cpp:1504 msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "" -#: kmessview.cpp:1543 -#, fuzzy -msgid "You have 1 new e-mail in your inbox." -msgstr "novo email" +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" -#: kmessview.cpp:1547 -#, fuzzy -msgid "You have %1 new emails in your inbox." -msgstr "novos emails" - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "KMess" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 msgid "Project support" msgstr "" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 #, fuzzy msgid "Current developer" msgstr "Desenvolvedor do GnomeMeeting" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 #, fuzzy msgid "" "German translation, testing, documentation, web master, project management, " "etc..." msgstr "Tradução para AlemĆ£o, testes, documentação, e pĆ”gina web" -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "" "Conjunto de emoticons padrĆ£o amarelo/azul/violeta e tradução para Italiano" -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "Emoticons Cartoon" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "Tema Som padrĆ£o" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "Tradução para Ɓrabe, correção do salvamento de arquivo." -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 #, fuzzy msgid "More Arabic translation" msgstr "Mais Tradução para Turco" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "Tradução para PortuguĆŖs do Brasil" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 #, fuzzy msgid "Catalan translation" msgstr "Tradução para CatalĆ£o" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 #, fuzzy msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "Tradução para ChinĆŖs Simplificado, correção do envio de arquivos" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 #, fuzzy msgid "More Simplified Chinese translation" msgstr "Tradução para ChinĆŖs Simplificado, correção do envio de arquivos" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 #, fuzzy msgid "Traditional Chinese translation" msgstr "Tradução para CatalĆ£o" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 #, fuzzy msgid "Danish translation" msgstr "Tradução para DinamarquĆŖs" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 #, fuzzy msgid "More Danish translation" msgstr "Tradução para DinamarquĆŖs" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "Tradução para AlemĆ£o" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 #, fuzzy msgid "More Dutch translation" msgstr "Tradução para AlemĆ£o" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 #, fuzzy msgid "Estonian translation" msgstr "Tradução para Estoniano" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 #, fuzzy msgid "Finnish translation" msgstr "Tradução para DinamarquĆŖs" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 #, fuzzy msgid "More Finnish translation" msgstr "Tradução para DinamarquĆŖs" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "Tradução para FrancĆŖs" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 #, fuzzy msgid "More French translation, MSN6 emoticon definitions" msgstr "Tradução para FrancĆŖs" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 #, fuzzy msgid "More French translation" msgstr "Tradução para FrancĆŖs" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 #, fuzzy msgid "Hungarian translation" msgstr "Tradução para Estoniano" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 #, fuzzy msgid "More Italian translation" msgstr "Tradução para Coreano" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "Tradução para Coreano" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 #, fuzzy msgid "Norsk BokmĆ„l translation" msgstr "Tradução para Norsk Bokmi" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 #, fuzzy msgid "Slovenian translation" msgstr "Tradução para Coreano" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "Tradução para Espanhol" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 #, fuzzy msgid "More Spanish translation" msgstr "mais tradução para Espanhol" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 #, fuzzy msgid "Swedish translation" msgstr "Tradução para Espanhol" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 #, fuzzy msgid "Thai translation" msgstr "Tradução para TailandĆŖs" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "Tradução para Turco" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "Mais Tradução para Turco" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -#, fuzzy -msgid "Guido Solinas" -msgstr "Online" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "TransferĆŖncia de arquivo completada." + +#: main.cpp:134 msgid "P4-Context field support" msgstr "" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "CorreƧƵes Xinerama" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "Código de recepção do arquivo original" -#: main.cpp:120 -msgid "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" msgstr "" -#: main.cpp:120 +#: main.cpp:138 +msgid "KWallet support" +msgstr "" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "VĆ”rias correƧƵes de internacionalização." + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "VĆ”rias correƧƵes de internacionalização." -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "Desenvolvedor do GnomeMeeting" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "Cara com um saco sobre a cabeƧa" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "Inspiração e códigos diversos" -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 +#: main.cpp:150 #, fuzzy msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "Código de Dicas BalĆ£o" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "Código do Timer de Intatividade" -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 +#: main.cpp:152 msgid "Close-to-tray icon screenshot code" msgstr "" -#: main.cpp:131 +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 #, fuzzy msgid "Your name here?" msgstr "Seu nome" -#: main.cpp:131 +#: main.cpp:156 msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" -#: main.cpp:134 +#: main.cpp:159 #, fuzzy msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Seu nome" -#: main.cpp:135 +#: main.cpp:160 #, fuzzy msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "Seu endereƧo de email:" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "Conectar automaticamente com o email fornecido" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 #, fuzzy msgid "The contact cancelled the session." msgstr "O Contato cancelou o convite." -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 #, fuzzy msgid "The contact rejected the invitation." msgstr "O contato rejeitou o convite." -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 #, fuzzy msgid "You have cancelled the session." msgstr "VocĆŖ cancelou o convite." -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "VocĆŖ rejeitou o convite." -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +msgid "Do you want to accept or cancel?" msgstr "" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +msgid "Click to cancel." msgstr "" -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 #, fuzzy msgid "Do you want to accept the file: %1 (%2)" msgstr "VocĆŖ deseja aceitar o arquivo: " -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 #, fuzzy msgid "The transfer of %1 failed. Couldn't open file." msgstr "falhou. ImpossĆ­vel abrir arquivo" -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "TransferĆŖncia aceita." + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 #, fuzzy msgid "Connecting to %1, port %2" msgstr "Tempo Limite de ConexĆ£o Atingido" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 #, fuzzy msgid "The transfer was cancelled" msgstr "TransferĆŖncia aceita." -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 #, fuzzy msgid "Connection established" msgstr "Tempo Limite de ConexĆ£o Atingido" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 #, fuzzy msgid "Successfully transferred file: %1" msgstr "Arquivo transferido com sucesso: " -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 #, fuzzy msgid "The transfer of %1 failed. The file does not exist." msgstr "falhou. O arquivo nĆ£o existe" -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 #, fuzzy msgid "The transfer of %1 failed. The file could not be read." msgstr "falhou. Uma conexĆ£o nĆ£o pĆ“de ser estabelecida" -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 #, fuzzy msgid "Sending file %1" msgstr "Enviando arquivo " -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "TransferĆŖncia aceita." - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 #, fuzzy msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "O Contato cancelou o convite." -#: network/applications/filetransferp2p.cpp:345 +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." +msgstr "" + +#: network/applications/filetransferp2p.cpp:348 +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "" + +#: network/applications/filetransferp2p.cpp:378 #, fuzzy -msgid "The transfer of %1 failed. Couldn't open file" +msgid "The transfer of file "%1" failed. Couldn't save the file." msgstr "falhou. ImpossĆ­vel abrir arquivo" -#: network/applications/filetransferp2p.cpp:524 +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 #, fuzzy -msgid "The contact cancelled the transfer." +msgid "The contact has cancelled the transfer of file "%1"." msgstr "O Contato cancelou o convite." -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "VocĆŖ cancelou o convite." + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "" -#: network/applications/filetransferp2p.cpp:768 +#: network/applications/filetransferp2p.cpp:676 #, fuzzy -msgid "The transfer of %1 failed. The file does not exist." +msgid "Successfully sent file "%1"." +msgstr "Arquivo transferido com sucesso: " + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "Arquivo transferido com sucesso: " + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "falhou. O arquivo nĆ£o existe" -#: network/applications/filetransferp2p.cpp:773 +#: network/applications/filetransferp2p.cpp:818 #, fuzzy -msgid "The transfer of %1 failed. The file could not be read." +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "falhou. Uma conexĆ£o nĆ£o pĆ“de ser estabelecida" -#: network/applications/filetransferp2p.cpp:809 +#: network/applications/filetransferp2p.cpp:855 #, fuzzy -msgid "Sending file %1 (%2)" +msgid "Sending file "%1" (%2)." msgstr "Enviando arquivo " -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "O Contato cancelou o convite." + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "VocĆŖ estĆ” convidade a iniciar uma conferĆŖncia (usando GnomeMeeting)." -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 #, fuzzy msgid "Starting GnomeMeeting. Connecting to %1." msgstr "Iniciando o GnomeMeeting. Conectando a " -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "Convidadando o contato para uma conferĆŖncia." -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "" -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 #, fuzzy msgid "The invitation was aborted. An internal error occured." msgstr "O contato rejeitou o convite." -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 #, fuzzy msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "falhou. ImpossĆ­vel criar um soquete" -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 #, fuzzy msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "O Contato cancelou o convite." -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "" -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 #, fuzzy msgid "The invitation was aborted." msgstr "O Contato cancelou o convite." -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "VocĆŖ foi convidado a compartilhar o desktop dessa pessoa." -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 #, fuzzy msgid "Starting KRDC. Connecting to %1." msgstr "Iniciando o KRDC. Conectando a " -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." -msgstr "" +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +#, fuzzy +msgid "The contact rejected the invitation. An internal error occured." +msgstr "O contato rejeitou o convite." -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +#, fuzzy +msgid "The transfer failed." +msgstr "A transferĆŖncia de " + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." msgstr "" -#: network/applications/p2papplication.cpp:1503 -#, fuzzy -msgid "The transfer failed. Data preparation failed." -msgstr "O Contato cancelou o convite." - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -#, fuzzy -msgid "The contact rejected the invitation. An internal error occured." -msgstr "O contato rejeitou o convite." - -#: network/applications/p2papplication.cpp:1626 -#, fuzzy -msgid "The transfer failed." -msgstr "A transferĆŖncia de " - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 #, fuzzy msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "falhou. O arquivo nĆ£o existe" -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +#, fuzzy +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "falhou. ImpossĆ­vel criar um soquete" + +#: network/applications/p2papplicationbase.cpp:1015 +#, fuzzy +msgid "The transfer failed. An internal error occured." +msgstr "O contato rejeitou o convite." + +#: network/applications/p2papplicationbase.cpp:1176 +#, fuzzy +msgid "The transfer failed. Couldn't open data source." +msgstr "falhou. ImpossĆ­vel criar um soquete" + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "" + +#: network/applications/p2papplication.cpp:1071 +#, fuzzy +msgid "The transfer failed. Data preparation failed." +msgstr "O Contato cancelou o convite." + +#: network/applications/p2papplication.cpp:1178 #, fuzzy msgid "The invitation was cancelled. Message was not directed to us." msgstr "O Contato cancelou o convite." -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 #, fuzzy msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "falhou. O arquivo nĆ£o existe" -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "" -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "" -#: network/applications/p2papplication.cpp:3297 -#, fuzzy -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "falhou. ImpossĆ­vel criar um soquete" - -#: network/applications/p2papplication.cpp:3316 -#, fuzzy -msgid "The transfer failed. An internal error occured." -msgstr "O contato rejeitou o convite." - -#: network/applications/p2papplication.cpp:3693 -#, fuzzy -msgid "The transfer failed. Couldn't open data source." -msgstr "falhou. ImpossĆ­vel criar um soquete" - -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:3113 msgid "Waiting for connection" msgstr "" -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 #, fuzzy msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " "accept." msgstr "falhou. ImpossĆ­vel criar um soquete" -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 #, fuzzy msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." msgstr "falhou. ImpossĆ­vel criar um soquete" -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "" -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 #, fuzzy msgid "You are invited to start a voice conversation." msgstr "VocĆŖ foi convidado a compartilhar o desktop dessa pessoa." -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 #, fuzzy msgid "" "You are invited to start a voice conversation but support for this was not " "installed" msgstr "VocĆŖ estĆ” convidade a iniciar uma conferĆŖncia (usando GnomeMeeting)." -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 #, fuzzy msgid "You have cancelled the voice conversation." msgstr "VocĆŖ cancelou o convite." -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 #, fuzzy msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "O Contato cancelou o convite." -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 #, fuzzy msgid "Start voice conversation. Connecting to %1." msgstr "Iniciando o GnomeMeeting. Conectando a " -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 #, fuzzy msgid "Start voice conversation. Listening on %1." msgstr "Iniciando o GnomeMeeting. Conectando a " -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 #, fuzzy msgid "Inviting the contact to a voice conversation." msgstr "Convidadando o contato para uma conferĆŖncia." -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 #, fuzzy msgid "The contact is inviting you for '%1', but this is not implemented yet." @@ -2879,661 +3398,865 @@ msgstr "" msgid "Receiving file %1" msgstr "Recebendo o arquivo " -#: network/msnconnection.cpp:477 -#, fuzzy -msgid "1 ping lost" -msgstr "Adquirindo listas" - -#: network/msnconnection.cpp:481 -#, fuzzy -msgid "%1 pings lost" -msgstr "Adquirindo listas" - -#: network/msnconnection.cpp:496 -#, fuzzy -msgid "The connection to the server was lost." -msgstr "A conexĆ£o ao servidor falhou." - -#: network/msnconnection.cpp:704 -msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." +#: network/msnconnection.cpp:589 +msgid "KMess could not access the remote webservice.
Details: %1" msgstr "" -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "" - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" - -#: network/msnnotificationconnection.cpp:724 -#, fuzzy -msgid "Show MSN Messenger Service status?" -msgstr "Exibir status do serviƧo .NET?" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "Erro no servidor" - -#: network/msnnotificationconnection.cpp:1344 +#: network/msnnotificationconnection.cpp:1317 #, fuzzy msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" msgstr "" "Você foi desconectado porque você \n" "conectou-se de outro cliente MSN Messenger \n" "ou de outro local" -#: network/msnnotificationconnection.cpp:1558 +#: network/msnnotificationconnection.cpp:1532 msgid "Got synchronization" msgstr "Obter sincronização" -#: network/msnnotificationconnection.cpp:1699 -msgid "Authenticating" +#: network/msnnotificationconnection.cpp:1670 +#, fuzzy +msgid "Authenticating..." msgstr "Autenticando" -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "Recebida confirmação de usuÔrio" - -#: network/msnnotificationconnection.cpp:1752 +#: network/msnnotificationconnection.cpp:1719 msgid "Waiting for contact list..." msgstr "" -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "Transferir para servidor de notificação" - -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." msgstr "" -#: network/msnnotificationconnection.cpp:2042 +#: network/msnnotificationconnection.cpp:1894 +msgid "Authentication failed, please verify your account name and password." +msgstr "" + +#: network/msnnotificationconnection.cpp:1993 #, fuzzy msgid "Connecting..." msgstr "Conectar" -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" +#: network/msnnotificationconnection.cpp:2167 +msgid "Unknown command received from the server: %1" msgstr "" -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 +#: network/msnnotificationconnection.cpp:2192 msgid "Invalid command syntax" msgstr "" -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -#, fuzzy -msgid "There was an internal error in KMess: %1" -msgstr "HÔ um erro interno do servidor" - -#: network/msnnotificationconnection.cpp:2243 +#: network/msnnotificationconnection.cpp:2196 msgid "Invalid command parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2246 +#: network/msnnotificationconnection.cpp:2199 msgid "The email you have tried to add is not a MSN Messenger account" msgstr "" -#: network/msnnotificationconnection.cpp:2249 +#: network/msnnotificationconnection.cpp:2204 msgid "Domain name missing" msgstr "" -#: network/msnnotificationconnection.cpp:2252 +#: network/msnnotificationconnection.cpp:2208 msgid "Already logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2255 +#: network/msnnotificationconnection.cpp:2211 #, fuzzy msgid "The account name given is invalid" msgstr "O usuÔrio informado é invÔlido" -#: network/msnnotificationconnection.cpp:2258 +#: network/msnnotificationconnection.cpp:2215 msgid "" "That account name is invalid, or your passport has not been confirmed yet" msgstr "" -#: network/msnnotificationconnection.cpp:2261 +#: network/msnnotificationconnection.cpp:2218 msgid "Your contact list is full" msgstr "Sua lista de contatos estÔ cheia" -#: network/msnnotificationconnection.cpp:2264 +#: network/msnnotificationconnection.cpp:2223 msgid "Invalid SBP parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2267 +#: network/msnnotificationconnection.cpp:2226 #, fuzzy msgid "This contact is already on your list" msgstr "Adicionar este contato à sua lista \"Amigos\"" -#: network/msnnotificationconnection.cpp:2270 +#: network/msnnotificationconnection.cpp:2230 #, fuzzy msgid "This contact is not on your list" msgstr "O contato estÔ convidando você a iniciar " -#: network/msnnotificationconnection.cpp:2273 +#: network/msnnotificationconnection.cpp:2234 msgid "This contact is not online" msgstr "" -#: network/msnnotificationconnection.cpp:2276 +#: network/msnnotificationconnection.cpp:2239 msgid "Already in this mode" msgstr "" -#: network/msnnotificationconnection.cpp:2279 +#: network/msnnotificationconnection.cpp:2243 #, fuzzy msgid "Contact is in the opposite list" msgstr "O contato estÔ convidando você a iniciar " -#: network/msnnotificationconnection.cpp:2282 +#: network/msnnotificationconnection.cpp:2247 +msgid "" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." +msgstr "" + +#: network/msnnotificationconnection.cpp:2251 #, fuzzy msgid "Your contact list has too many groups" msgstr "Sua lista de contatos estÔ cheia" -#: network/msnnotificationconnection.cpp:2285 +#: network/msnnotificationconnection.cpp:2255 #, fuzzy msgid "This group can't be changed" msgstr "Este é um grupo especial e não pode ser alterado." -#: network/msnnotificationconnection.cpp:2288 +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "Sua lista de contatos estÔ cheia" + +#: network/msnnotificationconnection.cpp:2264 msgid "This group is not empty" msgstr "" -#: network/msnnotificationconnection.cpp:2291 -msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" -msgstr "" - -#: network/msnnotificationconnection.cpp:2294 +#: network/msnnotificationconnection.cpp:2268 msgid "The group name is too long" msgstr "" -#: network/msnnotificationconnection.cpp:2297 +#: network/msnnotificationconnection.cpp:2273 msgid "Attempted to change group \"0\"" msgstr "" -#: network/msnnotificationconnection.cpp:2300 +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +#, fuzzy +msgid "There was an internal error in KMess: %1" +msgstr "HÔ um erro interno do servidor" + +#: network/msnnotificationconnection.cpp:2277 #, fuzzy msgid "Invalid Group" msgstr "Re&nomear Grupo" -#: network/msnnotificationconnection.cpp:2303 +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 msgid "Switchboard server failed" msgstr "" -#: network/msnnotificationconnection.cpp:2306 +#: network/msnnotificationconnection.cpp:2287 #, fuzzy msgid "Transfer to switchboard server failed" msgstr "Transferir para servidor de notificação" -#: network/msnnotificationconnection.cpp:2309 +#: network/msnnotificationconnection.cpp:2291 msgid "Direct connection (MSNSLP) error, connection failed" msgstr "" -#: network/msnnotificationconnection.cpp:2312 +#: network/msnnotificationconnection.cpp:2295 msgid "Required field missing" msgstr "" -#: network/msnnotificationconnection.cpp:2315 +#: network/msnnotificationconnection.cpp:2299 msgid "Not logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" +#: network/msnnotificationconnection.cpp:2302 +msgid "No permissions given for this account" msgstr "" -#: network/msnnotificationconnection.cpp:2322 +#: network/msnnotificationconnection.cpp:2307 msgid "Command is disabled" msgstr "" -#: network/msnnotificationconnection.cpp:2325 +#: network/msnnotificationconnection.cpp:2310 msgid "Your account is banned." msgstr "" -#: network/msnnotificationconnection.cpp:2329 +#: network/msnnotificationconnection.cpp:2314 #, fuzzy msgid "Challenge response failed" msgstr "A transferência de " -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" +#: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" msgstr "" -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" +#: network/msnnotificationconnection.cpp:2323 +msgid "You are opening chat sessions too fast" msgstr "" -#: network/msnnotificationconnection.cpp:2341 +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" +msgstr "Você cancelou o convite." + +#: network/msnnotificationconnection.cpp:2334 msgid "Unexpected command sequence" msgstr "" -#: network/msnnotificationconnection.cpp:2344 +#: network/msnnotificationconnection.cpp:2338 #, fuzzy msgid "Bad friend name" msgstr "Nome amigÔvel invÔlido" -#: network/msnnotificationconnection.cpp:2348 +#: network/msnnotificationconnection.cpp:2344 msgid "Bad CVR data" msgstr "" -#: network/msnnotificationconnection.cpp:2353 +#: network/msnnotificationconnection.cpp:2350 msgid "The server reports KMess is flooding it with too many data" msgstr "" -#: network/msnnotificationconnection.cpp:2358 +#: network/msnnotificationconnection.cpp:2357 #, fuzzy msgid "Authentication ticket was incorrect" msgstr "Autenticação falhou" -#: network/msnnotificationconnection.cpp:2362 +#: network/msnnotificationconnection.cpp:2360 msgid "You can't start a chat with someone while you are invisible." msgstr "" "Você não pode iniciar um chat com alguém enquanto você estiver invisível." -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." +#: network/msnnotificationconnection.cpp:2364 +msgid "Not accepting new contacts" msgstr "" -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." +#: network/msnnotificationconnection.cpp:2368 +msgid "" +"You have a kids passport account, you need parental consent to chat online." msgstr "" -#: network/msnnotificationconnection.cpp:2373 +#: network/msnnotificationconnection.cpp:2371 +msgid "Your passport account needs to be verified first." +msgstr "" + +#: network/msnnotificationconnection.cpp:2375 msgid "Bad USR ticket" msgstr "" -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" msgstr "" -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" +#: network/msnnotificationconnection.cpp:2399 +#, fuzzy +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." msgstr "HÔ um erro interno do servidor" +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + #: network/msnnotificationconnection.cpp:2414 -#, fuzzy -msgid "The server is too busy" -msgstr "O servidor estÔ ocupado" - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "O servidor estÔ indisponível" - -#: network/msnnotificationconnection.cpp:2422 msgid "Peer notification server down" msgstr "Servidor de notificação de pontos indisponível" -#: network/msnnotificationconnection.cpp:2426 +#: network/msnnotificationconnection.cpp:2418 #, fuzzy msgid "The server is going down" msgstr "O servidor sairÔ do ar em breve" -#: network/msnnotificationconnection.cpp:2429 +#: network/msnnotificationconnection.cpp:2422 msgid "The server is going down soon" msgstr "O servidor sairÔ do ar em breve" -#: network/msnnotificationconnection.cpp:2433 +#: network/msnnotificationconnection.cpp:2427 msgid "Write is blocking" msgstr "" -#: network/msnnotificationconnection.cpp:2436 +#: network/msnnotificationconnection.cpp:2431 msgid "Session is overloaded" msgstr "" -#: network/msnnotificationconnection.cpp:2441 +#: network/msnnotificationconnection.cpp:2438 #, fuzzy msgid "The server is not available" msgstr "O servidor estÔ indisponível" -#: network/msnnotificationconnection.cpp:2444 +#: network/msnnotificationconnection.cpp:2442 msgid "Authentication failed" msgstr "Autenticação falhou" -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" +#: network/msnnotificationconnection.cpp:2449 +msgid "Unknown error code received from the server: %1" msgstr "" -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +msgctxt "Error dialog box title" +msgid "MSN error" msgstr "" -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "" +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "minutos" +msgstr[1] "minutos" #: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." +msgid "Server closes for maintenance in %1!" msgstr "" #: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." msgstr "" -#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:2901 msgid "Lost reference to SOAP client" msgstr "" -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +msgid "KMess could not process Offline-IM messages.
Details: %1" msgstr "" -#: network/msnnotificationconnection.cpp:3209 +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "Autenticação falhou" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "HĆ” um erro interno do servidor" + +#: network/msnnotificationconnection.cpp:3242 +msgctxt "Login error message, with more details for developer versions" msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" msgstr "" -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" msgstr "" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "A conexão ao servidor falhou." + +#: network/msnnotificationconnection.cpp:3302 +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" +msgstr "" + +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "Erro no servidor" + +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "Tempo Limite de Conexão Atingido" + +#: network/msnsockettcp.cpp:368 +#, fuzzy +msgid "1 ping lost" +msgstr "Adquirindo listas" + +#: network/msnsockettcp.cpp:372 +#, fuzzy +msgid "%1 pings lost" +msgstr "Adquirindo listas" + +#: network/msnsockettcp.cpp:387 +#, fuzzy +msgid "The connection to the server was lost." +msgstr "A conexão ao servidor falhou." + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "Esta pessoa estÔ offline ou invisível." -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "" -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 #, fuzzy msgid "The message \"%1\" was not received!" msgstr "não foi recebida" -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "" -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +msgid "In %1's chat: %2" msgstr "" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +msgid "%1 says:
'%2'" msgstr "" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" -msgstr "" - -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" -msgstr "" - -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" -msgstr "" - -#: notification/notificationchat.cpp:200 +#: notification/chatnotification.cpp:171 #, fuzzy -msgid "%1 has sent you a handwritten message!" +msgid "%1 has sent you an offline message:
'%2'" msgstr " estĆ” online" -#: notification/notificationchat.cpp:204 -#, fuzzy -msgid "%1 has sent you a nudge!" -msgstr " estĆ” online" - -#: notification/notificationchat.cpp:208 -#, fuzzy -msgid "%1 has sent you a wink!" -msgstr " estĆ” online" - -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" +#: notification/chatnotification.cpp:178 +msgid "%1's chat requests attention!" msgstr "" -#: notification/notificationchat.cpp:215 +#: notification/chatnotification.cpp:183 +msgid "%1:
%2" +msgstr "" + +#: notification/chatnotification.cpp:190 #, fuzzy -msgid "%1 is sending you a file!" +msgid "%1 has sent you a handwritten message!" msgstr " estĆ” online" -#: notification/notificationchat.cpp:216 +#: notification/chatnotification.cpp:194 #, fuzzy -msgid "%1 has sent you an invitation!" +msgid "%1 has sent you a nudge!" msgstr " estĆ” online" -#: notification/notificationchat.cpp:223 +#: notification/chatnotification.cpp:198 #, fuzzy -msgid "%1 has canceled the webcam session!" +msgid "%1 has sent you a wink!" +msgstr " estĆ” online" + +#: notification/chatnotification.cpp:204 +msgid "%1 wants to use the webcam!" +msgstr "" + +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" +msgstr " estĆ” online" + +#: notification/chatnotification.cpp:206 +#, fuzzy +msgid "%1 has sent you an invitation!" +msgstr " estĆ” online" + +#: notification/chatnotification.cpp:213 +#, fuzzy +msgid "%1 has canceled the webcam session!" msgstr "VocĆŖ cancelou o convite." -#: notification/notificationchat.cpp:224 +#: notification/chatnotification.cpp:214 #, fuzzy -msgid "%1 has canceled the file transfer!" +msgid "%1 has canceled the file transfer!" msgstr "O Contato cancelou o convite." -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +msgid "%1's activity has been canceled!" msgstr "" -#: notification/notificationchat.cpp:232 -msgid "%1 has accepted to use the webcam!" -msgstr "" - -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" -msgstr "" - -#: notification/notificationchat.cpp:234 -msgid "%1 has accepted your invitation!" -msgstr "" - -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" -msgstr "" - -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" -msgstr "" - -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" -msgstr "" - -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" -msgstr "" - -#: notification/notificationchat.cpp:251 +#: notification/chatnotification.cpp:222 #, fuzzy -msgid "The file transfer with %1 has failed!" +msgid "%1 has accepted to use the webcam!" +msgstr "VocĆŖ cancelou o convite." + +#: notification/chatnotification.cpp:223 +#, fuzzy +msgid "%1 has accepted the file transfer!" +msgstr "O Contato cancelou o convite." + +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" +msgstr " estĆ” online" + +#: notification/chatnotification.cpp:231 +#, fuzzy +msgid "%1 has ended the webcam session!" +msgstr "VocĆŖ cancelou o convite." + +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "A transferĆŖncia de " -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:233 +msgid "%1's activity has ended!" msgstr "" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -#, fuzzy -msgid "%1 is now online" -msgstr " estĆ” online" - -#: notification/notificationcontactstatus.cpp:76 -#, fuzzy -msgid "%1 has gone away" -msgstr " estĆ” online" - -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/chatnotification.cpp:240 +msgid "%1's webcam session has failed!" msgstr "" -#: notification/notificationcontactstatus.cpp:78 +#: notification/chatnotification.cpp:241 #, fuzzy -msgid "%1 is now busy" -msgstr " estĆ” online" +msgid "The file transfer with %1 has failed!" +msgstr "A transferĆŖncia de " -#: notification/notificationcontactstatus.cpp:79 -#, fuzzy -msgid "%1 has become invisible" -msgstr " estĆ” online" - -#: notification/notificationcontactstatus.cpp:80 -#, fuzzy -msgid "%1 has gone idle" -msgstr " estĆ” online" - -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/chatnotification.cpp:242 +msgid "%1's activity has ended with an error!" msgstr "" -#: notification/notificationcontactstatus.cpp:82 +#: notification/contactstatusnotification.cpp:70 #, fuzzy -msgid "%1 is on the phone" +msgid "%1 is now online" msgstr " estĆ” online" -#: notification/notificationcontactstatus.cpp:83 +#: notification/contactstatusnotification.cpp:71 #, fuzzy -msgid "%1 is out for lunch" +msgid "%1 has gone away" msgstr " estĆ” online" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/contactstatusnotification.cpp:72 +msgid "%1 will be right back" msgstr "" -#: settings/accountswidget.cpp:81 +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" +msgstr " estĆ” online" + +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" +msgstr " estĆ” online" + +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" +msgstr " estĆ” online" + +#: notification/contactstatusnotification.cpp:76 +#, fuzzy +msgid "%1 has logged out" +msgstr " estĆ” online" + +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" +msgstr " estĆ” online" + +#: notification/contactstatusnotification.cpp:78 +#, fuzzy +msgid "%1 is out for lunch" +msgstr " estĆ” online" + +#: notification/newemailnotification.cpp:78 +msgid "New email:
'%1'
by '%2'" +msgstr "" + +#: settings/accountpage.cpp:69 msgid "Browse..." msgstr "" -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +msgid "Browse and crop picture..." msgstr "" -#: settings/accountswidget.cpp:404 +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" + +#: settings/accountpage.cpp:448 #, fuzzy -msgid "Display Picture" +msgid "Downloading of display picture failed" msgstr "Imagem:" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" -msgstr "" - -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "" - -#: settings/chatstylepage.cpp:317 -msgid "Great!" -msgstr "" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 #, fuzzy msgid "&Delete" msgstr "&Remover Contato" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "Configurações" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 #, fuzzy msgid "Account" msgstr "Contas" -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 #, fuzzy msgid "My Account" msgstr "Contas" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "Alertas" -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 #, fuzzy msgid "Alerts and Notifications" msgstr "Notificação de email" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "Conversando" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "Log de Chat" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "" + +#: settings/accountsettingsdialog.cpp:201 +msgid "The email address you have entered is already in use: '%1'" +msgstr "" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "Tem certeza que deseja remover esta conta?" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "Tem certeza que deseja remover esta conta?" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "" + +#: settings/chatstylepage.cpp:341 +msgid "Great!" +msgstr "" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "Configurações" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +msgid "Accounts" +msgstr "Contas" + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "Notificação de email" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "Salvar arquivos de chat neste diretório principal:" + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." msgstr "" -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "" +#: systemtraywidget.cpp:245 +msgid "- %1 (%2)" +msgstr "" + +#~ msgid "Picture:" +#~ msgstr "Imagem:" + +#, fuzzy +#~ msgid "Speed:" +#~ msgstr "Erro no servidor" + +#, fuzzy +#~ msgid "Login Information" +#~ msgstr "Exibir informação de email na lista de contatos" + +#~ msgid "Logging in..." +#~ msgstr "Conectando..." + +#~ msgid "Use a specified command:" +#~ msgstr "Usar um comando especĆ­fico:" + +#, fuzzy +#~ msgid "Remove group" +#~ msgstr "Re&mover Grupo" + +#, fuzzy +#~ msgid "Show &Display Pictures" +#~ msgstr "Imagem:" + +#, fuzzy +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr "novo email" + +#, fuzzy +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr "novos emails" + +#, fuzzy +#~ msgid "Guido Solinas" +#~ msgstr "Online" + +#, fuzzy +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "falhou. ImpossĆ­vel abrir arquivo" + +#, fuzzy +#~ msgid "Sidebar" +#~ msgstr "Mostrar/Esconder Barra de &Contatos" + +#, fuzzy +#~ msgid "New contact's group" +#~ msgstr "Novo &Contato" + +#, fuzzy +#~ msgid "Enter your login information:" +#~ msgstr "Ou entre seus dados de login:" + +#~ msgid "Your friendly name:" +#~ msgstr "Seu nome amigĆ”vel:" + +#, fuzzy +#~ msgid "Your email address:" +#~ msgstr "EndereƧo de Email: " + +#~ msgid "Your password:" +#~ msgstr "Sua senha:" + +#, fuzzy +#~ msgid "Display picture:" +#~ msgstr "Imagem:" + +#, fuzzy +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "" +#~ "Exibir uma notificação quando o email for recebido em \"outras pastas\"" + +#~ msgid "Organize chat folders by:" +#~ msgstr "Organizar pastas de chat por:" + +#, fuzzy +#~ msgid "&Show graphics in chat messages" +#~ msgstr "Mostrar data/hora nas mensagens" + +#~ msgid "Use Hotmail" +#~ msgstr "Usar Hotmail" + +#~ msgid "says:" +#~ msgstr "diz:" + +#~ msgid "Current name: " +#~ msgstr "Nome atual: " + +#, fuzzy +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr "Exibir status do serviƧo .NET?" + +#~ msgid "Received user confirmation" +#~ msgstr "Recebida confirmação de usuĆ”rio" + +#~ msgid "Transfer to notification server" +#~ msgstr "Transferir para servidor de notificação" + +#, fuzzy +#~ msgid "The server is too busy" +#~ msgstr "O servidor estĆ” ocupado" + +#~ msgid "The server is unavailable" +#~ msgstr "O servidor estĆ” indisponĆ­vel" + #~ msgid "Add contact" #~ msgstr "Adicionar Contato" @@ -3541,9 +4264,6 @@ msgstr "" #~ msgid "KMess Notification" #~ msgstr "Notificação de email" -#~ msgid "Accounts" -#~ msgstr "Contas" - #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" @@ -3554,9 +4274,6 @@ msgstr "" #~ "Your emails" #~ msgstr "mauricio@digicomm.com.br" -#~ msgid "Insert an emoticon" -#~ msgstr "Inserir um emoticon" - #~ msgid "Away - Idle" #~ msgstr "Ausente - Inativo" @@ -3585,17 +4302,6 @@ msgstr "" #~ msgid "(On the Phone)" #~ msgstr "(No telefone)" -#, fuzzy -#~ msgid "Connection timeout" -#~ msgstr "Tempo Limite de ConexĆ£o Atingido" - -#~ msgid "Connect" -#~ msgstr "Conectar" - -#, fuzzy -#~ msgid "Listening to %1" -#~ msgstr "Enviando arquivo " - #, fuzzy #~ msgid "File transfer dialog message" #~ msgstr "TransferĆŖncia de arquivo completada." @@ -3630,9 +4336,6 @@ msgstr "" #~ msgid "You can't login to hotmail with this account." #~ msgstr "VocĆŖ nĆ£o pode logar no hotmail com essa conta." -#~ msgid "The connection to the server failed." -#~ msgstr "A conexĆ£o ao servidor falhou." - #~ msgid "You may not be connected to the internet." #~ msgstr "VocĆŖ pode nĆ£o estar conectado Ć  internet." @@ -3660,10 +4363,6 @@ msgstr "" #~ msgid "Show popup notifications for program events" #~ msgstr "Exibir notificaƧƵes popup para eventos do programa" -#, fuzzy -#~ msgid "Server:" -#~ msgstr "Erro no servidor" - #, fuzzy #~ msgid "Connection good" #~ msgstr "Tempo Limite de ConexĆ£o Atingido" @@ -3680,10 +4379,6 @@ msgstr "" #~ msgid "New chat notification:" #~ msgstr "Notificação de email" -#, fuzzy -#~ msgid "%1 is offline" -#~ msgstr " estĆ” offline" - #, fuzzy #~ msgid "You have new mail:" #~ msgstr "VocĆŖ tem um email novo" @@ -3695,16 +4390,6 @@ msgstr "" #~ "in your inbox" #~ msgstr "em sua caixa de entrada" -#, fuzzy -#~ msgid "" -#~ "\"%1\"\n" -#~ "from %2\n" -#~ "in another folder" -#~ msgstr "em outra pasta" - -#~ msgid "and" -#~ msgstr "e" - #~ msgid "says: " #~ msgstr "diz: " @@ -3726,10 +4411,6 @@ msgstr "" #~ msgid "Show outgoing server messages" #~ msgstr "Exibir grĆ”ficos nas mensagens de chat" -#, fuzzy -#~ msgid "Chat - %1 et al." -#~ msgstr " et al." - #, fuzzy #~ msgid "The transfer of %1 failed. Couldn't create a socket." #~ msgstr "falhou. ImpossĆ­vel criar um soquete" @@ -3743,10 +4424,6 @@ msgstr "" #~ msgid "Get New Emoticon or Sound &Themes" #~ msgstr "Obter Novo Emoticon ou Som &Temas" -#, fuzzy -#~ msgid "Chat message layout:" -#~ msgstr "Sua fonte para mensagens:" - #, fuzzy #~ msgid "n&ame" #~ msgstr "Seu nome" diff --git a/po/sl.po b/po/sl.po index 376d102..11152bd 100644 --- a/po/sl.po +++ b/po/sl.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: sl\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" "PO-Revision-Date: 2005-09-30 08:03+0200\n" "Last-Translator: Matjaž kaÅ”e \n" "Language-Team: SlovenŔčina \n" @@ -19,47 +19,41 @@ msgstr "" "n%100==4 ? 2 : 3);\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "Prijavljanje....." - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -#, fuzzy -msgid "S&end" -msgstr "&PoÅ”lji" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 #, fuzzy msgid "Ne&w Line" msgstr "No&va vrstica" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 #, fuzzy -msgid "Sidebar" -msgstr "Prikaži/Skrij prijatelje&vo stransko okno" +msgid "S&end" +msgstr "&PoÅ”lji" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +#, fuzzy +msgid "Contacts" +msgstr "Dodaj osebo" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 #, fuzzy msgid "" "Enter here the email address of the person you wish to add to your contact " @@ -67,42 +61,40 @@ msgid "" msgstr "VpiÅ”ite e-poÅ”tni naslov osebe, ki jo želite dodati:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 #, fuzzy msgid "Email address" msgstr "E-poÅ”tni naslov:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 #, fuzzy -msgid "New contact's group" -msgstr "Nov &stik" +msgid "Initial group" +msgstr "Preimenu&j skupino" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 #, fuzzy msgid "" "Enter a message to be automatically sent to people who try to message you." @@ -111,182 +103,392 @@ msgstr "" "osebam, ki se skuÅ”ajo povezati z vami:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 #, fuzzy msgid "&Automatic away message" msgstr "Določite sporočilo ob odsotnosti" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" msgstr "" -"%1\n" -"vas je dodal/a med prijatelje. Želite:" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 -msgid "&Add this contact to your \"Friends\" list" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 +#, fuzzy +msgid "&Add this person to my \"Friends\" list" msgstr "&Dodati to osebo na seznam\"Prijatelji\"" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 -msgid "&Not add this contact, but let them see your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 +#, fuzzy +msgid "Do not add this person; only allow them to see my online state" msgstr "Te osebe ne dodaj, vendar naj vidi moje stanje" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 -msgid "Block this person from contacting &you or seeing your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 +#, fuzzy +msgid "&Block this person from contacting me or seeing my online state" msgstr "To osebo blokiraj v celoti" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, no-c-format +msgid "Contact Properties for %1" +msgstr "Lastnosti osebe %1" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +#, fuzzy +msgid "Restore" +msgstr "Odstranjeno" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "Za to osebo uporabite nadomestno ime" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "Prikaži oblaček, ko se ta oseba prijavi ali odjavi" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "Zvok:" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +#, fuzzy +msgid "&Clear Cache" +msgstr "Mačji ksiht" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +#, fuzzy +msgid "Notes" +msgstr "Nota" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "Omrežno okno" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "Vrsta:" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +#, fuzzy +msgid "Standard" +msgstr "Zvezda" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "&PoŔlji" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 msgid "Cancel" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -#, fuzzy -msgid "Enter your login information:" -msgstr "Oziroma vnesite podatke za prijavo:" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" +msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 #, fuzzy -msgid "Password" +msgid "Email address:" +msgstr "E-poŔtni naslov:" + +#. i18n: tag string +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +#, fuzzy +msgid "Password:" msgstr "Geslo:" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 #, fuzzy msgid " Account options " msgstr "Nastavitve računa" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 #, fuzzy msgid "Remem&ber this profile" msgstr "Zapomni si ta profil" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "&Povezava" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr "Nastavitve računa" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 -msgid "Your friendly name:" +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 +#, fuzzy +msgid "&Friendly name:" msgstr "VaŔe prijazno ime:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 #, fuzzy -msgid "Your email address:" +msgid "&Email address:" msgstr "E-poŔtni naslov:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" -msgstr "VaŔe geslo:" - -#. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 #, fuzzy -msgid "Remember Password" +msgid "&Password:" msgstr "Geslo:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 #, fuzzy -msgid "Display picture:" +msgid "&Remember Password" +msgstr "Geslo:" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 +msgid "Display Picture" msgstr "VaŔa slika" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 msgid "C&hange..." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -#, fuzzy -msgid "Don't show a displa&y picture" -msgstr "Želim prikaz slike" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -297,35 +499,36 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +msgid "Re&member the settings of this account" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 #, fuzzy -msgid "Login &with this account automatically at start-up" +msgid "Login &with this account automatically" msgstr "Ob zagonu me samodejno prijavi s tem računom" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "Beleži vse pogovore" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -333,174 +536,288 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 msgid "https://accountservices.passport.net/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 #, fuzzy -msgid "Popup notifications" +msgid "Saved accounts:" +msgstr "Računi" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +#, fuzzy +msgid "Click" +msgstr "Ura" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "Računi" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "Odstranjeno" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "Obvestilo o e-poŔti" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "Dodaj osebo" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 #, fuzzy msgid "Show notifications when your contacts:" msgstr "Sporoči, ko se osebe odjavijo" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 #, fuzzy msgid "&Go online" msgstr "Neprijavljen" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 #, fuzzy msgid "S&end you a message" msgstr "Določite sporočilo ob odsotnosti" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 #, fuzzy msgid "Go o&ffline" msgstr "Neprijavljen" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 #, fuzzy -msgid "Show notifications when you recei&ve an email" +msgid "Email Events" +msgstr "E-poŔtni naslov:" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" msgstr "Prikaži sporočilo, ko prispe poŔta v \"druge mape\"" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +#, fuzzy +msgid "In other folders" +msgstr "" +"V drugi mapi je\n" +"\"%1\"\n" +"od %2" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "Oblačke skrij po " #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "sekundah" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "Opozorila" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "Prikaži osebe, ki niso prijavljene" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -511,207 +828,209 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 #, fuzzy -msgid "Inform contacts w&hich song I am listening to." +msgid "Inform contacts w&hich song I am listening to" msgstr "Te osebe ni na vaÅ”em seznamu" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 #, fuzzy msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "Ob nedejavnosti spremeni stanje v \"Odsoten\" " #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 msgid "Become idle after" msgstr "Kot \"Odsoten\" me prikaži po" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "minutah" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 #, fuzzy msgid "Log &all chats" msgstr "Beleži vse pogovore" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 msgid "" "Choose the directory on your system where you'd like to save the chat logs." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" msgstr "Datoteke o pogovorih shrani v naslednji matični imenik:" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "Mape razgovorov razvrsti po:" +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "Letih" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 msgid "Month" msgstr "Mesecih" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "Dnevih" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" msgstr "Vse pogovore shrani v matični imenik" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "VaÅ”a pisava:" - +#. i18n: file ./settings/chatstylepage.ui line 45 #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "Sporočila drugih oseb naj uporabijo pisavo:" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +msgid "&Chat style:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "Nastavitve" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 #, fuzzy -msgid "&Show graphics in chat messages" -msgstr "V sporočilih prikaži grafiko" +msgid "&Show emoticons" +msgstr "Prikaži sme&Å”ke" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 #, fuzzy -msgid "S&how time in chat messages" +msgid "S&how messages time" msgstr "V sporočilih prikaži grafiko" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -#, fuzzy -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "Uporabi učinke pisave *poudarjeno*, /poÅ”evno/ in _podčrtano_" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -720,151 +1039,305 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 -msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "PoÅ”tni odjemalec" +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 +#, fuzzy +msgid "Always" +msgstr "Odsoten" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "Uporabi Hotmail" +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "VaÅ” seznam vsebuje preveč skupin" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "Uporabi ukaz:" +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "Piflar" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "Obvestilo o e-poÅ”ti" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 -msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 -msgid "Show email information" -msgstr "Prikaži e-poÅ”tno sporočilo " - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 -msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" -msgstr "Prikaži sporočilo, ko prispe poÅ”ta v \"druge mape\"" +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "VaÅ”a pisava:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 +msgid "" +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "Sporočila drugih oseb naj uporabijo pisavo:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 +msgid "" +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +#, fuzzy +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" +msgstr "Uporabi učinke pisave *poudarjeno*, /poÅ”evno/ in _podčrtano_" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "Čakanje na seznam stikov" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 #, fuzzy msgid "&Emoticon Themes" msgstr "Prikaži sme&Å”ke" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 #, fuzzy msgid "Available emoticon styles:" msgstr "Prikaži sme&Å”ke" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 #, fuzzy msgid "&Custom Emoticons" msgstr "SmeÅ”ki iz risank" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 msgid "Custom emoticons for this account:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -#, fuzzy -msgid "Click" -msgstr "Ura" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 #, fuzzy msgid "Re&name" msgstr "ime" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 #, fuzzy msgid "Remo&ve" msgstr "Odstranjeno" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +#, fuzzy +msgid "Web Browser" +msgstr "Ovela vrtnica" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +#, fuzzy +msgid "&Use the KDE default browser" +msgstr "&Uporabi privzeto sliko" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "pravi:" +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "PoÅ”tni odjemalec" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +#, fuzzy +msgid "&Use the KDE default email client" +msgstr "&Uporabi privzeto sliko" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +msgid "File Transfers" +msgstr "Prenosi datotek" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "Datoteke o pogovorih shrani v naslednji matični imenik:" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +msgid "and" +msgstr "in" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "Prenosi datotek" #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -874,448 +1347,529 @@ msgstr "NIsem ob računalniku" msgid "Your name" msgstr "VaÅ”e ime" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "vaÅ”eime@hotmail.com" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "Prijavljen" - -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "Odsoten" - -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "Pridem takoj" - -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "Zaseden" - -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "Neviden" - -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "" - -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "Neprijavljen" - -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "Telefoniram" - -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "Na kosilu" - -#: chat/chatmaster.cpp:1061 -msgid "%1 is sending a wink: %2" -msgstr "" - -#: chat/chatmessagestyle.cpp:302 -#, fuzzy -msgid "%1 says:" -msgstr "pravi: " - -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 -msgid "Add this emoticon: %1" -msgstr "" - -#: chat/chatview.cpp:529 -msgid "" -"Could not save chat log. Make sure you have permission to write in the " -"folder where logs are being saved." -msgstr "" - -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 -msgid "" -"The file '%1' already exists.\n" -"do you want to overwrite it?" -msgstr "" - -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Overwrite File" -msgstr "" - -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Over&write" -msgstr "" - -#: chat/chatview.cpp:977 -#, fuzzy -msgid "Add this &Emoticon..." -msgstr "Prikaži sme&Å”ke" - -#: chat/chatview.cpp:984 -#, fuzzy -msgid "Send &Email" -msgstr "PoÅ”lji e-poÅ”tno sporočilo" - -#: chat/chatview.cpp:988 -#, fuzzy -msgid "Copy E&mail" -msgstr "E-poÅ”ta" - -#: chat/chatview.cpp:995 -msgid "Visit &Link" -msgstr "" - -#: chat/chatview.cpp:999 -msgid "Copy &Address" -msgstr "" - -#: chat/chatview.cpp:1013 -msgid "&Copy text" -msgstr "" - -#: chat/chatview.cpp:1014 -msgid "Select &All" -msgstr "" - -#: chat/chatview.cpp:1015 -#, fuzzy -msgid "Save chat to &File" -msgstr "PoÅ”lji &datoteko" - -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "Klepet" - -#: chat/chatwindow.cpp:239 +#: chat/chat.cpp:124 msgid "" "You can't start this invitation because there are multiple contacts in this " "chat." msgstr "" -#: chat/chatwindow.cpp:276 -msgid "%1 has joined the chat." +#: chat/chat.cpp:158 +#, fuzzy +msgid "%1 has joined the chat." msgstr "%1 se je pridružil/a klepetu." -#: chat/chatwindow.cpp:327 +#: chat/chat.cpp:211 #, fuzzy -msgid "The conversation went idle, %1 has left the chat." +msgid "The conversation went idle, %1 has left the chat." msgstr "%1 je zapustil/a klepet" -#: chat/chatwindow.cpp:331 -msgid "%1 has left the chat." +#: chat/chat.cpp:215 +#, fuzzy +msgid "%1 has left the chat." msgstr "%1 je zapustil/a klepet" -#: chat/chatwindow.cpp:593 +#: chat/chat.cpp:364 #, fuzzy -msgid "%1 - Chat" -msgstr "Klepet" +msgctxt "Name of a chat tab" +msgid "%1 and %2" +msgstr "Klepet - %1 in %2" -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" -msgstr "" - -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" -msgstr "" - -#: chat/chatwindow.cpp:757 +#: chat/chat.cpp:371 #, fuzzy -msgid "Contacts" -msgstr "Dodaj osebo" +msgctxt "Name of a chat tab" +msgid "%1 et al." +msgstr "Klepet %1" -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 +#: chat/chat.cpp:630 #, fuzzy -msgid "Emoticons" -msgstr "Prikaži sme&Å”ke" - -#: chat/chatwindow.cpp:819 -#, fuzzy -msgid "My emoticons" -msgstr "Prikaži sme&Å”ke" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" msgstr "(To sporočilo je bilo poslano samodejno)" -#: chat/chatwindow.cpp:1502 +#: chat/chat.cpp:934 +msgid "You received a wink from %1." +msgstr "" + +#: chat/chat.cpp:971 msgid "" "The wink could not be displayed. Make sure you have 'cabextract' installed." msgstr "" -#: chat/chatwindow.cpp:1511 +#: chat/chat.cpp:980 msgid "The wink could not be displayed. The data could not be read." msgstr "" -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" +#: chat/chat.cpp:1080 +msgid "You have received a wink from %1" msgstr "" -#: chat/chatwindow.cpp:1755 -#, fuzzy -msgid "Show Side&bar" -msgstr "Prikaži/Skrij prijatelje&vo stransko okno" +#: chat/chat.cpp:1100 +msgid "You received a nudge from %1!" +msgstr "" -#: chat/chatwindow.cpp:1756 +#: chat/chat.cpp:1119 #, fuzzy -msgid "Show the contact sidebar" -msgstr "Prikaži ali skrij prijateljevo stransko okno" - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -#, fuzzy -msgid "Hide Side&bar" -msgstr "Prikaži/Skrij prijatelje&vo stransko okno" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -#, fuzzy -msgid "Hide the contact sidebar" -msgstr "Prikaži ali skrij prijateljevo stransko okno" - -#: chat/chatwindow.cpp:1787 -#, fuzzy -msgid "The message '%1' could not be sent." +msgid "The message '%1' could not be sent." msgstr "Sporočilo \"%1\"ni bilo sprejeto." -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" -msgstr "" - -#: chat/chatwindow.cpp:1876 +#: chat/chat.cpp:1183 msgid "You've sent a nudge to %1!" msgstr "" -#: chat/chatwindow.cpp:1883 +#: chat/chat.cpp:1190 msgid "You've sent a nudge!" msgstr "" -#: chat/chatwindow.cpp:1972 -msgid "%1 is typing." -msgstr "%1tipka." - -#: chat/chatwindow.cpp:1981 -#, fuzzy -msgid "%1 and %2 are typing." -msgstr "%1tipka." - -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." +#: chat/chatmaster.cpp:1219 +msgid "%1 is sending a wink: %2" msgstr "" -#: chat/chatwindowinterface.cpp:175 -msgid "&Chat" -msgstr "&Klepet" +#: chat/chatmessagestyle.cpp:298 +#, fuzzy +msgid "%1 says:" +msgstr "pravi: " -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 +msgid "Add this emoticon: %1" +msgstr "" + +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 msgid "&Invite" msgstr "P&ovabi" -#: chat/chatwindowinterface.cpp:179 +#: chat/chatview.cpp:695 +msgid "" +"Could not save chat log. Make sure you have permission to write in the " +"folder where logs are being saved." +msgstr "" + +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 +msgid "" +"The file '%1' already exists.\n" +"do you want to overwrite it?" +msgstr "" + +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Overwrite File" +msgstr "" + +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Over&write" +msgstr "" + +#: chat/chatview.cpp:1275 +#, fuzzy +msgid "Add this &Emoticon..." +msgstr "Prikaži sme&Å”ke" + +#: chat/chatview.cpp:1282 +#, fuzzy +msgid "Send &Email" +msgstr "PoÅ”lji e-poÅ”tno sporočilo" + +#: chat/chatview.cpp:1286 +#, fuzzy +msgid "Copy E&mail" +msgstr "E-poÅ”ta" + +#: chat/chatview.cpp:1293 +msgid "Visit &Link" +msgstr "" + +#: chat/chatview.cpp:1297 +msgid "Copy &Address" +msgstr "" + +#: chat/chatview.cpp:1312 +msgid "&Copy text" +msgstr "" + +#: chat/chatview.cpp:1313 +msgid "Select &All" +msgstr "" + +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 +#, fuzzy +msgid "Save chat to &File" +msgstr "PoÅ”lji &datoteko" + +#: chat/chatwindow.cpp:489 +msgid "&Chat" +msgstr "&Klepet" + +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "PoÅ”lji &datoteko" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "Prični &srečanje" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 #, fuzzy msgid "Send a &Nudge!" msgstr "PoÅ”lji &datoteko" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 #, fuzzy msgid "&Emoticons" msgstr "Prikaži sme&Å”ke" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +msgid "Close &All Tabs" +msgstr "" + +#: chat/chatwindow.cpp:504 #, fuzzy msgid "Meeting" msgstr "Nastavitve" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "Prični ali prekini &pogovor" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "Spremeni P&isavo" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "Spremeni &barvo pisave" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 #, fuzzy msgid "&Font" msgstr "&Povezava" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 #, fuzzy msgid "Font &Color" msgstr "Spremeni &barvo pisave" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +#, fuzzy +msgid "Emoticons" +msgstr "Prikaži sme&Å”ke" + +#: chat/chatwindow.cpp:658 +#, fuzzy +msgid "My emoticons" +msgstr "Prikaži sme&Å”ke" + +#: chat/chatwindow.cpp:738 #, fuzzy msgid "&Settings" msgstr "Nastavitve" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "Prikaži sme&Å”ke" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +#, fuzzy +msgid "Hide Side&bar" +msgstr "Prikaži/Skrij prijatelje&vo stransko okno" + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "Prikaži/Skrij prijatelje&vo stransko okno" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +#, fuzzy +msgid "Hide the contact sidebar" +msgstr "Prikaži ali skrij prijateljevo stransko okno" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +msgid "Close all tabs" +msgstr "" + +#: chat/chatwindow.cpp:856 +msgid "Close current tab" +msgstr "" + +#: chat/chatwindow.cpp:1467 +#, fuzzy +msgid "Show Side&bar" +msgstr "Prikaži/Skrij prijatelje&vo stransko okno" + +#: chat/chatwindow.cpp:1468 +#, fuzzy +msgid "Show the contact sidebar" +msgstr "Prikaži ali skrij prijateljevo stransko okno" + +#: chat/chatwindow.cpp:1565 +msgid "%1 is typing." +msgstr "%1tipka." + +#: chat/chatwindow.cpp:1575 +#, fuzzy +msgid "%1 and %2 are typing." +msgstr "%1tipka." + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "" + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "Klepet" + +#: chat/chatwindow.cpp:1615 +#, fuzzy +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "Klepet" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "PoŔlji e-poŔtno sporočilo" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 msgid "&View Profile" msgstr "Prikaži profil" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "Dodaj osebo" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 msgid "A&llow Contact" msgstr "Dovoli stik" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 #, fuzzy msgid "&Delete Contact" msgstr "Odstrani to osebo" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "Blokiraj to osebo" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "Odblokiraj to osebo" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 #, fuzzy msgid "&Friendly Name" msgstr "VaŔe prijazno ime:" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 #, fuzzy msgid "&Email Address" msgstr "E-poŔtni naslov:" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "" -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 msgid "Blocked" msgstr "Blokiran" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 #, fuzzy msgid "The contact is %1" msgstr "Oseba ni prijavljena" -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +#, fuzzy +msgid "Add to Chat" +msgstr "Dodajte prijatelja" + +#: chat/emoticonsidebar.cpp:213 +#, fuzzy +msgid "Insert new" +msgstr "Vstavi smeŔka" + +#: chat/emoticonsidebar.cpp:214 +msgid "Edit" +msgstr "" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +#, fuzzy +msgid "Remove" +msgstr "Odstranjeno" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 #, fuzzy msgid "Web Messenger" msgstr "Spletno oblikovanje" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +#, fuzzy +msgid "Windows Live Messenger %1" +msgstr "Spletno oblikovanje" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "Prijavljen" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "Neprijavljen" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "Dovoljeno" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "Odstranjeno" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 +#, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr "%1 MB" + +#: contactlistviewdelegate.cpp:150 #, fuzzy msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "%1 MB" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "Odsoten" + +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "Pridem takoj" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "Zaseden" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "Neviden" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" msgstr "" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "Telefoniram" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "Na kosilu" + +#: dialogs/addcontactdialog.cpp:48 #, fuzzy msgid "Add a Contact" msgstr "Dodajte prijatelja" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 #, fuzzy msgid "No group" msgstr "Odstrani skupino" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 #, fuzzy msgid "Add New Emoticon" msgstr "Prikaži sme&Ŕke" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "Prikaži sme&Ŕke" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "" @@ -1323,463 +1877,510 @@ msgstr "" msgid "Specify an Away message" msgstr "Določite sporočilo ob odsotnosti" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "Za to osebo uporabite nadomestno ime" +#: dialogs/contactaddeduserdialog.cpp:85 +#, fuzzy +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " +msgstr "" +"%1\n" +"vas je dodal/a med prijatelje. Želite:" -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" -msgstr "Prikaži oblaček, ko se ta oseba prijavi ali odjavi" +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "Povezan" -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "Slika:" +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +msgid "Not seen yet" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "Zvok:" +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +#, fuzzy +msgid "No messages yet" +msgstr "V sporočilih prikaži grafiko" -#: dialogs/contactpropertiesdialog.cpp:234 -msgid "Contact Properties for %1" -msgstr "Lastnosti osebe %1" +#: dialogs/contactpropertiesdialog.cpp:381 +msgid "Last seen: %1" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " -msgstr "E-poŔtni naslov:" +#: dialogs/contactpropertiesdialog.cpp:382 +#, fuzzy +msgid "Last message: %1" +msgstr "Oblika sporočila v pogovoru:" -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "Trenutno ime:" +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "E-poŔta" -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" -msgstr "Omrežno okno" +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "PoŔtni odjemalec" -#: dialogs/networkwindow.cpp:57 +#: dialogs/networkwindow.cpp:79 msgid "S&ave tab" msgstr "" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 msgid "C&lear tab" msgstr "" -#: dialogs/networkwindow.cpp:59 -msgid "Cl&ose tab" -msgstr "" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 msgid "" "No connections are present.\n" "Cannot open the Network Window." msgstr "" -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 msgid "" "Could not save the Network Window log. Make sure you have permission to " "write in the folder where it is being saved." msgstr "" -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "" -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +msgid "Cannot send commands to this kind of connection!" +msgstr "" + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 #, fuzzy msgid "Completed" msgstr "Računalnik" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "%1 MB" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "%1 kB" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "%1 bytes" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +msgid "%1 of %2 received." msgstr "" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +msgid "%1 of %2 sent." msgstr "" -#: dialogs/transferwindow.cpp:55 -msgid "File Transfers" -msgstr "Prenosi datotek" +#: dialogs/transferentry.cpp:373 +msgid "infinite" +msgstr "" -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 #, fuzzy msgid "Cl&ean Up" msgstr "&Počisti" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " "the theme folder '%1'." msgstr "" -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 msgid "Smile" msgstr "Nasmeh" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "Pomežik" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "Jezik" -#: emoticontheme.cpp:797 +#: emoticontheme.cpp:812 msgid "Big smile" msgstr "Å irok nasmeh" -#: emoticontheme.cpp:798 +#: emoticontheme.cpp:813 msgid "Sad" msgstr "Žalost" -#: emoticontheme.cpp:799 +#: emoticontheme.cpp:814 msgid "Crying" msgstr "Jok" -#: emoticontheme.cpp:800 +#: emoticontheme.cpp:815 msgid "Angry" msgstr "Jeza" -#: emoticontheme.cpp:801 +#: emoticontheme.cpp:816 msgid "Confused" msgstr "Zmeda" -#: emoticontheme.cpp:802 +#: emoticontheme.cpp:817 msgid "Embarrassed" msgstr "Nerodno" -#: emoticontheme.cpp:803 +#: emoticontheme.cpp:818 msgid "Disappointed" msgstr "razočaran" -#: emoticontheme.cpp:804 +#: emoticontheme.cpp:819 msgid "Hot" msgstr "Vroče" -#: emoticontheme.cpp:805 +#: emoticontheme.cpp:820 msgid "Baring teeth" msgstr "Režanje" -#: emoticontheme.cpp:806 +#: emoticontheme.cpp:821 msgid "Nerd" msgstr "Piflar" -#: emoticontheme.cpp:807 +#: emoticontheme.cpp:822 msgid "Sick" msgstr "bolan" -#: emoticontheme.cpp:808 +#: emoticontheme.cpp:823 msgid "Surprised" msgstr "Presenečen" -#: emoticontheme.cpp:809 +#: emoticontheme.cpp:824 msgid "Party" msgstr "Zabava" -#: emoticontheme.cpp:810 +#: emoticontheme.cpp:825 msgid "Sleepy" msgstr "Zaspan" -#: emoticontheme.cpp:811 +#: emoticontheme.cpp:826 msgid "Thinking" msgstr "ZamiÅ”ljen" -#: emoticontheme.cpp:812 +#: emoticontheme.cpp:827 msgid "Don't tell anyone" msgstr "Psssst" -#: emoticontheme.cpp:813 +#: emoticontheme.cpp:828 msgid "Secret telling" msgstr "Skrivnostno" -#: emoticontheme.cpp:814 +#: emoticontheme.cpp:829 msgid "Eye-rolling" msgstr "zavijanje z očmi" -#: emoticontheme.cpp:815 +#: emoticontheme.cpp:830 msgid "Sarcastic" msgstr "Sarkastično" -#: emoticontheme.cpp:816 +#: emoticontheme.cpp:831 msgid "I don't know" msgstr "Ne vem" -#: emoticontheme.cpp:817 +#: emoticontheme.cpp:832 msgid "Be right back" msgstr "Pridem takoj" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "Angel" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "Levi objem" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "Fant" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "Rdeče srce" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "Rdeča vrtnica" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "Palec gor" -#: emoticontheme.cpp:824 +#: emoticontheme.cpp:839 msgid "Dog face" msgstr "Pasji ksiht" -#: emoticontheme.cpp:825 +#: emoticontheme.cpp:840 msgid "Sun" msgstr "Sonček" -#: emoticontheme.cpp:826 +#: emoticontheme.cpp:841 msgid "Devil" msgstr "Hudič" -#: emoticontheme.cpp:827 +#: emoticontheme.cpp:842 msgid "Right hug" msgstr "Desni objem" -#: emoticontheme.cpp:828 +#: emoticontheme.cpp:843 msgid "Girl" msgstr "Dekle" -#: emoticontheme.cpp:829 +#: emoticontheme.cpp:844 msgid "Broken heart" msgstr "Počeno srce" -#: emoticontheme.cpp:830 +#: emoticontheme.cpp:845 msgid "Wilted rose" msgstr "Ovela vrtnica" -#: emoticontheme.cpp:831 +#: emoticontheme.cpp:846 msgid "Thumbs down" msgstr "Palec dol" -#: emoticontheme.cpp:832 +#: emoticontheme.cpp:847 msgid "Cat face" msgstr "Mačji ksiht" -#: emoticontheme.cpp:833 +#: emoticontheme.cpp:848 msgid "Sleeping half-moon" msgstr "Speči polmesec" -#: emoticontheme.cpp:834 +#: emoticontheme.cpp:849 msgid "Red lips" msgstr "Žnabelčki" -#: emoticontheme.cpp:835 +#: emoticontheme.cpp:850 msgid "Clapping" msgstr "Aplavz" -#: emoticontheme.cpp:836 +#: emoticontheme.cpp:851 msgid "Crossed fingers" msgstr "Fige" -#: emoticontheme.cpp:837 +#: emoticontheme.cpp:852 msgid "Auto" msgstr "Avto" -#: emoticontheme.cpp:838 +#: emoticontheme.cpp:853 msgid "Airplane" msgstr "Letalo" -#: emoticontheme.cpp:839 +#: emoticontheme.cpp:854 msgid "Turtle" msgstr "Želva" -#: emoticontheme.cpp:840 +#: emoticontheme.cpp:855 msgid "Snail" msgstr "Polž" -#: emoticontheme.cpp:841 +#: emoticontheme.cpp:856 msgid "Black sheep" msgstr "Črna ovca" -#: emoticontheme.cpp:842 +#: emoticontheme.cpp:857 msgid "Goat" msgstr "" -#: emoticontheme.cpp:843 +#: emoticontheme.cpp:858 msgid "Vampire bat" msgstr "Vampirski netopir" -#: emoticontheme.cpp:844 +#: emoticontheme.cpp:859 msgid "Pizza" msgstr "Pizza" -#: emoticontheme.cpp:845 +#: emoticontheme.cpp:860 msgid "Beer mug" msgstr "Krugl pira" -#: emoticontheme.cpp:846 +#: emoticontheme.cpp:861 msgid "Martini glass" msgstr "Martini" -#: emoticontheme.cpp:847 +#: emoticontheme.cpp:862 msgid "Coffee cup" msgstr "Kavica" -#: emoticontheme.cpp:848 +#: emoticontheme.cpp:863 msgid "Birthday cake" msgstr "Torta" -#: emoticontheme.cpp:849 +#: emoticontheme.cpp:864 msgid "Plate" msgstr "Krožnik" -#: emoticontheme.cpp:850 +#: emoticontheme.cpp:865 msgid "Bowl" msgstr "ČaÅ”a" -#: emoticontheme.cpp:851 +#: emoticontheme.cpp:866 msgid "Star" msgstr "Zvezda" -#: emoticontheme.cpp:852 +#: emoticontheme.cpp:867 msgid "Rainbow" msgstr "Mavrica" -#: emoticontheme.cpp:853 +#: emoticontheme.cpp:868 msgid "Stormy cloud" msgstr "Necihtni oblak" -#: emoticontheme.cpp:854 +#: emoticontheme.cpp:869 msgid "Lightning" msgstr "Bliskanje" -#: emoticontheme.cpp:855 +#: emoticontheme.cpp:870 msgid "Umbrella" msgstr "Dežnik" -#: emoticontheme.cpp:856 +#: emoticontheme.cpp:871 msgid "Island with a palm tree" msgstr "Osamljeni otok" -#: emoticontheme.cpp:857 +#: emoticontheme.cpp:872 msgid "Telephone receiver" msgstr "sluÅ”alka" -#: emoticontheme.cpp:858 +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "Mobi" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "E-poÅ”ta" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 msgid "Clock" msgstr "Ura" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 msgid "Camera" msgstr "Fotoaparat" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "Filmski trak" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "Nota" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "Lisice" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 msgid "Money" msgstr "Soldi" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "Žarnica" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "Čik" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "Žoga" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "Darilo" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "X-Box" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "Računalnik" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 msgid "KMess Icon" msgstr "Ikona KMess" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "Povezava s strežnikom ni uspela " + +#: initialview.cpp:377 +msgid "Connect" +msgstr "Poveži" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "Odklopi" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "" -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "" -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "Nova &skupina" + +#: kmess.cpp:226 msgid "Add a group" msgstr "Dodaj skupino" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "Vnesite ime nove skupine:" -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "" - -#: kmess.cpp:638 +#: kmess.cpp:569 msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" @@ -1787,61 +2388,87 @@ msgstr "" "Ste prepričani, da želite osebo %1 odstraniti z vaÅ”ega seznama?" -#: kmess.cpp:640 +#: kmess.cpp:571 msgid "Remove contact" msgstr "Odstrani osebo" -#: kmess.cpp:641 kmess.cpp:684 -#, fuzzy -msgid "Remove" -msgstr "Odstranjeno" - -#: kmess.cpp:642 +#: kmess.cpp:573 #, fuzzy msgid "Remove and block" msgstr "Odstranjeno" -#: kmess.cpp:681 +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "" "Ste prepričani, da želite skupino %1 odstraniti s svojega seznama?" "list?" -#: kmess.cpp:683 -msgid "Remove group" -msgstr "Odstrani skupino" +#: kmess.cpp:631 +#, fuzzy +msgctxt "dialog button" +msgid "Remove" +msgstr "Odstranjeno" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "Te skupine ni mogoče spreminjati" -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 msgid "Rename group" msgstr "Preimenuj skupino" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "Povezan" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "Overitev ni uspela" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "Nepovezan" -#: kmess.cpp:1441 +#: kmess.cpp:1408 msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" -#: kmess.cpp:1445 +#: kmess.cpp:1412 #, fuzzy msgid "Error with notifications" msgstr "Obvestilo o e-poÅ”ti" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "KMess" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "&Dejanja" @@ -1863,808 +2490,733 @@ msgstr "PoiŔči osebo" msgid "Search by &Interest" msgstr "IŔči po interesih" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "PoiŔči osebo" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "Nov &Račun" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "Nastavitve računa" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "Poveži" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "Odklopi" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "Prikaži moj profil" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "&Moje stanje" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "Odsoten s samodejnim odgovarjanjem" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "Prikaži dovoljene stike" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 msgid "Show &Offline Contacts" msgstr "Prikaži osebe, ki niso prijavljene" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "Prikaži odstranjene osebe" -#: kmessinterface.cpp:303 +#: kmessinterface.cpp:318 #, fuzzy -msgid "Show &Display Pictures" +msgid "Show &Empty Groups" +msgstr "Prikaži sme&Å”ke" + +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" msgstr "VaÅ”a slika" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "Nasmeh" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "Razvrsti osebe po " -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "Skupini" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "Prijavljene/neprijavljene" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "Prikaži okno prenosov" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "Prikaži spletno okno" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +#, fuzzy +msgid "[%1] %2 goes online" +msgstr "%1 ni prijavljen" + +#: kmessview.cpp:363 +#, fuzzy +msgid "[%1] %2 goes offline" +msgstr "%1 ni prijavljen" + +#: kmessview.cpp:559 #, fuzzy msgid "Cha&t" msgstr "Klepet" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "Lastnosti" -#: kmessview.cpp:492 +#: kmessview.cpp:569 #, fuzzy msgid "&Remove from group" msgstr "Odstrani skupino" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +#, fuzzy +msgid "&Listening Music" +msgstr "PoÅ”iljanje datoteke %1" + +#: kmessview.cpp:601 #, fuzzy msgid "&Copy to Group" msgstr "Premakni v skupino" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "Premakni v skupino" -#: kmessview.cpp:549 +#: kmessview.cpp:646 msgid "Move Group &Down" msgstr "Pomakni skupino navzdol" -#: kmessview.cpp:550 +#: kmessview.cpp:647 msgid "Move Group &Up" msgstr "Pomakni skupino navzgor" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "I&zbriÅ”i skupino" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "Preimenu&j skupino" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 #, fuzzy msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "E-poÅ”ta" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "" -#: kmessview.cpp:918 +#: kmessview.cpp:1075 +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "" + +#: kmessview.cpp:1076 +#, fuzzy +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "Oblika sporočila v pogovoru:" + +#: kmessview.cpp:1085 msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "" -#: kmessview.cpp:921 +#: kmessview.cpp:1090 #, fuzzy -msgctxt "Contacts count in group tooltip" +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "Dodaj osebo" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +#, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "Oseba ni prijavljena" + +#: kmessview.cpp:1504 msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "" -#: kmessview.cpp:1543 -msgid "You have 1 new e-mail in your inbox." -msgstr "V predalu imate 1 novo e-poÅ”tno sporočilo." +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: kmessview.cpp:1547 -msgid "You have %1 new emails in your inbox." -msgstr "V predalu imate %1 novih e-poÅ”tnih sporočil" - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "KMess" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 msgid "Project support" msgstr "" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 #, fuzzy msgid "Current developer" msgstr "Razvijalec GnomeMeeting" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 msgid "" "German translation, testing, documentation, web master, project management, " "etc..." msgstr "NemÅ”ki prevod, testiranje, dokumentacija...." -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "Spletno oblikovanje" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "Italijanski prevod in večina smeÅ”kov" -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "SmeÅ”ki iz risank" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "Privzeta zvočna tema" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "Arabski prevod" -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 #, fuzzy msgid "More Arabic translation" msgstr "TurÅ”ki prevod" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "Prevod v brazilsko portugalŔčino" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 #, fuzzy msgid "Catalan translation" msgstr "Katalonski prevod" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 #, fuzzy msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "Prevod v poenostavljeno kitajŔčino" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 #, fuzzy msgid "More Simplified Chinese translation" msgstr "Prevod v poenostavljeno kitajŔčino" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 #, fuzzy msgid "Traditional Chinese translation" msgstr "Prevod v tradicionalno kitajŔčino" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 #, fuzzy msgid "Danish translation" msgstr "Danski prevod" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 #, fuzzy msgid "More Danish translation" msgstr "Danski prevod" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "Nizozemski prevod" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 #, fuzzy msgid "More Dutch translation" msgstr "Nizozemski prevod" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 #, fuzzy msgid "Estonian translation" msgstr "Estonski prevod" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 #, fuzzy msgid "Finnish translation" msgstr "Danski prevod" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 #, fuzzy msgid "More Finnish translation" msgstr "Danski prevod" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "Francoski prevod" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 msgid "More French translation, MSN6 emoticon definitions" msgstr "Francoski prevod, smeÅ”ki MSN6" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 #, fuzzy msgid "More French translation" msgstr "Francoski prevod" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 #, fuzzy msgid "Hungarian translation" msgstr "Estonski prevod" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 #, fuzzy msgid "More Italian translation" msgstr "Korejski prevod" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "Korejski prevod" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 #, fuzzy msgid "Norsk BokmĆ„l translation" msgstr "NorveÅ”ki prevod bokmal" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 #, fuzzy msgid "Slovenian translation" msgstr "Korejski prevod" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "Å panski prevod" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 #, fuzzy msgid "More Spanish translation" msgstr "Å panski prevod" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 msgid "Swedish translation" msgstr "Å vedski prevod" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 #, fuzzy msgid "Thai translation" msgstr "Tajski prevod" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "TurÅ”ki prevod" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "TurÅ”ki prevod" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -#, fuzzy -msgid "Guido Solinas" -msgstr "Prijavljen" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "Prenosi datotek" + +#: main.cpp:134 msgid "P4-Context field support" msgstr "" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "Popravki za Xineramo" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "Originalna koda za sprejem datotek" -#: main.cpp:120 -msgid "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" msgstr "" -#: main.cpp:120 +#: main.cpp:138 +msgid "KWallet support" +msgstr "" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "Razni popravki" + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "Razni popravki" -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "Razvijalec GnomeMeeting" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "Tip z vrečko na glavi" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "Inspiracija" -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 +#: main.cpp:150 #, fuzzy msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "Koda za oblačke" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "Koda za čas odsotnosti" -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 +#: main.cpp:152 msgid "Close-to-tray icon screenshot code" msgstr "" -#: main.cpp:131 +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 #, fuzzy msgid "Your name here?" msgstr "VaÅ”e ime" -#: main.cpp:131 +#: main.cpp:156 msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" -#: main.cpp:134 +#: main.cpp:159 #, fuzzy msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "VaÅ”e ime" -#: main.cpp:135 +#: main.cpp:160 #, fuzzy msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "VaÅ” e-poÅ”tni naslov:" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "Samodejna prijava z navedenim e-poÅ”tnim naslovom" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 msgid "The contact cancelled the session." msgstr "Oseba je prekinila povezavo." -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 msgid "The contact rejected the invitation." msgstr "Oseba je zavrnila povabilo." -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 msgid "You have cancelled the session." msgstr "Prekinili ste povezavo." -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "Zavrnili ste povabilo." -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +#, fuzzy +msgid "Do you want to accept or cancel?" msgstr "Boste sprejeli alizavrnili?" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +#, fuzzy +msgid "Click to cancel." msgstr "Kliknite za preklic." -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 #, fuzzy msgid "Do you want to accept the file: %1 (%2)" msgstr "Sprejmete datoteko :%1 (%2 bytov)" -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 msgid "The transfer of %1 failed. Couldn't open file." msgstr "Prenos %1 je spodletel. Datoke ni mogoče odpreti." -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "Prenos sprejet." + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 msgid "Connecting to %1, port %2" msgstr "Povezujem se na %1:vrata %2" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 msgid "The transfer was cancelled" msgstr "Prenos je bil preklican." -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 msgid "Connection established" msgstr "Povezava vzpostavljena" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 msgid "Successfully transferred file: %1" msgstr "Prenos datoteke %1 se je uspeÅ”no zaključil." -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 #, fuzzy msgid "The transfer of %1 failed. The file does not exist." msgstr "Prenos %1 je spodletel. Datoteka ne obstaja." -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 #, fuzzy msgid "The transfer of %1 failed. The file could not be read." msgstr "Prenos %1 je spodletel. Povezave ni mogoče vzpostaviti" -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 msgid "Sending file %1" msgstr "PoÅ”iljanje datoteke %1" -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "Prenos sprejet." - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 #, fuzzy msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "" "Vabilo za prenos podatkov je bilo preklicano, ker so bili podatki slabi." -#: network/applications/filetransferp2p.cpp:345 +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." +msgstr "" + +#: network/applications/filetransferp2p.cpp:348 +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "" + +#: network/applications/filetransferp2p.cpp:378 #, fuzzy -msgid "The transfer of %1 failed. Couldn't open file" +msgid "The transfer of file "%1" failed. Couldn't save the file." msgstr "Prenos %1 je spodletel. Datoke ni mogoče odpreti." -#: network/applications/filetransferp2p.cpp:524 +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 #, fuzzy -msgid "The contact cancelled the transfer." +msgid "The contact has cancelled the transfer of file "%1"." msgstr "Oseba je prekinila povezavo." -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "Prekinili ste povezavo." + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "" -#: network/applications/filetransferp2p.cpp:768 +#: network/applications/filetransferp2p.cpp:676 #, fuzzy -msgid "The transfer of %1 failed. The file does not exist." +msgid "Successfully sent file "%1"." +msgstr "Prenos datoteke %1 se je uspeÅ”no zaključil." + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "Prenos datoteke %1 se je uspeÅ”no zaključil." + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "Prenos %1 je spodletel. Datoteka ne obstaja." -#: network/applications/filetransferp2p.cpp:773 +#: network/applications/filetransferp2p.cpp:818 #, fuzzy -msgid "The transfer of %1 failed. The file could not be read." +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "Prenos %1 je spodletel. Povezave ni mogoče vzpostaviti" -#: network/applications/filetransferp2p.cpp:809 +#: network/applications/filetransferp2p.cpp:855 #, fuzzy -msgid "Sending file %1 (%2)" +msgid "Sending file "%1" (%2)." msgstr "PoÅ”iljanje datoteke %1" -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "Oseba je prekinila povezavo." + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "Povabljeni ste k srečanju GnomeMeeting." -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 #, fuzzy msgid "Starting GnomeMeeting. Connecting to %1." msgstr "Pričenjam GnomeMeeting. Povezujem se na %1." -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "Vabilo osebi na sestanek" -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "Vabilo je bilo zavrnjeno, ker na drugi strani ni podprto." -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 msgid "The invitation was aborted. An internal error occured." msgstr "Povabilo je bilo prekinjeno. PriÅ”lo je do notranje napake." -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "Povabilo je bilo prekinjeno. Čas se je iztekel." -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "Povabilo je bilo prekinjeno. Čas se je iztekel." -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "Povabilo je bilo prekinjeno." -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 msgid "The invitation was aborted." msgstr "Povabilo je bilo prekinjeno." -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "Oseba vas vabi, da si delite njeno namizje." -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 #, fuzzy msgid "Starting KRDC. Connecting to %1." msgstr "Pričenjam KRDC Povezujem se na %1" -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." -msgstr "Oseba je uporabila funkcijo MSN6, ki je KMess ne podpira." +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +msgid "The contact rejected the invitation. An internal error occured." +msgstr "Oseba je zavrnila povabilo. PriÅ”lo je notranje napake." -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +msgid "The transfer failed." +msgstr "Prenos ni uspel." + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." @@ -2672,70 +3224,62 @@ msgstr "" "Povabilo je bilo preklicano. Oseba je poslala slabe podatke, ali pa jih " "KMess ne podpira." -#: network/applications/p2papplication.cpp:1503 -msgid "The transfer failed. Data preparation failed." -msgstr "Prenos ni uspel; spodletela je priprava podatkov." - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -msgid "The contact rejected the invitation. An internal error occured." -msgstr "Oseba je zavrnila povabilo. PriÅ”lo je notranje napake." - -#: network/applications/p2papplication.cpp:1626 -msgid "The transfer failed." -msgstr "Prenos ni uspel." - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "Prenos ni uspel. Oseba je poslala slabe podatke, ali pa jih KMess ne podpira." -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "Prenos ni uspel.Iztekel se je čas za sprejem." + +#: network/applications/p2papplicationbase.cpp:1015 +msgid "The transfer failed. An internal error occured." +msgstr "Prenos ni uspel. Pojavila se je notranja napaka." + +#: network/applications/p2papplicationbase.cpp:1176 +#, fuzzy +msgid "The transfer failed. Couldn't open data source." +msgstr "Prenos ni uspel. Vira podatkov ni mogoče odpreti." + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "Oseba je uporabila funkcijo MSN6, ki je KMess ne podpira." + +#: network/applications/p2papplication.cpp:1071 +msgid "The transfer failed. Data preparation failed." +msgstr "Prenos ni uspel; spodletela je priprava podatkov." + +#: network/applications/p2papplication.cpp:1178 #, fuzzy msgid "The invitation was cancelled. Message was not directed to us." msgstr "Povabilo je bilo preklicano, ker sporočilo ni bilo namenjeno nam." -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 #, fuzzy msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "Prenos ni uspel. Oseba je poslala slabe podatke, ali pa jih KMess ne podpira." -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "Čakam na povezavo na %1: vrata%2" -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "" -#: network/applications/p2papplication.cpp:3297 -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "Prenos ni uspel.Iztekel se je čas za sprejem." - -#: network/applications/p2papplication.cpp:3316 -msgid "The transfer failed. An internal error occured." -msgstr "Prenos ni uspel. Pojavila se je notranja napaka." - -#: network/applications/p2papplication.cpp:3693 -#, fuzzy -msgid "The transfer failed. Couldn't open data source." -msgstr "Prenos ni uspel. Vira podatkov ni mogoče odpreti." - -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:3113 #, fuzzy msgid "Waiting for connection" msgstr "Čakanje na seznam stikov" -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 #, fuzzy msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " @@ -2744,7 +3288,7 @@ msgstr "" "Povabilo je bilo preklicano. Čas, določen, da oseba povabilo sprejme, se je " "iztekel." -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 #, fuzzy msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " @@ -2753,47 +3297,47 @@ msgstr "" "Povabilo je bilo preklicano. Čas, določen, da oseba povabilo sprejme, se je " "iztekel." -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "" "Povabilo je bilo preklicano. Čas, določen za sprejem podatkov, se je iztekel." -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 msgid "You are invited to start a voice conversation." msgstr "Vabijo vas k zvočnem pogovoru." -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 msgid "" "You are invited to start a voice conversation but support for this was not " "installed" msgstr "" "Vabijo vas k zvočnem pogovoru, vendar nimate nameŔčene ustrezne podpore." -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 msgid "You have cancelled the voice conversation." msgstr "Zavrnili ste glasovni razgovor." -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 #, fuzzy msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "Povabilo je bilo preklicano, ker se zvočna naprava ni vključila." -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 #, fuzzy msgid "Start voice conversation. Connecting to %1." msgstr "Pričenjam zvočno povezavo. Povezujem se na %1." -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 #, fuzzy msgid "Start voice conversation. Listening on %1." msgstr "Začenjam zvočni pogovor. PosluÅ”am na %1." -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 msgid "Inviting the contact to a voice conversation." msgstr "Osebo vabim n zvočni pogovor." -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 msgid "The contact is inviting you for '%1', but this is not implemented yet." msgstr "Oseba vas vabi k %1, vendar ta funkcija Å”e ni vključena." @@ -2836,653 +3380,879 @@ msgstr "" msgid "Receiving file %1" msgstr "Sprejem datoteke %1" -#: network/msnconnection.cpp:477 -msgid "1 ping lost" -msgstr "1 ping izgubljen" - -#: network/msnconnection.cpp:481 -msgid "%1 pings lost" -msgstr "Izgubljeni pingi: %1" - -#: network/msnconnection.cpp:496 -#, fuzzy -msgid "The connection to the server was lost." -msgstr "Povezava s strežnikom ni uspela " - -#: network/msnconnection.cpp:704 -msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." +#: network/msnconnection.cpp:589 +msgid "KMess could not access the remote webservice.
Details: %1" msgstr "" -#: network/msnconnection.cpp:756 -#, fuzzy -msgid "The remote server has closed the connection." -msgstr "Povabilo je bilo prekinjeno." - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" - -#: network/msnnotificationconnection.cpp:724 -#, fuzzy -msgid "Show MSN Messenger Service status?" -msgstr "Prikažem stanje storitve NET?" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "Napaka strežnika" - -#: network/msnnotificationconnection.cpp:1344 +#: network/msnnotificationconnection.cpp:1317 #, fuzzy msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" msgstr "" "Povezava je bila prekinjena, ker ste že \n" "povezani preko drugega odjemalca za MSN \n" "Messenger." -#: network/msnnotificationconnection.cpp:1558 +#: network/msnnotificationconnection.cpp:1532 msgid "Got synchronization" msgstr "Sinhronizirano" -#: network/msnnotificationconnection.cpp:1699 -msgid "Authenticating" +#: network/msnnotificationconnection.cpp:1670 +#, fuzzy +msgid "Authenticating..." msgstr "Overjanje" -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "Uporabnik potrjen" - -#: network/msnnotificationconnection.cpp:1752 +#: network/msnnotificationconnection.cpp:1719 msgid "Waiting for contact list..." msgstr "Čakanje na seznam stikov" -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "VaÅ”e podatke posredujem strežniku...." +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." +msgstr "" -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" +#: network/msnnotificationconnection.cpp:1894 +#, fuzzy +msgid "Authentication failed, please verify your account name and password." msgstr "Overjanje ni uspelo; preverite svoj račun in geslo" -#: network/msnnotificationconnection.cpp:2042 +#: network/msnnotificationconnection.cpp:1993 msgid "Connecting..." msgstr "Povezovanje..." -#: network/msnnotificationconnection.cpp:2219 +#: network/msnnotificationconnection.cpp:2167 #, fuzzy -msgid "KMess received an unknown command from the server: %1" +msgid "Unknown command received from the server: %1" msgstr "KMess je dobil sporočilo o neznani napaki od strežnika %1" -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 +#: network/msnnotificationconnection.cpp:2192 msgid "Invalid command syntax" msgstr "" -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -msgid "There was an internal error in KMess: %1" -msgstr "V KMess je priÅ”lo do notranje napake: %1" - -#: network/msnnotificationconnection.cpp:2243 +#: network/msnnotificationconnection.cpp:2196 msgid "Invalid command parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2246 +#: network/msnnotificationconnection.cpp:2199 msgid "The email you have tried to add is not a MSN Messenger account" msgstr "" -#: network/msnnotificationconnection.cpp:2249 +#: network/msnnotificationconnection.cpp:2204 msgid "Domain name missing" msgstr "" -#: network/msnnotificationconnection.cpp:2252 +#: network/msnnotificationconnection.cpp:2208 msgid "Already logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2255 +#: network/msnnotificationconnection.cpp:2211 msgid "The account name given is invalid" msgstr "Navedeno ime računa ni veljavno" -#: network/msnnotificationconnection.cpp:2258 +#: network/msnnotificationconnection.cpp:2215 msgid "" "That account name is invalid, or your passport has not been confirmed yet" msgstr "Ime računa ni veljavno ali pa Å”e ni uveljavljeno." -#: network/msnnotificationconnection.cpp:2261 +#: network/msnnotificationconnection.cpp:2218 msgid "Your contact list is full" msgstr "VaÅ” seznam stikov je poln" -#: network/msnnotificationconnection.cpp:2264 +#: network/msnnotificationconnection.cpp:2223 msgid "Invalid SBP parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2267 +#: network/msnnotificationconnection.cpp:2226 msgid "This contact is already on your list" msgstr "Ta oseba je že na vaÅ”em seznamu." -#: network/msnnotificationconnection.cpp:2270 +#: network/msnnotificationconnection.cpp:2230 msgid "This contact is not on your list" msgstr "Te osebe ni na vaÅ”em seznamu" -#: network/msnnotificationconnection.cpp:2273 +#: network/msnnotificationconnection.cpp:2234 msgid "This contact is not online" msgstr "Oseba ni prijavljena" -#: network/msnnotificationconnection.cpp:2276 +#: network/msnnotificationconnection.cpp:2239 msgid "Already in this mode" msgstr "" -#: network/msnnotificationconnection.cpp:2279 +#: network/msnnotificationconnection.cpp:2243 #, fuzzy msgid "Contact is in the opposite list" msgstr "Te osebe ni na vaÅ”em seznamu" -#: network/msnnotificationconnection.cpp:2282 +#: network/msnnotificationconnection.cpp:2247 +#, fuzzy +msgid "" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." +msgstr "Ime skupine ste že uporabili." + +#: network/msnnotificationconnection.cpp:2251 msgid "Your contact list has too many groups" msgstr "VaÅ” seznam vsebuje preveč skupin" -#: network/msnnotificationconnection.cpp:2285 +#: network/msnnotificationconnection.cpp:2255 msgid "This group can't be changed" msgstr "Te skupine ni mogoče spreminjati" -#: network/msnnotificationconnection.cpp:2288 +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "VaÅ” seznam vsebuje preveč skupin" + +#: network/msnnotificationconnection.cpp:2264 msgid "This group is not empty" msgstr "Taskupina ni prazna" -#: network/msnnotificationconnection.cpp:2291 -msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" -msgstr "Ime skupine ste že uporabili." - -#: network/msnnotificationconnection.cpp:2294 +#: network/msnnotificationconnection.cpp:2268 msgid "The group name is too long" msgstr "Ime skupine je predolgo" -#: network/msnnotificationconnection.cpp:2297 +#: network/msnnotificationconnection.cpp:2273 msgid "Attempted to change group \"0\"" msgstr "" -#: network/msnnotificationconnection.cpp:2300 +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +msgid "There was an internal error in KMess: %1" +msgstr "V KMess je priÅ”lo do notranje napake: %1" + +#: network/msnnotificationconnection.cpp:2277 #, fuzzy msgid "Invalid Group" msgstr "Preimenu&j skupino" -#: network/msnnotificationconnection.cpp:2303 +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 msgid "Switchboard server failed" msgstr "Preklopni strežnik ne deluje" -#: network/msnnotificationconnection.cpp:2306 +#: network/msnnotificationconnection.cpp:2287 msgid "Transfer to switchboard server failed" msgstr "Prenos k preklopnemu strežniku je spodletel " -#: network/msnnotificationconnection.cpp:2309 +#: network/msnnotificationconnection.cpp:2291 msgid "Direct connection (MSNSLP) error, connection failed" msgstr "" -#: network/msnnotificationconnection.cpp:2312 +#: network/msnnotificationconnection.cpp:2295 msgid "Required field missing" msgstr "" -#: network/msnnotificationconnection.cpp:2315 +#: network/msnnotificationconnection.cpp:2299 msgid "Not logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" +#: network/msnnotificationconnection.cpp:2302 +msgid "No permissions given for this account" msgstr "" -#: network/msnnotificationconnection.cpp:2322 +#: network/msnnotificationconnection.cpp:2307 msgid "Command is disabled" msgstr "" -#: network/msnnotificationconnection.cpp:2325 +#: network/msnnotificationconnection.cpp:2310 msgid "Your account is banned." msgstr "" -#: network/msnnotificationconnection.cpp:2329 +#: network/msnnotificationconnection.cpp:2314 #, fuzzy msgid "Challenge response failed" msgstr "Prenos ni uspel." -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" +#: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" +msgstr "" + +#: network/msnnotificationconnection.cpp:2323 +#, fuzzy +msgid "You are opening chat sessions too fast" msgstr "Prehitro odpirate sejo" -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" msgstr "Odprtih imate preveč sej" -#: network/msnnotificationconnection.cpp:2341 +#: network/msnnotificationconnection.cpp:2334 msgid "Unexpected command sequence" msgstr "" -#: network/msnnotificationconnection.cpp:2344 +#: network/msnnotificationconnection.cpp:2338 msgid "Bad friend name" msgstr "Neustrezno ime za prijatelja" -#: network/msnnotificationconnection.cpp:2348 +#: network/msnnotificationconnection.cpp:2344 msgid "Bad CVR data" msgstr "" -#: network/msnnotificationconnection.cpp:2353 +#: network/msnnotificationconnection.cpp:2350 msgid "The server reports KMess is flooding it with too many data" msgstr "" -#: network/msnnotificationconnection.cpp:2358 +#: network/msnnotificationconnection.cpp:2357 #, fuzzy msgid "Authentication ticket was incorrect" msgstr "Overitev ni uspela" -#: network/msnnotificationconnection.cpp:2362 +#: network/msnnotificationconnection.cpp:2360 msgid "You can't start a chat with someone while you are invisible." msgstr "Pogovora ne morete pričeti, dokler ste nevidni." -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." +#: network/msnnotificationconnection.cpp:2364 +#, fuzzy +msgid "Not accepting new contacts" +msgstr "Novih vodij ni mogoče sprejeti" + +#: network/msnnotificationconnection.cpp:2368 +#, fuzzy +msgid "" +"You have a kids passport account, you need parental consent to chat online." msgstr "Ā " -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." +#: network/msnnotificationconnection.cpp:2371 +#, fuzzy +msgid "Your passport account needs to be verified first." msgstr " " -#: network/msnnotificationconnection.cpp:2373 +#: network/msnnotificationconnection.cpp:2375 msgid "Bad USR ticket" msgstr "" -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" msgstr "" -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" +#: network/msnnotificationconnection.cpp:2399 +#, fuzzy +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." msgstr "PriÅ”lo je do notranje napake strežnika." +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + #: network/msnnotificationconnection.cpp:2414 -#, fuzzy -msgid "The server is too busy" -msgstr "Strežnik je zaseden" - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "Strežnik ni dosegljiv" - -#: network/msnnotificationconnection.cpp:2422 msgid "Peer notification server down" msgstr "Strežnik za obveŔčanje je izključen" -#: network/msnnotificationconnection.cpp:2426 +#: network/msnnotificationconnection.cpp:2418 msgid "The server is going down" msgstr "Strežnik se izključuje" -#: network/msnnotificationconnection.cpp:2429 +#: network/msnnotificationconnection.cpp:2422 msgid "The server is going down soon" msgstr "strežnik se bo kmalu izključil" -#: network/msnnotificationconnection.cpp:2433 +#: network/msnnotificationconnection.cpp:2427 msgid "Write is blocking" msgstr "Pisanje je blokirano" -#: network/msnnotificationconnection.cpp:2436 +#: network/msnnotificationconnection.cpp:2431 msgid "Session is overloaded" msgstr "Saja je prezasedena" -#: network/msnnotificationconnection.cpp:2441 +#: network/msnnotificationconnection.cpp:2438 #, fuzzy msgid "The server is not available" msgstr "Strežnik ni dosegljiv" -#: network/msnnotificationconnection.cpp:2444 +#: network/msnnotificationconnection.cpp:2442 msgid "Authentication failed" msgstr "Overitev ni uspela" -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" -msgstr "Novih vodij ni mogoče sprejeti" - -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" +#: network/msnnotificationconnection.cpp:2449 +#, fuzzy +msgid "Unknown error code received from the server: %1" msgstr "KMess je dobil sporočilo o neznani napaki od strežnika %1" -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +msgctxt "Error dialog box title" +msgid "MSN error" msgstr "" +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "minutah" +msgstr[1] "minutah" +msgstr[2] "minutah" +msgstr[3] "minutah" + #: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." +msgid "Server closes for maintenance in %1!" msgstr "" #: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." msgstr "" -#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:2901 msgid "Lost reference to SOAP client" msgstr "" -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +msgid "KMess could not process Offline-IM messages.
Details: %1" msgstr "" -#: network/msnnotificationconnection.cpp:3209 +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "Overitev ni uspela" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "V KMess je priŔlo do notranje napake: %1" + +#: network/msnnotificationconnection.cpp:3242 +msgctxt "Login error message, with more details for developer versions" msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" msgstr "" -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" msgstr "" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "Povezava s strežnikom ni uspela " + +#: network/msnnotificationconnection.cpp:3302 +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" +msgstr "" + +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "Napaka strežnika" + +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "Čas za povezavo se je iztekel." + +#: network/msnsockettcp.cpp:368 +msgid "1 ping lost" +msgstr "1 ping izgubljen" + +#: network/msnsockettcp.cpp:372 +msgid "%1 pings lost" +msgstr "Izgubljeni pingi: %1" + +#: network/msnsockettcp.cpp:387 +#, fuzzy +msgid "The connection to the server was lost." +msgstr "Povezava s strežnikom ni uspela " + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "Oseba ni prijavljena ali pa ni vidna." -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 #, fuzzy msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "Oseba je uporabila funkcijo MSN6, ki je KMess ne podpira." -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 #, fuzzy msgid "The message \"%1\" was not received!" msgstr "Sporočilo \"%1\"ni bilo sprejeto." -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "" -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +msgid "In %1's chat: %2" msgstr "" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +msgid "%1 says:
'%2'" msgstr "" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" -msgstr "" - -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" -msgstr "" - -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" -msgstr "" - -#: notification/notificationchat.cpp:200 +#: notification/chatnotification.cpp:171 #, fuzzy -msgid "%1 has sent you a handwritten message!" +msgid "%1 has sent you an offline message:
'%2'" msgstr "%1 je prijavljen/a" -#: notification/notificationchat.cpp:204 -#, fuzzy -msgid "%1 has sent you a nudge!" -msgstr "%1 je prijavljen/a" - -#: notification/notificationchat.cpp:208 -#, fuzzy -msgid "%1 has sent you a wink!" -msgstr "%1 je prijavljen/a" - -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" +#: notification/chatnotification.cpp:178 +msgid "%1's chat requests attention!" msgstr "" -#: notification/notificationchat.cpp:215 +#: notification/chatnotification.cpp:183 +msgid "%1:
%2" +msgstr "" + +#: notification/chatnotification.cpp:190 #, fuzzy -msgid "%1 is sending you a file!" +msgid "%1 has sent you a handwritten message!" msgstr "%1 je prijavljen/a" -#: notification/notificationchat.cpp:216 +#: notification/chatnotification.cpp:194 #, fuzzy -msgid "%1 has sent you an invitation!" +msgid "%1 has sent you a nudge!" msgstr "%1 je prijavljen/a" -#: notification/notificationchat.cpp:223 +#: notification/chatnotification.cpp:198 #, fuzzy -msgid "%1 has canceled the webcam session!" +msgid "%1 has sent you a wink!" +msgstr "%1 je prijavljen/a" + +#: notification/chatnotification.cpp:204 +msgid "%1 wants to use the webcam!" +msgstr "" + +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" +msgstr "%1 je prijavljen/a" + +#: notification/chatnotification.cpp:206 +#, fuzzy +msgid "%1 has sent you an invitation!" +msgstr "%1 je prijavljen/a" + +#: notification/chatnotification.cpp:213 +#, fuzzy +msgid "%1 has canceled the webcam session!" msgstr "Prekinili ste povezavo." -#: notification/notificationchat.cpp:224 +#: notification/chatnotification.cpp:214 #, fuzzy -msgid "%1 has canceled the file transfer!" +msgid "%1 has canceled the file transfer!" msgstr "Oseba je prekinila povezavo." -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +msgid "%1's activity has been canceled!" msgstr "" -#: notification/notificationchat.cpp:232 -msgid "%1 has accepted to use the webcam!" -msgstr "" - -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" -msgstr "" - -#: notification/notificationchat.cpp:234 -msgid "%1 has accepted your invitation!" -msgstr "" - -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" -msgstr "" - -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" -msgstr "" - -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" -msgstr "" - -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" -msgstr "" - -#: notification/notificationchat.cpp:251 +#: notification/chatnotification.cpp:222 #, fuzzy -msgid "The file transfer with %1 has failed!" +msgid "%1 has accepted to use the webcam!" +msgstr "Prekinili ste povezavo." + +#: notification/chatnotification.cpp:223 +#, fuzzy +msgid "%1 has accepted the file transfer!" +msgstr "Oseba je prekinila povezavo." + +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" +msgstr "%1 je prijavljen/a" + +#: notification/chatnotification.cpp:231 +#, fuzzy +msgid "%1 has ended the webcam session!" +msgstr "Prekinili ste povezavo." + +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "Prenos %1 je bil preklican. " -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:233 +msgid "%1's activity has ended!" msgstr "" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -#, fuzzy -msgid "%1 is now online" -msgstr "%1 je prijavljen/a" - -#: notification/notificationcontactstatus.cpp:76 -#, fuzzy -msgid "%1 has gone away" -msgstr "%1 je prijavljen/a" - -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/chatnotification.cpp:240 +msgid "%1's webcam session has failed!" msgstr "" -#: notification/notificationcontactstatus.cpp:78 +#: notification/chatnotification.cpp:241 #, fuzzy -msgid "%1 is now busy" -msgstr "%1 je prijavljen/a" +msgid "The file transfer with %1 has failed!" +msgstr "Prenos %1 je bil preklican. " -#: notification/notificationcontactstatus.cpp:79 -#, fuzzy -msgid "%1 has become invisible" -msgstr "%1 je prijavljen/a" - -#: notification/notificationcontactstatus.cpp:80 -#, fuzzy -msgid "%1 has gone idle" -msgstr "%1 je prijavljen/a" - -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/chatnotification.cpp:242 +msgid "%1's activity has ended with an error!" msgstr "" -#: notification/notificationcontactstatus.cpp:82 +#: notification/contactstatusnotification.cpp:70 #, fuzzy -msgid "%1 is on the phone" +msgid "%1 is now online" msgstr "%1 je prijavljen/a" -#: notification/notificationcontactstatus.cpp:83 +#: notification/contactstatusnotification.cpp:71 #, fuzzy -msgid "%1 is out for lunch" +msgid "%1 has gone away" msgstr "%1 je prijavljen/a" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/contactstatusnotification.cpp:72 +msgid "%1 will be right back" msgstr "" -#: settings/accountswidget.cpp:81 +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" +msgstr "%1 je prijavljen/a" + +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" +msgstr "%1 je prijavljen/a" + +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" +msgstr "%1 je prijavljen/a" + +#: notification/contactstatusnotification.cpp:76 +#, fuzzy +msgid "%1 has logged out" +msgstr "%1 je prijavljen/a" + +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" +msgstr "%1 je prijavljen/a" + +#: notification/contactstatusnotification.cpp:78 +#, fuzzy +msgid "%1 is out for lunch" +msgstr "%1 je prijavljen/a" + +#: notification/newemailnotification.cpp:78 +msgid "New email:
'%1'
by '%2'" +msgstr "" + +#: settings/accountpage.cpp:69 #, fuzzy msgid "Browse..." msgstr "&Brskaj..." -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +msgid "Browse and crop picture..." msgstr "" -#: settings/accountswidget.cpp:404 -msgid "Display Picture" -msgstr "VaŔa slika" +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" +#: settings/accountpage.cpp:448 +#, fuzzy +msgid "Downloading of display picture failed" msgstr "Prenos slike zaslona ni uspel" -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 +#, fuzzy msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" "Pri poskusu zamenjave slike je priŔlo do napake.\n" "Prepričajte se, če ste izbrali pravo sliko." -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "Stacy" - -#: settings/chatstylepage.cpp:317 -msgid "Great!" -msgstr "" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 #, fuzzy msgid "&Delete" msgstr "Odstrani to osebo" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "Nastavitve" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 #, fuzzy msgid "Account" msgstr "Računi" -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 #, fuzzy msgid "My Account" msgstr "Računi" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "Opozorila" -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 #, fuzzy msgid "Alerts and Notifications" msgstr "Obvestilo o e-poŔti" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "Klepet" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "Dnevniki klepetov" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "" + +#: settings/accountsettingsdialog.cpp:201 +msgid "The email address you have entered is already in use: '%1'" +msgstr "" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "Res želite izbrisati ta račun? " -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "Res želite izbrisati ta račun? " + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "Stacy" + +#: settings/chatstylepage.cpp:341 +msgid "Great!" +msgstr "" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "Nastavitve" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +msgid "Accounts" +msgstr "Računi" + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "Obvestilo o e-poŔti" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "Datoteke o pogovorih shrani v naslednji matični imenik:" + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." msgstr "" -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "" +#: systemtraywidget.cpp:245 +#, fuzzy +msgid "- %1 (%2)" +msgstr "%1 MB" + +#~ msgid "Picture:" +#~ msgstr "Slika:" + +#, fuzzy +#~ msgid "Speed:" +#~ msgstr "Strežnik:" + +#, fuzzy +#~ msgid "Login Information" +#~ msgstr "Prikaži e-poÅ”tno sporočilo " + +#~ msgid "Logging in..." +#~ msgstr "Prijavljanje....." + +#~ msgid "Use a specified command:" +#~ msgstr "Uporabi ukaz:" + +#, fuzzy +#~ msgid "Email: " +#~ msgstr "E-poÅ”ta" + +#~ msgid "Remove group" +#~ msgstr "Odstrani skupino" + +#, fuzzy +#~ msgid "Show &Display Pictures" +#~ msgstr "VaÅ”a slika" + +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr "V predalu imate 1 novo e-poÅ”tno sporočilo." + +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr "V predalu imate %1 novih e-poÅ”tnih sporočil" + +#, fuzzy +#~ msgid "Guido Solinas" +#~ msgstr "Prijavljen" + +#, fuzzy +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "Prenos %1 je spodletel. Datoke ni mogoče odpreti." + +#, fuzzy +#~ msgid "Sidebar" +#~ msgstr "Prikaži/Skrij prijatelje&vo stransko okno" + +#, fuzzy +#~ msgid "New contact's group" +#~ msgstr "Nov &stik" + +#, fuzzy +#~ msgid "Enter your login information:" +#~ msgstr "Oziroma vnesite podatke za prijavo:" + +#~ msgid "Your friendly name:" +#~ msgstr "VaÅ”e prijazno ime:" + +#, fuzzy +#~ msgid "Your email address:" +#~ msgstr "E-poÅ”tni naslov:" + +#~ msgid "Your password:" +#~ msgstr "VaÅ”e geslo:" + +#, fuzzy +#~ msgid "Display picture:" +#~ msgstr "VaÅ”a slika" + +#, fuzzy +#~ msgid "Don't show a displa&y picture" +#~ msgstr "Želim prikaz slike" + +#, fuzzy +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "Prikaži sporočilo, ko prispe poÅ”ta v \"druge mape\"" + +#~ msgid "Organize chat folders by:" +#~ msgstr "Mape razgovorov razvrsti po:" + +#, fuzzy +#~ msgid "&Show graphics in chat messages" +#~ msgstr "V sporočilih prikaži grafiko" + +#~ msgid "Use Hotmail" +#~ msgstr "Uporabi Hotmail" + +#~ msgid "says:" +#~ msgstr "pravi:" + +#~ msgid "Current name: " +#~ msgstr "Trenutno ime:" + +#, fuzzy +#~ msgid "The remote server has closed the connection." +#~ msgstr "Povabilo je bilo prekinjeno." + +#, fuzzy +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr "Prikažem stanje storitve NET?" + +#~ msgid "Received user confirmation" +#~ msgstr "Uporabnik potrjen" + +#~ msgid "Transfer to notification server" +#~ msgstr "VaÅ”e podatke posredujem strežniku...." + +#, fuzzy +#~ msgid "The server is too busy" +#~ msgstr "Strežnik je zaseden" + +#~ msgid "The server is unavailable" +#~ msgstr "Strežnik ni dosegljiv" + +#~ msgid "KMess received an unknown error message from the server: %1" +#~ msgstr "KMess je dobil sporočilo o neznani napaki od strežnika %1" + #~ msgid "Add contact" #~ msgstr "Dodaj prijatelja" @@ -3490,9 +4260,6 @@ msgstr "" #~ msgid "KMess Notification" #~ msgstr "Obvestilo o e-poÅ”ti" -#~ msgid "Accounts" -#~ msgstr "Računi" - #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" @@ -3503,9 +4270,6 @@ msgstr "" #~ "Your emails" #~ msgstr "matjazkase@hotmail.com" -#~ msgid "Insert an emoticon" -#~ msgstr "Vstavi smeÅ”ka" - #~ msgid "Away - Idle" #~ msgstr "Odsoten" @@ -3533,17 +4297,6 @@ msgstr "" #~ msgid "(On the Phone)" #~ msgstr "Telefoniram" -#, fuzzy -#~ msgid "Connection timeout" -#~ msgstr "Čas za povezavo se je iztekel." - -#~ msgid "Connect" -#~ msgstr "Poveži" - -#, fuzzy -#~ msgid "Listening to %1" -#~ msgstr "PoÅ”iljanje datoteke %1" - #, fuzzy #~ msgid "File transfer dialog message" #~ msgstr "Prenosi datotek" @@ -3577,9 +4330,6 @@ msgstr "" #~ msgid "You can't login to hotmail with this account." #~ msgstr "S tem računom se ne morete prijaviti" -#~ msgid "The connection to the server failed." -#~ msgstr "Povezava s strežnikom ni uspela " - #~ msgid "You may not be connected to the internet." #~ msgstr "Mogoče je, da niste povezani z internetom" @@ -3612,18 +4362,12 @@ msgstr "" #~ msgid "Preview:" #~ msgstr "Predogled:" -#~ msgid "&Use the default picture" -#~ msgstr "&Uporabi privzeto sliko" - #~ msgid "I want to use a proxy" #~ msgstr "Želim uporabljati proxy" #~ msgid "Port:" #~ msgstr "Vrata:" -#~ msgid "Type:" -#~ msgstr "Vrsta:" - #~ msgid "User ID:" #~ msgstr "Uporabnik." @@ -3636,9 +4380,6 @@ msgstr "" #~ msgid "SOCKS5 Proxy" #~ msgstr "SOCKS5 Proxy" -#~ msgid "Server:" -#~ msgstr "Strežnik:" - #~ msgid "Proxy" #~ msgstr "Proxy" @@ -3675,9 +4416,6 @@ msgstr "" #~ msgid "The following people are offline" #~ msgstr "Osebe, ki niso prijavljene:" -#~ msgid "%1 is offline" -#~ msgstr "%1 ni prijavljen" - #~ msgid "The following people are online" #~ msgstr "Prijavljene osebe:" @@ -3693,18 +4431,6 @@ msgstr "" #~ "\"%1\"\n" #~ "od %2" -#~ msgid "" -#~ "\"%1\"\n" -#~ "from %2\n" -#~ "in another folder" -#~ msgstr "" -#~ "V drugi mapi je\n" -#~ "\"%1\"\n" -#~ "od %2" - -#~ msgid "and" -#~ msgstr "in" - #~ msgid "says: " #~ msgstr "pravi: " @@ -3749,12 +4475,6 @@ msgstr "" #~ msgid "Chat - %1" #~ msgstr "Klepet -%1" -#~ msgid "Chat - %1 and %2" -#~ msgstr "Klepet - %1 in %2" - -#~ msgid "Chat - %1 et al." -#~ msgstr "Klepet %1" - #~ msgid "You're changing your name too rapidly" #~ msgstr "Prepogosto spreminjate svoje ime" @@ -3780,9 +4500,6 @@ msgstr "" #~ msgid "Get New Emoticon or Sound &Themes" #~ msgstr "Pridobi nove smeÅ”ke ali zvoke" -#~ msgid "Chat message layout:" -#~ msgstr "Oblika sporočila v pogovoru:" - #~ msgid "n&ame" #~ msgstr "&ime" diff --git a/po/sv.po b/po/sv.po index 6309fc2..e07540e 100644 --- a/po/sv.po +++ b/po/sv.po @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: sv\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" "PO-Revision-Date: 2005-07-14 12:08+0200\n" "Last-Translator: Christian Lundgren \n" "Language-Team: \n" @@ -13,48 +13,41 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.10.1\n" -#. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 -#: rc.cpp:3 -msgid "Logging in..." -msgstr "Loggar in..." - -# chat/chatviewinterface.cpp:98 rc.cpp:33, no-c-format -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -msgid "S&end" -msgstr "Sk&icka" - # chat/chatviewinterface.cpp:99 rc.cpp:36, no-c-format #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 +#. i18n: file ./chat/chatview.ui line 189 +#: rc.cpp:3 msgid "Ne&w Line" msgstr "N&y Rad" +# chat/chatviewinterface.cpp:98 rc.cpp:33, no-c-format #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 -#, fuzzy -msgid "Sidebar" -msgstr "Sidopanel" +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 +msgid "S&end" +msgstr "Sk&icka" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +msgid "Contacts" +msgstr "Kontakter" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "Klicka hƤr fƶr att visa den hƤr kontaktens profil." #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." -msgstr "Klicka fƶr att skicka ett e-postmeddelande till den hƤr kontakten." +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 #, fuzzy msgid "" "Enter here the email address of the person you wish to add to your contact " @@ -63,41 +56,39 @@ msgstr "Skriv in e-postadressen till den person du vill lƤgga till:" # initialviewinterface.cpp:235 rc.cpp:20, no-c-format #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 msgid "Email address" msgstr "E-postadress" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 #, fuzzy -msgid "New contact's group" -msgstr "Ny &Kontakt" +msgid "Initial group" +msgstr "Byt &namn pĆ„ Grupp" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "Skriv in en genvƤg fƶr den hƤr uttryckssymbolen:" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "VƤlj en bildfil:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 #, fuzzy msgid "" "Enter a message to be automatically sent to people who try to message you." @@ -106,132 +97,346 @@ msgstr "" " dĆ„ personer fƶrsƶker kontakta dig:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 #, fuzzy msgid "&Automatic away message" msgstr "Specifiera ett FrĆ„nvarandemeddelande" -# dialogs/contactaddeduserdialoginterface.cpp:72 rc.cpp:60, no-c-format #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" msgstr "" -"%1\n" -"har lagt till dig till hans eller hennes kontaktlista. Vill du:" # dialogs/contactaddeduserdialoginterface.cpp:74 rc.cpp:64, no-c-format #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 -msgid "&Add this contact to your \"Friends\" list" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 +#, fuzzy +msgid "&Add this person to my \"Friends\" list" msgstr "LƤgg till den hƤr kont&akten till din \"VƤnner\"-lista" # dialogs/contactaddeduserdialoginterface.cpp:75 rc.cpp:67, no-c-format #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 -msgid "&Not add this contact, but let them see your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 +#, fuzzy +msgid "Do not add this person; only allow them to see my online state" msgstr "" "I&nte lƤgga till den hƤr kontakten, men tillĆ„t den att se din anslutna status" # dialogs/contactaddeduserdialoginterface.cpp:76 rc.cpp:70, no-c-format #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 -msgid "Block this person from contacting &you or seeing your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 +#, fuzzy +msgid "&Block this person from contacting me or seeing my online state" msgstr "" "Blockera den hƤr personen frĆ„n att kontakta dig och se din onlinestatus." #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, no-c-format +msgid "Contact Properties for %1" +msgstr "Kontaktegenskaper fƶr %1" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +#, fuzzy +msgid "Restore" +msgstr "Borttagen" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "AnvƤnd ett alternativt namn fƶr den hƤr personen" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "" +"Visa poppupp-fƶnster nƤr den hƤr personen blir ansluten eller frĆ„nkopplad" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "Ljud:" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +#, fuzzy +msgid "&Clear Cache" +msgstr "Rensa flik" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +#, fuzzy +msgid "Notes" +msgstr "Anteckning" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "NƤtverksfƶnster" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +#, fuzzy +msgid "Standard" +msgstr "StjƤrna" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +# chat/chatviewinterface.cpp:98 rc.cpp:33, no-c-format +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "Sk&icka" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 msgid "Cancel" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -msgid "Enter your login information:" -msgstr "Skriv in din inloggningsinformation:" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" +msgstr "" + +#. i18n: tag string +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 +#, fuzzy +msgid "Email address:" +msgstr "E-postadress " # rc.cpp:17 rc.cpp:273, no-c-format #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 -msgid "Password" +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +#, fuzzy +msgid "Password:" msgstr "Lƶsenord" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "Status vid inloggning" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 #, fuzzy msgid " Account options " msgstr "Kontoin&stƤllningar" # initialviewinterface.cpp:223 rc.cpp:13, no-c-format #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 msgid "Remem&ber this profile" msgstr "Kom ihĆ„g den hƤr profilen" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "A&nslut" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "Skriv in ditt personliga meddelande hƤr" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr "Kontoin&stƤllningar" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "Skriv in namnet pĆ„ andra kontakter ska se nƤr du Ƥr ansluten." # settings/accountswidget.cpp:98 rc.cpp:88, no-c-format #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 -msgid "Your friendly name:" -msgstr "Ditt visningsnamn:" +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 +#, fuzzy +msgid "&Friendly name:" +msgstr "&Visningsnamn:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" @@ -240,15 +445,15 @@ msgstr "" "nytt konto pĆ„ http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 #, fuzzy -msgid "Your email address:" +msgid "&Email address:" msgstr "E-postadress " #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" @@ -256,42 +461,43 @@ msgstr "" "Skriv in lƶsenordet fƶr ditt MSN Passport-konto. Du kan registrera ett nytt " "konto pĆ„ http://register.passport.com/" +# rc.cpp:17 rc.cpp:273, no-c-format #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" -msgstr "Ditt lƶsenord:" +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 +#, fuzzy +msgid "&Password:" +msgstr "Lƶsenord" # rc.cpp:17 rc.cpp:273, no-c-format #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 #, fuzzy -msgid "Remember Password" +msgid "&Remember Password" msgstr "Lƶsenord" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 -msgid "Display picture:" -msgstr "Visningsbild:" +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 +msgid "Display Picture" +msgstr "Visningsbild" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 msgid "C&hange..." msgstr "Ƅndra..." -# settings/imagewidgetinterface.cpp:104 rc.cpp:228, no-c-format #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -msgid "Don't show a displa&y picture" -msgstr "Visa inte en visningsbild" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -310,35 +516,39 @@ msgstr "" "cafĆ©)." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +#, fuzzy +msgid "Re&member the settings of this account" msgstr "Kom ihĆ„g instƤllningarna fƶr det hƤr kontot" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "Om aktiverat, kommer KMess automatiskt logga in med det hƤr kontot" # settings/accountswidget.cpp:102 rc.cpp:100, no-c-format #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 -msgid "Login &with this account automatically at start-up" +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 +#, fuzzy +msgid "Login &with this account automatically" msgstr "Logga in med det hƤr konto automatiskt vid start" +# settings/chatloggingwidget.cpp:119 rc.cpp:130, no-c-format #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "Status att sƤtta vid inloggning:" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "Logga &alla chattar" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -349,8 +559,8 @@ msgstr "" "anvƤnda ett Hotmail-konto fƶr att ansluta." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." @@ -359,27 +569,27 @@ msgstr "" "Ƥr verifierad." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "BegƤr e-postbekrƤftelse" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 #, fuzzy msgid "https://accountservices.passport.net/" msgstr "GĆ„ till accountservices.passport.net" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "GĆ„ till accountservices.passport.net" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." @@ -388,41 +598,109 @@ msgstr "" "postadress som ett Passportkonto." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "Registrera nytt konto" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 #, fuzzy msgid "http://register.passport.com/" msgstr "GĆ„ till register.passport.com" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "GĆ„ till register.passport.com" +# settings/settingsdialog.cpp:80 settings/accountswidget.cpp:97 rc.cpp:85, +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 +#, fuzzy +msgid "Saved accounts:" +msgstr "Konton" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +msgid "Click" +msgstr "Klicka" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "" +"Klicka hƤr fƶr att lƤgga till en ny egen uttryckssymbol fƶr att skicka till " +"dina kontakter" + +# settings/settingsdialog.cpp:80 settings/accountswidget.cpp:97 rc.cpp:85, +# +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "Konto" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "VƤlj en uttryckssymbol och klicka Ƥr fƶr att ta bort den" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "Borttagen" + # settings/settingsdialog.cpp:85 settings/emailwidget.cpp:111 rc.cpp:216, #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 -msgid "Popup notifications" +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "Popupnotifikationer" +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "Kontakter" + # settings/alertswidget.cpp:114 rc.cpp:124, no-c-format #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 msgid "Show notifications when your contacts:" msgstr "Visa notifikationer nƤr dina kontaker:" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." @@ -431,15 +709,15 @@ msgstr "" "till MSN." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 #, fuzzy msgid "&Go online" msgstr "Koppla ifrĆ„n" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." @@ -448,14 +726,14 @@ msgstr "" "konversation med dig." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "Starta en &chatt med dig" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." @@ -464,14 +742,14 @@ msgstr "" "skickar ett meddelande till dig." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 msgid "S&end you a message" msgstr "Skicka ett m&eddelande till dig" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." @@ -480,16 +758,16 @@ msgstr "" "MSN status." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "Ƅndra deras &status" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." @@ -498,41 +776,92 @@ msgstr "" "kopplar ifrĆ„n." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 msgid "Go o&ffline" msgstr "Koppla ifrĆ„n" +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" + +# initialviewinterface.cpp:235 rc.cpp:20, no-c-format +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 +#, fuzzy +msgid "Email Events" +msgstr "E-postadress" + # settings/emailwidget.cpp:113 rc.cpp:222, no-c-format #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 -msgid "Show notifications when you recei&ve an email" -msgstr "Visa notifikationer nƤr du fĆ„r e-post" +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" +msgstr "Visa meddelande nƤr ett e-postmeddelande mottas i \"andra mappar\"" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" +"Om aktiverad, kommer ett popupmeddelande ocksĆ„ visas nƤr e-post tas emot i " +"andra mappar. Det hƤr alternativet Ƥr bara tillgƤngligt fƶr Hotmail-konton." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +msgid "In other folders" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "Kontrollerar antalet sekunder innan popupmeddelanden dƶljs" # settings/alertswidget.cpp:112 rc.cpp:118, no-c-format #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "Dƶlj popups efter" # settings/alertswidget.cpp:113 rc.cpp:121, no-c-format #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "sekunder" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "Meddelanden" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "Visa FrĆ„nk&opplade Kontakter" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -550,14 +879,32 @@ msgstr "" "bara chattfƶnstret vid den fƶrsta knuffen.

" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "Skaka chattfƶnstret nƤr en knuff tas emot eller skickas" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" +"Om aktiverad, kommer ett popupmeddelande visas nƤr e-post tas emot i din " +"inkorg. Antalet olƤsta e-postmeddelanden visas ovanfƶr kontaktlistan. Det " +"hƤr alternativet Ƥr bara tillgƤngligt fƶr Hotmail-konton." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." @@ -566,31 +913,38 @@ msgstr "" "hƤr informationen hƤmtas frĆ„n den nuvarande aktiva ljudspelarapplikationen." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 -msgid "Inform contacts w&hich song I am listening to." +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 +#, fuzzy +msgid "Inform contacts w&hich song I am listening to" msgstr "Informera kontakter om vilken sĆ„ng jag lyssnar pĆ„." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 +#, fuzzy msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" "Om aktiverad, din status kommer att Ƥndras automatiskt till \"FrĆ„nvarande-" "Inaktiv\" nƤr du inte anvƤnder datorn pĆ„ ett par minuter." # settings/alertswidget.cpp:108 rc.cpp:106, no-c-format #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "Ƅndra status till \"FrĆ„nvarande-Inaktiv\" vid inaktivitet" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." @@ -600,49 +954,50 @@ msgstr "" # settings/alertswidget.cpp:109 rc.cpp:109, no-c-format #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 msgid "Become idle after" msgstr "Bli inaktiv efter" # settings/alertswidget.cpp:110 rc.cpp:112, no-c-format #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "minuter" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "" "Om aktiverad, kommer chattkonversationer att sparas i en specific katalog." # settings/chatloggingwidget.cpp:119 rc.cpp:130, no-c-format #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 msgid "Log &all chats" msgstr "Logga &alla chattar" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 msgid "" "Choose the directory on your system where you'd like to save the chat logs." msgstr "VƤlj katalogen i ditt system dƤr du vill spara chattloggar." # settings/chatloggingwidget.cpp:120 rc.cpp:133, no-c-format #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" msgstr "Spara chattfiler i fƶljande katalog:" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." @@ -651,132 +1006,106 @@ msgstr "" "chattkatalogen efter Ć„r, mĆ„nad eller dag." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "Organisera chattmappar med:" +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" # settings/chatloggingwidget.cpp:123 rc.cpp:142, no-c-format #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "ƅr" # settings/chatloggingwidget.cpp:124 rc.cpp:145, no-c-format #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 msgid "Month" msgstr "MĆ„nad" # settings/chatloggingwidget.cpp:125 rc.cpp:148, no-c-format #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "Dag" # settings/chatloggingwidget.cpp:126 rc.cpp:151, no-c-format #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" msgstr "Spara alla chattloggar i fƶljande katalog" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." -msgstr "Det hƤr typsnittet och den hƤr fƤrgen anvƤnds i dina chattmeddelanden." - -# settings/chattingwidget.cpp:185 rc.cpp:157, no-c-format -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "Ditt meddelandetypsnitt:" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" -"TillĆ„ter att Ć„sidosƤtta typsnittet och fƤrgen fƶr dina kontakters " -"meddelanden med det valda typsnittet och den valda fƤrgen nedan." - -# settings/chattingwidget.cpp:188 rc.cpp:162, no-c-format -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "Tvinga kontakters meddelanden att anvƤnda det hƤr typsnittet:" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 45 +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "" "TillĆ„ter dig att Ƥndra temat KMess anvƤnder fƶr att visa alla " "chattmeddelanden." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +#, fuzzy +msgid "&Chat style:" msgstr "Chattstil:" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "InstƤllningar" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "Aktiverar synlighet fƶr uttryckssymboler i chattkonversationer." -# settings/chattingwidget.cpp:191 rc.cpp:167, no-c-format #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 -msgid "&Show graphics in chat messages" -msgstr "Vi&sa grafik i chattmeddelanden" +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 +#, fuzzy +msgid "&Show emoticons" +msgstr "Visa &Uttryckssymboler" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "Aktiverar synligheten fƶr tidsstƤmplar i varje chattmeddelande" # settings/chattingwidget.cpp:191 rc.cpp:167, no-c-format #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 -msgid "S&how time in chat messages" +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 +#, fuzzy +msgid "S&how messages time" msgstr "Visa tid i c&hattmeddelanden" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" -"Aktiverar anvƤndandet av typsnittseffekter. Att skriva *fet*, /kursiv/ och " -"_understruken_ gƶr att de orden kommer visas med fet, kursiv och " -"understruket typsnitt respektive." - -# settings/chattingwidget.cpp:192 rc.cpp:170, no-c-format -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "" -"AnvƤnd typsnitteffekter i meddelanden, dvs. *fet*, /kursiv/ och " -"_understruken_" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -789,160 +1118,311 @@ msgstr "" "den valda chattstilen." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "&Gruppera fƶlj-uppmeddelanden frĆ„n samma kontakt" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 -msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" msgstr "" -"TillĆ„ter dig att vƤlja vilket e-postprogram KMess ska ƶppna fƶr att lƤsa e-" -"postmeddelanden." - -# settings/emailwidget.cpp:108 rc.cpp:207, no-c-format -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "E-postklient" - -# settings/emailwidget.cpp:109 rc.cpp:210, no-c-format -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "AnvƤnd Hotmail" - -# settings/emailwidget.cpp:110 rc.cpp:213, no-c-format -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "AnvƤnd ett specifikt kommando:" - -# settings/settingsdialog.cpp:85 settings/emailwidget.cpp:111 rc.cpp:216, -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "E-postnotifikation" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 -msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 +#, fuzzy +msgid "Always" +msgstr "FrĆ„nvarande" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "Din kontaktlista har fƶr mĆ„nga grupper" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "Nƶrd" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" msgstr "" -"Om aktiverad, kommer ett popupmeddelande visas nƤr e-post tas emot i din " -"inkorg. Antalet olƤsta e-postmeddelanden visas ovanfƶr kontaktlistan. Det " -"hƤr alternativet Ƥr bara tillgƤngligt fƶr Hotmail-konton." - -# settings/emailwidget.cpp:112 rc.cpp:219, no-c-format -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 -msgid "Show email information" -msgstr "Visa e-postinformation" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." +msgstr "Det hƤr typsnittet och den hƤr fƤrgen anvƤnds i dina chattmeddelanden." + +# settings/chattingwidget.cpp:185 rc.cpp:157, no-c-format +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "Ditt meddelandetypsnitt:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." msgstr "" -"Om aktiverad, kommer ett popupmeddelande ocksĆ„ visas nƤr e-post tas emot i " -"andra mappar. Det hƤr alternativet Ƥr bara tillgƤngligt fƶr Hotmail-konton." +"TillĆ„ter att Ć„sidosƤtta typsnittet och fƤrgen fƶr dina kontakters " +"meddelanden med det valda typsnittet och den valda fƤrgen nedan." -# settings/emailwidget.cpp:113 rc.cpp:222, no-c-format +# settings/chattingwidget.cpp:188 rc.cpp:162, no-c-format #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" -msgstr "Visa meddelande nƤr ett e-postmeddelande mottas i \"andra mappar\"" +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "Tvinga kontakters meddelanden att anvƤnda det hƤr typsnittet:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 +msgid "" +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." +msgstr "" +"Aktiverar anvƤndandet av typsnittseffekter. Att skriva *fet*, /kursiv/ och " +"_understruken_ gƶr att de orden kommer visas med fet, kursiv och " +"understruket typsnitt respektive." + +# settings/chattingwidget.cpp:192 rc.cpp:170, no-c-format +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +#, fuzzy +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" +msgstr "" +"AnvƤnd typsnitteffekter i meddelanden, dvs. *fet*, /kursiv/ och " +"_understruken_" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "VƤntar pĆ„ kontaktlista..." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 msgid "&Emoticon Themes" msgstr "Visa &Uttryckssymbolteman" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 msgid "Available emoticon styles:" msgstr "TillgƤngliga uttryckssymbolstilar" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 msgid "&Custom Emoticons" msgstr "Egna uttry&ckssymboler" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 msgid "Custom emoticons for this account:" msgstr "Egna uttryckssymboler fƶr det hƤr kontot:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -msgid "Click" -msgstr "Klicka" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "" -"Klicka hƤr fƶr att lƤgga till en ny egen uttryckssymbol fƶr att skicka till " -"dina kontakter" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "LƤgg till ny..." #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "Klicka hƤr fƶr att dƶpa om den valda uttryckssymbolen" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 msgid "Re&name" msgstr "Dƶp om" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "VƤlj en uttryckssymbol och klicka Ƥr fƶr att ta bort den" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 msgid "Remo&ve" msgstr "Ta bort" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +#, fuzzy +msgid "Web Browser" +msgstr "Vissen ros" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +msgid "&Use the KDE default browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "sƤger:" +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +# settings/emailwidget.cpp:108 rc.cpp:207, no-c-format +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "E-postklient" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +msgid "&Use the KDE default email client" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +msgid "File Transfers" +msgstr "Filƶverfƶringar" + +# settings/chatloggingwidget.cpp:120 rc.cpp:133, no-c-format +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "Spara chattfiler i fƶljande katalog:" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +#, fuzzy +msgid "and" +msgstr "Ledsen" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "Filƶverfƶringar" #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -952,131 +1432,12 @@ msgstr "Jag Ƥr inte vid datorn" msgid "Your name" msgstr "Ditt namn" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "du@hotmail.com" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "Ansluten" - -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "FrĆ„nvarande" - -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "Strax tillbaka" - -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "Upptagen" - -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "Osynlig" - -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "Inaktiv" - -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "FrĆ„nkopplad" - -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "Talar i Telefon" - -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "PĆ„ lunch" - -#: chat/chatmaster.cpp:1061 -msgid "%1 is sending a wink: %2" -msgstr "%1 skickar en blinkning: %2" - -#: chat/chatmessagestyle.cpp:302 -msgid "%1 says:" -msgstr "%1 sƤger:" - -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 -msgid "Add this emoticon: %1" -msgstr "LƤgg till denna uttryckssymbol: %1" - -#: chat/chatview.cpp:529 -msgid "" -"Could not save chat log. Make sure you have permission to write in the " -"folder where logs are being saved." -msgstr "" -"Kunde inte spara chattlogg. Konstrollera att du har rƤttighet att skrivatill " -"katalogen dƤr loggar sparas." - -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 -msgid "" -"The file '%1' already exists.\n" -"do you want to overwrite it?" -msgstr "" -"Filen '%1' finns redan.\n" -"vill du skriva ƶver den?" - -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Overwrite File" -msgstr "Skriv ƶver Fil" - -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 -msgid "Over&write" -msgstr "Skri&v ƶver" - -#: chat/chatview.cpp:977 -msgid "Add this &Emoticon..." -msgstr "LƤgg till &Uttryckssymbol..." - -#: chat/chatview.cpp:984 -msgid "Send &Email" -msgstr "Skicka &E-post" - -#: chat/chatview.cpp:988 -msgid "Copy E&mail" -msgstr "Kopiera &E-post" - -#: chat/chatview.cpp:995 -msgid "Visit &Link" -msgstr "Besƶk &LƤnk" - -#: chat/chatview.cpp:999 -msgid "Copy &Address" -msgstr "Kopiera &Adress" - -#: chat/chatview.cpp:1013 -msgid "&Copy text" -msgstr "&Kopiera text" - -#: chat/chatview.cpp:1014 -msgid "Select &All" -msgstr "VƤlj &Alla" - -#: chat/chatview.cpp:1015 -msgid "Save chat to &File" -msgstr "Spara chatt till &Fil" - -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "Chatt" - -#: chat/chatwindow.cpp:239 +#: chat/chat.cpp:124 msgid "" "You can't start this invitation because there are multiple contacts in this " "chat." @@ -1084,308 +1445,518 @@ msgstr "" "Du kan inte starta den hƤr inbjudan eftersom det Ƥr flera kontakter i den " "hƤrchatten." -#: chat/chatwindow.cpp:276 -msgid "%1 has joined the chat." +#: chat/chat.cpp:158 +#, fuzzy +msgid "%1 has joined the chat." msgstr "%1 har gĆ„tt med i chatten." -#: chat/chatwindow.cpp:327 -msgid "The conversation went idle, %1 has left the chat." +#: chat/chat.cpp:211 +#, fuzzy +msgid "The conversation went idle, %1 has left the chat." msgstr "Konversationen blev inaktiv, %1 har lƤmnat chatten." -#: chat/chatwindow.cpp:331 -msgid "%1 has left the chat." +#: chat/chat.cpp:215 +#, fuzzy +msgid "%1 has left the chat." msgstr "%1 har lƤmnat chatten." -#: chat/chatwindow.cpp:593 -msgid "%1 - Chat" -msgstr "%1 - Chatt" - -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" +#: chat/chat.cpp:364 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 and %2" msgstr "%1 och %2 - Chatt" -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" +#: chat/chat.cpp:371 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 et al." msgstr "%1 och flera - Chatt" -#: chat/chatwindow.cpp:757 -msgid "Contacts" -msgstr "Kontakter" - -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 -msgid "Emoticons" -msgstr "Uttryckssymboler" - -#: chat/chatwindow.cpp:819 -msgid "My emoticons" -msgstr "Mina uttryckssymboler" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" +#: chat/chat.cpp:630 +#, fuzzy +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" msgstr " (Det hƤr meddelande skickades automatiskt)" -#: chat/chatwindow.cpp:1502 +#: chat/chat.cpp:934 +#, fuzzy +msgid "You received a wink from %1." +msgstr "Du har tagit emot en blinkning frĆ„n %1" + +#: chat/chat.cpp:971 msgid "" "The wink could not be displayed. Make sure you have 'cabextract' installed." msgstr "" "Blinkningen kunde inte visas. Kontrollera att du har 'cabextract' " "installerat." -#: chat/chatwindow.cpp:1511 +#: chat/chat.cpp:980 msgid "The wink could not be displayed. The data could not be read." msgstr "Blinkningen kunde inte visas. Kunde inte lƤsa data" -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" +#: chat/chat.cpp:1080 +#, fuzzy +msgid "You have received a wink from %1" msgstr "Du har tagit emot en blinkning frĆ„n %1" -#: chat/chatwindow.cpp:1755 +#: chat/chat.cpp:1100 #, fuzzy -msgid "Show Side&bar" -msgstr "Sidopanel" - -#: chat/chatwindow.cpp:1756 -#, fuzzy -msgid "Show the contact sidebar" -msgstr "Visa eller gƶm kontaktpanelen" - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -#, fuzzy -msgid "Hide Side&bar" -msgstr "Sidopanel" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -#, fuzzy -msgid "Hide the contact sidebar" -msgstr "Visa eller gƶm kontaktpanelen" - -#: chat/chatwindow.cpp:1787 -msgid "The message '%1' could not be sent." -msgstr "Meddelandet '%1' kunde inte skickas." - -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" +msgid "You received a nudge from %1!" msgstr "Du tog emot en knuff frĆ„n %1!" -#: chat/chatwindow.cpp:1876 +#: chat/chat.cpp:1119 +#, fuzzy +msgid "The message '%1' could not be sent." +msgstr "Meddelandet '%1' kunde inte skickas." + +#: chat/chat.cpp:1183 msgid "You've sent a nudge to %1!" msgstr "Du har skickat en knuff till %1!" -#: chat/chatwindow.cpp:1883 +#: chat/chat.cpp:1190 msgid "You've sent a nudge!" msgstr "Du har skickat en knuff!" -#: chat/chatwindow.cpp:1972 -msgid "%1 is typing." -msgstr "%1 skriver." +#: chat/chatmaster.cpp:1219 +msgid "%1 is sending a wink: %2" +msgstr "%1 skickar en blinkning: %2" -#: chat/chatwindow.cpp:1981 -msgid "%1 and %2 are typing." -msgstr "%1 och %2 skriver." +#: chat/chatmessagestyle.cpp:298 +msgid "%1 says:" +msgstr "%1 sƤger:" -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." -msgstr "%1,%2 och %3 andra skriver." +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 +msgid "Add this emoticon: %1" +msgstr "LƤgg till denna uttryckssymbol: %1" -#: chat/chatwindowinterface.cpp:175 -msgid "&Chat" -msgstr "&Chatta" - -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 msgid "&Invite" msgstr "Bjud &in" -#: chat/chatwindowinterface.cpp:179 +#: chat/chatview.cpp:695 +msgid "" +"Could not save chat log. Make sure you have permission to write in the " +"folder where logs are being saved." +msgstr "" +"Kunde inte spara chattlogg. Konstrollera att du har rƤttighet att skrivatill " +"katalogen dƤr loggar sparas." + +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 +msgid "" +"The file '%1' already exists.\n" +"do you want to overwrite it?" +msgstr "" +"Filen '%1' finns redan.\n" +"vill du skriva ƶver den?" + +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Overwrite File" +msgstr "Skriv ƶver Fil" + +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 +msgid "Over&write" +msgstr "Skri&v ƶver" + +#: chat/chatview.cpp:1275 +msgid "Add this &Emoticon..." +msgstr "LƤgg till &Uttryckssymbol..." + +#: chat/chatview.cpp:1282 +msgid "Send &Email" +msgstr "Skicka &E-post" + +#: chat/chatview.cpp:1286 +msgid "Copy E&mail" +msgstr "Kopiera &E-post" + +#: chat/chatview.cpp:1293 +msgid "Visit &Link" +msgstr "Besƶk &LƤnk" + +#: chat/chatview.cpp:1297 +msgid "Copy &Address" +msgstr "Kopiera &Adress" + +#: chat/chatview.cpp:1312 +msgid "&Copy text" +msgstr "&Kopiera text" + +#: chat/chatview.cpp:1313 +msgid "Select &All" +msgstr "VƤlj &Alla" + +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 +msgid "Save chat to &File" +msgstr "Spara chatt till &Fil" + +#: chat/chatwindow.cpp:489 +msgid "&Chat" +msgstr "&Chatta" + +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "Skicka en &Fil" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "Starta Sa&mmantrƤde" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 msgid "Send a &Nudge!" msgstr "Skicka en K&nuff" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "Spara chatt" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 #, fuzzy msgid "&Emoticons" msgstr "Uttryckssymboler" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +#, fuzzy +msgid "Close &All Tabs" +msgstr "StƤng flik" + +#: chat/chatwindow.cpp:504 #, fuzzy msgid "Meeting" msgstr "InstƤllningar" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "Starta eller Stoppa en &Konversation" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "Ƅndra &Typsnitt" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "Ƅndra T&ypsnittsfƤrg" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 #, fuzzy msgid "&Font" msgstr "A&nslut" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 #, fuzzy msgid "Font &Color" msgstr "Ƅndra T&ypsnittsfƤrg" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +msgid "Emoticons" +msgstr "Uttryckssymboler" + +#: chat/chatwindow.cpp:658 +msgid "My emoticons" +msgstr "Mina uttryckssymboler" + +#: chat/chatwindow.cpp:738 #, fuzzy msgid "&Settings" msgstr "InstƤllningar" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "Visa &Uttryckssymboler" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +#, fuzzy +msgid "Hide Side&bar" +msgstr "Sidopanel" + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "Sidopanel" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +#, fuzzy +msgid "Hide the contact sidebar" +msgstr "Visa eller gƶm kontaktpanelen" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +#, fuzzy +msgid "Close all tabs" +msgstr "StƤng flik" + +#: chat/chatwindow.cpp:856 +#, fuzzy +msgid "Close current tab" +msgstr "StƤng flik" + +#: chat/chatwindow.cpp:1467 +#, fuzzy +msgid "Show Side&bar" +msgstr "Sidopanel" + +#: chat/chatwindow.cpp:1468 +#, fuzzy +msgid "Show the contact sidebar" +msgstr "Visa eller gƶm kontaktpanelen" + +#: chat/chatwindow.cpp:1565 +msgid "%1 is typing." +msgstr "%1 skriver." + +#: chat/chatwindow.cpp:1575 +msgid "%1 and %2 are typing." +msgstr "%1 och %2 skriver." + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "%1,%2 och %3 andra skriver." + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "Chatt" + +#: chat/chatwindow.cpp:1615 +#, fuzzy +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "%1 - Chatt" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "&Skicka e-post" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 msgid "&View Profile" msgstr "&Visa Profil" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "&LƤgg till kontakt" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 msgid "A&llow Contact" msgstr "Ti&llƄt Kontakt" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 msgid "&Delete Contact" msgstr "Ta bo&rt Kontakt" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "&Blockera kontakt" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "&Avblockera Kontakt" # settings/accountswidget.cpp:98 rc.cpp:88, no-c-format -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 msgid "&Friendly Name" msgstr "&Visningsnamn:" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "&Personligt Meddelande" # initialviewinterface.cpp:235 rc.cpp:20, no-c-format -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 msgid "&Email Address" msgstr "&E-postadress" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "&Kopiera.." -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 msgid "Blocked" msgstr "Blockerad" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 #, fuzzy msgid "The contact is %1" msgstr "Kontakten Ƥr inte ansluten" -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +#, fuzzy +msgid "Add to Chat" +msgstr "LƤgg till en kontakt" + +#: chat/emoticonsidebar.cpp:213 +#, fuzzy +msgid "Insert new" +msgstr "Infoga en uttryckssymbol" + +#: chat/emoticonsidebar.cpp:214 +msgid "Edit" +msgstr "" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +#, fuzzy +msgid "Remove" +msgstr "Borttagen" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 #, fuzzy msgid "Web Messenger" msgstr "Webbdesign" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +#, fuzzy +msgid "Windows Live Messenger %1" +msgstr "Webbdesign" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "Ansluten" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "FrƄnkopplad" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "TillƄten" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "Borttagen" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 +#, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr "%1 och %2 - Chatt" + +#: contactlistviewdelegate.cpp:150 msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" -msgstr "Det hƤr kontot har inte en Hotmail-inkorg!" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "FrƄnvarande" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "Strax tillbaka" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "Upptagen" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "Osynlig" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" +msgstr "Inaktiv" + +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "Talar i Telefon" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "PƄ lunch" + +#: dialogs/addcontactdialog.cpp:48 #, fuzzy msgid "Add a Contact" msgstr "LƤgg till en kontakt" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 #, fuzzy msgid "No group" msgstr "Ta bort grupp" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 msgid "Add New Emoticon" msgstr "LƤgg till ny &Uttryckssymboler" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "Uttryckssymboler" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "Uttryckssymbolen \"%1\" finns redan, vill du ersƤtta den?" @@ -1393,66 +1964,72 @@ msgstr "Uttryckssymbolen \"%1\" finns redan, vill du ersƤtta den?" msgid "Specify an Away message" msgstr "Specifiera ett FrƄnvarandemeddelande" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "AnvƤnd ett alternativt namn fƶr den hƤr personen" - -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" +# dialogs/contactaddeduserdialoginterface.cpp:72 rc.cpp:60, no-c-format +#: dialogs/contactaddeduserdialog.cpp:85 +#, fuzzy +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " msgstr "" -"Visa poppupp-fƶnster nƤr den hƤr personen blir ansluten eller frƄnkopplad" +"%1\n" +"har lagt till dig till hans eller hennes kontaktlista. Vill du:" -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "Bild:" +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "Ansluten" -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "Ljud:" +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +msgid "Not seen yet" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:234 -msgid "Contact Properties for %1" -msgstr "Kontaktegenskaper fƶr %1" +# settings/chattingwidget.cpp:191 rc.cpp:167, no-c-format +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +#, fuzzy +msgid "No messages yet" +msgstr "Visa tid i c&hattmeddelanden" -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " -msgstr "E-postadress " +#: dialogs/contactpropertiesdialog.cpp:381 +msgid "Last seen: %1" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "Aktuellt namn: " +#: dialogs/contactpropertiesdialog.cpp:382 +msgid "Last message: %1" +msgstr "" -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" -msgstr "NƤtverksfƶnster" +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "E-post" -#: dialogs/networkwindow.cpp:57 +# settings/emailwidget.cpp:108 rc.cpp:207, no-c-format +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "E-postklient" + +#: dialogs/networkwindow.cpp:79 #, fuzzy msgid "S&ave tab" msgstr "Spara flik" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 #, fuzzy msgid "C&lear tab" msgstr "Rensa flik" -#: dialogs/networkwindow.cpp:59 -#, fuzzy -msgid "Cl&ose tab" -msgstr "StƤng flik" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 #, fuzzy msgid "" "No connections are present.\n" "Cannot open the Network Window." msgstr "Inga anslutningar Ƥr nƤrvarande. Kan inte ƶppna NƤtverksfƶnstret." -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 #, fuzzy msgid "" "Could not save the Network Window log. Make sure you have permission to " @@ -1461,59 +2038,86 @@ msgstr "" "Kunde inte spara NƤtverksfƶnstrets logg. Kontrollera att du har rƤttighet " "attskriva till katalogen dƤr loggen sparas." -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "Kan inte stƤnga huvudanslutningsfliken" -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +#, fuzzy +msgid "Cannot send commands to this kind of connection!" +msgstr "Kan inte stƤnga huvudanslutningsfliken" + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 #, fuzzy msgid "Completed" msgstr "Dator" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "%1 MB" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "%1 kB" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "%1 byte" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +msgid "%1 of %2 received." msgstr "" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +msgid "%1 of %2 sent." msgstr "" -#: dialogs/transferwindow.cpp:55 -msgid "File Transfers" -msgstr "Filƶverfƶringar" +#: dialogs/transferentry.cpp:373 +msgid "infinite" +msgstr "" -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 #, fuzzy msgid "Cl&ean Up" msgstr "Rensa &upp" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " "the theme folder '%1'." @@ -1521,345 +2125,361 @@ msgstr "" "Kunde inte spara uttryckssymboltema. Kontrollera att du har rƤttighet att " "skrivatill temakatalogen '%1'." -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 msgid "Smile" msgstr "Leende" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "Vinka" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "Lipa" -#: emoticontheme.cpp:797 +#: emoticontheme.cpp:812 msgid "Big smile" msgstr "Stort leende" -#: emoticontheme.cpp:798 +#: emoticontheme.cpp:813 msgid "Sad" msgstr "Ledsen" -#: emoticontheme.cpp:799 +#: emoticontheme.cpp:814 msgid "Crying" msgstr "GrĆ„ter" -#: emoticontheme.cpp:800 +#: emoticontheme.cpp:815 msgid "Angry" msgstr "Arg" -#: emoticontheme.cpp:801 +#: emoticontheme.cpp:816 msgid "Confused" msgstr "Fƶrvirrad" -#: emoticontheme.cpp:802 +#: emoticontheme.cpp:817 msgid "Embarrassed" msgstr "Generad" -#: emoticontheme.cpp:803 +#: emoticontheme.cpp:818 msgid "Disappointed" msgstr "Missnƶjd" -#: emoticontheme.cpp:804 +#: emoticontheme.cpp:819 msgid "Hot" msgstr "Het" -#: emoticontheme.cpp:805 +#: emoticontheme.cpp:820 msgid "Baring teeth" msgstr "Visa tƤnderna" -#: emoticontheme.cpp:806 +#: emoticontheme.cpp:821 msgid "Nerd" msgstr "Nƶrd" -#: emoticontheme.cpp:807 +#: emoticontheme.cpp:822 msgid "Sick" msgstr "Sjuk" -#: emoticontheme.cpp:808 +#: emoticontheme.cpp:823 msgid "Surprised" msgstr "Ɩverraskad" -#: emoticontheme.cpp:809 +#: emoticontheme.cpp:824 msgid "Party" msgstr "Party" -#: emoticontheme.cpp:810 +#: emoticontheme.cpp:825 msgid "Sleepy" msgstr "Trƶtt" -#: emoticontheme.cpp:811 +#: emoticontheme.cpp:826 msgid "Thinking" msgstr "TƤnker" -#: emoticontheme.cpp:812 +#: emoticontheme.cpp:827 msgid "Don't tell anyone" msgstr "BerƤtta inte fƶr nĆ„gon" -#: emoticontheme.cpp:813 +#: emoticontheme.cpp:828 msgid "Secret telling" msgstr "Skvaller" -#: emoticontheme.cpp:814 +#: emoticontheme.cpp:829 msgid "Eye-rolling" msgstr "Rullande ƶgon" -#: emoticontheme.cpp:815 +#: emoticontheme.cpp:830 msgid "Sarcastic" msgstr "Sarkastisk" -#: emoticontheme.cpp:816 +#: emoticontheme.cpp:831 msgid "I don't know" msgstr "Jag vet inte" -#: emoticontheme.cpp:817 +#: emoticontheme.cpp:832 msgid "Be right back" msgstr "Strax tillbaka" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "Ƅngel" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "VƤnsterkram" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "Pojke" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "Rƶtt hjƤrta" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "Rƶd ros" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "Tummen upp" -#: emoticontheme.cpp:824 +#: emoticontheme.cpp:839 msgid "Dog face" msgstr "Hundansikte" -#: emoticontheme.cpp:825 +#: emoticontheme.cpp:840 msgid "Sun" msgstr "Sol" -#: emoticontheme.cpp:826 +#: emoticontheme.cpp:841 msgid "Devil" msgstr "DjƤvul" -#: emoticontheme.cpp:827 +#: emoticontheme.cpp:842 msgid "Right hug" msgstr "Hƶgerkram" -#: emoticontheme.cpp:828 +#: emoticontheme.cpp:843 msgid "Girl" msgstr "Flicka" -#: emoticontheme.cpp:829 +#: emoticontheme.cpp:844 msgid "Broken heart" msgstr "Brustet hjƤrta" -#: emoticontheme.cpp:830 +#: emoticontheme.cpp:845 msgid "Wilted rose" msgstr "Vissen ros" -#: emoticontheme.cpp:831 +#: emoticontheme.cpp:846 msgid "Thumbs down" msgstr "Tummen ner" -#: emoticontheme.cpp:832 +#: emoticontheme.cpp:847 msgid "Cat face" msgstr "Kattansikte" -#: emoticontheme.cpp:833 +#: emoticontheme.cpp:848 msgid "Sleeping half-moon" msgstr "Sovande halvmĆ„ne" -#: emoticontheme.cpp:834 +#: emoticontheme.cpp:849 msgid "Red lips" msgstr "Rƶda lƤppar" -#: emoticontheme.cpp:835 +#: emoticontheme.cpp:850 msgid "Clapping" msgstr "Klappande" -#: emoticontheme.cpp:836 +#: emoticontheme.cpp:851 msgid "Crossed fingers" msgstr "Korsade fingrar" -#: emoticontheme.cpp:837 +#: emoticontheme.cpp:852 msgid "Auto" msgstr "" -#: emoticontheme.cpp:838 +#: emoticontheme.cpp:853 msgid "Airplane" msgstr "Flygplan" -#: emoticontheme.cpp:839 +#: emoticontheme.cpp:854 msgid "Turtle" msgstr "Skƶldpadda" -#: emoticontheme.cpp:840 +#: emoticontheme.cpp:855 msgid "Snail" msgstr "Snigel" -#: emoticontheme.cpp:841 +#: emoticontheme.cpp:856 msgid "Black sheep" msgstr "Svart fĆ„r" -#: emoticontheme.cpp:842 +#: emoticontheme.cpp:857 msgid "Goat" msgstr "Get" -#: emoticontheme.cpp:843 +#: emoticontheme.cpp:858 msgid "Vampire bat" msgstr "Vampyrfladdermus" -#: emoticontheme.cpp:844 +#: emoticontheme.cpp:859 msgid "Pizza" msgstr "" -#: emoticontheme.cpp:845 +#: emoticontheme.cpp:860 msgid "Beer mug" msgstr "Ɩlglas" -#: emoticontheme.cpp:846 +#: emoticontheme.cpp:861 msgid "Martini glass" msgstr "Martiniglas" -#: emoticontheme.cpp:847 +#: emoticontheme.cpp:862 msgid "Coffee cup" msgstr "Kaffekopp" -#: emoticontheme.cpp:848 +#: emoticontheme.cpp:863 msgid "Birthday cake" msgstr "FƶdelsedagstĆ„rta" -#: emoticontheme.cpp:849 +#: emoticontheme.cpp:864 msgid "Plate" msgstr "Tallrik" -#: emoticontheme.cpp:850 +#: emoticontheme.cpp:865 msgid "Bowl" msgstr "SkĆ„l" -#: emoticontheme.cpp:851 +#: emoticontheme.cpp:866 msgid "Star" msgstr "StjƤrna" -#: emoticontheme.cpp:852 +#: emoticontheme.cpp:867 msgid "Rainbow" msgstr "RegnbĆ„ge" -#: emoticontheme.cpp:853 +#: emoticontheme.cpp:868 msgid "Stormy cloud" msgstr "Stormmoln" -#: emoticontheme.cpp:854 +#: emoticontheme.cpp:869 msgid "Lightning" msgstr "Blixt" -#: emoticontheme.cpp:855 +#: emoticontheme.cpp:870 msgid "Umbrella" msgstr "Paraply" -#: emoticontheme.cpp:856 +#: emoticontheme.cpp:871 msgid "Island with a palm tree" msgstr "Ɩ med en palm" -#: emoticontheme.cpp:857 +#: emoticontheme.cpp:872 msgid "Telephone receiver" msgstr "Telefon mottagare" -#: emoticontheme.cpp:858 +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "Mobiltelefon" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "E-post" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 msgid "Clock" msgstr "Klocka" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 msgid "Camera" msgstr "Kamera" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "Filmremsa" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "Anteckning" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "Handbojor" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 msgid "Money" msgstr "Pengar" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "Glƶdlampa" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "Cigarett" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "Fotboll" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "Paket med rosett" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "X-Box" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "Dator" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 msgid "KMess Icon" msgstr "KMess-ikon" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "Servern Ƥr inte tillgƤngligt" + +# initialviewinterface.cpp:208 rc.cpp:7, no-c-format +#: initialview.cpp:377 +msgid "Connect" +msgstr "Anslut" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "&Koppla frĆ„n" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "" -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "" -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "Ny &Grupp" + +#: kmess.cpp:226 msgid "Add a group" msgstr "LƤgg till en grupp" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "Skriv in det nya namnet fƶr gruppen:" -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "Kontaktadressen du skrivit in Ƥr inte giltig: '%1'" - -#: kmess.cpp:638 +#: kmess.cpp:569 msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" @@ -1867,53 +2487,74 @@ msgstr "" "Ƅr du sƤker pĆ„ att du vill ta bort kontakten %1 frĆ„n din " "kontaktlista?" -#: kmess.cpp:640 +#: kmess.cpp:571 msgid "Remove contact" msgstr "Ta bort kontakt" -#: kmess.cpp:641 kmess.cpp:684 -#, fuzzy -msgid "Remove" -msgstr "Borttagen" - -#: kmess.cpp:642 +#: kmess.cpp:573 msgid "Remove and block" msgstr "Ta bort och blockera" -#: kmess.cpp:681 +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "" "Ƅr du sƤker pĆ„ att du vill ta bort gruppen%1 frĆ„n din " "kontaktlista?" -#: kmess.cpp:683 -msgid "Remove group" -msgstr "Ta bort grupp" +#: kmess.cpp:631 +#, fuzzy +msgctxt "dialog button" +msgid "Remove" +msgstr "Borttagen" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "Det hƤr Ƥr en speciell grupp som inte kan Ƥndras" -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 msgid "Rename group" msgstr "Byt namn pĆ„ grupp" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "Ansluten" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "Autentisering misslyckades" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "FrƄnkopplad" -#: kmess.cpp:1441 +#: kmess.cpp:1408 +#, fuzzy msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" "

KMess kommer inte kunna spela upp ljud och notifikationer.

" "KMess-filen 'eventsrc' kunde inte hittas i nĆ„gon av fƶljande kataloger: %1" # settings/settingsdialog.cpp:85 settings/emailwidget.cpp:111 rc.cpp:216, -#: kmess.cpp:1445 +#: kmess.cpp:1412 msgid "Error with notifications" msgstr "Fel med notifikationer" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "KMess-ikon" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "&ƅtgƤrder" @@ -1946,213 +2593,244 @@ msgstr "Sƶk &efter Kontakt" msgid "Search by &Interest" msgstr "Sƶk genom &Intresse" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "Sƶk &efter Kontakt" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "Nytt K&onto" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "Kontoin&stƤllningar" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "A&nslut" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "&Koppla frĆ„n" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "Visa Min &Profil" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "&Min Status" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "FrĆ„nvarande med autosvar" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "Vis&a TillĆ„tna Kontakter" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 msgid "Show &Offline Contacts" msgstr "Visa FrĆ„nk&opplade Kontakter" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "Visa Bo&rttagna Kontakter" -#: kmessinterface.cpp:303 +#: kmessinterface.cpp:318 #, fuzzy -msgid "Show &Display Pictures" +msgid "Show &Empty Groups" +msgstr "Visa &Uttryckssymboler" + +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" msgstr "Visningsbild" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "Leende" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "&Sortera Kontakter efter" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "Grupp" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "Ansluten/FrĆ„nkopplad" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "Visa Ɩverfƶringsfƶns&ter" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "Visa &NƤtverksfƶnster" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "Lyssnar nu till %1" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +msgid "[%1] %2 goes online" +msgstr "" + +#: kmessview.cpp:363 +msgid "[%1] %2 goes offline" +msgstr "" + +#: kmessview.cpp:559 msgid "Cha&t" msgstr "Cha&tta" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "Egenska&per" -#: kmessview.cpp:492 +#: kmessview.cpp:569 msgid "&Remove from group" msgstr "Ta bo&rt frĆ„n grupp" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +#, fuzzy +msgid "&Listening Music" +msgstr "Lyssnar pĆ„ %1" + +#: kmessview.cpp:601 msgid "&Copy to Group" msgstr "&Kopiera till Grupp" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "&Flytta till Grupp" -#: kmessview.cpp:549 +#: kmessview.cpp:646 msgid "Move Group &Down" msgstr "Flytta Grupp &Ner" -#: kmessview.cpp:550 +#: kmessview.cpp:647 msgid "Move Group &Up" msgstr "Flytta Grupp &Upp" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "Ta bort Grupp" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "Byt &namn pĆ„ Grupp" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 #, fuzzy msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "E-post" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "" -#: kmessview.cpp:918 +#: kmessview.cpp:1075 +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "" + +#: kmessview.cpp:1076 +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "" + +#: kmessview.cpp:1085 msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "" -#: kmessview.cpp:921 +#: kmessview.cpp:1090 #, fuzzy -msgctxt "Contacts count in group tooltip" +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "Kontakter" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +#, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "Kontakten Ƥr inte ansluten" + +#: kmessview.cpp:1504 #, fuzzy msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "Skriv in ditt personliga meddelande hƤr" -#: kmessview.cpp:1543 -msgid "You have 1 new e-mail in your inbox." -msgstr "Du har 1 nytt e-postmeddelande i din inkorg." +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" -#: kmessview.cpp:1547 -msgid "You have %1 new emails in your inbox." -msgstr "Du har %1 nya e-postmeddelanden i din inkorg." - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 #, fuzzy msgid "Project support" msgstr "P4-KontextfƤlt stƶd" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 #, fuzzy msgid "Current developer" msgstr "GnomeMeeting utvecklare" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 msgid "" "German translation, testing, documentation, web master, project management, " "etc..." @@ -2160,571 +2838,469 @@ msgstr "" "Tysk ƶversƤttning, testning, dokumentation, webbmaster, projektledning, " "etc..." -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "Webbdesign" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "Huvud- och gul/blĆ„/violet-uttryckssymbolset och Italiensk ƶversƤttning" -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "Tecknade uttryckssymboler" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "Standardljudtema" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "Arabisk ƶversƤttning, internationalisering av filsparningsfix." -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 msgid "More Arabic translation" msgstr "Mer Arabiska ƶversƤttningar" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "Brasiliansk Portugisisk ƶversƤttning" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 msgid "Catalan translation" msgstr "Katalansk ƶversƤttning" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "" "Fƶrenklad Kinesisk ƶversƤttning, filƶverfƶringsbuggfix, proxyanslutnings kod" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 msgid "More Simplified Chinese translation" msgstr "Mer Fƶrenklad Kinesisk ƶversƤttning" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 msgid "Traditional Chinese translation" msgstr "Traditionell Kinesisk ƶversƤttning" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 msgid "Danish translation" msgstr "Dansk ƶversƤttning" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 msgid "More Danish translation" msgstr "Mer Dansk ƶversƤttning" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "HollƤndsk ƶversƤttning" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 msgid "More Dutch translation" msgstr "Mer HollƤndsk ƶversƤttning" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 msgid "Estonian translation" msgstr "EstlƤndsk ƶversƤttning" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 msgid "Finnish translation" msgstr "Finsk ƶversƤttning" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 msgid "More Finnish translation" msgstr "Mer Finsk ƶversƤttning" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "Fransk ƶversƤttning" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 msgid "More French translation, MSN6 emoticon definitions" msgstr "Mer Fransk ƶversƤttning, MSN6 uttryckssymbolsdefinitioner" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 msgid "More French translation" msgstr "Mer Fransk ƶversƤttning" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 msgid "Hungarian translation" msgstr "Ungersk ƶversƤttning" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 msgid "More Italian translation" msgstr "Mer Italiensk ƶversƤttning" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "Koreansk ƶversƤttning" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 msgid "Norsk BokmĆ„l translation" msgstr "Norsk Bokmal ƶversƤttning" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 msgid "Slovenian translation" msgstr "Slovensk ƶversƤttning" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "Spansk ƶversƤttning" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 msgid "More Spanish translation" msgstr "Mer Spansk ƶversƤttning" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 msgid "Swedish translation" msgstr "Svensk ƶversƤttning" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 msgid "Thai translation" msgstr "ThailƤndsk ƶversƤttning" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "Turkisk ƶversƤttning" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "Mer Turkisk ƶversƤttning" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -#, fuzzy -msgid "Guido Solinas" -msgstr "Anslut" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "Filƶverfƶringar" + +#: main.cpp:134 msgid "P4-Context field support" msgstr "P4-KontextfƤlt stƶd" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "Xinerama fixar" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "Ursprunglig filmottagningskod" -#: main.cpp:120 -msgid "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" msgstr "" -#: main.cpp:120 +#: main.cpp:138 +#, fuzzy +msgid "KWallet support" +msgstr "P4-KontextfƤlt stƶd" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "Olika internationaliserings fixar." + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "Olika internationaliserings fixar." -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "GnomeMeeting utvecklare" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "Kille med en pĆ„se ƶver sitt huvud" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "Inspiration och blandad kod" -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 +#: main.cpp:150 msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "Ƅldre popup-ballongkod, ursprunglig p2p-kod, msn-utmaningshanterare" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "Inaktivitetsklockskod" -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 +#: main.cpp:152 msgid "Close-to-tray icon screenshot code" msgstr "" -#: main.cpp:131 +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 msgid "Your name here?" msgstr "Ditt namn hƤr?" -#: main.cpp:131 +#: main.cpp:156 #, fuzzy msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" "Du Ƥr vƤlkommen att skicka dina buggfixar och patchar till KMess " "hjƤlpforum!\n" "Om du kƤnner att ditt namn saknas hƤr, vƤnligen kontakta oss ocksĆ„!" -#: main.cpp:134 +#: main.cpp:159 #, fuzzy msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Ditt namn" # settings/accountswidget.cpp:99 rc.cpp:91, no-c-format -#: main.cpp:135 +#: main.cpp:160 #, fuzzy msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "Din e-postadress:" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "Logga in automatiskt med angiven e-postadress" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 msgid "The contact cancelled the session." msgstr "Kontakten avbrƶt sessionen." -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 msgid "The contact rejected the invitation." msgstr "Kontakten har nekat inbjudan." -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 msgid "You have cancelled the session." msgstr "Du har avbrutit konversationen." -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "Du har nekat inbjudan." -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +#, fuzzy +msgid "Do you want to accept or cancel?" msgstr "Vill du acceptera eller avbryta?" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +#, fuzzy +msgid "Click to cancel." msgstr "Klicka fƶr att avbryta." -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 msgid "Do you want to accept the file: %1 (%2)" msgstr "Vill du acceptera filen: %1 (%2)" -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 msgid "The transfer of %1 failed. Couldn't open file." msgstr "Ɩverfƶringen av %1 misslyckades. Kunde inte ƶppna filen." -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "Ɩverfƶringen accepterad." + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 msgid "Connecting to %1, port %2" msgstr "Ansluter till %1, port %2" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 msgid "The transfer was cancelled" msgstr "Ɩverfƶringen avbrƶts" -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 msgid "Connection established" msgstr "Anslutning upprƤttad" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 msgid "Successfully transferred file: %1" msgstr "Lyckades ƶverfƶra filen: %1" -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 msgid "The transfer of %1 failed. The file does not exist." msgstr "Ɩverfƶringen av %1 misslyckades. Filen finns inte." -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 msgid "The transfer of %1 failed. The file could not be read." msgstr "Ɩverfƶringen av %1 misslyckades. Kunde inte lƤsa filen." -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 msgid "Sending file %1" msgstr "Skickar fil %1" -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "Ɩverfƶringen accepterad." - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "Filƶverfƶringsinbjudan avbrƶts. Felaktig data mottogs." -#: network/applications/filetransferp2p.cpp:345 -msgid "The transfer of %1 failed. Couldn't open file" -msgstr "Ɩverfƶringen av %1 misslyckades. Kunde inte ƶppna fil" +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." +msgstr "" -#: network/applications/filetransferp2p.cpp:524 -msgid "The contact cancelled the transfer." +#: network/applications/filetransferp2p.cpp:348 +#, fuzzy +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "" +"Filen '%1' finns redan.\n" +"vill du skriva ƶver den?" + +#: network/applications/filetransferp2p.cpp:378 +#, fuzzy +msgid "The transfer of file "%1" failed. Couldn't save the file." +msgstr "Ɩverfƶringen av %1 misslyckades. Kunde inte ƶppna filen." + +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 +#, fuzzy +msgid "The contact has cancelled the transfer of file "%1"." msgstr "Kontakten avbrƶt ƶverfƶringen." -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "Du har avbrutit konversationen." + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "" -#: network/applications/filetransferp2p.cpp:768 -msgid "The transfer of %1 failed. The file does not exist." +#: network/applications/filetransferp2p.cpp:676 +#, fuzzy +msgid "Successfully sent file "%1"." +msgstr "Lyckades ƶverfƶra filen: %1" + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "Lyckades ƶverfƶra filen: %1" + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "Ɩverfƶringen av %1 misslyckades. Filen finns inte." -#: network/applications/filetransferp2p.cpp:773 -msgid "The transfer of %1 failed. The file could not be read." +#: network/applications/filetransferp2p.cpp:818 +#, fuzzy +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "Ɩverfƶringen av %1 misslyckades. Filen kunde inte lƤsas" -#: network/applications/filetransferp2p.cpp:809 -msgid "Sending file %1 (%2)" +#: network/applications/filetransferp2p.cpp:855 +#, fuzzy +msgid "Sending file "%1" (%2)." msgstr "Skickar fil %1 (%2)" -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "Kontakten avbrƶt ƶverfƶringen." + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "Du Ƥr inbjuden till att starta ett sammantrƤde (med GnomeMeeting)." -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 msgid "Starting GnomeMeeting. Connecting to %1." msgstr "Startar GnomeMeeting. Ansluter till %1." -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "Bjuder in kontakten till ett sammantrƤde." -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "Inbjudan nekades. Stƶd saknas hos den andra klienten." -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 msgid "The invitation was aborted. An internal error occured." msgstr "Inbjudan avbrƶts. Ett internt fel intrƤffade." -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "" "Inbjudan avbrƶts. TidsgrƤnsen ƶverskriden i vƤntan pĆ„ att anvƤndaren skulle " "acceptera." -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "Inbjudan avbrƶts. TidsgrƤnsen ƶverskriden i vƤntan pĆ„ data." -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "Inbjudan avbrƶts. VƤxeln stƤngde anslutningen till chatten." -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 msgid "The invitation was aborted." msgstr "Inbjudan avbrƶts." -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "Du Ƥr inbjuden till att dela den hƤr personens skrivbord." -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 msgid "Starting KRDC. Connecting to %1." msgstr "Startar KRDC. Ansluter till %1." -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." -msgstr "Kontakten initierade en MSN6 funktion som KMess inte kan hantera Ƥnnu." +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +msgid "The contact rejected the invitation. An internal error occured." +msgstr "Kontakten avbrƶt inbjudan. Ett internt fel intrƤffade." -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +msgid "The transfer failed." +msgstr "Ɩverfƶringen misslyckades." + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." @@ -2732,71 +3308,63 @@ msgstr "" "Inbjudan avbrƶts. Kontakten skickade felaktig data, eller sĆ„ stƶds det inte " "av KMess." -#: network/applications/p2papplication.cpp:1503 -msgid "The transfer failed. Data preparation failed." -msgstr "Ɩverfƶringen misslyckades. Fƶrberedning av data misslyckades." - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -msgid "The contact rejected the invitation. An internal error occured." -msgstr "Kontakten avbrƶt inbjudan. Ett internt fel intrƤffade." - -#: network/applications/p2papplication.cpp:1626 -msgid "The transfer failed." -msgstr "Ɩverfƶringen misslyckades." - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "Ɩverfƶringen misslyckades. Kontakten skickade felaktig data, eller sĆ„ stƶds " "det inte av KMess." -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "" +"Ɩverfƶringen misslyckades. TidsgrƤnsen ƶverskriden i vƤntan pĆ„ att " +"anvƤndaren skulle acceptera." + +#: network/applications/p2papplicationbase.cpp:1015 +msgid "The transfer failed. An internal error occured." +msgstr "Ɩverfƶringen misslyckades. Ett internet fel intrƤffade." + +#: network/applications/p2papplicationbase.cpp:1176 +msgid "The transfer failed. Couldn't open data source." +msgstr "Ɩverfƶringen misslyckades. Kunde inte ƶppna datakƤllan." + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "Kontakten initierade en MSN6 funktion som KMess inte kan hantera Ƥnnu." + +#: network/applications/p2papplication.cpp:1071 +msgid "The transfer failed. Data preparation failed." +msgstr "Ɩverfƶringen misslyckades. Fƶrberedning av data misslyckades." + +#: network/applications/p2papplication.cpp:1178 msgid "The invitation was cancelled. Message was not directed to us." msgstr "Inbjudan avbrƶts. Meddelande var inte avsett fƶr oss." -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "Ɩverfƶringen misslyckades. Kontakten skickade felaktig data, eller sĆ„ stƶds " "det inte av KMess." -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "VƤntar pĆ„ anslutning vid %1, port %2" -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "ƅtergĆ„r till indirekt filƶverfƶring (det kan gĆ„ sakta)." -#: network/applications/p2papplication.cpp:3297 -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "" -"Ɩverfƶringen misslyckades. TidsgrƤnsen ƶverskriden i vƤntan pĆ„ att " -"anvƤndaren skulle acceptera." - -#: network/applications/p2papplication.cpp:3316 -msgid "The transfer failed. An internal error occured." -msgstr "Ɩverfƶringen misslyckades. Ett internet fel intrƤffade." - -#: network/applications/p2papplication.cpp:3693 -msgid "The transfer failed. Couldn't open data source." -msgstr "Ɩverfƶringen misslyckades. Kunde inte ƶppna datakƤllan." - -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:3113 #, fuzzy msgid "Waiting for connection" msgstr "VƤntar pĆ„ kontaktlista..." -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " "accept." @@ -2804,7 +3372,7 @@ msgstr "" "Inbjudan avbrƶts. En tidsgrƤns ƶverskreds i vƤntan pĆ„ att anvƤndaren skulle " "acceptera." -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." @@ -2812,16 +3380,16 @@ msgstr "" "Inbjudan avbrƶts. En tidsgrƤns ƶverskreds i vƤntan pĆ„ att en anslutning " "skulle lyckas eller misslyckas." -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "Inbjudan avbrƶts. TidsgrƤnsen ƶverskriden i vƤntan pĆ„ data." -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 msgid "You are invited to start a voice conversation." msgstr "Du Ƥr inbjuden till att starta en rƶstkonversation." -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 msgid "" "You are invited to start a voice conversation but support for this was not " "installed" @@ -2829,27 +3397,27 @@ msgstr "" "Du Ƥr inbjuden till en rƶstkonversation men stƶd fƶr det har inte " "installerats" -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 msgid "You have cancelled the voice conversation." msgstr "Du har avbrutit rƶstkonversationen." -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "Inbjudan avbrƶts. Ljudenheten kunde inte ƶppnas." -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 msgid "Start voice conversation. Connecting to %1." msgstr "Starta rƶstkonversation. Ansluter till %1." -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 msgid "Start voice conversation. Listening on %1." msgstr "Starta rƶstkonversation. Lyssnar pĆ„ %1" -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 msgid "Inviting the contact to a voice conversation." msgstr "Bjuder in kontakten till en rƶstkonversation." -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 msgid "The contact is inviting you for '%1', but this is not implemented yet." msgstr "Kontakten bjuder in dig till '%1', men det Ƥr inte implementerat Ƥnnu." @@ -2892,646 +3460,788 @@ msgstr "Kunde inte skapa en ansluting: %1" msgid "Receiving file %1" msgstr "Tar emot %1" -#: network/msnconnection.cpp:477 -msgid "1 ping lost" -msgstr "1 ping fƶrlorad" +#: network/msnconnection.cpp:589 +#, fuzzy +msgid "KMess could not access the remote webservice.
Details: %1" +msgstr "" +"KMess kunde inte nƄ webbtjƤnsten.\n" +"Detaljer: %1" -#: network/msnconnection.cpp:481 -msgid "%1 pings lost" -msgstr "%1 ping fƶrlorade" - -#: network/msnconnection.cpp:496 -msgid "The connection to the server was lost." -msgstr "Anslutningen till servern fƶrlorades." - -#: network/msnconnection.cpp:704 +#: network/msnnotificationconnection.cpp:1317 #, fuzzy msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." -msgstr "" -"KMess kunde inte ansluta till MSN Messenger tjƤnsten.\n" -"VƤnligen kontrollera att du Ƥr ansluten till Internet.\n" -"Systemfel: %1 (kod %2)." - -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "Servern har stƤngt anslutningen" - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" -"KMess kunde inte ansluta till MSN Messenger servrarna. MSN Messenger " -"servrarna kan vara temporƤrt otillgƤngliga eller sƄ Ƥr det ett problem med " -"din Internetanslutning." - -#: network/msnnotificationconnection.cpp:724 -msgid "Show MSN Messenger Service status?" -msgstr "Vista MSN Messenger-tjƤnststatus?" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "Serverfel" - -#: network/msnnotificationconnection.cpp:1344 -#, fuzzy -msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" msgstr "" "Du har blivit frĆ„nkopplad fƶr att du \n" "anslƶt frĆ„n en annan MSN Messenger-klient \n" "eller frĆ„n en annan plats" -#: network/msnnotificationconnection.cpp:1558 +#: network/msnnotificationconnection.cpp:1532 msgid "Got synchronization" msgstr "Fick synkronisering" -#: network/msnnotificationconnection.cpp:1699 -msgid "Authenticating" +#: network/msnnotificationconnection.cpp:1670 +#, fuzzy +msgid "Authenticating..." msgstr "Autentiserar" -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "Mottog anvƤndarbekrƤftelse" - -#: network/msnnotificationconnection.cpp:1752 +#: network/msnnotificationconnection.cpp:1719 msgid "Waiting for contact list..." msgstr "VƤntar pĆ„ kontaktlista..." -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "Ɩverfƶr till notifikationsservern" +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." +msgstr "" -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" +#: network/msnnotificationconnection.cpp:1894 +#, fuzzy +msgid "Authentication failed, please verify your account name and password." msgstr "" "Autentisering misslyckades, vƤnligen kontrollera ditt kontonamn och lƶsenord" -#: network/msnnotificationconnection.cpp:2042 +#: network/msnnotificationconnection.cpp:1993 msgid "Connecting..." msgstr "Ansluter..." -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" +#: network/msnnotificationconnection.cpp:2167 +#, fuzzy +msgid "Unknown command received from the server: %1" msgstr "KMess mottog ett okƤnt kommando frĆ„n servern: %1" -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 +#: network/msnnotificationconnection.cpp:2192 msgid "Invalid command syntax" msgstr "" -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -msgid "There was an internal error in KMess: %1" -msgstr "Ett internt fel intrƤffade i KMess: %1" - -#: network/msnnotificationconnection.cpp:2243 +#: network/msnnotificationconnection.cpp:2196 msgid "Invalid command parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2246 +#: network/msnnotificationconnection.cpp:2199 msgid "The email you have tried to add is not a MSN Messenger account" msgstr "" "E-postadressen du har fƶrsƶkt lƤgga till Ƥr inte ett MSN Messenger-konto" -#: network/msnnotificationconnection.cpp:2249 +#: network/msnnotificationconnection.cpp:2204 msgid "Domain name missing" msgstr "" -#: network/msnnotificationconnection.cpp:2252 +#: network/msnnotificationconnection.cpp:2208 msgid "Already logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2255 +#: network/msnnotificationconnection.cpp:2211 msgid "The account name given is invalid" msgstr "Det givna kontonamnet Ƥr inkorrekt" -#: network/msnnotificationconnection.cpp:2258 +#: network/msnnotificationconnection.cpp:2215 msgid "" "That account name is invalid, or your passport has not been confirmed yet" msgstr "" "Det kontonamnet Ƥr inkorrekt, eller sĆ„ har inte ditt passportkonto blivit " "bekrƤftat Ƥnnu." -#: network/msnnotificationconnection.cpp:2261 +#: network/msnnotificationconnection.cpp:2218 msgid "Your contact list is full" msgstr "Din kontaktlista Ƥr full." -#: network/msnnotificationconnection.cpp:2264 +#: network/msnnotificationconnection.cpp:2223 msgid "Invalid SBP parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2267 +#: network/msnnotificationconnection.cpp:2226 msgid "This contact is already on your list" msgstr "Kontakten finns redan pĆ„ din lista." -#: network/msnnotificationconnection.cpp:2270 +#: network/msnnotificationconnection.cpp:2230 msgid "This contact is not on your list" msgstr "Kontakten finns inte pĆ„ din lista" -#: network/msnnotificationconnection.cpp:2273 +#: network/msnnotificationconnection.cpp:2234 msgid "This contact is not online" msgstr "Kontakten Ƥr inte ansluten" -#: network/msnnotificationconnection.cpp:2276 +#: network/msnnotificationconnection.cpp:2239 msgid "Already in this mode" msgstr "" -#: network/msnnotificationconnection.cpp:2279 +#: network/msnnotificationconnection.cpp:2243 #, fuzzy msgid "Contact is in the opposite list" msgstr "Kontakten finns inte pĆ„ din lista" -#: network/msnnotificationconnection.cpp:2282 +#: network/msnnotificationconnection.cpp:2247 +#, fuzzy +msgid "" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." +msgstr "Gruppnamnet anvƤnds redan i din Messenger- eller Hotmail-kontaktlista" + +#: network/msnnotificationconnection.cpp:2251 msgid "Your contact list has too many groups" msgstr "Din kontaktlista har fƶr mĆ„nga grupper" -#: network/msnnotificationconnection.cpp:2285 +#: network/msnnotificationconnection.cpp:2255 msgid "This group can't be changed" msgstr "Den hƤr gruppen kan inte Ƥndras" -#: network/msnnotificationconnection.cpp:2288 +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "Din kontaktlista har fƶr mĆ„nga grupper" + +#: network/msnnotificationconnection.cpp:2264 msgid "This group is not empty" msgstr "Den hƤr gruppen Ƥr inte tom" -#: network/msnnotificationconnection.cpp:2291 -msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" -msgstr "Gruppnamnet anvƤnds redan i din Messenger- eller Hotmail-kontaktlista" - -#: network/msnnotificationconnection.cpp:2294 +#: network/msnnotificationconnection.cpp:2268 msgid "The group name is too long" msgstr "Gruppnamnet Ƥr fƶr lĆ„ngt" -#: network/msnnotificationconnection.cpp:2297 +#: network/msnnotificationconnection.cpp:2273 msgid "Attempted to change group \"0\"" msgstr "" -#: network/msnnotificationconnection.cpp:2300 +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +msgid "There was an internal error in KMess: %1" +msgstr "Ett internt fel intrƤffade i KMess: %1" + +#: network/msnnotificationconnection.cpp:2277 #, fuzzy msgid "Invalid Group" msgstr "Byt &namn pĆ„ Grupp" -#: network/msnnotificationconnection.cpp:2303 +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 msgid "Switchboard server failed" msgstr "VƤxelserver misslyckades" -#: network/msnnotificationconnection.cpp:2306 +#: network/msnnotificationconnection.cpp:2287 msgid "Transfer to switchboard server failed" msgstr "Ɩverfƶring till vƤxelserver misslyckades" -#: network/msnnotificationconnection.cpp:2309 +#: network/msnnotificationconnection.cpp:2291 msgid "Direct connection (MSNSLP) error, connection failed" msgstr "Direktanslutningsfel (MSNSLP), anslutning misslyckades" -#: network/msnnotificationconnection.cpp:2312 +#: network/msnnotificationconnection.cpp:2295 msgid "Required field missing" msgstr "" -#: network/msnnotificationconnection.cpp:2315 +#: network/msnnotificationconnection.cpp:2299 msgid "Not logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" -msgstr "Fel vid fƶrsƶk att hƤmta kontaktlistan, fƶrsƶk igen senare" +#: network/msnnotificationconnection.cpp:2302 +#, fuzzy +msgid "No permissions given for this account" +msgstr "Egna uttryckssymboler fƶr det hƤr kontot:" -#: network/msnnotificationconnection.cpp:2322 +#: network/msnnotificationconnection.cpp:2307 msgid "Command is disabled" msgstr "" -#: network/msnnotificationconnection.cpp:2325 +#: network/msnnotificationconnection.cpp:2310 msgid "Your account is banned." msgstr "Ditt konto Ƥr avstƤngt." -#: network/msnnotificationconnection.cpp:2329 +#: network/msnnotificationconnection.cpp:2314 #, fuzzy msgid "Challenge response failed" msgstr "Ɩverfƶringen misslyckades." -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" +#: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" +msgstr "" + +#: network/msnnotificationconnection.cpp:2323 +#, fuzzy +msgid "You are opening chat sessions too fast" msgstr "Du ƶppnar sessioner fƶr snabbt" -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" msgstr "Du har fƶr mĆ„nga sessioner ƶppna" -#: network/msnnotificationconnection.cpp:2341 +#: network/msnnotificationconnection.cpp:2334 msgid "Unexpected command sequence" msgstr "" -#: network/msnnotificationconnection.cpp:2344 +#: network/msnnotificationconnection.cpp:2338 msgid "Bad friend name" msgstr "Felaktigt namn pĆ„ vƤn" -#: network/msnnotificationconnection.cpp:2348 +#: network/msnnotificationconnection.cpp:2344 msgid "Bad CVR data" msgstr "" -#: network/msnnotificationconnection.cpp:2353 +#: network/msnnotificationconnection.cpp:2350 msgid "The server reports KMess is flooding it with too many data" msgstr "Servern rapporterar att KMess ƶversvƤmmar den med fƶr mycket data" -#: network/msnnotificationconnection.cpp:2358 +#: network/msnnotificationconnection.cpp:2357 #, fuzzy msgid "Authentication ticket was incorrect" msgstr "Autentisering misslyckades" -#: network/msnnotificationconnection.cpp:2362 +#: network/msnnotificationconnection.cpp:2360 msgid "You can't start a chat with someone while you are invisible." msgstr "Du kan inte starta en chatt med nĆ„gon dĆ„ du Ƥr osynlig" -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." +#: network/msnnotificationconnection.cpp:2364 +msgid "Not accepting new contacts" +msgstr "" + +#: network/msnnotificationconnection.cpp:2368 +#, fuzzy +msgid "" +"You have a kids passport account, you need parental consent to chat online." msgstr "" "Du har ett barnpassportkonto, du mĆ„ste ha fƶrƤldrars tillĆ„telse fƶr att " "chatta online." -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." +#: network/msnnotificationconnection.cpp:2371 +#, fuzzy +msgid "Your passport account needs to be verified first." msgstr "Ditt passportkonto mĆ„ste bli bekrƤftat fƶrst." -#: network/msnnotificationconnection.cpp:2373 +#: network/msnnotificationconnection.cpp:2375 msgid "Bad USR ticket" msgstr "" -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" -msgstr "KMess - MSN fel" +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" +msgstr "Fel vid fƶrsƶk att hƤmta kontaktlistan, fƶrsƶk igen senare" -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" +#: network/msnnotificationconnection.cpp:2399 +#, fuzzy +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." msgstr "Ett internt serverfel intrƤffade" +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + #: network/msnnotificationconnection.cpp:2414 -msgid "The server is too busy" -msgstr "Servern Ƥr fƶr upptagen" - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "Servern Ƥr inte tillgƤngligt" - -#: network/msnnotificationconnection.cpp:2422 msgid "Peer notification server down" msgstr "Motpartsnotifieringsservern Ƥr nere" -#: network/msnnotificationconnection.cpp:2426 +#: network/msnnotificationconnection.cpp:2418 msgid "The server is going down" msgstr "Servern gĆ„r ner" -#: network/msnnotificationconnection.cpp:2429 +#: network/msnnotificationconnection.cpp:2422 msgid "The server is going down soon" msgstr "Servern gĆ„ ner snart" -#: network/msnnotificationconnection.cpp:2433 +#: network/msnnotificationconnection.cpp:2427 msgid "Write is blocking" msgstr "Skriv Ƥr blockat" -#: network/msnnotificationconnection.cpp:2436 +#: network/msnnotificationconnection.cpp:2431 msgid "Session is overloaded" msgstr "Sessionen Ƥr ƶverbelastad" -#: network/msnnotificationconnection.cpp:2441 +#: network/msnnotificationconnection.cpp:2438 msgid "The server is not available" msgstr "Servern Ƥr inte tillgƤngligt" -#: network/msnnotificationconnection.cpp:2444 +#: network/msnnotificationconnection.cpp:2442 msgid "Authentication failed" msgstr "Autentisering misslyckades" -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" -msgstr "" +#: network/msnnotificationconnection.cpp:2449 +#, fuzzy +msgid "Unknown error code received from the server: %1" +msgstr "KMess mottog ett okƤnt kommando frĆ„n servern: %1" -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" -msgstr "KMess mottog ett okƤnt felmeddelande frĆ„n servern: %1" +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +#, fuzzy +msgctxt "Error dialog box title" +msgid "MSN error" +msgstr "KMess - MSN fel" -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "Varning: Serven stƤnger ner fƶr underhĆ„ll om 1 minut!" +# settings/alertswidget.cpp:110 rc.cpp:112, no-c-format +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "minuter" +msgstr[1] "minuter" #: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." +#, fuzzy +msgid "Server closes for maintenance in %1!" +msgstr "Varning: Serven stƤnger ner fƶr underhĆ„ll om %1 minuter!" + +#: network/msnnotificationconnection.cpp:2604 +#, fuzzy +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." msgstr "" "MSN Servern har rapporterat att den kommer gĆ„ ner inom en minut fƶr " "underhĆ„ll." -#: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" -msgstr "Varning: Serven stƤnger ner fƶr underhĆ„ll om %1 minuter!" - -#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:2901 msgid "Lost reference to SOAP client" msgstr "" -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +#, fuzzy +msgid "KMess could not process Offline-IM messages.
Details: %1" msgstr "" "KMess kunde inte bearbeta Offline-IM meddelanden.\n" "\n" "Detaljer: %1" -#: network/msnnotificationconnection.cpp:3209 +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "Autentisering misslyckades" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "Ett internt fel intrƤffade i KMess: %1" + +#: network/msnnotificationconnection.cpp:3242 +#, fuzzy +msgctxt "Login error message, with more details for developer versions" msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" +msgstr "" +"KMess kunde inte ansluta till MSN Messenger servrarna. MSN Messenger " +"servrarna kan vara temporƤrt otillgƤngliga eller sƄ Ƥr det ett problem med " +"din Internetanslutning." + +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "Anslutningen till servern fƶrlorades." + +#: network/msnnotificationconnection.cpp:3302 +#, fuzzy +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" msgstr "" "Autentisering misslyckades, KMess kunde inte bearbeta passportinloggningen.\n" "\n" "Detaljer: %1" -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" -msgstr "" -"KMess kunde inte nƄ webbtjƤnsten.\n" -"Detaljer: %1" +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "Serverfel" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "Anslutning ƶverskred tidsgrƤns" + +#: network/msnsockettcp.cpp:368 +msgid "1 ping lost" +msgstr "1 ping fƶrlorad" + +#: network/msnsockettcp.cpp:372 +msgid "%1 pings lost" +msgstr "%1 ping fƶrlorade" + +#: network/msnsockettcp.cpp:387 +msgid "The connection to the server was lost." +msgstr "Anslutningen till servern fƶrlorades." + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "Personen Ƥr frƄnkopplad eller osynlig." -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "Kontakten initierade en MSN7 funktion som KMess inte kan hantera Ƥnnu." -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 msgid "The message \"%1\" was not received!" msgstr "Meddelandet \"%1\" mottogs inte!" -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "Kunde inte skapa en ansluting: %1" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "Fƶr mƄnga omdirigeringar av inloggningstjƤnsten" -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +#, fuzzy +msgid "In %1's chat: %2" msgstr "I %1s chatt: %2" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +#, fuzzy +msgid "%1 says:
'%2'" msgstr "%1 sƤger:
'%2'" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" +#: notification/chatnotification.cpp:171 +#, fuzzy +msgid "%1 has sent you an offline message:
'%2'" msgstr "" "%1 har skickat ett meddelande medans du var frƄnkopplad:
'%2'" -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" +#: notification/chatnotification.cpp:178 +#, fuzzy +msgid "%1's chat requests attention!" msgstr "%1s chatt begƤr uppmƤrksamhet!" -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" -msgstr "" - -#: notification/notificationchat.cpp:200 +#: notification/chatnotification.cpp:183 #, fuzzy -msgid "%1 has sent you a handwritten message!" +msgid "%1:
%2" +msgstr "%1 sƤger:
'%2'" + +#: notification/chatnotification.cpp:190 +#, fuzzy +msgid "%1 has sent you a handwritten message!" msgstr "%1 har skickat en knuff!" -#: notification/notificationchat.cpp:204 -msgid "%1 has sent you a nudge!" +#: notification/chatnotification.cpp:194 +#, fuzzy +msgid "%1 has sent you a nudge!" msgstr "%1 har skickat en knuff!" -#: notification/notificationchat.cpp:208 -msgid "%1 has sent you a wink!" +#: notification/chatnotification.cpp:198 +#, fuzzy +msgid "%1 has sent you a wink!" msgstr "%1 har skickat en blinkning!" -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" +#: notification/chatnotification.cpp:204 +#, fuzzy +msgid "%1 wants to use the webcam!" msgstr "%1 vill anvƤnda webbkameran!" -#: notification/notificationchat.cpp:215 -msgid "%1 is sending you a file!" +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" msgstr "%1 skickar en fil!" -#: notification/notificationchat.cpp:216 -msgid "%1 has sent you an invitation!" +#: notification/chatnotification.cpp:206 +#, fuzzy +msgid "%1 has sent you an invitation!" msgstr "%1 har skickat en inbjudan!" -#: notification/notificationchat.cpp:223 -msgid "%1 has canceled the webcam session!" +#: notification/chatnotification.cpp:213 +#, fuzzy +msgid "%1 has canceled the webcam session!" msgstr "%1 har avbrutit webbkamerasessionen!" -#: notification/notificationchat.cpp:224 -msgid "%1 has canceled the file transfer!" +#: notification/chatnotification.cpp:214 +#, fuzzy +msgid "%1 has canceled the file transfer!" msgstr "%1 har avbrutit filƶverfƶringen!" -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +#, fuzzy +msgid "%1's activity has been canceled!" msgstr "%1s aktivitet har avbrutits!" -#: notification/notificationchat.cpp:232 -msgid "%1 has accepted to use the webcam!" +#: notification/chatnotification.cpp:222 +#, fuzzy +msgid "%1 has accepted to use the webcam!" msgstr "%1 har accepterat att anvƤnda webbkameran!" -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" +#: notification/chatnotification.cpp:223 +#, fuzzy +msgid "%1 has accepted the file transfer!" msgstr "%1 har accepterat filƶverfƶringen!" -#: notification/notificationchat.cpp:234 -msgid "%1 has accepted your invitation!" +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" msgstr "%1 har accepterat din inbjudan!" -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" +#: notification/chatnotification.cpp:231 +#, fuzzy +msgid "%1 has ended the webcam session!" msgstr "%1 har avslutat webbkamerasessionen!" -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "Filƶverfƶringen med %1 Ƥr klar!" -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" +#: notification/chatnotification.cpp:233 +#, fuzzy +msgid "%1's activity has ended!" msgstr "%1s aktivitet har avslutats!" -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" +#: notification/chatnotification.cpp:240 +#, fuzzy +msgid "%1's webcam session has failed!" msgstr "%1s webbkamerasession har misslyckats!" -#: notification/notificationchat.cpp:251 -msgid "The file transfer with %1 has failed!" +#: notification/chatnotification.cpp:241 +#, fuzzy +msgid "The file transfer with %1 has failed!" msgstr "Filƶverfƶringen med %1 har misslyckats!" -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:242 +#, fuzzy +msgid "%1's activity has ended with an error!" msgstr "%1s aktivitet har avslutats med ett fel!" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -msgid "%1 is now online" +#: notification/contactstatusnotification.cpp:70 +#, fuzzy +msgid "%1 is now online" msgstr "%1 Ƥr nu ansluten" -#: notification/notificationcontactstatus.cpp:76 -msgid "%1 has gone away" +#: notification/contactstatusnotification.cpp:71 +#, fuzzy +msgid "%1 has gone away" msgstr "%1 Ƥr nu frƄnvarande" -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/contactstatusnotification.cpp:72 +#, fuzzy +msgid "%1 will be right back" msgstr "%1 Ƥr strax tillbaka" -#: notification/notificationcontactstatus.cpp:78 -msgid "%1 is now busy" +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" msgstr "%1 Ƥr nu upptagen" -#: notification/notificationcontactstatus.cpp:79 -msgid "%1 has become invisible" +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" msgstr "%1 har blivit osynlig" -#: notification/notificationcontactstatus.cpp:80 -msgid "%1 has gone idle" +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" msgstr "%1 har blivit inaktiv" -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/contactstatusnotification.cpp:76 +#, fuzzy +msgid "%1 has logged out" msgstr "%1 har loggat ut" -#: notification/notificationcontactstatus.cpp:82 -msgid "%1 is on the phone" +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" msgstr "%1 pratar i telefon" -#: notification/notificationcontactstatus.cpp:83 -msgid "%1 is out for lunch" +#: notification/contactstatusnotification.cpp:78 +#, fuzzy +msgid "%1 is out for lunch" msgstr "%1 Ƥr pƄ lunch" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/newemailnotification.cpp:78 +#, fuzzy +msgid "New email:
'%1'
by '%2'" msgstr "Nytt e-post:
'%1'
by '%2'" -#: settings/accountswidget.cpp:81 +#: settings/accountpage.cpp:69 msgid "Browse..." msgstr "" -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +#, fuzzy +msgid "Browse and crop picture..." msgstr "BlƤddra och beskƤr bild..." -#: settings/accountswidget.cpp:404 -msgid "Display Picture" -msgstr "Visningsbild" +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" +#: settings/accountpage.cpp:448 +#, fuzzy +msgid "Downloading of display picture failed" msgstr "Nerladdning av visningsbild misslyckades" -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 +#, fuzzy msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" "Ett fel intrƤffade vid fƶrsƶk att Ƥndra visningsbild.\n" "Kontrollera sĆ„ du valt en korrekt bildfil" -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "Hej, hur mĆ„r du? :)" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "" - -#: settings/chatstylepage.cpp:317 -msgid "Great!" -msgstr "Bra!" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "Jag kom /precis/ tillbaka frĆ„n min semester i Italien!" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 #, fuzzy msgid "&Delete" msgstr "Ta bo&rt Kontakt" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "InstƤllningar" # settings/settingsdialog.cpp:80 settings/accountswidget.cpp:97 rc.cpp:85, # -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 msgid "Account" msgstr "Konto" # settings/settingsdialog.cpp:80 settings/accountswidget.cpp:97 rc.cpp:85, # -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 #, fuzzy msgid "My Account" msgstr "Konto" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "Meddelanden" # settings/settingsdialog.cpp:85 settings/emailwidget.cpp:111 rc.cpp:216, -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 #, fuzzy msgid "Alerts and Notifications" msgstr "KMess Notifikation" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "Chattar" # rc.cpp:127, no-c-format -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "Chattloggning" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +#, fuzzy +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "Kontaktadressen du skrivit in Ƥr inte giltig: '%1'" + +#: settings/accountsettingsdialog.cpp:201 +#, fuzzy +msgid "The email address you have entered is already in use: '%1'" +msgstr "Kontaktadressen du skrivit in Ƥr inte giltig: '%1'" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "Ƅr du sƤker pĆ„ att du vill ta bort det hƤr kontot?" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "Ƅr du sƤker pĆ„ att du vill ta bort det hƤr kontot?" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "Hej, hur mĆ„r du? :)" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "" + +#: settings/chatstylepage.cpp:341 +msgid "Great!" +msgstr "Bra!" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "Jag kom /precis/ tillbaka frĆ„n min semester i Italien!" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "InstƤllningar" + +# settings/settingsdialog.cpp:80 settings/accountswidget.cpp:97 rc.cpp:85, +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +msgid "Accounts" +msgstr "Konton" + +# settings/settingsdialog.cpp:85 settings/emailwidget.cpp:111 rc.cpp:216, +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "E-postnotifikation" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +# settings/chatloggingwidget.cpp:120 rc.cpp:133, no-c-format +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "Spara chattfiler i fƶljande katalog:" + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." @@ -3539,14 +4249,157 @@ msgstr "" "Att stƤnga huvudfƶnstret kommer hƄlla KMess kƶrandes i systempanelen. AnvƤnd " "'Avsluta' frƄn 'Arkiv'-menyn fƶr att avsluta applikationen." -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "Docka i Systempanelen" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "" +#: systemtraywidget.cpp:245 +msgid "- %1 (%2)" +msgstr "" + +#~ msgid "Click to send an email to this contact." +#~ msgstr "Klicka fƶr att skicka ett e-postmeddelande till den hƤr kontakten." + +#~ msgid "Picture:" +#~ msgstr "Bild:" + +# settings/emailwidget.cpp:112 rc.cpp:219, no-c-format +#, fuzzy +#~ msgid "Login Information" +#~ msgstr "Visa e-postinformation" + +#~ msgid "Logging in..." +#~ msgstr "Loggar in..." + +#~ msgid "" +#~ "Allows you to choose which e-mail program KMess should open to view e-" +#~ "mail messages." +#~ msgstr "" +#~ "TillĆ„ter dig att vƤlja vilket e-postprogram KMess ska ƶppna fƶr att lƤsa " +#~ "e-postmeddelanden." + +# settings/emailwidget.cpp:110 rc.cpp:213, no-c-format +#~ msgid "Use a specified command:" +#~ msgstr "AnvƤnd ett specifikt kommando:" + +#~ msgid "This account does not have an Hotmail inbox!" +#~ msgstr "Det hƤr kontot har inte en Hotmail-inkorg!" + +#, fuzzy +#~ msgid "Email: " +#~ msgstr "E-post" + +#~ msgid "Remove group" +#~ msgstr "Ta bort grupp" + +#, fuzzy +#~ msgid "Show &Display Pictures" +#~ msgstr "Visningsbild" + +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr "Du har 1 nytt e-postmeddelande i din inkorg." + +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr "Du har %1 nya e-postmeddelanden i din inkorg." + +#, fuzzy +#~ msgid "Guido Solinas" +#~ msgstr "Anslut" + +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "Ɩverfƶringen av %1 misslyckades. Kunde inte ƶppna fil" + +#, fuzzy +#~ msgid "Sidebar" +#~ msgstr "Sidopanel" + +#, fuzzy +#~ msgid "New contact's group" +#~ msgstr "Ny &Kontakt" + +#~ msgid "Enter your login information:" +#~ msgstr "Skriv in din inloggningsinformation:" + +# settings/accountswidget.cpp:98 rc.cpp:88, no-c-format +#~ msgid "Your friendly name:" +#~ msgstr "Ditt visningsnamn:" + +#, fuzzy +#~ msgid "Your email address:" +#~ msgstr "E-postadress " + +#~ msgid "Your password:" +#~ msgstr "Ditt lƶsenord:" + +#~ msgid "Display picture:" +#~ msgstr "Visningsbild:" + +# settings/imagewidgetinterface.cpp:104 rc.cpp:228, no-c-format +#~ msgid "Don't show a displa&y picture" +#~ msgstr "Visa inte en visningsbild" + +#~ msgid "Status to set at login:" +#~ msgstr "Status att sƤtta vid inloggning:" + +# settings/emailwidget.cpp:113 rc.cpp:222, no-c-format +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "Visa notifikationer nƤr du fĆ„r e-post" + +#~ msgid "Organize chat folders by:" +#~ msgstr "Organisera chattmappar med:" + +# settings/chattingwidget.cpp:191 rc.cpp:167, no-c-format +#~ msgid "&Show graphics in chat messages" +#~ msgstr "Vi&sa grafik i chattmeddelanden" + +# settings/emailwidget.cpp:109 rc.cpp:210, no-c-format +#~ msgid "Use Hotmail" +#~ msgstr "AnvƤnd Hotmail" + +#~ msgid "says:" +#~ msgstr "sƤger:" + +#~ msgid "Current name: " +#~ msgstr "Aktuellt namn: " + +#, fuzzy +#~ msgid "" +#~ "KMess could not connect to the MSN Messenger service.\n" +#~ "Please, be sure to be connected to the internet.\n" +#~ "reason: %1." +#~ msgstr "" +#~ "KMess kunde inte ansluta till MSN Messenger tjƤnsten.\n" +#~ "VƤnligen kontrollera att du Ƥr ansluten till Internet.\n" +#~ "Systemfel: %1 (kod %2)." + +#~ msgid "The remote server has closed the connection." +#~ msgstr "Servern har stƤngt anslutningen" + +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr "Vista MSN Messenger-tjƤnststatus?" + +#~ msgid "Received user confirmation" +#~ msgstr "Mottog anvƤndarbekrƤftelse" + +#~ msgid "Transfer to notification server" +#~ msgstr "Ɩverfƶr till notifikationsservern" + +#~ msgid "The server is too busy" +#~ msgstr "Servern Ƥr fƶr upptagen" + +#~ msgid "The server is unavailable" +#~ msgstr "Servern Ƥr inte tillgƤngligt" + +#~ msgid "KMess received an unknown error message from the server: %1" +#~ msgstr "KMess mottog ett okƤnt felmeddelande frĆ„n servern: %1" + +#~ msgid "Warning: Server closes for maintenance in 1 minute!" +#~ msgstr "Varning: Serven stƤnger ner fƶr underhĆ„ll om 1 minut!" + # dialogs/contactaddeduserdialoginterface.cpp:71 rc.cpp:57, no-c-format #~ msgid "Add contact" #~ msgstr "LƤgg till kontakt" @@ -3556,10 +4409,6 @@ msgstr "" #~ msgid "KMess Notification" #~ msgstr "E-postnotifikation" -# settings/settingsdialog.cpp:80 settings/accountswidget.cpp:97 rc.cpp:85, -#~ msgid "Accounts" -#~ msgstr "Konton" - #~ msgid "" #~ msgstr "" @@ -3573,9 +4422,6 @@ msgstr "" #~ "Your emails" #~ msgstr "zeflunk@gmail.com" -#~ msgid "Insert an emoticon" -#~ msgstr "Infoga en uttryckssymbol" - #~ msgid "Show/Hide &Contact Sidebar" #~ msgstr "Visa/Dƶlj &Kontaktpanelen" @@ -3606,19 +4452,9 @@ msgstr "" #~ msgid "(On the Phone)" #~ msgstr "(Pratar i Telefon)" -#~ msgid "Connection timeout" -#~ msgstr "Anslutning ƶverskred tidsgrƤns" - #~ msgid "The current status of your contact." #~ msgstr "Nuvarande status fƶr din kontakt." -# initialviewinterface.cpp:208 rc.cpp:7, no-c-format -#~ msgid "Connect" -#~ msgstr "Anslut" - -#~ msgid "Listening to %1" -#~ msgstr "Lyssnar pĆ„ %1" - #, fuzzy #~ msgid "The contact is listening to music" #~ msgstr "Kontakten finns inte pĆ„ din lista" diff --git a/po/th.po b/po/th.po index bf88883..95d9156 100644 --- a/po/th.po +++ b/po/th.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: th\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" "PO-Revision-Date: 2003-02-11 11:29+0700\n" "Last-Translator: Rachan Hongpairote \n" "Language-Team: THAI \n" @@ -17,47 +17,41 @@ msgstr "" "X-Generator: KBabel 0.9.6\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "ą¹€ąø‚ą¹‰ąø²ąøŖąø¹ą¹ˆąø£ąø°ąøšąøš ..." - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -#, fuzzy -msgid "S&end" -msgstr "ąøŖą¹ˆąø‡" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 #, fuzzy msgid "Ne&w Line" msgstr "ąøšąø£ąø£ąø—ąø±ąø”ą¹ƒąø«ąø”ą¹ˆ" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 #, fuzzy -msgid "Sidebar" -msgstr "แสดง/ąø‹ą¹ˆąø­ąø™ &ą¹ąø–ąøšąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" +msgid "S&end" +msgstr "ąøŖą¹ˆąø‡" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +#, fuzzy +msgid "Contacts" +msgstr "ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 #, fuzzy msgid "" "Enter here the email address of the person you wish to add to your contact " @@ -65,42 +59,40 @@ msgid "" msgstr "ą¹ƒąøŖą¹ˆąø­ąøµą¹€ąø”ąø„ą¹Œąø‚ąø­ąø‡ąøšąøøąø„ąø„ąø„ąø—ąøµą¹ˆąø•ą¹‰ąø­ąø‡ąøąø²ąø£ąøˆąø°ą¹€ąøžąø“ą¹ˆąø”: " #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 #, fuzzy msgid "Email address" msgstr "ąø­ąøµą¹€ąø”ąø„ą¹Œ:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 #, fuzzy -msgid "New contact's group" -msgstr "ąøœąø¹ą¹‰ąø•ąø“&ąø”ąø•ą¹ˆąø­ą¹ƒąø«ąø”ą¹ˆ" +msgid "Initial group" +msgstr "ą¹€&ąø›ąø„ąøµą¹ˆąø¢ąø™ąøŠąø·ą¹ˆąø­ąøąø„ąøøą¹ˆąø”" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 #, fuzzy msgid "" "Enter a message to be automatically sent to people who try to message you." @@ -109,186 +101,394 @@ msgstr "" "ąø–ąø¶ąø‡ąø„ąø™ąø—ąøµą¹ˆąøžąø¢ąø²ąø¢ąø²ąø”ąøŖą¹ˆąø‡ąø‚ą¹‰ąø­ąø„ąø§ąø²ąø”ąø–ąø¶ąø‡ąø„ąøøąø“" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 #, fuzzy msgid "&Automatic away message" msgstr "ą¹€ąøˆąø²ąø°ąøˆąø‡ąø‚ą¹‰ąø­ąø„ąø§ąø²ąø”ą¹€ąø”ąø·ą¹ˆąø­ą¹„ąø”ą¹ˆąø­ąø¢ąø¹ą¹ˆ" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, fuzzy, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" -msgstr "ą¹„ąø”ą¹‰ąø”ąøµąøąø²ąø£ą¹€ąøžąø“ą¹ˆąø”ąø„ąøøąø“ą¹€ąø‚ą¹‰ąø²ą¹„ąø›ąø¢ąø±ąø‡ąø£ąø²ąø¢ąøŠąø·ą¹ˆąø­ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­ ąø„ąøøąø“ąø•ą¹‰ąø­ąø‡ąøąø²ąø£ąø—ąøµą¹ˆąøˆąø° " +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 #, fuzzy -msgid "&Add this contact to your \"Friends\" list" +msgid "&Add this person to my \"Friends\" list" msgstr "ą¹€ąøžąø“ą¹ˆąø”ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­ą¹„ąø›ąø¢ąø±ąø‡ąø£ąø²ąø¢ąøąø²ąø£ą¹€ąøžąø·ą¹ˆąø­ąø™ąø‚ąø­ąø‡ąø„ąøøąø“" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 #, fuzzy -msgid "&Not add this contact, but let them see your online state" +msgid "Do not add this person; only allow them to see my online state" msgstr "ą¹„ąø”ą¹ˆą¹€ąøžąø“ą¹ˆąø”ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­ ą¹ąø•ą¹ˆą¹ƒąø«ą¹‰ą¹€ąø«ą¹‡ąø™ąøŖąø–ąø²ąø™ąø°ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 #, fuzzy -msgid "Block this person from contacting &you or seeing your online state" +msgid "&Block this person from contacting me or seeing my online state" msgstr "ąøšąø„ą¹Šąø­ąø„ąø„ąø™ąø™ąøµą¹‰ąøˆąø²ąøąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­ąø—ąøµą¹ˆąø„ąøøąø“ą¹€ąø«ą¹‡ąø™ą¹ƒąø™ąøŖąø–ąø²ąø™ąø°ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, no-c-format +msgid "Contact Properties for %1" +msgstr "ąø„ąøøąø“ąøŖąø”ąøšąø±ąø•ąø“ąø„ąø­ąø™ą¹€ąø—ą¹‡ąøąø—ą¹ŒąøŖąø³ąø«ąø£ąø±ąøš %1" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +#, fuzzy +msgid "Restore" +msgstr "เอาออก" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "ą¹€ąø„ąø·ąø­ąøąøŠąø·ą¹ˆąø­ąøŖąø³ąø«ąø£ąø±ąøšąøšąøøąø„ąø„ąø„ąø™ąøµą¹‰" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "ą¹ąøŖąø”ąø‡ąø«ąø™ą¹‰ąø²ąø•ą¹ˆąø²ąø‡ąø›ą¹Šąø­ąø›ąø­ąø±ąøžą¹€ąø”ąø·ą¹ˆąø­ąøšąøøąø„ąø„ąø„ąø™ąøµą¹‰ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œąø«ąø£ąø·ąø­ąø­ąø­ąøŸą¹„ąø„ąø™ą¹Œ" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "เสียง: " + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +#, fuzzy +msgid "&Clear Cache" +msgstr "ąø¢ąøą¹€ąø„ąø“ąøą¹ąø—ą¹‡ąøš" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +#, fuzzy +msgid "Notes" +msgstr "โน้ต" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "ąø«ąø™ą¹‰ąø²ąø•ą¹ˆąø²ąø‡ą¹€ąø™ą¹‡ąø—ą¹€ąø§ąø“ąø£ą¹Œąø" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +#, fuzzy +msgid "Standard" +msgstr "ดาว" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "ąøŖą¹ˆąø‡" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 msgid "Cancel" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -#, fuzzy -msgid "Enter your login information:" -msgstr "ąø«ąø£ąø·ąø­ą¹ƒąøŖą¹ˆąø‚ą¹‰ąø­ąø”ąø¹ąø„ąø„ą¹Šąø­ąø„ąø­ąø“ąø™" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" +msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 #, fuzzy -msgid "Password" +msgid "Email address:" +msgstr "ąø­ąøµą¹€ąø”ąø„ą¹Œ:" + +#. i18n: tag string +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +#, fuzzy +msgid "Password:" msgstr "ąø£ąø«ąø±ąøŖąøœą¹ˆąø²ąø™:" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 #, fuzzy msgid " Account options " msgstr "&ąø•ąø±ą¹‰ąø‡ąø„ą¹ˆąø²ą¹€ąø­ąø„ą¹€ąø„ą¹‰ąø²ąø—ą¹Œ" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 #, fuzzy msgid "Remem&ber this profile" msgstr "ąøˆąø”ąøˆąø³ąø‚ą¹‰ąø­ąø”ąø¹ąø„ą¹‚ąø›ąø£ą¹„ąøŸąø„ą¹Œąø™ąøµą¹‰ą¹„ąø§ą¹‰" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "&ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 #, fuzzy msgid "Enter your personal message here" msgstr "(ą¹ƒąøŖą¹ˆąø‚ą¹‰ąø­ąø„ąø§ąø²ąø”ąø—ąøµą¹ˆąø™ąøµą¹ˆ)" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr "&ąø•ąø±ą¹‰ąø‡ąø„ą¹ˆąø²ą¹€ąø­ąø„ą¹€ąø„ą¹‰ąø²ąø—ą¹Œ" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 #, fuzzy -msgid "Your friendly name:" +msgid "&Friendly name:" msgstr "ąøŠąø·ą¹ˆąø­ą¹€ąø„ą¹ˆąø™: " #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 #, fuzzy -msgid "Your email address:" +msgid "&Email address:" msgstr "ąø­ąøµą¹€ąø”ąø„ą¹Œ:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 #, fuzzy -msgid "Your password:" +msgid "&Password:" msgstr "ąø£ąø«ąø±ąøŖąøœą¹ˆąø²ąø™:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 #, fuzzy -msgid "Remember Password" +msgid "&Remember Password" msgstr "ąø£ąø«ąø±ąøŖąøœą¹ˆąø²ąø™:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 #, fuzzy -msgid "Display picture:" -msgstr "ąø£ąø¹ąø›ąø ąø²ąøž: " +msgid "Display Picture" +msgstr "ą¹ąøŖąø”ąø‡ąø£ąø¹ąø›ąø ąø²ąøž" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 msgid "C&hange..." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -#, fuzzy -msgid "Don't show a displa&y picture" -msgstr "ąø£ąø¹ąø›ąø ąø²ąøž: " +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -299,35 +499,36 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +msgid "Re&member the settings of this account" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 #, fuzzy -msgid "Login &with this account automatically at start-up" +msgid "Login &with this account automatically" msgstr "ąøąø²ąø£ą¹€ąø‚ą¹‰ąø²ąøŖąø¹ą¹ˆąø£ąø°ąøšąøšąø”ą¹‰ąø§ąø¢ą¹€ąø­ąø„ą¹€ąø„ą¹‰ąø²ąø—ą¹Œąø™ąøµą¹‰ ąøˆąø°ąø—ąø³ą¹‚ąø”ąø¢ąø­ąø±ąø•ą¹‚ąø™ąø”ąø±ąø•ąø“ą¹€ąø”ąø·ą¹ˆąø­ą¹€ąø£ąøµąø¢ąøą¹‚ąø›ąø£ą¹ąøąø£ąø”" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "ąøšąø±ąø™ąø—ąø¶ąøąø—ąøøąøąøąø²ąø£ąøŖąø™ąø—ąø™ąø²" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -335,174 +536,284 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 msgid "https://accountservices.passport.net/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 #, fuzzy -msgid "Popup notifications" +msgid "Saved accounts:" +msgstr "ą¹€ąø­ąø„ą¹€ąø„ą¹‰ąø²ąø—ą¹Œ" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +#, fuzzy +msgid "Click" +msgstr "(ąøšąø„ą¹Šąø­ąø„)" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "ą¹€ąø­ąø„ą¹€ąø„ą¹‰ąø²ąø—ą¹Œ" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "เอาออก" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "ąø­ąøµą¹€ąø”ąø„ą¹Œą¹ąøˆą¹‰ąø‡ą¹€ąø•ąø·ąø­ąø™" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 #, fuzzy msgid "Show notifications when your contacts:" msgstr "ą¹ąøŖąø”ąø‡ąøšąø­ąøą¹€ąø”ąø·ą¹ˆąø­ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­ąø­ąø­ąøŸą¹„ąø„ąø™ą¹Œ" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 #, fuzzy msgid "&Go online" msgstr "ąø­ąø­ąøŸą¹„ąø„ąø™ą¹Œ" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 #, fuzzy msgid "S&end you a message" msgstr "ą¹€ąøˆąø²ąø°ąøˆąø‡ąø‚ą¹‰ąø­ąø„ąø§ąø²ąø”ąø«ąø²ąøą¹„ąø”ą¹ˆąø­ąø¢ąø¹ą¹ˆ" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 #, fuzzy msgid "Go o&ffline" msgstr "ąø­ąø­ąøŸą¹„ąø„ąø™ą¹Œ" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 #, fuzzy -msgid "Show notifications when you recei&ve an email" +msgid "Email Events" +msgstr "ąø­ąøµą¹€ąø”ąø„ą¹Œ:" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" msgstr "ą¹ąøŖąø”ąø‡ąøąø²ąø£ą¹€ąø•ąø·ąø­ąø™ą¹€ąø”ąø·ą¹ˆąø­ą¹„ąø”ą¹‰ąø£ąø±ąøšąø­ąøµą¹€ąø”ąø„ą¹Œ" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +msgid "In other folders" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "ąø‹ą¹ˆąø­ąø™ąø«ąø™ą¹‰ąø²ąø•ą¹ˆąø²ąø‡ąø«ąø„ąø±ąø‡ąøˆąø²ąø" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "วณนาที" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "ą¹ąøˆą¹‰ąø‡ą¹€ąø•ąø·ąø­ąø™" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "ą¹ąøŖąø”ąø‡ąø£ąø²ąø¢ąøŠąø·ą¹ˆąø­ąø—ąøµą¹ˆąø­ąø­ąøŸą¹„ąø„ąø™ą¹Œ" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -513,208 +824,211 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 -msgid "Inform contacts w&hich song I am listening to." +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 +msgid "Inform contacts w&hich song I am listening to" msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 #, fuzzy msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "ą¹€ąø›ąø„ąøµą¹ˆąø¢ąø™ąøŖąø–ąø²ąø™ąø°ą¹€ąø›ą¹‡ąø™ ąø§ą¹ˆąø²ąø‡ - ą¹„ąø”ą¹ˆąø­ąø¢ąø¹ą¹ˆąø«ąø™ą¹‰ąø²ąø„ąø­ąø”ąøÆ ą¹€ąø”ąø·ą¹ˆąø­ą¹„ąø”ą¹ˆą¹ąø­ąø„ąø—ąøµąøŸ" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 #, fuzzy msgid "Become idle after" msgstr "ą¹€ąø›ąø„ąøµą¹ˆąø¢ąø™ą¹€ąø›ą¹‡ąø™ąø§ą¹ˆąø²ąø‡ąø«ąø„ąø±ąø‡ąøˆąø²ąø " #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "นาที" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 #, fuzzy msgid "Log &all chats" msgstr "ąøšąø±ąø™ąø—ąø¶ąøąø—ąøøąøąøąø²ąø£ąøŖąø™ąø—ąø™ąø²" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 msgid "" "Choose the directory on your system where you'd like to save the chat logs." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" msgstr "ąøšąø±ąø™ąø—ąø¶ąøąøąø²ąø£ąøŖąø™ąø—ąø™ąø²ą¹ƒąø™ą¹„ąø”ą¹€ąø£ąø„ąø—ąø­ąø£ąøµą¹ˆ: " #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "ąøˆąø±ąø”ąøąø²ąø£ą¹ąøŸą¹‰ąø”ąøŖąø™ąø—ąø™ąø²ą¹‚ąø”ąø¢: " +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "ปี" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 #, fuzzy msgid "Month" msgstr "เดือน" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "วัน" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" msgstr "ąøšąø±ąø™ąø—ąø¶ąøąø—ąøøąøąøąø²ąø£ąøŖąø™ąø—ąø™ąø²ą¹ƒąø™ą¹„ąø”ą¹€ąø£ąø„ąø—ąø­ąø£ąøµą¹ˆąø«ąø„ąø±ąø" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "ąøŸąø­ąø™ąø•ą¹Œąø‚ąø­ąø‡ąø‚ą¹‰ąø­ąø„ąø§ąø²ąø”: " - +#. i18n: file ./settings/chatstylepage.ui line 45 #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "ąøšąø±ąø‡ąø„ąø±ąøšąø‚ą¹‰ąø­ąø„ąø§ąø²ąø”ąø‚ąø­ąø‡ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­ą¹ƒąø«ą¹‰ą¹ƒąøŠą¹‰ąøŸąø­ąø™ąø•ą¹Œ: " - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 #, fuzzy -msgid "Chat style:" +msgid "&Chat style:" msgstr "ąø£ąø¹ąø›ą¹ąøšąøšąø‚ą¹‰ąø­ąø„ąø§ąø²ąø”ąøŖąø™ąø—ąø™ąø²" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "ąøąø³ąø«ąø™ąø”ąø„ą¹ˆąø²" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 #, fuzzy -msgid "&Show graphics in chat messages" -msgstr "ą¹ąøŖąø”ąø‡ą¹€ąø§ąø„ąø²ąøšąø™ąø‚ą¹‰ąø­ąø„ąø§ąø²ąø”" +msgid "&Show emoticons" +msgstr "แสดง&ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œ" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 #, fuzzy -msgid "S&how time in chat messages" +msgid "S&how messages time" msgstr "ą¹ąøŖąø”ąø‡ą¹€ąø§ąø„ąø²ąøšąø™ąø‚ą¹‰ąø­ąø„ąø§ąø²ąø”" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -723,152 +1037,304 @@ msgid "" msgstr "" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 -msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "ą¹€ąø”ąø„ą¹Œą¹„ąø„ąø„ą¹€ąø­ąø™ąø•ą¹Œ" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "ą¹ƒąøŠą¹‰ Hotmail " - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "ą¹ƒąøŠą¹‰ąø„ąø³ąøŖąø±ą¹ˆąø‡ąø—ąøµą¹ˆąø£ąø°ąøšąøø: " - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "ąø­ąøµą¹€ąø”ąø„ą¹Œą¹ąøˆą¹‰ąø‡ą¹€ąø•ąø·ąø­ąø™" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 -msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 #, fuzzy -msgid "Show email information" -msgstr "ą¹ąøŖąø”ąø‡ąø‚ą¹‰ąø­ąø”ąø¹ąø„ąø­ąøµą¹€ąø”ąø„ą¹Œą¹ƒąø™ąø£ąø²ąø¢ąøŠąø·ą¹ˆąø­ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" +msgid "Always" +msgstr "ą¹„ąø”ą¹ˆąø­ąø¢ąø¹ą¹ˆ" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 -msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "ąø£ąø²ąø¢ąøŠąø·ą¹ˆąø­ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­ ตอนนี้เต็ดแค้ว" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "ąø™ą¹ˆąø²ą¹€ąøšąø·ą¹ˆąø­" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" -msgstr "ą¹ąøŖąø”ąø‡ąøąø²ąø£ą¹€ąø•ąø·ąø­ąø™ą¹€ąø”ąø·ą¹ˆąø­ą¹„ąø”ą¹‰ąø£ąø±ąøšąø­ąøµą¹€ąø”ąø„ą¹Œ" +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." +msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "ąøŸąø­ąø™ąø•ą¹Œąø‚ąø­ąø‡ąø‚ą¹‰ąø­ąø„ąø§ąø²ąø”: " + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 +msgid "" +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "ąøšąø±ąø‡ąø„ąø±ąøšąø‚ą¹‰ąø­ąø„ąø§ąø²ąø”ąø‚ąø­ąø‡ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­ą¹ƒąø«ą¹‰ą¹ƒąøŠą¹‰ąøŸąø­ąø™ąø•ą¹Œ: " + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 +msgid "" +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "ค้น&หารายชื่อ" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 #, fuzzy msgid "&Emoticon Themes" msgstr "แสดง&ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œ" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 #, fuzzy msgid "Available emoticon styles:" msgstr "แสดง&ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œ" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 #, fuzzy msgid "&Custom Emoticons" msgstr "ąøąø²ąø£ą¹Œąø•ąø¹ąø™ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œ" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 msgid "Custom emoticons for this account:" msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -#, fuzzy -msgid "Click" -msgstr "(ąøšąø„ą¹Šąø­ąø„)" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 #, fuzzy msgid "Re&name" msgstr "ąøŠąø·ą¹ˆąø­ąø„ąøøąø“" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 #, fuzzy msgid "Remo&ve" msgstr "เอาออก" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +#, fuzzy +msgid "Web Browser" +msgstr "ąøąøøąø«ąø„ąø²ąøšą¹ąø”ąø‡" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +msgid "&Use the KDE default browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "ąøžąø¹ąø”:" +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "ą¹€ąø”ąø„ą¹Œą¹„ąø„ąø„ą¹€ąø­ąø™ąø•ą¹Œ" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +msgid "&Use the KDE default email client" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +#, fuzzy +msgid "File Transfers" +msgstr "ą¹„ąøŸąø„ą¹ŒąøŖą¹ˆąø‡ąø­ąø­ąø" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "ąøšąø±ąø™ąø—ąø¶ąøąøąø²ąø£ąøŖąø™ąø—ąø™ąø²ą¹ƒąø™ą¹„ąø”ą¹€ąø£ąø„ąø—ąø­ąø£ąøµą¹ˆ: " + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +#, fuzzy +msgid "and" +msgstr "ą¹€ąøŖąøµąø¢ą¹ƒąøˆ" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "ą¹„ąøŸąø„ą¹ŒąøŖą¹ˆąø‡ąø­ąø­ąø" #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -878,76 +1344,110 @@ msgstr "ąø•ąø­ąø™ąø™ąøµą¹‰ą¹„ąø”ą¹ˆąø­ąø¢ąø¹ą¹ˆąø«ąø™ą¹‰ąø²ąø„ąø­ąø”ąøÆ" msgid "Your name" msgstr "ąøŠąø·ą¹ˆąø­ąø„ąøøąø“" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" +#: chat/chat.cpp:124 +msgid "" +"You can't start this invitation because there are multiple contacts in this " +"chat." +msgstr "ąø„ąøøąø“ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ąø—ąø³ąøąø²ąø£ą¹€ąøŠąø·ą¹‰ąø­ą¹€ąøŠąø“ąøą¹€ąøžąø£ąø²ąø°ąø§ą¹ˆąø²ąø”ąøµąø«ąø„ąø²ąø¢ąø„ąø­ąø™ą¹€ąø—ą¹‡ąøąø—ą¹Œą¹ƒąø™ąø«ą¹‰ąø­ąø‡ąøŖąø™ąø—ąø™ąø²ąø™ąøµą¹‰" -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "ą¹„ąø”ą¹ˆąø­ąø¢ąø¹ą¹ˆ" +#: chat/chat.cpp:158 +#, fuzzy +msgid "%1 has joined the chat." +msgstr "%1 ą¹€ąø‚ą¹‰ąø²ąø£ą¹ˆąø§ąø”ąø§ąø‡ąøŖąø™ąø—ąø™ąø²" -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "ą¹€ąø”ąøµą¹‹ąø¢ąø§ąøąø„ąø±ąøšąø”ąø²ą¹ƒąø«ąø”ą¹ˆ" +#: chat/chat.cpp:211 +#, fuzzy +msgid "The conversation went idle, %1 has left the chat." +msgstr "ąøąø²ąø£ąøŖąø™ąø—ąø™ąø²ąø§ą¹ˆąø²ąø‡ąø„ąø‡, %1 ąø­ąø­ąøąøˆąø²ąøąøąø²ąø£ąøŖąø™ąø—ąø™ąø²" -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "ąøąø³ąø„ąø±ąø‡ąø¢ąøøą¹ˆąø‡" +#: chat/chat.cpp:215 +#, fuzzy +msgid "%1 has left the chat." +msgstr "%1 ąø­ąø­ąøąøˆąø²ąøąøąø²ąø£ąøŖąø™ąø—ąø™ąø²" -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "ą¹„ąø”ą¹ˆą¹ąøŖąø”ąø‡" +#: chat/chat.cpp:364 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 and %2" +msgstr "%1 แคะ %2 ąøąø³ąø„ąø±ąø‡ąøžąø“ąø”ąøžą¹Œ" -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "ąø§ą¹ˆąø²ąø‡" +#: chat/chat.cpp:371 +msgctxt "Name of a chat tab" +msgid "%1 et al." +msgstr "" -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "ąø­ąø­ąøŸą¹„ąø„ąø™ą¹Œ" +#: chat/chat.cpp:630 +#, fuzzy +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" +msgstr "(ąø‚ą¹‰ąø­ąø„ąø§ąø²ąø”ąø™ąøµą¹‰ąø–ąø¹ąøąøŖą¹ˆąø‡ą¹‚ąø”ąø¢ąø­ąø±ąø•ą¹‚ąø™ąø”ąø±ąø•ąø“)" -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "ąøąø³ąø„ąø±ąø‡ąø„ąøøąø¢ą¹‚ąø—ąø£ąøØąø±ąøžąø—ą¹Œ" +#: chat/chat.cpp:934 +#, fuzzy +msgid "You received a wink from %1." +msgstr "ąø„ąøøąø“ą¹„ąø”ą¹‰ąø£ąø±ąøšąø§ąø“ąø‡ąø„ą¹Œąøˆąø²ąø %1" -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "ไปกณนข้าว" +#: chat/chat.cpp:971 +msgid "" +"The wink could not be displayed. Make sure you have 'cabextract' installed." +msgstr "ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ą¹ąøŖąø”ąø‡ąø§ąø“ąø‡ąø„ą¹Œą¹„ąø”ą¹‰ ą¹ƒąø«ą¹‰ą¹€ąøŠą¹‡ąø„ąø§ą¹ˆąø²ą¹„ąø”ą¹‰ąø•ąø“ąø”ąø•ąø±ą¹‰ąø‡ cabextract ą¹„ąø§ą¹‰ą¹€ąø£ąøµąø¢ąøšąø£ą¹‰ąø­ąø¢ą¹ąø„ą¹‰ąø§" -#: chat/chatmaster.cpp:1061 +#: chat/chat.cpp:980 +msgid "The wink could not be displayed. The data could not be read." +msgstr "ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ą¹ąøŖąø”ąø‡ąø§ąø“ąø‡ąø„ą¹Œą¹„ąø”ą¹‰ ą¹€ąøžąø£ąø²ąø°ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ąø­ą¹ˆąø²ąø™ąø‚ą¹‰ąø­ąø”ąø¹ąø„ą¹„ąø”ą¹‰" + +#: chat/chat.cpp:1080 +#, fuzzy +msgid "You have received a wink from %1" +msgstr "ąø„ąøøąø“ą¹„ąø”ą¹‰ąø£ąø±ąøšąø§ąø“ąø‡ąø„ą¹Œąøˆąø²ąø %1" + +#: chat/chat.cpp:1100 +#, fuzzy +msgid "You received a nudge from %1!" +msgstr "ąø„ąøøąø“ą¹„ąø”ą¹‰ąø£ąø±ąøš nudge จาก %1 !" + +#: chat/chat.cpp:1119 +#, fuzzy +msgid "The message '%1' could not be sent." +msgstr "ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ąøŖą¹ˆąø‡ąø‚ą¹‰ąø­ąø„ąø§ąø²ąø” '%1'" + +#: chat/chat.cpp:1183 +msgid "You've sent a nudge to %1!" +msgstr "ąø„ąøøąø“ą¹„ąø”ą¹‰ąø—ąø³ąøąø²ąø£ąøŖą¹ˆąø‡ nudge ą¹„ąø›ą¹ƒąø«ą¹‰ %1 !" + +#: chat/chat.cpp:1190 +msgid "You've sent a nudge!" +msgstr "ąøŖą¹ˆąø‡ nudge" + +#: chat/chatmaster.cpp:1219 msgid "%1 is sending a wink: %2" msgstr "%1 ąøąø³ąø„ąø±ąø‡ąøŖą¹ˆąø‡ąø§ąø“ąø‡ąø„ą¹Œ %2" -#: chat/chatmessagestyle.cpp:302 +#: chat/chatmessagestyle.cpp:298 #, fuzzy msgid "%1 says:" msgstr "%1 ąøžąø¹ąø”: " -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 msgid "Add this emoticon: %1" msgstr "ą¹€ąøžąø“ą¹ˆąø”ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œ" -#: chat/chatview.cpp:529 +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 +msgid "&Invite" +msgstr "ą¹€&ąøŠąø·ą¹‰ąø­ą¹€ąøŠąø“ąø" + +#: chat/chatview.cpp:695 msgid "" "Could not save chat log. Make sure you have permission to write in the " "folder where logs are being saved." msgstr "ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ąø—ąø³ąøąø²ąø£ąøšąø±ąø™ąø—ąø¶ąøąø„ą¹‡ąø­ąø„ą¹„ąøŸąø„ą¹Œ ąøąø£ąøøąø“ąø²ąø•ąø£ąø§ąøˆąøŖąø­ąøšąøŖąø“ąø—ąø˜ąø“ą¹Œąøąø²ąø£ąøšąø±ąø™ąø—ąø¶ąøą¹ƒąø™ą¹ąøŸą¹‰ąø”ąø—ąøµą¹ˆąø•ą¹‰ąø­ąø‡ąøąø²ąø£ą¹€ąøą¹‡ąøš" -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 msgid "" "The file '%1' already exists.\n" "do you want to overwrite it?" @@ -955,377 +1455,426 @@ msgstr "" "ą¹„ąøŸąø„ą¹Œ '%1' ąø”ąøµąø­ąø¢ąø¹ą¹ˆą¹ąø„ą¹‰ąø§\n" "ąø•ą¹‰ąø­ąø‡ąøąø²ąø£ą¹€ąø‚ąøµąø¢ąø™ąø—ąø±ąøšąø«ąø£ąø·ąø­ą¹„ąø”ą¹ˆ ?" -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 msgid "Overwrite File" msgstr "ą¹€ąø‚ąøµąø¢ąø™ąø—ąø±ąøšą¹„ąøŸąø„ą¹Œ" -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 msgid "Over&write" msgstr "" -#: chat/chatview.cpp:977 +#: chat/chatview.cpp:1275 #, fuzzy msgid "Add this &Emoticon..." msgstr "ą¹€ąøžąø“ą¹ˆąø”&ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œ" -#: chat/chatview.cpp:984 +#: chat/chatview.cpp:1282 #, fuzzy msgid "Send &Email" msgstr "&ąøŖą¹ˆąø‡ąø­ąøµą¹€ąø”ąø„ą¹Œ" -#: chat/chatview.cpp:988 +#: chat/chatview.cpp:1286 #, fuzzy msgid "Copy E&mail" msgstr "ąøą¹Šąø­ąø›ąø›ąøµą¹‰ąø­ąøµą¹€ąø”ąø„ą¹Œ" -#: chat/chatview.cpp:995 +#: chat/chatview.cpp:1293 msgid "Visit &Link" msgstr "ą¹€ąø‚ą¹‰ąø²ą¹„ąø›ąø—ąøµą¹ˆąø„ąø“ąø‡ąøą¹Œ" -#: chat/chatview.cpp:999 +#: chat/chatview.cpp:1297 msgid "Copy &Address" msgstr "ąøą¹Šąø­ąø›ąø›ąøµą¹‰ą¹€ąø­ą¹‡ąø”ą¹€ąø”ąø£ąøŖ" -#: chat/chatview.cpp:1013 +#: chat/chatview.cpp:1312 msgid "&Copy text" msgstr "ąøą¹Šąø­ąø›ąø›ąøµą¹‰ąø‚ą¹‰ąø­ąø„ąø§ąø²ąø”ą¹€ąø—ą¹‡ąøąø‹ą¹Œ" -#: chat/chatview.cpp:1014 +#: chat/chatview.cpp:1313 msgid "Select &All" msgstr "เคือกทั้งหดด" -#: chat/chatview.cpp:1015 +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 #, fuzzy msgid "Save chat to &File" msgstr "ส่&ąø‡ą¹„ąøŸąø„ą¹Œ" -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "สนทนา" - -#: chat/chatwindow.cpp:239 -msgid "" -"You can't start this invitation because there are multiple contacts in this " -"chat." -msgstr "ąø„ąøøąø“ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ąø—ąø³ąøąø²ąø£ą¹€ąøŠąø·ą¹‰ąø­ą¹€ąøŠąø“ąøą¹€ąøžąø£ąø²ąø°ąø§ą¹ˆąø²ąø”ąøµąø«ąø„ąø²ąø¢ąø„ąø­ąø™ą¹€ąø—ą¹‡ąøąø—ą¹Œą¹ƒąø™ąø«ą¹‰ąø­ąø‡ąøŖąø™ąø—ąø™ąø²ąø™ąøµą¹‰" - -#: chat/chatwindow.cpp:276 -#, fuzzy -msgid "%1 has joined the chat." -msgstr "%1 ą¹€ąø‚ą¹‰ąø²ąø£ą¹ˆąø§ąø”ąø§ąø‡ąøŖąø™ąø—ąø™ąø²" - -#: chat/chatwindow.cpp:327 -#, fuzzy -msgid "The conversation went idle, %1 has left the chat." -msgstr "ąøąø²ąø£ąøŖąø™ąø—ąø™ąø²ąø§ą¹ˆąø²ąø‡ąø„ąø‡, %1 ąø­ąø­ąøąøˆąø²ąøąøąø²ąø£ąøŖąø™ąø—ąø™ąø²" - -#: chat/chatwindow.cpp:331 -#, fuzzy -msgid "%1 has left the chat." -msgstr "%1 ąø­ąø­ąøąøˆąø²ąøąøąø²ąø£ąøŖąø™ąø—ąø™ąø²" - -#: chat/chatwindow.cpp:593 -#, fuzzy -msgid "%1 - Chat" -msgstr "สนทนา" - -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" -msgstr "" - -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" -msgstr "" - -#: chat/chatwindow.cpp:757 -#, fuzzy -msgid "Contacts" -msgstr "ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" - -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 -#, fuzzy -msgid "Emoticons" -msgstr "ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œ" - -#: chat/chatwindow.cpp:819 -#, fuzzy -msgid "My emoticons" -msgstr "ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œąø‚ąø­ąø‡ąø‰ąø±ąø™" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" -msgstr "(ąø‚ą¹‰ąø­ąø„ąø§ąø²ąø”ąø™ąøµą¹‰ąø–ąø¹ąøąøŖą¹ˆąø‡ą¹‚ąø”ąø¢ąø­ąø±ąø•ą¹‚ąø™ąø”ąø±ąø•ąø“)" - -#: chat/chatwindow.cpp:1502 -msgid "" -"The wink could not be displayed. Make sure you have 'cabextract' installed." -msgstr "ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ą¹ąøŖąø”ąø‡ąø§ąø“ąø‡ąø„ą¹Œą¹„ąø”ą¹‰ ą¹ƒąø«ą¹‰ą¹€ąøŠą¹‡ąø„ąø§ą¹ˆąø²ą¹„ąø”ą¹‰ąø•ąø“ąø”ąø•ąø±ą¹‰ąø‡ cabextract ą¹„ąø§ą¹‰ą¹€ąø£ąøµąø¢ąøšąø£ą¹‰ąø­ąø¢ą¹ąø„ą¹‰ąø§" - -#: chat/chatwindow.cpp:1511 -msgid "The wink could not be displayed. The data could not be read." -msgstr "ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ą¹ąøŖąø”ąø‡ąø§ąø“ąø‡ąø„ą¹Œą¹„ąø”ą¹‰ ą¹€ąøžąø£ąø²ąø°ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ąø­ą¹ˆąø²ąø™ąø‚ą¹‰ąø­ąø”ąø¹ąø„ą¹„ąø”ą¹‰" - -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" -msgstr "ąø„ąøøąø“ą¹„ąø”ą¹‰ąø£ąø±ąøšąø§ąø“ąø‡ąø„ą¹Œąøˆąø²ąø %1" - -#: chat/chatwindow.cpp:1755 -#, fuzzy -msgid "Show Side&bar" -msgstr "แสดง/ąø‹ą¹ˆąø­ąø™ &ą¹ąø–ąøšąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" - -#: chat/chatwindow.cpp:1756 -#, fuzzy -msgid "Show the contact sidebar" -msgstr "ą¹ąøŖąø”ąø‡ąø«ąø£ąø·ąø­ąø‹ą¹ˆąø­ąø™ą¹ąø–ąøšąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -#, fuzzy -msgid "Hide Side&bar" -msgstr "แสดง/ąø‹ą¹ˆąø­ąø™ &ą¹ąø–ąøšąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -#, fuzzy -msgid "Hide the contact sidebar" -msgstr "ą¹ąøŖąø”ąø‡ąø«ąø£ąø·ąø­ąø‹ą¹ˆąø­ąø™ą¹ąø–ąøšąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" - -#: chat/chatwindow.cpp:1787 -#, fuzzy -msgid "The message '%1' could not be sent." -msgstr "ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ąøŖą¹ˆąø‡ąø‚ą¹‰ąø­ąø„ąø§ąø²ąø” '%1'" - -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" -msgstr "ąø„ąøøąø“ą¹„ąø”ą¹‰ąø£ąø±ąøš nudge จาก %1 !" - -#: chat/chatwindow.cpp:1876 -msgid "You've sent a nudge to %1!" -msgstr "ąø„ąøøąø“ą¹„ąø”ą¹‰ąø—ąø³ąøąø²ąø£ąøŖą¹ˆąø‡ nudge ą¹„ąø›ą¹ƒąø«ą¹‰ %1 !" - -#: chat/chatwindow.cpp:1883 -msgid "You've sent a nudge!" -msgstr "ąøŖą¹ˆąø‡ nudge" - -#: chat/chatwindow.cpp:1972 -#, fuzzy -msgid "%1 is typing." -msgstr "%1 ąøąø³ąø„ąø±ąø‡ąøžąø“ąø”ąøžą¹Œ" - -#: chat/chatwindow.cpp:1981 -#, fuzzy -msgid "%1 and %2 are typing." -msgstr "%1 แคะ %2 ąøąø³ąø„ąø±ąø‡ąøžąø“ąø”ąøžą¹Œ" - -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." -msgstr "%1, %2 แคะ %3 ąø­ąø·ą¹ˆąø™ ๆ ąøąø³ąø„ąø±ąø‡ąøžąø“ąø”ąøžą¹Œ" - -#: chat/chatwindowinterface.cpp:175 +#: chat/chatwindow.cpp:489 msgid "&Chat" msgstr "&สนทนา" -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 -msgid "&Invite" -msgstr "ą¹€&ąøŠąø·ą¹‰ąø­ą¹€ąøŠąø“ąø" - -#: chat/chatwindowinterface.cpp:179 +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "ส่&ąø‡ą¹„ąøŸąø„ą¹Œ" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "ą¹€ąø£ąø“ą¹ˆąø”ąø•ą¹‰ąø™ąøąø²ąø£ąø›ąø£ąø°ąøŠąøøąø”" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 #, fuzzy msgid "Send a &Nudge!" msgstr "ąøŖą¹ˆąø‡ Nudge !" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "ąøšąø±ąø™ąø—ąø¶ąøąøąø²ąø£ąøŖąø™ąø—ąø™ąø²" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 #, fuzzy msgid "&Emoticons" msgstr "ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œ" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +#, fuzzy +msgid "Close &All Tabs" +msgstr "ąø›ąø“ąø”ą¹ąø—ą¹‡ąøš" + +#: chat/chatwindow.cpp:504 #, fuzzy msgid "Meeting" msgstr "ąøąø³ąø«ąø™ąø”ąø„ą¹ˆąø²" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "ą¹€ąø£ąø“ą¹ˆąø” หรือ หยุด การสนทนา" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "ą¹€ąø›ąø„ąøµą¹ˆąø¢ąø™&ąøŸąø­ąø™ąø•ą¹Œ" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "ą¹€ąø›ąø„ąøµą¹ˆąø¢ąø™ąøŖąøµąøŸ&ąø­ąø™ąø•ą¹Œ" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 #, fuzzy msgid "&Font" msgstr "&ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 #, fuzzy msgid "Font &Color" msgstr "ą¹€ąø›ąø„ąøµą¹ˆąø¢ąø™ąøŖąøµąøŸ&ąø­ąø™ąø•ą¹Œ" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +#, fuzzy +msgid "Emoticons" +msgstr "ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œ" + +#: chat/chatwindow.cpp:658 +#, fuzzy +msgid "My emoticons" +msgstr "ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œąø‚ąø­ąø‡ąø‰ąø±ąø™" + +#: chat/chatwindow.cpp:738 #, fuzzy msgid "&Settings" msgstr "ąøąø³ąø«ąø™ąø”ąø„ą¹ˆąø²" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "แสดง&ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œ" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +#, fuzzy +msgid "Hide Side&bar" +msgstr "แสดง/ąø‹ą¹ˆąø­ąø™ &ą¹ąø–ąøšąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "แสดง/ąø‹ą¹ˆąø­ąø™ &ą¹ąø–ąøšąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +#, fuzzy +msgid "Hide the contact sidebar" +msgstr "ą¹ąøŖąø”ąø‡ąø«ąø£ąø·ąø­ąø‹ą¹ˆąø­ąø™ą¹ąø–ąøšąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +#, fuzzy +msgid "Close all tabs" +msgstr "ąø›ąø“ąø”ą¹ąø—ą¹‡ąøš" + +#: chat/chatwindow.cpp:856 +#, fuzzy +msgid "Close current tab" +msgstr "ąø›ąø“ąø”ą¹ąø—ą¹‡ąøš" + +#: chat/chatwindow.cpp:1467 +#, fuzzy +msgid "Show Side&bar" +msgstr "แสดง/ąø‹ą¹ˆąø­ąø™ &ą¹ąø–ąøšąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" + +#: chat/chatwindow.cpp:1468 +#, fuzzy +msgid "Show the contact sidebar" +msgstr "ą¹ąøŖąø”ąø‡ąø«ąø£ąø·ąø­ąø‹ą¹ˆąø­ąø™ą¹ąø–ąøšąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" + +#: chat/chatwindow.cpp:1565 +#, fuzzy +msgid "%1 is typing." +msgstr "%1 ąøąø³ąø„ąø±ąø‡ąøžąø“ąø”ąøžą¹Œ" + +#: chat/chatwindow.cpp:1575 +#, fuzzy +msgid "%1 and %2 are typing." +msgstr "%1 แคะ %2 ąøąø³ąø„ąø±ąø‡ąøžąø“ąø”ąøžą¹Œ" + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "%1, %2 แคะ %3 ąø­ąø·ą¹ˆąø™ ๆ ąøąø³ąø„ąø±ąø‡ąøžąø“ąø”ąøžą¹Œ" + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "สนทนา" + +#: chat/chatwindow.cpp:1615 +#, fuzzy +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "สนทนา" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "&ąøŖą¹ˆąø‡ąø­ąøµą¹€ąø”ąø„ą¹Œ" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 #, fuzzy msgid "&View Profile" msgstr "&ą¹ąøŖąø”ąø‡ą¹‚ąø›ąø£ą¹„ąøŸąø„ą¹Œ" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "&ą¹€ąøžąø“ą¹ˆąø”ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 #, fuzzy msgid "A&llow Contact" msgstr "&ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­ąø£ąø±ąøšąø­ąø™ąøøąøąø²ąø•" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 #, fuzzy msgid "&Delete Contact" msgstr "&ąø„ąøšąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "&ąøšąø„ą¹Šąø­ąø„ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "&ąø¢ąøą¹€ąø„ąø“ąøąøąø²ąø£ąøšąø„ą¹Šąø­ąø„ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 #, fuzzy msgid "&Friendly Name" msgstr "ąøŠąø·ą¹ˆąø­ą¹€ąø„ą¹ˆąø™: " -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 #, fuzzy msgid "&Email Address" msgstr "ąø­ąøµą¹€ąø”ąø„ą¹Œ:" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "ąøą¹Šąø­ąø›ąø›ąøµą¹‰" -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 #, fuzzy msgid "Blocked" msgstr "(ąøšąø„ą¹Šąø­ąø„)" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 #, fuzzy msgid "The contact is %1" msgstr "ą¹€ąøžąø“ą¹ˆąø”ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­ą¹„ąø›ąø¢ąø±ąø‡ąø£ąø²ąø¢ąøąø²ąø£ą¹€ąøžąø·ą¹ˆąø­ąø™ąø‚ąø­ąø‡ąø„ąøøąø“" -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +#, fuzzy +msgid "Add to Chat" +msgstr "ą¹€ąøžąø“ą¹ˆąø”ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" + +#: chat/emoticonsidebar.cpp:213 +#, fuzzy +msgid "Insert new" +msgstr "ą¹€ąøžąø“ą¹ˆąø”ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œ" + +#: chat/emoticonsidebar.cpp:214 +msgid "Edit" +msgstr "" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +#, fuzzy +msgid "Remove" +msgstr "เอาออก" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 msgid "Web Messenger" msgstr "" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +msgid "Windows Live Messenger %1" +msgstr "" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "ąø­ąø­ąøŸą¹„ąø„ąø™ą¹Œ" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "ąø­ąø™ąøøąøąø²ąø•" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "เอาออก" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 +#, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr "%1 แคะ %2 ąøąø³ąø„ąø±ąø‡ąøžąø“ąø”ąøžą¹Œ" + +#: contactlistviewdelegate.cpp:150 msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" -msgstr "ą¹€ąø­ąø„ą¹€ąø„ą¹‰ąø²ąø—ą¹Œąø™ąøµą¹‰ą¹„ąø”ą¹ˆąø”ąøµąø•ąø¹ą¹‰ąøˆąø”ąø«ąø”ąø²ąø¢ hotmail" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "ą¹„ąø”ą¹ˆąø­ąø¢ąø¹ą¹ˆ" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "ą¹€ąø”ąøµą¹‹ąø¢ąø§ąøąø„ąø±ąøšąø”ąø²ą¹ƒąø«ąø”ą¹ˆ" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "ąøąø³ąø„ąø±ąø‡ąø¢ąøøą¹ˆąø‡" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "ą¹„ąø”ą¹ˆą¹ąøŖąø”ąø‡" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" +msgstr "ąø§ą¹ˆąø²ąø‡" + +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "ąøąø³ąø„ąø±ąø‡ąø„ąøøąø¢ą¹‚ąø—ąø£ąøØąø±ąøžąø—ą¹Œ" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "ไปกณนข้าว" + +#: dialogs/addcontactdialog.cpp:48 #, fuzzy msgid "Add a Contact" msgstr "ą¹€ąøžąø“ą¹ˆąø”ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 #, fuzzy msgid "No group" msgstr "&คบกคุ่ด" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 #, fuzzy msgid "Add New Emoticon" msgstr "แสดง&ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œ" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œ" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œ \"%1\" ąø”ąøµąø­ąø¢ąø¹ą¹ˆą¹ąø„ą¹‰ąø§ ąø•ą¹‰ąø­ąø‡ąøąø²ąø£ąø—ąø±ąøšąø«ąø£ąø·ąø­ą¹„ąø”ą¹ˆ?" @@ -1333,66 +1882,67 @@ msgstr "ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œ \"%1\" ดีอยู่ msgid "Specify an Away message" msgstr "ą¹€ąøˆąø²ąø°ąøˆąø‡ąø‚ą¹‰ąø­ąø„ąø§ąø²ąø”ą¹€ąø”ąø·ą¹ˆąø­ą¹„ąø”ą¹ˆąø­ąø¢ąø¹ą¹ˆ" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "ą¹€ąø„ąø·ąø­ąøąøŠąø·ą¹ˆąø­ąøŖąø³ąø«ąø£ąø±ąøšąøšąøøąø„ąø„ąø„ąø™ąøµą¹‰" - -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" -msgstr "ą¹ąøŖąø”ąø‡ąø«ąø™ą¹‰ąø²ąø•ą¹ˆąø²ąø‡ąø›ą¹Šąø­ąø›ąø­ąø±ąøžą¹€ąø”ąø·ą¹ˆąø­ąøšąøøąø„ąø„ąø„ąø™ąøµą¹‰ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œąø«ąø£ąø·ąø­ąø­ąø­ąøŸą¹„ąø„ąø™ą¹Œ" - -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "ąø£ąø¹ąø›ąø ąø²ąøž: " - -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "เสียง: " - -#: dialogs/contactpropertiesdialog.cpp:234 -msgid "Contact Properties for %1" -msgstr "ąø„ąøøąø“ąøŖąø”ąøšąø±ąø•ąø“ąø„ąø­ąø™ą¹€ąø—ą¹‡ąøąø—ą¹ŒąøŖąø³ąø«ąø£ąø±ąøš %1" - -#: dialogs/contactpropertiesdialog.cpp:266 +#: dialogs/contactaddeduserdialog.cpp:85 #, fuzzy -msgid "Email address: " -msgstr "ąø­ąøµą¹€ąø”ąø„ą¹Œ:" +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " +msgstr "ą¹„ąø”ą¹‰ąø”ąøµąøąø²ąø£ą¹€ąøžąø“ą¹ˆąø”ąø„ąøøąø“ą¹€ąø‚ą¹‰ąø²ą¹„ąø›ąø¢ąø±ąø‡ąø£ąø²ąø¢ąøŠąø·ą¹ˆąø­ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­ ąø„ąøøąø“ąø•ą¹‰ąø­ąø‡ąøąø²ąø£ąø—ąøµą¹ˆąøˆąø° " -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "ąøŠąø·ą¹ˆąø­ąø›ąø±ąøˆąøˆąøøąøšąø±ąø™: " +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­" -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" -msgstr "ąø«ąø™ą¹‰ąø²ąø•ą¹ˆąø²ąø‡ą¹€ąø™ą¹‡ąø—ą¹€ąø§ąø“ąø£ą¹Œąø" +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +msgid "Not seen yet" +msgstr "" -#: dialogs/networkwindow.cpp:57 +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +#, fuzzy +msgid "No messages yet" +msgstr "ą¹ąøŖąø”ąø‡ą¹€ąø§ąø„ąø²ąøšąø™ąø‚ą¹‰ąø­ąø„ąø§ąø²ąø”" + +#: dialogs/contactpropertiesdialog.cpp:381 +msgid "Last seen: %1" +msgstr "" + +#: dialogs/contactpropertiesdialog.cpp:382 +msgid "Last message: %1" +msgstr "" + +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "ąø­ąøµą¹€ąø”ąø„ą¹Œ" + +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "ą¹€ąø”ąø„ą¹Œą¹„ąø„ąø„ą¹€ąø­ąø™ąø•ą¹Œ" + +#: dialogs/networkwindow.cpp:79 #, fuzzy msgid "S&ave tab" msgstr "ąøšąø±ąø™ąø—ąø¶ąøą¹ąø—ą¹‡ąøš" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 #, fuzzy msgid "C&lear tab" msgstr "ąø¢ąøą¹€ąø„ąø“ąøą¹ąø—ą¹‡ąøš" -#: dialogs/networkwindow.cpp:59 -#, fuzzy -msgid "Cl&ose tab" -msgstr "ąø›ąø“ąø”ą¹ąø—ą¹‡ąøš" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 #, fuzzy msgid "" "No connections are present.\n" "Cannot open the Network Window." msgstr "ą¹„ąø”ą¹ˆąø”ąøµąøąø²ąø£ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­ą¹ƒąø™ąø‚ąø“ąø°ąø™ąøµą¹‰ ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ą¹€ąø›ąø“ąø”ąø«ąø™ą¹‰ąø²ąø•ą¹ˆąø²ąø‡ą¹€ąø™ą¹‡ąø—ą¹€ąø§ąø“ąø£ą¹Œąøą¹„ąø”ą¹‰" -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 #, fuzzy msgid "" "Could not save the Network Window log. Make sure you have permission to " @@ -1400,60 +1950,86 @@ msgid "" msgstr "" "ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ąøšąø±ąø™ąø—ąø¶ąøąø„ą¹Šąø­ąø„ą¹„ąøŸąø„ą¹Œą¹€ąøąøµą¹ˆąø¢ąø§ąøąø±ąøšąø£ąø°ąøšąøšą¹€ąø™ą¹‡ąø—ą¹€ąø§ąø“ąø£ą¹Œąøą¹„ąø”ą¹‰ ą¹ƒąø«ą¹‰ą¹ąø™ą¹ˆą¹ƒąøˆąø§ą¹ˆąø²ąø„ąøøąø“ąø”ąøµąøŖąø“ąø—ąø˜ąø“ą¹Œą¹ƒąø™ąøąø²ąø£ą¹€ąø‚ąøµąø¢ąø™ąø—ąø±ąøšą¹ąøŸą¹‰ąø”ąø—ąøµą¹ˆąøąø³ąø„ąø±ąø‡ąøˆąø°ąøšąø±ąø™ąø—ąø¶ąø" -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ąø›ąø“ąø”ąø«ąø™ą¹‰ąø²ąø•ą¹ˆąø²ąø‡ąøąø²ąø£ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­ąø«ąø„ąø±ąøą¹„ąø”ą¹‰" -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +#, fuzzy +msgid "Cannot send commands to this kind of connection!" +msgstr "ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ąø›ąø“ąø”ąø«ąø™ą¹‰ąø²ąø•ą¹ˆąø²ąø‡ąøąø²ąø£ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­ąø«ąø„ąø±ąøą¹„ąø”ą¹‰" + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 #, fuzzy msgid "Completed" msgstr "ąø„ąø­ąø”ąøžąø“ąø§ą¹€ąø•ąø­ąø£ą¹Œ" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "%1 MB" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "%1 kB" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "%1 bytes" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +msgid "%1 of %2 received." msgstr "" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +msgid "%1 of %2 sent." msgstr "" -#: dialogs/transferwindow.cpp:55 -#, fuzzy -msgid "File Transfers" -msgstr "ą¹„ąøŸąø„ą¹ŒąøŖą¹ˆąø‡ąø­ąø­ąø" +#: dialogs/transferentry.cpp:373 +msgid "infinite" +msgstr "" -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 #, fuzzy msgid "Cl&ean Up" msgstr "ค้างออก" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " "the theme folder '%1'." @@ -1461,420 +2037,459 @@ msgstr "" "ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ąøšąø±ąø™ąø—ąø¶ąøąø£ąø¹ąø›ą¹ąøšąøšą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œ ą¹ƒąø«ą¹‰ą¹ąø™ą¹ˆą¹ƒąøˆąø§ą¹ˆąø²ąø„ąøøąø“ąø”ąøµąøŖąø“ąø—ąø˜ąø“ą¹Œą¹ƒąø™ąøąø²ąø£ą¹€ąø‚ąøµąø¢ąø™ąø—ąø±ąøšą¹ąøŸą¹‰ąø”ąø£ąø¹ąø›ą¹ąøšąøš (theme) '%" "1'." -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 #, fuzzy msgid "Smile" msgstr "ยณ้ด" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "ąø§ąø“ąø‡ąø„ą¹Œ" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "ą¹ąø„ąøšąø„ąø“ą¹‰ąø™" -#: emoticontheme.cpp:797 +#: emoticontheme.cpp:812 msgid "Big smile" msgstr "ยณ้ดปากกว้าง" -#: emoticontheme.cpp:798 +#: emoticontheme.cpp:813 #, fuzzy msgid "Sad" msgstr "ą¹€ąøŖąøµąø¢ą¹ƒąøˆ" -#: emoticontheme.cpp:799 +#: emoticontheme.cpp:814 msgid "Crying" msgstr "ร้องไห้" -#: emoticontheme.cpp:800 +#: emoticontheme.cpp:815 msgid "Angry" msgstr "ą¹‚ąøąø£ąø˜" -#: emoticontheme.cpp:801 +#: emoticontheme.cpp:816 msgid "Confused" msgstr "ąøŖąø±ąøšąøŖąø™" -#: emoticontheme.cpp:802 +#: emoticontheme.cpp:817 msgid "Embarrassed" msgstr "เขณน" -#: emoticontheme.cpp:803 +#: emoticontheme.cpp:818 #, fuzzy msgid "Disappointed" msgstr "ยกเคณก" -#: emoticontheme.cpp:804 +#: emoticontheme.cpp:819 msgid "Hot" msgstr "" -#: emoticontheme.cpp:805 +#: emoticontheme.cpp:820 msgid "Baring teeth" msgstr "" -#: emoticontheme.cpp:806 +#: emoticontheme.cpp:821 msgid "Nerd" msgstr "ąø™ą¹ˆąø²ą¹€ąøšąø·ą¹ˆąø­" -#: emoticontheme.cpp:807 +#: emoticontheme.cpp:822 msgid "Sick" msgstr "ąø›ą¹ˆąø§ąø¢" -#: emoticontheme.cpp:808 +#: emoticontheme.cpp:823 msgid "Surprised" msgstr "ąø›ąø£ąø°ąø«ąø„ąø²ąø”ą¹ƒąøˆ" -#: emoticontheme.cpp:809 +#: emoticontheme.cpp:824 msgid "Party" msgstr "ąø›ąø²ąø£ą¹Œąø•ąøµą¹‰" -#: emoticontheme.cpp:810 +#: emoticontheme.cpp:825 msgid "Sleepy" msgstr "ąø‡ą¹ˆąø§ąø‡ąø™ąø­ąø™" -#: emoticontheme.cpp:811 +#: emoticontheme.cpp:826 msgid "Thinking" msgstr "กำคังคณด" -#: emoticontheme.cpp:812 +#: emoticontheme.cpp:827 msgid "Don't tell anyone" msgstr "ąø«ą¹‰ąø²ąø”ąøšąø­ąøąø„ąø™ąø­ąø·ą¹ˆąø™" -#: emoticontheme.cpp:813 +#: emoticontheme.cpp:828 #, fuzzy msgid "Secret telling" msgstr "ąøšąø­ąøąø„ąø§ąø²ąø”ąø„ąø±ąøš" -#: emoticontheme.cpp:814 +#: emoticontheme.cpp:829 msgid "Eye-rolling" msgstr "กรอกตาไปดา" -#: emoticontheme.cpp:815 +#: emoticontheme.cpp:830 msgid "Sarcastic" msgstr "" -#: emoticontheme.cpp:816 +#: emoticontheme.cpp:831 msgid "I don't know" msgstr "ą¹„ąø”ą¹ˆąø—ąø£ąø²ąøš" -#: emoticontheme.cpp:817 +#: emoticontheme.cpp:832 #, fuzzy msgid "Be right back" msgstr "ą¹€ąø”ąøµą¹‹ąø¢ąø§ąøąø„ąø±ąøšąø”ąø²ą¹ƒąø«ąø”ą¹ˆ" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "ąø™ąø²ąø‡ąøŸą¹‰ąø²" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "กอด" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "ąøœąø¹ą¹‰ąøŠąø²ąø¢" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "ąø«ąø±ąø§ą¹ƒąøˆą¹€ąø•ą¹‰ąø™ą¹ąø£ąø‡" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "ąøąøøąø«ąø„ąø²ąøšą¹ąø”ąø‡" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "" -#: emoticontheme.cpp:824 +#: emoticontheme.cpp:839 msgid "Dog face" msgstr "หน้าหดา" -#: emoticontheme.cpp:825 +#: emoticontheme.cpp:840 #, fuzzy msgid "Sun" msgstr "ąø­ąø²ąø—ąø“ąø•ąø¢ą¹Œ" -#: emoticontheme.cpp:826 +#: emoticontheme.cpp:841 msgid "Devil" msgstr "ąø›ąøµąøØąø²ąøˆ" -#: emoticontheme.cpp:827 +#: emoticontheme.cpp:842 msgid "Right hug" msgstr "กอด" -#: emoticontheme.cpp:828 +#: emoticontheme.cpp:843 msgid "Girl" msgstr "ąøœąø¹ą¹‰ąø«ąøąø“ąø‡" -#: emoticontheme.cpp:829 +#: emoticontheme.cpp:844 msgid "Broken heart" msgstr "อกหัก" -#: emoticontheme.cpp:830 +#: emoticontheme.cpp:845 msgid "Wilted rose" msgstr "" -#: emoticontheme.cpp:831 +#: emoticontheme.cpp:846 msgid "Thumbs down" msgstr "" -#: emoticontheme.cpp:832 +#: emoticontheme.cpp:847 msgid "Cat face" msgstr "หน้าแดว" -#: emoticontheme.cpp:833 +#: emoticontheme.cpp:848 msgid "Sleeping half-moon" msgstr "" -#: emoticontheme.cpp:834 +#: emoticontheme.cpp:849 msgid "Red lips" msgstr "ปากแดง" -#: emoticontheme.cpp:835 +#: emoticontheme.cpp:850 #, fuzzy msgid "Clapping" msgstr "ąø›ąø£ąøšąø”ąø·ąø­" -#: emoticontheme.cpp:836 +#: emoticontheme.cpp:851 msgid "Crossed fingers" msgstr "" -#: emoticontheme.cpp:837 +#: emoticontheme.cpp:852 msgid "Auto" msgstr "อัตโนดัตณ" -#: emoticontheme.cpp:838 +#: emoticontheme.cpp:853 msgid "Airplane" msgstr "ą¹€ąø„ąø£ąø·ą¹ˆąø­ąø‡ąøšąø“ąø™" -#: emoticontheme.cpp:839 +#: emoticontheme.cpp:854 msgid "Turtle" msgstr "ą¹€ąø•ą¹ˆąø²" -#: emoticontheme.cpp:840 +#: emoticontheme.cpp:855 #, fuzzy msgid "Snail" msgstr "หอยทาก" -#: emoticontheme.cpp:841 +#: emoticontheme.cpp:856 msgid "Black sheep" msgstr "แกะดำ" -#: emoticontheme.cpp:842 +#: emoticontheme.cpp:857 msgid "Goat" msgstr "ą¹ąøžąø°" -#: emoticontheme.cpp:843 +#: emoticontheme.cpp:858 msgid "Vampire bat" msgstr "ค้างคาวดูดเคือด" -#: emoticontheme.cpp:844 +#: emoticontheme.cpp:859 msgid "Pizza" msgstr "ąøžąø“ąøŠąø‹ą¹ˆąø²" -#: emoticontheme.cpp:845 +#: emoticontheme.cpp:860 msgid "Beer mug" msgstr "ąø–ąø±ąø‡ą¹€ąøšąøµąø¢ąø£ą¹Œ" -#: emoticontheme.cpp:846 +#: emoticontheme.cpp:861 msgid "Martini glass" msgstr "ą¹ąøą¹‰ąø§ąø”ąø²ąø•ąø“ąø™ąøµą¹ˆ" -#: emoticontheme.cpp:847 +#: emoticontheme.cpp:862 msgid "Coffee cup" msgstr "ą¹ąøą¹‰ąø§ąøąø²ą¹ąøŸ" -#: emoticontheme.cpp:848 +#: emoticontheme.cpp:863 msgid "Birthday cake" msgstr "เค้กวันเกณด" -#: emoticontheme.cpp:849 +#: emoticontheme.cpp:864 msgid "Plate" msgstr "ąøˆąø²ąø™" -#: emoticontheme.cpp:850 +#: emoticontheme.cpp:865 msgid "Bowl" msgstr "ถ้วย" -#: emoticontheme.cpp:851 +#: emoticontheme.cpp:866 msgid "Star" msgstr "ดาว" -#: emoticontheme.cpp:852 +#: emoticontheme.cpp:867 msgid "Rainbow" msgstr "รุ้ง" -#: emoticontheme.cpp:853 +#: emoticontheme.cpp:868 msgid "Stormy cloud" msgstr "ą¹€ąø”ąø†ąøąø™" -#: emoticontheme.cpp:854 +#: emoticontheme.cpp:869 msgid "Lightning" msgstr "ąøŸą¹‰ąø²ą¹ąø„ąøš" -#: emoticontheme.cpp:855 +#: emoticontheme.cpp:870 msgid "Umbrella" msgstr "ร่ด" -#: emoticontheme.cpp:856 +#: emoticontheme.cpp:871 msgid "Island with a palm tree" msgstr "ąø•ą¹‰ąø™ąø›ąø²ąø£ą¹Œąø”ąøšąø™ą¹€ąøąø²ąø°" -#: emoticontheme.cpp:857 +#: emoticontheme.cpp:872 msgid "Telephone receiver" msgstr "ą¹€ąø„ąø£ąø·ą¹ˆąø­ąø‡ąø£ąø±ąøšą¹‚ąø—ąø£ąøØąø±ąøžąø—ą¹Œ" -#: emoticontheme.cpp:858 +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "ą¹‚ąø—ąø£ąøØąø±ąøžąø—ą¹Œąø”ąø·ąø­ąø–ąø·ąø­" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "ąø­ąøµą¹€ąø”ąø„ą¹Œ" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 #, fuzzy msgid "Clock" msgstr "นาฬณกา" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 #, fuzzy msgid "Camera" msgstr "กค้อง" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "ą¹ąøœą¹ˆąø™ąøŸąø“ąø”ąø„ą¹Œ" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "โน้ต" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "ąøąøøąøą¹ąøˆąø”ąø·ąø­" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 #, fuzzy msgid "Money" msgstr "เงณน" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "ąø«ąø„ąø­ąø”ą¹„ąøŸ" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "บุหรี่" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "ąø„ąø¹ąøąøŸąøøąø•ąøšąø­ąø„" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "ąø„ąø­ąø”ąøžąø“ąø§ą¹€ąø•ąø­ąø£ą¹Œ" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 msgid "KMess Icon" msgstr "ไอคอน KMess" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "ą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ą¹ƒąø«ą¹‰ąøšąø£ąø“ąøąø²ąø£ą¹„ąø”ą¹‰" + +#: initialview.cpp:377 +msgid "Connect" +msgstr "ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "&ąø¢ąøą¹€ąø„ąø“ąøąøąø²ąø£ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "" -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "" -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "&กคุ่ดใหด่" + +#: kmess.cpp:226 #, fuzzy msgid "Add a group" msgstr "&ą¹€ąøžąø“ą¹ˆąø”ąøąø„ąøøą¹ˆąø”" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "ąøšąø±ąø™ąø—ąø¶ąøąøŠąø·ą¹ˆąø­ą¹ƒąø«ąø”ą¹ˆąøŖąø³ąø«ąø£ąø±ąøšąøąø„ąøøą¹ˆąø”ąø™ąøµą¹‰: " -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "" - -#: kmess.cpp:638 +#: kmess.cpp:569 #, fuzzy msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" msgstr "ąø„ąøøąø“ą¹ąø™ą¹ˆą¹ƒąøˆąø—ąøµą¹ˆąøˆąø°ąø—ąø³ąøąø²ąø£ąø„ąøšąøąø„ąøøą¹ˆąø”ąø™ąøµą¹‰ ?" -#: kmess.cpp:640 +#: kmess.cpp:571 #, fuzzy msgid "Remove contact" msgstr "&ąø„ąøšąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" -#: kmess.cpp:641 kmess.cpp:684 -#, fuzzy -msgid "Remove" -msgstr "เอาออก" - -#: kmess.cpp:642 +#: kmess.cpp:573 #, fuzzy msgid "Remove and block" msgstr "ą¹€ąø­ąø²ąø­ąø­ąøą¹ąø„ąø°ąøšąø„ą¹Šąø­ąø„" -#: kmess.cpp:681 -#, fuzzy +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "ąø„ąøøąø“ą¹ąø™ą¹ˆą¹ƒąøˆąø—ąøµą¹ˆąøˆąø°ąø—ąø³ąøąø²ąø£ąø„ąøšąøąø„ąøøą¹ˆąø”ąø™ąøµą¹‰ąø‚ąø­ąø‡ąøˆąø²ąøąø£ąø²ąø¢ąøŠąø·ą¹ˆąø­ ?" -#: kmess.cpp:683 +#: kmess.cpp:631 #, fuzzy -msgid "Remove group" -msgstr "&คบกคุ่ด" +msgctxt "dialog button" +msgid "Remove" +msgstr "เอาออก" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "ąø™ąøµą¹ˆą¹€ąø›ą¹‡ąø™ąøąø„ąøøą¹ˆąø”ąøžąø“ą¹€ąøØąø©ą¹ąø„ąø°ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ą¹€ąø›ąø„ąøµą¹ˆąø¢ąø™ą¹ąø›ąø„ąø‡ą¹„ąø”ą¹‰" -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 #, fuzzy msgid "Rename group" msgstr "ą¹€&ąø›ąø„ąøµą¹ˆąø¢ąø™ąøŠąø·ą¹ˆąø­ąøąø„ąøøą¹ˆąø”" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "การขอ Authentication ą¹„ąø”ą¹ˆąøŖąø³ą¹€ąø£ą¹‡ąøˆ" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "ąø¢ąøą¹€ąø„ąø“ąøąøąø²ąø£ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­" -#: kmess.cpp:1441 +#: kmess.cpp:1408 msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" -#: kmess.cpp:1445 +#: kmess.cpp:1412 #, fuzzy msgid "Error with notifications" msgstr "ą¹€ąøąø“ąø”ąø‚ą¹‰ąø­ąøœąø“ąø”ąøžąø„ąø²ąø”ąøąø±ąøšąø£ąø°ąøšąøšą¹ąøˆą¹‰ąø‡ą¹€ąø•ąø·ąø­ąø™" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "ไอคอน KMess" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "ą¹€&ąø­ąø„ąøŠąø±ą¹ˆąø™" @@ -1896,735 +2511,611 @@ msgstr "ค้น&หารายชื่อ" msgid "Search by &Interest" msgstr "ąø„ą¹‰ąø™ąø«ąø²ąøˆąø²ąøąøŖąø“ą¹ˆąø‡ąø—ąøµą¹ˆ&ąøŖąø™ą¹ƒąøˆ" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "ค้น&หารายชื่อ" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "&ą¹€ąø­ąø„ą¹€ąø„ą¹‰ąø²ąø—ą¹Œą¹ƒąø«ąø”ą¹ˆ" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "&ąø•ąø±ą¹‰ąø‡ąø„ą¹ˆąø²ą¹€ąø­ąø„ą¹€ąø„ą¹‰ąø²ąø—ą¹Œ" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "ą¹€ąøŠąø·ą¹ˆąø­&ąø”ąø•ą¹ˆąø­" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "&ąø¢ąøą¹€ąø„ąø“ąøąøąø²ąø£ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "แสดง&ą¹‚ąø›ąø£ą¹„ąøŸąø„ą¹Œ" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "&สถานะ" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "ą¹ąøŖąø”ąø‡ąø£ąø²ąø¢ąøŠąø·ą¹ˆąø­ąø—ąøµą¹ˆąø­ąø™ąøøąøąø²ąø•" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 #, fuzzy msgid "Show &Offline Contacts" msgstr "ą¹ąøŖąø”ąø‡ąø£ąø²ąø¢ąøŠąø·ą¹ˆąø­ąø—ąøµą¹ˆąø­ąø­ąøŸą¹„ąø„ąø™ą¹Œ" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "&ą¹ąøŖąø”ąø‡ą¹ąø„ąø°ąø„ąøšąø£ąø²ąø¢ąøŠąø·ą¹ˆąø­" -#: kmessinterface.cpp:303 +#: kmessinterface.cpp:318 #, fuzzy -msgid "Show &Display Pictures" +msgid "Show &Empty Groups" +msgstr "แสดง&ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œ" + +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" msgstr "ą¹ąøŖąø”ąø‡ąø£ąø¹ąø›ąø ąø²ąøž" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "ยณ้ด" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "&ą¹€ąø£ąøµąø¢ąø‡ąø£ąø²ąø¢ąøŠąø·ą¹ˆąø­ą¹‚ąø”ąø¢" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "กคุ่ด" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ / ąø­ąø­ąøŸą¹„ąø„ąø™ą¹Œ" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "ą¹ąøŖąø”ąø‡ąø«ąø™ą¹‰ąø²ąø•ą¹ˆąø²ąø‡ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œ" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "ą¹ąøŖąø”ąø‡ąø«ąø™ą¹‰ąø²ąø•ą¹ˆąø²ąø‡ą¹€ąø™ą¹‡ąø—ą¹€ąø§ąø“ąø£ą¹Œąø" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +msgid "[%1] %2 goes online" +msgstr "" + +#: kmessview.cpp:363 +msgid "[%1] %2 goes offline" +msgstr "" + +#: kmessview.cpp:559 #, fuzzy msgid "Cha&t" msgstr "สนทนา" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "&ąøžąø£ąø­ąøŸą¹€ąøžąø­ąø£ąø•ąøµą¹‰" -#: kmessview.cpp:492 +#: kmessview.cpp:569 #, fuzzy msgid "&Remove from group" msgstr "&คบออกจากกคุ่ด" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +#, fuzzy +msgid "&Listening Music" +msgstr "ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œ" + +#: kmessview.cpp:601 #, fuzzy msgid "&Copy to Group" msgstr "ย้ายไปยัง&กคุ่ด" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "ย้ายไปยัง&กคุ่ด" -#: kmessview.cpp:549 +#: kmessview.cpp:646 #, fuzzy msgid "Move Group &Down" msgstr "ย้ายไปยัง&กคุ่ด" -#: kmessview.cpp:550 +#: kmessview.cpp:647 #, fuzzy msgid "Move Group &Up" msgstr "ย้ายไปยัง&กคุ่ด" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "&คบกคุ่ด" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "ą¹€&ąø›ąø„ąøµą¹ˆąø¢ąø™ąøŠąø·ą¹ˆąø­ąøąø„ąøøą¹ˆąø”" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 #, fuzzy msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "ąø­ąøµą¹€ąø”ąø„ą¹Œ" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "" -#: kmessview.cpp:918 +#: kmessview.cpp:1075 +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "" + +#: kmessview.cpp:1076 +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "" + +#: kmessview.cpp:1085 msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "" -#: kmessview.cpp:921 +#: kmessview.cpp:1090 #, fuzzy -msgctxt "Contacts count in group tooltip" +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +#, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" + +#: kmessview.cpp:1504 #, fuzzy msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "(ą¹ƒąøŖą¹ˆąø‚ą¹‰ąø­ąø„ąø§ąø²ąø”ąø—ąøµą¹ˆąø™ąøµą¹ˆ)" -#: kmessview.cpp:1543 -#, fuzzy -msgid "You have 1 new e-mail in your inbox." -msgstr " ąø”ąøµąø­ąøµą¹€ąø”ąø„ą¹Œą¹ƒąø«ąø”ą¹ˆą¹ƒąø™ąøąø„ą¹ˆąø­ąø‡ą¹€ąø”ąø„ą¹Œ" +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" -#: kmessview.cpp:1547 -#, fuzzy -msgid "You have %1 new emails in your inbox." -msgstr " ą¹€ąø”ąø„ą¹Œą¹ƒąø«ąø”ą¹ˆą¹ƒąø™ąøąø„ą¹ˆąø­ąø‡ąø£ąø±ąøšą¹€ąø”ąø„ą¹Œ" - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 msgid "Project support" msgstr "" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 #, fuzzy msgid "Current developer" msgstr "ąø™ąø±ąøąøžąø±ąø’ąø™ąø² Gnome Meeting" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 #, fuzzy msgid "" "German translation, testing, documentation, web master, project management, " "etc..." msgstr "แปคเป็นภาษาเยอรดัน, ąø—ąø”ąøŖąø­ąøš, เอกสาร" -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "" -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "ąøąø²ąø£ą¹Œąø•ąø¹ąø™ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œ" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "ąø£ąø¹ąø›ą¹ąøšąøšą¹€ąøŖąøµąø¢ąø‡ąø”ąø²ąø•ąø£ąøąø²ąø™" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "ą¹ąø›ąø„ą¹€ąø›ą¹‡ąø™ąø­ąø²ąø£ąøšąø“ąø" -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 #, fuzzy msgid "More Arabic translation" msgstr "แปคเป็นภาษาตุรกี" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "ą¹ąø›ąø„ą¹€ąø›ą¹‡ąø™ąø ąø²ąø©ąø²ąøšąø„ąø²ąø‹ąø“ąø„ โปรตุเกส" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 #, fuzzy msgid "Catalan translation" msgstr "แปคเป็นคาตาคาน" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 #, fuzzy msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "ą¹ąø›ąø„ą¹€ąø›ą¹‡ąø™ąøˆąø·ąø™" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 #, fuzzy msgid "More Simplified Chinese translation" msgstr "ą¹ąø›ąø„ą¹€ąø›ą¹‡ąø™ąøˆąø·ąø™" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 #, fuzzy msgid "Traditional Chinese translation" msgstr "ą¹ąø›ąø„ą¹€ąø›ą¹‡ąø™ąø ąø²ąø©ąø²ąøˆąøµąø™" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 #, fuzzy msgid "Danish translation" msgstr "ą¹ąø›ąø„ą¹€ąø›ą¹‡ąø™ąø ąø²ąø©ąø²ą¹€ąø”ąø™ąø”ąø²ąø£ą¹Œąø" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 #, fuzzy msgid "More Danish translation" msgstr "ą¹ąø›ąø„ą¹€ąø›ą¹‡ąø™ąø ąø²ąø©ąø²ą¹€ąø”ąø™ąø”ąø²ąø£ą¹Œąø" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "ą¹ąø›ąø„ą¹€ąø›ą¹‡ąø™ąø ąø²ąø©ąø²ąø”ąø±ąøŠąø—ą¹Œ" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 #, fuzzy msgid "More Dutch translation" msgstr "ą¹ąø›ąø„ą¹€ąø›ą¹‡ąø™ąø ąø²ąø©ąø²ąø”ąø±ąøŠąø—ą¹Œ" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 #, fuzzy msgid "Estonian translation" msgstr "แปคเป็นภาษาเอสโทเนีย" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 #, fuzzy msgid "Finnish translation" msgstr "ą¹ąø›ąø„ą¹€ąø›ą¹‡ąø™ąø ąø²ąø©ąø²ąøŸąø“ąø™ą¹ąø„ąø™ąø”ą¹Œ" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 #, fuzzy msgid "More Finnish translation" msgstr "ą¹ąø›ąø„ą¹€ąø›ą¹‡ąø™ąø ąø²ąø©ąø²ąøŸąø“ąø™ą¹ąø„ąø™ąø”ą¹Œ" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "ą¹ąø›ąø„ą¹€ąø›ą¹‡ąø™ąø ąø²ąø©ąø²ąøąø£ąø±ą¹ˆąø‡ą¹€ąøØąøŖ" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 #, fuzzy msgid "More French translation, MSN6 emoticon definitions" msgstr "ą¹ąø›ąø„ą¹€ąø›ą¹‡ąø™ąø ąø²ąø©ąø²ąøąø£ąø±ą¹ˆąø‡ą¹€ąøØąøŖ" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 #, fuzzy msgid "More French translation" msgstr "ą¹ąø›ąø„ą¹€ąø›ą¹‡ąø™ąø ąø²ąø©ąø²ąøąø£ąø±ą¹ˆąø‡ą¹€ąøØąøŖ" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 #, fuzzy msgid "Hungarian translation" msgstr "ą¹ąø›ąø„ą¹€ąø›ą¹‡ąø™ąø ąø²ąø©ąø²ąø®ąø±ąø‡ąøąø²ą¹€ąø„ąøµą¹ˆąø¢ąø™" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 #, fuzzy msgid "More Italian translation" msgstr "ą¹ąø›ąø„ą¹€ąø›ą¹‡ąø™ąø ąø²ąø©ąø²ąø­ąø“ąø•ąø²ą¹€ąø„ąøµą¹ˆąø¢ąø™" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 #, fuzzy msgid "Korean translation" msgstr "แปคเป็นภาษาเกาหคี" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 #, fuzzy msgid "Norsk BokmĆ„l translation" msgstr "แปคเป็นภาษา Norsk Bokml" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 #, fuzzy msgid "Slovenian translation" msgstr "แปคเป็นภาษาสโควาเกีย" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "แปคเป็นภาษาสเปน" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 #, fuzzy msgid "More Spanish translation" msgstr "ą¹ąø›ąø„ą¹€ąø›ą¹‡ąø™ąø ąø²ąø©ąø²ąøŖą¹€ąø›ąø™ąø­ąø·ą¹ˆąø™ ๆ" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 #, fuzzy msgid "Swedish translation" msgstr "แปคเป็นภาษาสวีเดน" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 #, fuzzy msgid "Thai translation" msgstr "แปคเป็นภาษาไทย" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "แปคเป็นภาษาตุรกี" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 #, fuzzy msgid "More Turkish translation" msgstr "แปคเป็นภาษาตุรกี" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -#, fuzzy -msgid "Guido Solinas" -msgstr "ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "ą¹„ąøŸąø„ą¹ŒąøŖą¹ˆąø‡ąø­ąø­ąø" + +#: main.cpp:134 msgid "P4-Context field support" msgstr "" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "ą¹„ąø”ą¹‰ąø£ąø±ąøšąø£ąø«ąø±ąøŖą¹„ąøŸąø„ą¹Œąø•ą¹‰ąø™ąø‰ąøšąø±ąøš" -#: main.cpp:120 -msgid "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" msgstr "" -#: main.cpp:120 +#: main.cpp:138 +msgid "KWallet support" +msgstr "" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "ą¹ąø›ąø„ą¹€ąø›ą¹‡ąø™ąø­ąø²ąø£ąøšąø“ąø" + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "" -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "ąø™ąø±ąøąøžąø±ąø’ąø™ąø² Gnome Meeting" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "" -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 +#: main.cpp:150 msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "" -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 +#: main.cpp:152 msgid "Close-to-tray icon screenshot code" msgstr "" -#: main.cpp:131 +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 #, fuzzy msgid "Your name here?" msgstr "ąøŠąø·ą¹ˆąø­ąø„ąøøąø“ąø—ąøµą¹ˆąø™ąøµą¹ˆ" -#: main.cpp:131 +#: main.cpp:156 msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" -#: main.cpp:134 +#: main.cpp:159 #, fuzzy msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "ąøŠąø·ą¹ˆąø­ąø„ąøøąø“" -#: main.cpp:135 +#: main.cpp:160 #, fuzzy msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "ąø­ąøµą¹€ąø”ąø„ą¹Œ:" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "ąø„ą¹Šąø­ąø„ąø­ąø“ąø™ą¹‚ąø”ąø¢ąø­ąø±ąø•ą¹‚ąø™ąø”ąø±ąø•ąø“ąø”ą¹‰ąø§ąø¢ąø­ąøµą¹€ąø”ąø„ą¹Œąø™ąøµą¹‰" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 #, fuzzy msgid "The contact cancelled the session." msgstr "ąø£ąø²ąø¢ąøŠąø·ą¹ˆąø­ą¹„ąø”ą¹‰ąø–ąø¹ąøąø¢ąøą¹€ąø„ąø“ąøą¹€ąø‹ąøŖąø‹ąø±ą¹ˆąø™" -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 #, fuzzy msgid "The contact rejected the invitation." msgstr "ąø£ąø²ąø¢ąøŠąø·ą¹ˆąø­ą¹„ąø”ą¹‰ąø–ąø¹ąøąø¢ąøą¹€ąø„ąø“ąø" -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 #, fuzzy msgid "You have cancelled the session." msgstr "ąø„ąøøąø“ą¹„ąø”ą¹‰ąø—ąø³ąøąø²ąø£ąø¢ąøą¹€ąø„ąø“ąøą¹€ąø‹ąøŖąø‹ąø±ą¹ˆąø™" -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 #, fuzzy msgid "You have rejected the invitation." msgstr "คุณได้ทำการยกเคณก" -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +#, fuzzy +msgid "Do you want to accept or cancel?" msgstr "ąø„ąøøąø“ąø•ą¹‰ąø­ąø‡ąøąø²ąø£ą¹ƒąø«ą¹‰ ยอดรับ หรือ ยกเคณก?" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +#, fuzzy +msgid "Click to cancel." msgstr "ąø„ąø„ąø“ą¹Šąøąø—ąøµą¹ˆ ยกเคณก." -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 #, fuzzy msgid "Do you want to accept the file: %1 (%2)" msgstr "ąø„ąøøąø“ąø•ą¹‰ąø­ąø‡ąøąø²ąø£ąø—ąøµą¹ˆąøˆąø°ąø¢ąø­ąø”ąø£ąø±ąøšą¹„ąøŸąø„ą¹Œ: %1 (%2)" -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 #, fuzzy msgid "The transfer of %1 failed. Couldn't open file." msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œ %1 ąøœąø“ąø”ąøžąø„ąø²ąø” ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ą¹€ąø›ąø“ąø”ą¹„ąøŸąø„ą¹Œ " -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "ąø¢ąø­ąø”ąø£ąø±ąøšąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œ" + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 #, fuzzy msgid "Connecting to %1, port %2" msgstr "ąøąø²ąø£ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­ą¹„ąø›ąø¢ąø±ąø‡ %1, ąøžąø­ąø£ą¹Œąø• %2" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 #, fuzzy msgid "The transfer was cancelled" msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œąø–ąø¹ąøąø¢ąøą¹€ąø„ąø“ąø" -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 #, fuzzy msgid "Connection established" msgstr "ąøąø²ąø£ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­ą¹„ąø”ą¹‰ą¹€ąø£ąø“ą¹ˆąø”ąø•ą¹‰ąø™" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 #, fuzzy msgid "Successfully transferred file: %1" msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹ŒąøŖąø³ą¹€ąø£ą¹‡ąøˆ" -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 #, fuzzy msgid "The transfer of %1 failed. The file does not exist." msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œ %1 ąøœąø“ąø”ąøžąø„ąø²ąø” ą¹„ąø”ą¹ˆąø”ąøµą¹„ąøŸąø„ą¹Œ " -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 #, fuzzy msgid "The transfer of %1 failed. The file could not be read." msgstr "ą¹€ąøąø“ąø”ąøąø²ąø£ąøœąø“ąø”ąøžąø„ąø²ąø”ą¹ƒąø™ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œ %1 ą¹„ąøŸąø„ą¹Œą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ąø­ą¹ˆąø²ąø™ą¹„ąø”ą¹‰" -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 #, fuzzy msgid "Sending file %1" msgstr "ąøąø³ąø„ąø±ąø‡ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œ %1" -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "ąø¢ąø­ąø”ąø£ąø±ąøšąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œ" - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 #, fuzzy msgid "The file transfer invitation was cancelled. Bad data was received." @@ -2632,211 +3123,248 @@ msgstr "" "ąø„ąøøąø“ą¹„ąø”ą¹‰ąø”ąøµąøąø²ąø£ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­\n" "ąøˆąø²ąøą¹€ąø„ąø£ąø·ą¹ˆąø­ąø‡ąø­ąø·ą¹ˆąø™ą¹ąø„ą¹‰ąø§" -#: network/applications/filetransferp2p.cpp:345 -#, fuzzy -msgid "The transfer of %1 failed. Couldn't open file" -msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œ %1 ą¹€ąøąø“ąø”ąø‚ą¹‰ąø­ąøœąø“ąø”ąøžąø„ąø²ąø” ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ą¹€ąø›ąø“ąø”ą¹„ąøŸąø„ą¹Œą¹„ąø”ą¹‰ " +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." +msgstr "" -#: network/applications/filetransferp2p.cpp:524 +#: network/applications/filetransferp2p.cpp:348 #, fuzzy -msgid "The contact cancelled the transfer." +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "" +"ą¹„ąøŸąø„ą¹Œ '%1' ąø”ąøµąø­ąø¢ąø¹ą¹ˆą¹ąø„ą¹‰ąø§\n" +"ąø•ą¹‰ąø­ąø‡ąøąø²ąø£ą¹€ąø‚ąøµąø¢ąø™ąø—ąø±ąøšąø«ąø£ąø·ąø­ą¹„ąø”ą¹ˆ ?" + +#: network/applications/filetransferp2p.cpp:378 +#, fuzzy +msgid "The transfer of file "%1" failed. Couldn't save the file." +msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œ %1 ąøœąø“ąø”ąøžąø„ąø²ąø” ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ą¹€ąø›ąø“ąø”ą¹„ąøŸąø„ą¹Œ " + +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 +#, fuzzy +msgid "The contact has cancelled the transfer of file "%1"." msgstr "ąø¢ąøą¹€ąø„ąø“ąøąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œ" -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "ąø„ąøøąø“ą¹„ąø”ą¹‰ąø—ąø³ąøąø²ąø£ąø¢ąøą¹€ąø„ąø“ąøą¹€ąø‹ąøŖąø‹ąø±ą¹ˆąø™" + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "" -#: network/applications/filetransferp2p.cpp:768 +#: network/applications/filetransferp2p.cpp:676 #, fuzzy -msgid "The transfer of %1 failed. The file does not exist." +msgid "Successfully sent file "%1"." +msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹ŒąøŖąø³ą¹€ąø£ą¹‡ąøˆ" + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹ŒąøŖąø³ą¹€ąø£ą¹‡ąøˆ" + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œ %1 ą¹€ąøąø“ąø”ąø„ąø§ąø²ąø”ąøœąø“ąø”ąøžąø„ąø²ąø” ą¹„ąø”ą¹ˆąø”ąøµą¹„ąøŸąø„ą¹Œąø™ąøµą¹‰ąø­ąø¢ąø¹ą¹ˆ" -#: network/applications/filetransferp2p.cpp:773 +#: network/applications/filetransferp2p.cpp:818 #, fuzzy -msgid "The transfer of %1 failed. The file could not be read." +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œ %1 ą¹€ąøąø“ąø”ąø„ąø§ąø²ąø”ąøœąø“ąø”ąøžąø„ąø²ąø” ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ąø­ą¹ˆąø²ąø™ą¹„ąø”ą¹‰" -#: network/applications/filetransferp2p.cpp:809 +#: network/applications/filetransferp2p.cpp:855 #, fuzzy -msgid "Sending file %1 (%2)" +msgid "Sending file "%1" (%2)." msgstr "ąøąø³ąø„ąø±ąø‡ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œ %1 (%2)" -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "ąø¢ąøą¹€ąø„ąø“ąøąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œ" + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "" -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 msgid "Starting GnomeMeeting. Connecting to %1." msgstr "ą¹€ąø£ąø“ą¹ˆąø” GnomeMeeting ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­ą¹„ąø›ąø¢ąø±ąø‡ %1" -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "" -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "" -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 #, fuzzy msgid "The invitation was aborted. An internal error occured." msgstr "" "ąø„ąøøąø“ą¹„ąø”ą¹‰ąø”ąøµąøąø²ąø£ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­\n" "ąøˆąø²ąøą¹€ąø„ąø£ąø·ą¹ˆąø­ąø‡ąø­ąø·ą¹ˆąø™ą¹ąø„ą¹‰ąø§" -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 #, fuzzy msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "ąøœąø“ąø”ąøžąø„ąø²ąø” ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ąøŖąø£ą¹‰ąø²ąø‡ąø‹ąø­ąø„ą¹€ąøą¹‡ąø•" -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "" -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "" -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 msgid "The invitation was aborted." msgstr "" -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "" -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 msgid "Starting KRDC. Connecting to %1." msgstr "" -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +msgid "The contact rejected the invitation. An internal error occured." msgstr "" -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +#, fuzzy +msgid "The transfer failed." +msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œą¹„ąø”ą¹ˆąøŖąø³ą¹€ąø£ą¹‡ąøˆ" + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." msgstr "" -#: network/applications/p2papplication.cpp:1503 -msgid "The transfer failed. Data preparation failed." -msgstr "" - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -msgid "The contact rejected the invitation. An internal error occured." -msgstr "" - -#: network/applications/p2papplication.cpp:1626 -#, fuzzy -msgid "The transfer failed." -msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œą¹„ąø”ą¹ˆąøŖąø³ą¹€ąø£ą¹‡ąøˆ" - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œą¹„ąø”ą¹ˆąøŖąø³ą¹€ąø£ą¹‡ąøˆ" -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +#, fuzzy +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œąøœąø“ąø”ąøžąø„ąø²ąø” ąø«ąø”ąø”ą¹€ąø§ąø„ąø²ą¹ƒąø™ąø‚ąø“ąø°ąø™ąøµą¹‰ąø£ąø­ąø¢ąø¹ąøŖą¹€ąø‹ąø­ąø£ą¹Œąø¢ąø­ąø”ąø£ąø±ąøš" + +#: network/applications/p2papplicationbase.cpp:1015 +msgid "The transfer failed. An internal error occured." +msgstr "" + +#: network/applications/p2papplicationbase.cpp:1176 +#, fuzzy +msgid "The transfer failed. Couldn't open data source." +msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œą¹„ąø”ą¹ˆąøŖąø³ą¹€ąø£ą¹‡ąøˆ ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ąø•ąø“ąø”ąø•ą¹ˆąø­ data source" + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "" + +#: network/applications/p2papplication.cpp:1071 +msgid "The transfer failed. Data preparation failed." +msgstr "" + +#: network/applications/p2papplication.cpp:1178 msgid "The invitation was cancelled. Message was not directed to us." msgstr "" -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 #, fuzzy msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œą¹„ąø”ą¹ˆąøŖąø³ą¹€ąø£ą¹‡ąøˆ" -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "" -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "" -#: network/applications/p2papplication.cpp:3297 -#, fuzzy -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œąøœąø“ąø”ąøžąø„ąø²ąø” ąø«ąø”ąø”ą¹€ąø§ąø„ąø²ą¹ƒąø™ąø‚ąø“ąø°ąø™ąøµą¹‰ąø£ąø­ąø¢ąø¹ąøŖą¹€ąø‹ąø­ąø£ą¹Œąø¢ąø­ąø”ąø£ąø±ąøš" - -#: network/applications/p2papplication.cpp:3316 -msgid "The transfer failed. An internal error occured." -msgstr "" - -#: network/applications/p2papplication.cpp:3693 -#, fuzzy -msgid "The transfer failed. Couldn't open data source." -msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œą¹„ąø”ą¹ˆąøŖąø³ą¹€ąø£ą¹‡ąøˆ ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ąø•ąø“ąø”ąø•ą¹ˆąø­ data source" - -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:3113 msgid "Waiting for connection" msgstr "" -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 #, fuzzy msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " "accept." msgstr "ąøąø²ąø£ą¹€ąøŠąø·ą¹‰ąø­ą¹€ąøŠąø“ąøąø–ąø¹ąøąø¢ąøą¹€ąø„ąø“ąø ąø«ąø”ąø”ą¹€ąø§ąø„ąø²ą¹ƒąø™ąø‚ąø“ąø°ąø™ąøµą¹‰ąø£ąø­ąø¢ąø¹ąøŖą¹€ąø‹ąø­ąø£ą¹Œąø¢ąø­ąø”ąø£ąø±ąøš" -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 #, fuzzy msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." msgstr "ąøąø²ąø£ą¹€ąøŠąø·ą¹‰ąø­ą¹€ąøŠąø“ąøąø–ąø¹ąøąø¢ąøą¹€ąø„ąø“ąø ąø«ąø”ąø”ą¹€ąø§ąø„ąø²ą¹ƒąø™ąø‚ąø“ąø°ąø™ąøµą¹‰ąø£ąø­ąø¢ąø¹ąøŖą¹€ąø‹ąø­ąø£ą¹Œąø¢ąø­ąø”ąø£ąø±ąøš" -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "" -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 msgid "You are invited to start a voice conversation." msgstr "" -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 msgid "" "You are invited to start a voice conversation but support for this was not " "installed" msgstr "" -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 msgid "You have cancelled the voice conversation." msgstr "" -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "" -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 msgid "Start voice conversation. Connecting to %1." msgstr "" -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 msgid "Start voice conversation. Listening on %1." msgstr "" -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 msgid "Inviting the contact to a voice conversation." msgstr "" -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 #, fuzzy msgid "The contact is inviting you for '%1', but this is not implemented yet." @@ -2884,664 +3412,880 @@ msgstr "ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ąø›ąø“ąø”ąø«ąø™ą¹‰ąø²ąø•ą¹ˆąø²ąø‡ąøąø²ąø£ą¹€ msgid "Receiving file %1" msgstr "ąøąø³ąø„ąø±ąø‡ąø£ąø±ąøšą¹„ąøŸąø„ą¹Œ %1" -#: network/msnconnection.cpp:477 -#, fuzzy -msgid "1 ping lost" -msgstr "ąøąø³ąø„ąø±ąø‡ąø‚ąø­ąø£ąø±ąøšąø£ąø²ąø¢ąøąø²ąø£" +#: network/msnconnection.cpp:589 +msgid "KMess could not access the remote webservice.
Details: %1" +msgstr "" -#: network/msnconnection.cpp:481 -#, fuzzy -msgid "%1 pings lost" -msgstr "ąøąø³ąø„ąø±ąø‡ąø‚ąø­ąø£ąø±ąøšąø£ąø²ąø¢ąøąø²ąø£" - -#: network/msnconnection.cpp:496 -#, fuzzy -msgid "The connection to the server was lost." -msgstr "ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­ą¹„ąø›ąø¢ąø±ąø‡ą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œ" - -#: network/msnconnection.cpp:704 +#: network/msnnotificationconnection.cpp:1317 msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" msgstr "" -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "" - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" - -#: network/msnnotificationconnection.cpp:724 -#, fuzzy -msgid "Show MSN Messenger Service status?" -msgstr "ą¹ąøŖąø”ąø‡ąøŖąø–ąø²ąø™ąø°ąøąø²ąø£ąøšąø£ąø“ąøąø²ąø£ąø‚ąø­ąø‡ .NET ?" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "ą¹€ąøąø“ąø”ąø‚ą¹‰ąø­ąøœąø“ąø”ąøžąø„ąø²ąø”ąøąø±ąøšą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œ" - -#: network/msnnotificationconnection.cpp:1344 -msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" -msgstr "" - -#: network/msnnotificationconnection.cpp:1558 +#: network/msnnotificationconnection.cpp:1532 msgid "Got synchronization" msgstr "ąø—ąø³ąøąø²ąø£ąø‹ąø“ąø‡ą¹‚ąø„ąø£ą¹„ąø™ąø—ą¹Œ" -#: network/msnnotificationconnection.cpp:1699 +#: network/msnnotificationconnection.cpp:1670 #, fuzzy -msgid "Authenticating" +msgid "Authenticating..." msgstr "การขอ Authentication ą¹„ąø”ą¹ˆąøŖąø³ą¹€ąø£ą¹‡ąøˆ" -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "ą¹„ąø”ą¹‰ąø£ąø±ąøšąøąø²ąø£ąø‚ą¹‰ąø­ąø”ąø¹ąø„ąø¢ąø·ąø™ąø¢ąø±ąø™" - -#: network/msnnotificationconnection.cpp:1752 +#: network/msnnotificationconnection.cpp:1719 msgid "Waiting for contact list..." msgstr "" -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "ąøŖą¹ˆąø‡ąø„ąø³ąø‚ąø­ą¹„ąø›ąø¢ąø±ąø‡ą¹€ąø„ąø£ąø·ą¹ˆąø­ąø‡ą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œ" - -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." msgstr "" -#: network/msnnotificationconnection.cpp:2042 +#: network/msnnotificationconnection.cpp:1894 +msgid "Authentication failed, please verify your account name and password." +msgstr "" + +#: network/msnnotificationconnection.cpp:1993 #, fuzzy msgid "Connecting..." msgstr "ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­" -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" +#: network/msnnotificationconnection.cpp:2167 +msgid "Unknown command received from the server: %1" msgstr "" -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 +#: network/msnnotificationconnection.cpp:2192 msgid "Invalid command syntax" msgstr "" -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -#, fuzzy -msgid "There was an internal error in KMess: %1" -msgstr "ą¹€ąøąø“ąø”ąø‚ą¹‰ąø­ąøœąø“ąø”ąøžąø„ąø²ąø”ąøąø±ąøšą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œąø ąø²ąø¢ą¹ƒąø™" - -#: network/msnnotificationconnection.cpp:2243 +#: network/msnnotificationconnection.cpp:2196 msgid "Invalid command parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2246 +#: network/msnnotificationconnection.cpp:2199 msgid "The email you have tried to add is not a MSN Messenger account" msgstr "" -#: network/msnnotificationconnection.cpp:2249 +#: network/msnnotificationconnection.cpp:2204 msgid "Domain name missing" msgstr "" -#: network/msnnotificationconnection.cpp:2252 +#: network/msnnotificationconnection.cpp:2208 msgid "Already logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2255 +#: network/msnnotificationconnection.cpp:2211 #, fuzzy msgid "The account name given is invalid" msgstr "ąøŠąø·ą¹ˆąø­ąøœąø¹ą¹‰ą¹ƒąøŠą¹‰ąø—ąøµą¹ˆą¹ƒąø«ą¹‰ ą¹„ąø”ą¹ˆąø–ąø¹ąøąø•ą¹‰ąø­ąø‡" -#: network/msnnotificationconnection.cpp:2258 +#: network/msnnotificationconnection.cpp:2215 msgid "" "That account name is invalid, or your passport has not been confirmed yet" msgstr "" -#: network/msnnotificationconnection.cpp:2261 +#: network/msnnotificationconnection.cpp:2218 msgid "Your contact list is full" msgstr "ąø£ąø²ąø¢ąøŠąø·ą¹ˆąø­ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­ ตอนนี้เต็ดแค้ว" -#: network/msnnotificationconnection.cpp:2264 +#: network/msnnotificationconnection.cpp:2223 msgid "Invalid SBP parameter" msgstr "" -#: network/msnnotificationconnection.cpp:2267 +#: network/msnnotificationconnection.cpp:2226 #, fuzzy msgid "This contact is already on your list" msgstr "ą¹€ąøžąø“ą¹ˆąø”ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­ą¹„ąø›ąø¢ąø±ąø‡ąø£ąø²ąø¢ąøąø²ąø£ą¹€ąøžąø·ą¹ˆąø­ąø™ąø‚ąø­ąø‡ąø„ąøøąø“" -#: network/msnnotificationconnection.cpp:2270 +#: network/msnnotificationconnection.cpp:2230 #, fuzzy msgid "This contact is not on your list" msgstr "ą¹€ąøžąø“ą¹ˆąø”ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­ą¹„ąø›ąø¢ąø±ąø‡ąø£ąø²ąø¢ąøąø²ąø£ą¹€ąøžąø·ą¹ˆąø­ąø™ąø‚ąø­ąø‡ąø„ąøøąø“" -#: network/msnnotificationconnection.cpp:2273 +#: network/msnnotificationconnection.cpp:2234 msgid "This contact is not online" msgstr "" -#: network/msnnotificationconnection.cpp:2276 +#: network/msnnotificationconnection.cpp:2239 msgid "Already in this mode" msgstr "" -#: network/msnnotificationconnection.cpp:2279 +#: network/msnnotificationconnection.cpp:2243 #, fuzzy msgid "Contact is in the opposite list" msgstr "ą¹€ąøžąø“ą¹ˆąø”ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­ą¹„ąø›ąø¢ąø±ąø‡ąø£ąø²ąø¢ąøąø²ąø£ą¹€ąøžąø·ą¹ˆąø­ąø™ąø‚ąø­ąø‡ąø„ąøøąø“" -#: network/msnnotificationconnection.cpp:2282 +#: network/msnnotificationconnection.cpp:2247 +msgid "" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." +msgstr "" + +#: network/msnnotificationconnection.cpp:2251 #, fuzzy msgid "Your contact list has too many groups" msgstr "ąø£ąø²ąø¢ąøŠąø·ą¹ˆąø­ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­ ตอนนี้เต็ดแค้ว" -#: network/msnnotificationconnection.cpp:2285 +#: network/msnnotificationconnection.cpp:2255 #, fuzzy msgid "This group can't be changed" msgstr "ąø™ąøµą¹ˆą¹€ąø›ą¹‡ąø™ąøąø„ąøøą¹ˆąø”ąøžąø“ą¹€ąøØąø©ą¹ąø„ąø°ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ą¹€ąø›ąø„ąøµą¹ˆąø¢ąø™ą¹ąø›ąø„ąø‡ą¹„ąø”ą¹‰" -#: network/msnnotificationconnection.cpp:2288 +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "ąø£ąø²ąø¢ąøŠąø·ą¹ˆąø­ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­ ตอนนี้เต็ดแค้ว" + +#: network/msnnotificationconnection.cpp:2264 msgid "This group is not empty" msgstr "" -#: network/msnnotificationconnection.cpp:2291 -msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" -msgstr "" - -#: network/msnnotificationconnection.cpp:2294 +#: network/msnnotificationconnection.cpp:2268 msgid "The group name is too long" msgstr "" -#: network/msnnotificationconnection.cpp:2297 +#: network/msnnotificationconnection.cpp:2273 msgid "Attempted to change group \"0\"" msgstr "" -#: network/msnnotificationconnection.cpp:2300 +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +#, fuzzy +msgid "There was an internal error in KMess: %1" +msgstr "ą¹€ąøąø“ąø”ąø‚ą¹‰ąø­ąøœąø“ąø”ąøžąø„ąø²ąø”ąøąø±ąøšą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œąø ąø²ąø¢ą¹ƒąø™" + +#: network/msnnotificationconnection.cpp:2277 #, fuzzy msgid "Invalid Group" msgstr "ą¹€&ąø›ąø„ąøµą¹ˆąø¢ąø™ąøŠąø·ą¹ˆąø­ąøąø„ąøøą¹ˆąø”" -#: network/msnnotificationconnection.cpp:2303 +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 msgid "Switchboard server failed" msgstr "" -#: network/msnnotificationconnection.cpp:2306 +#: network/msnnotificationconnection.cpp:2287 #, fuzzy msgid "Transfer to switchboard server failed" msgstr "ąøŖą¹ˆąø‡ąø„ąø³ąø‚ąø­ą¹„ąø›ąø¢ąø±ąø‡ą¹€ąø„ąø£ąø·ą¹ˆąø­ąø‡ą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œ" -#: network/msnnotificationconnection.cpp:2309 +#: network/msnnotificationconnection.cpp:2291 msgid "Direct connection (MSNSLP) error, connection failed" msgstr "" -#: network/msnnotificationconnection.cpp:2312 +#: network/msnnotificationconnection.cpp:2295 msgid "Required field missing" msgstr "" -#: network/msnnotificationconnection.cpp:2315 +#: network/msnnotificationconnection.cpp:2299 msgid "Not logged in" msgstr "" -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" +#: network/msnnotificationconnection.cpp:2302 +msgid "No permissions given for this account" msgstr "" -#: network/msnnotificationconnection.cpp:2322 +#: network/msnnotificationconnection.cpp:2307 msgid "Command is disabled" msgstr "" -#: network/msnnotificationconnection.cpp:2325 +#: network/msnnotificationconnection.cpp:2310 msgid "Your account is banned." msgstr "" -#: network/msnnotificationconnection.cpp:2329 +#: network/msnnotificationconnection.cpp:2314 #, fuzzy msgid "Challenge response failed" msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œą¹„ąø”ą¹ˆąøŖąø³ą¹€ąø£ą¹‡ąøˆ" -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" +#: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" msgstr "" -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" +#: network/msnnotificationconnection.cpp:2323 +msgid "You are opening chat sessions too fast" msgstr "" -#: network/msnnotificationconnection.cpp:2341 +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" +msgstr "ąø„ąøøąø“ą¹„ąø”ą¹‰ąø—ąø³ąøąø²ąø£ąø¢ąøą¹€ąø„ąø“ąøą¹€ąø‹ąøŖąø‹ąø±ą¹ˆąø™" + +#: network/msnnotificationconnection.cpp:2334 msgid "Unexpected command sequence" msgstr "" -#: network/msnnotificationconnection.cpp:2344 +#: network/msnnotificationconnection.cpp:2338 #, fuzzy msgid "Bad friend name" msgstr "ąøŠąø·ą¹ˆąø­ą¹€ąø„ą¹ˆąø™: " -#: network/msnnotificationconnection.cpp:2348 +#: network/msnnotificationconnection.cpp:2344 msgid "Bad CVR data" msgstr "" -#: network/msnnotificationconnection.cpp:2353 +#: network/msnnotificationconnection.cpp:2350 msgid "The server reports KMess is flooding it with too many data" msgstr "" -#: network/msnnotificationconnection.cpp:2358 +#: network/msnnotificationconnection.cpp:2357 #, fuzzy msgid "Authentication ticket was incorrect" msgstr "การขอ Authentication ą¹„ąø”ą¹ˆąøŖąø³ą¹€ąø£ą¹‡ąøˆ" -#: network/msnnotificationconnection.cpp:2362 +#: network/msnnotificationconnection.cpp:2360 msgid "You can't start a chat with someone while you are invisible." msgstr "" -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." +#: network/msnnotificationconnection.cpp:2364 +msgid "Not accepting new contacts" msgstr "" -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." +#: network/msnnotificationconnection.cpp:2368 +msgid "" +"You have a kids passport account, you need parental consent to chat online." msgstr "" -#: network/msnnotificationconnection.cpp:2373 +#: network/msnnotificationconnection.cpp:2371 +msgid "Your passport account needs to be verified first." +msgstr "" + +#: network/msnnotificationconnection.cpp:2375 msgid "Bad USR ticket" msgstr "" -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" msgstr "" -#: network/msnnotificationconnection.cpp:2404 +#: network/msnnotificationconnection.cpp:2399 #, fuzzy -msgid "There was an internal server error" +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." msgstr "ą¹€ąøąø“ąø”ąø‚ą¹‰ąø­ąøœąø“ąø”ąøžąø„ąø²ąø”ąøąø±ąøšą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œąø ąø²ąø¢ą¹ƒąø™" +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + #: network/msnnotificationconnection.cpp:2414 -#, fuzzy -msgid "The server is too busy" -msgstr "ą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œąøąø³ąø„ąø±ąø‡ąø¢ąøøą¹ˆąø‡" - -#: network/msnnotificationconnection.cpp:2419 -#, fuzzy -msgid "The server is unavailable" -msgstr "ą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ą¹ƒąø«ą¹‰ąøšąø£ąø“ąøąø²ąø£ą¹„ąø”ą¹‰" - -#: network/msnnotificationconnection.cpp:2422 msgid "Peer notification server down" msgstr "ąø£ąø°ąøšąøšą¹€ąø™ą¹‡ąø—ą¹€ąø§ąø“ąø£ą¹Œąøąø‚ąø­ąø‡ą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œąø„ą¹ˆąø”" -#: network/msnnotificationconnection.cpp:2426 +#: network/msnnotificationconnection.cpp:2418 #, fuzzy msgid "The server is going down" msgstr "ą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œąøąø³ąø„ąø±ąø‡ąøˆąø°ąø„ą¹ˆąø”ą¹ƒąø™ą¹„ąø”ą¹ˆąøŠą¹‰ąø²" -#: network/msnnotificationconnection.cpp:2429 +#: network/msnnotificationconnection.cpp:2422 #, fuzzy msgid "The server is going down soon" msgstr "ą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œąøąø³ąø„ąø±ąø‡ąøˆąø°ąø„ą¹ˆąø”ą¹ƒąø™ą¹„ąø”ą¹ˆąøŠą¹‰ąø²" -#: network/msnnotificationconnection.cpp:2433 +#: network/msnnotificationconnection.cpp:2427 msgid "Write is blocking" msgstr "" -#: network/msnnotificationconnection.cpp:2436 +#: network/msnnotificationconnection.cpp:2431 msgid "Session is overloaded" msgstr "" -#: network/msnnotificationconnection.cpp:2441 +#: network/msnnotificationconnection.cpp:2438 #, fuzzy msgid "The server is not available" msgstr "ą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ą¹ƒąø«ą¹‰ąøšąø£ąø“ąøąø²ąø£ą¹„ąø”ą¹‰" -#: network/msnnotificationconnection.cpp:2444 +#: network/msnnotificationconnection.cpp:2442 msgid "Authentication failed" msgstr "การขอ Authentication ą¹„ąø”ą¹ˆąøŖąø³ą¹€ąø£ą¹‡ąøˆ" -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" +#: network/msnnotificationconnection.cpp:2449 +msgid "Unknown error code received from the server: %1" msgstr "" -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +msgctxt "Error dialog box title" +msgid "MSN error" msgstr "" -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "" +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "นาที" +msgstr[1] "นาที" #: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." +msgid "Server closes for maintenance in %1!" msgstr "" #: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." msgstr "" -#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:2901 msgid "Lost reference to SOAP client" msgstr "" -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +msgid "KMess could not process Offline-IM messages.
Details: %1" msgstr "" -#: network/msnnotificationconnection.cpp:3209 +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "การขอ Authentication ą¹„ąø”ą¹ˆąøŖąø³ą¹€ąø£ą¹‡ąøˆ" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "ą¹€ąøąø“ąø”ąø‚ą¹‰ąø­ąøœąø“ąø”ąøžąø„ąø²ąø”ąøąø±ąøšą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œąø ąø²ąø¢ą¹ƒąø™" + +#: network/msnnotificationconnection.cpp:3242 +msgctxt "Login error message, with more details for developer versions" msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" msgstr "" -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" msgstr "" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­ą¹„ąø›ąø¢ąø±ąø‡ą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œ" + +#: network/msnnotificationconnection.cpp:3302 +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" +msgstr "" + +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "ą¹€ąøąø“ąø”ąø‚ą¹‰ąø­ąøœąø“ąø”ąøžąø„ąø²ąø”ąøąø±ąøšą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œ" + +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "ąøąø²ąø£ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­ąø«ąø”ąø”ą¹€ąø§ąø„ąø²" + +#: network/msnsockettcp.cpp:368 +#, fuzzy +msgid "1 ping lost" +msgstr "ąøąø³ąø„ąø±ąø‡ąø‚ąø­ąø£ąø±ąøšąø£ąø²ąø¢ąøąø²ąø£" + +#: network/msnsockettcp.cpp:372 +#, fuzzy +msgid "%1 pings lost" +msgstr "ąøąø³ąø„ąø±ąø‡ąø‚ąø­ąø£ąø±ąøšąø£ąø²ąø¢ąøąø²ąø£" + +#: network/msnsockettcp.cpp:387 +#, fuzzy +msgid "The connection to the server was lost." +msgstr "ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­ą¹„ąø›ąø¢ąø±ąø‡ą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œ" + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr " ąøšąøøąø„ąø„ąø„ąø™ąøµą¹‰ąø­ąø­ąøŸą¹„ąø„ąø™ą¹Œ ąø«ąø£ąø·ąø­ą¹„ąø”ą¹ˆą¹ąøŖąø”ąø‡ą¹ƒąø«ą¹‰ą¹€ąø«ą¹‡ąø™" -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "" -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 #, fuzzy msgid "The message \"%1\" was not received!" msgstr "ą¹„ąø”ą¹ˆą¹„ąø”ą¹‰ąø£ąø±ąøš" -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "" -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +msgid "In %1's chat: %2" msgstr "" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +msgid "%1 says:
'%2'" msgstr "" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" -msgstr "" - -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" -msgstr "" - -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" -msgstr "" - -#: notification/notificationchat.cpp:200 +#: notification/chatnotification.cpp:171 #, fuzzy -msgid "%1 has sent you a handwritten message!" +msgid "%1 has sent you an offline message:
'%2'" msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" -#: notification/notificationchat.cpp:204 -#, fuzzy -msgid "%1 has sent you a nudge!" -msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" - -#: notification/notificationchat.cpp:208 -#, fuzzy -msgid "%1 has sent you a wink!" -msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" - -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" +#: notification/chatnotification.cpp:178 +msgid "%1's chat requests attention!" msgstr "" -#: notification/notificationchat.cpp:215 +#: notification/chatnotification.cpp:183 +msgid "%1:
%2" +msgstr "" + +#: notification/chatnotification.cpp:190 #, fuzzy -msgid "%1 is sending you a file!" +msgid "%1 has sent you a handwritten message!" msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" -#: notification/notificationchat.cpp:216 +#: notification/chatnotification.cpp:194 #, fuzzy -msgid "%1 has sent you an invitation!" +msgid "%1 has sent you a nudge!" msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" -#: notification/notificationchat.cpp:223 +#: notification/chatnotification.cpp:198 #, fuzzy -msgid "%1 has canceled the webcam session!" +msgid "%1 has sent you a wink!" +msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" + +#: notification/chatnotification.cpp:204 +msgid "%1 wants to use the webcam!" +msgstr "" + +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" +msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" + +#: notification/chatnotification.cpp:206 +#, fuzzy +msgid "%1 has sent you an invitation!" +msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" + +#: notification/chatnotification.cpp:213 +#, fuzzy +msgid "%1 has canceled the webcam session!" msgstr "" "ąø„ąøøąø“ą¹„ąø”ą¹‰ąø”ąøµąøąø²ąø£ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­\n" "ąøˆąø²ąøą¹€ąø„ąø£ąø·ą¹ˆąø­ąø‡ąø­ąø·ą¹ˆąø™ą¹ąø„ą¹‰ąø§" -#: notification/notificationchat.cpp:224 +#: notification/chatnotification.cpp:214 #, fuzzy -msgid "%1 has canceled the file transfer!" +msgid "%1 has canceled the file transfer!" msgstr "" "ąø„ąøøąø“ą¹„ąø”ą¹‰ąø”ąøµąøąø²ąø£ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­\n" "ąøˆąø²ąøą¹€ąø„ąø£ąø·ą¹ˆąø­ąø‡ąø­ąø·ą¹ˆąø™ą¹ąø„ą¹‰ąø§" -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +msgid "%1's activity has been canceled!" msgstr "" -#: notification/notificationchat.cpp:232 -msgid "%1 has accepted to use the webcam!" -msgstr "" - -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" -msgstr "" - -#: notification/notificationchat.cpp:234 -msgid "%1 has accepted your invitation!" -msgstr "" - -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" -msgstr "" - -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" -msgstr "" - -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" -msgstr "" - -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" -msgstr "" - -#: notification/notificationchat.cpp:251 +#: notification/chatnotification.cpp:222 #, fuzzy -msgid "The file transfer with %1 has failed!" +msgid "%1 has accepted to use the webcam!" +msgstr "" +"ąø„ąøøąø“ą¹„ąø”ą¹‰ąø”ąøµąøąø²ąø£ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­\n" +"ąøˆąø²ąøą¹€ąø„ąø£ąø·ą¹ˆąø­ąø‡ąø­ąø·ą¹ˆąø™ą¹ąø„ą¹‰ąø§" + +#: notification/chatnotification.cpp:223 +#, fuzzy +msgid "%1 has accepted the file transfer!" +msgstr "" +"ąø„ąøøąø“ą¹„ąø”ą¹‰ąø”ąøµąøąø²ąø£ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­\n" +"ąøˆąø²ąøą¹€ąø„ąø£ąø·ą¹ˆąø­ąø‡ąø­ąø·ą¹ˆąø™ą¹ąø„ą¹‰ąø§" + +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" +msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" + +#: notification/chatnotification.cpp:231 +#, fuzzy +msgid "%1 has ended the webcam session!" +msgstr "" +"ąø„ąøøąø“ą¹„ąø”ą¹‰ąø”ąøµąøąø²ąø£ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­\n" +"ąøˆąø²ąøą¹€ąø„ąø£ąø·ą¹ˆąø­ąø‡ąø­ąø·ą¹ˆąø™ą¹ąø„ą¹‰ąø§" + +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "ąøŖą¹ˆąø‡ąø•ą¹ˆąø­" -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:233 +msgid "%1's activity has ended!" msgstr "" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -#, fuzzy -msgid "%1 is now online" -msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" - -#: notification/notificationcontactstatus.cpp:76 -#, fuzzy -msgid "%1 has gone away" -msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" - -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/chatnotification.cpp:240 +msgid "%1's webcam session has failed!" msgstr "" -#: notification/notificationcontactstatus.cpp:78 +#: notification/chatnotification.cpp:241 #, fuzzy -msgid "%1 is now busy" -msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" +msgid "The file transfer with %1 has failed!" +msgstr "ąøŖą¹ˆąø‡ąø•ą¹ˆąø­" -#: notification/notificationcontactstatus.cpp:79 -#, fuzzy -msgid "%1 has become invisible" -msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" - -#: notification/notificationcontactstatus.cpp:80 -#, fuzzy -msgid "%1 has gone idle" -msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" - -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/chatnotification.cpp:242 +msgid "%1's activity has ended with an error!" msgstr "" -#: notification/notificationcontactstatus.cpp:82 +#: notification/contactstatusnotification.cpp:70 #, fuzzy -msgid "%1 is on the phone" +msgid "%1 is now online" msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" -#: notification/notificationcontactstatus.cpp:83 +#: notification/contactstatusnotification.cpp:71 #, fuzzy -msgid "%1 is out for lunch" +msgid "%1 has gone away" msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/contactstatusnotification.cpp:72 +msgid "%1 will be right back" msgstr "" -#: settings/accountswidget.cpp:81 +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" +msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" + +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" +msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" + +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" +msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" + +#: notification/contactstatusnotification.cpp:76 +#, fuzzy +msgid "%1 has logged out" +msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" + +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" +msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" + +#: notification/contactstatusnotification.cpp:78 +#, fuzzy +msgid "%1 is out for lunch" +msgstr " ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" + +#: notification/newemailnotification.cpp:78 +msgid "New email:
'%1'
by '%2'" +msgstr "" + +#: settings/accountpage.cpp:69 msgid "Browse..." msgstr "" -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +msgid "Browse and crop picture..." msgstr "" -#: settings/accountswidget.cpp:404 -#, fuzzy -msgid "Display Picture" -msgstr "ą¹ąøŖąø”ąø‡ąø£ąø¹ąø›ąø ąø²ąøž" +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" +#: settings/accountpage.cpp:448 +#, fuzzy +msgid "Downloading of display picture failed" msgstr "ąøąø²ąø£ąø”ąø²ąø§ąø™ą¹Œą¹‚ąø«ąø„ąø”ąø£ąø¹ąø›ąø ąø²ąøžą¹„ąø”ą¹ˆąøŖąø³ą¹€ąø£ą¹‡ąøˆ" -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "สวัสดี ąøŖąøšąø²ąø¢ąø”ąøµą¹„ąø”ą¹Š" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "" - -#: settings/chatstylepage.cpp:317 -msgid "Great!" -msgstr "ą¹€ąø¢ąøµą¹ˆąø¢ąø”" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "ąø‰ąø±ąø™ą¹€ąøžąø“ą¹ˆąø‡ąøąø„ąø±ąøšąøˆąø²ąøąøžąø±ąøąø£ą¹‰ąø­ąø™ą¹ƒąø™ąø­ąø“ąø•ąø²ąø„ąøµ" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 #, fuzzy msgid "&Delete" msgstr "&ąø„ąøšąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "ąøąø³ąø«ąø™ąø”ąø„ą¹ˆąø²" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 #, fuzzy msgid "Account" msgstr "ą¹€ąø­ąø„ą¹€ąø„ą¹‰ąø²ąø—ą¹Œ" -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 #, fuzzy msgid "My Account" msgstr "ą¹€ąø­ąø„ą¹€ąø„ą¹‰ąø²ąø—ą¹Œ" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "ą¹ąøˆą¹‰ąø‡ą¹€ąø•ąø·ąø­ąø™" -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 #, fuzzy msgid "Alerts and Notifications" msgstr "ąø­ąøµą¹€ąø”ąø„ą¹Œą¹ąøˆą¹‰ąø‡ą¹€ąø•ąø·ąø­ąø™" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "กำคังสนทนา" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "ą¹€ąø‚ą¹‰ąø²ąøŖąø¹ą¹ˆąø§ąø‡ąøŖąø™ąø—ąø™ąø²" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "" + +#: settings/accountsettingsdialog.cpp:201 +msgid "The email address you have entered is already in use: '%1'" +msgstr "" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "ąø„ąøøąø“ą¹ąø™ą¹ˆą¹ƒąøˆąø—ąøµą¹ˆąøˆąø°ąø„ąøšą¹€ąø­ąø„ą¹€ąø„ą¹‰ąø²ąø—ą¹Œąø™ąøµą¹‰ ?" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "ąø„ąøøąø“ą¹ąø™ą¹ˆą¹ƒąøˆąø—ąøµą¹ˆąøˆąø°ąø„ąøšą¹€ąø­ąø„ą¹€ąø„ą¹‰ąø²ąø—ą¹Œąø™ąøµą¹‰ ?" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "สวัสดี ąøŖąøšąø²ąø¢ąø”ąøµą¹„ąø”ą¹Š" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "" + +#: settings/chatstylepage.cpp:341 +msgid "Great!" +msgstr "ą¹€ąø¢ąøµą¹ˆąø¢ąø”" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "ąø‰ąø±ąø™ą¹€ąøžąø“ą¹ˆąø‡ąøąø„ąø±ąøšąøˆąø²ąøąøžąø±ąøąø£ą¹‰ąø­ąø™ą¹ƒąø™ąø­ąø“ąø•ąø²ąø„ąøµ" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "ąøąø³ąø«ąø™ąø”ąø„ą¹ˆąø²" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +msgid "Accounts" +msgstr "ą¹€ąø­ąø„ą¹€ąø„ą¹‰ąø²ąø—ą¹Œ" + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "ąø­ąøµą¹€ąø”ąø„ą¹Œą¹ąøˆą¹‰ąø‡ą¹€ąø•ąø·ąø­ąø™" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "ąøšąø±ąø™ąø—ąø¶ąøąøąø²ąø£ąøŖąø™ąø—ąø™ąø²ą¹ƒąø™ą¹„ąø”ą¹€ąø£ąø„ąø—ąø­ąø£ąøµą¹ˆ: " + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." msgstr "" -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "" +#: systemtraywidget.cpp:245 +msgid "- %1 (%2)" +msgstr "" + +#~ msgid "Picture:" +#~ msgstr "ąø£ąø¹ąø›ąø ąø²ąøž: " + +#, fuzzy +#~ msgid "Login Information" +#~ msgstr "ą¹ąøŖąø”ąø‡ąø‚ą¹‰ąø­ąø”ąø¹ąø„ąø­ąøµą¹€ąø”ąø„ą¹Œą¹ƒąø™ąø£ąø²ąø¢ąøŠąø·ą¹ˆąø­ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" + +#~ msgid "Logging in..." +#~ msgstr "ą¹€ąø‚ą¹‰ąø²ąøŖąø¹ą¹ˆąø£ąø°ąøšąøš ..." + +#~ msgid "Use a specified command:" +#~ msgstr "ą¹ƒąøŠą¹‰ąø„ąø³ąøŖąø±ą¹ˆąø‡ąø—ąøµą¹ˆąø£ąø°ąøšąøø: " + +#~ msgid "This account does not have an Hotmail inbox!" +#~ msgstr "ą¹€ąø­ąø„ą¹€ąø„ą¹‰ąø²ąø—ą¹Œąø™ąøµą¹‰ą¹„ąø”ą¹ˆąø”ąøµąø•ąø¹ą¹‰ąøˆąø”ąø«ąø”ąø²ąø¢ hotmail" + +#, fuzzy +#~ msgid "Email: " +#~ msgstr "ąø­ąøµą¹€ąø”ąø„ą¹Œ" + +#, fuzzy +#~ msgid "Remove group" +#~ msgstr "&คบกคุ่ด" + +#, fuzzy +#~ msgid "Show &Display Pictures" +#~ msgstr "ą¹ąøŖąø”ąø‡ąø£ąø¹ąø›ąø ąø²ąøž" + +#, fuzzy +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr " ąø”ąøµąø­ąøµą¹€ąø”ąø„ą¹Œą¹ƒąø«ąø”ą¹ˆą¹ƒąø™ąøąø„ą¹ˆąø­ąø‡ą¹€ąø”ąø„ą¹Œ" + +#, fuzzy +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr " ą¹€ąø”ąø„ą¹Œą¹ƒąø«ąø”ą¹ˆą¹ƒąø™ąøąø„ą¹ˆąø­ąø‡ąø£ąø±ąøšą¹€ąø”ąø„ą¹Œ" + +#, fuzzy +#~ msgid "Guido Solinas" +#~ msgstr "ąø­ąø­ąø™ą¹„ąø„ąø™ą¹Œ" + +#, fuzzy +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œ %1 ą¹€ąøąø“ąø”ąø‚ą¹‰ąø­ąøœąø“ąø”ąøžąø„ąø²ąø” ą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ą¹€ąø›ąø“ąø”ą¹„ąøŸąø„ą¹Œą¹„ąø”ą¹‰ " + +#, fuzzy +#~ msgid "Sidebar" +#~ msgstr "แสดง/ąø‹ą¹ˆąø­ąø™ &ą¹ąø–ąøšąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" + +#, fuzzy +#~ msgid "New contact's group" +#~ msgstr "ąøœąø¹ą¹‰ąø•ąø“&ąø”ąø•ą¹ˆąø­ą¹ƒąø«ąø”ą¹ˆ" + +#, fuzzy +#~ msgid "Enter your login information:" +#~ msgstr "ąø«ąø£ąø·ąø­ą¹ƒąøŖą¹ˆąø‚ą¹‰ąø­ąø”ąø¹ąø„ąø„ą¹Šąø­ąø„ąø­ąø“ąø™" + +#, fuzzy +#~ msgid "Your friendly name:" +#~ msgstr "ąøŠąø·ą¹ˆąø­ą¹€ąø„ą¹ˆąø™: " + +#, fuzzy +#~ msgid "Your email address:" +#~ msgstr "ąø­ąøµą¹€ąø”ąø„ą¹Œ:" + +#, fuzzy +#~ msgid "Your password:" +#~ msgstr "ąø£ąø«ąø±ąøŖąøœą¹ˆąø²ąø™:" + +#, fuzzy +#~ msgid "Display picture:" +#~ msgstr "ąø£ąø¹ąø›ąø ąø²ąøž: " + +#, fuzzy +#~ msgid "Don't show a displa&y picture" +#~ msgstr "ąø£ąø¹ąø›ąø ąø²ąøž: " + +#, fuzzy +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "ą¹ąøŖąø”ąø‡ąøąø²ąø£ą¹€ąø•ąø·ąø­ąø™ą¹€ąø”ąø·ą¹ˆąø­ą¹„ąø”ą¹‰ąø£ąø±ąøšąø­ąøµą¹€ąø”ąø„ą¹Œ" + +#~ msgid "Organize chat folders by:" +#~ msgstr "ąøˆąø±ąø”ąøąø²ąø£ą¹ąøŸą¹‰ąø”ąøŖąø™ąø—ąø™ąø²ą¹‚ąø”ąø¢: " + +#, fuzzy +#~ msgid "&Show graphics in chat messages" +#~ msgstr "ą¹ąøŖąø”ąø‡ą¹€ąø§ąø„ąø²ąøšąø™ąø‚ą¹‰ąø­ąø„ąø§ąø²ąø”" + +#~ msgid "Use Hotmail" +#~ msgstr "ą¹ƒąøŠą¹‰ Hotmail " + +#~ msgid "says:" +#~ msgstr "ąøžąø¹ąø”:" + +#~ msgid "Current name: " +#~ msgstr "ąøŠąø·ą¹ˆąø­ąø›ąø±ąøˆąøˆąøøąøšąø±ąø™: " + +#, fuzzy +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr "ą¹ąøŖąø”ąø‡ąøŖąø–ąø²ąø™ąø°ąøąø²ąø£ąøšąø£ąø“ąøąø²ąø£ąø‚ąø­ąø‡ .NET ?" + +#~ msgid "Received user confirmation" +#~ msgstr "ą¹„ąø”ą¹‰ąø£ąø±ąøšąøąø²ąø£ąø‚ą¹‰ąø­ąø”ąø¹ąø„ąø¢ąø·ąø™ąø¢ąø±ąø™" + +#~ msgid "Transfer to notification server" +#~ msgstr "ąøŖą¹ˆąø‡ąø„ąø³ąø‚ąø­ą¹„ąø›ąø¢ąø±ąø‡ą¹€ąø„ąø£ąø·ą¹ˆąø­ąø‡ą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œ" + +#, fuzzy +#~ msgid "The server is too busy" +#~ msgstr "ą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œąøąø³ąø„ąø±ąø‡ąø¢ąøøą¹ˆąø‡" + +#, fuzzy +#~ msgid "The server is unavailable" +#~ msgstr "ą¹€ąø‹ąø“ąø£ą¹ŒąøŸą¹€ąø§ąø­ąø£ą¹Œą¹„ąø”ą¹ˆąøŖąø²ąø”ąø²ąø£ąø–ą¹ƒąø«ą¹‰ąøšąø£ąø“ąøąø²ąø£ą¹„ąø”ą¹‰" + #~ msgid "Add contact" #~ msgstr "ą¹€ąøžąø“ą¹ˆąø”ąøœąø¹ą¹‰ąø•ąø“ąø”ąø•ą¹ˆąø­" @@ -3549,9 +4293,6 @@ msgstr "" #~ msgid "KMess Notification" #~ msgstr "ąø­ąøµą¹€ąø”ąø„ą¹Œą¹ąøˆą¹‰ąø‡ą¹€ąø•ąø·ąø­ąø™" -#~ msgid "Accounts" -#~ msgstr "ą¹€ąø­ąø„ą¹€ąø„ą¹‰ąø²ąø—ą¹Œ" - #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" #~ "Your names" @@ -3562,9 +4303,6 @@ msgstr "" #~ "Your emails" #~ msgstr "rachanh@yahoo.com" -#~ msgid "Insert an emoticon" -#~ msgstr "ą¹€ąøžąø“ą¹ˆąø”ą¹„ąø­ąø„ąø­ąø™ą¹ąøŖąø”ąø‡ąø­ąø²ąø£ąø”ąø“ą¹Œ" - #~ msgid "Away - Idle" #~ msgstr "(ąø§ą¹ˆąø²ąø‡ - ą¹„ąø”ą¹ˆąø­ąø¢ąø¹ą¹ˆąø«ąø™ą¹‰ąø²ąø„ąø­ąø”ąøÆ)" @@ -3594,17 +4332,6 @@ msgstr "" #~ msgid "(On the Phone)" #~ msgstr "(ąøąø³ąø„ąø±ąø‡ąø„ąøøąø¢ą¹‚ąø—ąø£ąøØąø±ąøžąø—ą¹Œ)" -#, fuzzy -#~ msgid "Connection timeout" -#~ msgstr "ąøąø²ąø£ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­ąø«ąø”ąø”ą¹€ąø§ąø„ąø²" - -#~ msgid "Connect" -#~ msgstr "ą¹€ąøŠąø·ą¹ˆąø­ąø”ąø•ą¹ˆąø­" - -#, fuzzy -#~ msgid "Listening to %1" -#~ msgstr "ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œ" - #, fuzzy #~ msgid "File transfer dialog message" #~ msgstr "ąø«ąø™ą¹‰ąø²ąøˆąø­ąøąø²ąø£ąøŖą¹ˆąø‡ą¹„ąøŸąø„ą¹Œ" diff --git a/po/tr.po b/po/tr.po index 5ed983e..8505037 100644 --- a/po/tr.po +++ b/po/tr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: tr\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" "PO-Revision-Date: 2007-11-01 07:01+0200\n" "Last-Translator: Uğur Ƈetin \n" "Language-Team: Turkish \n" @@ -17,45 +17,38 @@ msgstr "" "X-Generator: KBabel 1.11.4\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "Oturum aƧılıyor..." - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -msgid "S&end" -msgstr "&Gƶnder" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 msgid "Ne&w Line" msgstr "Yeni &Satır" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 -#, fuzzy -msgid "Sidebar" -msgstr "Kenar Ƈubuğu" +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 +msgid "S&end" +msgstr "&Gƶnder" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +msgid "Contacts" +msgstr "Kişiler" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "Kişinizin profiline bakmak iƧin tıklayın." #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." -msgstr "Bu kişiye bir e-posta gƶndermek iƧin tıklayın." +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 #, fuzzy msgid "" "Enter here the email address of the person you wish to add to your contact " @@ -63,41 +56,39 @@ msgid "" msgstr "Eklemek istediğiniz kişinin eposta adresini girin:" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 msgid "Email address" msgstr "E-posta adresi" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 #, fuzzy -msgid "New contact's group" -msgstr "Yeni &Kişi" +msgid "Initial group" +msgstr "Grubu Y&eniden Adlandır" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "Bu ifade iƧin bir kısayol girin:" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "Bir resim dosyası seƧin:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 #, fuzzy msgid "" "Enter a message to be automatically sent to people who try to message you." @@ -106,124 +97,340 @@ msgstr "" "kendiliğinden gƶnderilecek iletiyi girin:" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 #, fuzzy msgid "&Automatic away message" msgstr "Uzakta durumu iƧin ileti belirle" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" -msgstr "%1
sizi bağlantı listesine ekledi. Ne yapmak istiyorsunuz?:" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 -msgid "&Add this contact to your \"Friends\" list" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 +#, fuzzy +msgid "&Add this person to my \"Friends\" list" msgstr "Bu kişiyi \"Arkadaşlar\" listesine &ekle" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 -msgid "&Not add this contact, but let them see your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 +#, fuzzy +msgid "Do not add this person; only allow them to see my online state" msgstr "" "Bu kişiyi ekle&me, ancak benim İnternet'teki durumunu gƶrmesine izin ver" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 -msgid "Block this person from contacting &you or seeing your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 +#, fuzzy +msgid "&Block this person from contacting me or seeing my online state" msgstr "" "Bu kişinin benim bağlantı durumumu gƶrmesine ya da benimle bağlantıya " "geƧmesine izin verme." #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, no-c-format +msgid "Contact Properties for %1" +msgstr "%1 iƧin Ɩzellikler" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +#, fuzzy +msgid "Restore" +msgstr "Silindi" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "Bu kişi iƧin seƧimlik bir ad girin" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "" +"Bu kişi bağlandığı ya da bağlantısını kopardığı zaman uyarı balonu gƶster" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "Ses:" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +#, fuzzy +msgid "&Clear Cache" +msgstr "Sekmeyi temizle" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +#, fuzzy +msgid "Notes" +msgstr "Not" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "Ağ Penceresi" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +#, fuzzy +msgid "Standard" +msgstr "Yıldız" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "&Gƶnder" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 msgid "Cancel" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -msgid "Enter your login information:" -msgstr "Giriş bilgilerinizi girin:" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" +msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 -msgid "Password" +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 +#, fuzzy +msgid "Email address:" +msgstr "E-posta adresi:" + +#. i18n: tag string +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +#, fuzzy +msgid "Password:" msgstr "Parola" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "Girişteki durum" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 #, fuzzy msgid " Account options " msgstr "&Hesap Ayarları" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 msgid "Remem&ber this profile" msgstr "Bu hesabı &hatırla" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "&Bağlan" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "Buraya kişisel bir ileti yazın" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr "&Hesap Ayarları" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "Bağlı olduğunuzda listenizdekilerin gƶrmesini istediğiniz ismi yazın." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 -msgid "Your friendly name:" -msgstr "Takma adınız:" +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 +#, fuzzy +msgid "&Friendly name:" +msgstr "&Takma ad:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" @@ -232,15 +439,15 @@ msgstr "" "com/ adresinden yeni bir hesaba kaydolabilirsiniz" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 #, fuzzy -msgid "Your email address:" +msgid "&Email address:" msgstr "E-posta adresi:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" @@ -249,39 +456,40 @@ msgstr "" "adresinden yeni bir hesaba kaydolabilirsiniz." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" -msgstr "Parolanız:" - -#. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 #, fuzzy -msgid "Remember Password" +msgid "&Password:" msgstr "Parola" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 -msgid "Display picture:" -msgstr "Gƶrünen Resim:" +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 +#, fuzzy +msgid "&Remember Password" +msgstr "Parola" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 +msgid "Display Picture" +msgstr "Gƶrüntü Resmi:" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 msgid "C&hange..." msgstr "&Değiştir..." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -msgid "Don't show a displa&y picture" -msgstr "Resim &gƶsterme" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -297,34 +505,37 @@ msgstr "" "ƶnerilir." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +#, fuzzy +msgid "Re&member the settings of this account" msgstr "Bu hesabın ayarlarını hatırla" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "Etkinse KMess otomatik olarak bu hesapla giriş yapar." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 -msgid "Login &with this account automatically at start-up" +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 +#, fuzzy +msgid "Login &with this account automatically" msgstr "BaşlangıƧta otomatik olarak bu &hesaba bağlan" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "Girişte durumu bƶyle yap:" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "Bütün sohbetleri &kaydet" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -335,8 +546,8 @@ msgstr "" "yapabilir veya bağlanmak iƧin Hotmail hesabınızı kullanabilirsiniz." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." @@ -344,26 +555,26 @@ msgstr "" "Gƶrünen adınızı değiştiremezsiniz çünkü e-posta adresiniz doğrulanmamış." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "Doğrulama e-postası iste" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 msgid "https://accountservices.passport.net/" msgstr "https://accountservices.passport.net/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "accountservices.passport.net'e git" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." @@ -372,53 +583,116 @@ msgstr "" "kayıt ettirmelisiniz." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "Yeni hesaba kayıt ol" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "register.passport.com'a git" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 -msgid "Popup notifications" +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 +#, fuzzy +msgid "Saved accounts:" +msgstr "Hesaplar" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +msgid "Click" +msgstr "Tıkla" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "Ɩzel bir ifade eklemek iƧin buraya tıklayın." + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "Hesap" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "Bir ifade seƧin ve silmek iƧin buraya tıklayın." + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "Silindi" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "AƧılır bildirimler" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "Kişiler" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 msgid "Show notifications when your contacts:" msgstr "Kişiler bu durumda olduğunda bildirim gƶster:" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." msgstr "Etkinse, kişileriniz MSN'e bağlandığında uyarı penceresi Ƨıkar." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 #, fuzzy msgid "&Go online" msgstr "Ƈe&vrimdışı olduklarında" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." @@ -426,14 +700,14 @@ msgstr "" "Etkinse, kişileriniz sizinle sohbet başlattığında uyarı penceresi Ƨıkar." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "Sizinle &sohbet başlatıldığında" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." @@ -441,14 +715,14 @@ msgstr "" "Etkinse, kişileriniz size her ileti yolladığında uyarı penceresi Ƨıkar." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 msgid "S&end you a message" msgstr "Size ileti &gƶnerildiğinde" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." @@ -456,54 +730,104 @@ msgstr "" "Etkinse, kişileriniz durumlarını değiştirdiklerinde uyarı penceresi Ƨıkar." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "&Durumlarını değiştirdiklerinde" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." msgstr "Etkinse, kişileriniz bağlantıyı kestiğinde uyarı penceresi Ƨıkar." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 msgid "Go o&ffline" msgstr "Ƈe&vrimdışı olduklarında" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 -msgid "Show notifications when you recei&ve an email" -msgstr "Bir eposta alındığında bildirim gƶster" +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 +#, fuzzy +msgid "Email Events" +msgstr "E-posta adresi" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" +msgstr "\"diğer dizinlerde\" bir eposta alındığında bildirim gƶster" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" +"Etkinse, diğer dizinlere gelen e-postalar iƧin de uyarı penceresi " +"gƶsterilir. Bu seƧenek sadece Hotmail hesapları iƧin geƧerlidir." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +msgid "In other folders" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "Uyarı penceresinin ne kadar süre sonra gizleneceğini belirler." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "Uyarı pencerelerini gizleme süresi" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "saniye" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "Uyarılar" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "Bağlı &olmayanları gƶster" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -520,14 +844,32 @@ msgstr "" "p>" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "Bir titreme alındığında ve gƶnderildiğinde sohbet &penceresini salla" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" +"Etkinse, gelen kutunuza bir e-posta geldiğinde bir uyarı penceresi Ƨıkar. " +"Okunmamış e-posta listesi kişi listenizin üzerindedir. Bu seƧenek sadece " +"Hotmail hesapları iƧin geƧerlidir." + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." @@ -536,30 +878,37 @@ msgstr "" "müzik programlarından alınır." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 -msgid "Inform contacts w&hich song I am listening to." +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 +#, fuzzy +msgid "Inform contacts w&hich song I am listening to" msgstr "Kişilerime ne &dinlediğimi gƶster" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 +#, fuzzy msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" "Etkinse, birkaƧ dakika bilgisayar kullanılmadığı zaman durumunuz otomatik " "olarak \"Uzakta-Boşta\" olarak değiştirilir." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "Boştayken durumumu otomatik olarak \"&Uzakta-Boşta\" olarak değiştir." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." @@ -567,166 +916,147 @@ msgstr "" "KMess'in kaƧ dakika sonra \"Uzakta-Boşta\" durumuna geƧeceğini belirler." #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 msgid "Become idle after" msgstr "Şu kadar zaman sonra boşta konumuna geƧ:" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "dakika" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "Etkinse, sohbetler belirlenmiş olan dizine kaydedilir." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 msgid "Log &all chats" msgstr "Bütün sohbetleri &kaydet" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 msgid "" "Choose the directory on your system where you'd like to save the chat logs." msgstr "Sohbet kayıtlarının duracağı dizini seƧin." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" msgstr "Sohbetleri bu dizine kaydet:" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." msgstr "Sohbet kayıtlarının neye gƶre düzenleneceğini seƧin." #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "Sohbet dizinlerini şu ƶlçüte gƶre düzenle:" +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "Yıl" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 msgid "Month" msgstr "Ay" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "Gün" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" msgstr "Bütün konuşmaları ana dizine kaydet" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." -msgstr "Bu sohbet mesajlarınızın yazı tipi ve rengidir." - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "İleti yazıtipiniz:" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" -"Aşağıda seƧtiğiniz yazıtipi biƧimi ve rengi kişinizin seƧtiğinin yerine " -"kullanılır." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "Kişinin iletilerinde bu yazı tipinin kullanmasını zorla:" - +#. i18n: file ./settings/chatstylepage.ui line 45 #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "" "KMess'in tüm sohbet mesajlarını gƶsterirken kullandığı temayı değiştirmenizi " "sağlar." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +#, fuzzy +msgid "&Chat style:" msgstr "Sohbet stili:" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "Ayarlar" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "Sohbetlerde ifadelerin gƶrünmesine izin verir." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 -msgid "&Show graphics in chat messages" -msgstr "Sohbet mesajlarında &ifadeleri gƶster" +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 +#, fuzzy +msgid "&Show emoticons" +msgstr "İfadelerimi &Gƶster" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "Her mesajın yanında zamanın gƶrünmesini sağlar." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 -msgid "S&how time in chat messages" +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 +#, fuzzy +msgid "S&how messages time" msgstr "Sohbet mesajlarında &zamanı gƶster" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" -"Yazıtipi efektleri kullanmayı aktif eder. *koyu*, /italik/, ve _altı Ƨizili_ " -"şeklinde yazmayı etkinleştir." - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "" -"Mesajlarda &yazıtipi efektleri kullan, ƶr: *koyu*, /italik/, ve _altı Ƨizili_" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -738,151 +1068,304 @@ msgstr "" "mesajmış gibi gƶsterir. Gƶrünüş seƧili sohbet biƧimine gƶre değişebilir." #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "Aynı kişiden ard arda gelen mesajları &grupla" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 -msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" msgstr "" -"E-postaları okumak iƧin KMess'in hangi programı Ƨalıştıracağını belirler." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "E-posta istemcisi" +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 +#, fuzzy +msgid "Always" +msgstr "Uzakta" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "Hotmail kullan" +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "Bağlantı listenizde Ƨok fazla grup var" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "Belirli bir komut kullan:" +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "Gƶzlüklü" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "E-posta bildirimi" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 -msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" msgstr "" -"Etkinse, gelen kutunuza bir e-posta geldiğinde bir uyarı penceresi Ƨıkar. " -"Okunmamış e-posta listesi kişi listenizin üzerindedir. Bu seƧenek sadece " -"Hotmail hesapları iƧin geƧerlidir." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 -msgid "Show email information" -msgstr "E-posta bilgisini gƶster" +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." +msgstr "Bu sohbet mesajlarınızın yazı tipi ve rengidir." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "İleti yazıtipiniz:" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." msgstr "" -"Etkinse, diğer dizinlere gelen e-postalar iƧin de uyarı penceresi " -"gƶsterilir. Bu seƧenek sadece Hotmail hesapları iƧin geƧerlidir." +"Aşağıda seƧtiğiniz yazıtipi biƧimi ve rengi kişinizin seƧtiğinin yerine " +"kullanılır." #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" -msgstr "\"diğer dizinlerde\" bir eposta alındığında bildirim gƶster" +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "Kişinin iletilerinde bu yazı tipinin kullanmasını zorla:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 +msgid "" +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." +msgstr "" +"Yazıtipi efektleri kullanmayı aktif eder. *koyu*, /italik/, ve _altı Ƨizili_ " +"şeklinde yazmayı etkinleştir." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +#, fuzzy +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" +msgstr "" +"Mesajlarda &yazıtipi efektleri kullan, ƶr: *koyu*, /italik/, ve _altı Ƨizili_" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "Kişi listesi alınıyor..." + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 msgid "&Emoticon Themes" msgstr "İfade &Temaları" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 msgid "Available emoticon styles:" msgstr "Mümkün olan İfade stilleri:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 msgid "&Custom Emoticons" msgstr "Ɩ&zel İfadeler" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 msgid "Custom emoticons for this account:" msgstr "Bu hesap iƧin ƶzel ifadeler:" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -msgid "Click" -msgstr "Tıkla" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "Ɩzel bir ifade eklemek iƧin buraya tıklayın." - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "&Yeni ekle..." #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "SeƧili ifadeyi yeniden adlandırmak iƧin tıklayın." #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 msgid "Re&name" msgstr "Y&eniden Adlandır" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "Bir ifade seƧin ve silmek iƧin buraya tıklayın." - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 msgid "Remo&ve" msgstr "&Sil" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +#, fuzzy +msgid "Web Browser" +msgstr "Solgun gül" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +msgid "&Use the KDE default browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "diyor ki:" +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "E-posta istemcisi" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +msgid "&Use the KDE default email client" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +msgid "File Transfers" +msgstr "Dosya Aktarımları" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "Sohbetleri bu dizine kaydet:" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +#, fuzzy +msgid "and" +msgstr "Üzgün" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "Dosya Aktarımları" #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -892,68 +1375,105 @@ msgstr "Bilgisayarımdan uzaktayım" msgid "Your name" msgstr "Sizin adınız" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "siz@hotmail.com" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "Bağlı" +#: chat/chat.cpp:124 +msgid "" +"You can't start this invitation because there are multiple contacts in this " +"chat." +msgstr "Bu daveti başlatamazsınız çünkü bu sohbette birden fazla kişi var." -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "Uzakta" +#: chat/chat.cpp:158 +#, fuzzy +msgid "%1 has joined the chat." +msgstr "%1 sohbete katıldı." -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "Dƶneceğim" +#: chat/chat.cpp:211 +#, fuzzy +msgid "The conversation went idle, %1 has left the chat." +msgstr "Sohbet boşta, %1 sohbetten ayrıldı." -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "Meşgul" +#: chat/chat.cpp:215 +#, fuzzy +msgid "%1 has left the chat." +msgstr "%1 sohbetten ayrıldı." -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "Gƶrünmez" +#: chat/chat.cpp:364 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 and %2" +msgstr "%1 ve %2 - Sohbet" -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "Boşta" +#: chat/chat.cpp:371 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 et al." +msgstr "%1 - Sohbet" -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "Bağlı değil" +#: chat/chat.cpp:630 +#, fuzzy +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" +msgstr "(Bu ileti kendiliğinden gƶnderildi)" -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "Telefonda" +#: chat/chat.cpp:934 +#, fuzzy +msgid "You received a wink from %1." +msgstr "%1 size bir gƶz kırpması gƶnderdi" -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "Yemekte" +#: chat/chat.cpp:971 +msgid "" +"The wink could not be displayed. Make sure you have 'cabextract' installed." +msgstr "" +"Gƶz kırpması gƶsterilemiyor. 'cabextract'ın kurulu olduğundan emin olun." -#: chat/chatmaster.cpp:1061 +#: chat/chat.cpp:980 +msgid "The wink could not be displayed. The data could not be read." +msgstr "Gƶz kırpması gƶsterilemiyor. Veri okunamadı." + +#: chat/chat.cpp:1080 +#, fuzzy +msgid "You have received a wink from %1" +msgstr "%1 size bir gƶz kırpması gƶnderdi" + +#: chat/chat.cpp:1100 +#, fuzzy +msgid "You received a nudge from %1!" +msgstr "%1 titreme gƶnderdi" + +#: chat/chat.cpp:1119 +#, fuzzy +msgid "The message '%1' could not be sent." +msgstr "\"%1\" mesajı gƶnderilemedi." + +#: chat/chat.cpp:1183 +msgid "You've sent a nudge to %1!" +msgstr "%1 titretildi!" + +#: chat/chat.cpp:1190 +msgid "You've sent a nudge!" +msgstr "Bir titreme gƶnderdiniz!" + +#: chat/chatmaster.cpp:1219 msgid "%1 is sending a wink: %2" msgstr "%1 bir gƶz kırpması gƶnderdi: %2" -#: chat/chatmessagestyle.cpp:302 +#: chat/chatmessagestyle.cpp:298 msgid "%1 says:" msgstr "%1 diyor ki:" -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 msgid "Add this emoticon: %1" msgstr "Bu ifadeyi ekle: %1" -#: chat/chatview.cpp:529 +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 +msgid "&Invite" +msgstr "Da&vet et" + +#: chat/chatview.cpp:695 msgid "" "Could not save chat log. Make sure you have permission to write in the " "folder where logs are being saved." @@ -961,8 +1481,7 @@ msgstr "" "Sohbet kaydedilemedi. Sohbetlerin kaydedildiği dizinde yazma izniniz " "olduğundan emin olun." -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 msgid "" "The file '%1' already exists.\n" "do you want to overwrite it?" @@ -970,358 +1489,413 @@ msgstr "" "'%1' isimli dosya zaten var.\n" "üzerine yazmak istiyor musunuz?" -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 msgid "Overwrite File" msgstr "Dosyanın Üzerine Yaz" -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 msgid "Over&write" msgstr "Üzerine &Yaz" -#: chat/chatview.cpp:977 +#: chat/chatview.cpp:1275 msgid "Add this &Emoticon..." msgstr "Bu İfadeyi &Ekle" -#: chat/chatview.cpp:984 +#: chat/chatview.cpp:1282 msgid "Send &Email" msgstr "E-&posta Gƶnder" -#: chat/chatview.cpp:988 +#: chat/chatview.cpp:1286 msgid "Copy E&mail" msgstr "E-posta'yı &Kopyala" -#: chat/chatview.cpp:995 +#: chat/chatview.cpp:1293 msgid "Visit &Link" msgstr "Bağlantıya &Git" -#: chat/chatview.cpp:999 +#: chat/chatview.cpp:1297 msgid "Copy &Address" msgstr "&Adresi Kopyala" -#: chat/chatview.cpp:1013 +#: chat/chatview.cpp:1312 msgid "&Copy text" msgstr "&Yazıyı Kopyala" -#: chat/chatview.cpp:1014 +#: chat/chatview.cpp:1313 msgid "Select &All" msgstr "Tümünü &SeƧ" -#: chat/chatview.cpp:1015 +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 msgid "Save chat to &File" msgstr "Sohbeti &Dosyaya Kaydet" -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "Sohbet" - -#: chat/chatwindow.cpp:239 -msgid "" -"You can't start this invitation because there are multiple contacts in this " -"chat." -msgstr "Bu daveti başlatamazsınız çünkü bu sohbette birden fazla kişi var." - -#: chat/chatwindow.cpp:276 -msgid "%1 has joined the chat." -msgstr "%1 sohbete katıldı." - -#: chat/chatwindow.cpp:327 -msgid "The conversation went idle, %1 has left the chat." -msgstr "Sohbet boşta, %1 sohbetten ayrıldı." - -#: chat/chatwindow.cpp:331 -msgid "%1 has left the chat." -msgstr "%1 sohbetten ayrıldı." - -#: chat/chatwindow.cpp:593 -msgid "%1 - Chat" -msgstr "%1 - Sohbet" - -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" -msgstr "%1 ve %2 - Sohbet" - -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" -msgstr "%1 - Sohbet" - -#: chat/chatwindow.cpp:757 -msgid "Contacts" -msgstr "Kişiler" - -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 -msgid "Emoticons" -msgstr "İfadeler" - -#: chat/chatwindow.cpp:819 -msgid "My emoticons" -msgstr "İfadelerim" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" -msgstr "(Bu ileti kendiliğinden gƶnderildi)" - -#: chat/chatwindow.cpp:1502 -msgid "" -"The wink could not be displayed. Make sure you have 'cabextract' installed." -msgstr "" -"Gƶz kırpması gƶsterilemiyor. 'cabextract'ın kurulu olduğundan emin olun." - -#: chat/chatwindow.cpp:1511 -msgid "The wink could not be displayed. The data could not be read." -msgstr "Gƶz kırpması gƶsterilemiyor. Veri okunamadı." - -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" -msgstr "%1 size bir gƶz kırpması gƶnderdi" - -#: chat/chatwindow.cpp:1755 -#, fuzzy -msgid "Show Side&bar" -msgstr "Kenar Ƈubuğu" - -#: chat/chatwindow.cpp:1756 -#, fuzzy -msgid "Show the contact sidebar" -msgstr "Bağlantı yanƧubuğunu gƶster ya da gizle" - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -#, fuzzy -msgid "Hide Side&bar" -msgstr "Kenar Ƈubuğu" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -#, fuzzy -msgid "Hide the contact sidebar" -msgstr "Bağlantı yanƧubuğunu gƶster ya da gizle" - -#: chat/chatwindow.cpp:1787 -msgid "The message '%1' could not be sent." -msgstr "\"%1\" mesajı gƶnderilemedi." - -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" -msgstr "%1 titreme gƶnderdi" - -#: chat/chatwindow.cpp:1876 -msgid "You've sent a nudge to %1!" -msgstr "%1 titretildi!" - -#: chat/chatwindow.cpp:1883 -msgid "You've sent a nudge!" -msgstr "Bir titreme gƶnderdiniz!" - -#: chat/chatwindow.cpp:1972 -msgid "%1 is typing." -msgstr "%1 yazıyor." - -#: chat/chatwindow.cpp:1981 -msgid "%1 and %2 are typing." -msgstr "%1 ve %2 yazıyor." - -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." -msgstr "%1, %2 ve diğer %3 kişi yazıyor." - -#: chat/chatwindowinterface.cpp:175 +#: chat/chatwindow.cpp:489 msgid "&Chat" msgstr "&Sohbet Et" -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 -msgid "&Invite" -msgstr "Da&vet et" - -#: chat/chatwindowinterface.cpp:179 +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "Bir &Dosya Gƶnder" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "Bir &Buluşma Başlat" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 msgid "Send a &Nudge!" msgstr "&Titreme Gƶnder!" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "Sohbeti Kaydet" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 #, fuzzy msgid "&Emoticons" msgstr "İfadeler" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +#, fuzzy +msgid "Close &All Tabs" +msgstr "Sekmeyi kapat" + +#: chat/chatwindow.cpp:504 #, fuzzy msgid "Meeting" msgstr "Ayarlar" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "Bir &Gƶrüşme başlat veya bitir" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "&Yazıtipini Değiştir" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "Yazıtipi &Rengini Değiştir" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 #, fuzzy msgid "&Font" msgstr "&Bağlan" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 #, fuzzy msgid "Font &Color" msgstr "Yazıtipi &Rengini Değiştir" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +msgid "Emoticons" +msgstr "İfadeler" + +#: chat/chatwindow.cpp:658 +msgid "My emoticons" +msgstr "İfadelerim" + +#: chat/chatwindow.cpp:738 #, fuzzy msgid "&Settings" msgstr "Ayarlar" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "İfadelerimi &Gƶster" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +#, fuzzy +msgid "Hide Side&bar" +msgstr "Kenar Ƈubuğu" + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "Kenar Ƈubuğu" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +#, fuzzy +msgid "Hide the contact sidebar" +msgstr "Bağlantı yanƧubuğunu gƶster ya da gizle" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +#, fuzzy +msgid "Close all tabs" +msgstr "Sekmeyi kapat" + +#: chat/chatwindow.cpp:856 +#, fuzzy +msgid "Close current tab" +msgstr "Sekmeyi kapat" + +#: chat/chatwindow.cpp:1467 +#, fuzzy +msgid "Show Side&bar" +msgstr "Kenar Ƈubuğu" + +#: chat/chatwindow.cpp:1468 +#, fuzzy +msgid "Show the contact sidebar" +msgstr "Bağlantı yanƧubuğunu gƶster ya da gizle" + +#: chat/chatwindow.cpp:1565 +msgid "%1 is typing." +msgstr "%1 yazıyor." + +#: chat/chatwindow.cpp:1575 +msgid "%1 and %2 are typing." +msgstr "%1 ve %2 yazıyor." + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "%1, %2 ve diğer %3 kişi yazıyor." + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "Sohbet" + +#: chat/chatwindow.cpp:1615 +#, fuzzy +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "%1 - Sohbet" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "&E-posta gƶnder" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 msgid "&View Profile" msgstr "&Profili Gƶster" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "Kişi &Ekle" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 msgid "A&llow Contact" msgstr "Kişiye İzin &Ver" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 msgid "&Delete Contact" msgstr "&Kişiyi Sil" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "Kişiyi E&ngelle" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "Kişinin &Engelini Kaldır" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 msgid "&Friendly Name" msgstr "&Takma ad:" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "&Kişisel Mesaj" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 msgid "&Email Address" msgstr "E-p&osta adresi:" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "Ko&pyala..." -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 msgid "Blocked" msgstr "Engellenmiş" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 #, fuzzy msgid "The contact is %1" msgstr "Kişi Ƨevrimdışı" -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +#, fuzzy +msgid "Add to Chat" +msgstr "Kişi ekle" + +#: chat/emoticonsidebar.cpp:213 +#, fuzzy +msgid "Insert new" +msgstr "Bir ifade kullan" + +#: chat/emoticonsidebar.cpp:214 +msgid "Edit" +msgstr "" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +#, fuzzy +msgid "Remove" +msgstr "Silindi" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 #, fuzzy msgid "Web Messenger" msgstr "Site tasarımı" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +#, fuzzy +msgid "Windows Live Messenger %1" +msgstr "Site tasarımı" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "Bağlı" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "Bağlı değil" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "İzin verildi" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "Silindi" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 +#, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr "%1 %2" + +#: contactlistviewdelegate.cpp:150 #, fuzzy msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "%1 %2" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" -msgstr "Bu hesabın Hotmail gelen kutusu yok!" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "Uzakta" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "Döneceğim" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "Meşgul" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "Görünmez" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" +msgstr "Boşta" + +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "Telefonda" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "Yemekte" + +#: dialogs/addcontactdialog.cpp:48 #, fuzzy msgid "Add a Contact" msgstr "Kişi ekle" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 #, fuzzy msgid "No group" msgstr "Grubu &Sil" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 msgid "Add New Emoticon" msgstr "Yeni İfade &Ekle" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "İfadeler" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "\"%1\" ifadesi zaten var, üzerine yazmak istiyor musunuz?" @@ -1329,66 +1903,67 @@ msgstr "\"%1\" ifadesi zaten var, üzerine yazmak istiyor musunuz?" msgid "Specify an Away message" msgstr "Uzakta durumu için ileti belirle" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "Bu kişi için seçimlik bir ad girin" +#: dialogs/contactaddeduserdialog.cpp:85 +#, fuzzy +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " +msgstr "%1
sizi bağlantı listesine ekledi. Ne yapmak istiyorsunuz?:" -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "Bağlı" + +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +msgid "Not seen yet" msgstr "" -"Bu kişi bağlandığı ya da bağlantısını kopardığı zaman uyarı balonu gƶster" -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "Resim:" +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +#, fuzzy +msgid "No messages yet" +msgstr "Sohbet mesajlarında &zamanı gƶster" -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "Ses:" +#: dialogs/contactpropertiesdialog.cpp:381 +msgid "Last seen: %1" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:234 -msgid "Contact Properties for %1" -msgstr "%1 iƧin Ɩzellikler" +#: dialogs/contactpropertiesdialog.cpp:382 +msgid "Last message: %1" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " -msgstr "E-posta adresi:" +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "E-posta" -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "GeƧerli isim: " +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "E-posta istemcisi" -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" -msgstr "Ağ Penceresi" - -#: dialogs/networkwindow.cpp:57 +#: dialogs/networkwindow.cpp:79 #, fuzzy msgid "S&ave tab" msgstr "Sekmeyi kaydet" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 #, fuzzy msgid "C&lear tab" msgstr "Sekmeyi temizle" -#: dialogs/networkwindow.cpp:59 -#, fuzzy -msgid "Cl&ose tab" -msgstr "Sekmeyi kapat" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 #, fuzzy msgid "" "No connections are present.\n" "Cannot open the Network Window." msgstr "HiƧ bağlantı yok. Lütfen Ağ Penceresini aƧın." -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 #, fuzzy msgid "" "Could not save the Network Window log. Make sure you have permission to " @@ -1397,59 +1972,86 @@ msgstr "" "Ağ Penceresi kayıtları kaydedilemiyor. Kayıtların yapıldığı dizinde yazma " "izniniz olduğundan emin olun." -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "Ana bağlantı sekmesi kapatılamaz" -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +#, fuzzy +msgid "Cannot send commands to this kind of connection!" +msgstr "Ana bağlantı sekmesi kapatılamaz" + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 #, fuzzy msgid "Completed" msgstr "Bilgisayar" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "%1 MB" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "%1 KB" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "%1 bayt" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +msgid "%1 of %2 received." msgstr "" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +msgid "%1 of %2 sent." msgstr "" -#: dialogs/transferwindow.cpp:55 -msgid "File Transfers" -msgstr "Dosya Aktarımları" +#: dialogs/transferentry.cpp:373 +msgid "infinite" +msgstr "" -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 #, fuzzy msgid "Cl&ean Up" msgstr "&Temizle" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " "the theme folder '%1'." @@ -1457,405 +2059,447 @@ msgstr "" "İfade teması kaydedilemiyor. Tema dizini olan '%1' dizinine yazma izniniz " "olduğundan emin olun." -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 msgid "Smile" msgstr "Gülen surat" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "Gƶz kırpan" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "Dil Ƨıkaran" -#: emoticontheme.cpp:797 +#: emoticontheme.cpp:812 msgid "Big smile" msgstr "Kahkaha" -#: emoticontheme.cpp:798 +#: emoticontheme.cpp:813 msgid "Sad" msgstr "Üzgün" -#: emoticontheme.cpp:799 +#: emoticontheme.cpp:814 msgid "Crying" msgstr "Ağlıyor" -#: emoticontheme.cpp:800 +#: emoticontheme.cpp:815 msgid "Angry" msgstr "Kızgın" -#: emoticontheme.cpp:801 +#: emoticontheme.cpp:816 msgid "Confused" msgstr "Kafası karışık" -#: emoticontheme.cpp:802 +#: emoticontheme.cpp:817 msgid "Embarrassed" msgstr "Utanmış" -#: emoticontheme.cpp:803 +#: emoticontheme.cpp:818 msgid "Disappointed" msgstr "Kırgın" -#: emoticontheme.cpp:804 +#: emoticontheme.cpp:819 msgid "Hot" msgstr "Sıcak" -#: emoticontheme.cpp:805 +#: emoticontheme.cpp:820 msgid "Baring teeth" msgstr "Dişleri gƶsteren" -#: emoticontheme.cpp:806 +#: emoticontheme.cpp:821 msgid "Nerd" msgstr "Gƶzlüklü" -#: emoticontheme.cpp:807 +#: emoticontheme.cpp:822 msgid "Sick" msgstr "Hasta" -#: emoticontheme.cpp:808 +#: emoticontheme.cpp:823 msgid "Surprised" msgstr "Şaşkın" -#: emoticontheme.cpp:809 +#: emoticontheme.cpp:824 msgid "Party" msgstr "Parti" -#: emoticontheme.cpp:810 +#: emoticontheme.cpp:825 msgid "Sleepy" msgstr "Uykulu" -#: emoticontheme.cpp:811 +#: emoticontheme.cpp:826 msgid "Thinking" msgstr "Düşünen" -#: emoticontheme.cpp:812 +#: emoticontheme.cpp:827 msgid "Don't tell anyone" msgstr "Kimseye sƶyleme" -#: emoticontheme.cpp:813 +#: emoticontheme.cpp:828 msgid "Secret telling" msgstr "Bu bir sır" -#: emoticontheme.cpp:814 +#: emoticontheme.cpp:829 msgid "Eye-rolling" msgstr "Gƶzleri yuvarlayan" -#: emoticontheme.cpp:815 +#: emoticontheme.cpp:830 msgid "Sarcastic" msgstr "Alaycı" -#: emoticontheme.cpp:816 +#: emoticontheme.cpp:831 msgid "I don't know" msgstr "Bilmiyorum" -#: emoticontheme.cpp:817 +#: emoticontheme.cpp:832 msgid "Be right back" msgstr "Hemen dƶneceğim" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "Melek" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "Soldan sarıl" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "Erkek Ƨocuk" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "Kırmızı kalp" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "Kırmızı gül" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "Parmaklar yukarı" -#: emoticontheme.cpp:824 +#: emoticontheme.cpp:839 msgid "Dog face" msgstr "Kƶpek" -#: emoticontheme.cpp:825 +#: emoticontheme.cpp:840 msgid "Sun" msgstr "Güneş" -#: emoticontheme.cpp:826 +#: emoticontheme.cpp:841 msgid "Devil" msgstr "Şeytan" -#: emoticontheme.cpp:827 +#: emoticontheme.cpp:842 msgid "Right hug" msgstr "Sağdan sarıl" -#: emoticontheme.cpp:828 +#: emoticontheme.cpp:843 msgid "Girl" msgstr "Kız Ƨocuk" -#: emoticontheme.cpp:829 +#: emoticontheme.cpp:844 msgid "Broken heart" msgstr "Kırık kalp" -#: emoticontheme.cpp:830 +#: emoticontheme.cpp:845 msgid "Wilted rose" msgstr "Solgun gül" -#: emoticontheme.cpp:831 +#: emoticontheme.cpp:846 msgid "Thumbs down" msgstr "Parmak aşağı" -#: emoticontheme.cpp:832 +#: emoticontheme.cpp:847 msgid "Cat face" msgstr "Kedi" -#: emoticontheme.cpp:833 +#: emoticontheme.cpp:848 msgid "Sleeping half-moon" msgstr "Uykulu ay" -#: emoticontheme.cpp:834 +#: emoticontheme.cpp:849 msgid "Red lips" msgstr "Kırmızı dudaklar" -#: emoticontheme.cpp:835 +#: emoticontheme.cpp:850 msgid "Clapping" msgstr "Alkış" -#: emoticontheme.cpp:836 +#: emoticontheme.cpp:851 msgid "Crossed fingers" msgstr "Şans dile" -#: emoticontheme.cpp:837 +#: emoticontheme.cpp:852 msgid "Auto" msgstr "Otomatik" -#: emoticontheme.cpp:838 +#: emoticontheme.cpp:853 msgid "Airplane" msgstr "UƧak" -#: emoticontheme.cpp:839 +#: emoticontheme.cpp:854 msgid "Turtle" msgstr "Kaplumbağa" -#: emoticontheme.cpp:840 +#: emoticontheme.cpp:855 msgid "Snail" msgstr "Salyangoz" -#: emoticontheme.cpp:841 +#: emoticontheme.cpp:856 msgid "Black sheep" msgstr "Kara koyun" -#: emoticontheme.cpp:842 +#: emoticontheme.cpp:857 msgid "Goat" msgstr "KeƧi" -#: emoticontheme.cpp:843 +#: emoticontheme.cpp:858 msgid "Vampire bat" msgstr "Vampir yarasa" -#: emoticontheme.cpp:844 +#: emoticontheme.cpp:859 msgid "Pizza" msgstr "Pizza" -#: emoticontheme.cpp:845 +#: emoticontheme.cpp:860 msgid "Beer mug" msgstr "Bira" -#: emoticontheme.cpp:846 +#: emoticontheme.cpp:861 msgid "Martini glass" msgstr "İƧki bardağı" -#: emoticontheme.cpp:847 +#: emoticontheme.cpp:862 msgid "Coffee cup" msgstr "Kahve fincanı" -#: emoticontheme.cpp:848 +#: emoticontheme.cpp:863 msgid "Birthday cake" msgstr "Doğum günü pastası" -#: emoticontheme.cpp:849 +#: emoticontheme.cpp:864 msgid "Plate" msgstr "Tabak" -#: emoticontheme.cpp:850 +#: emoticontheme.cpp:865 msgid "Bowl" msgstr "Tas" -#: emoticontheme.cpp:851 +#: emoticontheme.cpp:866 msgid "Star" msgstr "Yıldız" -#: emoticontheme.cpp:852 +#: emoticontheme.cpp:867 msgid "Rainbow" msgstr "Gƶkkuşağı" -#: emoticontheme.cpp:853 +#: emoticontheme.cpp:868 msgid "Stormy cloud" msgstr "Şimşekli bulut" -#: emoticontheme.cpp:854 +#: emoticontheme.cpp:869 msgid "Lightning" msgstr "Yıldırım" -#: emoticontheme.cpp:855 +#: emoticontheme.cpp:870 msgid "Umbrella" msgstr "Şemsiye" -#: emoticontheme.cpp:856 +#: emoticontheme.cpp:871 msgid "Island with a palm tree" msgstr "Issız ada" -#: emoticontheme.cpp:857 +#: emoticontheme.cpp:872 msgid "Telephone receiver" msgstr "Ahize" -#: emoticontheme.cpp:858 +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "Cep telefonu" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "E-posta" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 msgid "Clock" msgstr "Saat" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 msgid "Camera" msgstr "Fotoğraf Makinesi" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "Film şeridi" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "Not" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "KelepƧe" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 msgid "Money" msgstr "Para" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "Ampul" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "Sigara" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "Futbol topu" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "Hediye" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "X-Box" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "Bilgisayar" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 msgid "KMess Icon" msgstr "KMess simgesi" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "Sunucu hazır değil" + +#: initialview.cpp:377 +msgid "Connect" +msgstr "Bağlan" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "Bağlantıyı &Kes" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "" -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "" -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "Yeni &Grup" + +#: kmess.cpp:226 msgid "Add a group" msgstr "Grup &Ekle" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "Bu grup iƧin yeni adı girin:" -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "'%1' geƧerli bir kişi adresi değil." - -#: kmess.cpp:638 +#: kmess.cpp:569 msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" msgstr "" "GerƧekten %1 grubunu listenizden silmek istiyor musunuz?" -#: kmess.cpp:640 +#: kmess.cpp:571 msgid "Remove contact" msgstr "K&işiyi Sil" -#: kmess.cpp:641 kmess.cpp:684 -#, fuzzy -msgid "Remove" -msgstr "Silindi" - -#: kmess.cpp:642 +#: kmess.cpp:573 msgid "Remove and block" msgstr "Engeli kaldır" -#: kmess.cpp:681 +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "GerƧekten %1 grubunu silmek istiyor musunuz?" -#: kmess.cpp:683 -msgid "Remove group" -msgstr "Grubu &Sil" +#: kmess.cpp:631 +#, fuzzy +msgctxt "dialog button" +msgid "Remove" +msgstr "Silindi" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "Bu ƶzel bir gruptur ve değiştirilemez." -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 msgid "Rename group" msgstr "&Grubu Yeniden Adlandır" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "Bağlı" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "Kimlik denetimi başarısız" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "Bağlı değil" -#: kmess.cpp:1441 +#: kmess.cpp:1408 +#, fuzzy msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" "

KMess sesleri ve bildirimleri Ƨalamayacak.

KMess'in 'eventsrc' " "dosyası bu dizinlerde bulunamadı: %1

Lütfen kurulumunuzu kontrol edin " "ve eksik dosyayı bu dizinlerden birine kopyalayın.

" -#: kmess.cpp:1445 +#: kmess.cpp:1412 msgid "Error with notifications" msgstr "Bildirimlerde hata" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "KMess" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "&Eylemler" @@ -1877,591 +2521,471 @@ msgstr "&Kişiyi Ara" msgid "Search by &Interest" msgstr "İ&lgiye Gƶre Ara" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "&Kişiyi Ara" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "Yeni &Hesap" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "&Hesap Ayarları" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "Bağla&n" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "Bağlantıyı &Kes" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "&Profilimi Gƶster" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "&Durumum" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "Kendiliğinden yanıtlamayla Uzakta" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "İ&zin Verilen Kişileri Gƶster" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 msgid "Show &Offline Contacts" msgstr "Bağlı &olmayanları gƶster" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "&Silinen Kişileri Gƶster" -#: kmessinterface.cpp:303 +#: kmessinterface.cpp:318 #, fuzzy -msgid "Show &Display Pictures" +msgid "Show &Empty Groups" +msgstr "İfadelerimi &Gƶster" + +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" msgstr "Gƶrüntü Resmi:" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "Gülen surat" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "&Kişileri şu ƶlçütle sırala" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "Grup" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "Bağlı/Bağlı değil" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "&Aktarım Penceresini Gƶster" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "&Ağ Penceresini Gƶster" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "Şimdi dinleniyor - %1" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +msgid "[%1] %2 goes online" +msgstr "" + +#: kmessview.cpp:363 +msgid "[%1] %2 goes offline" +msgstr "" + +#: kmessview.cpp:559 msgid "Cha&t" msgstr "&Sohbet" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "&Ɩzellikler" -#: kmessview.cpp:492 +#: kmessview.cpp:569 msgid "&Remove from group" msgstr "&Gruptan Sil" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +#, fuzzy +msgid "&Listening Music" +msgstr "Şimdi dinliyor - %1" + +#: kmessview.cpp:601 msgid "&Copy to Group" msgstr "Gruba &Kopyala" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "Gruba &Taşı" -#: kmessview.cpp:549 +#: kmessview.cpp:646 msgid "Move Group &Down" msgstr "Grubu &Aşağı Taşı" -#: kmessview.cpp:550 +#: kmessview.cpp:647 msgid "Move Group &Up" msgstr "Grubu &Yukarı Taşı" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "Grubu &Sil" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "Grubu Y&eniden Adlandır" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 #, fuzzy msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "E-posta" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "" -#: kmessview.cpp:918 +#: kmessview.cpp:1075 +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "" + +#: kmessview.cpp:1076 +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "" + +#: kmessview.cpp:1085 #, fuzzy msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "
%1 (%2)" -#: kmessview.cpp:921 +#: kmessview.cpp:1090 #, fuzzy -msgctxt "Contacts count in group tooltip" +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "Kişiler" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +#, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "Kişi Ƨevrimdışı" + +#: kmessview.cpp:1504 #, fuzzy msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "Buraya kişisel bir ileti yazın" -#: kmessview.cpp:1543 -msgid "You have 1 new e-mail in your inbox." -msgstr "Gelen kutunuzda yeni bir posta var." +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" -#: kmessview.cpp:1547 -msgid "You have %1 new emails in your inbox." -msgstr "Gelen kutunuzda %1 yeni posta var." - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "KMess" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 #, fuzzy msgid "Project support" msgstr "P4-İƧerik alanı desteği" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 #, fuzzy msgid "Current developer" msgstr "GnomeMeeting geliştiricisi" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 msgid "" "German translation, testing, documentation, web master, project management, " "etc..." msgstr "" "Almanca Ƨeviri, deneme, belgelendirme, web sayfası, proje yƶnetimi vs..." -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "Site tasarımı" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "Esas ve sarı/mavi/violet belirteƧ kümeleri ve İtalyanca Ƨeviri" -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "Ƈizgi Film İfadeleri" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "Ɩntanımlı ses teması" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "ArapƧa Ƨeviri, uluslararasılaştırma ve dosya kaydetme onarımı" -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 msgid "More Arabic translation" msgstr "Daha fazla ArapƧa Ƨeviri" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "Portekizce Ƨeviri" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 msgid "Catalan translation" msgstr "Katalanca Ƨeviri" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "" "Basitleştirilmiş Ƈince Ƨeviri, dosya gƶnderme hatası düzeltmesi, vekil " "sunucu bağlantısı kodu" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 msgid "More Simplified Chinese translation" msgstr "Daha fazla Basitleştirilmiş Ƈince Ƨeviri" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 msgid "Traditional Chinese translation" msgstr "Geleneksel Ƈince Ƨeviri" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 msgid "Danish translation" msgstr "Danimarkaca Ƨeviri" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 msgid "More Danish translation" msgstr "Daha fazla Danimarkaca Ƨeviri" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "Holandaca Ƨeviri" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 msgid "More Dutch translation" msgstr "Daha fazla Holandaca Ƨeviri" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 msgid "Estonian translation" msgstr "Estonyaca Ƨeviri" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 msgid "Finnish translation" msgstr "Fince Ƨeviri" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 msgid "More Finnish translation" msgstr "Daha fazla Fince Ƨeviri" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "Fransızca Ƨeviri" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 msgid "More French translation, MSN6 emoticon definitions" msgstr "Daha fazla Fransızca Ƨeviri, MSN6 ifadelerinin tanımları" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 msgid "More French translation" msgstr "Daha fazla Fransızca Ƨeviri" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 msgid "Hungarian translation" msgstr "Macarca Ƨeviri" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 msgid "More Italian translation" msgstr "Daha fazla İtalyanca Ƨeviri" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "Korece Ƨeviri" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 msgid "Norsk BokmĆ„l translation" msgstr "NorveƧ Bokmal Ƨeviri" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 msgid "Slovenian translation" msgstr "Slovence Ƨeviri" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "İspanyolca Ƨeviri" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 msgid "More Spanish translation" msgstr "Daha fazla İspanyolca Ƨeviri" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 msgid "Swedish translation" msgstr "İspanyolca Ƨeviri" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 msgid "Thai translation" msgstr "Tayca Ƨeviri" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "TürkƧe Ƨeviri" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "Daha fazla TürkƧe Ƨeviri" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -#, fuzzy -msgid "Guido Solinas" -msgstr "Ƈevri&miƧi olduklarında" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "Dosya Aktarımları" + +#: main.cpp:134 msgid "P4-Context field support" msgstr "P4-İƧerik alanı desteği" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "Xinerama ayarları" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "Asıl dosya alım kodu" -#: main.cpp:120 -msgid "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" msgstr "" -#: main.cpp:120 +#: main.cpp:138 +#, fuzzy +msgid "KWallet support" +msgstr "P4-İƧerik alanı desteği" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "Ƈeşitli uluslararasılaştırma onarımları" + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "Ƈeşitli uluslararasılaştırma onarımları" -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "GnomeMeeting geliştiricisi" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "Kafasında kağıt paket olan adam" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "Esinlenme ve Ƨeşitli kodlar" -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 +#: main.cpp:150 msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "Eski baloncuk kodu, p2p kodunun ilk hali, msn etkileşimi yƶneticisi" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "Bekleme zamanlayıcı kodu" -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 +#: main.cpp:152 msgid "Close-to-tray icon screenshot code" msgstr "" -#: main.cpp:131 +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 msgid "Your name here?" msgstr "Ve siz?" -#: main.cpp:131 +#: main.cpp:156 #, fuzzy msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" "KMess yardım forumlarına hata düzeltmeleriniz ve yamalarınızla katılmanızı " @@ -2469,193 +2993,242 @@ msgstr "" "Bu listede isminizin unutulduğunu düşünüyorsanız lütfen bizimle iletişime " "geƧin!" -#: main.cpp:134 +#: main.cpp:159 #, fuzzy msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Sizin adınız" -#: main.cpp:135 +#: main.cpp:160 #, fuzzy msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "E-posta adresiniz:" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "Bu e-posta adresi ile otomatik bağlan" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 msgid "The contact cancelled the session." msgstr "Karşıdaki oturumu iptal etti" -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 msgid "The contact rejected the invitation." msgstr "Karşıdaki daveti reddetti." -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 msgid "You have cancelled the session." msgstr "Oturumu iptal ettiniz." -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "Daveti reddettiniz." -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +#, fuzzy +msgid "Do you want to accept or cancel?" msgstr "" "Ne yapmak istiyorsunuz? Kabul Et / Reddet" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +#, fuzzy +msgid "Click to cancel." msgstr "İptal etmek iƧin tıklayın." -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 msgid "Do you want to accept the file: %1 (%2)" msgstr "Bu dosyayı almak istiyor musunuz: %1 (%2)" -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 msgid "The transfer of %1 failed. Couldn't open file." msgstr "%1 aktarılamadı. Dosya aƧılamadı." -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "Aktarım kabul edildi." + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 msgid "Connecting to %1, port %2" msgstr "Bağlanıyor %1, port %2" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 msgid "The transfer was cancelled" msgstr "Aktarım iptal edildi." -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 msgid "Connection established" msgstr "Bağlantı sağlandı" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 msgid "Successfully transferred file: %1" msgstr "Dosya başarıyla aktarıldı: %1" -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 msgid "The transfer of %1 failed. The file does not exist." msgstr "%1 aktarılamadı. Dosya bulunamadı." -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 msgid "The transfer of %1 failed. The file could not be read." msgstr "%1 aktarılamadı. Dosya okunamıyor." -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 msgid "Sending file %1" msgstr "Dosya gƶnderiliyor: %1" -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "Aktarım kabul edildi." - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "Dosya aktarımı iptal edildi. Kƶtü veri aktarımı alındı." -#: network/applications/filetransferp2p.cpp:345 -msgid "The transfer of %1 failed. Couldn't open file" -msgstr "%1 dosyasının aktarımı başarısız oldu. Dosya aƧılamadı" +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." +msgstr "" -#: network/applications/filetransferp2p.cpp:524 -msgid "The contact cancelled the transfer." +#: network/applications/filetransferp2p.cpp:348 +#, fuzzy +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "" +"'%1' isimli dosya zaten var.\n" +"üzerine yazmak istiyor musunuz?" + +#: network/applications/filetransferp2p.cpp:378 +#, fuzzy +msgid "The transfer of file "%1" failed. Couldn't save the file." +msgstr "%1 aktarılamadı. Dosya aƧılamadı." + +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 +#, fuzzy +msgid "The contact has cancelled the transfer of file "%1"." msgstr "Karşıdaki kişi aktarımı iptal etti." -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "Oturumu iptal ettiniz." + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "" -#: network/applications/filetransferp2p.cpp:768 -msgid "The transfer of %1 failed. The file does not exist." +#: network/applications/filetransferp2p.cpp:676 +#, fuzzy +msgid "Successfully sent file "%1"." +msgstr "Dosya başarıyla aktarıldı: %1" + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "Dosya başarıyla aktarıldı: %1" + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "%1 dosyası aktarılamadı. Dosya bulunamadı." -#: network/applications/filetransferp2p.cpp:773 -msgid "The transfer of %1 failed. The file could not be read." +#: network/applications/filetransferp2p.cpp:818 +#, fuzzy +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "%1 dosyası aktarılamadı. Dosya okunamıyor." -#: network/applications/filetransferp2p.cpp:809 -msgid "Sending file %1 (%2)" +#: network/applications/filetransferp2p.cpp:855 +#, fuzzy +msgid "Sending file "%1" (%2)." msgstr "Dosya gƶnderiliyor: %1 (%2)" -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "Karşıdaki kişi aktarımı iptal etti." + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "Bir buluşmaya davet edildiniz (GnomeMeeting kullanarak)." -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 msgid "Starting GnomeMeeting. Connecting to %1." msgstr "GnomeMeeting Başlatılıyor. %1 kişisine bağlanılıyor." -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "Kişi buluşmaya davet ediliyor." -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "Davet reddedildi. Karşıdaki istemci bunu desteklemiyor." -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 msgid "The invitation was aborted. An internal error occured." msgstr "Davet iptal edildi. Bir hata oluştu." -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "Davet iptal edildi. Karşıdaki uzun süredir cevap vermiyor." -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "Davet iptal edildi. Karşıdan uzun süredir veri gelmiyor." -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "Davet iptal edildi. Sohbet bağlantısı kapatıldı." -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 msgid "The invitation was aborted." msgstr "Davet iptal edildi." -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "Bu kişinin masaüstünü paylaşmaya davet edildiniz." -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 msgid "Starting KRDC. Connecting to %1." msgstr "KRDC Başlatılıyor. %1 kişisine bağlanılıyor." -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." -msgstr "Karşıdaki KMess'in henüz desteklemediği bir MSN6 ƶzelliği kullanıyor." +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +msgid "The contact rejected the invitation. An internal error occured." +msgstr "Kişi daveti reddetti. Bir hata oluştu." -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +msgid "The transfer failed." +msgstr "Aktarım başarısız." + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." @@ -2663,117 +3236,109 @@ msgstr "" "Davet iptal edildi. Kişiden gelen veriler bozulmuş ya da KMess bunu " "desteklemiyor." -#: network/applications/p2papplication.cpp:1503 -msgid "The transfer failed. Data preparation failed." -msgstr "Aktarım başarısız. Veri hazırlanamadı." - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -msgid "The contact rejected the invitation. An internal error occured." -msgstr "Kişi daveti reddetti. Bir hata oluştu." - -#: network/applications/p2papplication.cpp:1626 -msgid "The transfer failed." -msgstr "Aktarım başarısız." - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "Aktarım başarısız. Kişiden gelen veriler bozulmuş ya da KMess bunu " "desteklemiyor." -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "Aktarım başarısız. Karşıdaki uzun süredir cevap vermiyor." + +#: network/applications/p2papplicationbase.cpp:1015 +msgid "The transfer failed. An internal error occured." +msgstr "Aktarım başarısız. Bir hata oluştu." + +#: network/applications/p2papplicationbase.cpp:1176 +msgid "The transfer failed. Couldn't open data source." +msgstr "Aktarım başarısız. Veri kaynağı aƧılamadı." + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "Karşıdaki KMess'in henüz desteklemediği bir MSN6 ƶzelliği kullanıyor." + +#: network/applications/p2papplication.cpp:1071 +msgid "The transfer failed. Data preparation failed." +msgstr "Aktarım başarısız. Veri hazırlanamadı." + +#: network/applications/p2papplication.cpp:1178 msgid "The invitation was cancelled. Message was not directed to us." msgstr "Davet iptal edildi. İleti bize gƶnderilmemiş." -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "" "Aktarım başarısız. Kişiden gelen veriler bozulmuş ya da KMess bunu " "desteklemiyor." -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "Bağlantı bekleniyor %1, port %2" -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "Dolaylı dosya gƶnderimi deneniyor (bu yavaş olabilir)." -#: network/applications/p2papplication.cpp:3297 -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "Aktarım başarısız. Karşıdaki uzun süredir cevap vermiyor." - -#: network/applications/p2papplication.cpp:3316 -msgid "The transfer failed. An internal error occured." -msgstr "Aktarım başarısız. Bir hata oluştu." - -#: network/applications/p2papplication.cpp:3693 -msgid "The transfer failed. Couldn't open data source." -msgstr "Aktarım başarısız. Veri kaynağı aƧılamadı." - -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:3113 #, fuzzy msgid "Waiting for connection" msgstr "Kişi listesi alınıyor..." -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " "accept." msgstr "" "Davet iptal edildi. Karşıdakinin kabul etmesi beklenirken zaman aşımı oldu." -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." msgstr "Davet iptal edildi. Bağlantıda zaman aşımı oldu." -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "Davet iptal edildi. Veri beklenirken zaman aşımı oldu." -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 msgid "You are invited to start a voice conversation." msgstr "Sesli bir gƶrüşmeye davet edildiniz." -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 msgid "" "You are invited to start a voice conversation but support for this was not " "installed" msgstr "Sesli bir gƶrüşmeye davet edildiniz fakat bunun desteği kurulu değil." -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 msgid "You have cancelled the voice conversation." msgstr "Sesli gƶrüşmeyi iptal ettiniz." -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "Davet iptal edildi. Ses aygıtı aƧılamadı." -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 msgid "Start voice conversation. Connecting to %1." msgstr "Sesli gƶrüşme başlatılıyor. % kişisine bağlanıyor." -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 msgid "Start voice conversation. Listening on %1." msgstr "Sesli gƶrüşme başlat. %1 dinleniyor." -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 msgid "Inviting the contact to a voice conversation." msgstr "Sesli gƶrüşme daveti gƶnderiliyor." -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 msgid "The contact is inviting you for '%1', but this is not implemented yet." msgstr "Karşıdaki sizi '%1' iƧin davet ediyor. Bu henüz desteklenmiyor." @@ -2816,634 +3381,773 @@ msgstr "Bağlantı kurulamadı: %1" msgid "Receiving file %1" msgstr "Dosya alınıyor: %1" -#: network/msnconnection.cpp:477 -msgid "1 ping lost" -msgstr "1 ping kayıp" - -#: network/msnconnection.cpp:481 -msgid "%1 pings lost" -msgstr "%1 ping kayıp" - -#: network/msnconnection.cpp:496 -msgid "The connection to the server was lost." -msgstr "Sunucuya bağlantı kaybedildi." - -#: network/msnconnection.cpp:704 +#: network/msnconnection.cpp:589 #, fuzzy -msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." -msgstr "" -"Kmess MSN Messenger servisine bağlanamadı.\n" -"Lütfen İnternet bağlantınızı kontrol edin.\n" -"Sistem hatası: %1 (kod %2)." - -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "Karşıdaki sunucu bağlantıyı kapattı." - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" -"KMess MSN messenger sunucularına bağlanamadı. MSN Messenger servisi geƧici " -"olarak hizmet dışı olabilir veya İnternet bağlantınızda bir sorun var." - -#: network/msnnotificationconnection.cpp:724 -msgid "Show MSN Messenger Service status?" -msgstr "Messenger servisi durumu gƶsterilsin mi?" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "Sunucu Hatası" - -#: network/msnnotificationconnection.cpp:1344 -#, fuzzy -msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" -msgstr "" -"Bağlantınız koptu, çünkü başka bir\n" -"MSN Messenger istemcisiyle veya\n" -"başka bir yerden bağlantı kurmuş olabilirsiniz." - -#: network/msnnotificationconnection.cpp:1558 -msgid "Got synchronization" -msgstr "Eşzamanlama alındı" - -#: network/msnnotificationconnection.cpp:1699 -msgid "Authenticating" -msgstr "Kimlik denetimi yapılıyor" - -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "Kullanıcı onayı alındı" - -#: network/msnnotificationconnection.cpp:1752 -msgid "Waiting for contact list..." -msgstr "Kişi listesi alınıyor..." - -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "Bilgilendirme sunucusuna aktarım" - -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" -msgstr "" -"Kimlik doğrulaması başarısız, lütfen hesap adınızı ve şifrenizi kontrol edin" - -#: network/msnnotificationconnection.cpp:2042 -msgid "Connecting..." -msgstr "Bağlanıyor..." - -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" -msgstr "KMess, sunucudan bilinmeyen bir komut aldı: %1" - -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 -msgid "Invalid command syntax" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -msgid "There was an internal error in KMess: %1" -msgstr "KMess iƧinde bir hata oluştu: %1" - -#: network/msnnotificationconnection.cpp:2243 -msgid "Invalid command parameter" -msgstr "" - -#: network/msnnotificationconnection.cpp:2246 -msgid "The email you have tried to add is not a MSN Messenger account" -msgstr "Eklemeye Ƨalıştığınız e-postanın MSN Messenger hesabı yok" - -#: network/msnnotificationconnection.cpp:2249 -msgid "Domain name missing" -msgstr "" - -#: network/msnnotificationconnection.cpp:2252 -msgid "Already logged in" -msgstr "" - -#: network/msnnotificationconnection.cpp:2255 -msgid "The account name given is invalid" -msgstr "Verilen hesap adı geƧersiz" - -#: network/msnnotificationconnection.cpp:2258 -msgid "" -"That account name is invalid, or your passport has not been confirmed yet" -msgstr "Verilen hesap adı geƧersiz veya henüz aktifleştirilmemiş" - -#: network/msnnotificationconnection.cpp:2261 -msgid "Your contact list is full" -msgstr "Bağlantı listeniz dolu" - -#: network/msnnotificationconnection.cpp:2264 -msgid "Invalid SBP parameter" -msgstr "" - -#: network/msnnotificationconnection.cpp:2267 -msgid "This contact is already on your list" -msgstr "Kişi zaten listenizde bulunuyor" - -#: network/msnnotificationconnection.cpp:2270 -msgid "This contact is not on your list" -msgstr "Kişi listenizde yok" - -#: network/msnnotificationconnection.cpp:2273 -msgid "This contact is not online" -msgstr "Kişi Ƨevrimdışı" - -#: network/msnnotificationconnection.cpp:2276 -msgid "Already in this mode" -msgstr "" - -#: network/msnnotificationconnection.cpp:2279 -#, fuzzy -msgid "Contact is in the opposite list" -msgstr "Kişi listenizde yok" - -#: network/msnnotificationconnection.cpp:2282 -msgid "Your contact list has too many groups" -msgstr "Bağlantı listenizde Ƨok fazla grup var" - -#: network/msnnotificationconnection.cpp:2285 -msgid "This group can't be changed" -msgstr "Bu ƶzel bir gruptur ve değiştirilemez." - -#: network/msnnotificationconnection.cpp:2288 -msgid "This group is not empty" -msgstr "Bu grup boş değil" - -#: network/msnnotificationconnection.cpp:2291 -msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" -msgstr "Bu grup adı Messenger veya Hotmail kişi listenizde kullanılıyor." - -#: network/msnnotificationconnection.cpp:2294 -msgid "The group name is too long" -msgstr "Grup adı Ƨok uzun" - -#: network/msnnotificationconnection.cpp:2297 -msgid "Attempted to change group \"0\"" -msgstr "" - -#: network/msnnotificationconnection.cpp:2300 -#, fuzzy -msgid "Invalid Group" -msgstr "Grubu Y&eniden Adlandır" - -#: network/msnnotificationconnection.cpp:2303 -msgid "Switchboard server failed" -msgstr "Pano sunucusu başarısız" - -#: network/msnnotificationconnection.cpp:2306 -msgid "Transfer to switchboard server failed" -msgstr "Pano sunucusu aktarımı başarısız" - -#: network/msnnotificationconnection.cpp:2309 -msgid "Direct connection (MSNSLP) error, connection failed" -msgstr "Direkt bağlantı (MSNSLP) hatası, bağlantı başarısız" - -#: network/msnnotificationconnection.cpp:2312 -msgid "Required field missing" -msgstr "" - -#: network/msnnotificationconnection.cpp:2315 -msgid "Not logged in" -msgstr "" - -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" -msgstr "Kişi listesine ulaşırken hata, daha sonra tekrar deneyin" - -#: network/msnnotificationconnection.cpp:2322 -msgid "Command is disabled" -msgstr "" - -#: network/msnnotificationconnection.cpp:2325 -msgid "Your account is banned." -msgstr "Hesabınız yasaklanmış." - -#: network/msnnotificationconnection.cpp:2329 -#, fuzzy -msgid "Challenge response failed" -msgstr "Aktarım başarısız." - -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" -msgstr "Ƈok fazla oturum aƧıyorsunuz" - -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" -msgstr "Ƈok fazla oturum aƧık" - -#: network/msnnotificationconnection.cpp:2341 -msgid "Unexpected command sequence" -msgstr "" - -#: network/msnnotificationconnection.cpp:2344 -msgid "Bad friend name" -msgstr "Hatalı isim" - -#: network/msnnotificationconnection.cpp:2348 -msgid "Bad CVR data" -msgstr "" - -#: network/msnnotificationconnection.cpp:2353 -msgid "The server reports KMess is flooding it with too many data" -msgstr "Sunucu KMess'in Ƨok fazla veri gƶndererek flood yaptığını sƶylüyor." - -#: network/msnnotificationconnection.cpp:2358 -#, fuzzy -msgid "Authentication ticket was incorrect" -msgstr "Kimlik denetimi başarısız" - -#: network/msnnotificationconnection.cpp:2362 -msgid "You can't start a chat with someone while you are invisible." -msgstr "Gƶrünmez durumdayken bir sohbet başlatamazsınız." - -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." -msgstr "" -"Ƈocuk hesabınız var, İnternette sohbet yapmak iƧin ebeveynlerinizden izin " -"almalısınız." - -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." -msgstr "Hesabınızın doğrulanması gerekiyor." - -#: network/msnnotificationconnection.cpp:2373 -msgid "Bad USR ticket" -msgstr "" - -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" -msgstr "KMess - MSN hatası" - -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" -msgstr "Sunucuda iƧ hata oluştu" - -#: network/msnnotificationconnection.cpp:2414 -msgid "The server is too busy" -msgstr "Sunucu Ƨok meşgul" - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "Sunucuya erişilemiyor" - -#: network/msnnotificationconnection.cpp:2422 -msgid "Peer notification server down" -msgstr "Bireysel bildirim sunucusu devre dışı" - -#: network/msnnotificationconnection.cpp:2426 -msgid "The server is going down" -msgstr "Sunucu kapatılacak" - -#: network/msnnotificationconnection.cpp:2429 -msgid "The server is going down soon" -msgstr "Sunucu yakında kapatılacak" - -#: network/msnnotificationconnection.cpp:2433 -msgid "Write is blocking" -msgstr "Yazma engelleniyor" - -#: network/msnnotificationconnection.cpp:2436 -msgid "Session is overloaded" -msgstr "Oturum aşırı yüklenmiş durumda" - -#: network/msnnotificationconnection.cpp:2441 -msgid "The server is not available" -msgstr "Sunucu hazır değil" - -#: network/msnnotificationconnection.cpp:2444 -msgid "Authentication failed" -msgstr "Kimlik denetimi başarısız" - -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" -msgstr "Yeni kurallar kabul edilmiyor" - -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" -msgstr "KMess, sunucudan bilinmeyen bir hata mesajı aldı: %1" - -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "Uyarı: 1 dakika iƧinde sunucu bakım iƧin kapanacak!" - -#: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." -msgstr "MSN Sunucusu bakım nedeniyle 1 dakika iƧinde kapanacağını bildirdi." - -#: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" -msgstr "Uyarı: Sunucu %1 dakika iƧinde bakım iƧin kapanacak!" - -#: network/msnnotificationconnection.cpp:2900 -msgid "Lost reference to SOAP client" -msgstr "" - -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" -msgstr "" -"KMess Ƨevrimdışı mesajları işleyemedi.\n" -"Ayrıntılar: %1" - -#: network/msnnotificationconnection.cpp:3209 -msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" -msgstr "" -"Doğrulama başarısız, KMess hesabınızla giriş yapamadı.\n" -"Ayrıntılar: %1" - -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" +msgid "KMess could not access the remote webservice.
Details: %1" msgstr "" "KMess uzaktaki web servisine erişemedi. \n" "\n" "Ayrıntılar: %1" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnnotificationconnection.cpp:1317 +#, fuzzy +msgid "" +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" +msgstr "" +"Bağlantınız koptu, çünkü başka bir\n" +"MSN Messenger istemcisiyle veya\n" +"başka bir yerden bağlantı kurmuş olabilirsiniz." + +#: network/msnnotificationconnection.cpp:1532 +msgid "Got synchronization" +msgstr "Eşzamanlama alındı" + +#: network/msnnotificationconnection.cpp:1670 +#, fuzzy +msgid "Authenticating..." +msgstr "Kimlik denetimi yapılıyor" + +#: network/msnnotificationconnection.cpp:1719 +msgid "Waiting for contact list..." +msgstr "Kişi listesi alınıyor..." + +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." +msgstr "" + +#: network/msnnotificationconnection.cpp:1894 +#, fuzzy +msgid "Authentication failed, please verify your account name and password." +msgstr "" +"Kimlik doğrulaması başarısız, lütfen hesap adınızı ve şifrenizi kontrol edin" + +#: network/msnnotificationconnection.cpp:1993 +msgid "Connecting..." +msgstr "Bağlanıyor..." + +#: network/msnnotificationconnection.cpp:2167 +#, fuzzy +msgid "Unknown command received from the server: %1" +msgstr "KMess, sunucudan bilinmeyen bir komut aldı: %1" + +#: network/msnnotificationconnection.cpp:2192 +msgid "Invalid command syntax" +msgstr "" + +#: network/msnnotificationconnection.cpp:2196 +msgid "Invalid command parameter" +msgstr "" + +#: network/msnnotificationconnection.cpp:2199 +msgid "The email you have tried to add is not a MSN Messenger account" +msgstr "Eklemeye Ƨalıştığınız e-postanın MSN Messenger hesabı yok" + +#: network/msnnotificationconnection.cpp:2204 +msgid "Domain name missing" +msgstr "" + +#: network/msnnotificationconnection.cpp:2208 +msgid "Already logged in" +msgstr "" + +#: network/msnnotificationconnection.cpp:2211 +msgid "The account name given is invalid" +msgstr "Verilen hesap adı geƧersiz" + +#: network/msnnotificationconnection.cpp:2215 +msgid "" +"That account name is invalid, or your passport has not been confirmed yet" +msgstr "Verilen hesap adı geƧersiz veya henüz aktifleştirilmemiş" + +#: network/msnnotificationconnection.cpp:2218 +msgid "Your contact list is full" +msgstr "Bağlantı listeniz dolu" + +#: network/msnnotificationconnection.cpp:2223 +msgid "Invalid SBP parameter" +msgstr "" + +#: network/msnnotificationconnection.cpp:2226 +msgid "This contact is already on your list" +msgstr "Kişi zaten listenizde bulunuyor" + +#: network/msnnotificationconnection.cpp:2230 +msgid "This contact is not on your list" +msgstr "Kişi listenizde yok" + +#: network/msnnotificationconnection.cpp:2234 +msgid "This contact is not online" +msgstr "Kişi Ƨevrimdışı" + +#: network/msnnotificationconnection.cpp:2239 +msgid "Already in this mode" +msgstr "" + +#: network/msnnotificationconnection.cpp:2243 +#, fuzzy +msgid "Contact is in the opposite list" +msgstr "Kişi listenizde yok" + +#: network/msnnotificationconnection.cpp:2247 +#, fuzzy +msgid "" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." +msgstr "Bu grup adı Messenger veya Hotmail kişi listenizde kullanılıyor." + +#: network/msnnotificationconnection.cpp:2251 +msgid "Your contact list has too many groups" +msgstr "Bağlantı listenizde Ƨok fazla grup var" + +#: network/msnnotificationconnection.cpp:2255 +msgid "This group can't be changed" +msgstr "Bu ƶzel bir gruptur ve değiştirilemez." + +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "Bağlantı listenizde Ƨok fazla grup var" + +#: network/msnnotificationconnection.cpp:2264 +msgid "This group is not empty" +msgstr "Bu grup boş değil" + +#: network/msnnotificationconnection.cpp:2268 +msgid "The group name is too long" +msgstr "Grup adı Ƨok uzun" + +#: network/msnnotificationconnection.cpp:2273 +msgid "Attempted to change group \"0\"" +msgstr "" + +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +msgid "There was an internal error in KMess: %1" +msgstr "KMess iƧinde bir hata oluştu: %1" + +#: network/msnnotificationconnection.cpp:2277 +#, fuzzy +msgid "Invalid Group" +msgstr "Grubu Y&eniden Adlandır" + +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 +msgid "Switchboard server failed" +msgstr "Pano sunucusu başarısız" + +#: network/msnnotificationconnection.cpp:2287 +msgid "Transfer to switchboard server failed" +msgstr "Pano sunucusu aktarımı başarısız" + +#: network/msnnotificationconnection.cpp:2291 +msgid "Direct connection (MSNSLP) error, connection failed" +msgstr "Direkt bağlantı (MSNSLP) hatası, bağlantı başarısız" + +#: network/msnnotificationconnection.cpp:2295 +msgid "Required field missing" +msgstr "" + +#: network/msnnotificationconnection.cpp:2299 +msgid "Not logged in" +msgstr "" + +#: network/msnnotificationconnection.cpp:2302 +#, fuzzy +msgid "No permissions given for this account" +msgstr "Bu hesap iƧin ƶzel ifadeler:" + +#: network/msnnotificationconnection.cpp:2307 +msgid "Command is disabled" +msgstr "" + +#: network/msnnotificationconnection.cpp:2310 +msgid "Your account is banned." +msgstr "Hesabınız yasaklanmış." + +#: network/msnnotificationconnection.cpp:2314 +#, fuzzy +msgid "Challenge response failed" +msgstr "Aktarım başarısız." + +#: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" +msgstr "" + +#: network/msnnotificationconnection.cpp:2323 +#, fuzzy +msgid "You are opening chat sessions too fast" +msgstr "Ƈok fazla oturum aƧıyorsunuz" + +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" +msgstr "Ƈok fazla oturum aƧık" + +#: network/msnnotificationconnection.cpp:2334 +msgid "Unexpected command sequence" +msgstr "" + +#: network/msnnotificationconnection.cpp:2338 +msgid "Bad friend name" +msgstr "Hatalı isim" + +#: network/msnnotificationconnection.cpp:2344 +msgid "Bad CVR data" +msgstr "" + +#: network/msnnotificationconnection.cpp:2350 +msgid "The server reports KMess is flooding it with too many data" +msgstr "Sunucu KMess'in Ƨok fazla veri gƶndererek flood yaptığını sƶylüyor." + +#: network/msnnotificationconnection.cpp:2357 +#, fuzzy +msgid "Authentication ticket was incorrect" +msgstr "Kimlik denetimi başarısız" + +#: network/msnnotificationconnection.cpp:2360 +msgid "You can't start a chat with someone while you are invisible." +msgstr "Gƶrünmez durumdayken bir sohbet başlatamazsınız." + +#: network/msnnotificationconnection.cpp:2364 +#, fuzzy +msgid "Not accepting new contacts" +msgstr "Yeni kurallar kabul edilmiyor" + +#: network/msnnotificationconnection.cpp:2368 +#, fuzzy +msgid "" +"You have a kids passport account, you need parental consent to chat online." +msgstr "" +"Ƈocuk hesabınız var, İnternette sohbet yapmak iƧin ebeveynlerinizden izin " +"almalısınız." + +#: network/msnnotificationconnection.cpp:2371 +#, fuzzy +msgid "Your passport account needs to be verified first." +msgstr "Hesabınızın doğrulanması gerekiyor." + +#: network/msnnotificationconnection.cpp:2375 +msgid "Bad USR ticket" +msgstr "" + +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" +msgstr "Kişi listesine ulaşırken hata, daha sonra tekrar deneyin" + +#: network/msnnotificationconnection.cpp:2399 +#, fuzzy +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." +msgstr "Sunucuda iƧ hata oluştu" + +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + +#: network/msnnotificationconnection.cpp:2414 +msgid "Peer notification server down" +msgstr "Bireysel bildirim sunucusu devre dışı" + +#: network/msnnotificationconnection.cpp:2418 +msgid "The server is going down" +msgstr "Sunucu kapatılacak" + +#: network/msnnotificationconnection.cpp:2422 +msgid "The server is going down soon" +msgstr "Sunucu yakında kapatılacak" + +#: network/msnnotificationconnection.cpp:2427 +msgid "Write is blocking" +msgstr "Yazma engelleniyor" + +#: network/msnnotificationconnection.cpp:2431 +msgid "Session is overloaded" +msgstr "Oturum aşırı yüklenmiş durumda" + +#: network/msnnotificationconnection.cpp:2438 +msgid "The server is not available" +msgstr "Sunucu hazır değil" + +#: network/msnnotificationconnection.cpp:2442 +msgid "Authentication failed" +msgstr "Kimlik denetimi başarısız" + +#: network/msnnotificationconnection.cpp:2449 +#, fuzzy +msgid "Unknown error code received from the server: %1" +msgstr "KMess, sunucudan bilinmeyen bir komut aldı: %1" + +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +#, fuzzy +msgctxt "Error dialog box title" +msgid "MSN error" +msgstr "KMess - MSN hatası" + +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "dakika" +msgstr[1] "dakika" + +#: network/msnnotificationconnection.cpp:2599 +#, fuzzy +msgid "Server closes for maintenance in %1!" +msgstr "Uyarı: Sunucu %1 dakika iƧinde bakım iƧin kapanacak!" + +#: network/msnnotificationconnection.cpp:2604 +#, fuzzy +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." +msgstr "MSN Sunucusu bakım nedeniyle 1 dakika iƧinde kapanacağını bildirdi." + +#: network/msnnotificationconnection.cpp:2901 +msgid "Lost reference to SOAP client" +msgstr "" + +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +#, fuzzy +msgid "KMess could not process Offline-IM messages.
Details: %1" +msgstr "" +"KMess çevrimdışı mesajları işleyemedi.\n" +"Ayrıntılar: %1" + +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "Kimlik denetimi başarısız" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "KMess içinde bir hata oluştu: %1" + +#: network/msnnotificationconnection.cpp:3242 +#, fuzzy +msgctxt "Login error message, with more details for developer versions" +msgid "" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" +msgstr "" +"KMess MSN messenger sunucularına bağlanamadı. MSN Messenger servisi geçici " +"olarak hizmet dışı olabilir veya İnternet bağlantınızda bir sorun var." + +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "Sunucuya bağlantı kaybedildi." + +#: network/msnnotificationconnection.cpp:3302 +#, fuzzy +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" +msgstr "" +"Doğrulama başarısız, KMess hesabınızla giriş yapamadı.\n" +"Ayrıntılar: %1" + +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "Sunucu Hatası" + +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "Bağlantı zaman aşımına uğradı" + +#: network/msnsockettcp.cpp:368 +msgid "1 ping lost" +msgstr "1 ping kayıp" + +#: network/msnsockettcp.cpp:372 +msgid "%1 pings lost" +msgstr "%1 ping kayıp" + +#: network/msnsockettcp.cpp:387 +msgid "The connection to the server was lost." +msgstr "Sunucuya bağlantı kaybedildi." + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "Bu kişi bağlı değil ya da görünmez durumda." -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "" "Karşıdaki, KMess'in henüz desteklemediği bir MSN7 özelliği kullanmaya " "çalışıyor." -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 msgid "The message \"%1\" was not received!" msgstr "\"%1\" mesajı alınamadı!" -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "Bağlantı kurulamadı: %1" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "Giriş servisi çok fazla yönlendirme yapıyor" -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +#, fuzzy +msgid "In %1's chat: %2" msgstr "%1 ile sohbette: %2" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +#, fuzzy +msgid "%1 says:
'%2'" msgstr "%1 diyor ki:
'%2'" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" +#: notification/chatnotification.cpp:171 +#, fuzzy +msgid "%1 has sent you an offline message:
'%2'" msgstr "%1 size çevrimdışı bir ileti gönderdi:
'%2'" -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" +#: notification/chatnotification.cpp:178 +#, fuzzy +msgid "%1's chat requests attention!" msgstr "%1 ile sohbet ilgi istiyor!" -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" +#: notification/chatnotification.cpp:183 +#, fuzzy +msgid "%1:
%2" msgstr "%1:
%2" -#: notification/notificationchat.cpp:200 +#: notification/chatnotification.cpp:190 #, fuzzy -msgid "%1 has sent you a handwritten message!" +msgid "%1 has sent you a handwritten message!" msgstr "%1 size bir titreme gönderdi!" -#: notification/notificationchat.cpp:204 -msgid "%1 has sent you a nudge!" +#: notification/chatnotification.cpp:194 +#, fuzzy +msgid "%1 has sent you a nudge!" msgstr "%1 size bir titreme gönderdi!" -#: notification/notificationchat.cpp:208 -msgid "%1 has sent you a wink!" +#: notification/chatnotification.cpp:198 +#, fuzzy +msgid "%1 has sent you a wink!" msgstr "%1 size bir göz kırpma gönderdi!" -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" +#: notification/chatnotification.cpp:204 +#, fuzzy +msgid "%1 wants to use the webcam!" msgstr "%1 ağ kamerasını kullanmak istiyor!" -#: notification/notificationchat.cpp:215 -msgid "%1 is sending you a file!" +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" msgstr "%1 size bir dosya gönderiyor!" -#: notification/notificationchat.cpp:216 -msgid "%1 has sent you an invitation!" +#: notification/chatnotification.cpp:206 +#, fuzzy +msgid "%1 has sent you an invitation!" msgstr "%1 size bir davet gönderdi!" -#: notification/notificationchat.cpp:223 -msgid "%1 has canceled the webcam session!" +#: notification/chatnotification.cpp:213 +#, fuzzy +msgid "%1 has canceled the webcam session!" msgstr "%1 ağ kamerası oturumunu iptal etti!" -#: notification/notificationchat.cpp:224 -msgid "%1 has canceled the file transfer!" +#: notification/chatnotification.cpp:214 +#, fuzzy +msgid "%1 has canceled the file transfer!" msgstr "%1 dosya aktarımını iptal etti!" -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +#, fuzzy +msgid "%1's activity has been canceled!" msgstr "%1 etkileşimi iptal edildi!" -#: notification/notificationchat.cpp:232 -msgid "%1 has accepted to use the webcam!" +#: notification/chatnotification.cpp:222 +#, fuzzy +msgid "%1 has accepted to use the webcam!" msgstr "%1 ağ kamerasını kullanmayı kabul etti!" -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" +#: notification/chatnotification.cpp:223 +#, fuzzy +msgid "%1 has accepted the file transfer!" msgstr "%1 dosya aktarımını kabul etti!" -#: notification/notificationchat.cpp:234 -msgid "%1 has accepted your invitation!" +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" msgstr "%1 davetinizi kabul etti!" -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" +#: notification/chatnotification.cpp:231 +#, fuzzy +msgid "%1 has ended the webcam session!" msgstr "%1 ağ kamerası oturumunu bitirdi!" -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "%1 ile olan dosya aktarımı tamamlandı!" -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" +#: notification/chatnotification.cpp:233 +#, fuzzy +msgid "%1's activity has ended!" msgstr "%1 ile olan etkileşim bitti!" -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" +#: notification/chatnotification.cpp:240 +#, fuzzy +msgid "%1's webcam session has failed!" msgstr "%1 ile ağ kamerası oturumu başarısız oldu!" -#: notification/notificationchat.cpp:251 -msgid "The file transfer with %1 has failed!" +#: notification/chatnotification.cpp:241 +#, fuzzy +msgid "The file transfer with %1 has failed!" msgstr "%1 ile olan dosya aktarımı başarısız oldu!" -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:242 +#, fuzzy +msgid "%1's activity has ended with an error!" msgstr "%1 ile olan etkileşim hatalı sonlandı!" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -msgid "%1 is now online" +#: notification/contactstatusnotification.cpp:70 +#, fuzzy +msgid "%1 is now online" msgstr "%1 çevrimiçi" -#: notification/notificationcontactstatus.cpp:76 -msgid "%1 has gone away" +#: notification/contactstatusnotification.cpp:71 +#, fuzzy +msgid "%1 has gone away" msgstr "%1 uzakta" -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/contactstatusnotification.cpp:72 +#, fuzzy +msgid "%1 will be right back" msgstr "%1 hemen dönecek" -#: notification/notificationcontactstatus.cpp:78 -msgid "%1 is now busy" +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" msgstr "%1 artık meşgul" -#: notification/notificationcontactstatus.cpp:79 -msgid "%1 has become invisible" +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" msgstr "%1 gizli" -#: notification/notificationcontactstatus.cpp:80 -msgid "%1 has gone idle" +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" msgstr "%1 artık boşta" -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/contactstatusnotification.cpp:76 +#, fuzzy +msgid "%1 has logged out" msgstr "%1 çevrimdışı" -#: notification/notificationcontactstatus.cpp:82 -msgid "%1 is on the phone" +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" msgstr "%1 telefonda" -#: notification/notificationcontactstatus.cpp:83 -msgid "%1 is out for lunch" +#: notification/contactstatusnotification.cpp:78 +#, fuzzy +msgid "%1 is out for lunch" msgstr "%1 yemeğe gitti" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/newemailnotification.cpp:78 +#, fuzzy +msgid "New email:
'%1'
by '%2'" msgstr "Yeni e-posta:
'%1'
gönderen '%2'" -#: settings/accountswidget.cpp:81 +#: settings/accountpage.cpp:69 msgid "Browse..." msgstr "" -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +#, fuzzy +msgid "Browse and crop picture..." msgstr "Resme gözat ve kırp..." -#: settings/accountswidget.cpp:404 -msgid "Display Picture" -msgstr "Görüntü Resmi:" +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" +#: settings/accountpage.cpp:448 +#, fuzzy +msgid "Downloading of display picture failed" msgstr "Görüntü resmi alınamadı" -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 +#, fuzzy msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" "Görüntü resmi değiştirilirken bir hata oluştu.\n" "Doğru resmi seçtiğinizden emin olun" -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "Selam, nasıl gidiyor? :)" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "Simge" - -#: settings/chatstylepage.cpp:317 -msgid "Great!" -msgstr "Harika!" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "Bodrum'daki tatilden /yeni/ döndüm!" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 #, fuzzy msgid "&Delete" msgstr "&Kişiyi Sil" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "Ayarlar" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 msgid "Account" msgstr "Hesap" -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 #, fuzzy msgid "My Account" msgstr "Hesap" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "Uyarılar" -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 #, fuzzy msgid "Alerts and Notifications" msgstr "KMess Bildirimi" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "Sohbet ediyor" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "Sohbet Günlüğü" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +#, fuzzy +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "'%1' geçerli bir kişi adresi değil." + +#: settings/accountsettingsdialog.cpp:201 +#, fuzzy +msgid "The email address you have entered is already in use: '%1'" +msgstr "'%1' geçerli bir kişi adresi değil." + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "Gerçekten bu hesabı silmek istiyor musunuz?" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "Gerçekten bu hesabı silmek istiyor musunuz?" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "Selam, nasıl gidiyor? :)" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "Simge" + +#: settings/chatstylepage.cpp:341 +msgid "Great!" +msgstr "Harika!" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "Bodrum'daki tatilden /yeni/ döndüm!" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "Ayarlar" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +msgid "Accounts" +msgstr "Hesaplar" + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "E-posta bildirimi" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "Sohbetleri bu dizine kaydet:" + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." @@ -3451,14 +4155,150 @@ msgstr "" "Ana pencere kapatılınca KMess sistem çekmecesinde çalışmaya devam eder. " "Uygulamadan çıkmak için 'Dosya' menüsünden 'çık'ı kullanın." -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "Sistem Tepsisine Yerleş" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "
%1 (%2)" +#: systemtraywidget.cpp:245 +#, fuzzy +msgid "- %1 (%2)" +msgstr "%1 %2" + +#~ msgid "Click to send an email to this contact." +#~ msgstr "Bu kişiye bir e-posta gƶndermek iƧin tıklayın." + +#~ msgid "Picture:" +#~ msgstr "Resim:" + +#, fuzzy +#~ msgid "Login Information" +#~ msgstr "E-posta bilgisini gƶster" + +#~ msgid "Logging in..." +#~ msgstr "Oturum aƧılıyor..." + +#~ msgid "" +#~ "Allows you to choose which e-mail program KMess should open to view e-" +#~ "mail messages." +#~ msgstr "" +#~ "E-postaları okumak iƧin KMess'in hangi programı Ƨalıştıracağını belirler." + +#~ msgid "Use a specified command:" +#~ msgstr "Belirli bir komut kullan:" + +#~ msgid "This account does not have an Hotmail inbox!" +#~ msgstr "Bu hesabın Hotmail gelen kutusu yok!" + +#, fuzzy +#~ msgid "Email: " +#~ msgstr "E-posta" + +#~ msgid "Remove group" +#~ msgstr "Grubu &Sil" + +#, fuzzy +#~ msgid "Show &Display Pictures" +#~ msgstr "Gƶrüntü Resmi:" + +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr "Gelen kutunuzda yeni bir posta var." + +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr "Gelen kutunuzda %1 yeni posta var." + +#, fuzzy +#~ msgid "Guido Solinas" +#~ msgstr "Ƈevri&miƧi olduklarında" + +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "%1 dosyasının aktarımı başarısız oldu. Dosya aƧılamadı" + +#, fuzzy +#~ msgid "Sidebar" +#~ msgstr "Kenar Ƈubuğu" + +#, fuzzy +#~ msgid "New contact's group" +#~ msgstr "Yeni &Kişi" + +#~ msgid "Enter your login information:" +#~ msgstr "Giriş bilgilerinizi girin:" + +#~ msgid "Your friendly name:" +#~ msgstr "Takma adınız:" + +#, fuzzy +#~ msgid "Your email address:" +#~ msgstr "E-posta adresi:" + +#~ msgid "Your password:" +#~ msgstr "Parolanız:" + +#~ msgid "Display picture:" +#~ msgstr "Gƶrünen Resim:" + +#~ msgid "Don't show a displa&y picture" +#~ msgstr "Resim &gƶsterme" + +#~ msgid "Status to set at login:" +#~ msgstr "Girişte durumu bƶyle yap:" + +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "Bir eposta alındığında bildirim gƶster" + +#~ msgid "Organize chat folders by:" +#~ msgstr "Sohbet dizinlerini şu ƶlçüte gƶre düzenle:" + +#~ msgid "&Show graphics in chat messages" +#~ msgstr "Sohbet mesajlarında &ifadeleri gƶster" + +#~ msgid "Use Hotmail" +#~ msgstr "Hotmail kullan" + +#~ msgid "says:" +#~ msgstr "diyor ki:" + +#~ msgid "Current name: " +#~ msgstr "GeƧerli isim: " + +#, fuzzy +#~ msgid "" +#~ "KMess could not connect to the MSN Messenger service.\n" +#~ "Please, be sure to be connected to the internet.\n" +#~ "reason: %1." +#~ msgstr "" +#~ "Kmess MSN Messenger servisine bağlanamadı.\n" +#~ "Lütfen İnternet bağlantınızı kontrol edin.\n" +#~ "Sistem hatası: %1 (kod %2)." + +#~ msgid "The remote server has closed the connection." +#~ msgstr "Karşıdaki sunucu bağlantıyı kapattı." + +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr "Messenger servisi durumu gƶsterilsin mi?" + +#~ msgid "Received user confirmation" +#~ msgstr "Kullanıcı onayı alındı" + +#~ msgid "Transfer to notification server" +#~ msgstr "Bilgilendirme sunucusuna aktarım" + +#~ msgid "The server is too busy" +#~ msgstr "Sunucu Ƨok meşgul" + +#~ msgid "The server is unavailable" +#~ msgstr "Sunucuya erişilemiyor" + +#~ msgid "KMess received an unknown error message from the server: %1" +#~ msgstr "KMess, sunucudan bilinmeyen bir hata mesajı aldı: %1" + +#~ msgid "Warning: Server closes for maintenance in 1 minute!" +#~ msgstr "Uyarı: 1 dakika iƧinde sunucu bakım iƧin kapanacak!" + #~ msgid "Add contact" #~ msgstr "Kişi ekle" @@ -3466,9 +4306,6 @@ msgstr "
%1 (%2)" #~ msgid "KMess Notification" #~ msgstr "E-posta bildirimi" -#~ msgid "Accounts" -#~ msgstr "Hesaplar" - #~ msgid "" #~ msgstr "" @@ -3486,9 +4323,6 @@ msgstr "
%1 (%2)" #~ "ulutas@gmail.com\n" #~ "jnmbk@users.sourceforge.net" -#~ msgid "Insert an emoticon" -#~ msgstr "Bir ifade kullan" - #~ msgid "Show/Hide &Contact Sidebar" #~ msgstr "&Bağlantı Yançubuğunu Göster/Gizle" @@ -3522,18 +4356,9 @@ msgstr "
%1 (%2)" #~ msgid "(On the Phone)" #~ msgstr "(Telefonda)" -#~ msgid "Connection timeout" -#~ msgstr "Bağlantı zaman aşımına uğradı" - #~ msgid "The current status of your contact." #~ msgstr "Kişinizin o anki durumu." -#~ msgid "Connect" -#~ msgstr "Bağlan" - -#~ msgid "Listening to %1" -#~ msgstr "Şimdi dinliyor - %1" - #, fuzzy #~ msgid "The contact is listening to music" #~ msgstr "Kişi listenizde yok" diff --git a/po/zh_CN.po b/po/zh_CN.po index 4cd6666..1a2835d 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: KMess\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" -"PO-Revision-Date: 2007-11-06 17:20+0800\n" -"Last-Translator: Liu Sizhuang(åˆ˜ę€å£®) \n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" +"PO-Revision-Date: 2008-06-01 17:47+0800\n" +"Last-Translator: Liu Sizhuang \n" "Language-Team: Chinese/Simplified \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,45 +23,38 @@ msgstr "" "X-Poedit-Country: CHINA\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "ę­£åœØē™»å½•..." - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -msgid "S&end" -msgstr "发送(&e)" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 msgid "Ne&w Line" msgstr "ę¢č”Œ(&w)" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 -#, fuzzy -msgid "Sidebar" -msgstr "ä¾§č¾¹ę " +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 +msgid "S&end" +msgstr "发送(&e)" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +msgid "Contacts" +msgstr "联系人" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "ē‚¹å‡»ę­¤å¤„ę˜¾ē¤ŗč”ē³»äŗŗēš„ę”£ę”ˆć€‚" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." -msgstr "ē‚¹å‡»čæ™é‡Œē»™čæ™äøŖč”ē³»äŗŗå‘é€ email" +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 #, fuzzy msgid "" "Enter here the email address of the person you wish to add to your contact " @@ -69,164 +62,375 @@ msgid "" msgstr "č¾“å…„ę‚Øęƒ³ę·»åŠ ēš„č”ē³»äŗŗē”µå­é‚®ä»¶åœ°å€ļ¼š" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 msgid "Email address" msgstr "ē”µå­é‚®ä»¶åœ°å€" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 #, fuzzy -msgid "New contact's group" -msgstr "ę·»åŠ č”ē³»äŗŗ(&C)..." +msgid "Initial group" +msgstr "é‡å‘½åē»„(&n)" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "č¾“å…„čæ™äøŖå›¾é‡Šēš„åæ«ę·é”®:" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "选择图片文件: " #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 #, fuzzy msgid "" "Enter a message to be automatically sent to people who try to message you." msgstr "č¾“å…„č‡ŖåŠØå›žå¤ēš„å†…å®¹ļ¼š" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 #, fuzzy msgid "&Automatic away message" msgstr "ęŒ‡å®šå¤„äŗŽē¦»å¼€ēŠ¶ę€ę—¶å‘é€ēš„ę¶ˆęÆ" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" msgstr "" -"%1\n" -"å·²å°†ę‚ØåŠ å…„ä»–(儹)ēš„č”ē³»äŗŗåˆ—č”Øć€‚ ę‚Øęƒ³ļ¼š" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 -msgid "&Add this contact to your \"Friends\" list" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 +#, fuzzy +msgid "&Add this person to my \"Friends\" list" msgstr "å°†čæ™äøŖč”ē³»äŗŗåŠ å…„ę‚Øēš„åˆ—č”Øäø­(&A)" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 -msgid "&Not add this contact, but let them see your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 +#, fuzzy +msgid "Do not add this person; only allow them to see my online state" msgstr "äøę·»åŠ čæ™äøŖč”ē³»äŗŗļ¼Œä½†č®©ä»–ēœ‹åˆ°ę‚Øēš„ēŠ¶ę€(&N)" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 -msgid "Block this person from contacting &you or seeing your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 +#, fuzzy +msgid "&Block this person from contacting me or seeing my online state" msgstr "é˜»ę­¢ę­¤äŗŗäøŽä½ č”ē³»ęˆ–č€…ēœ‹åˆ°ä½ ēš„č”ęœŗēŠ¶ę€(&y)" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, no-c-format +msgid "Contact Properties for %1" +msgstr "联系人%1ēš„å±žę€§ļ¼š" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +#, fuzzy +msgid "Restore" +msgstr "åˆ é™¤ēš„" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "ä½æē”Øå¦äø€äøŖåå­—" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "å½“ę­¤äŗŗäøŠēŗæęˆ–äø‹ēŗæę—¶é€šēŸ„ęˆ‘" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "声音:" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +#, fuzzy +msgid "&Clear Cache" +msgstr "清除标签" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +#, fuzzy +msgid "Notes" +msgstr "音符" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "ē½‘ē»œēŖ—å£" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "ē±»åž‹:" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +#, fuzzy +msgid "Standard" +msgstr "星" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "发送(&e)" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 +#, fuzzy msgid "Cancel" +msgstr "å·²å–ę¶ˆ" + +#. i18n: tag string +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -msgid "Enter your login information:" -msgstr "č¾“å…„ę‚Øēš„ē™»å½•äæ”ęÆļ¼š" +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 +#, fuzzy +msgid "Email address:" +msgstr "ē”µå­é‚®ä»¶åœ°å€ļ¼š" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 -msgid "Password" -msgstr "密码" +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +msgid "Password:" +msgstr "密码:" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "ē™»å½•ę—¶ēš„ēŠ¶ę€" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 #, fuzzy msgid " Account options " msgstr "åøå·č®¾ē½®(&S)" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 msgid "Remem&ber this profile" msgstr "č®°ä½čæ™äøŖåøå·(&b)" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "登录(&C)" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "čÆ·åœØę­¤å¤„č¾“å…„ę‚Øēš„äøŖäŗŗäæ”ęÆ" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr "č¾“å…„ę‚Øēš„ē™»å½•äæ”ęÆļ¼š" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "č¾“å…„ä½ åœØēŗæę—¶å…¶ä»–č”ē³»äŗŗå°†ēœ‹åˆ°ēš„åå­—ć€‚" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 -msgid "Your friendly name:" -msgstr "ę‚Øēš„ę˜µē§°ļ¼š" +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 +#, fuzzy +msgid "&Friendly name:" +msgstr "昵称(&F)" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" @@ -235,15 +439,15 @@ msgstr "" "passport.net/reg.srf?ns=msn.com&lc=2052 ę³Øå†Œę–°åøå·ć€‚" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 #, fuzzy -msgid "Your email address:" +msgid "&Email address:" msgstr "ē”µå­é‚®ä»¶åœ°å€ļ¼š" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" @@ -252,39 +456,40 @@ msgstr "" "net/reg.srf?ns=msn.com&lc=2052 ę³Øå†Œę–°åøå·ć€‚" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" -msgstr "ę‚Øēš„åÆ†ē ļ¼š" +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 +#, fuzzy +msgid "&Password:" +msgstr "密码:" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 #, fuzzy -msgid "Remember Password" +msgid "&Remember Password" msgstr "密码" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 -msgid "Display picture:" -msgstr "å¤“åƒļ¼š" +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 +msgid "Display Picture" +msgstr "夓像" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 msgid "C&hange..." msgstr "曓改(&h)..." #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -msgid "Don't show a displa&y picture" -msgstr "ē¦ę­¢ę˜¾ē¤ŗå¤“åƒ(&y)" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -300,34 +505,37 @@ msgstr "" "网吧)怂" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +#, fuzzy +msgid "Re&member the settings of this account" msgstr "č®°ä½čæ™äøŖåøå·ēš„č®¾ē½®" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "å¦‚ęžœé€‰äø­ļ¼ŒKMessč‡ŖåŠØäæå­˜čæ™äøŖåøå·ēš„č®°å½•ć€‚" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 -msgid "Login &with this account automatically at start-up" +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 +#, fuzzy +msgid "Login &with this account automatically" msgstr "åÆåŠØę—¶č‡ŖåŠØē™»å½•ę­¤åøå·(&w)" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "ē™»å½•ę—¶ēš„ēŠ¶ę€ļ¼š" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "äæå­˜ę‰€ęœ‰čŠå¤©č®°å½•(&a)" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -338,34 +546,34 @@ msgstr "" "ęˆ–ä½æē”Ø Hotmail åøå·ę„čæžęŽ„ć€‚" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." msgstr "ä½ ę— ę³•ę”¹å˜ä½ ēš„ę˜µē§°ļ¼Œå› äøŗä½ čæ˜ę²”ęœ‰ē”®č®¤ä½ ēš„passport emailåœ°å€ć€‚" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "éœ€č¦éŖŒčÆē”µå­é‚®ä»¶" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 msgid "https://accountservices.passport.net/" msgstr "https://accountservices.passport.net/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "访问 accountservices.passport.net" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." @@ -373,135 +581,247 @@ msgstr "" "čæžęŽ„åˆ° MSN Messenger ęœåŠ”ļ¼Œä½ éœ€č¦ę³Øå†Œäø€äøŖ e-mail ę„å½“ä½œ Passport åøå·ć€‚" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "ę³Øå†Œę–°č“¦ęˆ·" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "https://accountservices.passport.net/reg.srf?ns=msn.com&lc=2052" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "čæžęŽ„åˆ° https://accountservices.passport.net/reg.srf?ns=msn.com&lc=2052" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 -msgid "Popup notifications" +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 +#, fuzzy +msgid "Saved accounts:" +msgstr "åøå·" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +msgid "Click" +msgstr "å•å‡»čæ™é‡Œ" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "å•å‡»čæ™é‡Œę·»åŠ äø€äøŖę–°ēš„č‡Ŗå®šä¹‰å›¾é‡Šć€‚" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "ę·»åŠ č”ē³»äŗŗ" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "é€‰ę‹©äø€äøŖå›¾é‡Šē„¶åŽå•å‡»čæ™é‡Œåˆ é™¤ć€‚" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "åˆ é™¤ēš„" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "å¼¹å‡ŗé€šēŸ„" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "联系人" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 msgid "Show notifications when your contacts:" msgstr "å½“č”ē³»äŗŗęœ‰å¦‚äø‹åŠØä½œę—¶é€šēŸ„ä½ ļ¼š" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." msgstr "å¦‚ęžœé€‰äø­ļ¼Œå½“ä½ ēš„č”ē³»äŗŗčæžęŽ„åˆ°MSNę—¶ä¼šå¼¹å‡ŗę¶ˆęÆć€‚" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 -#, fuzzy +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 msgid "&Go online" -msgstr "äø‹ēŗæ(&f)" +msgstr "上线(&G)" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." msgstr "å¦‚ęžœé€‰äø­ļ¼Œå½“ä½ ēš„č”ē³»äŗŗå¼€å§‹äøŽä½ č°ˆčÆę—¶ä¼šå¼¹å‡ŗę¶ˆęÆć€‚" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "å¼€å§‹äŗ†äøŽę‚Øēš„čŠå¤©(&c)" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." msgstr "å¦‚ęžœé€‰äø­ļ¼ŒęÆå½“ä½ ēš„č”ē³»äŗŗē»™ä½ å‘ę¶ˆęÆę—¶ä¼šå¼¹å‡ŗę¶ˆęÆć€‚" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 msgid "S&end you a message" msgstr "ē»™ę‚Øå‘é€äŗ†ę¶ˆęÆ(&e)" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." msgstr "å¦‚ęžœé€‰äø­ļ¼Œå½“ä½ ēš„č”ē³»äŗŗę”¹å˜MSNēŠ¶ę€ę—¶ä¹Ÿä¼šå¼¹å‡ŗę¶ˆęÆć€‚" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "ę›“ę”¹ēŠ¶ę€(&s)" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." msgstr "å¦‚ęžœé€‰äø­ļ¼ŒęÆå½“ä½ ēš„č”ē³»äŗŗäø‹ēŗæę—¶ä¹Ÿä¼šå¼¹å‡ŗę¶ˆęÆć€‚" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 msgid "Go o&ffline" msgstr "äø‹ēŗæ(&f)" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 -msgid "Show notifications when you recei&ve an email" -msgstr "å½“ęŽ„åˆ°ē”µå­é‚®ä»¶ę—¶é€šēŸ„ęˆ‘" +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 +#, fuzzy +msgid "Email Events" +msgstr "ē”µå­é‚®ä»¶åœ°å€" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" +msgstr "å½“ē”µå­é‚®ä»¶åˆ°č¾¾\"其他文件夹\"ę—¶é€šēŸ„ęˆ‘" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" +"å¦‚ęžœé€‰äø­ļ¼Œå½“ä½ åœØå…¶ä»–ę–‡ä»¶å¤¹äø­ę”¶åˆ°é‚®ä»¶ę—¶ļ¼Œä¹Ÿä¼šå¼¹å‡ŗę°”ę³”ć€‚ę­¤é€‰é”¹ä»…é€‚ē”ØäŗŽ Hotmail " +"åøęˆ·ć€‚" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +msgid "In other folders" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "ęŽ§åˆ¶å¼¹å‡ŗę°”ę³”éšč—å‰ēš„ę˜¾ē¤ŗę—¶é—“ć€‚" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "é€šēŸ„åœē•™" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "ē§’" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "ꏐ醒" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "ę˜¾ē¤ŗč„±ęœŗēš„č”ē³»äŗŗ(&A)" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -516,14 +836,31 @@ msgstr "" "åŠØļ¼Œä½†ę˜Æ KMess åŖä¼šę‘‡ę™ƒēŖ—å£äø€ę¬”ć€‚

" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "å½“å‘é€ęˆ–č€…ęŽ„åˆ°é—Ŗå±éœ‡åŠØę—¶ēŖ—å£ä¼šę‘‡ę™ƒ(%w)" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" +"å¦‚ęžœé€‰äø­ļ¼Œå½“ä½ åœØę”¶ä»¶ē®±äø­ę”¶åˆ°é‚®ä»¶ę—¶ļ¼Œä¼šå¼¹å‡ŗę°”ę³”ć€‚ęœŖčÆ»é‚®ä»¶ēš„ę•°ē›®ä¼šåœØč”ē³»äŗŗåˆ—č”Ø" +"ēš„äøŠę–¹å‡ŗēŽ°ć€‚ę­¤é€‰é”¹ä»…é€‚ē”ØäŗŽ Hotmail åøęˆ·ć€‚" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." @@ -532,192 +869,181 @@ msgstr "" "ę”¾č½Æä»¶äø­čŽ·å–ēš„ć€‚" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 -msgid "Inform contacts w&hich song I am listening to." +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 +#, fuzzy +msgid "Inform contacts w&hich song I am listening to" msgstr "é€šēŸ„ęˆ‘ēš„č”ē³»äŗŗęˆ‘åœØå¬å“Ŗäø€é¦–ę­Œć€‚(&h)" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 +#, fuzzy msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" "å¦‚ęžœé€‰äø­ļ¼Œå½“ä½ å‡ åˆ†é’Ÿäøę˜Æē”Øē”µč„‘ę—¶ļ¼Œä½ ēš„ēŠ¶ę€ä¼šč‡ŖåŠØåˆ‡ę¢åˆ°\"离开 - 发呆\"怂" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "äøę“»č·ƒę—¶å°†ēŠ¶ę€ę”¹äøŗ\"离开-空闲\" (&y)" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." msgstr "ęŽ§åˆ¶ KMess č½¬å˜ēŠ¶ę€äøŗ \"离开 - 发呆\" å‰ēš„åˆ†é’Ÿę•°ć€‚" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 msgid "Become idle after" msgstr "å¼€åÆå®šę—¶å™Ø" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "分钟后" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "å¦‚ęžœé€‰äø­ļ¼ŒčŠå¤©č®°å½•ä¼šäæå­˜åœØęŒ‡å®šēš„ē›®å½•äø‹ć€‚" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 msgid "Log &all chats" msgstr "äæå­˜ę‰€ęœ‰čŠå¤©č®°å½•(&a)" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 msgid "" "Choose the directory on your system where you'd like to save the chat logs." msgstr "é€‰ę‹©äø€äøŖä½ ęƒ³č¦äæå­˜čŠå¤©č®°å½•ēš„ę–‡ä»¶å¤¹ć€‚" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" msgstr "åœØę­¤ē›®å½•äø­äæå­˜čŠå¤©č®°å½•ļ¼š" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." msgstr "å½“ä½ é€‰ę‹©ā€œä»„å¹“ć€ęœˆć€ę—„ē»„ē»‡čŠå¤©č®°å½•ā€ę—¶ļ¼ŒKMess ä¼šč‡ŖåŠØå»ŗē«‹å­ę–‡ä»¶å¤¹ć€‚" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "ęŒ‰ę—„ęœŸåœØäøåŒå­ē›®å½•äø­äæå­˜čŠå¤©č®°å½•ļ¼š" +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "幓" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 msgid "Month" msgstr "月" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "ę—„" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" msgstr "åœØé”¶ēŗ§ē›®å½•äø­äæå­˜ę‰€ęœ‰čŠå¤©č®°å½•" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." -msgstr "čæ™ę˜Æä½ ēš„čŠå¤©äæ”ęÆēš„å­—ä½“ć€å­—åž‹å’Œé¢œč‰²ć€‚" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "ę¶ˆęÆę‰€ē”Øå­—ä½“ļ¼š" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" -"å…č®øē”Øä»„äø‹å·²é€‰ēš„å­—åž‹ć€å½¢å¼å’Œé¢œč‰²ę„č¦†ē›–ä½ ēš„č”ē³»äŗŗēš„čŠå¤©äæ”ęÆäø­ēš„å­—åž‹ć€å½¢å¼å’Œé¢œ" -"色。" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "å¼ŗåˆ¶ę‰€ęœ‰č”ē³»äŗŗēš„ę¶ˆęÆä½æē”Øę­¤å­—ä½“ļ¼š" - +#. i18n: file ./settings/chatstylepage.ui line 45 #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "å…č®øä½ ę”¹å˜ KMess ē”Øę„ę˜¾ē¤ŗčŠå¤©äæ”ęÆēš„äø»é¢˜ć€‚" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +#, fuzzy +msgid "&Chat style:" msgstr "聊天主题:" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "设置" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "åœØčŠå¤©å†…å®¹äø­ä½æē”Øå›¾é‡Šć€‚" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 -msgid "&Show graphics in chat messages" -msgstr "åœØčŠå¤©äæ”ęÆäø­ę˜¾ē¤ŗå›¾ē‰‡(&S)" +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 +#, fuzzy +msgid "&Show emoticons" +msgstr "ę˜¾ē¤ŗå›¾é‡Š(&E)" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "åœØęÆäø€ę”čŠå¤©å†…å®¹äø­ę˜¾ē¤ŗę—¶é—“ę ‡č®°ć€‚" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 -msgid "S&how time in chat messages" +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 +#, fuzzy +msgid "S&how messages time" msgstr "åœØę¶ˆęÆäø­ę˜¾ē¤ŗę—¶é—“äæ”ęÆ(&h)" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" -"ä½æē”Øå­—ä½“ę•ˆęžœć€‚č¾“å…„ *粗体*,/ę–œä½“/ 和 _äø‹åˆ’ēŗæ_ļ¼ŒåÆä½æå­—å‘ˆēŽ°ē›øåŗ”ēš„ē²—ä½“ć€ę–œä½“å’Œäø‹" -"åˆ’ēŗæę ·å¼ć€‚" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "åœØę¶ˆęÆäø­ä½æē”Øå­—ä½“ę•ˆęžœļ¼Œä¾‹å¦‚*粗体*态/ę–œä½“/和_äø‹åˆ’ēŗæ_怂" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -729,149 +1055,303 @@ msgstr "" "å½“ä½ ä½æē”Øå°iēš„MSNē¾¤ę—¶ļ¼Œę­¤åŠŸčƒ½åÆčƒ½ä¼šå¼•čµ·ę˜¾ē¤ŗę··ä¹±ć€‚" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "ęŠŠåŒäø€äøŖč”ē³»äŗŗå‘ę„ēš„ę¶ˆęÆę”¾åœØäø€čµ·(&G)" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 -msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." -msgstr "允许你选择 KMess 使用哪一个 e-mail č½Æä»¶ę„ęŸ„ēœ‹ e-mail ę¶ˆęÆć€‚" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "ē”µå­é‚®ä»¶å®¢ęˆ·ēØ‹åŗ" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "使用Hotmail" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "ä½æē”ØęŒ‡å®šēš„å‘½ä»¤ļ¼š" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "é‚®ä»¶é€šēŸ„" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 -msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" msgstr "" -"å¦‚ęžœé€‰äø­ļ¼Œå½“ä½ åœØę”¶ä»¶ē®±äø­ę”¶åˆ°é‚®ä»¶ę—¶ļ¼Œä¼šå¼¹å‡ŗę°”ę³”ć€‚ęœŖčÆ»é‚®ä»¶ēš„ę•°ē›®ä¼šåœØč”ē³»äŗŗåˆ—č”Ø" -"ēš„äøŠę–¹å‡ŗēŽ°ć€‚ę­¤é€‰é”¹ä»…é€‚ē”ØäŗŽ Hotmail åøęˆ·ć€‚" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 -msgid "Show email information" -msgstr "显示email俔息" +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 +#, fuzzy +msgid "Always" +msgstr "离开" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 -msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "ę‚Øēš„č”ē³»äŗŗåˆ—č”Øäø­åˆ†ē»„å¤Ŗå¤šäŗ†" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "åŽŒę¶" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" msgstr "" -"å¦‚ęžœé€‰äø­ļ¼Œå½“ä½ åœØå…¶ä»–ę–‡ä»¶å¤¹äø­ę”¶åˆ°é‚®ä»¶ę—¶ļ¼Œä¹Ÿä¼šå¼¹å‡ŗę°”ę³”ć€‚ę­¤é€‰é”¹ä»…é€‚ē”ØäŗŽ Hotmail " -"åøęˆ·ć€‚" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" -msgstr "å½“ē”µå­é‚®ä»¶åˆ°č¾¾\"其他文件夹\"ę—¶é€šēŸ„ęˆ‘" +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." +msgstr "čæ™ę˜Æä½ ēš„čŠå¤©äæ”ęÆēš„å­—ä½“ć€å­—åž‹å’Œé¢œč‰²ć€‚" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "ę¶ˆęÆę‰€ē”Øå­—ä½“ļ¼š" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 +msgid "" +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." +msgstr "" +"å…č®øē”Øä»„äø‹å·²é€‰ēš„å­—åž‹ć€å½¢å¼å’Œé¢œč‰²ę„č¦†ē›–ä½ ēš„č”ē³»äŗŗēš„čŠå¤©äæ”ęÆäø­ēš„å­—åž‹ć€å½¢å¼å’Œé¢œ" +"色。" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "å¼ŗåˆ¶ę‰€ęœ‰č”ē³»äŗŗēš„ę¶ˆęÆä½æē”Øę­¤å­—ä½“ļ¼š" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 +msgid "" +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." +msgstr "" +"ä½æē”Øå­—ä½“ę•ˆęžœć€‚č¾“å…„ *粗体*,/ę–œä½“/ 和 _äø‹åˆ’ēŗæ_ļ¼ŒåÆä½æå­—å‘ˆēŽ°ē›øåŗ”ēš„ē²—ä½“ć€ę–œä½“å’Œäø‹" +"åˆ’ēŗæę ·å¼ć€‚" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +#, fuzzy +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" +msgstr "åœØę¶ˆęÆäø­ä½æē”Øå­—ä½“ę•ˆęžœļ¼Œä¾‹å¦‚*粗体*态/ę–œä½“/和_äø‹åˆ’ēŗæ_怂" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "ē­‰å¾…č”ē³»äŗŗåˆ—č”Øā€¦ā€¦" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 msgid "&Emoticon Themes" msgstr "č”Øęƒ…äø»é¢˜(&E)" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 msgid "Available emoticon styles:" msgstr "åÆē”Øēš„å›¾é‡Šäø»é¢˜ļ¼š" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 msgid "&Custom Emoticons" msgstr "č‡Ŗå®šä¹‰å›¾é‡Š(&C)" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 msgid "Custom emoticons for this account:" msgstr "čæ™äøŖåøå·ēš„č‡Ŗå®šä¹‰å›¾é‡Šļ¼š" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -msgid "Click" -msgstr "å•å‡»čæ™é‡Œ" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "å•å‡»čæ™é‡Œę·»åŠ äø€äøŖę–°ēš„č‡Ŗå®šä¹‰å›¾é‡Šć€‚" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "添加(&w)..." #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "å•å‡»čæ™é‡Œé‡å‘½åé€‰äø­ēš„å›¾é‡Šć€‚" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 msgid "Re&name" msgstr "重命名(&n)" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "é€‰ę‹©äø€äøŖå›¾é‡Šē„¶åŽå•å‡»čæ™é‡Œåˆ é™¤ć€‚" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 msgid "Remo&ve" msgstr "删除(&v)" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +#, fuzzy +msgid "Web Browser" +msgstr "ęžÆēŽ«ē‘°" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +msgid "&Use the KDE default browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "诓:" +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "ē”µå­é‚®ä»¶å®¢ęˆ·ēØ‹åŗ" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +msgid "&Use the KDE default email client" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +msgid "File Transfers" +msgstr "文件传送" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "åœØę­¤ē›®å½•äø­äæå­˜čŠå¤©č®°å½•ļ¼š" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +#, fuzzy +msgid "and" +msgstr "悲伤" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "文件传送" #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -881,75 +1361,110 @@ msgstr "ęˆ‘å·²ē¦»å¼€ē”µč„‘" msgid "Your name" msgstr "ę‚Øēš„å§“å" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "you@hotmail.com" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "č”ęœŗ" +#: chat/chat.cpp:124 +msgid "" +"You can't start this invitation because there are multiple contacts in this " +"chat." +msgstr "ä½ ę— ę³•å¼€åÆčæ™äøŖé‚€čÆ·ļ¼Œå› äøŗčæ™äøŖčŠå¤©äø­ęœ‰å¤šäøŖč”ē³»äŗŗć€‚" -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "离开" +#: chat/chat.cpp:158 +#, fuzzy +msgid "%1 has joined the chat." +msgstr "%1 å·²ē»åŠ å…„čŠå¤©" -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "é©¬äøŠå›žę„" +#: chat/chat.cpp:211 +#, fuzzy +msgid "The conversation went idle, %1 has left the chat." +msgstr "åÆ¹čÆé—²ē½®ć€‚%1 å·²ē»ē¦»å¼€čŠå¤©ć€‚" -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "åæ™ē¢Œ" +#: chat/chat.cpp:215 +#, fuzzy +msgid "%1 has left the chat." +msgstr "%1 å·²ē»ē¦»å¼€čŠå¤©" -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "ę˜¾ē¤ŗäøŗč„±ęœŗ" +#: chat/chat.cpp:364 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 and %2" +msgstr "äøŽ %1 和 %2 聊天" -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "发呆" +#: chat/chat.cpp:371 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 et al." +msgstr "%1 ..ē­‰ - 聊天" -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "č„±ęœŗ" +#: chat/chat.cpp:630 +#, fuzzy +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" +msgstr "(čæ™ę”ę¶ˆęÆę˜Æč‡ŖåŠØå‘é€ēš„)" -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "ęŽ„å¬ē”µčÆ" +#: chat/chat.cpp:934 +#, fuzzy +msgid "You received a wink from %1." +msgstr "ä½ ęŽ„ę”¶äŗ†%1å‘ę„ēš„ä¼ ęƒ…åŠØę¼«ć€‚" -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "外出就餐" +#: chat/chat.cpp:971 +msgid "" +"The wink could not be displayed. Make sure you have 'cabextract' installed." +msgstr "ä¼ ęƒ…åŠØę¼«ę— ę³•ę’­ę”¾ć€‚čÆ·ē”®č®¤ä½ å®‰č£…äŗ†'cabextract'怂" -#: chat/chatmaster.cpp:1061 +#: chat/chat.cpp:980 +msgid "The wink could not be displayed. The data could not be read." +msgstr "ä¼ ęƒ…åŠØę¼«ę— ę³•ę˜¾ē¤ŗć€‚ę— ę³•čÆ»å–ę•°ę®ć€‚" + +#: chat/chat.cpp:1080 +#, fuzzy +msgid "You have received a wink from %1" +msgstr "ä½ ęŽ„ę”¶äŗ†%1å‘ę„ēš„ä¼ ęƒ…åŠØę¼«ć€‚" + +#: chat/chat.cpp:1100 +#, fuzzy +msgid "You received a nudge from %1!" +msgstr "ä½ ę”¶åˆ°äŗ†%1å‘ę„ēš„é—Ŗå±éœ‡åŠØļ¼" + +#: chat/chat.cpp:1119 +#, fuzzy +msgid "The message '%1' could not be sent." +msgstr "消息 '%1' ę— ę³•å‘é€ć€‚" + +#: chat/chat.cpp:1183 +msgid "You've sent a nudge to %1!" +msgstr "你向%1å‘é€äŗ†é—Ŗå±éœ‡åŠØļ¼" + +#: chat/chat.cpp:1190 +msgid "You've sent a nudge!" +msgstr "ę‚Øå‘é€äŗ†é—Ŗå±ęŒÆåŠØļ¼" + +#: chat/chatmaster.cpp:1219 msgid "%1 is sending a wink: %2" msgstr "%1 ę­£åœØå‘é€ä¼ ęƒ…åŠØę¼«: %2" -#: chat/chatmessagestyle.cpp:302 +#: chat/chatmessagestyle.cpp:298 msgid "%1 says:" msgstr "%1 诓:" -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 msgid "Add this emoticon: %1" msgstr "ę·»åŠ čæ™äøŖå›¾é‡Š: %1" -#: chat/chatview.cpp:529 +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 +msgid "&Invite" +msgstr "邀请(&I)" + +#: chat/chatview.cpp:695 msgid "" "Could not save chat log. Make sure you have permission to write in the " "folder where logs are being saved." msgstr "ę— ę³•äæå­˜čŠå¤©č®°å½•ć€‚čÆ·ē”®äæä½ åÆ¹äæå­˜č®°å½•ę–‡ä»¶ēš„ę–‡ä»¶å¤¹ęœ‰å†™ęƒé™ć€‚" -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 msgid "" "The file '%1' already exists.\n" "do you want to overwrite it?" @@ -957,357 +1472,411 @@ msgstr "" "ę–‡ä»¶ā€œ%1ā€å·²å­˜åœØć€‚\n" "ę‚Øč¦č¦†ē›–å®ƒå—ļ¼Ÿ" -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 msgid "Overwrite File" msgstr "覆盖文件" -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 msgid "Over&write" msgstr "覆盖文件(&w)" -#: chat/chatview.cpp:977 +#: chat/chatview.cpp:1275 msgid "Add this &Emoticon..." msgstr "ę·»åŠ čæ™äøŖå›¾é‡Š(&E)…" -#: chat/chatview.cpp:984 +#: chat/chatview.cpp:1282 msgid "Send &Email" msgstr "å‘é€ē”µå­é‚®ä»¶(&E)" -#: chat/chatview.cpp:988 +#: chat/chatview.cpp:1286 msgid "Copy E&mail" msgstr "å¤åˆ¶ē”µå­é‚®ä»¶åœ°å€(&m)" -#: chat/chatview.cpp:995 +#: chat/chatview.cpp:1293 msgid "Visit &Link" msgstr "č®æé—®é“¾ęŽ„(&L)" -#: chat/chatview.cpp:999 +#: chat/chatview.cpp:1297 msgid "Copy &Address" msgstr "复制地址(&A)" -#: chat/chatview.cpp:1013 +#: chat/chatview.cpp:1312 msgid "&Copy text" msgstr "å¤åˆ¶ę–‡ęœ¬(&C)" -#: chat/chatview.cpp:1014 +#: chat/chatview.cpp:1313 msgid "Select &All" msgstr "全选(&A)" -#: chat/chatview.cpp:1015 +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 msgid "Save chat to &File" msgstr "čŠå¤©č®°å½•äæå­˜åˆ°ę–‡ä»¶(&F)" -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "聊天" - -#: chat/chatwindow.cpp:239 -msgid "" -"You can't start this invitation because there are multiple contacts in this " -"chat." -msgstr "ä½ ę— ę³•å¼€åÆčæ™äøŖé‚€čÆ·ļ¼Œå› äøŗčæ™äøŖčŠå¤©äø­ęœ‰å¤šäøŖč”ē³»äŗŗć€‚" - -#: chat/chatwindow.cpp:276 -msgid "%1 has joined the chat." -msgstr "%1 å·²ē»åŠ å…„čŠå¤©" - -#: chat/chatwindow.cpp:327 -msgid "The conversation went idle, %1 has left the chat." -msgstr "åÆ¹čÆé—²ē½®ć€‚%1 å·²ē»ē¦»å¼€čŠå¤©ć€‚" - -#: chat/chatwindow.cpp:331 -msgid "%1 has left the chat." -msgstr "%1 å·²ē»ē¦»å¼€čŠå¤©" - -#: chat/chatwindow.cpp:593 -msgid "%1 - Chat" -msgstr "äøŽ %1 聊天" - -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" -msgstr "äøŽ %1 和 %2 聊天" - -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" -msgstr "%1 ..ē­‰ - 聊天" - -#: chat/chatwindow.cpp:757 -msgid "Contacts" -msgstr "联系人" - -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 -msgid "Emoticons" -msgstr "图释" - -#: chat/chatwindow.cpp:819 -msgid "My emoticons" -msgstr "ęˆ‘ēš„å›¾é‡Š" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" -msgstr "(čæ™ę”ę¶ˆęÆę˜Æč‡ŖåŠØå‘é€ēš„)" - -#: chat/chatwindow.cpp:1502 -msgid "" -"The wink could not be displayed. Make sure you have 'cabextract' installed." -msgstr "ä¼ ęƒ…åŠØę¼«ę— ę³•ę’­ę”¾ć€‚čÆ·ē”®č®¤ä½ å®‰č£…äŗ†'cabextract'怂" - -#: chat/chatwindow.cpp:1511 -msgid "The wink could not be displayed. The data could not be read." -msgstr "ä¼ ęƒ…åŠØę¼«ę— ę³•ę˜¾ē¤ŗć€‚ę— ę³•čÆ»å–ę•°ę®ć€‚" - -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" -msgstr "ä½ ęŽ„ę”¶äŗ†%1å‘ę„ēš„ä¼ ęƒ…åŠØę¼«ć€‚" - -#: chat/chatwindow.cpp:1755 -#, fuzzy -msgid "Show Side&bar" -msgstr "ä¾§č¾¹ę " - -#: chat/chatwindow.cpp:1756 -#, fuzzy -msgid "Show the contact sidebar" -msgstr "ę˜¾ē¤ŗęˆ–éšč—č”ē³»äŗŗä¾§ę " - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -#, fuzzy -msgid "Hide Side&bar" -msgstr "ä¾§č¾¹ę " - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -#, fuzzy -msgid "Hide the contact sidebar" -msgstr "ę˜¾ē¤ŗęˆ–éšč—č”ē³»äŗŗä¾§ę " - -#: chat/chatwindow.cpp:1787 -msgid "The message '%1' could not be sent." -msgstr "消息 '%1' ę— ę³•å‘é€ć€‚" - -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" -msgstr "ä½ ę”¶åˆ°äŗ†%1å‘ę„ēš„é—Ŗå±éœ‡åŠØļ¼" - -#: chat/chatwindow.cpp:1876 -msgid "You've sent a nudge to %1!" -msgstr "你向%1å‘é€äŗ†é—Ŗå±éœ‡åŠØļ¼" - -#: chat/chatwindow.cpp:1883 -msgid "You've sent a nudge!" -msgstr "ę‚Øå‘é€äŗ†é—Ŗå±ęŒÆåŠØļ¼" - -#: chat/chatwindow.cpp:1972 -msgid "%1 is typing." -msgstr "%1ę­£åœØč¾“å…„ę¶ˆęÆ" - -#: chat/chatwindow.cpp:1981 -msgid "%1 and %2 are typing." -msgstr "%1 和 %2 ę­£åœØę‰“å­—" - -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." -msgstr "%1, %2 和 %3 äøŖå…¶ä»–äŗŗę­£åœØę‰“å­—" - -#: chat/chatwindowinterface.cpp:175 +#: chat/chatwindow.cpp:489 msgid "&Chat" msgstr "聊天(&C)" -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 -msgid "&Invite" -msgstr "邀请(&I)" - -#: chat/chatwindowinterface.cpp:179 +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "å‘é€ę–‡ä»¶(&F)" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "å¼€å§‹ä¼šč®®(&M)" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 msgid "Send a &Nudge!" msgstr "å‘é€é—Ŗå±(&N)" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "äæå­˜čŠå¤©" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 #, fuzzy msgid "&Emoticons" msgstr "图释" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +#, fuzzy +msgid "Close &All Tabs" +msgstr "关闭标签" + +#: chat/chatwindow.cpp:504 #, fuzzy msgid "Meeting" msgstr "设置" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "å¼€å§‹ęˆ–åœę­¢äø€äøŖåÆ¹čÆ(&C)" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "ę”¹å˜å­—ä½“(&F)" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "ę”¹å˜å­—ä½“é¢œč‰²(&C)" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 #, fuzzy msgid "&Font" msgstr "登录(&C)" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 #, fuzzy msgid "Font &Color" msgstr "ę”¹å˜å­—ä½“é¢œč‰²(&C)" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +msgid "Emoticons" +msgstr "图释" + +#: chat/chatwindow.cpp:658 +msgid "My emoticons" +msgstr "ęˆ‘ēš„å›¾é‡Š" + +#: chat/chatwindow.cpp:738 #, fuzzy msgid "&Settings" msgstr "设置" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" -msgstr "" +msgstr "ä½æē”Øę‹¼å†™ę£€ęŸ„(&S)" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "ę˜¾ē¤ŗå›¾é‡Š(&E)" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +#, fuzzy +msgid "Hide Side&bar" +msgstr "ä¾§č¾¹ę " + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "ä¾§č¾¹ę " + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +#, fuzzy +msgid "Hide the contact sidebar" +msgstr "ę˜¾ē¤ŗęˆ–éšč—č”ē³»äŗŗä¾§ę " + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +#, fuzzy +msgid "Close all tabs" +msgstr "关闭标签" + +#: chat/chatwindow.cpp:856 +#, fuzzy +msgid "Close current tab" +msgstr "关闭标签" + +#: chat/chatwindow.cpp:1467 +#, fuzzy +msgid "Show Side&bar" +msgstr "ä¾§č¾¹ę " + +#: chat/chatwindow.cpp:1468 +#, fuzzy +msgid "Show the contact sidebar" +msgstr "ę˜¾ē¤ŗęˆ–éšč—č”ē³»äŗŗä¾§ę " + +#: chat/chatwindow.cpp:1565 +msgid "%1 is typing." +msgstr "%1ę­£åœØč¾“å…„ę¶ˆęÆ" + +#: chat/chatwindow.cpp:1575 +msgid "%1 and %2 are typing." +msgstr "%1 和 %2 ę­£åœØę‰“å­—" + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "%1, %2 和 %3 äøŖå…¶ä»–äŗŗę­£åœØę‰“å­—" + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "聊天" + +#: chat/chatwindow.cpp:1615 +#, fuzzy +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "äøŽ %1 聊天" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "å‘é€ē”µå­é‚®ä»¶(&S)" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 msgid "&View Profile" msgstr "ęŸ„ēœ‹ę”£ę”ˆ(&V)" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "ę·»åŠ č”ē³»äŗŗ(&A)" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 msgid "A&llow Contact" msgstr "允许联系人(&A)" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 msgid "&Delete Contact" msgstr "åˆ é™¤č”ē³»äŗŗ(&D)" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "é˜»ę­¢č”ē³»äŗŗ(&B)" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "č§£é™¤é˜»ę­¢č”ē³»äŗŗ(&U)" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 msgid "&Friendly Name" msgstr "昵称(&F)" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "个人消息(&P)" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 msgid "&Email Address" msgstr "ē”µå­é‚®ä»¶åœ°å€(&E)" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "复制(&C)..." -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 msgid "Blocked" msgstr "被阻止" -#: chat/contactframe.cpp:619 -#, fuzzy +#: chat/contactframe.cpp:652 msgid "The contact is %1" -msgstr "联系人离线" +msgstr "联系人%1" -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +#, fuzzy +msgid "Add to Chat" +msgstr "ę·»åŠ č”ē³»äŗŗ" + +#: chat/emoticonsidebar.cpp:213 +#, fuzzy +msgid "Insert new" +msgstr "ę’å…„å›¾é‡Š" + +#: chat/emoticonsidebar.cpp:214 +msgid "Edit" +msgstr "" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +#, fuzzy +msgid "Remove" +msgstr "åˆ é™¤ēš„" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 #, fuzzy msgid "Web Messenger" msgstr "网锵设讔" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +msgid "Windows Live Messenger %1" +msgstr "" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "č”ęœŗ" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "č„±ęœŗ" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "å…č®øēš„" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "åˆ é™¤ēš„" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 +#, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr "%1 %2" + +#: contactlistviewdelegate.cpp:150 #, fuzzy msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "%1 %2" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" -msgstr "čæ™äøŖåøęˆ·ę²”ęœ‰Hotmail收件箱!" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "离开" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "é©¬äøŠå›žę„" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "åæ™ē¢Œ" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "ę˜¾ē¤ŗäøŗč„±ęœŗ" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" +msgstr "发呆" + +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "ęŽ„å¬ē”µčÆ" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "外出就餐" + +#: dialogs/addcontactdialog.cpp:48 #, fuzzy msgid "Add a Contact" msgstr "ę·»åŠ č”ē³»äŗŗ" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 #, fuzzy msgid "No group" msgstr "åˆ é™¤ē»„(&m)" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 msgid "Add New Emoticon" msgstr "ę·»åŠ ę–°ēš„å›¾é‡Š" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "图释" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "å›¾é‡Šā€œ%1ā€å·²å­˜åœØļ¼Œä½ č¦č¦†ē›–å®ƒå—ļ¼Ÿ" @@ -1315,527 +1884,601 @@ msgstr "å›¾é‡Šā€œ%1ā€å·²å­˜åœØļ¼Œä½ č¦č¦†ē›–å®ƒå—ļ¼Ÿ" msgid "Specify an Away message" msgstr "ęŒ‡å®šå¤„äŗŽē¦»å¼€ēŠ¶ę€ę—¶å‘é€ēš„ę¶ˆęÆ" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "ä½æē”Øå¦äø€äøŖåå­—" +#: dialogs/contactaddeduserdialog.cpp:85 +#, fuzzy +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " +msgstr "" +"%1\n" +"å·²å°†ę‚ØåŠ å…„ä»–(儹)ēš„č”ē³»äŗŗåˆ—č”Øć€‚ ę‚Øęƒ³ļ¼š" -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" -msgstr "å½“ę­¤äŗŗäøŠēŗæęˆ–äø‹ēŗæę—¶é€šēŸ„ęˆ‘" +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "å·²čæžęŽ„" -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "å›¾ē‰‡ļ¼š" +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +msgid "Not seen yet" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "声音:" +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +#, fuzzy +msgid "No messages yet" +msgstr "åœØę¶ˆęÆäø­ę˜¾ē¤ŗę—¶é—“äæ”ęÆ(&h)" -#: dialogs/contactpropertiesdialog.cpp:234 -msgid "Contact Properties for %1" -msgstr "联系人%1ēš„å±žę€§ļ¼š" +#: dialogs/contactpropertiesdialog.cpp:381 +msgid "Last seen: %1" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " -msgstr "ē”µå­é‚®ä»¶åœ°å€ļ¼š" +#: dialogs/contactpropertiesdialog.cpp:382 +msgid "Last message: %1" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "å½“å‰å§“åļ¼š" +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "电子邮件" -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" -msgstr "ē½‘ē»œēŖ—å£" +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "客户端: %1" -#: dialogs/networkwindow.cpp:57 +#: dialogs/networkwindow.cpp:79 #, fuzzy msgid "S&ave tab" msgstr "äæå­˜ę ‡ē­¾" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 #, fuzzy msgid "C&lear tab" msgstr "清除标签" -#: dialogs/networkwindow.cpp:59 -#, fuzzy -msgid "Cl&ose tab" -msgstr "关闭标签" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 #, fuzzy msgid "" "No connections are present.\n" "Cannot open the Network Window." msgstr "ę²”ęœ‰ē½‘ē»œčæžęŽ„ć€‚ę— ę³•ę‰“å¼€ē½‘ē»œēŖ—å£ć€‚" -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 #, fuzzy msgid "" "Could not save the Network Window log. Make sure you have permission to " "write in the folder where it is being saved." msgstr "ę— ę³•č®°å½•ē½‘ē»œēŖ—å£č®°å½•ć€‚čÆ·ē”®äæä½ åÆ¹äæå­˜č®°å½•ę–‡ä»¶ēš„ę–‡ä»¶å¤¹ęœ‰å†™ęƒé™ć€‚" -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "äøčƒ½å…³é—­äø»čæžęŽ„ę ‡ē­¾ć€‚" -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +#, fuzzy +msgid "Cannot send commands to this kind of connection!" +msgstr "äøčƒ½å…³é—­äø»čæžęŽ„ę ‡ē­¾ć€‚" + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" -msgstr "" +msgstr "å·²å–ę¶ˆ" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" -msgstr "" +msgstr "失蓄!" -#: dialogs/transferentry.cpp:207 -#, fuzzy +#: dialogs/transferentry.cpp:217 msgid "Completed" -msgstr "č®”ē®—ęœŗ" +msgstr "完成" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "%1 MB" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "%1 kB" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "%1 å­—čŠ‚" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +#, fuzzy +msgid "%1 of %2 received." +msgstr "å·²ęŽ„ę”¶ %2 äø­ēš„ %1" + +#: dialogs/transferentry.cpp:339 +#, fuzzy +msgid "%1 of %2 sent." +msgstr "已发送 %2 äø­ēš„ %1" + +#: dialogs/transferentry.cpp:373 +msgid "infinite" msgstr "" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" -msgstr "" - -#: dialogs/transferwindow.cpp:55 -msgid "File Transfers" -msgstr "文件传送" - -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 #, fuzzy msgid "Cl&ean Up" -msgstr "清除(&u)" +msgstr "清除(&E)" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " "the theme folder '%1'." msgstr "ę— ę³•äæå­˜å›¾é‡Šäø»é¢˜ć€‚čÆ·ē”®äæä½ åÆ¹äæå­˜å›¾é‡Šäø»é¢˜ēš„ę–‡ä»¶å¤¹ '%1' ęœ‰å†™ęƒé™ć€‚" -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 msgid "Smile" msgstr "微笑" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "眨眼" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "伸舌夓" -#: emoticontheme.cpp:797 +#: emoticontheme.cpp:812 msgid "Big smile" msgstr "笑" -#: emoticontheme.cpp:798 +#: emoticontheme.cpp:813 msgid "Sad" msgstr "悲伤" -#: emoticontheme.cpp:799 +#: emoticontheme.cpp:814 msgid "Crying" msgstr "哭" -#: emoticontheme.cpp:800 +#: emoticontheme.cpp:815 msgid "Angry" msgstr "ē”Ÿę°”" -#: emoticontheme.cpp:801 +#: emoticontheme.cpp:816 msgid "Confused" msgstr "ē–‘ęƒ‘" -#: emoticontheme.cpp:802 +#: emoticontheme.cpp:817 msgid "Embarrassed" msgstr "å°“å°¬" -#: emoticontheme.cpp:803 +#: emoticontheme.cpp:818 msgid "Disappointed" msgstr "å¤±ęœ›" -#: emoticontheme.cpp:804 +#: emoticontheme.cpp:819 msgid "Hot" msgstr "儽热" -#: emoticontheme.cpp:805 +#: emoticontheme.cpp:820 msgid "Baring teeth" msgstr "咧嘓" -#: emoticontheme.cpp:806 +#: emoticontheme.cpp:821 msgid "Nerd" msgstr "åŽŒę¶" -#: emoticontheme.cpp:807 +#: emoticontheme.cpp:822 msgid "Sick" msgstr "ē”Ÿē—…" -#: emoticontheme.cpp:808 +#: emoticontheme.cpp:823 msgid "Surprised" msgstr "惊讶" -#: emoticontheme.cpp:809 +#: emoticontheme.cpp:824 msgid "Party" msgstr "聚会" -#: emoticontheme.cpp:810 +#: emoticontheme.cpp:825 msgid "Sleepy" msgstr "困" -#: emoticontheme.cpp:811 +#: emoticontheme.cpp:826 msgid "Thinking" msgstr "ꀝ考" -#: emoticontheme.cpp:812 +#: emoticontheme.cpp:827 msgid "Don't tell anyone" msgstr "äøč¦å‘ŠčÆ‰ä»»ä½•äŗŗ" -#: emoticontheme.cpp:813 +#: emoticontheme.cpp:828 msgid "Secret telling" msgstr "偷偷地诓" -#: emoticontheme.cpp:814 +#: emoticontheme.cpp:829 msgid "Eye-rolling" msgstr "转眼球" -#: emoticontheme.cpp:815 +#: emoticontheme.cpp:830 msgid "Sarcastic" msgstr "讽刺" -#: emoticontheme.cpp:816 +#: emoticontheme.cpp:831 msgid "I don't know" msgstr "äøēŸ„é“" -#: emoticontheme.cpp:817 +#: emoticontheme.cpp:832 msgid "Be right back" msgstr "é©¬äøŠå›žę„" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "天使" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "ꋄꊱ(å·¦)" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "ē”·å­©" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "红心" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "ēŗ¢ēŽ«ē‘°" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "太棒了" -#: emoticontheme.cpp:824 +#: emoticontheme.cpp:839 msgid "Dog face" msgstr "狗脸" -#: emoticontheme.cpp:825 +#: emoticontheme.cpp:840 msgid "Sun" msgstr "太阳" -#: emoticontheme.cpp:826 +#: emoticontheme.cpp:841 msgid "Devil" msgstr "邪恶" -#: emoticontheme.cpp:827 +#: emoticontheme.cpp:842 msgid "Right hug" msgstr "ꋄꊱ(右)" -#: emoticontheme.cpp:828 +#: emoticontheme.cpp:843 msgid "Girl" msgstr "儳孩" -#: emoticontheme.cpp:829 +#: emoticontheme.cpp:844 msgid "Broken heart" msgstr "åæƒē¢Ž" -#: emoticontheme.cpp:830 +#: emoticontheme.cpp:845 msgid "Wilted rose" msgstr "ęžÆēŽ«ē‘°" -#: emoticontheme.cpp:831 +#: emoticontheme.cpp:846 msgid "Thumbs down" msgstr "å¤Ŗäøå„½äŗ†" -#: emoticontheme.cpp:832 +#: emoticontheme.cpp:847 msgid "Cat face" msgstr "ēŒ«č„ø" -#: emoticontheme.cpp:833 +#: emoticontheme.cpp:848 msgid "Sleeping half-moon" msgstr "å…„ē”ēš„ęœˆē‰™" -#: emoticontheme.cpp:834 +#: emoticontheme.cpp:849 msgid "Red lips" msgstr "ēŗ¢å˜“å”‡" -#: emoticontheme.cpp:835 +#: emoticontheme.cpp:850 msgid "Clapping" msgstr "é¼“ęŽŒ" -#: emoticontheme.cpp:836 +#: emoticontheme.cpp:851 msgid "Crossed fingers" msgstr "äŗ¤å‰ę‰‹ęŒ‡" -#: emoticontheme.cpp:837 +#: emoticontheme.cpp:852 msgid "Auto" msgstr "汽车" -#: emoticontheme.cpp:838 +#: emoticontheme.cpp:853 msgid "Airplane" msgstr "é£žęœŗ" -#: emoticontheme.cpp:839 +#: emoticontheme.cpp:854 msgid "Turtle" msgstr "龟" -#: emoticontheme.cpp:840 +#: emoticontheme.cpp:855 msgid "Snail" msgstr "čœ—ē‰›" -#: emoticontheme.cpp:841 +#: emoticontheme.cpp:856 msgid "Black sheep" msgstr "é»‘ē¾Š(害群之马)" -#: emoticontheme.cpp:842 +#: emoticontheme.cpp:857 msgid "Goat" msgstr "羊" -#: emoticontheme.cpp:843 +#: emoticontheme.cpp:858 msgid "Vampire bat" msgstr "åøč”€č™č " -#: emoticontheme.cpp:844 +#: emoticontheme.cpp:859 msgid "Pizza" msgstr "比萨" -#: emoticontheme.cpp:845 +#: emoticontheme.cpp:860 msgid "Beer mug" msgstr "å•¤é…’ęÆ" -#: emoticontheme.cpp:846 +#: emoticontheme.cpp:861 msgid "Martini glass" msgstr "é«˜č„šęÆ" -#: emoticontheme.cpp:847 +#: emoticontheme.cpp:862 msgid "Coffee cup" msgstr "å’–å•”ęÆ" -#: emoticontheme.cpp:848 +#: emoticontheme.cpp:863 msgid "Birthday cake" msgstr "ē”Ÿę—„č›‹ē³•" -#: emoticontheme.cpp:849 +#: emoticontheme.cpp:864 msgid "Plate" msgstr "ē›˜å­" -#: emoticontheme.cpp:850 +#: emoticontheme.cpp:865 msgid "Bowl" msgstr "碗" -#: emoticontheme.cpp:851 +#: emoticontheme.cpp:866 msgid "Star" msgstr "星" -#: emoticontheme.cpp:852 +#: emoticontheme.cpp:867 msgid "Rainbow" msgstr "彩虹" -#: emoticontheme.cpp:853 +#: emoticontheme.cpp:868 msgid "Stormy cloud" msgstr "é£Žęš“" -#: emoticontheme.cpp:854 +#: emoticontheme.cpp:869 msgid "Lightning" msgstr "闪电" -#: emoticontheme.cpp:855 +#: emoticontheme.cpp:870 msgid "Umbrella" msgstr "é›Øä¼ž" -#: emoticontheme.cpp:856 +#: emoticontheme.cpp:871 msgid "Island with a palm tree" msgstr "ęœ‰ę£•ę¦ˆę ‘ēš„å²›" -#: emoticontheme.cpp:857 +#: emoticontheme.cpp:872 msgid "Telephone receiver" msgstr "ē”µčÆ" -#: emoticontheme.cpp:858 +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "ē§»åŠØē”µčÆ" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "电子邮件" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 msgid "Clock" msgstr "蔨" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 msgid "Camera" msgstr "ē…§ē›øęœŗ" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "čƒ¶å·" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "音符" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "ꉋ铐" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 msgid "Money" msgstr "钱" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "灯泔" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "é¦™ēƒŸ" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "足球" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "礼物" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "X-Box" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "č®”ē®—ęœŗ" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 msgid "KMess Icon" msgstr "KMess 图标" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "ęœåŠ”å™ØäøåÆē”Ø" + +#: initialview.cpp:377 +msgid "Connect" +msgstr "登录" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "注销(&D)" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "" -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "" -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "ę·»åŠ ē»„(&G)" + +#: kmess.cpp:226 msgid "Add a group" msgstr "ę·»åŠ ē»„(&A)" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "č¾“å…„ę–°ē»„åļ¼š" -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "ä½ č¾“å…„ēš„č”ē³»äŗŗåœ°å€äøę­£ē”®ļ¼š'%1'" - -#: kmess.cpp:638 +#: kmess.cpp:569 msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" msgstr "ä½ ē”®å®šč¦ä»Žä½ ēš„č”ē³»äŗŗåˆ—č”Øäø­åˆ é™¤ %1 å—ļ¼Ÿ" -#: kmess.cpp:640 +#: kmess.cpp:571 msgid "Remove contact" msgstr "åˆ é™¤č”ē³»äŗŗ(&R)" -#: kmess.cpp:641 kmess.cpp:684 -#, fuzzy -msgid "Remove" -msgstr "åˆ é™¤ēš„" - -#: kmess.cpp:642 +#: kmess.cpp:573 msgid "Remove and block" msgstr "åˆ é™¤å¹¶äø”å±č”½" -#: kmess.cpp:681 +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "ę‚Øē”®å®šč¦ä»Žč”ē³»äŗŗåˆ—č”Øäø­åˆ é™¤ %1 čæ™äøŖē»„å—ļ¼Ÿ" -#: kmess.cpp:683 -msgid "Remove group" -msgstr "åˆ é™¤ē»„(&m)" +#: kmess.cpp:631 +#, fuzzy +msgctxt "dialog button" +msgid "Remove" +msgstr "åˆ é™¤ēš„" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "čæ™ę˜Æäø€äøŖē‰¹ę®Šē»„ļ¼Œäøčƒ½č¢«ę”¹å˜ć€‚" -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 msgid "Rename group" msgstr "é‡å‘½åē»„(&n)" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "å·²čæžęŽ„" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "验证失蓄" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "已注销" -#: kmess.cpp:1441 +#: kmess.cpp:1408 +#, fuzzy msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" "

KMess å°†äøčƒ½ę’­ę”¾å£°éŸ³å’Œå¼¹å‡ŗęē¤ŗć€‚

åœØä»„äø‹ę–‡ä»¶å¤¹äø­ļ¼š%1,KMess ꖇ件 " "'eventsrc' ę— ę³•ę‰¾åˆ°ć€‚

čÆ·ę£€ęŸ„ä½ ēš„å®‰č£…ļ¼Œē„¶åŽęŠŠē¼ŗå¤±ēš„ę–‡ä»¶å¤åˆ¶åˆ°ä»»ä½•äø€äøŖåˆ—" "å‡ŗēš„ę–‡ä»¶å¤¹äø­ć€‚

" -#: kmess.cpp:1445 +#: kmess.cpp:1412 msgid "Error with notifications" msgstr "é€šēŸ„å‘ē”Ÿé”™čÆÆ" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "KMess" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "ę“ä½œ(&A)" @@ -1857,890 +2500,810 @@ msgstr "ęœē“¢č”ē³»äŗŗ(&e)" msgid "Search by &Interest" msgstr "ęŒ‰å…“č¶£ęœē“¢(&I)" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "ęœē“¢č”ē³»äŗŗ(&e)" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "ę·»åŠ ę–°åøå·(&A)" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "åøå·č®¾ē½®(&S)" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "登录(&n)" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "注销(&D)" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "ęŸ„ēœ‹ęˆ‘ēš„ę”£ę”ˆ(&P)" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "ęˆ‘ēš„ēŠ¶ę€(&M)" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "ē¦»å¼€åŽč‡ŖåŠØå›žå¤" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "ę˜¾ē¤ŗč¢«å…č®øēš„č”ē³»äŗŗ(&A)" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 msgid "Show &Offline Contacts" msgstr "ę˜¾ē¤ŗč„±ęœŗēš„č”ē³»äŗŗ(&A)" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "ę˜¾ē¤ŗč¢«åˆ é™¤ēš„č”ē³»äŗŗ(&R)" -#: kmessinterface.cpp:303 +#: kmessinterface.cpp:318 #, fuzzy -msgid "Show &Display Pictures" +msgid "Show &Empty Groups" +msgstr "ę˜¾ē¤ŗå›¾é‡Š(&E)" + +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" msgstr "夓像" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "微笑" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "åÆ¹č”ē³»äŗŗčæ›č”ŒęŽ’åŗ(&S)" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "组" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "č”ęœŗ/č„±ęœŗ" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "ę˜¾ē¤ŗę–‡ä»¶ä¼ é€ēŖ—å£(&T)" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "ę˜¾ē¤ŗē½‘ē»œēŖ—å£(&N)" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "ę­£åœØę”¶å¬%1" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +msgid "[%1] %2 goes online" +msgstr "" + +#: kmessview.cpp:363 +msgid "[%1] %2 goes offline" +msgstr "" + +#: kmessview.cpp:559 msgid "Cha&t" msgstr "聊天(&t)" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "å±žę€§(&P)" -#: kmessview.cpp:492 +#: kmessview.cpp:569 msgid "&Remove from group" msgstr "ä»Žē»„äø­åˆ é™¤(&R)" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +#, fuzzy +msgid "&Listening Music" +msgstr "ę­£åœØę”¶å¬ %1" + +#: kmessview.cpp:601 msgid "&Copy to Group" msgstr "å°†č”ē³»äŗŗå¤åˆ¶åˆ°(&C)" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "å°†č”ē³»äŗŗē§»åŠØåˆ°(&M)" -#: kmessview.cpp:549 +#: kmessview.cpp:646 msgid "Move Group &Down" msgstr "å‘äø‹ē§»åŠØē»„(&D)" -#: kmessview.cpp:550 +#: kmessview.cpp:647 msgid "Move Group &Up" msgstr "å‘äøŠē§»åŠØē»„(&U)" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "åˆ é™¤ē»„(&m)" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "é‡å‘½åē»„(&n)" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 #, fuzzy msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "电子邮件" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 +#, fuzzy msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" +msgstr "客户端: %1" + +#: kmessview.cpp:1075 +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" msgstr "" -#: kmessview.cpp:918 +#: kmessview.cpp:1076 +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "" + +#: kmessview.cpp:1085 #, fuzzy msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "
%1 (%2)" -#: kmessview.cpp:921 +#: kmessview.cpp:1090 #, fuzzy -msgctxt "Contacts count in group tooltip" +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "联系人" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +#, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "联系人离线" + +#: kmessview.cpp:1504 #, fuzzy msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "čÆ·åœØę­¤å¤„č¾“å…„ę‚Øēš„äøŖäŗŗäæ”ęÆ" -#: kmessview.cpp:1543 -msgid "You have 1 new e-mail in your inbox." -msgstr "ę‚Øēš„ę”¶ä»¶ē®±äø­ęœ‰1封新邮件。" +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" -#: kmessview.cpp:1547 -msgid "You have %1 new emails in your inbox." -msgstr "ę‚Øēš„ę”¶ä»¶ē®±äø­ęœ‰%1封新邮件。" - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "KMess" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 #, fuzzy msgid "Project support" msgstr "P4-Context åŸŸēš„ę”ÆęŒ" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 #, fuzzy msgid "Current developer" msgstr "GnomeMeeting å¼€å‘č€…" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 msgid "" "German translation, testing, documentation, web master, project management, " "etc..." msgstr "å¾·čÆ­ēæ»čÆ‘ć€ęµ‹čÆ•ć€ę–‡ę”£ć€ē½‘ē«™č®¾č®”ć€é”¹ē›®äø»ē®”ļ¼Œē­‰ē­‰ć€‚" -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "网锵设讔" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "黄/蓝/ē“«č‰²å›¾é‡Šé›†å’Œę„å¤§åˆ©čÆ­ēæ»čÆ‘" -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "協通图释" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "缺省声音主题" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "é˜æę‹‰ä¼ÆčÆ­ēæ»čÆ‘å’Œę–‡ä»¶äæå­˜å›½é™…åŒ–ēš„äæ®ę­£" -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 msgid "More Arabic translation" msgstr "ę›“å¤šé˜æę‹‰ä¼ÆčÆ­ēæ»čÆ‘" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "巓脿葔萄牙语翻译" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 msgid "Catalan translation" msgstr "åŠ ę³°ē½—å°¼äŗščÆ­ēæ»čÆ‘" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "ē®€ä½“äø­ę–‡ēæ»čÆ‘ļ¼Œę–‡ä»¶å‘é€ēš„bugäæ®å¤ļ¼ŒčæžęŽ„ä»£ē†ēš„ä»£ē " -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 msgid "More Simplified Chinese translation" msgstr "ę›“å¤šē®€ä½“äø­ę–‡ēæ»čÆ‘" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 msgid "Traditional Chinese translation" msgstr "繁体中文翻译" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 msgid "Danish translation" msgstr "丹麦语翻译" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 msgid "More Danish translation" msgstr "ę›“å¤šäø¹éŗ¦čÆ­ēæ»čÆ‘" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "č·å…°čÆ­ēæ»čÆ‘" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 msgid "More Dutch translation" msgstr "ę›“å¤šēš„č·å…°čÆ­ēæ»čÆ‘" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 msgid "Estonian translation" msgstr "ēˆ±ę²™å°¼äŗščÆ­ēæ»čÆ‘" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 msgid "Finnish translation" msgstr "čŠ¬å…°čÆ­ēæ»čÆ‘" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 msgid "More Finnish translation" msgstr "ę›“å¤ščŠ¬å…°čÆ­ēæ»čÆ‘" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "法语翻译" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 msgid "More French translation, MSN6 emoticon definitions" msgstr "ę›“å¤šę³•čÆ­ēæ»čÆ‘ļ¼ŒMSN6 图释定义" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 msgid "More French translation" msgstr "ę›“å¤šę³•čÆ­ēæ»čÆ‘" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 msgid "Hungarian translation" msgstr "åŒˆē‰™åˆ©čÆ­ēæ»čÆ‘" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 msgid "More Italian translation" msgstr "ę›“å¤šę„å¤§åˆ©čÆ­ēæ»čÆ‘" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "éŸ©ę–‡ēæ»čÆ‘" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 msgid "Norsk BokmĆ„l translation" msgstr "ęŒŖåØčÆ­ēæ»čÆ‘" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 msgid "Slovenian translation" msgstr "ę–Æę“›ę–‡å°¼äŗščÆ­ēæ»čÆ‘" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "č„æē­ē‰™čÆ­ēæ»čÆ‘" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 msgid "More Spanish translation" msgstr "ę›“å¤šč„æē­ē‰™čÆ­ēæ»čÆ‘" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 msgid "Swedish translation" msgstr "ē‘žå…øčÆ­ēæ»čÆ‘" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 msgid "Thai translation" msgstr "泰语翻译" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "åœŸč€³å…¶čÆ­ēæ»čÆ‘" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "ę›“å¤šåœŸč€³å…¶čÆ­ēæ»čÆ‘" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -#, fuzzy -msgid "Guido Solinas" -msgstr "上线(&G)" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" -msgstr "" +msgstr "č”ē³»äŗŗåˆ—č”Øäø­ēš„å›¾ē‰‡ä»£ē ļ¼Œč”ē³»äŗŗå®¢ęˆ·ē«Æäæ”ęÆļ¼ŒčŠå¤©å­—ä½“ē¼©ę”¾" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "文件传送" + +#: main.cpp:134 msgid "P4-Context field support" msgstr "P4-Context åŸŸēš„ę”ÆęŒ" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "Xinerama ēš„äæ®ę­£" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "ęœ€åˆę–‡ä»¶ęŽ„ę”¶ēš„ä»£ē " -#: main.cpp:120 -msgid "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" msgstr "" -#: main.cpp:120 +#: main.cpp:138 +#, fuzzy +msgid "KWallet support" +msgstr "P4-Context åŸŸēš„ę”ÆęŒ" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "å„ē§å›½é™…åŒ–é—®é¢˜ēš„äæ®ę­£" + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "å„ē§å›½é™…åŒ–é—®é¢˜ēš„äæ®ę­£" -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "GnomeMeeting å¼€å‘č€…" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "å¤“äøŠē½©ē€č¢‹å­ēš„äŗŗ" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "ēµę„Ÿå’Œå¤šé”¹ä»£ē " -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 +#: main.cpp:150 msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "ę—§ēš„å¼¹å‡ŗę°”ę³”ä»£ē ć€ęœ€åˆēš„ p2p ä»£ē å’Œå¤„ē† msn challenge" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "ē©ŗé—²å®šę—¶å™Øēš„ä»£ē " -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 +#: main.cpp:152 msgid "Close-to-tray icon screenshot code" +msgstr "ā€œęˆŖå±ę—¶ę”¶ē¼©åˆ°ę‰˜ē›˜ā€ä»£ē " + +#: main.cpp:153 +msgid "Custom crash handler implementation" msgstr "" -#: main.cpp:131 +#: main.cpp:156 msgid "Your name here?" msgstr "å°†ę‚Øēš„åå­—å†™åœØčæ™é‡Œļ¼Ÿ" -#: main.cpp:131 +#: main.cpp:156 #, fuzzy msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" "ęˆ‘ä»¬ę¬¢čæŽę‚Øåˆ° KMess åø®åŠ©č®ŗå›åŽ»äæ®č”„ę¼ę“žå’Œęäŗ¤č”„äøļ¼\n" "å¦‚ęžœę‚Øč®¤äøŗčæ™é‡Œę¼äø‹äŗ†ę‚Øēš„åå­—ļ¼Œä¹ŸčÆ·č”ē³»ęˆ‘ä»¬ļ¼" -#: main.cpp:134 +#: main.cpp:159 #, fuzzy msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "ę‚Øēš„å§“å" -#: main.cpp:135 +#: main.cpp:160 #, fuzzy msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "ę‚Øēš„ē”µå­é‚®ä»¶åœ°å€ļ¼š" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "ä»„ē»™å®šēš„é‚®ä»¶åœ°å€č‡ŖåŠØē™»å½•" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 msgid "The contact cancelled the session." msgstr "č”ē³»äŗŗå–ę¶ˆäŗ†é‚€čÆ·ć€‚" -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 msgid "The contact rejected the invitation." msgstr "č”ē³»äŗŗę‹’ē»äŗ†é‚€čÆ·ć€‚" -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 msgid "You have cancelled the session." msgstr "ę‚Øå–ę¶ˆäŗ†é‚€čÆ·ć€‚" -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "ę‚Øę‹’ē»äŗ†é‚€čÆ·ć€‚" -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +#, fuzzy +msgid "Do you want to accept or cancel?" msgstr "ä½ ęƒ³ęŽ„å—čæ˜ę˜Æå–ę¶ˆļ¼Ÿ" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +#, fuzzy +msgid "Click to cancel." msgstr "å•å‡»čæ™é‡Œå–ę¶ˆ" -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 msgid "Do you want to accept the file: %1 (%2)" msgstr "ę‚Øč¦ęŽ„ę”¶čæ™äøŖę–‡ä»¶å—ļ¼š%1 (%2 )" -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 msgid "The transfer of %1 failed. Couldn't open file." msgstr "ę–‡ä»¶ä¼ é€å¤±č“„ļ¼Œę— ę³•ę‰“å¼€ę–‡ä»¶%1怂" -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "ä¼ é€č¢«ęŽ„å—ć€‚" + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 msgid "Connecting to %1, port %2" msgstr "ę­£åœØčæžęŽ„åˆ° %1, %2 ē«Æå£" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 msgid "The transfer was cancelled" msgstr "ę–‡ä»¶ä¼ é€č¢«å–ę¶ˆ" -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 msgid "Connection established" msgstr "čæžęŽ„å·²å»ŗē«‹" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 msgid "Successfully transferred file: %1" msgstr "ęˆåŠŸä¼ é€ę–‡ä»¶ļ¼š%1" -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 msgid "The transfer of %1 failed. The file does not exist." msgstr "ę–‡ä»¶ä¼ é€å¤±č“„ļ¼Œę–‡ä»¶%1äøå­˜åœØć€‚" -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 msgid "The transfer of %1 failed. The file could not be read." msgstr "ę–‡ä»¶ä¼ é€å¤±č“„ļ¼Œę— ę³•čÆ»å– %1怂" -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 msgid "Sending file %1" msgstr "ę­£åœØå‘é€ę–‡ä»¶ %1" -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "ä¼ é€č¢«ęŽ„å—ć€‚" - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" -msgstr "" +msgstr "åå®ščæžęŽ„å‚ę•°" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "ę–‡ä»¶ä¼ é€é‚€čÆ·č¢«å–ę¶ˆć€‚ęŽ„ę”¶ēš„ę•°ę®å·²ęŸåć€‚" -#: network/applications/filetransferp2p.cpp:345 -msgid "The transfer of %1 failed. Couldn't open file" -msgstr "ę–‡ä»¶ä¼ é€å¤±č“„ļ¼Œę— ę³•ę‰“å¼€ę–‡ä»¶%1怂" - -#: network/applications/filetransferp2p.cpp:524 -msgid "The contact cancelled the transfer." -msgstr "č”ē³»äŗŗå–ę¶ˆäŗ†ę–‡ä»¶ä¼ é€ć€‚" - -#: network/applications/filetransferp2p.cpp:579 -msgid "File could not be written" +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." msgstr "" -#: network/applications/filetransferp2p.cpp:768 -msgid "The transfer of %1 failed. The file does not exist." +#: network/applications/filetransferp2p.cpp:348 +#, fuzzy +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "" +"ę–‡ä»¶ā€œ%1ā€å·²å­˜åœØć€‚\n" +"ę‚Øč¦č¦†ē›–å®ƒå—ļ¼Ÿ" + +#: network/applications/filetransferp2p.cpp:378 +#, fuzzy +msgid "The transfer of file "%1" failed. Couldn't save the file." +msgstr "ę–‡ä»¶ä¼ é€å¤±č“„ļ¼Œę— ę³•ę‰“å¼€ę–‡ä»¶%1怂" + +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 +#, fuzzy +msgid "The contact has cancelled the transfer of file "%1"." +msgstr "č”ē³»äŗŗå–ę¶ˆäŗ†ę–‡ä»¶ä¼ é€ć€‚" + +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "ę‚Øå–ę¶ˆäŗ†é‚€čÆ·ć€‚" + +#: network/applications/filetransferp2p.cpp:616 +msgid "File could not be written" +msgstr "文件无法写兄" + +#: network/applications/filetransferp2p.cpp:676 +#, fuzzy +msgid "Successfully sent file "%1"." +msgstr "ęˆåŠŸä¼ é€ę–‡ä»¶ļ¼š%1" + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "ęˆåŠŸä¼ é€ę–‡ä»¶ļ¼š%1" + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "ę–‡ä»¶ä¼ é€å¤±č“„ļ¼Œę–‡ä»¶%1äøå­˜åœØć€‚" -#: network/applications/filetransferp2p.cpp:773 -msgid "The transfer of %1 failed. The file could not be read." +#: network/applications/filetransferp2p.cpp:818 +#, fuzzy +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "ę–‡ä»¶ä¼ é€å¤±č“„ļ¼Œę— ę³•čÆ»å– %1怂" -#: network/applications/filetransferp2p.cpp:809 -msgid "Sending file %1 (%2)" +#: network/applications/filetransferp2p.cpp:855 +#, fuzzy +msgid "Sending file "%1" (%2)." msgstr "ę­£åœØå‘é€ę–‡ä»¶ %1 (%2)" -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "č”ē³»äŗŗå–ę¶ˆäŗ†ę–‡ä»¶ä¼ é€ć€‚" + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "ę‚Øč¢«é‚€čÆ·å‚åŠ ä¼šč®®(使用 GnomeMeeting)怂" -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 msgid "Starting GnomeMeeting. Connecting to %1." msgstr "启动 GnomeMeeting…… ę­£åœØčæžęŽ„åˆ° %1怂" -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "ę­£åœØé‚€čÆ·č”ē³»äŗŗå‚åŠ ä¼šč®®ć€‚" -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "é‚€čÆ·č¢«å–ę¶ˆć€‚å¦äø€ę–¹å®¢ęˆ·ē«Æäøę”ÆęŒć€‚" -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 msgid "The invitation was aborted. An internal error occured." msgstr "é‚€čÆ·č¢«ē»ˆę­¢ć€‚å‘ē”Ÿäŗ†å†…éƒØé”™čÆÆć€‚" -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "é‚€čÆ·č¢«ē»ˆę­¢ć€‚ē­‰å¾…ē”Øęˆ·ęŽ„å—č¶…ę—¶ć€‚" -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "é‚€čÆ·č¢«ē»ˆę­¢ć€‚ē­‰å¾…ę–‡ä»¶ę•°ę®č¶…ę—¶ć€‚" -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "é‚€čÆ·č¢«ē»ˆę­¢ć€‚åˆ‡ę¢ęæå…³é—­äŗ†čŠå¤©čæžęŽ„ć€‚" -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 msgid "The invitation was aborted." msgstr "é‚€čÆ·č¢«ē»ˆę­¢ć€‚" -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "ę‚Øč¢«é‚€čÆ·å…±äŗ«ę­¤äŗŗēš„ę”Œé¢ć€‚" -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 msgid "Starting KRDC. Connecting to %1." msgstr "启动 KRDCć€‚ę­£åœØčæžęŽ„åˆ° %1怂" -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." -msgstr "č”ē³»äŗŗåÆåŠØäŗ†äø€é”¹ KMess äøę”ÆęŒēš„ MSN6 åŠŸčƒ½ć€‚" +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +msgid "The contact rejected the invitation. An internal error occured." +msgstr "č”ē³»äŗŗę‹’ē»äŗ†é‚€čÆ·ć€‚å‘ē”Ÿäŗ†å†…éƒØé”™čÆÆć€‚" -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +msgid "The transfer failed." +msgstr "传输失蓄。" + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." msgstr "é‚€čÆ·č¢«å–ę¶ˆć€‚č”ē³»äŗŗå‘é€äŗ†ęŸåēš„ę•°ę®ļ¼Œęˆ–č€…KMessäøę”ÆęŒå®ƒć€‚" -#: network/applications/p2papplication.cpp:1503 -msgid "The transfer failed. Data preparation failed." -msgstr "ę–‡ä»¶ä¼ é€å¤±č“„ć€‚ę•°ę®å‡†å¤‡å¤±č“„" - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -msgid "The contact rejected the invitation. An internal error occured." -msgstr "č”ē³»äŗŗę‹’ē»äŗ†é‚€čÆ·ć€‚å‘ē”Ÿäŗ†å†…éƒØé”™čÆÆć€‚" - -#: network/applications/p2papplication.cpp:1626 -msgid "The transfer failed." -msgstr "传输失蓄。" - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "ę–‡ä»¶ä¼ é€å¤±č“„ć€‚č”ē³»äŗŗå‘é€äŗ†ęŸåēš„ę•°ę®ļ¼Œęˆ–č€…KMessäøę”ÆęŒć€‚" -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "ę–‡ä»¶ä¼ é€å¤±č“„ć€‚ē­‰å¾…ē”Øęˆ·ęŽ„å—č¶…ę—¶ć€‚" + +#: network/applications/p2papplicationbase.cpp:1015 +msgid "The transfer failed. An internal error occured." +msgstr "ę–‡ä»¶ä¼ é€å¤±č“„ć€‚å‘ē”Ÿäŗ†å†…éƒØé”™čÆÆć€‚" + +#: network/applications/p2papplicationbase.cpp:1176 +msgid "The transfer failed. Couldn't open data source." +msgstr "ę–‡ä»¶ä¼ é€å¤±č“„ć€‚ę— ę³•ę‰“å¼€ę•°ę®ęŗć€‚" + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "č”ē³»äŗŗåÆåŠØäŗ†äø€é”¹ KMess äøę”ÆęŒēš„ MSN6 åŠŸčƒ½ć€‚" + +#: network/applications/p2papplication.cpp:1071 +msgid "The transfer failed. Data preparation failed." +msgstr "ę–‡ä»¶ä¼ é€å¤±č“„ć€‚ę•°ę®å‡†å¤‡å¤±č“„" + +#: network/applications/p2papplication.cpp:1178 msgid "The invitation was cancelled. Message was not directed to us." msgstr "é‚€čÆ·č¢«å–ę¶ˆć€‚ę¶ˆęÆäøę˜Æé’ˆåÆ¹ęˆ‘ä»¬ēš„ć€‚" -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "ę–‡ä»¶ä¼ é€å¤±č“„ć€‚č”ē³»äŗŗå‘é€äŗ†ęŸåēš„ę•°ę®ļ¼Œęˆ–č€…KMessäøę”ÆęŒć€‚" -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "ē­‰å€™åˆ°äø»ęœŗ %1 ē«Æå£ %2 ēš„čæžęŽ„ć€‚" -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "č½¬ę¢åˆ°é—“ęŽ„ä¼ č¾“ęØ”å¼(čæ™åÆčƒ½å¾ˆę…¢)" -#: network/applications/p2papplication.cpp:3297 -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "ę–‡ä»¶ä¼ é€å¤±č“„ć€‚ē­‰å¾…ē”Øęˆ·ęŽ„å—č¶…ę—¶ć€‚" - -#: network/applications/p2papplication.cpp:3316 -msgid "The transfer failed. An internal error occured." -msgstr "ę–‡ä»¶ä¼ é€å¤±č“„ć€‚å‘ē”Ÿäŗ†å†…éƒØé”™čÆÆć€‚" - -#: network/applications/p2papplication.cpp:3693 -msgid "The transfer failed. Couldn't open data source." -msgstr "ę–‡ä»¶ä¼ é€å¤±č“„ć€‚ę— ę³•ę‰“å¼€ę•°ę®ęŗć€‚" - -#: network/applications/p2papplication.cpp:4857 -#, fuzzy +#: network/applications/p2papplication.cpp:3113 msgid "Waiting for connection" -msgstr "ē­‰å¾…č”ē³»äŗŗåˆ—č”Øā€¦ā€¦" +msgstr "ē­‰å¾…čæžęŽ„" -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " "accept." msgstr "é‚€čÆ·č¢«å–ę¶ˆć€‚ē­‰å¾…ē”Øęˆ·ęŽ„å—č¶…ę—¶ć€‚" -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." msgstr "é‚€čÆ·č¢«å–ę¶ˆć€‚ē­‰å¾…ē”®č®¤čæžęŽ„ę˜Æå¦ęˆåŠŸč¶…ę—¶ć€‚" -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "é‚€čÆ·č¢«å–ę¶ˆć€‚ē­‰å¾…ę•°ę®č¶…ę—¶ć€‚" -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 msgid "You are invited to start a voice conversation." msgstr "ę‚Øč¢«é‚€čÆ·äøŽę­¤äŗŗčÆ­éŸ³čŠå¤©ć€‚" -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 msgid "" "You are invited to start a voice conversation but support for this was not " "installed" msgstr "ę‚Øč¢«é‚€čÆ·å‚åŠ čÆ­éŸ³čŠå¤©ļ¼Œä½†ę˜Æčæ™é”¹ę”ÆęŒę²”ęœ‰å®‰č£…ć€‚" -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 msgid "You have cancelled the voice conversation." msgstr "ę‚Øå–ę¶ˆäŗ†čÆ­éŸ³čŠå¤©ć€‚" -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "é‚€čÆ·č¢«å–ę¶ˆć€‚éŸ³é¢‘č®¾å¤‡ę— ę³•ę‰“å¼€ć€‚" -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 msgid "Start voice conversation. Connecting to %1." msgstr "åÆåŠØčÆ­éŸ³åÆ¹čÆć€‚ę­£åœØčæžęŽ„åˆ°%1" -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 msgid "Start voice conversation. Listening on %1." msgstr "åÆåŠØčÆ­éŸ³åÆ¹čÆć€‚ęŽ„å¬%1" -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 msgid "Inviting the contact to a voice conversation." msgstr "ę­£åœØé‚€čÆ·č”ē³»äŗŗå‚åŠ čÆ­éŸ³ä¼šč®®ć€‚" -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 msgid "The contact is inviting you for '%1', but this is not implemented yet." msgstr "č”ē³»äŗŗé‚€čÆ·ę‚Øä½æē”Øā€œ%1ā€ļ¼Œä½†ę˜ÆēŽ°åœØKMessčæ˜ę²”ęœ‰å¼€å‘ę­¤åŠŸčƒ½ć€‚" @@ -2755,16 +3318,15 @@ msgstr "ꖇ件 %1 ēš„ä¼ é€č¢«å–ę¶ˆć€‚" #: network/extra/msnftpconnection.cpp:133 msgid "Failed" -msgstr "" +msgstr "失蓄" #: network/extra/msnftpconnection.cpp:407 msgid "The transfer of %1 failed. Couldn't open a local port." msgstr "%1ēš„ä¼ é€å¤±č“„ļ¼Œę— ę³•ę‰“å¼€ęœ¬åœ°ē«Æå£ć€‚" #: network/extra/msnftpconnection.cpp:408 -#, fuzzy msgid "Couldn't open a local port." -msgstr "%1ēš„ä¼ é€å¤±č“„ļ¼Œę— ę³•ę‰“å¼€ęœ¬åœ°ē«Æå£ć€‚" +msgstr "ę— ę³•ę‰“å¼€ęœ¬åœ°ē«Æå£ć€‚" #: network/extra/msnftpconnection.cpp:465 msgid "Initiating file transfer" @@ -2775,664 +3337,847 @@ msgid "The transfer of %1 failed. A connection could not be made" msgstr "%1ēš„ä¼ é€å¤±č“„ļ¼Œę— ę³•å»ŗē«‹čæžęŽ„ć€‚" #: network/extra/msnftpconnection.cpp:479 -#, fuzzy msgid "Unable to make a connection." -msgstr "ę— ę³•å»ŗē«‹čæžęŽ„: %1" +msgstr "ę— ę³•å»ŗē«‹čæžęŽ„ć€‚" #: network/extra/msnftpconnection.cpp:583 msgid "Receiving file %1" msgstr "å‘é€ę–‡ä»¶ %1" -#: network/msnconnection.cpp:477 -msgid "1 ping lost" -msgstr "丢失了1äøŖ ping ę•°ę®åŒ…" - -#: network/msnconnection.cpp:481 -msgid "%1 pings lost" -msgstr "丢失了%1äøŖ ping ę•°ę®åŒ…" - -#: network/msnconnection.cpp:496 -msgid "The connection to the server was lost." -msgstr "åˆ°ęœåŠ”å™Øēš„čæžęŽ„äø¢å¤±ć€‚" - -#: network/msnconnection.cpp:704 +#: network/msnconnection.cpp:589 #, fuzzy -msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." -msgstr "" -"KMess ę— ę³•čæžęŽ„åˆ° MSN Messenger ęœåŠ”å™Øć€‚\n" -"čÆ·ē”®č®¤čæžęŽ„åˆ°äŗ†å› ē‰¹ē½‘ć€‚\n" -"ē³»ē»Ÿé”™čÆÆļ¼š%1 (代码 %2)怂" - -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "čæœēØ‹ē”Øęˆ·å…³é—­äŗ†čæžęŽ„ć€‚" - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" -"KMess ę— ę³•čæžęŽ„åˆ° MSN Messenger ęœåŠ”å™Øć€‚MSN MessengeręœåŠ”å™ØåÆčƒ½ęš‚ę—¶ę— ę³•å·„ä½œęˆ–" -"č€…ä½ ēš„ē½‘ē»œčæžęŽ„ęœ‰é—®é¢˜ć€‚" - -#: network/msnnotificationconnection.cpp:724 -msgid "Show MSN Messenger Service status?" -msgstr "显示 MSN Messenger ęœåŠ”ēŠ¶ę€ļ¼Ÿ" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "ęœåŠ”å™Øé”™čÆÆ" - -#: network/msnnotificationconnection.cpp:1344 -#, fuzzy -msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" -msgstr "" -"ę‚Øå·²č¢«ę³Øé”€ļ¼Œå› äøŗę‚Øä½æē”Øäŗ†å¦äø€äøŖMSN Messenger\n" -"å®¢ęˆ·ēØ‹åŗęˆ–åœØå¦äø€äøŖåœ°ę–¹ē™»å½•" - -#: network/msnnotificationconnection.cpp:1558 -msgid "Got synchronization" -msgstr "已同歄" - -#: network/msnnotificationconnection.cpp:1699 -msgid "Authenticating" -msgstr "正在验证" - -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "čŽ·å¾—ē”Øęˆ·ē”®č®¤" - -#: network/msnnotificationconnection.cpp:1752 -msgid "Waiting for contact list..." -msgstr "ē­‰å¾…č”ē³»äŗŗåˆ—č”Øā€¦ā€¦" - -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "äøŽé€šēŸ„ęœåŠ”å™Øčæ›č”Œä¼ č¾“" - -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" -msgstr "éŖŒčÆå¤±č“„ļ¼ŒčÆ·ę£€ęŸ„ä½ ēš„ē”Øęˆ·åå’ŒåÆ†ē ć€‚" - -#: network/msnnotificationconnection.cpp:2042 -msgid "Connecting..." -msgstr "ę­£åœØčæžęŽ„ā€¦ā€¦" - -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" -msgstr "KMessä»ŽęœåŠ”å™ØęŽ„åˆ°äŗ†äø€äøŖęœŖēŸ„å‘½ä»¤ļ¼š%1" - -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 -msgid "Invalid command syntax" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -msgid "There was an internal error in KMess: %1" -msgstr "KMesså†…éƒØé”™čÆÆ: %1" - -#: network/msnnotificationconnection.cpp:2243 -msgid "Invalid command parameter" -msgstr "" - -#: network/msnnotificationconnection.cpp:2246 -msgid "The email you have tried to add is not a MSN Messenger account" -msgstr "ä½ čÆ•å›¾ę·»åŠ ēš„emailåœ°å€äøę˜ÆMSN Messengeråøå·" - -#: network/msnnotificationconnection.cpp:2249 -msgid "Domain name missing" -msgstr "" - -#: network/msnnotificationconnection.cpp:2252 -msgid "Already logged in" -msgstr "" - -#: network/msnnotificationconnection.cpp:2255 -msgid "The account name given is invalid" -msgstr "ē”Øęˆ·åę— ę•ˆ" - -#: network/msnnotificationconnection.cpp:2258 -msgid "" -"That account name is invalid, or your passport has not been confirmed yet" -msgstr "åøå·ę— ę•ˆļ¼Œęˆ–č€…ä½ ēš„passportčæ˜ę²”ęœ‰ē”®č®¤ć€‚" - -#: network/msnnotificationconnection.cpp:2261 -msgid "Your contact list is full" -msgstr "ę‚Øēš„č”ē³»äŗŗåˆ—č”Øå·²ę»”" - -#: network/msnnotificationconnection.cpp:2264 -msgid "Invalid SBP parameter" -msgstr "" - -#: network/msnnotificationconnection.cpp:2267 -msgid "This contact is already on your list" -msgstr "čæ™äøŖč”ē³»äŗŗå·²ē»åœØę‚Øēš„åˆ—č”Øäø­" - -#: network/msnnotificationconnection.cpp:2270 -msgid "This contact is not on your list" -msgstr "čæ™äøŖč”ē³»äŗŗäøåœØę‚Øēš„åˆ—č”Øäø­" - -#: network/msnnotificationconnection.cpp:2273 -msgid "This contact is not online" -msgstr "联系人离线" - -#: network/msnnotificationconnection.cpp:2276 -msgid "Already in this mode" -msgstr "" - -#: network/msnnotificationconnection.cpp:2279 -#, fuzzy -msgid "Contact is in the opposite list" -msgstr "čæ™äøŖč”ē³»äŗŗäøåœØę‚Øēš„åˆ—č”Øäø­" - -#: network/msnnotificationconnection.cpp:2282 -msgid "Your contact list has too many groups" -msgstr "ę‚Øēš„č”ē³»äŗŗåˆ—č”Øäø­åˆ†ē»„å¤Ŗå¤šäŗ†" - -#: network/msnnotificationconnection.cpp:2285 -msgid "This group can't be changed" -msgstr "čæ™äøŖē»„äøčƒ½č¢«ę”¹å˜ć€‚" - -#: network/msnnotificationconnection.cpp:2288 -msgid "This group is not empty" -msgstr "ē»„éžē©ŗ" - -#: network/msnnotificationconnection.cpp:2291 -msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" -msgstr "åœØä½ ēš„MSN Messengerꈖ者Hotmailč”ē³»äŗŗåˆ—č”Øäø­å·²ē»ä½æē”Øäŗ†čæ™äøŖē»„å" - -#: network/msnnotificationconnection.cpp:2294 -msgid "The group name is too long" -msgstr "ē»„åčæ‡é•æ" - -#: network/msnnotificationconnection.cpp:2297 -msgid "Attempted to change group \"0\"" -msgstr "" - -#: network/msnnotificationconnection.cpp:2300 -#, fuzzy -msgid "Invalid Group" -msgstr "é‡å‘½åē»„(&n)" - -#: network/msnnotificationconnection.cpp:2303 -msgid "Switchboard server failed" -msgstr "åˆ‡ę¢ęæęœåŠ”å™Øå¤±č“„ć€‚" - -#: network/msnnotificationconnection.cpp:2306 -msgid "Transfer to switchboard server failed" -msgstr "åˆ°åˆ‡ę¢ęæęœåŠ”å™Øēš„ę–‡ä»¶ä¼ é€å¤±č“„" - -#: network/msnnotificationconnection.cpp:2309 -msgid "Direct connection (MSNSLP) error, connection failed" -msgstr "ē›“ęŽ„čæžęŽ„(MSNSLP)é”™čÆÆļ¼ŒčæžęŽ„å¤±č“„" - -#: network/msnnotificationconnection.cpp:2312 -msgid "Required field missing" -msgstr "" - -#: network/msnnotificationconnection.cpp:2315 -msgid "Not logged in" -msgstr "" - -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" -msgstr "č®æé—®č”ē³»äŗŗåˆ—č”Øę—¶å‘ē”Ÿé”™čÆÆļ¼ŒēØåŽå†čÆ•" - -#: network/msnnotificationconnection.cpp:2322 -msgid "Command is disabled" -msgstr "" - -#: network/msnnotificationconnection.cpp:2325 -msgid "Your account is banned." -msgstr "ę‚Øēš„č“¦ęˆ·č¢«åœē”Øć€‚" - -#: network/msnnotificationconnection.cpp:2329 -#, fuzzy -msgid "Challenge response failed" -msgstr "传输失蓄。" - -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" -msgstr "ä½ å¼€åÆä¼ščÆå¤Ŗåæ«äŗ†" - -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" -msgstr "ä½ å·²å¼€åÆēš„ä¼ščÆå¤Ŗå¤šäŗ†" - -#: network/msnnotificationconnection.cpp:2341 -msgid "Unexpected command sequence" -msgstr "" - -#: network/msnnotificationconnection.cpp:2344 -msgid "Bad friend name" -msgstr "é”™čÆÆēš„č”ē³»äŗŗåå­—" - -#: network/msnnotificationconnection.cpp:2348 -msgid "Bad CVR data" -msgstr "" - -#: network/msnnotificationconnection.cpp:2353 -msgid "The server reports KMess is flooding it with too many data" -msgstr "ęœåŠ”å™ØęŠ„å‘Šļ¼ŒKMesså‘é€ēš„ę•°ę®å¤Ŗå¤šäŗ†ļ¼Œé€ ęˆę³›ę»„" - -#: network/msnnotificationconnection.cpp:2358 -#, fuzzy -msgid "Authentication ticket was incorrect" -msgstr "验证失蓄" - -#: network/msnnotificationconnection.cpp:2362 -msgid "You can't start a chat with someone while you are invisible." -msgstr "ę‚Øäøčƒ½åœØéščŗ«ēš„ēŠ¶ę€äø‹čæ›č”ŒčŠå¤©ć€‚" - -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." -msgstr "ä½ ēš„passportę˜Æå„æē«„åž‹ēš„ļ¼ŒčŠå¤©ę—¶éœ€č¦ēˆ¶ęÆēš„åŒę„ć€‚" - -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." -msgstr "ä½ ēš„passportéœ€č¦å…ˆéŖŒčÆć€‚" - -#: network/msnnotificationconnection.cpp:2373 -msgid "Bad USR ticket" -msgstr "" - -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" -msgstr "KMess - MSN 错误" - -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" -msgstr "ęœåŠ”å™Øå†…éƒØé”™čÆÆ" - -#: network/msnnotificationconnection.cpp:2414 -msgid "The server is too busy" -msgstr "ęœåŠ”å™Øē¹åæ™" - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "ęœåŠ”å™ØäøåÆē”Ø" - -#: network/msnnotificationconnection.cpp:2422 -msgid "Peer notification server down" -msgstr "ē‚¹åÆ¹ē‚¹ęœåŠ”å™Øå·²å…³é—­" - -#: network/msnnotificationconnection.cpp:2426 -msgid "The server is going down" -msgstr "ęœåŠ”å™Øå³å°†å…³é—­" - -#: network/msnnotificationconnection.cpp:2429 -msgid "The server is going down soon" -msgstr "ęœåŠ”å™Øé©¬äøŠå°±č¦å…³é—­" - -#: network/msnnotificationconnection.cpp:2433 -msgid "Write is blocking" -msgstr "ē¦ę­¢å†™ę“ä½œ" - -#: network/msnnotificationconnection.cpp:2436 -msgid "Session is overloaded" -msgstr "ä¼ščÆč¶…č½½" - -#: network/msnnotificationconnection.cpp:2441 -msgid "The server is not available" -msgstr "ęœåŠ”å™ØäøåÆē”Ø" - -#: network/msnnotificationconnection.cpp:2444 -msgid "Authentication failed" -msgstr "验证失蓄" - -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" -msgstr "äøęŽ„å—ę–°ēš„č§„åˆ™" - -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" -msgstr "KMessä»ŽęœåŠ”å™Øę”¶åˆ°äŗ†ęœŖēŸ„é”™čÆÆäæ”ęÆļ¼š%1" - -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "č­¦å‘Šļ¼šęœåŠ”å™Ø1åˆ†é’ŸåŽå› ē»“ęŠ¤č€Œå…³é—­ļ¼" - -#: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." -msgstr "MSNęœåŠ”å™ØęŠ„å‘Šļ¼Œå®ƒ1åˆ†é’ŸåŽå°†ä¼šå…³é—­čæ›č”Œē»“ęŠ¤ć€‚" - -#: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" -msgstr "č­¦å‘Šļ¼šęœåŠ”å™Ø%1åˆ†é’ŸåŽå› ē»“ęŠ¤č€Œå…³é—­ļ¼" - -#: network/msnnotificationconnection.cpp:2900 -msgid "Lost reference to SOAP client" -msgstr "" - -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" -msgstr "" -"KMessäøčƒ½å¤„ē†ē¦»ēŗæę¶ˆęÆć€‚\n" -"\n" -"ē»†čŠ‚ļ¼š%1" - -#: network/msnnotificationconnection.cpp:3209 -msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" -msgstr "" -"éŖŒčÆå¤±č“„ć€‚KMessę— ę³•å†ę¬”ē™»å½•čæ™äøŖpassport怂\n" -"\n" -"ē»†čŠ‚ļ¼š%1" - -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" +msgid "KMess could not access the remote webservice.
Details: %1" msgstr "" "KMessę— ę³•č®æé—®čæœēØ‹webęœåŠ”ć€‚\n" "\n" "ē»†čŠ‚ļ¼š%1" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnnotificationconnection.cpp:1317 +#, fuzzy +msgid "" +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" +msgstr "" +"ę‚Øå·²ē»å¤±åŽ»čæžęŽ„ļ¼Œå› äøŗę‚Øä½æē”Øäŗ†å¦äø€äøŖMSN Messengerå®¢ęˆ·ē«ÆēØ‹åŗęˆ–åœØå¦äø€äøŖåœ°ę–¹ē™»å½•ć€‚" + +#: network/msnnotificationconnection.cpp:1532 +msgid "Got synchronization" +msgstr "已同歄" + +#: network/msnnotificationconnection.cpp:1670 +#, fuzzy +msgid "Authenticating..." +msgstr "正在验证" + +#: network/msnnotificationconnection.cpp:1719 +msgid "Waiting for contact list..." +msgstr "ē­‰å¾…č”ē³»äŗŗåˆ—č”Øā€¦ā€¦" + +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." +msgstr "" + +#: network/msnnotificationconnection.cpp:1894 +#, fuzzy +msgid "Authentication failed, please verify your account name and password." +msgstr "éŖŒčÆå¤±č“„ļ¼ŒčÆ·ę£€ęŸ„ä½ ēš„ē”Øęˆ·åå’ŒåÆ†ē ć€‚" + +#: network/msnnotificationconnection.cpp:1993 +msgid "Connecting..." +msgstr "ę­£åœØčæžęŽ„ā€¦ā€¦" + +#: network/msnnotificationconnection.cpp:2167 +#, fuzzy +msgid "Unknown command received from the server: %1" +msgstr "KMessä»ŽęœåŠ”å™ØęŽ„åˆ°äŗ†äø€äøŖęœŖēŸ„å‘½ä»¤ļ¼š%1" + +#: network/msnnotificationconnection.cpp:2192 +msgid "Invalid command syntax" +msgstr "" + +#: network/msnnotificationconnection.cpp:2196 +msgid "Invalid command parameter" +msgstr "" + +#: network/msnnotificationconnection.cpp:2199 +msgid "The email you have tried to add is not a MSN Messenger account" +msgstr "ä½ čÆ•å›¾ę·»åŠ ēš„emailåœ°å€äøę˜ÆMSN Messengeråøå·" + +#: network/msnnotificationconnection.cpp:2204 +msgid "Domain name missing" +msgstr "" + +#: network/msnnotificationconnection.cpp:2208 +msgid "Already logged in" +msgstr "" + +#: network/msnnotificationconnection.cpp:2211 +msgid "The account name given is invalid" +msgstr "ē”Øęˆ·åę— ę•ˆ" + +#: network/msnnotificationconnection.cpp:2215 +msgid "" +"That account name is invalid, or your passport has not been confirmed yet" +msgstr "åøå·ę— ę•ˆļ¼Œęˆ–č€…ä½ ēš„passportčæ˜ę²”ęœ‰ē”®č®¤ć€‚" + +#: network/msnnotificationconnection.cpp:2218 +msgid "Your contact list is full" +msgstr "ę‚Øēš„č”ē³»äŗŗåˆ—č”Øå·²ę»”" + +#: network/msnnotificationconnection.cpp:2223 +msgid "Invalid SBP parameter" +msgstr "" + +#: network/msnnotificationconnection.cpp:2226 +msgid "This contact is already on your list" +msgstr "čæ™äøŖč”ē³»äŗŗå·²ē»åœØę‚Øēš„åˆ—č”Øäø­" + +#: network/msnnotificationconnection.cpp:2230 +msgid "This contact is not on your list" +msgstr "čæ™äøŖč”ē³»äŗŗäøåœØę‚Øēš„åˆ—č”Øäø­" + +#: network/msnnotificationconnection.cpp:2234 +msgid "This contact is not online" +msgstr "联系人离线" + +#: network/msnnotificationconnection.cpp:2239 +msgid "Already in this mode" +msgstr "" + +#: network/msnnotificationconnection.cpp:2243 +#, fuzzy +msgid "Contact is in the opposite list" +msgstr "čæ™äøŖč”ē³»äŗŗäøåœØę‚Øēš„åˆ—č”Øäø­" + +#: network/msnnotificationconnection.cpp:2247 +#, fuzzy +msgid "" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." +msgstr "åœØä½ ēš„MSN Messengerꈖ者Hotmailč”ē³»äŗŗåˆ—č”Øäø­å·²ē»ä½æē”Øäŗ†čæ™äøŖē»„å" + +#: network/msnnotificationconnection.cpp:2251 +msgid "Your contact list has too many groups" +msgstr "ę‚Øēš„č”ē³»äŗŗåˆ—č”Øäø­åˆ†ē»„å¤Ŗå¤šäŗ†" + +#: network/msnnotificationconnection.cpp:2255 +msgid "This group can't be changed" +msgstr "čæ™äøŖē»„äøčƒ½č¢«ę”¹å˜ć€‚" + +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "ę‚Øēš„č”ē³»äŗŗåˆ—č”Øäø­åˆ†ē»„å¤Ŗå¤šäŗ†" + +#: network/msnnotificationconnection.cpp:2264 +msgid "This group is not empty" +msgstr "ē»„éžē©ŗ" + +#: network/msnnotificationconnection.cpp:2268 +msgid "The group name is too long" +msgstr "ē»„åčæ‡é•æ" + +#: network/msnnotificationconnection.cpp:2273 +msgid "Attempted to change group \"0\"" +msgstr "" + +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +msgid "There was an internal error in KMess: %1" +msgstr "KMesså†…éƒØé”™čÆÆ: %1" + +#: network/msnnotificationconnection.cpp:2277 +#, fuzzy +msgid "Invalid Group" +msgstr "é‡å‘½åē»„(&n)" + +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 +msgid "Switchboard server failed" +msgstr "åˆ‡ę¢ęæęœåŠ”å™Øå¤±č“„ć€‚" + +#: network/msnnotificationconnection.cpp:2287 +msgid "Transfer to switchboard server failed" +msgstr "åˆ°åˆ‡ę¢ęæęœåŠ”å™Øēš„ę–‡ä»¶ä¼ é€å¤±č“„" + +#: network/msnnotificationconnection.cpp:2291 +msgid "Direct connection (MSNSLP) error, connection failed" +msgstr "ē›“ęŽ„čæžęŽ„(MSNSLP)é”™čÆÆļ¼ŒčæžęŽ„å¤±č“„" + +#: network/msnnotificationconnection.cpp:2295 +msgid "Required field missing" +msgstr "" + +#: network/msnnotificationconnection.cpp:2299 +msgid "Not logged in" +msgstr "" + +#: network/msnnotificationconnection.cpp:2302 +#, fuzzy +msgid "No permissions given for this account" +msgstr "čæ™äøŖåøå·ēš„č‡Ŗå®šä¹‰å›¾é‡Šļ¼š" + +#: network/msnnotificationconnection.cpp:2307 +msgid "Command is disabled" +msgstr "" + +#: network/msnnotificationconnection.cpp:2310 +msgid "Your account is banned." +msgstr "ę‚Øēš„č“¦ęˆ·č¢«åœē”Øć€‚" + +#: network/msnnotificationconnection.cpp:2314 +#, fuzzy +msgid "Challenge response failed" +msgstr "传输失蓄。" + +#: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" +msgstr "" + +#: network/msnnotificationconnection.cpp:2323 +#, fuzzy +msgid "You are opening chat sessions too fast" +msgstr "ä½ å¼€åÆä¼ščÆå¤Ŗåæ«äŗ†" + +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" +msgstr "ä½ å·²å¼€åÆēš„ä¼ščÆå¤Ŗå¤šäŗ†" + +#: network/msnnotificationconnection.cpp:2334 +msgid "Unexpected command sequence" +msgstr "" + +#: network/msnnotificationconnection.cpp:2338 +msgid "Bad friend name" +msgstr "é”™čÆÆēš„č”ē³»äŗŗåå­—" + +#: network/msnnotificationconnection.cpp:2344 +msgid "Bad CVR data" +msgstr "" + +#: network/msnnotificationconnection.cpp:2350 +msgid "The server reports KMess is flooding it with too many data" +msgstr "ęœåŠ”å™ØęŠ„å‘Šļ¼ŒKMesså‘é€ēš„ę•°ę®å¤Ŗå¤šäŗ†ļ¼Œé€ ęˆę³›ę»„" + +#: network/msnnotificationconnection.cpp:2357 +#, fuzzy +msgid "Authentication ticket was incorrect" +msgstr "验证失蓄" + +#: network/msnnotificationconnection.cpp:2360 +msgid "You can't start a chat with someone while you are invisible." +msgstr "ę‚Øäøčƒ½åœØéščŗ«ēš„ēŠ¶ę€äø‹čæ›č”ŒčŠå¤©ć€‚" + +#: network/msnnotificationconnection.cpp:2364 +#, fuzzy +msgid "Not accepting new contacts" +msgstr "äøęŽ„å—ę–°ēš„č§„åˆ™" + +#: network/msnnotificationconnection.cpp:2368 +#, fuzzy +msgid "" +"You have a kids passport account, you need parental consent to chat online." +msgstr "ä½ ēš„passportę˜Æå„æē«„åž‹ēš„ļ¼ŒčŠå¤©ę—¶éœ€č¦ēˆ¶ęÆēš„åŒę„ć€‚" + +#: network/msnnotificationconnection.cpp:2371 +#, fuzzy +msgid "Your passport account needs to be verified first." +msgstr "ä½ ēš„passportéœ€č¦å…ˆéŖŒčÆć€‚" + +#: network/msnnotificationconnection.cpp:2375 +msgid "Bad USR ticket" +msgstr "" + +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" +msgstr "č®æé—®č”ē³»äŗŗåˆ—č”Øę—¶å‘ē”Ÿé”™čÆÆļ¼ŒēØåŽå†čÆ•" + +#: network/msnnotificationconnection.cpp:2399 +#, fuzzy +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." +msgstr "ęœåŠ”å™Øå†…éƒØé”™čÆÆ" + +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + +#: network/msnnotificationconnection.cpp:2414 +msgid "Peer notification server down" +msgstr "ē‚¹åÆ¹ē‚¹ęœåŠ”å™Øå·²å…³é—­" + +#: network/msnnotificationconnection.cpp:2418 +msgid "The server is going down" +msgstr "ęœåŠ”å™Øå³å°†å…³é—­" + +#: network/msnnotificationconnection.cpp:2422 +msgid "The server is going down soon" +msgstr "ęœåŠ”å™Øé©¬äøŠå°±č¦å…³é—­" + +#: network/msnnotificationconnection.cpp:2427 +msgid "Write is blocking" +msgstr "ē¦ę­¢å†™ę“ä½œ" + +#: network/msnnotificationconnection.cpp:2431 +msgid "Session is overloaded" +msgstr "ä¼ščÆč¶…č½½" + +#: network/msnnotificationconnection.cpp:2438 +msgid "The server is not available" +msgstr "ęœåŠ”å™ØäøåÆē”Ø" + +#: network/msnnotificationconnection.cpp:2442 +msgid "Authentication failed" +msgstr "验证失蓄" + +#: network/msnnotificationconnection.cpp:2449 +#, fuzzy +msgid "Unknown error code received from the server: %1" +msgstr "KMessä»ŽęœåŠ”å™ØęŽ„åˆ°äŗ†äø€äøŖęœŖēŸ„å‘½ä»¤ļ¼š%1" + +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +#, fuzzy +msgctxt "Error dialog box title" +msgid "MSN error" +msgstr "KMess - MSN 错误" + +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "分钟后" + +#: network/msnnotificationconnection.cpp:2599 +#, fuzzy +msgid "Server closes for maintenance in %1!" +msgstr "č­¦å‘Šļ¼šęœåŠ”å™Ø%1åˆ†é’ŸåŽå› ē»“ęŠ¤č€Œå…³é—­ļ¼" + +#: network/msnnotificationconnection.cpp:2604 +#, fuzzy +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." +msgstr "MSNęœåŠ”å™ØęŠ„å‘Šļ¼Œå®ƒ1åˆ†é’ŸåŽå°†ä¼šå…³é—­čæ›č”Œē»“ęŠ¤ć€‚" + +#: network/msnnotificationconnection.cpp:2901 +msgid "Lost reference to SOAP client" +msgstr "" + +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +#, fuzzy +msgid "KMess could not process Offline-IM messages.
Details: %1" +msgstr "" +"KMessäøčƒ½å¤„ē†ē¦»ēŗæę¶ˆęÆć€‚\n" +"\n" +"ē»†čŠ‚ļ¼š%1" + +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "验证失蓄" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "KMesså†…éƒØé”™čÆÆ: %1" + +#: network/msnnotificationconnection.cpp:3242 +#, fuzzy +msgctxt "Login error message, with more details for developer versions" +msgid "" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" +msgstr "" +"KMess ę— ę³•čæžęŽ„åˆ° MSN Messenger ęœåŠ”å™Øć€‚MSN MessengeręœåŠ”å™ØåÆčƒ½ęš‚ę—¶ę— ę³•å·„ä½œęˆ–" +"č€…ä½ ēš„ē½‘ē»œčæžęŽ„ęœ‰é—®é¢˜ć€‚" + +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "åˆ°ęœåŠ”å™Øēš„čæžęŽ„äø¢å¤±ć€‚" + +#: network/msnnotificationconnection.cpp:3302 +#, fuzzy +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" +msgstr "" +"éŖŒčÆå¤±č“„ć€‚KMessę— ę³•å†ę¬”ē™»å½•čæ™äøŖpassport怂\n" +"\n" +"ē»†čŠ‚ļ¼š%1" + +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "ęœåŠ”å™Øé”™čÆÆ" + +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "čæžęŽ„č¶…ę—¶" + +#: network/msnsockettcp.cpp:368 +msgid "1 ping lost" +msgstr "丢失了1äøŖ ping ę•°ę®åŒ…" + +#: network/msnsockettcp.cpp:372 +msgid "%1 pings lost" +msgstr "丢失了%1äøŖ ping ę•°ę®åŒ…" + +#: network/msnsockettcp.cpp:387 +msgid "The connection to the server was lost." +msgstr "åˆ°ęœåŠ”å™Øēš„čæžęŽ„äø¢å¤±ć€‚" + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "ę­¤äŗŗå·²ē»äø‹ēŗæęˆ–éščŗ«ć€‚" -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "č”ē³»äŗŗåÆåŠØäŗ†äø€é”¹KMessäøčƒ½å¤„ē†ēš„MSN7åŠŸčƒ½ć€‚" -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 msgid "The message \"%1\" was not received!" msgstr "消息\"%1\"ę²”ęœ‰ę”¶åˆ°ļ¼" -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "ę— ę³•å»ŗē«‹čæžęŽ„: %1" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "ē™»å½•ęœåŠ”å™Øēš„é‡å®šå‘čæ‡å¤š" -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +#, fuzzy +msgid "In %1's chat: %2" msgstr "在%1ēš„čŠå¤©äø­: %2" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +#, fuzzy +msgid "%1 says:
'%2'" msgstr "%1 诓:
'%2'" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" +#: notification/chatnotification.cpp:171 +#, fuzzy +msgid "%1 has sent you an offline message:
'%2'" msgstr "%1ē»™ä½ å‘é€äŗ†ē¦»ēŗæę¶ˆęÆ:
'%2'" -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" +#: notification/chatnotification.cpp:178 +#, fuzzy +msgid "%1's chat requests attention!" msgstr "%1ēš„čŠå¤©čÆ·ę±‚ę³Øę„ļ¼" -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" +#: notification/chatnotification.cpp:183 +#, fuzzy +msgid "%1:
%2" msgstr "%1:
%2" -#: notification/notificationchat.cpp:200 +#: notification/chatnotification.cpp:190 #, fuzzy -msgid "%1 has sent you a handwritten message!" +msgid "%1 has sent you a handwritten message!" +msgstr "%1ē»™ä½ å‘é€äŗ†ē¦»ēŗæę¶ˆęÆ:
'%2'" + +#: notification/chatnotification.cpp:194 +#, fuzzy +msgid "%1 has sent you a nudge!" msgstr "%1ē»™ę‚Øå‘é€äŗ†é—Ŗå±ęŒÆåŠØļ¼" -#: notification/notificationchat.cpp:204 -msgid "%1 has sent you a nudge!" -msgstr "%1ē»™ę‚Øå‘é€äŗ†é—Ŗå±ęŒÆåŠØļ¼" - -#: notification/notificationchat.cpp:208 -msgid "%1 has sent you a wink!" +#: notification/chatnotification.cpp:198 +#, fuzzy +msgid "%1 has sent you a wink!" msgstr "%1ē»™ę‚Øå‘é€äŗ†ä¼ ęƒ…åŠØę¼«ļ¼" -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" +#: notification/chatnotification.cpp:204 +#, fuzzy +msgid "%1 wants to use the webcam!" msgstr "%1ęƒ³ä½æē”Øę‘„åƒå¤“ļ¼" -#: notification/notificationchat.cpp:215 -msgid "%1 is sending you a file!" +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" msgstr "%1ē»™ę‚Øå‘é€äŗ†ę–‡ä»¶ļ¼" -#: notification/notificationchat.cpp:216 -msgid "%1 has sent you an invitation!" +#: notification/chatnotification.cpp:206 +#, fuzzy +msgid "%1 has sent you an invitation!" msgstr "%1ē»™ę‚Øå‘é€äŗ†é‚€čÆ·ļ¼" -#: notification/notificationchat.cpp:223 -msgid "%1 has canceled the webcam session!" +#: notification/chatnotification.cpp:213 +#, fuzzy +msgid "%1 has canceled the webcam session!" msgstr "%1å–ę¶ˆäŗ†ę‘„åƒå¤“é‚€čÆ·ļ¼" -#: notification/notificationchat.cpp:224 -msgid "%1 has canceled the file transfer!" +#: notification/chatnotification.cpp:214 +#, fuzzy +msgid "%1 has canceled the file transfer!" msgstr "%1å–ę¶ˆäŗ†ę–‡ä»¶ä¼ é€ļ¼" -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +#, fuzzy +msgid "%1's activity has been canceled!" msgstr "%1ēš„ę“»åŠØå·²č¢«å–ę¶ˆļ¼" -#: notification/notificationchat.cpp:232 -msgid "%1 has accepted to use the webcam!" +#: notification/chatnotification.cpp:222 +#, fuzzy +msgid "%1 has accepted to use the webcam!" msgstr "%1åŒę„äŗ†ä½æē”Øę‘„åƒå¤“ļ¼" -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" +#: notification/chatnotification.cpp:223 +#, fuzzy +msgid "%1 has accepted the file transfer!" msgstr "%1ęŽ„å—äŗ†ę–‡ä»¶ä¼ é€ļ¼" -#: notification/notificationchat.cpp:234 -msgid "%1 has accepted your invitation!" +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" msgstr "%1ęŽ„å—äŗ†ä½ ēš„é‚€čÆ·ļ¼" -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" +#: notification/chatnotification.cpp:231 +#, fuzzy +msgid "%1 has ended the webcam session!" msgstr "%1ē»“ęŸäŗ†ę‘„åƒå¤“é‚€čÆ·ļ¼" -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "和%1ēš„ę–‡ä»¶ä¼ č¾“å®Œęˆļ¼" -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" +#: notification/chatnotification.cpp:233 +#, fuzzy +msgid "%1's activity has ended!" msgstr "%1ēš„ę“»åŠØå·²ē»ē»“ęŸļ¼" -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" +#: notification/chatnotification.cpp:240 +#, fuzzy +msgid "%1's webcam session has failed!" msgstr "%1ēš„č§†é¢‘ä¼ščÆå¤±č“„ļ¼" -#: notification/notificationchat.cpp:251 -msgid "The file transfer with %1 has failed!" +#: notification/chatnotification.cpp:241 +#, fuzzy +msgid "The file transfer with %1 has failed!" msgstr "和%1ēš„ę–‡ä»¶ä¼ é€å¤±č“„ļ¼" -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:242 +#, fuzzy +msgid "%1's activity has ended with an error!" msgstr "%1ēš„ę“»åŠØå› ęœ‰é”™čÆÆč€Œē»“ęŸļ¼" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -msgid "%1 is now online" +#: notification/contactstatusnotification.cpp:70 +#, fuzzy +msgid "%1 is now online" msgstr "%1ēŽ°åœØč”ęœŗäŗ†" -#: notification/notificationcontactstatus.cpp:76 -msgid "%1 has gone away" +#: notification/contactstatusnotification.cpp:71 +#, fuzzy +msgid "%1 has gone away" msgstr "%1čµ°äŗ†" -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/contactstatusnotification.cpp:72 +#, fuzzy +msgid "%1 will be right back" msgstr "%1é©¬äøŠå›žę„" -#: notification/notificationcontactstatus.cpp:78 -msgid "%1 is now busy" +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" msgstr "%1繁忙" -#: notification/notificationcontactstatus.cpp:79 -msgid "%1 has become invisible" +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" msgstr "%1č„±ęœŗäŗ†" -#: notification/notificationcontactstatus.cpp:80 -msgid "%1 has gone idle" +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" msgstr "%1å‘čµ·äŗ†å‘†" -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/contactstatusnotification.cpp:76 +#, fuzzy +msgid "%1 has logged out" msgstr "%1已登出" -#: notification/notificationcontactstatus.cpp:82 -msgid "%1 is on the phone" +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" msgstr "%1åœØē”µčÆäøŠ " -#: notification/notificationcontactstatus.cpp:83 -msgid "%1 is out for lunch" +#: notification/contactstatusnotification.cpp:78 +#, fuzzy +msgid "%1 is out for lunch" msgstr "%1å‡ŗåŽ»åƒé„­äŗ†" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/newemailnotification.cpp:78 +#, fuzzy +msgid "New email:
'%1'
by '%2'" msgstr "新电子邮件:
ę„č‡Ŗ'%2'ēš„
%1" -#: settings/accountswidget.cpp:81 +#: settings/accountpage.cpp:69 msgid "Browse..." msgstr "" -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +#, fuzzy +msgid "Browse and crop picture..." msgstr "ęµč§ˆå¹¶č£å‰Ŗå›¾ē‰‡ā€¦ā€¦" -#: settings/accountswidget.cpp:404 -msgid "Display Picture" -msgstr "夓像" +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" +#: settings/accountpage.cpp:448 +#, fuzzy +msgid "Downloading of display picture failed" msgstr "äø‹č½½ę˜¾ē¤ŗå›¾åƒå¤±č“„" -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 +#, fuzzy msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" "čÆ•å›¾ę”¹å˜å¤“åƒę—¶å‘ē”Ÿäŗ†é”™čÆÆć€‚\n" "ē”®å®šä½ é€‰ę‹©äŗ†ę­£ē”®ēš„å›¾åƒę–‡ä»¶" -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "Hi, ä½ ęœ€čæ‘ę€Žä¹ˆę ·ļ¼Ÿ :)" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "å°é±¼å„æ" - -#: settings/chatstylepage.cpp:317 -msgid "Great!" -msgstr "太棒了!" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "ꈑ /刚刚/ ä»Žę„å¤§åˆ©åŗ¦å‡å›žę„ļ¼" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 #, fuzzy msgid "&Delete" msgstr "åˆ é™¤č”ē³»äŗŗ(&D)" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "设置" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 msgid "Account" msgstr "åøå·" -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 #, fuzzy msgid "My Account" msgstr "åøå·" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "ꏐ醒" -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 #, fuzzy msgid "Alerts and Notifications" msgstr "KMess é€šēŸ„" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "聊天" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "čŠå¤©č®°å½•" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +#, fuzzy +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "ä½ č¾“å…„ēš„č”ē³»äŗŗåœ°å€äøę­£ē”®ļ¼š'%1'" + +#: settings/accountsettingsdialog.cpp:201 +#, fuzzy +msgid "The email address you have entered is already in use: '%1'" +msgstr "ä½ č¾“å…„ēš„č”ē³»äŗŗåœ°å€äøę­£ē”®ļ¼š'%1'" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "ę‚Øē”®å®šč¦åˆ é™¤čæ™äøŖåøå·å—ļ¼Ÿ" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "ę‚Øē”®å®šč¦åˆ é™¤čæ™äøŖåøå·å—ļ¼Ÿ" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "Hi, ä½ ęœ€čæ‘ę€Žä¹ˆę ·ļ¼Ÿ :)" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "å°é±¼å„æ" + +#: settings/chatstylepage.cpp:341 +msgid "Great!" +msgstr "太棒了!" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "ꈑ /刚刚/ ä»Žę„å¤§åˆ©åŗ¦å‡å›žę„ļ¼" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "设置" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +msgid "Accounts" +msgstr "åøå·" + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "KMess é€šēŸ„" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "åœØę­¤ē›®å½•äø­äæå­˜čŠå¤©č®°å½•ļ¼š" + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." msgstr "" "å…³é—­äø»ēŖ—å£åŽ KMess å°†åœØē³»ē»Ÿę‰˜ē›˜äø­ē»§ē»­čæč”Œć€‚åÆē”Øę–‡ä»¶čœå•äø­ēš„é€€å‡ŗę„é€€å‡ŗēØ‹åŗć€‚" -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "ä½æē”Øē³»ē»Ÿę‰˜ē›˜" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "
%1 (%2)" -#~ msgid "Add contact" -#~ msgstr "ę·»åŠ č”ē³»äŗŗ" +#: systemtraywidget.cpp:245 +#, fuzzy +msgid "- %1 (%2)" +msgstr "%1 %2" + +#~ msgid "Click to send an email to this contact." +#~ msgstr "ē‚¹å‡»čæ™é‡Œē»™čæ™äøŖč”ē³»äŗŗå‘é€ email" + +#~ msgid "Picture:" +#~ msgstr "å›¾ē‰‡ļ¼š" #, fuzzy -#~ msgid "KMess Notification" -#~ msgstr "é‚®ä»¶é€šēŸ„" +#~ msgid "Speed:" +#~ msgstr "ęœåŠ”å™Ø:" -#~ msgid "Accounts" -#~ msgstr "åøå·" +#, fuzzy +#~ msgid "Login Information" +#~ msgstr "显示email俔息" -#~ msgid "" -#~ msgstr "<åœØę­¤å¤„č¾“å…„ę‚Øēš„äøŖäŗŗäæ”ęÆ>" +#~ msgid "Logging in..." +#~ msgstr "ę­£åœØē™»å½•..." + +#~ msgid "" +#~ "Allows you to choose which e-mail program KMess should open to view e-" +#~ "mail messages." +#~ msgstr "允许你选择 KMess 使用哪一个 e-mail č½Æä»¶ę„ęŸ„ēœ‹ e-mail ę¶ˆęÆć€‚" + +#~ msgid "Use a specified command:" +#~ msgstr "ä½æē”ØęŒ‡å®šēš„å‘½ä»¤ļ¼š" + +#~ msgid "This account does not have an Hotmail inbox!" +#~ msgstr "čæ™äøŖåøęˆ·ę²”ęœ‰Hotmail收件箱!" + +#, fuzzy +#~ msgid "Email: " +#~ msgstr "电子邮件" + +#, fuzzy +#~ msgid "Client: " +#~ msgstr "客户端: %1" + +#~ msgid "Remove group" +#~ msgstr "åˆ é™¤ē»„(&m)" + +#~ msgid "Show &Display Pictures" +#~ msgstr "ę˜¾ē¤ŗå¤“åƒ(&D)" + +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr "ę‚Øēš„ę”¶ä»¶ē®±äø­ęœ‰1封新邮件。" + +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr "ę‚Øēš„ę”¶ä»¶ē®±äø­ęœ‰%1封新邮件。" + +#, fuzzy +#~ msgid "Guido Solinas" +#~ msgstr "上线(&G)" + +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "ę–‡ä»¶ä¼ é€å¤±č“„ļ¼Œę— ę³•ę‰“å¼€ę–‡ä»¶%1怂" #~ msgid "" #~ "_: NAME OF TRANSLATORS\n" @@ -3444,18 +4189,24 @@ msgstr "
%1 (%2)" #~ "Your emails" #~ msgstr "linhaoxiang@hotmail.com, chinatslsz@hotmail.com" -#~ msgid "Insert an emoticon" -#~ msgstr "ę’å…„å›¾é‡Š" - #~ msgid "Show/Hide &Contact Sidebar" #~ msgstr "显示/éšč—č”ē³»äŗŗä¾§ę (&C)" #~ msgid "Away - Idle" #~ msgstr "离开 - 空闲" +#~ msgid "chat-style-text" +#~ msgstr "čŠå¤©ę ·å¼ę–‡å­—" + #~ msgid "The e-mail address given was invalid!" #~ msgstr "ę­¤e-mailåœ°å€ę— ę•ˆļ¼" +#~ msgid "Current name: " +#~ msgstr "å½“å‰å§“åļ¼š" + +#~ msgid "" +#~ msgstr "<åœØę­¤å¤„č¾“å…„ę‚Øēš„äøŖäŗŗäæ”ęÆ>" + #~ msgid "(Away)" #~ msgstr "(离开)" @@ -3477,22 +4228,81 @@ msgstr "
%1 (%2)" #~ msgid "(On the Phone)" #~ msgstr "(ęŽ„å¬ē”µčÆ)" -#~ msgid "Connection timeout" -#~ msgstr "čæžęŽ„č¶…ę—¶" +#~ msgid "" +#~ "KMess could not connect to the MSN Messenger service.\n" +#~ "Please, be sure to be connected to the internet.\n" +#~ "System error: %1 (code %2)." +#~ msgstr "" +#~ "KMess ę— ę³•čæžęŽ„åˆ° MSN Messenger ęœåŠ”å™Øć€‚\n" +#~ "čÆ·ē”®č®¤čæžęŽ„åˆ°äŗ†å› ē‰¹ē½‘ć€‚\n" +#~ "ē³»ē»Ÿé”™čÆÆļ¼š%1 (代码 %2)怂" + +#~ msgid "The remote server has closed the connection." +#~ msgstr "čæœēØ‹ē”Øęˆ·å…³é—­äŗ†čæžęŽ„ć€‚" + +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr "显示 MSN Messenger ęœåŠ”ēŠ¶ę€ļ¼Ÿ" + +#~ msgid "Received user confirmation" +#~ msgstr "čŽ·å¾—ē”Øęˆ·ē”®č®¤" + +#~ msgid "Transfer to notification server" +#~ msgstr "äøŽé€šēŸ„ęœåŠ”å™Øčæ›č”Œä¼ č¾“" + +#~ msgid "The server is too busy" +#~ msgstr "ęœåŠ”å™Øē¹åæ™" + +#~ msgid "The server is unavailable" +#~ msgstr "ęœåŠ”å™ØäøåÆē”Ø" + +#~ msgid "KMess received an unknown error message from the server: %1" +#~ msgstr "KMessä»ŽęœåŠ”å™Øę”¶åˆ°äŗ†ęœŖēŸ„é”™čÆÆäæ”ęÆļ¼š%1" + +#~ msgid "Warning: Server closes for maintenance in 1 minute!" +#~ msgstr "č­¦å‘Šļ¼šęœåŠ”å™Ø1åˆ†é’ŸåŽå› ē»“ęŠ¤č€Œå…³é—­ļ¼" + +#~ msgid "The contact is listening to music" +#~ msgstr "čæ™äøŖč”ē³»äŗŗåœØå¬éŸ³ä¹" + +#~ msgid "Add contact" +#~ msgstr "ę·»åŠ č”ē³»äŗŗ" + +#~ msgid "Your friendly name:" +#~ msgstr "ę‚Øēš„ę˜µē§°ļ¼š" + +#~ msgid "Your password:" +#~ msgstr "ę‚Øēš„åÆ†ē ļ¼š" + +#~ msgid "Display picture:" +#~ msgstr "å¤“åƒļ¼š" + +#~ msgid "Don't show a displa&y picture" +#~ msgstr "ē¦ę­¢ę˜¾ē¤ŗå¤“åƒ(&y)" + +#~ msgid "Status to set at login:" +#~ msgstr "ē™»å½•ę—¶ēš„ēŠ¶ę€ļ¼š" + +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "å½“ęŽ„åˆ°ē”µå­é‚®ä»¶ę—¶é€šēŸ„ęˆ‘" + +#~ msgid "Organize chat folders by:" +#~ msgstr "ęŒ‰ę—„ęœŸåœØäøåŒå­ē›®å½•äø­äæå­˜čŠå¤©č®°å½•ļ¼š" + +#~ msgid "&Show graphics in chat messages" +#~ msgstr "åœØčŠå¤©äæ”ęÆäø­ę˜¾ē¤ŗå›¾ē‰‡(&S)" + +#~ msgid "Use Hotmail" +#~ msgstr "使用Hotmail" + +#~ msgid "Email Notification" +#~ msgstr "é‚®ä»¶é€šēŸ„" + +#~ msgid "says:" +#~ msgstr "诓:" #~ msgid "The current status of your contact." #~ msgstr "č”ē³»äŗŗå½“å‰ēŠ¶ę€" -#~ msgid "Connect" -#~ msgstr "登录" - -#~ msgid "Listening to %1" -#~ msgstr "ę­£åœØę”¶å¬ %1" - -#, fuzzy -#~ msgid "The contact is listening to music" -#~ msgstr "čæ™äøŖč”ē³»äŗŗäøåœØę‚Øēš„åˆ—č”Øäø­" - #~ msgid "File transfer dialog message" #~ msgstr "ę–‡ä»¶ä¼ é€ę¶ˆęÆ" @@ -3513,9 +4323,6 @@ msgstr "
%1 (%2)" #~ msgid "Port:" #~ msgstr "ē«Æå£:" -#~ msgid "Type:" -#~ msgstr "ē±»åž‹:" - #~ msgid "User ID:" #~ msgstr "ē”Øęˆ·å:" @@ -3528,12 +4335,6 @@ msgstr "
%1 (%2)" #~ msgid "SOCKS5 Proxy" #~ msgstr "SOCKS5 代理" -#~ msgid "Password:" -#~ msgstr "密码:" - -#~ msgid "Server:" -#~ msgstr "ęœåŠ”å™Ø:" - #~ msgid "Add this emoticon" #~ msgstr "ę·»åŠ čæ™äøŖå›¾é‡Š" diff --git a/po/zh_TW.po b/po/zh_TW.po index edeef53..b9390a3 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: zh_TW\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2008-04-12 00:21+0200\n" +"POT-Creation-Date: 2008-08-10 12:41+0200\n" "PO-Revision-Date: 2008-02-06 18:57+0800\n" "Last-Translator: Yenchou Chen\n" "Language-Team: \n" @@ -18,45 +18,38 @@ msgstr "" "X-Generator: KBabel 1.11.4\n" #. i18n: tag string -#. i18n: file ./autologinviewinterface.ui line 93 +#. i18n: file ./chat/chatview.ui line 189 #: rc.cpp:3 -msgid "Logging in..." -msgstr "登兄中..." - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 93 -#: rc.cpp:6 -msgid "S&end" -msgstr "傳送(&e)" - -#. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 115 -#: rc.cpp:12 msgid "Ne&w Line" msgstr "ę–°äø€č”Œ(&w)" #. i18n: tag string -#. i18n: file ./chat/chatviewinterface.ui line 202 -#: rc.cpp:18 -#, fuzzy -msgid "Sidebar" -msgstr "偓邊列" +#. i18n: file ./chat/chatview.ui line 205 +#: rc.cpp:9 +msgid "S&end" +msgstr "傳送(&e)" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 177 -#: rc.cpp:21 +#. i18n: file ./chat/chatwindow.ui line 117 +#: rc.cpp:15 +msgid "Contacts" +msgstr "聯絔人" + +#. i18n: tag string +#. i18n: file ./chat/contactframe.ui line 162 +#: rc.cpp:18 msgid "Click here to display this contact's profile." msgstr "ęŒ‰é€™č£”ä¾†é”Æē¤ŗé€£ēµ”äŗŗč³‡čØŠ" #. i18n: tag string -#. i18n: file ./chat/contactframeinterface.ui line 231 -#: rc.cpp:24 -msgid "Click to send an email to this contact." -msgstr "ęŒ‰é€™č£”ä¾†å‚³é€ email 給這個連絔人" +#. i18n: file ./chat/inkedit.ui line 104 +#: rc.cpp:21 +msgid "Size pen" +msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 19 -#: rc.cpp:27 +#. i18n: file ./dialogs/addcontactdialog.ui line 22 +#: rc.cpp:24 #, fuzzy msgid "" "Enter here the email address of the person you wish to add to your contact " @@ -64,41 +57,39 @@ msgid "" msgstr "č«‹č¼øå…„ę¬²åŠ å…„čÆēµ”äŗŗēš„é›»å­éƒµä»¶ļ¼š" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 22 -#. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 137 -#: rc.cpp:30 rc.cpp:77 +#. i18n: file ./dialogs/addcontactdialog.ui line 25 +#: rc.cpp:27 msgid "Email address" msgstr "電子郵件位址" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 32 -#: rc.cpp:33 +#. i18n: file ./dialogs/addcontactdialog.ui line 35 +#: rc.cpp:30 msgid "Optionally, you can choose the group where to place the new contact" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/addcontactdialoginterface.ui line 35 -#: rc.cpp:36 +#. i18n: file ./dialogs/addcontactdialog.ui line 38 +#: rc.cpp:33 #, fuzzy -msgid "New contact's group" -msgstr "ę–°å¢žčÆēµ”äŗŗ(&C)" +msgid "Initial group" +msgstr "é‡ę–°å‘½åę­¤ē¾¤ēµ„(&n)" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 96 -#: rc.cpp:39 +#. i18n: file ./dialogs/addemoticondialog.ui line 96 +#: rc.cpp:36 msgid "Enter a shortcut for this emoticon:" msgstr "ēµ¦é€™å€‹č”Øęƒ…č¼øå…„äø€å€‹åæ«ę·éµļ¼š" #. i18n: tag string -#. i18n: file ./dialogs/addemoticondialoginterface.ui line 113 -#: rc.cpp:42 +#. i18n: file ./dialogs/addemoticondialog.ui line 113 +#: rc.cpp:39 msgid "Select an image file:" msgstr "éøę“‡äø€å€‹å½±åƒęŖ”ę”ˆ" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 19 -#: rc.cpp:48 +#. i18n: file ./dialogs/awaymessagedialog.ui line 19 +#: rc.cpp:45 #, fuzzy msgid "" "Enter a message to be automatically sent to people who try to message you." @@ -107,124 +98,337 @@ msgstr "" "č®“å˜—č©¦å‚³čØŠęÆēµ¦ä½ ēš„äŗŗęœƒč¢«č‡Ŗå‹•å›žč¦†ļ¼š" #. i18n: tag string -#. i18n: file ./dialogs/awaymessagedialoginterface.ui line 22 -#: rc.cpp:51 +#. i18n: file ./dialogs/awaymessagedialog.ui line 22 +#: rc.cpp:48 #, fuzzy msgid "&Automatic away message" msgstr "ęŒ‡å®šäø€å€‹é›¢é–‹čØŠęÆ" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 17 -#: rc.cpp:55 -#, no-c-format -msgid "" -"%1\n" -"has added you to his or her contact list. Do you want to:" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 51 +#: rc.cpp:51 +msgid "What would you like to do" msgstr "" -"%1\n" -"å·²ē¶“å°‡ä½ åŠ å…„ 他/儹 ēš„čÆēµ”äŗŗęø…å–®ć€‚ä½ ęƒ³č¦ļ¼š" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 30 -#: rc.cpp:59 -msgid "&Add this contact to your \"Friends\" list" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 57 +#: rc.cpp:54 +#, fuzzy +msgid "&Add this person to my \"Friends\" list" msgstr "å°‡ę­¤åŠ å…„ä½ ēš„ęœ‹å‹ęø…å–®(&A)" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 37 -#: rc.cpp:62 -msgid "&Not add this contact, but let them see your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 67 +#: rc.cpp:57 +#, fuzzy +msgid "Do not add this person; only allow them to see my online state" msgstr "äøę–°åŠ ę­¤čÆēµ”äŗŗļ¼Œä½†ę˜Æč®“ä»–čƒ½ēœ‹č¦‹ä½ ēš„ē‹€ę…‹(&N)" #. i18n: tag string -#. i18n: file ./dialogs/contactaddeduserdialoginterface.ui line 44 -#: rc.cpp:65 -msgid "Block this person from contacting &you or seeing your online state" +#. i18n: file ./dialogs/contactaddeduserdialog.ui line 74 +#: rc.cpp:60 +#, fuzzy +msgid "&Block this person from contacting me or seeing my online state" msgstr "å°éŽ–ę­¤äŗŗļ¼Œä½æä»–äøčƒ½čÆēµ”ä½ ļ¼Œęˆ–ēž§č¦‹ä½ ēš„äøŠē·šē‹€ę…‹(&y)" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 152 -#: rc.cpp:68 +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 13 +#: rc.cpp:64 dialogs/contactpropertiesdialog.cpp:271 +#, no-c-format +msgid "Contact Properties for %1" +msgstr "%1 ēš„čÆēµ”äŗŗē‰¹ę€§" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 31 +#: rc.cpp:67 +msgid "&Information" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 72 +#: rc.cpp:70 +#, fuzzy +msgid "Restore" +msgstr "被移除" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 183 +#: rc.cpp:73 +msgid "" +"\n" +" \n" +"
\n" +"
\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::RichText\n" +" \n" +" \n" +" true\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Vertical\n" +" \n" +" \n" +" QSizePolicy::Minimum\n" +" \n" +" \n" +" \n" +" 250\n" +" 10\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Qt::Horizontal\n" +" \n" +" \n" +" QSizePolicy::Expanding\n" +" \n" +" \n" +" \n" +" 10\n" +" 20\n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" \n" +" Groups:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 184 +#: rc.cpp:139 +msgid "" +"Groups:\n" +" " +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 218 +#: rc.cpp:143 +#, fuzzy +msgid "Use alternative name for this person" +msgstr "å°ę­¤äŗŗä½æē”Øę›æä»£åēØ±" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 228 +#: rc.cpp:146 +#, fuzzy +msgid "Show a popup when the contact goes online/offline" +msgstr "ē•¶ä½æē”Øč€…äøŠē·šęˆ–é›¢ē·šę™‚ļ¼Œč·³å‡ŗę°£ēƒęē¤ŗ" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 237 +#: rc.cpp:149 +msgid "Sound:" +msgstr "éŸ³ę•ˆļ¼š" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 289 +#: rc.cpp:158 +msgid "I&mages" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 335 +#: rc.cpp:161 +#, fuzzy +msgid "&Clear Cache" +msgstr "清除標籤" + +#. i18n: tag string +#. i18n: file ./dialogs/contactpropertiesdialog.ui line 353 +#: rc.cpp:164 +#, fuzzy +msgid "Notes" +msgstr "音符" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 13 +#: rc.cpp:167 dialogs/networkwindow.cpp:58 dialogs/networkwindow.cpp:1221 +#: dialogs/networkwindow.cpp:1248 +msgid "Network Window" +msgstr "網絔視窗" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 25 +#: rc.cpp:170 +msgid "Command to Current Tab" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 37 +#: rc.cpp:173 +msgid "Command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 53 +#: rc.cpp:176 +msgid "Type:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 60 +#: rc.cpp:179 +#, fuzzy +msgid "Standard" +msgstr "星星" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 67 +#: rc.cpp:182 +msgid "MIME" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 93 +#: rc.cpp:185 +#, fuzzy +msgid "Send" +msgstr "傳送(&e)" + +#. i18n: tag string +#. i18n: file ./dialogs/networkwindow.ui line 132 +#: rc.cpp:188 +msgid "Command payload (can be empty):" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 111 +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 136 +#. i18n: tag string +#. i18n: file ./kmessview.ui line 394 +#: rc.cpp:191 rc.cpp:194 rc.cpp:239 +msgid "KSqueezedTextLabel" +msgstr "" + +#. i18n: tag string +#. i18n: file ./dialogs/transferentry.ui line 169 +#: rc.cpp:197 msgid "Open" msgstr "" #. i18n: tag string -#. i18n: file ./dialogs/transferentryinterface.ui line 171 -#: rc.cpp:71 +#. i18n: file ./dialogs/transferentry.ui line 188 +#: rc.cpp:200 #, fuzzy msgid "Cancel" msgstr "å–ę¶ˆ" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 111 -#: rc.cpp:74 -msgid "Enter your login information:" -msgstr "č«‹č¼øå…„ä½ ēš„ē™»å…„čØŠęÆļ¼š" +#. i18n: file ./dialogs/userpicturesdialog.ui line 16 +#: rc.cpp:203 +msgid "Form" +msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 154 -#: rc.cpp:80 -msgid "Password" +#. i18n: file ./initialview.ui line 144 +#: rc.cpp:206 +#, fuzzy +msgid "Email address:" +msgstr "é›»å­éƒµä»¶ļ¼š" + +#. i18n: tag string +#. i18n: file ./initialview.ui line 161 +#: rc.cpp:209 +#, fuzzy +msgid "Password:" msgstr "密碼" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 629 -#: rc.cpp:83 +#. i18n: file ./initialview.ui line 185 +#: rc.cpp:212 msgid "Status at login" msgstr "ē™»å…„ę™‚ēš„ē‹€ę…‹" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 657 -#: rc.cpp:86 +#. i18n: file ./initialview.ui line 213 +#: rc.cpp:215 msgid "More options..." msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 666 -#: rc.cpp:89 +#. i18n: file ./initialview.ui line 222 +#: rc.cpp:218 #, fuzzy msgid " Account options " msgstr "åø³č™ŸčØ­å®š(&S)" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1114 -#: rc.cpp:92 +#. i18n: file ./initialview.ui line 228 +#: rc.cpp:221 msgid "Remem&ber this profile" msgstr "čØ˜ä½é€™å€‹åø³č™Ÿ (&b)" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 1566 -#: rc.cpp:98 +#. i18n: file ./initialview.ui line 238 +#: rc.cpp:227 msgid "Also r&emember the password" msgstr "" #. i18n: tag string -#. i18n: file ./initialviewinterface.ui line 2058 -#: rc.cpp:104 kmessinterface.cpp:201 +#. i18n: file ./initialview.ui line 288 +#: rc.cpp:233 kmessinterface.cpp:210 msgid "&Connect" msgstr "é€£ē·š(&C)" #. i18n: tag string -#. i18n: file ./kmessviewinterface.ui line 165 -#: rc.cpp:107 +#. i18n: file ./kmessview.ui line 206 +#: rc.cpp:236 msgid "Enter your personal message here" msgstr "č«‹åœØę­¤č¼øå…„ä½ ēš„å€‹äŗŗčØŠęÆ" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 16 -#: rc.cpp:110 +#. i18n: file ./settings/accountpage.ui line 27 +#: rc.cpp:242 +#, fuzzy +msgid "Your Account Information" +msgstr "åø³č™ŸčØ­å®š(&S)" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 33 +#: rc.cpp:245 msgid "Enter the name other contacts should see when you're online." msgstr "č«‹č¼øå…„ē•¶ä½ äøŠē·šę™‚ēµ¦å…¶ä»–ä½æē”Øč€…ēœ‹ēš„åēØ±" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 19 -#: rc.cpp:113 -msgid "Your friendly name:" -msgstr "ä½ ēš„åēØ±" +#. i18n: file ./settings/accountpage.ui line 36 +#: rc.cpp:248 +#, fuzzy +msgid "&Friendly name:" +msgstr "昵稱" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 32 -#: rc.cpp:116 +#. i18n: file ./settings/accountpage.ui line 52 +#: rc.cpp:251 msgid "" "Enter the e-mail address of your MSN Passport account. You can register a " "new account at http://register.passport.com/" @@ -233,15 +437,15 @@ msgstr "" "åø³č™Ÿć€‚" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 35 -#: rc.cpp:119 +#. i18n: file ./settings/accountpage.ui line 55 +#: rc.cpp:254 #, fuzzy -msgid "Your email address:" +msgid "&Email address:" msgstr "é›»å­éƒµä»¶ļ¼š" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 48 -#: rc.cpp:122 +#. i18n: file ./settings/accountpage.ui line 71 +#: rc.cpp:257 msgid "" "Enter the password of your MSN Passport account. You can register a new " "account at http://register.passport.com/" @@ -250,39 +454,40 @@ msgstr "" "åø³č™Ÿć€‚" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 51 -#: rc.cpp:125 -msgid "Your password:" -msgstr "ä½ ēš„åÆ†ē¢¼" - -#. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 74 -#: rc.cpp:128 +#. i18n: file ./settings/accountpage.ui line 74 +#: rc.cpp:260 #, fuzzy -msgid "Remember Password" +msgid "&Password:" msgstr "密碼" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 93 -#: rc.cpp:131 -msgid "Display picture:" -msgstr "é”Æē¤ŗåœ–ē‰‡ļ¼š" +#. i18n: file ./settings/accountpage.ui line 103 +#: rc.cpp:263 +#, fuzzy +msgid "&Remember Password" +msgstr "密碼" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 176 -#: rc.cpp:134 +#. i18n: file ./settings/accountpage.ui line 121 +#: rc.cpp:266 settings/accountpage.cpp:424 +msgid "Display Picture" +msgstr "é”Æē¤ŗåœ–ē‰‡" + +#. i18n: tag string +#. i18n: file ./settings/accountpage.ui line 221 +#: rc.cpp:269 msgid "C&hange..." msgstr "ę”¹č®Š...(&h)" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 206 -#: rc.cpp:140 -msgid "Don't show a displa&y picture" -msgstr "äøé”Æē¤ŗåœ–ē‰‡(&y)" +#. i18n: file ./settings/accountpage.ui line 246 +#: rc.cpp:275 +msgid "&Do not use" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 218 -#: rc.cpp:146 +#. i18n: file ./settings/accountpage.ui line 294 +#: rc.cpp:281 msgid "" "The option \"Remember this profile\" was left unchecked while logging in, so " "your settings won't be saved by default. Enable this option when you want to " @@ -297,34 +502,37 @@ msgstr "" "å»ŗč­°ä½ é–‹å•Ÿę­¤åŠŸčƒ½ļ¼Œé™¤éžä½ ä½æē”Ø guest åø³č™Ÿē™»å…„ļ¼Œęˆ–ä½ ę­£åœØä½æē”Øå…¬å…±ē³»ēµ±(ä¾‹å¦‚ļ¼šē¶²å’–)" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 221 -#: rc.cpp:151 -msgid "Remember the settings of this account" +#. i18n: file ./settings/accountpage.ui line 297 +#: rc.cpp:286 +#, fuzzy +msgid "Re&member the settings of this account" msgstr "čØ˜ä½é€™å€‹åø³č™Ÿēš„čØ­å®š" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 231 -#: rc.cpp:154 +#. i18n: file ./settings/accountpage.ui line 307 +#: rc.cpp:289 msgid "If enabled, KMess automatically logs in with this account." msgstr "å¦‚ęžœé–‹å•Ÿļ¼ŒKMess ęœƒč‡Ŗå‹•ä»„ę­¤åø³č™Ÿē™»å…„" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 234 -#: rc.cpp:157 -msgid "Login &with this account automatically at start-up" +#. i18n: file ./settings/accountpage.ui line 310 +#: rc.cpp:292 +#, fuzzy +msgid "Login &with this account automatically" msgstr "åœØå•Ÿå‹•ę™‚ļ¼Œä»„ę­¤åø³č™Ÿč‡Ŗå‹•ē™»å…„(&w)" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 244 -#: rc.cpp:163 -msgid "Status to set at login:" -msgstr "ē™»å…„ę™‚čØ­å®šēš„ē‹€ę…‹ļ¼š" +#. i18n: file ./settings/accountpage.ui line 322 +#: rc.cpp:298 +#, fuzzy +msgid "Login &as" +msgstr "ē“€éŒ„ę‰€ęœ‰äŗ¤č«‡å…§å®¹(&a)" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 295 +#. i18n: file ./settings/accountpage.ui line 374 #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 363 -#: rc.cpp:166 rc.cpp:181 +#. i18n: file ./settings/accountpage.ui line 442 +#: rc.cpp:301 rc.cpp:316 msgid "" "You need a passport account to connect to the MSN Messenger network. You can " "register your current e-mail address at register.passport.com or use a " @@ -334,34 +542,34 @@ msgstr "" "passport.com čØ»å†Šä½ ē›®å‰ēš„ e-mailļ¼Œęˆ–ä½æē”Ø Hotmail åø³č™Ÿä¾†é€£ē·šć€‚" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 298 -#: rc.cpp:169 +#. i18n: file ./settings/accountpage.ui line 377 +#: rc.cpp:304 msgid "" "You can't change your friendly name because your passport e-mail address is " "not verified." msgstr "ä½ äøčƒ½ę›“č©²ä½ ēš„åēØ±ļ¼Œå› ē‚ŗä½ ēš„ passport e-mail å°šęœŖčŖč­‰" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 338 -#: rc.cpp:172 +#. i18n: file ./settings/accountpage.ui line 417 +#: rc.cpp:307 msgid "Request verification email" msgstr "č¦ę±‚ē¢ŗčŖ email" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 341 -#: rc.cpp:175 +#. i18n: file ./settings/accountpage.ui line 420 +#: rc.cpp:310 msgid "https://accountservices.passport.net/" msgstr "http://accountservuces.passport.net/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 344 -#: rc.cpp:178 +#. i18n: file ./settings/accountpage.ui line 423 +#: rc.cpp:313 msgid "Go to accountservices.passport.net" msgstr "連至 accountservices.passport.net" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 366 -#: rc.cpp:184 +#. i18n: file ./settings/accountpage.ui line 445 +#: rc.cpp:319 msgid "" "To connect to the MSN Messenger service, you will need to register an e-mail " "address as Passport account." @@ -369,135 +577,248 @@ msgstr "" "é€£ē·šåˆ° MSN Messenger ęœå‹™ļ¼Œä½ éœ€č¦čØ»å†Šäø€å€‹ e-mail ä¾†ē•¶ä½œ Passport åø³č™Ÿć€‚" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 406 -#: rc.cpp:187 +#. i18n: file ./settings/accountpage.ui line 485 +#: rc.cpp:322 msgid "Register new account" msgstr "čØ»å†Šäø€å€‹ę–°åø³č™Ÿ" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 409 -#: rc.cpp:190 +#. i18n: file ./settings/accountpage.ui line 488 +#: rc.cpp:325 msgid "http://register.passport.com/" msgstr "http://register.passport.com/" #. i18n: tag string -#. i18n: file ./settings/accountswidgetinterface.ui line 412 -#: rc.cpp:193 +#. i18n: file ./settings/accountpage.ui line 491 +#: rc.cpp:328 msgid "Go to register.passport.com" msgstr "連至 register.passport.com" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 16 -#: rc.cpp:196 -msgid "Popup notifications" +#. i18n: file ./settings/accountsmanagerpage.ui line 25 +#: rc.cpp:331 +#, fuzzy +msgid "Saved accounts:" +msgstr "åø³č™Ÿ" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 75 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 135 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 170 +#: rc.cpp:334 rc.cpp:641 rc.cpp:653 +msgid "Click" +msgstr "é»žéø" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 78 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 138 +#: rc.cpp:337 rc.cpp:644 +msgid "Click here to add a new customized emoticons to send to your contacts." +msgstr "é»žéøé€™č£”ä¾†åŠ å…„äø€å€‹ę–°ēš„č‡ŖčØ‚č”Øęƒ…ä¾†å‚³é€ēµ¦ä½ ēš„é€£ēµ”äŗŗ" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 81 +#: rc.cpp:340 +#, fuzzy +msgid "&Add account..." +msgstr "åø³č™Ÿ" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 94 +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 110 +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 189 +#: rc.cpp:346 rc.cpp:355 rc.cpp:665 +msgid "Select an emoticon and click here to delete it." +msgstr "éøę“‡äø€å€‹č”Øęƒ…äø¦é»žéøé€™č£”ä¾†åˆŖé™¤å®ƒć€‚" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 97 +#: rc.cpp:349 chat/chatwindow.cpp:565 +msgid "&Edit" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/accountsmanagerpage.ui line 113 +#: rc.cpp:358 +#, fuzzy +msgid "&Remove" +msgstr "被移除" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 31 +#: rc.cpp:364 +#, fuzzy +msgid "Popup Notifications" msgstr "å½ˆå‡ŗē¤ŗęē¤ŗ" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 22 -#: rc.cpp:199 +#. i18n: file ./settings/alertspage.ui line 37 +#: rc.cpp:367 +#, fuzzy +msgid "Contact Events" +msgstr "聯絔人" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 43 +#: rc.cpp:370 msgid "Show notifications when your contacts:" msgstr "é”Æē¤ŗé€šēŸ„ļ¼Œē•¶ä½ ēš„é€£ēµ”äŗŗļ¼š" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 32 -#: rc.cpp:202 +#. i18n: file ./settings/alertspage.ui line 52 +#: rc.cpp:373 msgid "" "If enabled, a popup message is shown when one of your contacts connects to " "MSN." msgstr "å¦‚ęžœé–‹å•Ÿļ¼Œē•¶ęœ‰čÆēµ”äŗŗé€£äøŠ MSN ę™‚ļ¼Œå½ˆå‡ŗčØŠęÆęœƒé”Æē¤ŗć€‚" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 35 -#: rc.cpp:205 +#. i18n: file ./settings/alertspage.ui line 55 +#: rc.cpp:376 #, fuzzy msgid "&Go online" msgstr "é›¢ē·š(&f)" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 48 -#: rc.cpp:211 +#. i18n: file ./settings/alertspage.ui line 68 +#: rc.cpp:382 msgid "" "If enabled, a popup message is shown when one of your contacts starts a " "conversation with you." msgstr "å¦‚ęžœé–‹å•Ÿļ¼Œē•¶ęœ‰čÆēµ”äŗŗčˆ‡ä½ é–‹å§‹äŗ¤č«‡ę™‚ļ¼Œå½ˆå‡ŗčØŠęÆęœƒé”Æē¤ŗć€‚" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 51 -#: rc.cpp:214 +#. i18n: file ./settings/alertspage.ui line 71 +#: rc.cpp:385 msgid "Start a &chat with you" msgstr "čˆ‡ä½ é–‹å§‹äŗ¤č«‡(&c)" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 64 -#: rc.cpp:220 +#. i18n: file ./settings/alertspage.ui line 84 +#: rc.cpp:391 msgid "" "If enabled, a popup message is shown every time one of your contacts sends " "you a message." msgstr "å¦‚ęžœé–‹å•Ÿļ¼ŒęÆē•¶ęœ‰čÆēµ”äŗŗå‚³é€čØŠęÆēµ¦ä½ ę™‚ļ¼Œå½ˆå‡ŗčØŠęÆęœƒé”Æē¤ŗć€‚" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 67 -#: rc.cpp:223 +#. i18n: file ./settings/alertspage.ui line 87 +#: rc.cpp:394 msgid "S&end you a message" msgstr "å‚³é€ēµ¦ä½ äø€å€‹čØŠęÆ(&e)" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 77 -#: rc.cpp:229 +#. i18n: file ./settings/alertspage.ui line 97 +#: rc.cpp:400 msgid "" "If enabled, a popup message is also shown when your contacts change their " "MSN status." msgstr "å¦‚ęžœé–‹å•Ÿļ¼Œē•¶ęœ‰čÆēµ”äŗŗę”¹č®Šē‹€ę…‹ę™‚ļ¼Œå½ˆå‡ŗčØŠęÆęœƒé”Æē¤ŗć€‚" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 80 -#: rc.cpp:232 +#. i18n: file ./settings/alertspage.ui line 100 +#: rc.cpp:403 msgid "Change their &status" msgstr "ę”¹č®Šä»–å€‘ēš„ē‹€ę…‹(&s)" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 90 +#. i18n: file ./settings/alertspage.ui line 110 #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 119 -#: rc.cpp:238 rc.cpp:247 +#. i18n: file ./settings/alertspage.ui line 166 +#: rc.cpp:409 rc.cpp:427 msgid "" "If enabled, a popup message is also shown when one of your contacts goes " "offline." msgstr "å¦‚ęžœé–‹å•Ÿļ¼Œē•¶ęœ‰čÆēµ”äŗŗé›¢ē·šę™‚ļ¼Œå½ˆå‡ŗčØŠęÆä¹Ÿęœƒé”Æē¤ŗć€‚" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 93 -#: rc.cpp:241 +#. i18n: file ./settings/alertspage.ui line 113 +#: rc.cpp:412 msgid "Go o&ffline" msgstr "é›¢ē·š(&f)" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 122 -#: rc.cpp:250 -msgid "Show notifications when you recei&ve an email" -msgstr "ē•¶ä½ ę”¶åˆ°äø€å° email ę™‚ļ¼Œé”Æē¤ŗé€šēŸ„" +#. i18n: file ./settings/alertspage.ui line 125 +#: rc.cpp:418 +msgid "&Hide notifications when my status is set to Busy" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 153 -#: rc.cpp:256 +#. i18n: file ./settings/alertspage.ui line 151 +#: rc.cpp:421 +#, fuzzy +msgid "Email Events" +msgstr "電子郵件位址" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 157 +#: rc.cpp:424 +#, fuzzy +msgid "Show notifications when email is received:" +msgstr "ē•¶é›»å­éƒµä»¶č¢«ęŽ„ę”¶č‡³ \"其他資料夾\" ę™‚ļ¼Œé”Æē¤ŗé€šēŸ„" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 169 +#: rc.cpp:430 +msgid "In the Inbox" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 182 +#: rc.cpp:436 +msgid "" +"If enabled, a popup message also appears when e-mail is received in other " +"folders. This option is only available for Hotmail accounts." +msgstr "" +"å¦‚ęžœé–‹å•Ÿļ¼Œē•¶ e-mail ę”¶å…„å…¶ä»–č³‡ę–™å¤¾ę™‚ļ¼Œęœƒé”Æē¤ŗå½ˆå‡ŗę°£ę³”ć€‚é€™å€‹éøé …åŖęœ‰ä½æē”Ø " +"Hotmail åø³č™Ÿę‰čƒ½ä½œē”Øć€‚" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 185 +#: rc.cpp:439 +msgid "In other folders" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 215 +#: rc.cpp:442 msgid "Controls the number of seconds before popups are hidden." msgstr "ęŽ§åˆ¶å½ˆå‡ŗę°£ę³”å¾Œč‡³éš±č—å‰ēš„ę™‚é–“ć€‚" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 156 -#: rc.cpp:259 +#. i18n: file ./settings/alertspage.ui line 218 +#: rc.cpp:445 msgid "Hide popups after" msgstr "éš±č—å½ˆå‡ŗę°£ę³”ļ¼ŒåœØå¤šä¹…ä¹‹å¾Œļ¼š" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 172 -#: rc.cpp:262 +#. i18n: file ./settings/alertspage.ui line 234 +#: rc.cpp:448 msgid "seconds" msgstr "ē§’" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 204 -#: rc.cpp:265 +#. i18n: file ./settings/alertspage.ui line 287 +#: rc.cpp:451 +#, fuzzy +msgid "Other Alerts" +msgstr "č­¦å‘Š" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 293 +#: rc.cpp:454 +#, fuzzy +msgid "&Show winks from contacts" +msgstr "é”Æē¤ŗé›¢ē·šēš„čÆēµ”äŗŗ(&O)" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 301 +#: rc.cpp:457 msgid "" "

When contacts like to have your attention they can send a nudge. By " "default the chat window shakes when a nudge is received or sent. Disable " @@ -512,14 +833,31 @@ msgstr "" "å‹•ļ¼Œä½†ę˜Æ KMess åŖęœƒę–ę™ƒč¦–ēŖ—äø€ę¬”ć€‚

" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 207 -#: rc.cpp:269 +#. i18n: file ./settings/alertspage.ui line 304 +#: rc.cpp:461 msgid "Shake the chat &window when a nudge is received or sent" msgstr "ē•¶é€å‡ŗęˆ–ęŽ„ę”¶ä¾†é›»ęŒÆå‹•ę™‚ę–ę™ƒč¦–ēŖ—(&w)" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 217 -#: rc.cpp:275 +#. i18n: file ./settings/alertspage.ui line 314 +#: rc.cpp:467 +msgid "" +"If enabled, a popup is shown when e-mail is received in your inbox. The " +"number of unread e-mail messages is shown above the contact list. This " +"option is only available for Hotmail accounts." +msgstr "" +"å¦‚ęžœé–‹å•Ÿļ¼Œē•¶ęŽ„ę”¶åˆ° e-mail ę™‚ęœƒé”Æē¤ŗå½ˆå‡ŗę°£ę³”ć€‚ęœŖč®€éƒµä»¶ēš„ę•øé‡ęœƒé”Æē¤ŗåœØčÆēµ”äŗŗåˆ—č”Ø" +"ä¹‹äøŠć€‚é€™å€‹éøé …åŖęœ‰ä½æē”Ø Hotmail åø³č™Ÿę‰čƒ½ä½œē”Øć€‚" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 317 +#: rc.cpp:470 +msgid "Display a count of unread mail" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 324 +#: rc.cpp:473 msgid "" "If enabled, KMess informs contacts what you're listening to. This " "information is retrieved from the currently active audio player applications." @@ -528,191 +866,181 @@ msgstr "" "ēš„ć€‚" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 220 -#: rc.cpp:278 -msgid "Inform contacts w&hich song I am listening to." +#. i18n: file ./settings/alertspage.ui line 327 +#: rc.cpp:476 +#, fuzzy +msgid "Inform contacts w&hich song I am listening to" msgstr "ęē¤ŗčÆēµ”äŗŗęˆ‘ę­£åœØč½ä»€éŗ¼(&h)" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 230 -#: rc.cpp:284 +#. i18n: file ./settings/alertspage.ui line 353 +#: rc.cpp:482 +#, fuzzy msgid "" "If enabled, your status will be changed automatically to \"Away-Idle\" when " -"you're not using the computer for a few minutes." +"you're not using the computer for a few minutes. If this option is not " +"available, KMess was built without support for this feature." msgstr "" "å¦‚ęžœé–‹å•Ÿļ¼Œē•¶ä½ å¹¾åˆ†é˜å…§éƒ½ę²’ęœ‰ä½æē”Øé›»č…¦ļ¼Œä½ ēš„ē‹€ę…‹å°‡ęœƒč‡Ŗå‹•č®Šē‚ŗ \"離開-發呆\"怂" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 233 -#: rc.cpp:287 +#. i18n: file ./settings/alertspage.ui line 356 +#: rc.cpp:485 msgid "Change status to \"Awa&y-Idle\" when inactive" msgstr "åœØäøę“»å‹•ę™‚ļ¼Œę”¹č®Šē‹€ę…‹ē‚ŗ\"離開-發呆(&y)\"" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 261 -#: rc.cpp:293 +#. i18n: file ./settings/alertspage.ui line 384 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 400 +#. i18n: tag string +#. i18n: file ./settings/alertspage.ui line 407 +#: rc.cpp:491 rc.cpp:497 rc.cpp:500 msgid "" "Controls the number of minutes before KMess changes the status to \"Away-Idle" "\"." msgstr "ęŽ§åˆ¶ KMess č½‰č®Šē‹€ę…‹ē‚ŗ \"離開-發呆\" å‰ēš„åˆ†é˜ę•ø" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 264 -#: rc.cpp:296 +#. i18n: file ./settings/alertspage.ui line 387 +#: rc.cpp:494 msgid "Become idle after" msgstr "ę”¹č®Šē‚ŗē™¼å‘†ē‹€ę…‹ļ¼ŒåœØå¤šä¹…ä¹‹å¾Œļ¼š" #. i18n: tag string -#. i18n: file ./settings/alertssettings.ui line 280 -#: rc.cpp:299 +#. i18n: file ./settings/alertspage.ui line 410 +#: rc.cpp:503 msgid "minutes" msgstr "分鐘" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 18 -#: rc.cpp:302 +#. i18n: file ./settings/chatloggingpage.ui line 25 +#: rc.cpp:506 msgid "If enabled, chat conversations will be saved in a specified directory." msgstr "å¦‚ęžœé–‹å•Ÿļ¼Œäŗ¤č«‡ē“€éŒ„å°‡ęœƒč¢«äæå­˜åœØäø€å€‹ē‰¹å®šēš„č³‡ę–™å¤¾č£”ć€‚" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 21 -#: rc.cpp:305 +#. i18n: file ./settings/chatloggingpage.ui line 28 +#: rc.cpp:509 msgid "Log &all chats" msgstr "ē“€éŒ„ę‰€ęœ‰äŗ¤č«‡å…§å®¹(&a)" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 54 -#: rc.cpp:308 +#. i18n: file ./settings/chatloggingpage.ui line 61 +#: rc.cpp:512 msgid "" "Choose the directory on your system where you'd like to save the chat logs." msgstr "éøę“‡äø€å€‹ä½ ęƒ³č¦äæå­˜äŗ¤č«‡ē“€éŒ„ēš„č³‡ę–™å¤¾ć€‚" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 57 -#: rc.cpp:311 -msgid "Save chat files in this parent directory:" +#. i18n: file ./settings/chatloggingpage.ui line 64 +#: rc.cpp:515 +#, fuzzy +msgid "Save chat files in this directory:" msgstr "å„²å­˜čŠå¤©å…§å®¹č‡³äøŠäø€å±¤ē›®éŒ„" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 87 -#: rc.cpp:317 +#. i18n: file ./settings/chatloggingpage.ui line 97 +#: rc.cpp:521 msgid "" "KMess automatically creates subdirectories when you choose the organize the " "chat folder by year, month or day." msgstr "ē•¶ä½ éøę“‡ć€Œä»„å¹“ć€ęœˆć€ę—„ēµ„ē¹”äŗ¤č«‡ē“€éŒ„ć€éøé …ę™‚ļ¼ŒKMess ęœƒč‡Ŗå‹•å»ŗē«‹ę¬”č³‡ę–™å¤¾ć€‚" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 90 -#: rc.cpp:320 -msgid "Organize chat folders by:" -msgstr "ä»„ä½•ēØ®ę–¹å¼ęŽ’åˆ—čŠå¤©ē“€éŒ„č³‡ę–™å¤¾ļ¼š" +#. i18n: file ./settings/chatloggingpage.ui line 100 +#: rc.cpp:524 +msgid "Log Structure" +msgstr "" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 96 -#: rc.cpp:323 +#. i18n: file ./settings/chatloggingpage.ui line 106 +#: rc.cpp:527 +msgid "Separate saved chats by:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatloggingpage.ui line 119 +#: rc.cpp:530 msgid "Year" msgstr "幓" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 106 -#: rc.cpp:326 +#. i18n: file ./settings/chatloggingpage.ui line 135 +#: rc.cpp:533 msgid "Month" msgstr "月" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 113 -#: rc.cpp:329 +#. i18n: file ./settings/chatloggingpage.ui line 148 +#: rc.cpp:536 msgid "Day" msgstr "ę—„" #. i18n: tag string -#. i18n: file ./settings/chatloggingsettings.ui line 123 -#: rc.cpp:332 -msgid "Save all chats in the parent directory" +#. i18n: file ./settings/chatloggingpage.ui line 164 +#: rc.cpp:539 +#, fuzzy +msgid "Save directly in the specified directory" msgstr "å„²å­˜ę‰€ęœ‰čŠå¤©å…§å®¹č‡³äøŠäø€å±¤ē›®éŒ„" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 22 -#: rc.cpp:335 -msgid "This is the font style and color used in your chat messages." -msgstr "é€™ę˜Æä½ äŗ¤č«‡čØŠęÆēš„å­—åž‹ć€é”č‰²å’Œå½¢å¼ć€‚" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 25 -#: rc.cpp:338 -msgid "Your message font:" -msgstr "ä½ ēš„čØŠęÆå­—åž‹ļ¼š" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 103 -#: rc.cpp:341 -msgid "" -"Allows to override the font style and color of your contacts' messages with " -"a the chosen font style and color below." +#. i18n: file ./settings/chatstylepage.ui line 34 +#: rc.cpp:542 +msgid "St&yle" msgstr "" -"å…čØ±ä»„äø‹åˆ—äø­äø€å€‹å·²éøēš„å­—åž‹ć€å½¢å¼å’Œé”č‰²ä¾†č¦†č“‹ä½ äŗ¤č«‡ē“€éŒ„äø­ēš„å­—åž‹ć€å½¢å¼å’Œé”č‰²ć€‚" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 106 -#: rc.cpp:344 -msgid "Force contacts' messages to use this font:" -msgstr "å¼·åˆ¶čÆēµ”äŗŗēš„čØŠęÆä½æē”Øę­¤å­—åž‹ļ¼š" - +#. i18n: file ./settings/chatstylepage.ui line 45 #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 183 -#: rc.cpp:347 +#. i18n: file ./settings/chatstylepage.ui line 265 +#: rc.cpp:545 rc.cpp:581 msgid "Allows you to change the theme KMess uses to display all chat messages." msgstr "å…čØ±ä½ ę”¹č®Š KMess ē”Øä¾†é”Æē¤ŗäŗ¤č«‡čØŠęÆēš„ä½ˆē½®äø»ę™Æć€‚" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 186 -#: rc.cpp:350 -msgid "Chat style:" +#. i18n: file ./settings/chatstylepage.ui line 48 +#: rc.cpp:548 +#, fuzzy +msgid "&Chat style:" msgstr "äŗ¤č«‡å½¢å¼ļ¼š" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 251 -#: rc.cpp:353 +#. i18n: file ./settings/chatstylepage.ui line 114 +#: rc.cpp:551 +#, fuzzy +msgid "Chat Settings" +msgstr "設定" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 122 +#: rc.cpp:554 msgid "Enables the appearance of emoticons in the chat conversations." msgstr "åÆä»„åœØäŗ¤č«‡å…§å®¹äø­ä½æē”Øč”Øęƒ…ē¬¦č™Ÿć€‚" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 254 -#: rc.cpp:356 -msgid "&Show graphics in chat messages" -msgstr "åœØčŠå¤©čØŠęÆäø­é”Æē¤ŗåœ–ē¤ŗ(&S)" +#. i18n: file ./settings/chatstylepage.ui line 125 +#: rc.cpp:557 +#, fuzzy +msgid "&Show emoticons" +msgstr "é”Æē¤ŗč”Øęƒ…ē¬¦č™Ÿ(&E)" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 366 -#: rc.cpp:362 +#. i18n: file ./settings/chatstylepage.ui line 237 +#: rc.cpp:563 msgid "Enables the appearance of a timestamp in each chat message." msgstr "åÆä»„åœØäŗ¤č«‡čØŠęÆäø­é”Æē¤ŗę™‚é–“ęØ™čØ˜ć€‚" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 369 -#: rc.cpp:365 -msgid "S&how time in chat messages" +#. i18n: file ./settings/chatstylepage.ui line 240 +#: rc.cpp:566 +#, fuzzy +msgid "S&how messages time" msgstr "åœØčŠå¤©čØŠęÆäø­é”Æē¤ŗę™‚é–“(&h)" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 379 -#: rc.cpp:371 -msgid "" -"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " -"causes those words appear in a bold, italics or underlined font respectively." -msgstr "" -"åÆä»„ä½æē”Øå­—åž‹ę•ˆęžœć€‚č¼øå…„ *bold*,/italic/ 和 _underline_ļ¼ŒåÆä½æå­—å‘ˆē¾ē²—é«”ć€ę–œ" -"é«”ć€åŗ•ē·šå­—åž‹ć€‚" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 382 -#: rc.cpp:374 -msgid "Use font &effects in messages, i.e. *bold*, /italic/, and _underline_" -msgstr "ä½æē”Øå­—é«”ę•ˆęžœ(&e)ļ¼Œå¦‚ļ¼š *ē²—é«”* 态 /ę–œé«”/ 态 _åŗ•ē·š_" - -#. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 392 -#: rc.cpp:380 +#. i18n: file ./settings/chatstylepage.ui line 250 +#: rc.cpp:572 msgid "" "This option enables grouping of messages from the same contact. When the " "contact types uses multiple messages to explain something, KMess groups " @@ -723,149 +1051,302 @@ msgstr "" "ęƒ…ę™‚ļ¼Œ KMess čšé›†é€™äŗ›čØŠęÆęˆäø€å–®å€‹čØŠęÆć€‚å‘ˆē¾ēš„ēµęžœå‰‡ä¾å½¢å¼ēš„äøåŒč€ŒäøåŒć€‚" #. i18n: tag string -#. i18n: file ./settings/chattingsettings.ui line 395 -#: rc.cpp:383 +#. i18n: file ./settings/chatstylepage.ui line 253 +#: rc.cpp:575 msgid "&Group follow-up messages from the same contact" msgstr "é›†åˆå¾žåŒäø€å€‹čÆēµ”äŗŗä¾†ēš„čØŠęÆ(&G)" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 24 -#: rc.cpp:389 -msgid "" -"Allows you to choose which e-mail program KMess should open to view e-mail " -"messages." -msgstr "允許你選擇 KMess č©²é–‹å•Ÿēš„ e-mail č»Ÿé«”ä¾†ęŖ¢č¦– e-mail" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 27 -#: rc.cpp:392 -msgid "Mail Client" -msgstr "é›»å­éƒµä»¶å®¢ęˆ¶ē«Æč»Ÿé«”" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 33 -#: rc.cpp:395 -msgid "Use Hotmail" -msgstr "使用 Hotmail" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 40 -#: rc.cpp:398 -msgid "Use a specified command:" -msgstr "ä½æē”Øē‰¹å®šēš„ęŒ‡ä»¤" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 79 -#: rc.cpp:401 settings/settingsdialog.cpp:98 -msgid "Email Notification" -msgstr "é›»å­éƒµä»¶ęē¤ŗ" - -#. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 85 -#: rc.cpp:404 -msgid "" -"If enabled, a popup is shown when e-mail is received in your inbox. The " -"number of unread e-mail messages is shown above the contact list. This " -"option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 268 +#: rc.cpp:584 +msgid "G&roup chats in the same window:" msgstr "" -"å¦‚ęžœé–‹å•Ÿļ¼Œē•¶ęŽ„ę”¶åˆ° e-mail ę™‚ęœƒé”Æē¤ŗå½ˆå‡ŗę°£ę³”ć€‚ęœŖč®€éƒµä»¶ēš„ę•øé‡ęœƒé”Æē¤ŗåœØčÆēµ”äŗŗåˆ—č”Ø" -"ä¹‹äøŠć€‚é€™å€‹éøé …åŖęœ‰ä½æē”Ø Hotmail åø³č™Ÿę‰čƒ½ä½œē”Øć€‚" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 88 -#: rc.cpp:407 -msgid "Show email information" -msgstr "é”Æē¤ŗé›»å­éƒµä»¶č³‡čØŠ" +#. i18n: file ./settings/chatstylepage.ui line 288 +#: rc.cpp:587 +#, fuzzy +msgid "Always" +msgstr "離開" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 95 -#: rc.cpp:410 -msgid "" -"If enabled, a popup message also appears when e-mail is received in other " -"folders. This option is only available for Hotmail accounts." +#. i18n: file ./settings/chatstylepage.ui line 293 +#: rc.cpp:590 +#, fuzzy +msgid "For contacts in the same group" +msgstr "ę‚Øēš„čÆēµ”äŗŗåå–®ęœ‰å¤Ŗå¤šēš„ē¾¤ēµ„" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 298 +#: rc.cpp:593 +#, fuzzy +msgid "Never" +msgstr "åŽ­ęƒ”" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 346 +#: rc.cpp:596 +msgid "&Text" msgstr "" -"å¦‚ęžœé–‹å•Ÿļ¼Œē•¶ e-mail ę”¶å…„å…¶ä»–č³‡ę–™å¤¾ę™‚ļ¼Œęœƒé”Æē¤ŗå½ˆå‡ŗę°£ę³”ć€‚é€™å€‹éøé …åŖęœ‰ä½æē”Ø " -"Hotmail åø³č™Ÿę‰čƒ½ä½œē”Øć€‚" #. i18n: tag string -#. i18n: file ./settings/emailsettings.ui line 98 -#: rc.cpp:413 -msgid "Show a notification when email is received in \"other folders\"" -msgstr "ē•¶é›»å­éƒµä»¶č¢«ęŽ„ę”¶č‡³ \"其他資料夾\" ę™‚ļ¼Œé”Æē¤ŗé€šēŸ„" +#. i18n: file ./settings/chatstylepage.ui line 358 +#: rc.cpp:599 +msgid "This is the font style and color used in your chat messages." +msgstr "é€™ę˜Æä½ äŗ¤č«‡čØŠęÆēš„å­—åž‹ć€é”č‰²å’Œå½¢å¼ć€‚" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 31 -#: rc.cpp:416 +#. i18n: file ./settings/chatstylepage.ui line 361 +#: rc.cpp:602 +#, fuzzy +msgid "Your &message font:" +msgstr "ä½ ēš„čØŠęÆå­—åž‹ļ¼š" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 442 +#: rc.cpp:605 +msgid "" +"Allows to override the font style and color of your contacts' messages with " +"a the chosen font style and color below." +msgstr "" +"å…čØ±ä»„äø‹åˆ—äø­äø€å€‹å·²éøēš„å­—åž‹ć€å½¢å¼å’Œé”č‰²ä¾†č¦†č“‹ä½ äŗ¤č«‡ē“€éŒ„äø­ēš„å­—åž‹ć€å½¢å¼å’Œé”č‰²ć€‚" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 445 +#: rc.cpp:608 +#, fuzzy +msgid "&Force contacts' messages to use this font:" +msgstr "å¼·åˆ¶čÆēµ”äŗŗēš„čØŠęÆä½æē”Øę­¤å­—åž‹ļ¼š" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 520 +#: rc.cpp:611 +msgid "" +"Enables the use of font effects. Typing *bold*, /italic/, and _underline_ " +"causes those words appear in a bold, italics or underlined font respectively." +msgstr "" +"åÆä»„ä½æē”Øå­—åž‹ę•ˆęžœć€‚č¼øå…„ *bold*,/italic/ 和 _underline_ļ¼ŒåÆä½æå­—å‘ˆē¾ē²—é«”ć€ę–œ" +"é«”ć€åŗ•ē·šå­—åž‹ć€‚" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 523 +#: rc.cpp:614 +#, fuzzy +msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" +msgstr "ä½æē”Øå­—é«”ę•ˆęžœ(&e)ļ¼Œå¦‚ļ¼š *ē²—é«”* 态 /ę–œé«”/ 态 _åŗ•ē·š_" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 549 +#: rc.cpp:620 +msgid "MSN Plus formatting" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 555 +#: rc.cpp:623 +#, fuzzy +msgid "Enable in the contact list" +msgstr "ē­‰å€™ä½æē”Øč€…åå–®" + +#. i18n: tag string +#. i18n: file ./settings/chatstylepage.ui line 562 +#: rc.cpp:626 +msgid "Enable in the chat windows" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/emoticonspage.ui line 31 +#: rc.cpp:629 msgid "&Emoticon Themes" msgstr "č”Øęƒ…ē¬¦č™Ÿäø»é”Œ(&E)" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 43 -#: rc.cpp:419 +#. i18n: file ./settings/emoticonspage.ui line 43 +#: rc.cpp:632 msgid "Available emoticon styles:" msgstr "åÆē”Øēš„č”Øęƒ…ē¬¦č™Ÿå½¢å¼" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 88 -#: rc.cpp:422 +#. i18n: file ./settings/emoticonspage.ui line 88 +#: rc.cpp:635 msgid "&Custom Emoticons" msgstr "č‡ŖčØ‚ēš„č”Øęƒ…ē¬¦č™Ÿ(&C)" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 94 -#: rc.cpp:425 +#. i18n: file ./settings/emoticonspage.ui line 94 +#: rc.cpp:638 msgid "Custom emoticons for this account:" msgstr "ēµ¦é€™å€‹åø³č™Ÿē”Øēš„č‡ŖčØ‚č”Øęƒ…ē¬¦č™Ÿļ¼š" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 135 -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 170 -#: rc.cpp:428 rc.cpp:440 -msgid "Click" -msgstr "é»žéø" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 138 -#: rc.cpp:431 -msgid "Click here to add a new customized emoticons to send to your contacts." -msgstr "é»žéøé€™č£”ä¾†åŠ å…„äø€å€‹ę–°ēš„č‡ŖčØ‚č”Øęƒ…ä¾†å‚³é€ēµ¦ä½ ēš„é€£ēµ”äŗŗ" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 141 -#: rc.cpp:434 +#. i18n: file ./settings/emoticonspage.ui line 141 +#: rc.cpp:647 msgid "Add ne&w..." msgstr "åŠ å…„ę–°ēš„...(&w)" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 173 -#: rc.cpp:443 +#. i18n: file ./settings/emoticonspage.ui line 173 +#: rc.cpp:656 msgid "Click here to rename the selected emoticon." msgstr "é»žéøé€™č£”ä¾†é‡ę–°å‘½åéøę“‡ēš„č”Øęƒ…" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 176 -#: rc.cpp:446 +#. i18n: file ./settings/emoticonspage.ui line 176 +#: rc.cpp:659 msgid "Re&name" msgstr "é‡ę–°å‘½å(&n)" #. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 189 -#: rc.cpp:452 -msgid "Select an emoticon and click here to delete it." -msgstr "éøę“‡äø€å€‹č”Øęƒ…äø¦é»žéøé€™č£”ä¾†åˆŖé™¤å®ƒć€‚" - -#. i18n: tag string -#. i18n: file ./settings/emoticonwidgetinterface.ui line 192 -#: rc.cpp:455 +#. i18n: file ./settings/emoticonspage.ui line 192 +#: rc.cpp:668 msgid "Remo&ve" msgstr "移除(&v)" -#. i18n: file ./styles/Classic/Classic.xsl line 0 -#: rc.cpp:461 rc.cpp:464 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 34 +#: rc.cpp:674 +#, fuzzy +msgid "Web Browser" +msgstr "ęžÆēŽ«ē‘°" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 40 +#: rc.cpp:677 +msgid "Choose this option to use the browser used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 43 +#: rc.cpp:680 +msgid "&Use the KDE default browser" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 50 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 192 +#: rc.cpp:683 rc.cpp:718 +msgid "Select this option to choose from a list of installed browsers." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 53 +#: rc.cpp:686 +msgid "&Use an installed browser:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 87 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 229 +#: rc.cpp:689 rc.cpp:724 +msgid "Choose this option to enter the path to your favorite browser." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 90 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 232 +#: rc.cpp:692 rc.cpp:727 +msgid "&Specify a custom command:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 120 +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 262 +#: rc.cpp:696 rc.cpp:731 #, no-c-format -msgid "says:" -msgstr "說:" +msgid "" +"Specify the path of a program to use to open links; a '%u' here will be " +"replaced with the links' URL." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 133 +#: rc.cpp:700 +#, no-c-format +msgid "Use '%u' to insert the URL in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 166 +#: rc.cpp:703 +#, fuzzy +msgid "Email Client" +msgstr "é›»å­éƒµä»¶å®¢ęˆ¶ē«Æč»Ÿé«”" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 172 +#: rc.cpp:706 +msgid "" +"Check this box to use the Live Mail webmail site when you connect with " +"accounts compatible with Live Mail." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 175 +#: rc.cpp:709 +msgid "Use Live Mail if the account supports it" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 182 +#: rc.cpp:712 +msgid "Choose this option to use the email client used by the rest of KDE." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 185 +#: rc.cpp:715 +msgid "&Use the KDE default email client" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 195 +#: rc.cpp:721 +msgid "&Use an installed email client:" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 275 +#: rc.cpp:735 +#, no-c-format +msgid "Use '%u' to insert the email address in the command line." +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 308 +#: rc.cpp:738 dialogs/transferwindow.cpp:50 +msgid "File Transfers" +msgstr "ęŖ”ę”ˆå‚³č¼ø" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 317 +#: rc.cpp:741 +#, fuzzy +msgid "&Save all received files in one directory:" +msgstr "å„²å­˜čŠå¤©å…§å®¹č‡³äøŠäø€å±¤ē›®éŒ„" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 366 +#: rc.cpp:747 +msgid "&Use ports between" +msgstr "" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 392 +#: rc.cpp:750 +#, fuzzy +msgid "and" +msgstr "å‚·åæƒ" + +#. i18n: tag string +#. i18n: file ./settings/miscellaneouspage.ui line 418 +#: rc.cpp:753 +#, fuzzy +msgid "for file transfers" +msgstr "ęŖ”ę”ˆå‚³č¼ø" #: account.cpp:44 account.cpp:745 msgid "I'm away from my computer" @@ -875,75 +1356,110 @@ msgstr "ęˆ‘ę­£é›¢é–‹é›»č…¦" msgid "Your name" msgstr "ä½ ēš„åēØ±" -#: account.cpp:63 kmess.cpp:318 +#: account.cpp:63 settings/accountpage.cpp:204 +#: settings/accountsettingsdialog.cpp:191 msgid "you@hotmail.com" msgstr "ä½ ēš„.Net Passport" -#: actions/msnstatus.cpp:131 actions/msnstatus.cpp:142 -#: contact/contactlist.cpp:835 initialview.cpp:82 kmessinterface.cpp:210 -#: network/msnnotificationconnection.cpp:73 settings/accountswidget.cpp:96 -msgid "Online" -msgstr "上線" +#: chat/chat.cpp:124 +msgid "" +"You can't start this invitation because there are multiple contacts in this " +"chat." +msgstr "ä½ äøčƒ½é–‹å§‹é€™å€‹é‚€č«‹ļ¼Œå› ē‚ŗåœØé€™å€‹äŗ¤č«‡č£”ęœ‰å¤šé‡ēš„čÆēµ”äŗŗ" -#: actions/msnstatus.cpp:132 initialview.cpp:83 kmessinterface.cpp:211 -#: settings/accountswidget.cpp:97 -msgid "Away" -msgstr "離開" +#: chat/chat.cpp:158 +#, fuzzy +msgid "%1 has joined the chat." +msgstr "%1 å·²åŠ å…„äŗ¤č«‡" -#: actions/msnstatus.cpp:133 initialview.cpp:84 kmessinterface.cpp:214 -#: settings/accountswidget.cpp:98 -msgid "Be Right Back" -msgstr "é¦¬äøŠå›žä¾†" +#: chat/chat.cpp:211 +#, fuzzy +msgid "The conversation went idle, %1 has left the chat." +msgstr "交談闲置太久。%1 已離開交談" -#: actions/msnstatus.cpp:134 initialview.cpp:85 kmessinterface.cpp:215 -#: settings/accountswidget.cpp:99 -msgid "Busy" -msgstr "忙啦" +#: chat/chat.cpp:215 +#, fuzzy +msgid "%1 has left the chat." +msgstr "%1 已離開交談" -#: actions/msnstatus.cpp:135 initialview.cpp:88 kmessinterface.cpp:218 -#: settings/accountswidget.cpp:102 -msgid "Invisible" -msgstr "隱形" +#: chat/chat.cpp:364 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 and %2" +msgstr "%1 和 %2 - 交談" -#: actions/msnstatus.cpp:136 kmessinterface.cpp:213 -msgid "Idle" -msgstr "發呆" +#: chat/chat.cpp:371 +#, fuzzy +msgctxt "Name of a chat tab" +msgid "%1 et al." +msgstr "%1 ...ē­‰ - 交談" -#: actions/msnstatus.cpp:137 contact/contactlist.cpp:836 -#: network/msnnotificationconnection.cpp:74 -msgid "Offline" -msgstr "é›¢ē·š" +#: chat/chat.cpp:630 +#, fuzzy +msgctxt "Automatic reply message" +msgid "%1 (This message was sent automatically)" +msgstr " (é€™å€‹čØŠęÆå°‡ęœƒč¢«č‡Ŗå‹•å‚³é€)" -#: actions/msnstatus.cpp:138 initialview.cpp:87 kmessinterface.cpp:217 -#: settings/accountswidget.cpp:101 -msgid "On the Phone" -msgstr "請等等...電話中" +#: chat/chat.cpp:934 +#, fuzzy +msgid "You received a wink from %1." +msgstr "你從 %1 ę”¶åˆ°äø€å€‹å‹•ē•«åæ«éž" -#: actions/msnstatus.cpp:139 initialview.cpp:86 kmessinterface.cpp:216 -#: settings/accountswidget.cpp:100 -msgid "Out to Lunch" -msgstr "å¤–å‡ŗåˆé¤" +#: chat/chat.cpp:971 +msgid "" +"The wink could not be displayed. Make sure you have 'cabextract' installed." +msgstr "å‹•ē•«åæ«éžäøčƒ½é”Æē¤ŗć€‚č«‹ē¢ŗčŖä½ ęœ‰å®‰č£ 'cabextract' 儗件。" -#: chat/chatmaster.cpp:1061 +#: chat/chat.cpp:980 +msgid "The wink could not be displayed. The data could not be read." +msgstr "å‹•ē•«åæ«éžäøčƒ½é”Æē¤ŗć€‚č³‡ę–™ē„”ę³•č®€å–ć€‚" + +#: chat/chat.cpp:1080 +#, fuzzy +msgid "You have received a wink from %1" +msgstr "你從 %1 ę”¶åˆ°äø€å€‹å‹•ē•«åæ«éž" + +#: chat/chat.cpp:1100 +#, fuzzy +msgid "You received a nudge from %1!" +msgstr "你從 %1 ę”¶åˆ°äø€å€‹ä¾†é›»ęŒÆå‹•ć€‚" + +#: chat/chat.cpp:1119 +#, fuzzy +msgid "The message '%1' could not be sent." +msgstr "訊息 \"%1\" 无法传送" + +#: chat/chat.cpp:1183 +msgid "You've sent a nudge to %1!" +msgstr "ä½ å‚³é€ä¾†é›»ęŒÆå‹•ēµ¦ %1" + +#: chat/chat.cpp:1190 +msgid "You've sent a nudge!" +msgstr "ä½ å‚³é€äŗ†äø€å€‹ä¾†é›»ęŒÆå‹•" + +#: chat/chatmaster.cpp:1219 msgid "%1 is sending a wink: %2" msgstr "%1 ę­£å‚³é€äø€å€‹å‹•ē•«åæ«éžļ¼š %2" -#: chat/chatmessagestyle.cpp:302 +#: chat/chatmessagestyle.cpp:298 msgid "%1 says:" msgstr "%1 說:" -#: chat/chatmessagestyle.cpp:1017 chat/chatmessageview.cpp:414 +#: chat/chatmessageview.cpp:429 utils/richtextparser.cpp:675 msgid "Add this emoticon: %1" msgstr "åŠ å…„é€™å€‹č”Øęƒ…ē¬¦č™Ÿļ¼š%1" -#: chat/chatview.cpp:529 +#: chat/chatview.cpp:523 chat/chatwindow.cpp:508 +msgid "&Invite" +msgstr "邀請(&I)" + +#: chat/chatview.cpp:695 msgid "" "Could not save chat log. Make sure you have permission to write in the " "folder where logs are being saved." msgstr "ē„”ę³•å„²å­˜čŠå¤©ē“€éŒ„ć€‚č«‹ē¢ŗčŖå„²å­˜ē“€éŒ„ēš„č³‡ę–™å¤¾ä½ ęœ‰åÆ«å…„ēš„ę¬Šé™ć€‚" -#: chat/chatview.cpp:762 network/applications/filetransfer.cpp:188 -#: network/applications/filetransferp2p.cpp:316 +#: chat/chatview.cpp:1025 network/applications/filetransfer.cpp:199 msgid "" "The file '%1' already exists.\n" "do you want to overwrite it?" @@ -951,357 +1467,413 @@ msgstr "" "ęŖ”ę”ˆ %1 å·²ē¶“å­˜åœØć€‚\n" "ä½ ęƒ³č¦č¦†åÆ«å®ƒå—Žļ¼Ÿ" -#: chat/chatview.cpp:763 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 +#: chat/chatview.cpp:1026 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 msgid "Overwrite File" msgstr "č¦†åÆ«ęŖ”ę”ˆ" -#: chat/chatview.cpp:764 network/applications/filetransfer.cpp:189 -#: network/applications/filetransferp2p.cpp:317 +#: chat/chatview.cpp:1027 network/applications/filetransfer.cpp:200 +#: network/applications/filetransferp2p.cpp:349 msgid "Over&write" msgstr "複寫(&w)" -#: chat/chatview.cpp:977 +#: chat/chatview.cpp:1275 msgid "Add this &Emoticon..." msgstr "åŠ å…„é€™å€‹č”Øęƒ…ē¬¦č™Ÿ(&E)" -#: chat/chatview.cpp:984 +#: chat/chatview.cpp:1282 msgid "Send &Email" msgstr "傳送電子郵件(&E)" -#: chat/chatview.cpp:988 +#: chat/chatview.cpp:1286 msgid "Copy E&mail" msgstr "複製Email(&m)" -#: chat/chatview.cpp:995 +#: chat/chatview.cpp:1293 msgid "Visit &Link" msgstr "造訪連結(&L)" -#: chat/chatview.cpp:999 +#: chat/chatview.cpp:1297 msgid "Copy &Address" msgstr "č¤‡č£½åœ°å€(&A)" -#: chat/chatview.cpp:1013 +#: chat/chatview.cpp:1312 msgid "&Copy text" msgstr "複製文字(&C)" -#: chat/chatview.cpp:1014 +#: chat/chatview.cpp:1313 msgid "Select &All" msgstr "全選(&A)" -#: chat/chatview.cpp:1015 +#: chat/chatview.cpp:1314 +msgid "Find &Text" +msgstr "" + +#: chat/chatview.cpp:1315 msgid "Save chat to &File" msgstr "å„²å­˜äŗ¤č«‡ęˆęŖ”ę”ˆ(&F)" -#: chat/chatwindow.cpp:100 chat/chatwindow.cpp:588 -msgid "Chat" -msgstr "交談" - -#: chat/chatwindow.cpp:239 -msgid "" -"You can't start this invitation because there are multiple contacts in this " -"chat." -msgstr "ä½ äøčƒ½é–‹å§‹é€™å€‹é‚€č«‹ļ¼Œå› ē‚ŗåœØé€™å€‹äŗ¤č«‡č£”ęœ‰å¤šé‡ēš„čÆēµ”äŗŗ" - -#: chat/chatwindow.cpp:276 -msgid "%1 has joined the chat." -msgstr "%1 å·²åŠ å…„äŗ¤č«‡" - -#: chat/chatwindow.cpp:327 -msgid "The conversation went idle, %1 has left the chat." -msgstr "交談闲置太久。%1 已離開交談" - -#: chat/chatwindow.cpp:331 -msgid "%1 has left the chat." -msgstr "%1 已離開交談" - -#: chat/chatwindow.cpp:593 -msgid "%1 - Chat" -msgstr "%1 - 交談" - -#: chat/chatwindow.cpp:599 -msgid "%1 and %2 - Chat" -msgstr "%1 和 %2 - 交談" - -#: chat/chatwindow.cpp:607 -msgid "%1 et al. - Chat" -msgstr "%1 ...ē­‰ - 交談" - -#: chat/chatwindow.cpp:757 -msgid "Contacts" -msgstr "聯絔人" - -#: chat/chatwindow.cpp:818 settings/settingsdialog.cpp:85 -#: settings/settingsdialog.cpp:86 -msgid "Emoticons" -msgstr "č”Øęƒ…ē¬¦č™Ÿ" - -#: chat/chatwindow.cpp:819 -msgid "My emoticons" -msgstr "ęˆ‘ēš„č”Øęƒ…ē¬¦č™Ÿ" - -#: chat/chatwindow.cpp:1174 -msgid " (This message was sent automatically)" -msgstr " (é€™å€‹čØŠęÆå°‡ęœƒč¢«č‡Ŗå‹•å‚³é€)" - -#: chat/chatwindow.cpp:1502 -msgid "" -"The wink could not be displayed. Make sure you have 'cabextract' installed." -msgstr "å‹•ē•«åæ«éžäøčƒ½é”Æē¤ŗć€‚č«‹ē¢ŗčŖä½ ęœ‰å®‰č£ 'cabextract' 儗件。" - -#: chat/chatwindow.cpp:1511 -msgid "The wink could not be displayed. The data could not be read." -msgstr "å‹•ē•«åæ«éžäøčƒ½é”Æē¤ŗć€‚č³‡ę–™ē„”ę³•č®€å–ć€‚" - -#: chat/chatwindow.cpp:1612 -msgid "You have received a wink from %1" -msgstr "你從 %1 ę”¶åˆ°äø€å€‹å‹•ē•«åæ«éž" - -#: chat/chatwindow.cpp:1755 -#, fuzzy -msgid "Show Side&bar" -msgstr "偓邊列" - -#: chat/chatwindow.cpp:1756 -#, fuzzy -msgid "Show the contact sidebar" -msgstr "é”Æē¤ŗęˆ–éš±č—čÆēµ”äŗŗē‹€ę…‹åˆ—" - -#: chat/chatwindow.cpp:1761 chat/chatwindowinterface.cpp:357 -#, fuzzy -msgid "Hide Side&bar" -msgstr "偓邊列" - -#: chat/chatwindow.cpp:1762 chat/chatwindowinterface.cpp:362 -#, fuzzy -msgid "Hide the contact sidebar" -msgstr "é”Æē¤ŗęˆ–éš±č—čÆēµ”äŗŗē‹€ę…‹åˆ—" - -#: chat/chatwindow.cpp:1787 -msgid "The message '%1' could not be sent." -msgstr "訊息 \"%1\" 无法传送" - -#: chat/chatwindow.cpp:1850 -msgid "You received a nudge from %1!" -msgstr "你從 %1 ę”¶åˆ°äø€å€‹ä¾†é›»ęŒÆå‹•ć€‚" - -#: chat/chatwindow.cpp:1876 -msgid "You've sent a nudge to %1!" -msgstr "ä½ å‚³é€ä¾†é›»ęŒÆå‹•ēµ¦ %1" - -#: chat/chatwindow.cpp:1883 -msgid "You've sent a nudge!" -msgstr "ä½ å‚³é€äŗ†äø€å€‹ä¾†é›»ęŒÆå‹•" - -#: chat/chatwindow.cpp:1972 -msgid "%1 is typing." -msgstr "%1 ę­£åœØč¼øå…„" - -#: chat/chatwindow.cpp:1981 -msgid "%1 and %2 are typing." -msgstr "%1 和 %2 ę­£åœØč¾“å…„" - -#: chat/chatwindow.cpp:1985 -msgid "%1, %2 and %3 others are typing." -msgstr "%1 %2 和 %3 å…¶ä»–äŗŗę­£åœØč¾“å…„" - -#: chat/chatwindowinterface.cpp:175 +#: chat/chatwindow.cpp:489 msgid "&Chat" msgstr "交談(&C)" -#: chat/chatwindowinterface.cpp:176 chat/chatwindowinterface.cpp:191 -msgid "&Invite" -msgstr "邀請(&I)" - -#: chat/chatwindowinterface.cpp:179 +#: chat/chatwindow.cpp:492 msgid "Send a &File" msgstr "å‚³é€ęŖ”ę”ˆ(&F)" -#: chat/chatwindowinterface.cpp:180 +#: chat/chatwindow.cpp:493 msgid "Start a &Meeting" msgstr "é–‹å§‹ęœƒč­°(&M)" -#: chat/chatwindowinterface.cpp:181 +#: chat/chatwindow.cpp:494 msgid "Send a &Nudge!" msgstr "å‚³é€ä¾†é›»ęŒÆå‹•(&N)" -#: chat/chatwindowinterface.cpp:182 +#: chat/chatwindow.cpp:495 msgid "Save chat" msgstr "å„²å­˜äŗ¤č«‡å…§å®¹" -#: chat/chatwindowinterface.cpp:183 +#: chat/chatwindow.cpp:496 #, fuzzy msgid "&Emoticons" msgstr "č”Øęƒ…ē¬¦č™Ÿ" -#: chat/chatwindowinterface.cpp:187 +#: chat/chatwindow.cpp:498 +#, fuzzy +msgid "Close &All Tabs" +msgstr "é—œé–‰ęØ™ē±¤" + +#: chat/chatwindow.cpp:504 #, fuzzy msgid "Meeting" msgstr "設定" -#: chat/chatwindowinterface.cpp:188 +#: chat/chatwindow.cpp:505 msgid "Nudge" msgstr "" -#: chat/chatwindowinterface.cpp:208 +#: chat/chatwindow.cpp:526 msgid "Start or Stop a &Conversation" msgstr "é–‹å§‹ęˆ–ēµęŸäø€å€‹å°č©±(&C)" -#: chat/chatwindowinterface.cpp:246 -msgid "&Edit" -msgstr "" - -#: chat/chatwindowinterface.cpp:249 +#: chat/chatwindow.cpp:568 msgid "Change &Font" msgstr "ę”¹č®Šå­—åž‹(&F)" -#: chat/chatwindowinterface.cpp:250 +#: chat/chatwindow.cpp:569 msgid "Change Font &Color" msgstr "ę”¹č®Šå­—é«”é”č‰²(&C)" -#: chat/chatwindowinterface.cpp:257 +#: chat/chatwindow.cpp:576 #, fuzzy msgid "&Font" msgstr "é€£ē·š(&C)" -#: chat/chatwindowinterface.cpp:258 +#: chat/chatwindow.cpp:577 #, fuzzy msgid "Font &Color" msgstr "ę”¹č®Šå­—é«”é”č‰²(&C)" -#: chat/chatwindowinterface.cpp:303 kmessinterface.cpp:257 +#: chat/chatwindow.cpp:616 kmessinterface.cpp:266 msgid "&Help" msgstr "" -#: chat/chatwindowinterface.cpp:352 +#: chat/chatwindow.cpp:657 settings/accountsettingsdialog.cpp:86 +#: settings/accountsettingsdialog.cpp:87 +msgid "Emoticons" +msgstr "č”Øęƒ…ē¬¦č™Ÿ" + +#: chat/chatwindow.cpp:658 +msgid "My emoticons" +msgstr "ęˆ‘ēš„č”Øęƒ…ē¬¦č™Ÿ" + +#: chat/chatwindow.cpp:738 #, fuzzy msgid "&Settings" msgstr "設定" -#: chat/chatwindowinterface.cpp:355 +#: chat/chatwindow.cpp:741 msgid "Use &Spell Checking" msgstr "" -#: chat/chatwindowinterface.cpp:356 +#: chat/chatwindow.cpp:742 msgid "Show &Emoticons" msgstr "é”Æē¤ŗč”Øęƒ…ē¬¦č™Ÿ(&E)" -#: chat/contactframe.cpp:233 kmessview.cpp:483 +#: chat/chatwindow.cpp:743 chat/chatwindow.cpp:1473 +#, fuzzy +msgid "Hide Side&bar" +msgstr "偓邊列" + +#: chat/chatwindow.cpp:744 +#, fuzzy +msgid "Hide &Toolbar" +msgstr "偓邊列" + +#: chat/chatwindow.cpp:750 chat/chatwindow.cpp:1474 +#, fuzzy +msgid "Hide the contact sidebar" +msgstr "é”Æē¤ŗęˆ–éš±č—čÆēµ”äŗŗē‹€ę…‹åˆ—" + +#: chat/chatwindow.cpp:851 +msgid "" +"There are multiple tabs open in this chat window. Do you want to close " +"the current tab only, or all tabs?

Note:You can also close all " +"tabs at once by pressing Shift+Esc." +msgstr "" + +#: chat/chatwindow.cpp:854 +msgctxt "Caption when closing a single chat window tab" +msgid "Closing a Chat Tab" +msgstr "" + +#: chat/chatwindow.cpp:855 +#, fuzzy +msgid "Close all tabs" +msgstr "é—œé–‰ęØ™ē±¤" + +#: chat/chatwindow.cpp:856 +#, fuzzy +msgid "Close current tab" +msgstr "é—œé–‰ęØ™ē±¤" + +#: chat/chatwindow.cpp:1467 +#, fuzzy +msgid "Show Side&bar" +msgstr "偓邊列" + +#: chat/chatwindow.cpp:1468 +#, fuzzy +msgid "Show the contact sidebar" +msgstr "é”Æē¤ŗęˆ–éš±č—čÆēµ”äŗŗē‹€ę…‹åˆ—" + +#: chat/chatwindow.cpp:1565 +msgid "%1 is typing." +msgstr "%1 ę­£åœØč¼øå…„" + +#: chat/chatwindow.cpp:1575 +msgid "%1 and %2 are typing." +msgstr "%1 和 %2 ę­£åœØč¾“å…„" + +#: chat/chatwindow.cpp:1579 +msgid "%1, %2 and %3 others are typing." +msgstr "%1 %2 和 %3 å…¶ä»–äŗŗę­£åœØč¾“å…„" + +#: chat/chatwindow.cpp:1611 +#, fuzzy +msgctxt "Chat window caption, without contact name" +msgid "Chat" +msgstr "交談" + +#: chat/chatwindow.cpp:1615 +#, fuzzy +msgctxt "Chat window caption, with contact name" +msgid "%1 - Chat" +msgstr "%1 - 交談" + +#: chat/contactframe.cpp:284 kmessview.cpp:560 msgid "&Send email" msgstr "傳送電子郵件(&S)" -#: chat/contactframe.cpp:234 kmessview.cpp:484 +#: chat/contactframe.cpp:285 kmessview.cpp:561 msgid "&View Profile" msgstr "ęŖ¢č¦–åø³č™Ÿ(&V)" -#: chat/contactframe.cpp:236 kmessview.cpp:487 +#: chat/contactframe.cpp:286 +msgid "Ed&it Notes" +msgstr "" + +#: chat/contactframe.cpp:288 kmessview.cpp:564 msgid "&Add Contact" msgstr "ę–°å¢žčÆēµ”äŗŗ(&A)" -#: chat/contactframe.cpp:237 kmessview.cpp:488 +#: chat/contactframe.cpp:289 kmessview.cpp:565 msgid "A&llow Contact" msgstr "允許此聯絔人(&l)" -#: chat/contactframe.cpp:238 kmessview.cpp:491 +#: chat/contactframe.cpp:290 kmessview.cpp:568 msgid "&Delete Contact" msgstr "åˆŖé™¤ę­¤čÆēµ”äŗŗ(&D)" -#: chat/contactframe.cpp:240 kmessview.cpp:489 +#: chat/contactframe.cpp:292 kmessview.cpp:566 msgid "&Block Contact" msgstr "å°éŽ–ę­¤čÆēµ”äŗŗ(&B)" -#: chat/contactframe.cpp:241 kmessview.cpp:490 +#: chat/contactframe.cpp:293 kmessview.cpp:567 msgid "&Unblock Contact" msgstr "č§£é™¤ę­¤čÆēµ”äŗŗēš„å°éŽ–(&U)" -#: chat/contactframe.cpp:243 +#: chat/contactframe.cpp:295 kmessview.cpp:571 msgid "&Friendly Name" msgstr "昵稱" -#: chat/contactframe.cpp:244 +#: chat/contactframe.cpp:296 kmessview.cpp:572 msgid "&Personal Message" msgstr "å€‹äŗŗčØŠęÆ(&P)" -#: chat/contactframe.cpp:245 +#: chat/contactframe.cpp:297 kmessview.cpp:573 msgid "&Email Address" msgstr "電子郵件位址(&E)" -#: chat/contactframe.cpp:265 +#: chat/contactframe.cpp:318 kmessview.cpp:608 msgid "&Copy..." msgstr "複製...(&C)" -#: chat/contactframe.cpp:610 +#: chat/contactframe.cpp:632 msgid "Blocked" msgstr "č¢«å°éŽ–" -#: chat/contactframe.cpp:619 +#: chat/contactframe.cpp:652 #, fuzzy msgid "The contact is %1" msgstr "此聯絔人未上線" -#: contact/contactbase.cpp:273 +#: chat/emoticonsidebar.cpp:64 +msgctxt "Informative label on the chat's Sidebar" +msgid "" +"

You haven't added any custom emoticons yet.

To add new " +"emoticons, click here!

" +msgstr "" + +#: chat/emoticonsidebar.cpp:212 +#, fuzzy +msgid "Add to Chat" +msgstr "ę–°å¢žäø€å€‹čÆēµ”äŗŗ" + +#: chat/emoticonsidebar.cpp:213 +#, fuzzy +msgid "Insert new" +msgstr "ę’å…„č”Øęƒ…ē¬¦č™Ÿ" + +#: chat/emoticonsidebar.cpp:214 +msgid "Edit" +msgstr "" + +#: chat/emoticonsidebar.cpp:215 dialogs/userpicturesdialog.cpp:34 +#: kmess.cpp:572 +#, fuzzy +msgid "Remove" +msgstr "被移除" + +#: contact/contactbase.cpp:280 msgid "Windows Mobile" msgstr "" -#: contact/contactbase.cpp:277 +#: contact/contactbase.cpp:284 #, fuzzy msgid "Web Messenger" msgstr "網頁設計" -#: contact/contactbase.cpp:281 +#: contact/contactbase.cpp:288 msgid "Office Communicator" msgstr "" -#: contact/contactbase.cpp:285 +#: contact/contactbase.cpp:292 msgid "Messenger Bot" msgstr "" -#: contact/contactbase.cpp:292 contact/contactbase.cpp:297 +#: contact/contactbase.cpp:299 contact/contactbase.cpp:304 msgid "MSN Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:302 +#: contact/contactbase.cpp:312 +#, fuzzy +msgid "Windows Live Messenger %1" +msgstr "網頁設計" + +#: contact/contactbase.cpp:316 msgid "Windows Live Messenger %1 compatible" msgstr "" -#: contact/contactbase.cpp:307 +#: contact/contactbase.cpp:322 msgid "Windows Live Messenger" msgstr "" -#: contact/contactlist.cpp:837 network/msnnotificationconnection.cpp:75 +#: contact/contactlist.cpp:1141 contact/msnstatus.cpp:141 +#: contact/msnstatus.cpp:152 initialview.cpp:69 kmessinterface.cpp:219 +#: kmessview.cpp:259 settings/accountpage.cpp:87 +msgid "Online" +msgstr "上線" + +#: contact/contactlist.cpp:1142 contact/msnstatus.cpp:147 +msgid "Offline" +msgstr "é›¢ē·š" + +#: contact/contactlist.cpp:1143 msgid "Allowed" msgstr "被允許" -#: contact/contactlist.cpp:838 network/msnnotificationconnection.cpp:76 +#: contact/contactlist.cpp:1144 msgid "Removed" msgstr "被移除" -#: contactlistviewdelegate.cpp:117 +#: contactlistviewdelegate.cpp:143 +#, fuzzy +msgctxt "Group name in the contact list with total contacts of that group" +msgid "%1 (%2)" +msgstr "%1 %2" + +#: contactlistviewdelegate.cpp:150 #, fuzzy msgctxt "" "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "%1 %2" -#: currentaccount.cpp:339 -msgid "This account does not have an Hotmail inbox!" -msgstr "é€™å€‹åø³č™Ÿäø¦ę²’ęœ‰ Hotmail" +#: contact/msnstatus.cpp:142 initialview.cpp:70 kmessinterface.cpp:220 +#: kmessview.cpp:260 settings/accountpage.cpp:88 +msgid "Away" +msgstr "離開" -#: dialogs/addcontactdialog.cpp:53 +#: contact/msnstatus.cpp:143 initialview.cpp:71 kmessinterface.cpp:223 +#: kmessview.cpp:263 settings/accountpage.cpp:89 +msgid "Be Right Back" +msgstr "é¦¬äøŠå›žä¾†" + +#: contact/msnstatus.cpp:144 initialview.cpp:72 kmessinterface.cpp:224 +#: kmessview.cpp:264 settings/accountpage.cpp:90 +msgid "Busy" +msgstr "忙啦" + +#: contact/msnstatus.cpp:145 initialview.cpp:75 kmessinterface.cpp:227 +#: kmessview.cpp:267 settings/accountpage.cpp:93 +msgid "Invisible" +msgstr "隱形" + +#: contact/msnstatus.cpp:146 kmessinterface.cpp:222 kmessview.cpp:262 +msgid "Idle" +msgstr "發呆" + +#: contact/msnstatus.cpp:148 initialview.cpp:74 kmessinterface.cpp:226 +#: kmessview.cpp:266 settings/accountpage.cpp:92 +msgid "On the Phone" +msgstr "請等等...電話中" + +#: contact/msnstatus.cpp:149 initialview.cpp:73 kmessinterface.cpp:225 +#: kmessview.cpp:265 settings/accountpage.cpp:91 +msgid "Out to Lunch" +msgstr "å¤–å‡ŗåˆé¤" + +#: dialogs/addcontactdialog.cpp:48 #, fuzzy msgid "Add a Contact" msgstr "ę–°å¢žäø€å€‹čÆēµ”äŗŗ" -#: dialogs/addcontactdialog.cpp:81 +#: dialogs/addcontactdialog.cpp:73 #, fuzzy msgid "No group" msgstr "åˆŖé™¤ē¾¤ēµ„" -#: dialogs/addemoticondialog.cpp:60 dialogs/addemoticondialog.cpp:226 +#: dialogs/addemoticondialog.cpp:58 dialogs/addemoticondialog.cpp:253 msgid "Add New Emoticon" msgstr "åŠ å…„ę–°ēš„č”Øęƒ…ē¬¦č™Ÿ" -#: dialogs/addemoticondialog.cpp:225 settings/emoticonwidget.cpp:125 +#: dialogs/addemoticondialog.cpp:127 +#, fuzzy +msgid "Edit Emoticon" +msgstr "č”Øęƒ…ē¬¦č™Ÿ" + +#: dialogs/addemoticondialog.cpp:252 settings/emoticonspage.cpp:121 msgid "The emoticon \"%1\" already exists, do you want to replace it?" msgstr "č”Øęƒ… \"%1\" å·²ē¶“å­˜åœØļ¼Œä½ ęƒ³č¦å–ä»£å®ƒå—Žļ¼Ÿ" @@ -1309,526 +1881,601 @@ msgstr "č”Øęƒ… \"%1\" å·²ē¶“å­˜åœØļ¼Œä½ ęƒ³č¦å–ä»£å®ƒå—Žļ¼Ÿ" msgid "Specify an Away message" msgstr "ęŒ‡å®šäø€å€‹é›¢é–‹čØŠęÆ" -#: dialogs/contactaddeduserdialog.cpp:28 +#: dialogs/contactaddeduserdialog.cpp:33 msgid "You have been added by someone" msgstr "" -#: dialogs/contactpropertiesdialog.cpp:68 -msgid "Use an alternative name for this person" -msgstr "å°ę­¤äŗŗä½æē”Øę›æä»£åēØ±" +#: dialogs/contactaddeduserdialog.cpp:85 +#, fuzzy +msgid "" +"%1 (%2) \n" +" has added you to his or her contact list. " +msgstr "" +"%1\n" +"å·²ē¶“å°‡ä½ åŠ å…„ 他/儹 ēš„čÆēµ”äŗŗęø…å–®ć€‚ä½ ęƒ³č¦ļ¼š" -#: dialogs/contactpropertiesdialog.cpp:76 -msgid "Show a popup balloon when this person goes online or offline" -msgstr "ē•¶ä½æē”Øč€…äøŠē·šęˆ–é›¢ē·šę™‚ļ¼Œč·³å‡ŗę°£ēƒęē¤ŗ" +#: dialogs/contactpropertiesdialog.cpp:361 kmess.cpp:807 kmessview.cpp:1071 +#: network/msnsockethttp.cpp:197 network/msnsockettcp.cpp:379 +msgid "Connected" +msgstr "å·²é€£ē·š" -#: dialogs/contactpropertiesdialog.cpp:83 -msgid "Picture:" -msgstr "åœ–ē‰‡ļ¼š" +#: dialogs/contactpropertiesdialog.cpp:365 kmessview.cpp:1069 +msgid "Not seen yet" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:94 -msgid "Sound:" -msgstr "éŸ³ę•ˆļ¼š" +#: dialogs/contactpropertiesdialog.cpp:374 kmessview.cpp:1073 +#, fuzzy +msgid "No messages yet" +msgstr "åœØčŠå¤©čØŠęÆäø­é”Æē¤ŗę™‚é–“(&h)" -#: dialogs/contactpropertiesdialog.cpp:234 -msgid "Contact Properties for %1" -msgstr "%1 ēš„čÆēµ”äŗŗē‰¹ę€§" +#: dialogs/contactpropertiesdialog.cpp:381 +msgid "Last seen: %1" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:266 -msgid "Email address: " -msgstr "é›»å­éƒµä»¶ļ¼š" +#: dialogs/contactpropertiesdialog.cpp:382 +msgid "Last message: %1" +msgstr "" -#: dialogs/contactpropertiesdialog.cpp:267 -msgid "Current name: " -msgstr "ē›®å‰ēš„åēØ±" +#: dialogs/contactpropertiesdialog.cpp:383 +#, fuzzy +msgid "Email: %1" +msgstr "Email" -#: dialogs/networkwindow.cpp:53 -msgid "Network Window" -msgstr "網絔視窗" +#: dialogs/contactpropertiesdialog.cpp:384 +#, fuzzy +msgid "Client: %1" +msgstr "é›»å­éƒµä»¶å®¢ęˆ¶ē«Æč»Ÿé«”" -#: dialogs/networkwindow.cpp:57 +#: dialogs/networkwindow.cpp:79 #, fuzzy msgid "S&ave tab" msgstr "å„²å­˜ęØ™ē±¤" -#: dialogs/networkwindow.cpp:58 +#: dialogs/networkwindow.cpp:80 #, fuzzy msgid "C&lear tab" msgstr "清除標籤" -#: dialogs/networkwindow.cpp:59 -#, fuzzy -msgid "Cl&ose tab" -msgstr "é—œé–‰ęØ™ē±¤" - -#: dialogs/networkwindow.cpp:928 +#: dialogs/networkwindow.cpp:1054 #, fuzzy msgid "" "No connections are present.\n" "Cannot open the Network Window." msgstr "ę²’ęœ‰ä»»ä½•é€£ęŽ„å‘ˆē¾ć€‚ē„”ę³•é–‹å•Ÿē¶²č·Æč¦–ēŖ—ć€‚" -#: dialogs/networkwindow.cpp:974 +#: dialogs/networkwindow.cpp:1100 #, fuzzy msgid "" "Could not save the Network Window log. Make sure you have permission to " "write in the folder where it is being saved." msgstr "ē„”ę³•å„²å­˜ē¶²č·Æč¦–ēŖ—ē“€éŒ„ć€‚č«‹ē¢ŗčŖå„²å­˜ē“€éŒ„ēš„č³‡ę–™å¤¾ä½ ęœ‰ę¬Šé™åÆ«å…„ć€‚" -#: dialogs/networkwindow.cpp:999 +#: dialogs/networkwindow.cpp:1122 msgid "Cannot close the main connection tab." msgstr "ē„”ę³•é—œé–‰äø»é€£ēµęØ™ē±¤" -#: dialogs/transferentry.cpp:125 network/applications/filetransfer.cpp:519 -#: network/applications/filetransferp2p.cpp:96 -#: network/applications/filetransferp2p.cpp:723 +#: dialogs/networkwindow.cpp:1215 +msgid "" +"Sending commands to the server is a risky operation.
If you don't know " +"how exactly send messages to the servers,you could be lucky and just get " +"disconnected, or you mayincur in more serious consequences.
You " +"have been warned!
Do you want to continue sending this message?" +msgstr "" + +#: dialogs/networkwindow.cpp:1245 +msgid "" +"The payload you are trying to send does not end with the required newline " +"('\\r\\n')!
Do you want KMess to add it for you?" +msgstr "" + +#: dialogs/networkwindow.cpp:1321 +#, fuzzy +msgid "Cannot send commands to this kind of connection!" +msgstr "ē„”ę³•é—œé–‰äø»é€£ēµęØ™ē±¤" + +#: dialogs/transferentry.cpp:133 network/applications/filetransfer.cpp:534 +#: network/applications/filetransferp2p.cpp:99 +#: network/applications/filetransferp2p.cpp:768 #: network/extra/msnftpconnection.cpp:120 msgid "Cancelled" msgstr "å–ę¶ˆ" -#: dialogs/transferentry.cpp:165 +#: dialogs/transferentry.cpp:173 msgid "Failed!" msgstr "失敗!" -#: dialogs/transferentry.cpp:207 +#: dialogs/transferentry.cpp:217 msgid "Completed" msgstr "完成" -#: dialogs/transferentry.cpp:250 network/applications/filetransfer.cpp:496 -#: network/applications/filetransferp2p.cpp:698 +#: dialogs/transferentry.cpp:263 network/applications/filetransfer.cpp:511 +#: network/applications/filetransferp2p.cpp:743 msgid "%1 MB" msgstr "%1 MB" -#: dialogs/transferentry.cpp:255 network/applications/filetransfer.cpp:501 -#: network/applications/filetransferp2p.cpp:703 +#: dialogs/transferentry.cpp:268 network/applications/filetransfer.cpp:516 +#: network/applications/filetransferp2p.cpp:748 msgid "%1 kB" msgstr "%1 kB" -#: dialogs/transferentry.cpp:259 network/applications/filetransfer.cpp:505 -#: network/applications/filetransferp2p.cpp:707 +#: dialogs/transferentry.cpp:272 network/applications/filetransfer.cpp:520 +#: network/applications/filetransferp2p.cpp:752 msgid "%1 bytes" msgstr "%1 bytes" -#: dialogs/transferentry.cpp:326 -msgid "%1 of %2 received" +#: dialogs/transferentry.cpp:335 +#, fuzzy +msgid "%1 of %2 received." msgstr "%2 ēš„ %1 å·²ęŽ„ę”¶" -#: dialogs/transferentry.cpp:330 -msgid "%1 of %2 sent" +#: dialogs/transferentry.cpp:339 +#, fuzzy +msgid "%1 of %2 sent." msgstr "%2 ēš„ %1 已傳送" -#: dialogs/transferwindow.cpp:55 -msgid "File Transfers" -msgstr "ęŖ”ę”ˆå‚³č¼ø" +#: dialogs/transferentry.cpp:373 +msgid "infinite" +msgstr "" -#: dialogs/transferwindow.cpp:59 +#: dialogs/transferwindow.cpp:54 #, fuzzy msgid "Cl&ean Up" msgstr "清除(&u)" -#: emoticontheme.cpp:616 +#: dialogs/userpicturesdialog.cpp:31 +msgid "Choose or remove your avatar" +msgstr "" + +#: dialogs/userpicturesdialog.cpp:33 +msgid "Use" +msgstr "" + +#: emoticontheme.cpp:601 msgid "" "Could not save the emoticon theme. Make sure you have permission to write to " "the theme folder '%1'." msgstr "ē„”ę³•å„²å­˜č”Øęƒ…ē¬¦č™Ÿäø»é”Œć€‚č«‹ē¢ŗčŖäø»é”Œč³‡ę–™å¤¾ %1 ä½ ęœ‰ę¬Šé™åÆ«å…„ć€‚" -#: emoticontheme.cpp:794 +#: emoticontheme.cpp:809 msgid "Smile" msgstr "微笑" -#: emoticontheme.cpp:795 +#: emoticontheme.cpp:810 msgid "Wink" msgstr "眨眼" -#: emoticontheme.cpp:796 +#: emoticontheme.cpp:811 msgid "Tongue out" msgstr "吐舌" -#: emoticontheme.cpp:797 +#: emoticontheme.cpp:812 msgid "Big smile" msgstr "大笑" -#: emoticontheme.cpp:798 +#: emoticontheme.cpp:813 msgid "Sad" msgstr "å‚·åæƒ" -#: emoticontheme.cpp:799 +#: emoticontheme.cpp:814 msgid "Crying" msgstr "å“­ę³£" -#: emoticontheme.cpp:800 +#: emoticontheme.cpp:815 msgid "Angry" msgstr "ē”Ÿę°£" -#: emoticontheme.cpp:801 +#: emoticontheme.cpp:816 msgid "Confused" msgstr "å›°ęƒ‘" -#: emoticontheme.cpp:802 +#: emoticontheme.cpp:817 msgid "Embarrassed" msgstr "å®³ē¾ž" -#: emoticontheme.cpp:803 +#: emoticontheme.cpp:818 msgid "Disappointed" msgstr "å¤±ęœ›" -#: emoticontheme.cpp:804 +#: emoticontheme.cpp:819 msgid "Hot" msgstr "儽熱" -#: emoticontheme.cpp:805 +#: emoticontheme.cpp:820 msgid "Baring teeth" msgstr "éœ²ē‰™" -#: emoticontheme.cpp:806 +#: emoticontheme.cpp:821 msgid "Nerd" msgstr "åŽ­ęƒ”" -#: emoticontheme.cpp:807 +#: emoticontheme.cpp:822 msgid "Sick" msgstr "ē”Ÿē—…" -#: emoticontheme.cpp:808 +#: emoticontheme.cpp:823 msgid "Surprised" msgstr "驚喜" -#: emoticontheme.cpp:809 +#: emoticontheme.cpp:824 msgid "Party" msgstr "ę“¾å°" -#: emoticontheme.cpp:810 +#: emoticontheme.cpp:825 msgid "Sleepy" msgstr "ęƒ³ē”" -#: emoticontheme.cpp:811 +#: emoticontheme.cpp:826 msgid "Thinking" msgstr "ꀝ考" -#: emoticontheme.cpp:812 +#: emoticontheme.cpp:827 msgid "Don't tell anyone" msgstr "封口" -#: emoticontheme.cpp:813 +#: emoticontheme.cpp:828 msgid "Secret telling" msgstr "ē§˜åÆ†" -#: emoticontheme.cpp:814 +#: emoticontheme.cpp:829 msgid "Eye-rolling" msgstr "č½‰ēœ¼" -#: emoticontheme.cpp:815 +#: emoticontheme.cpp:830 msgid "Sarcastic" msgstr "諷刺" -#: emoticontheme.cpp:816 +#: emoticontheme.cpp:831 msgid "I don't know" msgstr "äøēŸ„" -#: emoticontheme.cpp:817 +#: emoticontheme.cpp:832 msgid "Be right back" msgstr "速回" -#: emoticontheme.cpp:818 +#: emoticontheme.cpp:833 msgid "Angel" msgstr "天使" -#: emoticontheme.cpp:819 +#: emoticontheme.cpp:834 msgid "Left hug" msgstr "左擁" -#: emoticontheme.cpp:820 +#: emoticontheme.cpp:835 msgid "Boy" msgstr "ē”·å­©" -#: emoticontheme.cpp:821 +#: emoticontheme.cpp:836 msgid "Red heart" msgstr "ē“…åæƒ" -#: emoticontheme.cpp:822 +#: emoticontheme.cpp:837 msgid "Red rose" msgstr "ē“…ēŽ«ē‘°" -#: emoticontheme.cpp:823 +#: emoticontheme.cpp:838 msgid "Thumby up" msgstr "č®šå•¦" -#: emoticontheme.cpp:824 +#: emoticontheme.cpp:839 msgid "Dog face" msgstr "ę±Ŗę±Ŗ" -#: emoticontheme.cpp:825 +#: emoticontheme.cpp:840 msgid "Sun" msgstr "太陽" -#: emoticontheme.cpp:826 +#: emoticontheme.cpp:841 msgid "Devil" msgstr "é‚Ŗęƒ”" -#: emoticontheme.cpp:827 +#: emoticontheme.cpp:842 msgid "Right hug" msgstr "å³ęŠ±" -#: emoticontheme.cpp:828 +#: emoticontheme.cpp:843 msgid "Girl" msgstr "儳孩" -#: emoticontheme.cpp:829 +#: emoticontheme.cpp:844 msgid "Broken heart" msgstr "åæƒē¢Ž" -#: emoticontheme.cpp:830 +#: emoticontheme.cpp:845 msgid "Wilted rose" msgstr "ęžÆēŽ«ē‘°" -#: emoticontheme.cpp:831 +#: emoticontheme.cpp:846 msgid "Thumbs down" msgstr "遜ꖃ" -#: emoticontheme.cpp:832 +#: emoticontheme.cpp:847 msgid "Cat face" msgstr "喵喵" -#: emoticontheme.cpp:833 +#: emoticontheme.cpp:848 msgid "Sleeping half-moon" msgstr "月眠" -#: emoticontheme.cpp:834 +#: emoticontheme.cpp:849 msgid "Red lips" msgstr "瓅唇" -#: emoticontheme.cpp:835 +#: emoticontheme.cpp:850 msgid "Clapping" msgstr "é¼“ęŽŒ" -#: emoticontheme.cpp:836 +#: emoticontheme.cpp:851 msgid "Crossed fingers" msgstr "ęŒ‡å‰" -#: emoticontheme.cpp:837 +#: emoticontheme.cpp:852 msgid "Auto" msgstr "自動" -#: emoticontheme.cpp:838 +#: emoticontheme.cpp:853 msgid "Airplane" msgstr "é£›ę©Ÿ" -#: emoticontheme.cpp:839 +#: emoticontheme.cpp:854 msgid "Turtle" msgstr "ēƒé¾œ" -#: emoticontheme.cpp:840 +#: emoticontheme.cpp:855 msgid "Snail" msgstr "čøē‰›" -#: emoticontheme.cpp:841 +#: emoticontheme.cpp:856 msgid "Black sheep" msgstr "害群之馬" -#: emoticontheme.cpp:842 +#: emoticontheme.cpp:857 msgid "Goat" msgstr "山羊" -#: emoticontheme.cpp:843 +#: emoticontheme.cpp:858 msgid "Vampire bat" msgstr "蝙蝠" -#: emoticontheme.cpp:844 +#: emoticontheme.cpp:859 msgid "Pizza" msgstr "比薩" -#: emoticontheme.cpp:845 +#: emoticontheme.cpp:860 msgid "Beer mug" msgstr "å•¤é…’ęÆ" -#: emoticontheme.cpp:846 +#: emoticontheme.cpp:861 msgid "Martini glass" msgstr "é«˜č…³ęÆ" -#: emoticontheme.cpp:847 +#: emoticontheme.cpp:862 msgid "Coffee cup" msgstr "å’–å•”ęÆ" -#: emoticontheme.cpp:848 +#: emoticontheme.cpp:863 msgid "Birthday cake" msgstr "蛋糕" -#: emoticontheme.cpp:849 +#: emoticontheme.cpp:864 msgid "Plate" msgstr "盤子" -#: emoticontheme.cpp:850 +#: emoticontheme.cpp:865 msgid "Bowl" msgstr "碗公" -#: emoticontheme.cpp:851 +#: emoticontheme.cpp:866 msgid "Star" msgstr "星星" -#: emoticontheme.cpp:852 +#: emoticontheme.cpp:867 msgid "Rainbow" msgstr "彩虹" -#: emoticontheme.cpp:853 +#: emoticontheme.cpp:868 msgid "Stormy cloud" msgstr "ēƒé›²" -#: emoticontheme.cpp:854 +#: emoticontheme.cpp:869 msgid "Lightning" msgstr "閃電" -#: emoticontheme.cpp:855 +#: emoticontheme.cpp:870 msgid "Umbrella" msgstr "é›Øå‚˜" -#: emoticontheme.cpp:856 +#: emoticontheme.cpp:871 msgid "Island with a palm tree" msgstr "ę£•ę«šęØ¹" -#: emoticontheme.cpp:857 +#: emoticontheme.cpp:872 msgid "Telephone receiver" msgstr "電話" -#: emoticontheme.cpp:858 +#: emoticontheme.cpp:873 msgid "Mobile Phone" msgstr "ę‰‹ę©Ÿ" -#: emoticontheme.cpp:859 settings/settingsdialog.cpp:97 +#: emoticontheme.cpp:874 msgid "Email" msgstr "Email" -#: emoticontheme.cpp:860 +#: emoticontheme.cpp:875 msgid "Clock" msgstr "Ꙃ鐘" -#: emoticontheme.cpp:861 +#: emoticontheme.cpp:876 msgid "Camera" msgstr "ē›øę©Ÿ" -#: emoticontheme.cpp:862 +#: emoticontheme.cpp:877 msgid "Filmstrip" msgstr "č† ę²" -#: emoticontheme.cpp:863 +#: emoticontheme.cpp:878 msgid "Note" msgstr "音符" -#: emoticontheme.cpp:864 +#: emoticontheme.cpp:879 msgid "Handcuffs" msgstr "ꉋ銬" -#: emoticontheme.cpp:865 +#: emoticontheme.cpp:880 msgid "Money" msgstr "å®ƒäøę˜Æč¬čƒ½ļ¼Œä½†ę²’ęœ‰å®ƒč¬č¬äøčƒ½" -#: emoticontheme.cpp:866 +#: emoticontheme.cpp:881 msgid "Light bulb" msgstr "ē‡ˆę³”" -#: emoticontheme.cpp:867 +#: emoticontheme.cpp:882 msgid "Cigarrette" msgstr "é›ŖčŒ„" -#: emoticontheme.cpp:868 +#: emoticontheme.cpp:883 msgid "Soccer ball" msgstr "足球" -#: emoticontheme.cpp:869 +#: emoticontheme.cpp:884 msgid "Gift with a bow" msgstr "禮物" -#: emoticontheme.cpp:870 +#: emoticontheme.cpp:885 msgid "X-Box" msgstr "X-Box" -#: emoticontheme.cpp:871 +#: emoticontheme.cpp:886 msgid "Computer" msgstr "電腦" -#: emoticontheme.cpp:872 +#: emoticontheme.cpp:887 msgid "KMess Icon" msgstr "KMess" -#: initialview.cpp:360 +#: initialview.cpp:226 +#, fuzzy +msgid "Internet connection not available." +msgstr "ä¼ŗęœå™ØäøåÆē”Ø" + +#: initialview.cpp:377 +msgid "Connect" +msgstr "é€£ē·š" + +#: initialview.cpp:382 +#, fuzzy +msgid "Disconnect" +msgstr "ę–·ē·š(&D)" + +#: initialview.cpp:504 msgctxt "Clickable label on login screen" msgid "Less options..." msgstr "" -#: initialview.cpp:365 +#: initialview.cpp:509 msgctxt "Clickable label on login screen" msgid "More options..." msgstr "" -#: kmess.cpp:266 kmess.cpp:270 +#: kmess.cpp:223 +#, fuzzy +msgid "New Group" +msgstr "ę–°å¢žē¾¤ēµ„(&G)" + +#: kmess.cpp:226 msgid "Add a group" msgstr "ę–°å¢žäø€å€‹ē¾¤ēµ„" -#: kmess.cpp:267 kmess.cpp:271 kmess.cpp:726 kmess.cpp:730 +#: kmess.cpp:227 kmess.cpp:672 msgid "Enter the new name for this group:" msgstr "č«‹č¼øå…„ę­¤ē¾¤ēµ„ēš„åēØ±ļ¼š" -#: kmess.cpp:313 -msgid "The contact address you have entered is not valid: '%1'" -msgstr "ä½ č¼øå…„ēš„é€£ēµ”ä½å€äøåˆę³•ļ¼š%1" - -#: kmess.cpp:638 +#: kmess.cpp:569 msgid "" "Are you sure you want to remove the contact %1 from your contact " "list?" msgstr "ä½ ē¢ŗå®šč¦å°‡%1å¾žčÆēµ”äŗŗåå–®äø­åˆŖé™¤å—Žļ¼Ÿ" -#: kmess.cpp:640 +#: kmess.cpp:571 msgid "Remove contact" msgstr "åˆŖé™¤čÆēµ”äŗŗ" -#: kmess.cpp:641 kmess.cpp:684 -#, fuzzy -msgid "Remove" -msgstr "被移除" - -#: kmess.cpp:642 +#: kmess.cpp:573 msgid "Remove and block" msgstr "ē§»é™¤äø¦å°éŽ–" -#: kmess.cpp:681 +#: kmess.cpp:619 +msgctxt "dialog text" msgid "" -"Are you sure you want to remove the group %1 from your contact " +"The group \"%1\" is not empty: remove all contacts from it, then try " +"again!" +msgstr "" + +#: kmess.cpp:621 kmess.cpp:630 +msgctxt "dialog title" +msgid "Group removal" +msgstr "" + +#: kmess.cpp:628 +#, fuzzy +msgctxt "dialog text" +msgid "" +"Are you sure you want to remove the group %1from your contact " "list?" msgstr "ä½ ē¢ŗå®šč¦å°‡%1ē¾¤ēµ„å¾žčÆēµ”äŗŗęø…å–®äø­åˆŖé™¤å—Žļ¼Ÿ" -#: kmess.cpp:683 -msgid "Remove group" -msgstr "åˆŖé™¤ē¾¤ēµ„" +#: kmess.cpp:631 +#, fuzzy +msgctxt "dialog button" +msgid "Remove" +msgstr "被移除" -#: kmess.cpp:715 +#: kmess.cpp:662 msgid "This is a special group and can't be changed." msgstr "é€™ę˜Æäø€å€‹äøåÆč®Šę›“ēš„ē‰¹ę®Šē¾¤ēµ„" -#: kmess.cpp:725 kmess.cpp:729 +#: kmess.cpp:671 msgid "Rename group" msgstr "é‡ę–°å‘½åē¾¤ēµ„" -#: kmess.cpp:826 network/msnconnection.cpp:488 -msgid "Connected" -msgstr "å·²é€£ē·š" +#: kmess.cpp:743 +msgctxt "dialog text" +msgid "" +"

Cannot login automatically with account \"%1\":
you must first " +"save the account password!

" +msgstr "" -#: kmess.cpp:1110 +#: kmess.cpp:746 +#, fuzzy +msgctxt "dialog title" +msgid "Autologin failed" +msgstr "čŖč­‰å¤±ę•—" + +#: kmess.cpp:1078 msgid "Disconnected" msgstr "å·²ę–·ē·š" -#: kmess.cpp:1441 +#: kmess.cpp:1408 +#, fuzzy msgid "" "

KMess will not be able to play sounds and notifications.

The " -"KMess file 'eventsrc' could not be found in one of the following folders: %" -"1

Please verify your installation, and copy the missing file to one of " -"the listed folders.

" +"KMess file 'kmess.notifyrc' could not be found in one of the following " +"folders: %1

Please verify your installation, and copy the missing file " +"to one of the listed folders.

" msgstr "" "

KMess å°‡äøęœƒę’­ę”¾éŸ³ę•ˆčˆ‡ęē¤ŗć€‚

KMess ęŖ”ę”ˆ 'eventrc' ē„”ę³•åœØäø‹åˆ—ä»»ä½•" "äø€å€‹č³‡ę–™å¤¾č¢«ę‰¾åˆ°ļ¼š%1

č«‹ē¢ŗčŖä½ ēš„å®‰č£ļ¼Œäø¦č¤‡č£½å¤±åŽ»ēš„ęŖ”ę”ˆč‡³ä»„äø‹ä»»ä½•äø€å€‹č³‡ę–™" "夾。

" -#: kmess.cpp:1445 +#: kmess.cpp:1412 msgid "Error with notifications" msgstr "ęē¤ŗéŒÆčŖ¤" +#: kmess.cpp:1589 +#, fuzzy +msgctxt "Main window caption" +msgid "KMess - %1" +msgstr "KMess" + #: kmessinterface.cpp:151 msgid "&Actions" msgstr "ę“ä½œ(&A)" @@ -1850,889 +2497,810 @@ msgstr "ęœå°‹čÆēµ”äŗŗ(&e)" msgid "Search by &Interest" msgstr "ä¾čˆˆč¶£ęœå°‹(&I)" -#: kmessinterface.cpp:158 +#: kmessinterface.cpp:159 +#, fuzzy +msgid "Search in Contact List" +msgstr "ęœå°‹čÆēµ”äŗŗ(&e)" + +#: kmessinterface.cpp:163 msgid "New &Account" msgstr "ę–°å¢žåø³č™Ÿ(&A)" -#: kmessinterface.cpp:172 +#: kmessinterface.cpp:164 +msgid "Configure &KMess" +msgstr "" + +#: kmessinterface.cpp:182 msgid "Account &Settings" msgstr "åø³č™ŸčØ­å®š(&S)" -#: kmessinterface.cpp:204 +#: kmessinterface.cpp:213 msgid "Co&nnect" msgstr "é€£ē·š(&n)" -#: kmessinterface.cpp:205 +#: kmessinterface.cpp:214 msgid "&Disconnect" msgstr "ę–·ē·š(&D)" -#: kmessinterface.cpp:206 +#: kmessinterface.cpp:215 msgid "Show My &Profile" msgstr "é”Æē¤ŗęˆ‘ēš„åø³č™Ÿ(&P)" -#: kmessinterface.cpp:207 +#: kmessinterface.cpp:216 msgid "&My Status" msgstr "ęˆ‘ēš„ē‹€ę…‹(&M)" -#: kmessinterface.cpp:212 +#: kmessinterface.cpp:221 kmessview.cpp:261 msgid "Away with auto-reply" msgstr "é›¢é–‹ļ¼Œäø¦č‡Ŗå‹•å›žč¦†" -#: kmessinterface.cpp:297 +#: kmessinterface.cpp:312 msgid "&View" msgstr "" -#: kmessinterface.cpp:300 +#: kmessinterface.cpp:315 msgid "Show &Allowed Contacts" msgstr "é”Æē¤ŗę‰€ęœ‰č¢«å…čØ±ēš„čÆēµ”äŗŗ(&A)" -#: kmessinterface.cpp:301 +#: kmessinterface.cpp:316 msgid "Show &Offline Contacts" msgstr "é”Æē¤ŗé›¢ē·šēš„čÆēµ”äŗŗ(&O)" -#: kmessinterface.cpp:302 +#: kmessinterface.cpp:317 msgid "Show &Removed Contacts" msgstr "é”Æē¤ŗč¢«åˆŖé™¤ēš„čÆēµ”äŗŗ(&R)" -#: kmessinterface.cpp:303 +#: kmessinterface.cpp:318 #, fuzzy -msgid "Show &Display Pictures" +msgid "Show &Empty Groups" +msgstr "é”Æē¤ŗč”Øęƒ…ē¬¦č™Ÿ(&E)" + +#: kmessinterface.cpp:321 +#, fuzzy +msgid "Display Pictures Size" msgstr "é”Æē¤ŗåœ–ē‰‡" -#: kmessinterface.cpp:305 +#: kmessinterface.cpp:322 +msgid "Do not display" +msgstr "" + +#: kmessinterface.cpp:323 +#, fuzzy +msgid "Small" +msgstr "微笑" + +#: kmessinterface.cpp:324 +msgid "Medium" +msgstr "" + +#: kmessinterface.cpp:325 +msgid "Large" +msgstr "" + +#: kmessinterface.cpp:328 msgid "&Sort Contacts by" msgstr "ä»„čÆēµ”äŗŗēš„ē‹€ę…‹ęŽ’åˆ—(&S)" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:329 msgid "Group" msgstr "群組" -#: kmessinterface.cpp:306 +#: kmessinterface.cpp:330 msgid "Online/Offline" msgstr "上線/é›¢ē·š" -#: kmessinterface.cpp:309 +#: kmessinterface.cpp:331 +msgid "Mixed" +msgstr "" + +#: kmessinterface.cpp:334 msgid "Show &Transfer Window" msgstr "é”Æē¤ŗęŖ”ę”ˆå‚³č¼øč¦–ēŖ—(&T)" -#: kmessinterface.cpp:311 -msgid "Show &Tool bar" -msgstr "" - -#: kmessinterface.cpp:315 +#: kmessinterface.cpp:341 msgid "Show &Network Window" msgstr "锯示網絔視窗(&N)" -#: kmessview.cpp:121 +#: kmessview.cpp:135 msgid "Now listening to %1" msgstr "正在聽 %1" -#: kmessview.cpp:482 +#: kmessview.cpp:337 +msgid "[%1] Logged with %2" +msgstr "" + +#: kmessview.cpp:358 +msgid "[%1] %2 goes online" +msgstr "" + +#: kmessview.cpp:363 +msgid "[%1] %2 goes offline" +msgstr "" + +#: kmessview.cpp:559 msgid "Cha&t" msgstr "交談(&t)" -#: kmessview.cpp:485 +#: kmessview.cpp:562 msgid "&Properties" msgstr "特性(&P)" -#: kmessview.cpp:492 +#: kmessview.cpp:569 msgid "&Remove from group" msgstr "å¾žē¾¤ēµ„äø­åˆŖé™¤(&R)" -#: kmessview.cpp:514 +#: kmessview.cpp:574 +#, fuzzy +msgid "&Listening Music" +msgstr "正聆聽 %1" + +#: kmessview.cpp:601 msgid "&Copy to Group" msgstr "複製至群組(&C)" -#: kmessview.cpp:515 +#: kmessview.cpp:602 msgid "&Move to Group" msgstr "移至群組(&M)" -#: kmessview.cpp:549 +#: kmessview.cpp:646 msgid "Move Group &Down" msgstr "群組向下移(&D)" -#: kmessview.cpp:550 +#: kmessview.cpp:647 msgid "Move Group &Up" msgstr "ē¾¤ēµ„å‘äøŠē§»(&U)" -#: kmessview.cpp:551 +#: kmessview.cpp:648 msgid "Re&move Group" msgstr "移除此群組(&m)" -#: kmessview.cpp:552 +#: kmessview.cpp:649 msgid "Re&name Group" msgstr "é‡ę–°å‘½åę­¤ē¾¤ēµ„(&n)" -#: kmessview.cpp:898 +#: kmessview.cpp:1053 #, fuzzy msgctxt "Contact email in list tooltip" msgid "Email: %1" msgstr "Email" -#: kmessview.cpp:905 +#: kmessview.cpp:1059 msgctxt "Contact MSN client in list tooltip" msgid "Client: %1" msgstr "" -#: kmessview.cpp:918 +#: kmessview.cpp:1075 +msgctxt "Last time the contact was seen online" +msgid "Last seen: %1" +msgstr "" + +#: kmessview.cpp:1076 +msgctxt "Last time a message was received" +msgid "Last message: %1" +msgstr "" + +#: kmessview.cpp:1085 #, fuzzy msgctxt "Group name in group tooltip" msgid "Group %1" msgstr "
%1 (%2)" -#: kmessview.cpp:921 +#: kmessview.cpp:1090 #, fuzzy -msgctxt "Contacts count in group tooltip" +msgctxt "Contacts count in special group tooltip" msgid "%1 contacts" msgstr "聯絔人" -#: kmessview.cpp:1312 +#: kmessview.cpp:1095 +#, fuzzy +msgctxt "Contacts counters in normal group tooltip" +msgid "%1 contacts, %2 online" +msgstr "此聯絔人未上線" + +#: kmessview.cpp:1504 #, fuzzy msgctxt "Default personal message shown in the contact list" msgid "<Enter your personal message here>" msgstr "č«‹åœØę­¤č¼øå…„ä½ ēš„å€‹äŗŗčØŠęÆ" -#: kmessview.cpp:1543 -msgid "You have 1 new e-mail in your inbox." -msgstr "ä½ ęœ‰äø€å°ę–°éƒµä»¶åœØę”¶ä»¶å¤¾č£”" +#: kmessview.cpp:1770 +msgid "%1 new email message" +msgid_plural "%1 new email messages" +msgstr[0] "" +msgstr[1] "" -#: kmessview.cpp:1547 -msgid "You have %1 new emails in your inbox." -msgstr "ä½ ęœ‰ %1 å°ę–°éƒµä»¶åœØę”¶ä»¶å¤¾č£”" - -#: main.cpp:41 settings/accountswidget.cpp:422 settings/accountswidget.cpp:463 +#: main.cpp:53 settings/accountpage.cpp:448 settings/accountpage.cpp:509 msgid "KMess" msgstr "KMess" -#: main.cpp:43 +#: main.cpp:55 msgid "A MSN Messenger client for KDE" msgstr "" -#: main.cpp:45 -msgid "" -"(c) 2002-2008, Mike K. Bennett\n" -"(c) 2005-2008, Diederik van der Boor\n" -"(c) 2007-2008, Valerio Pilo\n" -msgstr "" - -#: main.cpp:57 -msgid "Mike K. Bennett" -msgstr "" - -#: main.cpp:57 +#: main.cpp:70 msgid "Developer and project founder" msgstr "" -#: main.cpp:58 -msgid "Michael Curtis" -msgstr "" - -#: main.cpp:58 +#: main.cpp:71 msgid "Developer" msgstr "" -#: main.cpp:59 main.cpp:65 -msgid "Jan Tƶnjes" -msgstr "" - -#: main.cpp:59 +#: main.cpp:72 #, fuzzy msgid "Project support" msgstr "P4 å…§å®¹ę–‡ä»¶ę”Æę“" -#: main.cpp:60 -msgid "Diederik van der Boor" -msgstr "" - -#: main.cpp:60 main.cpp:61 main.cpp:62 +#: main.cpp:73 main.cpp:74 main.cpp:75 #, fuzzy msgid "Current developer" msgstr "GnomeMeeting 開發者" -#: main.cpp:61 -msgid "Richard Conway" -msgstr "" - -#: main.cpp:62 main.cpp:97 -msgid "Valerio Pilo" -msgstr "" - -#: main.cpp:65 +#: main.cpp:78 msgid "" "German translation, testing, documentation, web master, project management, " "etc..." msgstr "å¾·ę–‡ēæ»č­Æļ¼Œęø¬č©¦ļ¼Œę–‡ä»¶å’Œē¶²ē«™čØ­čØˆļ¼ŒčØˆåŠƒäø»ęŒć€ć€ć€ē­‰" -#: main.cpp:66 -msgid "Dane Harnett" -msgstr "" - -#: main.cpp:66 +#: main.cpp:79 msgid "Web design" msgstr "網頁設計" -#: main.cpp:67 -msgid "David Vignoni" -msgstr "" - -#: main.cpp:67 +#: main.cpp:80 msgid "The main and yellow/blue/violet emoticon sets and Italian translation" msgstr "黃/藍/ē“« č‰²č”Øęƒ…ē¬¦č™Ÿé›†å’Œē¾©å¤§åˆ©ę–‡ēæ»č­Æ" -#: main.cpp:68 -msgid "Julien Joubin" -msgstr "" - -#: main.cpp:68 +#: main.cpp:81 msgid "Cartoon emoticons" msgstr "å”é€šč”Øęƒ…ē¬¦č™Ÿ" -#: main.cpp:69 -msgid "Christian Müller" -msgstr "" - -#: main.cpp:69 +#: main.cpp:82 msgid "Default sound theme" msgstr "é čØ­ēš„éŸ³ę•ˆäø»é”Œ" -#: main.cpp:73 -msgid "Mohamed Aser" +#: main.cpp:83 +msgid "KMess icon in Oxygen style" msgstr "" -#: main.cpp:73 +#: main.cpp:87 msgid "Arabic translation, internationalization of file saving fix." msgstr "é˜æę‹‰ä¼Æę–‡ēæ»č­Æå’Œę–‡ä»¶äæå­˜åœ‹éš›åŒ–ēš„äæ®ę­£" -#: main.cpp:74 -msgid "Youssef Chahibi" -msgstr "" - -#: main.cpp:74 +#: main.cpp:88 msgid "More Arabic translation" msgstr "ę›“å¤šé˜æę‹‰ä¼Æę–‡ēæ»č­Æ" -#: main.cpp:75 -msgid "Mauricio Rother" -msgstr "" - -#: main.cpp:75 +#: main.cpp:89 msgid "Brazilian Portuguese translation" msgstr "巓脿葔萄牙文翻譯" -#: main.cpp:76 -msgid "Jaume Cornadó" -msgstr "" - -#: main.cpp:76 +#: main.cpp:90 msgid "Catalan translation" msgstr "åŠ ę³°éš†å°¼äŗžę–‡ēæ»č­Æ" -#: main.cpp:78 -msgid "Lin Haoxiang" -msgstr "" - -#: main.cpp:78 +#: main.cpp:92 msgid "Simplified Chinese translation, file send bug fix, proxy connect code" msgstr "ē°”é«”äø­ę–‡ēæ»č­Æļ¼Œę–‡ä»¶å‚³é€č‡­čŸ²äæ®å¾©ļ¼Œä»£ē†é€£ēµēØ‹å¼ć€‚" -#: main.cpp:79 main.cpp:117 -msgid "Liu Sizhuang" -msgstr "" - -#: main.cpp:79 +#: main.cpp:93 msgid "More Simplified Chinese translation" msgstr "ę›“å¤šēš„ē°”é«”äø­ę–‡ēæ»č­Æ" -#: main.cpp:80 -msgid "Yen-chou Chen" -msgstr "" - -#: main.cpp:80 +#: main.cpp:94 msgid "Traditional Chinese translation" msgstr "繁體中文翻譯" -#: main.cpp:82 -msgid "Lars Sommer" -msgstr "" - -#: main.cpp:82 +#: main.cpp:96 msgid "Danish translation" msgstr "丹麄文翻譯" -#: main.cpp:83 -msgid "Pascal d'Hermilly" -msgstr "" - -#: main.cpp:83 +#: main.cpp:97 msgid "More Danish translation" msgstr "ę›“å¤šēš„äø¹éŗ„ę–‡ēæ»č­Æ" -#: main.cpp:84 -msgid "Arend van Beelen Jr." -msgstr "" - -#: main.cpp:84 +#: main.cpp:98 msgid "Dutch translation" msgstr "č·č˜­ę–‡ēæ»č­Æ" -#: main.cpp:85 -msgid "Jaap Woldringh" -msgstr "" - -#: main.cpp:85 +#: main.cpp:99 main.cpp:100 msgid "More Dutch translation" msgstr "ę›“å¤šēš„č·č˜­ę–‡ēæ»č­Æ" -#: main.cpp:87 -msgid "Jyri Toomessoo" -msgstr "" - -#: main.cpp:87 +#: main.cpp:102 msgid "Estonian translation" msgstr "ę„›ę²™å°¼äŗžę–‡ēæ»č­Æ" -#: main.cpp:88 -msgid "Markus Vuori" -msgstr "" - -#: main.cpp:88 +#: main.cpp:103 msgid "Finnish translation" msgstr "čŠ¬č˜­ę–‡ēæ»č­Æ" -#: main.cpp:89 -msgid "Joonas Niilola" -msgstr "" - -#: main.cpp:89 main.cpp:90 +#: main.cpp:104 main.cpp:105 msgid "More Finnish translation" msgstr "ę›“å¤šēš„čŠ¬č˜­ę–‡ēæ»č­Æ" -#: main.cpp:90 -msgid "Jussi Timperi" -msgstr "" - -#: main.cpp:92 -msgid "Choplair" -msgstr "" - -#: main.cpp:92 +#: main.cpp:107 msgid "French translation" msgstr "法文翻譯" -#: main.cpp:93 -msgid "Vincent Fretin" -msgstr "" - -#: main.cpp:93 +#: main.cpp:108 msgid "More French translation, MSN6 emoticon definitions" msgstr "ę›“å¤šę³•ę–‡ēæ»č­Æļ¼ŒMSN6 č”Øęƒ…åœ–ē¤ŗå®šē¾©" -#: main.cpp:94 -msgid "Andrea Blankenstijn" -msgstr "" - -#: main.cpp:94 +#: main.cpp:109 msgid "More French translation" msgstr "法文翻譯" -#: main.cpp:96 -msgid "PĆ”der RezsƵ" -msgstr "" - -#: main.cpp:96 +#: main.cpp:111 msgid "Hungarian translation" msgstr "åŒˆē‰™åˆ©ę–‡ēæ»č­Æ" -#: main.cpp:97 main.cpp:98 +#: main.cpp:112 main.cpp:113 msgid "More Italian translation" msgstr "ę›“å¤šēš„ē¾©å¤§åˆ©ę–‡ēæ»č­Æ" -#: main.cpp:98 -msgid "Vincenzo Reale" -msgstr "" - -#: main.cpp:99 -msgid "Park Dong Cheon" -msgstr "" - -#: main.cpp:99 +#: main.cpp:114 msgid "Korean translation" msgstr "éŸ“ę–‡ēæ»č­Æ" -#: main.cpp:100 -msgid "Ƙyvind SƦther" -msgstr "" - -#: main.cpp:100 +#: main.cpp:115 msgid "Norsk BokmĆ„l translation" msgstr "ęŒŖåØę–‡ēæ»č­Æ" -#: main.cpp:102 -msgid "Matjaž kaÅ”e" -msgstr "" - -#: main.cpp:102 +#: main.cpp:117 msgid "Slovenian translation" msgstr "ę–Æę“›ē¶­å°¼äŗžę–‡ēæ»č­Æ" -#: main.cpp:103 -msgid "Johanna Gersch" -msgstr "" - -#: main.cpp:103 +#: main.cpp:118 msgid "Spanish translation" msgstr "č„æē­ē‰™ę–‡ēæ»č­Æ" -#: main.cpp:104 -msgid "J.C.A. Javi" -msgstr "" - -#: main.cpp:104 main.cpp:105 main.cpp:106 main.cpp:107 +#: main.cpp:119 main.cpp:120 main.cpp:121 main.cpp:122 msgid "More Spanish translation" msgstr "ę›“å¤šēš„č„æē­ē‰™ę–‡ēæ»č­Æ" -#: main.cpp:105 -msgid "Alejandro Araiza Alvarado" -msgstr "" - -#: main.cpp:106 -msgid "Jaume CorbĆ­" -msgstr "" - -#: main.cpp:107 -msgid "Christian Kaiser" -msgstr "" - -#: main.cpp:108 -msgid "Christian Lundgren" -msgstr "" - -#: main.cpp:108 +#: main.cpp:123 msgid "Swedish translation" msgstr "ē‘žå…øę–‡ēæ»č­Æ" -#: main.cpp:110 -msgid "Rachan Hongpairote" -msgstr "" - -#: main.cpp:110 +#: main.cpp:125 msgid "Thai translation" msgstr "泰文翻譯" -#: main.cpp:111 -msgid "Gorkem Cetin" -msgstr "" - -#: main.cpp:111 +#: main.cpp:126 msgid "Turkish translation" msgstr "åœŸč€³å…¶ę–‡ēæ»č­Æ" -#: main.cpp:112 -msgid "Barbaros Ulutas" -msgstr "" - -#: main.cpp:112 main.cpp:113 +#: main.cpp:127 main.cpp:128 msgid "More Turkish translation" msgstr "ę›“å¤šåœŸč€³å…¶ę–‡ēæ»č­Æ" -#: main.cpp:113 -msgid "Uğur Ƈetin" +#: main.cpp:131 +msgid "MSNP12 support, various patches." msgstr "" -#: main.cpp:116 -#, fuzzy -msgid "Guido Solinas" -msgstr "上線(&G)" - -#: main.cpp:116 +#: main.cpp:132 msgid "Pictures in contact list code, contact client info, chat font zoom" msgstr "" -#: main.cpp:117 +#: main.cpp:133 +#, fuzzy +msgid "File transfer thumbnails" +msgstr "ęŖ”ę”ˆå‚³č¼ø" + +#: main.cpp:134 msgid "P4-Context field support" msgstr "P4 å…§å®¹ę–‡ä»¶ę”Æę“" -#: main.cpp:118 -msgid "Scott Morgan" -msgstr "" - -#: main.cpp:118 +#: main.cpp:135 msgid "Xinerama fixes" msgstr "Xineramaēš„äæ®ę­£" -#: main.cpp:119 -msgid "Laurence Anderson" -msgstr "" - -#: main.cpp:119 +#: main.cpp:136 msgid "Original file receive code" msgstr "åŽŸå§‹ēš„ęŖ”ę”ˆęŽ„ę”¶ēØ‹å¼ē¢¼" -#: main.cpp:120 -msgid "Choe Hwanjin" +#: main.cpp:137 +msgid "" +"Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock" msgstr "" -#: main.cpp:120 +#: main.cpp:138 +#, fuzzy +msgid "KWallet support" +msgstr "P4 å…§å®¹ę–‡ä»¶ę”Æę“" + +#: main.cpp:139 +msgid "" +"Notifications blocking option,winks disabling option,last message date " +"feature" +msgstr "" + +#: main.cpp:142 +#, fuzzy +msgid "Various internationalization fixes" +msgstr "å„åœ‹éš›åŒ–ēš„äæ®ę­£" + +#: main.cpp:143 msgid "Various internationalization fixes." msgstr "å„åœ‹éš›åŒ–ēš„äæ®ę­£" -#: main.cpp:121 -msgid "Damien Sandras" -msgstr "" - -#: main.cpp:121 +#: main.cpp:145 msgid "GnomeMeeting developer" msgstr "GnomeMeeting 開發者" -#: main.cpp:122 -msgid "Tobias Tƶnjes" -msgstr "" - -#: main.cpp:122 +#: main.cpp:146 msgid "Guy with a bag over his head" msgstr "äø€å€‹é ­äøŠęœ‰č¢‹å­ēš„äŗŗ(?)" -#: main.cpp:125 -msgid "KMerlin (kmerlin.olsd.de)" -msgstr "" - -#: main.cpp:125 +#: main.cpp:149 msgid "Inspiration and assorted code" msgstr "ę•“ē†ēØ‹å¼ē¢¼čˆ‡é¼“čˆžļ¼ˆļ¼Ÿļ¼‰" -#: main.cpp:126 -msgid "Kopete (kopete.kde.org)" -msgstr "" - -#: main.cpp:126 +#: main.cpp:150 msgid "Old popup balloons code, initial p2p code, msn challenge handler" msgstr "å°±å½ˆå‡ŗę°£ę³”ēØ‹å¼ē¢¼ļ¼Œęœ€åˆēš„ p2p ēØ‹å¼ē¢¼ļ¼Œmsn ꌑꈰ領頭者" -#: main.cpp:127 -msgid "KScreensaver" -msgstr "" - -#: main.cpp:127 +#: main.cpp:151 msgid "Idle timer code" msgstr "é–’ē½®čØˆę™‚å™ØēØ‹å¼ē¢¼" -#: main.cpp:128 -msgid "BasKet" -msgstr "" - -#: main.cpp:128 +#: main.cpp:152 msgid "Close-to-tray icon screenshot code" msgstr "" -#: main.cpp:131 +#: main.cpp:153 +msgid "Custom crash handler implementation" +msgstr "" + +#: main.cpp:156 msgid "Your name here?" msgstr "ä½ ēš„åēØ±ļ¼Ÿ" -#: main.cpp:131 +#: main.cpp:156 #, fuzzy msgid "" -"You are welcome to sent bugfixes and patches to the KMess help forums!\n" +"You are welcome to send bugfixes and patches to the KMess help forums!\n" "If you feel your name is missing here, please contact us too!" msgstr "" "å¾ˆę­”čæŽä½ ēš„č‡­čŸ²äæ®å¾©čˆ‡č£œäøč‡³ KMess å¹«åŠ©čØŽč«–å€ļ¼\n" "å¦‚ęžœä½ č¦ŗå¾—ä½ ēš„åå­—éŗę¼äŗ†ļ¼Œä¹Ÿč«‹é€£ēµ”ęˆ‘å€‘ļ¼" -#: main.cpp:134 +#: main.cpp:159 #, fuzzy msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "ä½ ēš„åēØ±" -#: main.cpp:135 +#: main.cpp:160 #, fuzzy msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "ę‚Øēš„é›»å­éƒµä»¶ļ¼š" -#: main.cpp:141 +#: main.cpp:166 msgid "Autologin with the given email address" msgstr "ä»„ēµ¦å®šēš„é›»å­éƒµä»¶č‡Ŗå‹•ē™»å…„" -#: main.cpp:146 +#: main.cpp:171 msgid "Run a debug test (developer build only)" msgstr "" -#: network/applications/application.cpp:277 +#: network/applications/application.cpp:294 #: network/extra/msnftpconnection.cpp:126 #: network/extra/msnftpconnection.cpp:127 msgid "The contact cancelled the session." msgstr "čÆēµ”äŗŗå–ę¶ˆäŗ†ēØ‹åŗ" -#: network/applications/application.cpp:289 +#: network/applications/application.cpp:306 msgid "The contact rejected the invitation." msgstr "聯絔人拒絕了邀請" -#: network/applications/application.cpp:361 +#: network/applications/application.cpp:378 msgid "You have cancelled the session." msgstr "ä½ å–ę¶ˆäŗ†ēØ‹åŗ" -#: network/applications/application.cpp:373 +#: network/applications/application.cpp:390 msgid "You have rejected the invitation." msgstr "你拒絕了邀請" -#: network/applications/application.cpp:498 -msgid "Do you want to accept or cancel?" +#: network/applications/application.cpp:540 +#, fuzzy +msgid "Do you want to accept or cancel?" msgstr "你想要 ęŽ„å— ꈖ å–ę¶ˆļ¼Ÿ" -#: network/applications/application.cpp:535 -msgid "Click to cancel." +#: network/applications/application.cpp:581 +#, fuzzy +msgid "Click to cancel." msgstr "é»žéø ä»„å–ę¶ˆ" -#: network/applications/filetransfer.cpp:123 -#: network/applications/filetransferp2p.cpp:230 +#: network/applications/filetransfer.cpp:134 msgid "Do you want to accept the file: %1 (%2)" msgstr "ä½ ęƒ³č¦ęŽ„ę”¶ę­¤ęŖ”ę”ˆļ¼š%1 (%2)" -#: network/applications/filetransfer.cpp:210 +#: network/applications/filetransfer.cpp:221 msgid "The transfer of %1 failed. Couldn't open file." msgstr "%1 ēš„å‚³č¼øå¤±ę•—ć€‚ē„”ę³•é–‹å•ŸęŖ”ę”ˆć€‚" -#: network/applications/filetransfer.cpp:304 -#: network/applications/p2papplication.cpp:3217 -#: network/applications/p2papplication.cpp:3238 +#: network/applications/filetransfer.cpp:238 +#: network/applications/filetransfer.cpp:672 +msgid "Transfer accepted." +msgstr "å‚³é€č¢«ęŽ„å—" + +#: network/applications/filetransfer.cpp:319 +#: network/applications/p2papplication.cpp:2340 +#: network/applications/p2papplication.cpp:2361 msgid "Connecting to %1, port %2" msgstr "é€£ē·šåˆ° %1,port %2" -#: network/applications/filetransfer.cpp:324 -#: network/applications/filetransferp2p.cpp:535 +#: network/applications/filetransfer.cpp:339 msgid "The transfer was cancelled" msgstr "å‚³č¼øå–ę¶ˆ" -#: network/applications/filetransfer.cpp:371 +#: network/applications/filetransfer.cpp:386 msgid "Connection established" msgstr "é€£ē·šå·²å»ŗē«‹" -#: network/applications/filetransfer.cpp:441 -#: network/applications/filetransferp2p.cpp:635 +#: network/applications/filetransfer.cpp:456 msgid "Successfully transferred file: %1" msgstr "ęˆåŠŸåœ°å‚³é€äŗ†ęŖ”ę”ˆļ¼š%1" -#: network/applications/filetransfer.cpp:605 +#: network/applications/filetransfer.cpp:620 msgid "The transfer of %1 failed. The file does not exist." msgstr "%1å‚³č¼øå¤±ę•—ć€‚ęŖ”ę”ˆäøå­˜åœØć€‚" -#: network/applications/filetransfer.cpp:609 +#: network/applications/filetransfer.cpp:624 msgid "The transfer of %1 failed. The file could not be read." msgstr "%1 ēš„å‚³č¼øå¤±ę•—ć€‚ē„”ę³•č®€å–ęŖ”ę”ˆć€‚" -#: network/applications/filetransfer.cpp:634 +#: network/applications/filetransfer.cpp:649 #: network/extra/msnftpconnection.cpp:204 msgid "Sending file %1" msgstr "å‚³é€ęŖ”ę”ˆ %1" -#: network/applications/filetransfer.cpp:654 -#: network/applications/filetransferp2p.cpp:844 -msgid "Transfer accepted." -msgstr "å‚³é€č¢«ęŽ„å—" - -#: network/applications/filetransfer.cpp:671 -#: network/applications/filetransferp2p.cpp:362 -#: network/applications/p2papplication.cpp:4902 +#: network/applications/filetransfer.cpp:689 +#: network/applications/filetransferp2p.cpp:395 +#: network/applications/p2papplication.cpp:3161 msgid "Negotiating options to connect" msgstr "č«‡åˆ¤é€£ēµēš„éøé …" -#: network/applications/filetransferp2p.cpp:126 -#: network/applications/filetransferp2p.cpp:140 -#: network/applications/filetransferp2p.cpp:157 +#: network/applications/filetransferp2p.cpp:129 +#: network/applications/filetransferp2p.cpp:143 +#: network/applications/filetransferp2p.cpp:160 #: network/extra/msnftpconnection.cpp:132 msgid "The file transfer invitation was cancelled. Bad data was received." msgstr "ęŖ”ę”ˆå‚³č¼øēš„é‚€č«‹č¢«å–ę¶ˆć€‚ę”¶åˆ°äŗ†äøå„½ēš„č³‡ę–™ć€‚" -#: network/applications/filetransferp2p.cpp:345 -msgid "The transfer of %1 failed. Couldn't open file" -msgstr "%1 ēš„å‚³č¼øå¤±ę•—ć€‚ē„”ę³•é–‹å•ŸęŖ”ę”ˆ" +#: network/applications/filetransferp2p.cpp:233 +msgid "The contact wants to send you a file: "%1" (%2)." +msgstr "" -#: network/applications/filetransferp2p.cpp:524 -msgid "The contact cancelled the transfer." +#: network/applications/filetransferp2p.cpp:348 +#, fuzzy +msgid "" +"The file "%1" already exists.\n" +"do you want to overwrite it?" +msgstr "" +"ęŖ”ę”ˆ %1 å·²ē¶“å­˜åœØć€‚\n" +"ä½ ęƒ³č¦č¦†åÆ«å®ƒå—Žļ¼Ÿ" + +#: network/applications/filetransferp2p.cpp:378 +#, fuzzy +msgid "The transfer of file "%1" failed. Couldn't save the file." +msgstr "%1 ēš„å‚³č¼øå¤±ę•—ć€‚ē„”ę³•é–‹å•ŸęŖ”ę”ˆć€‚" + +#: network/applications/filetransferp2p.cpp:406 +msgid "You have accepted the transfer of file "%1"." +msgstr "" + +#: network/applications/filetransferp2p.cpp:561 +#, fuzzy +msgid "The contact has cancelled the transfer of file "%1"." msgstr "čÆēµ”äŗŗå–ę¶ˆäŗ†å‚³č¼ø" -#: network/applications/filetransferp2p.cpp:579 +#: network/applications/filetransferp2p.cpp:572 +#, fuzzy +msgid "You have cancelled the transfer of file "%1"." +msgstr "ä½ å–ę¶ˆäŗ†ēØ‹åŗ" + +#: network/applications/filetransferp2p.cpp:616 msgid "File could not be written" msgstr "ē„”ę³•åÆ«å…„ęŖ”ę”ˆ" -#: network/applications/filetransferp2p.cpp:768 -msgid "The transfer of %1 failed. The file does not exist." +#: network/applications/filetransferp2p.cpp:676 +#, fuzzy +msgid "Successfully sent file "%1"." +msgstr "ęˆåŠŸåœ°å‚³é€äŗ†ęŖ”ę”ˆļ¼š%1" + +#: network/applications/filetransferp2p.cpp:680 +#, fuzzy +msgid "Successfully received file "%1"." +msgstr "ęˆåŠŸåœ°å‚³é€äŗ†ęŖ”ę”ˆļ¼š%1" + +#: network/applications/filetransferp2p.cpp:813 +#, fuzzy +msgid "The transfer of file "%1" failed. The file does not exist." msgstr "%1å‚³č¼øå¤±ę•—ć€‚ęŖ”ę”ˆäøå­˜åœØć€‚" -#: network/applications/filetransferp2p.cpp:773 -msgid "The transfer of %1 failed. The file could not be read." +#: network/applications/filetransferp2p.cpp:818 +#, fuzzy +msgid "The transfer of file "%1" failed. The file could not be read." msgstr "%1 ēš„å‚³č¼øå¤±ę•—ć€‚ē„”ę³•č®€å–ęŖ”ę”ˆć€‚" -#: network/applications/filetransferp2p.cpp:809 -msgid "Sending file %1 (%2)" +#: network/applications/filetransferp2p.cpp:855 +#, fuzzy +msgid "Sending file "%1" (%2)." msgstr "å‚³é€ęŖ”ę”ˆ %1 (%2)" -#: network/applications/gnomemeeting.cpp:54 +#: network/applications/filetransferp2p.cpp:893 +#, fuzzy +msgid "The contact has accepted the transfer of file "%1"." +msgstr "čÆēµ”äŗŗå–ę¶ˆäŗ†å‚³č¼ø" + +#: network/applications/gnomemeeting.cpp:56 msgid "You are invited to start a meeting (using GnomeMeeting)." msgstr "ęœ‰äŗŗé‚€č«‹ä½ åŠ å…„äø€å€‹ęœƒč«‡(使用 GnomeMeeting)" -#: network/applications/gnomemeeting.cpp:113 +#: network/applications/gnomemeeting.cpp:118 msgid "Starting GnomeMeeting. Connecting to %1." msgstr "啟動 GnomeMeetingć€‚é€£ē·šåˆ° %1" -#: network/applications/gnomemeeting.cpp:156 +#: network/applications/gnomemeeting.cpp:161 msgid "Inviting the contact to a meeting." msgstr "é‚€č«‹ę­¤čÆēµ”äŗŗåŠ å…„ęœƒč«‡" -#: network/applications/mimeapplication.cpp:109 +#: network/applications/mimeapplication.cpp:112 msgid "The invitation was rejected. It's not supported by the other client." msgstr "é‚€č«‹č¢«ę‹’ēµ•ć€‚é€™äøč¢«å…¶ä»–ē”Øęˆ¶ē«Æč»Ÿé«”ę”Æę“ć€‚" -#: network/applications/mimeapplication.cpp:119 +#: network/applications/mimeapplication.cpp:122 msgid "The invitation was aborted. An internal error occured." msgstr "é‚€č«‹å–ę¶ˆć€‚ē™¼ē”Ÿäø€å€‹å…§éƒØéŒÆčŖ¤" -#: network/applications/mimeapplication.cpp:125 +#: network/applications/mimeapplication.cpp:128 msgid "The invitation was aborted. Timeout while waiting for user to accept." msgstr "é‚€č«‹å–ę¶ˆć€‚ē­‰å€™ä½æē”Øč€…ęŽ„å—é€¾ę™‚" -#: network/applications/mimeapplication.cpp:130 +#: network/applications/mimeapplication.cpp:133 msgid "The invitation was aborted. Timeout while waiting for file data." msgstr "é‚€č«‹å–ę¶ˆć€‚ē­‰å€™ęŖ”ę”ˆč³‡ę–™é€¾ę™‚" -#: network/applications/mimeapplication.cpp:135 +#: network/applications/mimeapplication.cpp:138 msgid "" "The invitation was aborted. The switchboard closed the chat connection." msgstr "é‚€č«‹å–ę¶ˆć€‚äŗ¤ę›å™Øé—œé–‰ę­¤é€£ē·šć€‚" -#: network/applications/mimeapplication.cpp:141 +#: network/applications/mimeapplication.cpp:144 msgid "The invitation was aborted." msgstr "é‚€č«‹å–ę¶ˆ" -#: network/applications/msnremotedesktop.cpp:50 +#: network/applications/msnremotedesktop.cpp:52 msgid "You are invited to share this person's desktop." msgstr "ęœ‰äŗŗé‚€č«‹ä½ åˆ†äŗ«ä»–ēš„ę”Œé¢" -#: network/applications/msnremotedesktop.cpp:154 +#: network/applications/msnremotedesktop.cpp:159 msgid "Starting KRDC. Connecting to %1." msgstr "啟動 KRDCć€‚é€£ē·šåˆ° %1" -#: network/applications/p2papplication.cpp:273 -msgid "The contact initiated a MSN6 feature KMess can't handle yet." -msgstr "此聯絔人使用了一個 KMess ē„”ę³•č™•ē†ēš„ MSN6 特色" +#: network/applications/p2papplicationbase.cpp:602 +#: network/applications/p2papplicationbase.cpp:1011 +#: network/applications/p2papplication.cpp:1780 +#: network/applications/p2papplication.cpp:1797 +#: network/applications/p2papplication.cpp:1828 +msgid "The contact rejected the invitation. An internal error occured." +msgstr "čÆēµ”äŗŗę‹’ēµ•é‚€č«‹ć€‚ē™¼ē”Ÿäø€å€‹å…§éƒØéŒÆčŖ¤ć€‚" -#: network/applications/p2papplication.cpp:785 -#: network/applications/p2papplication.cpp:983 -#: network/applications/p2papplication.cpp:1706 -#: network/applications/p2papplication.cpp:2105 -#: network/applications/p2papplication.cpp:2501 -#: network/applications/p2papplication.cpp:2625 -#: network/applications/p2papplication.cpp:2760 +#: network/applications/p2papplicationbase.cpp:609 +msgid "The transfer failed." +msgstr "傳輸失敗" + +#: network/applications/p2papplicationbase.cpp:687 +#: network/applications/p2papplication.cpp:511 +#: network/applications/p2papplication.cpp:679 +#: network/applications/p2papplication.cpp:1228 +#: network/applications/p2papplication.cpp:1609 +#: network/applications/p2papplication.cpp:1735 +#: network/applications/p2papplication.cpp:1854 msgid "" "The invitation was cancelled. The contact sent bad data, or KMess doesn't " "support it." msgstr "é‚€č«‹č¢«å–ę¶ˆć€‚čÆēµ”äŗŗå‚³é€äŗ†éŒÆčŖ¤ēš„č³‡ę–™ļ¼Œęˆ– KMess äøę”Æę“å®ƒ" -#: network/applications/p2papplication.cpp:1503 -msgid "The transfer failed. Data preparation failed." -msgstr "傳輸失敗。資料準備失敗" - -#: network/applications/p2papplication.cpp:1619 -#: network/applications/p2papplication.cpp:2677 -#: network/applications/p2papplication.cpp:2697 -#: network/applications/p2papplication.cpp:2731 -#: network/applications/p2papplication.cpp:3312 -msgid "The contact rejected the invitation. An internal error occured." -msgstr "čÆēµ”äŗŗę‹’ēµ•é‚€č«‹ć€‚ē™¼ē”Ÿäø€å€‹å…§éƒØéŒÆčŖ¤ć€‚" - -#: network/applications/p2papplication.cpp:1626 -msgid "The transfer failed." -msgstr "傳輸失敗" - -#: network/applications/p2papplication.cpp:1840 -#: network/applications/p2papplication.cpp:1905 +#: network/applications/p2papplicationbase.cpp:835 +#: network/applications/p2papplicationbase.cpp:901 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "å‚³č¼øå¤±ę•—ć€‚čÆēµ”äŗŗå‚³é€äŗ†éŒÆčŖ¤ēš„č³‡ę–™ļ¼Œęˆ– KMess äøę”Æę“" -#: network/applications/p2papplication.cpp:2055 +#: network/applications/p2papplicationbase.cpp:996 +msgid "The transfer failed. Timeout while waiting for user to accept." +msgstr "å‚³č¼øå¤±ę•—ć€‚ē­‰å€™ä½æē”Øč€…ęŽ„å—é€¾ę™‚" + +#: network/applications/p2papplicationbase.cpp:1015 +msgid "The transfer failed. An internal error occured." +msgstr "å‚³č¼øå¤±ę•—ć€‚ē™¼ē”Ÿäø€å€‹å…§éƒØéŒÆčŖ¤" + +#: network/applications/p2papplicationbase.cpp:1176 +msgid "The transfer failed. Couldn't open data source." +msgstr "å‚³č¼øå¤±ę•—ć€‚ē„”ę³•é–‹å•Ÿč³‡ę–™ä¾†ęŗć€‚" + +#: network/applications/p2papplication.cpp:215 +msgid "The contact initiated a MSN6 feature KMess can't handle yet." +msgstr "此聯絔人使用了一個 KMess ē„”ę³•č™•ē†ēš„ MSN6 特色" + +#: network/applications/p2papplication.cpp:1071 +msgid "The transfer failed. Data preparation failed." +msgstr "傳輸失敗。資料準備失敗" + +#: network/applications/p2papplication.cpp:1178 msgid "The invitation was cancelled. Message was not directed to us." msgstr "é‚€č«‹č¢«å–ę¶ˆć€‚čØŠęÆäø¦äøęŒ‡å‘ęˆ‘å€‘ć€‚" -#: network/applications/p2papplication.cpp:2605 +#: network/applications/p2papplication.cpp:1716 msgid "" "The transfer failed. The contact sent bad data, or KMess doesn't support it." msgstr "å‚³č¼øå¤±ę•—ć€‚čÆēµ”äŗŗå‚³é€äŗ†éŒÆčŖ¤ēš„č³‡ę–™ļ¼Œęˆ– KMess äøę”Æę“" -#: network/applications/p2papplication.cpp:2961 +#: network/applications/p2papplication.cpp:2068 #: network/extra/msnftpconnection.cpp:398 msgid "Awaiting connection at %1, port %2" msgstr "等候%1 port %2 ēš„é€£ē·š" -#: network/applications/p2papplication.cpp:2989 -#: network/applications/p2papplication.cpp:5320 +#: network/applications/p2papplication.cpp:2111 +#: network/applications/p2papplication.cpp:3322 msgid "Reverting to indirect file transfer (this could be slow)." msgstr "č½‰å›žęˆéžē›“ęŽ„å‚³č¼ø(é€™ęœ‰åÆčƒ½ęœƒę…¢)" -#: network/applications/p2papplication.cpp:3297 -msgid "The transfer failed. Timeout while waiting for user to accept." -msgstr "å‚³č¼øå¤±ę•—ć€‚ē­‰å€™ä½æē”Øč€…ęŽ„å—é€¾ę™‚" - -#: network/applications/p2papplication.cpp:3316 -msgid "The transfer failed. An internal error occured." -msgstr "å‚³č¼øå¤±ę•—ć€‚ē™¼ē”Ÿäø€å€‹å…§éƒØéŒÆčŖ¤" - -#: network/applications/p2papplication.cpp:3693 -msgid "The transfer failed. Couldn't open data source." -msgstr "å‚³č¼øå¤±ę•—ć€‚ē„”ę³•é–‹å•Ÿč³‡ę–™ä¾†ęŗć€‚" - -#: network/applications/p2papplication.cpp:4857 +#: network/applications/p2papplication.cpp:3113 msgid "Waiting for connection" msgstr "ē­‰å€™é€£ē·š" -#: network/applications/p2papplication.cpp:5042 +#: network/applications/p2papplication.cpp:3364 msgid "" "The invitation was cancelled. A timeout occured waiting for the contact to " "accept." msgstr "é‚€č«‹å–ę¶ˆć€‚ē­‰å€™čÆēµ”äŗŗęŽ„å—é€¾ę™‚ć€‚" -#: network/applications/p2papplication.cpp:5051 +#: network/applications/p2papplication.cpp:3373 msgid "" "The invitation was cancelled. A timeout occured waiting for a connection to " "succeed or fail." msgstr "é‚€č«‹å–ę¶ˆć€‚ē­‰å€™é€£ē·š 成功/失敗 逾時。" -#: network/applications/p2papplication.cpp:5118 -#: network/applications/p2papplication.cpp:5202 +#: network/applications/p2papplication.cpp:3440 +#: network/applications/p2papplication.cpp:3524 msgid "The invitation was cancelled. A timeout occured waiting for data." msgstr "é‚€č«‹å–ę¶ˆć€‚ē­‰å€™č³‡ę–™é€¾ę™‚ć€‚" -#: network/applications/voiceconversation.cpp:74 +#: network/applications/voiceconversation.cpp:71 msgid "You are invited to start a voice conversation." msgstr "ä½ č¢«é‚€č«‹äø€å€‹čŖžéŸ³äŗ¤č«‡" -#: network/applications/voiceconversation.cpp:79 +#: network/applications/voiceconversation.cpp:76 msgid "" "You are invited to start a voice conversation but support for this was not " "installed" msgstr "ä½ č¢«é‚€č«‹äŗ†čŖžéŸ³äŗ¤č«‡ļ¼Œä½†ę˜Æę­¤ę”Æę“äø¦ęœŖč¢«å®‰č£" -#: network/applications/voiceconversation.cpp:171 +#: network/applications/voiceconversation.cpp:168 msgid "You have cancelled the voice conversation." msgstr "ä½ å–ę¶ˆäŗ†čŖžéŸ³äŗ¤č«‡ć€‚" -#: network/applications/voiceconversation.cpp:208 +#: network/applications/voiceconversation.cpp:205 msgid "The invitation was cancelled. The audio device couldn't be opened." msgstr "é‚€č«‹č¢«å–ę¶ˆć€‚ē„”ę³•é–‹å•ŸéŸ³ę•ˆč£ē½®" -#: network/applications/voiceconversation.cpp:219 +#: network/applications/voiceconversation.cpp:218 msgid "Start voice conversation. Connecting to %1." msgstr "å•Ÿå‹•čŖžéŸ³äŗ¤č«‡ć€‚é€£ē·šåˆ° %1" -#: network/applications/voiceconversation.cpp:225 +#: network/applications/voiceconversation.cpp:224 msgid "Start voice conversation. Listening on %1." msgstr "å•Ÿå‹•čŖžéŸ³äŗ¤č«‡ć€‚č†č½ %1" -#: network/applications/voiceconversation.cpp:290 +#: network/applications/voiceconversation.cpp:289 msgid "Inviting the contact to a voice conversation." msgstr "é‚€č«‹čÆēµ”äŗŗč‡³čŖžéŸ³äŗ¤č«‡" -#: network/applications/webapplicationp2p.cpp:102 +#: network/applications/webapplicationp2p.cpp:103 #: network/applications/webcamtransferp2p.cpp:88 msgid "The contact is inviting you for '%1', but this is not implemented yet." msgstr "聯絔人邀請你 '%'1ļ¼Œä½†ę­¤åŠŸčƒ½é‚„ęœŖč¢«é–‹ē™¼" @@ -2773,645 +3341,919 @@ msgstr "焔法建立連結" msgid "Receiving file %1" msgstr "ę­£ęŽ„ę”¶ęŖ”ę”ˆ %1" -#: network/msnconnection.cpp:477 -msgid "1 ping lost" -msgstr "1 ping lost" - -#: network/msnconnection.cpp:481 -msgid "%1 pings lost" -msgstr "%1 pings lost" - -#: network/msnconnection.cpp:496 -msgid "The connection to the server was lost." -msgstr "å¤±åŽ»č‡³ä¼ŗęœå™Øēš„é€£ē·š" - -#: network/msnconnection.cpp:704 +#: network/msnconnection.cpp:589 #, fuzzy -msgid "" -"KMess could not connect to the MSN Messenger service.\n" -"Please, be sure to be connected to the internet.\n" -"reason: %1." -msgstr "" -"KMess ē„”ę³•é€£ēµåˆ° MSN Messenger ęœå‹™ć€‚\n" -"č«‹ē¢ŗčŖęœ‰é€£ęŽ„åˆ°ē¶²éš›ē¶²č·Æć€‚\n" -"系統錯誤:%1 (錯誤碼 %2)" - -#: network/msnconnection.cpp:756 -msgid "The remote server has closed the connection." -msgstr "é ē«Æä¼ŗęœå™Øå·²é—œé–‰é€£ē·š" - -#: network/msnnotificationconnection.cpp:548 -msgid "" -"KMess could not connect the the MSN Messenger servers. The MSN Messenger " -"servers could be temporary unavailable or there is a problem with your " -"Internet connection." -msgstr "" -"KMess ē„”ę³•é€£ē·šåˆ° MSN Messenger ä¼ŗęœå™Øć€‚MSN Messenger ä¼ŗęœå™ØåÆčƒ½ęš«ę™‚é—œé–‰ļ¼Œęˆ–č€…" -"ä½ ēš„ē¶²éš›ē¶²č·Æé€£ē·šęœ‰å•é”Œć€‚" - -#: network/msnnotificationconnection.cpp:724 -msgid "Show MSN Messenger Service status?" -msgstr "锯示 MSN Messenger ęœå‹™ē‹€ę…‹ļ¼Ÿ" - -#: network/msnnotificationconnection.cpp:725 -msgid "Server Error" -msgstr "ä¼ŗęœå™ØéŒÆčŖ¤" - -#: network/msnnotificationconnection.cpp:1344 -#, fuzzy -msgid "" -"You have been disconnected because you \n" -"connected from another MSN Messenger client \n" -"or from another location" -msgstr "" -"ä½ å·²ē¶“č¢«ę–·ē·šäŗ†ļ¼Œ\n" -"å› ē‚ŗä½ å·²ē¶“ē”Øå¦äø€å€‹ MSN Messenger \n" -"ęˆ–å¾žå¦äø€å€‹åœ°ę–¹ē™»å…„" - -#: network/msnnotificationconnection.cpp:1558 -msgid "Got synchronization" -msgstr "已同歄" - -#: network/msnnotificationconnection.cpp:1699 -msgid "Authenticating" -msgstr "čŖč­‰äø­" - -#: network/msnnotificationconnection.cpp:1741 -msgid "Received user confirmation" -msgstr "å–å¾—ä½æē”Øč€…ē¢ŗčŖ" - -#: network/msnnotificationconnection.cpp:1752 -msgid "Waiting for contact list..." -msgstr "ē­‰å€™ä½æē”Øč€…åå–®" - -#: network/msnnotificationconnection.cpp:1824 -msgid "Transfer to notification server" -msgstr "å‚³é€åˆ°é€šēŸ„ä¼ŗęœå™Ø" - -#: network/msnnotificationconnection.cpp:1928 -msgid "Authentication failed, please verify your account name and password" -msgstr "čŖč­‰å¤±ę•—ļ¼Œč«‹ē¢ŗčŖę‚Øēš„åø³č™Ÿå’ŒåÆ†ē¢¼" - -#: network/msnnotificationconnection.cpp:2042 -msgid "Connecting..." -msgstr "é€£ē·šäø­..." - -#: network/msnnotificationconnection.cpp:2219 -msgid "KMess received an unknown command from the server: %1" -msgstr "KMess å¾žä¼ŗęœå™Øę”¶åˆ°äø€å€‹ęœŖēŸ„ēš„éŒÆčŖ¤čØŠęÆļ¼š%1" - -#: network/msnnotificationconnection.cpp:2219 -msgid "Developer build warning" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 -msgid "Invalid command syntax" -msgstr "" - -#: network/msnnotificationconnection.cpp:2240 -#: network/msnnotificationconnection.cpp:2243 -#: network/msnnotificationconnection.cpp:2249 -#: network/msnnotificationconnection.cpp:2252 -#: network/msnnotificationconnection.cpp:2264 -#: network/msnnotificationconnection.cpp:2276 -#: network/msnnotificationconnection.cpp:2279 -#: network/msnnotificationconnection.cpp:2297 -#: network/msnnotificationconnection.cpp:2300 -#: network/msnnotificationconnection.cpp:2312 -#: network/msnnotificationconnection.cpp:2315 -#: network/msnnotificationconnection.cpp:2322 -#: network/msnnotificationconnection.cpp:2329 -#: network/msnnotificationconnection.cpp:2341 -#: network/msnnotificationconnection.cpp:2348 -#: network/msnnotificationconnection.cpp:2358 -#: network/msnnotificationconnection.cpp:2373 -#: network/soap/httpsoapconnection.cpp:520 -msgid "There was an internal error in KMess: %1" -msgstr "KMess ęœ‰äø€å€‹å…§éƒØéŒÆčŖ¤ļ¼š%1" - -#: network/msnnotificationconnection.cpp:2243 -msgid "Invalid command parameter" -msgstr "" - -#: network/msnnotificationconnection.cpp:2246 -msgid "The email you have tried to add is not a MSN Messenger account" -msgstr "ä½ åŠ å…„ēš„ email äøę˜Æäø€å€‹ MSN Messenger åø³č™Ÿ" - -#: network/msnnotificationconnection.cpp:2249 -msgid "Domain name missing" -msgstr "" - -#: network/msnnotificationconnection.cpp:2252 -msgid "Already logged in" -msgstr "" - -#: network/msnnotificationconnection.cpp:2255 -msgid "The account name given is invalid" -msgstr "åø³č™Ÿē„”ę•ˆ" - -#: network/msnnotificationconnection.cpp:2258 -msgid "" -"That account name is invalid, or your passport has not been confirmed yet" -msgstr "åø³č™Ÿē„”ę•ˆļ¼Œęˆ–ę‚Øēš„ passport é‚„ęœŖčŖč­‰éŽ" - -#: network/msnnotificationconnection.cpp:2261 -msgid "Your contact list is full" -msgstr "ę‚Øēš„ä½æē”Øč€…åå–®å·²ę»æ" - -#: network/msnnotificationconnection.cpp:2264 -msgid "Invalid SBP parameter" -msgstr "" - -#: network/msnnotificationconnection.cpp:2267 -msgid "This contact is already on your list" -msgstr "ę­¤čÆēµ”äŗŗå·²å­˜åœØę–¼ę‚Øēš„čÆēµ”äŗŗåå–®č£”äŗ†" - -#: network/msnnotificationconnection.cpp:2270 -msgid "This contact is not on your list" -msgstr "ę­¤čÆēµ”äŗŗäø¦äøåœØę‚Øēš„čÆēµ”äŗŗåå–®č£”" - -#: network/msnnotificationconnection.cpp:2273 -msgid "This contact is not online" -msgstr "此聯絔人未上線" - -#: network/msnnotificationconnection.cpp:2276 -msgid "Already in this mode" -msgstr "" - -#: network/msnnotificationconnection.cpp:2279 -#, fuzzy -msgid "Contact is in the opposite list" -msgstr "ę­¤čÆēµ”äŗŗäø¦äøåœØę‚Øēš„čÆēµ”äŗŗåå–®č£”" - -#: network/msnnotificationconnection.cpp:2282 -msgid "Your contact list has too many groups" -msgstr "ę‚Øēš„čÆēµ”äŗŗåå–®ęœ‰å¤Ŗå¤šēš„ē¾¤ēµ„" - -#: network/msnnotificationconnection.cpp:2285 -msgid "This group can't be changed" -msgstr "ę­¤ē¾¤ēµ„ē„”ę³•č®Šę›“" - -#: network/msnnotificationconnection.cpp:2288 -msgid "This group is not empty" -msgstr "ę­¤ē¾¤ēµ„äøę˜Æē©ŗēš„" - -#: network/msnnotificationconnection.cpp:2291 -msgid "" -"The group name is already in use by your Messenger or Hotmail contact list" -msgstr "ę­¤ē¾¤ēµ„åēØ±å·²č¢«ę‚Øēš„ Messenger ꈖ Hotmail čÆēµ”äŗŗåå–®ę‰€ä½æē”Ø" - -#: network/msnnotificationconnection.cpp:2294 -msgid "The group name is too long" -msgstr "ę­¤ē¾¤ēµ„åēØ±å¤Ŗé•·" - -#: network/msnnotificationconnection.cpp:2297 -msgid "Attempted to change group \"0\"" -msgstr "" - -#: network/msnnotificationconnection.cpp:2300 -#, fuzzy -msgid "Invalid Group" -msgstr "é‡ę–°å‘½åę­¤ē¾¤ēµ„(&n)" - -#: network/msnnotificationconnection.cpp:2303 -msgid "Switchboard server failed" -msgstr "äŗ¤ę›ä¼ŗęœå™ØéŒÆčŖ¤" - -#: network/msnnotificationconnection.cpp:2306 -msgid "Transfer to switchboard server failed" -msgstr "å‚³é€åˆ°äŗ¤ę›ä¼ŗęœå™Øē™¼ē”ŸéŒÆčŖ¤" - -#: network/msnnotificationconnection.cpp:2309 -msgid "Direct connection (MSNSLP) error, connection failed" -msgstr "ē›“ęŽ„é€£ēµ (MSNSLP) éŒÆčŖ¤ļ¼Œé€£ēµå¤±ę•—" - -#: network/msnnotificationconnection.cpp:2312 -msgid "Required field missing" -msgstr "" - -#: network/msnnotificationconnection.cpp:2315 -msgid "Not logged in" -msgstr "" - -#: network/msnnotificationconnection.cpp:2319 -msgid "Error accessing contact list, try again later" -msgstr "å­˜å–é€£ēµ”äŗŗęø…å–®éŒÆčŖ¤ć€‚éŽęœƒå…’å†č©¦ć€‚" - -#: network/msnnotificationconnection.cpp:2322 -msgid "Command is disabled" -msgstr "" - -#: network/msnnotificationconnection.cpp:2325 -msgid "Your account is banned." -msgstr "ä½ ēš„åø³č™Ÿč¢«ē¦ę­¢äŗ†ć€‚" - -#: network/msnnotificationconnection.cpp:2329 -#, fuzzy -msgid "Challenge response failed" -msgstr "傳輸失敗" - -#: network/msnnotificationconnection.cpp:2333 -msgid "You're opening sessions too rapidly" -msgstr "ę‚Øé–‹å•ŸēØ‹åŗå¤ŖéŽé »ē¹" - -#: network/msnnotificationconnection.cpp:2336 -msgid "You have too many sessions opened" -msgstr "ę‚Øé–‹å•Ÿå¤Ŗå¤šēØ‹åŗ" - -#: network/msnnotificationconnection.cpp:2341 -msgid "Unexpected command sequence" -msgstr "" - -#: network/msnnotificationconnection.cpp:2344 -msgid "Bad friend name" -msgstr "å£žęœ‹å‹ēš„åēØ±" - -#: network/msnnotificationconnection.cpp:2348 -msgid "Bad CVR data" -msgstr "" - -#: network/msnnotificationconnection.cpp:2353 -msgid "The server reports KMess is flooding it with too many data" -msgstr "ä¼ŗęœå™Øå›žå ± KMess ę¹§å…„å¤Ŗå¤šč³‡ę–™" - -#: network/msnnotificationconnection.cpp:2358 -#, fuzzy -msgid "Authentication ticket was incorrect" -msgstr "čŖč­‰å¤±ę•—" - -#: network/msnnotificationconnection.cpp:2362 -msgid "You can't start a chat with someone while you are invisible." -msgstr "ę‚Øäøčƒ½ä»„éš±å½¢ēš„ē‹€ę…‹é–‹å•Ÿäŗ¤č«‡" - -#: network/msnnotificationconnection.cpp:2365 -msgid "You have a kids passport, you need parental consent to chat online." -msgstr "ę‚Øęœ‰äø€å€‹å—é™ēš„ passport ļ¼Œę‚Øéœ€č¦å®¶é•·ēš„å…čØ±ä¾†äøŠē·ščŠå¤©ć€‚" - -#: network/msnnotificationconnection.cpp:2369 -msgid "Your passport needs to be verified first." -msgstr "ę‚Øēš„ passport éœ€č¦å…ˆē¶“éŽē¢ŗčŖ" - -#: network/msnnotificationconnection.cpp:2373 -msgid "Bad USR ticket" -msgstr "" - -#: network/msnnotificationconnection.cpp:2391 -msgid "KMess - MSN error" -msgstr "KMess - MSN 錯誤" - -#: network/msnnotificationconnection.cpp:2404 -msgid "There was an internal server error" -msgstr "å…§éƒØä¼ŗęœå™Øē™¼ē”ŸéŒÆčŖ¤" - -#: network/msnnotificationconnection.cpp:2414 -msgid "The server is too busy" -msgstr "ä¼ŗęœå™Øåæ™ē¢Œ" - -#: network/msnnotificationconnection.cpp:2419 -msgid "The server is unavailable" -msgstr "ä¼ŗęœå™ØäøåÆē”Ø" - -#: network/msnnotificationconnection.cpp:2422 -msgid "Peer notification server down" -msgstr "é€šēŸ„ä¼ŗęœå™Øå·²é—œę©Ÿ" - -#: network/msnnotificationconnection.cpp:2426 -msgid "The server is going down" -msgstr "ä¼ŗęœå™Øå°‡é—œę©Ÿ" - -#: network/msnnotificationconnection.cpp:2429 -msgid "The server is going down soon" -msgstr "ä¼ŗęœå™Øå³å°‡é—œę©Ÿ" - -#: network/msnnotificationconnection.cpp:2433 -msgid "Write is blocking" -msgstr "Write is blocking" - -#: network/msnnotificationconnection.cpp:2436 -msgid "Session is overloaded" -msgstr "ēØ‹åŗéŽč¼‰" - -#: network/msnnotificationconnection.cpp:2441 -msgid "The server is not available" -msgstr "ä¼ŗęœå™ØäøåÆē”Ø" - -#: network/msnnotificationconnection.cpp:2444 -msgid "Authentication failed" -msgstr "čŖč­‰å¤±ę•—" - -#: network/msnnotificationconnection.cpp:2447 -msgid "Not accepting new principals" -msgstr "äøęŽ„å—ę–°ēš„č¦å‰‡" - -#: network/msnnotificationconnection.cpp:2456 -msgid "KMess received an unknown error message from the server: %1" -msgstr "KMess å¾žä¼ŗęœå™Øę”¶åˆ°äø€å€‹ęœŖēŸ„ēš„éŒÆčŖ¤čØŠęÆļ¼š%1" - -#: network/msnnotificationconnection.cpp:2597 -msgid "Warning: Server closes for maintenance in 1 minute!" -msgstr "č­¦å‘Šļ¼šä¼ŗęœå™ØåœØäø€åˆ†é˜å¾Œå°‡é—œé–‰ē¶­č­·ļ¼" - -#: network/msnnotificationconnection.cpp:2599 -msgid "" -"The MSN Server has reported it will be going down in one minute for " -"maintenance." -msgstr "MSN ä¼ŗęœå™Øå ±å‘ŠčŖŖå°‡åœØäø€åˆ†é˜å¾Œé—œé–‰ē¶­č­·ć€‚" - -#: network/msnnotificationconnection.cpp:2604 -msgid "Warning: Server closes for maintenance in %1 minutes!" -msgstr "č­¦å‘Šļ¼šä¼ŗęœå™Øå°‡åœØ %1 åˆ†é˜å¾Œé—œé–‰ē¶­č­·ļ¼" - -#: network/msnnotificationconnection.cpp:2900 -msgid "Lost reference to SOAP client" -msgstr "" - -#: network/msnnotificationconnection.cpp:2899 -#: network/msnnotificationconnection.cpp:3201 -msgid "" -"KMess could not process Offline-IM messages.\n" -"\n" -"Details: %1" -msgstr "" -"KMess ē„”ę³•é€²č”Œé›¢ē·šå³ę™‚é€ščØŠčØŠęÆć€‚\n" -"\n" -"ē“°ēÆ€ļ¼š%1" - -#: network/msnnotificationconnection.cpp:3209 -msgid "" -"Authentication failed, KMess could not process the passport login.\n" -"\n" -"Details: %1" -msgstr "" -"čŖč­‰å¤±ę•—ć€‚KMess ē„”ę³•é€²č”Œpassport 登兄。\n" -"\n" -"ē“°ēÆ€ļ¼š%1" - -#: network/msnnotificationconnection.cpp:3216 -msgid "" -"KMess could not access the remote webservice.\n" -"\n" -"Details: %1" +msgid "KMess could not access the remote webservice.
Details: %1" msgstr "" "KMess ē„”ę³•é€²č”Œé ē«Æęœå‹™ć€‚\n" "\n" "ē“°ēÆ€ļ¼š%1" -#: network/msnswitchboardconnection.cpp:895 +#: network/msnnotificationconnection.cpp:1317 +#, fuzzy +msgid "" +"

You have been disconnected!

You connected with this account from " +"another Messenger client, or from another location.

" +msgstr "" +"ä½ å·²ē¶“č¢«ę–·ē·šäŗ†ļ¼Œ\n" +"å› ē‚ŗä½ å·²ē¶“ē”Øå¦äø€å€‹ MSN Messenger \n" +"ęˆ–å¾žå¦äø€å€‹åœ°ę–¹ē™»å…„" + +#: network/msnnotificationconnection.cpp:1532 +msgid "Got synchronization" +msgstr "已同歄" + +#: network/msnnotificationconnection.cpp:1670 +#, fuzzy +msgid "Authenticating..." +msgstr "čŖč­‰äø­" + +#: network/msnnotificationconnection.cpp:1719 +msgid "Waiting for contact list..." +msgstr "ē­‰å€™ä½æē”Øč€…åå–®" + +#: network/msnnotificationconnection.cpp:1791 +msgid "Switching to another server..." +msgstr "" + +#: network/msnnotificationconnection.cpp:1894 +#, fuzzy +msgid "Authentication failed, please verify your account name and password." +msgstr "čŖč­‰å¤±ę•—ļ¼Œč«‹ē¢ŗčŖę‚Øēš„åø³č™Ÿå’ŒåÆ†ē¢¼" + +#: network/msnnotificationconnection.cpp:1993 +msgid "Connecting..." +msgstr "é€£ē·šäø­..." + +#: network/msnnotificationconnection.cpp:2167 +#, fuzzy +msgid "Unknown command received from the server: %1" +msgstr "KMess å¾žä¼ŗęœå™Øę”¶åˆ°äø€å€‹ęœŖēŸ„ēš„éŒÆčŖ¤čØŠęÆļ¼š%1" + +#: network/msnnotificationconnection.cpp:2192 +msgid "Invalid command syntax" +msgstr "" + +#: network/msnnotificationconnection.cpp:2196 +msgid "Invalid command parameter" +msgstr "" + +#: network/msnnotificationconnection.cpp:2199 +msgid "The email you have tried to add is not a MSN Messenger account" +msgstr "ä½ åŠ å…„ēš„ email äøę˜Æäø€å€‹ MSN Messenger åø³č™Ÿ" + +#: network/msnnotificationconnection.cpp:2204 +msgid "Domain name missing" +msgstr "" + +#: network/msnnotificationconnection.cpp:2208 +msgid "Already logged in" +msgstr "" + +#: network/msnnotificationconnection.cpp:2211 +msgid "The account name given is invalid" +msgstr "åø³č™Ÿē„”ę•ˆ" + +#: network/msnnotificationconnection.cpp:2215 +msgid "" +"That account name is invalid, or your passport has not been confirmed yet" +msgstr "åø³č™Ÿē„”ę•ˆļ¼Œęˆ–ę‚Øēš„ passport é‚„ęœŖčŖč­‰éŽ" + +#: network/msnnotificationconnection.cpp:2218 +msgid "Your contact list is full" +msgstr "ę‚Øēš„ä½æē”Øč€…åå–®å·²ę»æ" + +#: network/msnnotificationconnection.cpp:2223 +msgid "Invalid SBP parameter" +msgstr "" + +#: network/msnnotificationconnection.cpp:2226 +msgid "This contact is already on your list" +msgstr "ę­¤čÆēµ”äŗŗå·²å­˜åœØę–¼ę‚Øēš„čÆēµ”äŗŗåå–®č£”äŗ†" + +#: network/msnnotificationconnection.cpp:2230 +msgid "This contact is not on your list" +msgstr "ę­¤čÆēµ”äŗŗäø¦äøåœØę‚Øēš„čÆēµ”äŗŗåå–®č£”" + +#: network/msnnotificationconnection.cpp:2234 +msgid "This contact is not online" +msgstr "此聯絔人未上線" + +#: network/msnnotificationconnection.cpp:2239 +msgid "Already in this mode" +msgstr "" + +#: network/msnnotificationconnection.cpp:2243 +#, fuzzy +msgid "Contact is in the opposite list" +msgstr "ę­¤čÆēµ”äŗŗäø¦äøåœØę‚Øēš„čÆēµ”äŗŗåå–®č£”" + +#: network/msnnotificationconnection.cpp:2247 +#, fuzzy +msgid "" +"The group name is already added to your Messenger or Hotmail contact list. " +"Please use a different name." +msgstr "ę­¤ē¾¤ēµ„åēØ±å·²č¢«ę‚Øēš„ Messenger ꈖ Hotmail čÆēµ”äŗŗåå–®ę‰€ä½æē”Ø" + +#: network/msnnotificationconnection.cpp:2251 +msgid "Your contact list has too many groups" +msgstr "ę‚Øēš„čÆēµ”äŗŗåå–®ęœ‰å¤Ŗå¤šēš„ē¾¤ēµ„" + +#: network/msnnotificationconnection.cpp:2255 +msgid "This group can't be changed" +msgstr "ę­¤ē¾¤ēµ„ē„”ę³•č®Šę›“" + +#: network/msnnotificationconnection.cpp:2260 +#, fuzzy +msgid "Contact is not added to this group" +msgstr "ę‚Øēš„čÆēµ”äŗŗåå–®ęœ‰å¤Ŗå¤šēš„ē¾¤ēµ„" + +#: network/msnnotificationconnection.cpp:2264 +msgid "This group is not empty" +msgstr "ę­¤ē¾¤ēµ„äøę˜Æē©ŗēš„" + +#: network/msnnotificationconnection.cpp:2268 +msgid "The group name is too long" +msgstr "ę­¤ē¾¤ēµ„åēØ±å¤Ŗé•·" + +#: network/msnnotificationconnection.cpp:2273 +msgid "Attempted to change group \"0\"" +msgstr "" + +#: network/msnnotificationconnection.cpp:2273 +#: network/soap/httpsoapconnection.cpp:596 +msgid "There was an internal error in KMess: %1" +msgstr "KMess ęœ‰äø€å€‹å…§éƒØéŒÆčŖ¤ļ¼š%1" + +#: network/msnnotificationconnection.cpp:2277 +#, fuzzy +msgid "Invalid Group" +msgstr "é‡ę–°å‘½åę­¤ē¾¤ēµ„(&n)" + +#: network/msnnotificationconnection.cpp:2281 +msgid "Empty domain" +msgstr "" + +#: network/msnnotificationconnection.cpp:2284 +msgid "Switchboard server failed" +msgstr "äŗ¤ę›ä¼ŗęœå™ØéŒÆčŖ¤" + +#: network/msnnotificationconnection.cpp:2287 +msgid "Transfer to switchboard server failed" +msgstr "å‚³é€åˆ°äŗ¤ę›ä¼ŗęœå™Øē™¼ē”ŸéŒÆčŖ¤" + +#: network/msnnotificationconnection.cpp:2291 +msgid "Direct connection (MSNSLP) error, connection failed" +msgstr "ē›“ęŽ„é€£ēµ (MSNSLP) éŒÆčŖ¤ļ¼Œé€£ēµå¤±ę•—" + +#: network/msnnotificationconnection.cpp:2295 +msgid "Required field missing" +msgstr "" + +#: network/msnnotificationconnection.cpp:2299 +msgid "Not logged in" +msgstr "" + +#: network/msnnotificationconnection.cpp:2302 +#, fuzzy +msgid "No permissions given for this account" +msgstr "ēµ¦é€™å€‹åø³č™Ÿē”Øēš„č‡ŖčØ‚č”Øęƒ…ē¬¦č™Ÿļ¼š" + +#: network/msnnotificationconnection.cpp:2307 +msgid "Command is disabled" +msgstr "" + +#: network/msnnotificationconnection.cpp:2310 +msgid "Your account is banned." +msgstr "ä½ ēš„åø³č™Ÿč¢«ē¦ę­¢äŗ†ć€‚" + +#: network/msnnotificationconnection.cpp:2314 +#, fuzzy +msgid "Challenge response failed" +msgstr "傳輸失敗" + +#: network/msnnotificationconnection.cpp:2319 +msgid "Bad command data" +msgstr "" + +#: network/msnnotificationconnection.cpp:2323 +#, fuzzy +msgid "You are opening chat sessions too fast" +msgstr "ę‚Øé–‹å•ŸēØ‹åŗå¤ŖéŽé »ē¹" + +#: network/msnnotificationconnection.cpp:2327 +#, fuzzy +msgid "You have too many open chat sessions" +msgstr "ę‚Øé–‹å•Ÿå¤Ŗå¤šēØ‹åŗ" + +#: network/msnnotificationconnection.cpp:2334 +msgid "Unexpected command sequence" +msgstr "" + +#: network/msnnotificationconnection.cpp:2338 +msgid "Bad friend name" +msgstr "å£žęœ‹å‹ēš„åēØ±" + +#: network/msnnotificationconnection.cpp:2344 +msgid "Bad CVR data" +msgstr "" + +#: network/msnnotificationconnection.cpp:2350 +msgid "The server reports KMess is flooding it with too many data" +msgstr "ä¼ŗęœå™Øå›žå ± KMess ę¹§å…„å¤Ŗå¤šč³‡ę–™" + +#: network/msnnotificationconnection.cpp:2357 +#, fuzzy +msgid "Authentication ticket was incorrect" +msgstr "čŖč­‰å¤±ę•—" + +#: network/msnnotificationconnection.cpp:2360 +msgid "You can't start a chat with someone while you are invisible." +msgstr "ę‚Øäøčƒ½ä»„éš±å½¢ēš„ē‹€ę…‹é–‹å•Ÿäŗ¤č«‡" + +#: network/msnnotificationconnection.cpp:2364 +#, fuzzy +msgid "Not accepting new contacts" +msgstr "äøęŽ„å—ę–°ēš„č¦å‰‡" + +#: network/msnnotificationconnection.cpp:2368 +#, fuzzy +msgid "" +"You have a kids passport account, you need parental consent to chat online." +msgstr "ę‚Øęœ‰äø€å€‹å—é™ēš„ passport ļ¼Œę‚Øéœ€č¦å®¶é•·ēš„å…čØ±ä¾†äøŠē·ščŠå¤©ć€‚" + +#: network/msnnotificationconnection.cpp:2371 +#, fuzzy +msgid "Your passport account needs to be verified first." +msgstr "ę‚Øēš„ passport éœ€č¦å…ˆē¶“éŽē¢ŗčŖ" + +#: network/msnnotificationconnection.cpp:2375 +msgid "Bad USR ticket" +msgstr "" + +#: network/msnnotificationconnection.cpp:2385 +msgid "Error accessing contact list, try again later" +msgstr "å­˜å–é€£ēµ”äŗŗęø…å–®éŒÆčŖ¤ć€‚éŽęœƒå…’å†č©¦ć€‚" + +#: network/msnnotificationconnection.cpp:2399 +#, fuzzy +msgid "" +"The MSN service is temporarily unavailable, there was an internal server " +"error." +msgstr "å…§éƒØä¼ŗęœå™Øē™¼ē”ŸéŒÆčŖ¤" + +#: network/msnnotificationconnection.cpp:2410 +msgid "The MSN service is temporarily unavailable, the server is too busy" +msgstr "" + +#: network/msnnotificationconnection.cpp:2414 +msgid "Peer notification server down" +msgstr "é€šēŸ„ä¼ŗęœå™Øå·²é—œę©Ÿ" + +#: network/msnnotificationconnection.cpp:2418 +msgid "The server is going down" +msgstr "ä¼ŗęœå™Øå°‡é—œę©Ÿ" + +#: network/msnnotificationconnection.cpp:2422 +msgid "The server is going down soon" +msgstr "ä¼ŗęœå™Øå³å°‡é—œę©Ÿ" + +#: network/msnnotificationconnection.cpp:2427 +msgid "Write is blocking" +msgstr "Write is blocking" + +#: network/msnnotificationconnection.cpp:2431 +msgid "Session is overloaded" +msgstr "ēØ‹åŗéŽč¼‰" + +#: network/msnnotificationconnection.cpp:2438 +msgid "The server is not available" +msgstr "ä¼ŗęœå™ØäøåÆē”Ø" + +#: network/msnnotificationconnection.cpp:2442 +msgid "Authentication failed" +msgstr "čŖč­‰å¤±ę•—" + +#: network/msnnotificationconnection.cpp:2449 +#, fuzzy +msgid "Unknown error code received from the server: %1" +msgstr "KMess å¾žä¼ŗęœå™Øę”¶åˆ°äø€å€‹ęœŖēŸ„ēš„éŒÆčŖ¤čØŠęÆļ¼š%1" + +#: network/msnnotificationconnection.cpp:2463 +#: network/msnnotificationconnection.cpp:3214 +#, fuzzy +msgctxt "Error dialog box title" +msgid "MSN error" +msgstr "KMess - MSN 錯誤" + +#: network/msnnotificationconnection.cpp:2596 +#, fuzzy +msgctxt "Time left before server maintenance" +msgid "1 minute" +msgid_plural "%1 minutes" +msgstr[0] "分鐘" +msgstr[1] "分鐘" + +#: network/msnnotificationconnection.cpp:2599 +#, fuzzy +msgid "Server closes for maintenance in %1!" +msgstr "č­¦å‘Šļ¼šä¼ŗęœå™Øå°‡åœØ %1 åˆ†é˜å¾Œé—œé–‰ē¶­č­·ļ¼" + +#: network/msnnotificationconnection.cpp:2604 +#, fuzzy +msgctxt "Server maintenance dialog box text" +msgid "The MSN Server will be going down in %1 for maintenance." +msgstr "MSN ä¼ŗęœå™Øå ±å‘ŠčŖŖå°‡åœØäø€åˆ†é˜å¾Œé—œé–‰ē¶­č­·ć€‚" + +#: network/msnnotificationconnection.cpp:2901 +msgid "Lost reference to SOAP client" +msgstr "" + +#: network/msnnotificationconnection.cpp:2900 +#: network/msnnotificationconnection.cpp:3294 +#, fuzzy +msgid "KMess could not process Offline-IM messages.
Details: %1" +msgstr "" +"KMess ē„”ę³•é€²č”Œé›¢ē·šå³ę™‚é€ščØŠčØŠęÆć€‚\n" +"\n" +"ē“°ēÆ€ļ¼š%1" + +#: network/msnnotificationconnection.cpp:3172 +#, fuzzy +msgid "Authentication time limit exceeded" +msgstr "čŖč­‰å¤±ę•—" + +#: network/msnnotificationconnection.cpp:3218 +#, fuzzy +msgid "
Internal error reason: %1" +msgstr "KMess ęœ‰äø€å€‹å…§éƒØéŒÆčŖ¤ļ¼š%1" + +#: network/msnnotificationconnection.cpp:3242 +#, fuzzy +msgctxt "Login error message, with more details for developer versions" +msgid "" +"

KMess could not connect the the MSN Messenger servers.
There is a " +"problem with your Internet connection, or the MSN Messenger servers may be " +"temporarily unavailable.%1

Show the MSN Messenger Service status page?" +"

" +msgstr "" +"KMess ē„”ę³•é€£ē·šåˆ° MSN Messenger ä¼ŗęœå™Øć€‚MSN Messenger ä¼ŗęœå™ØåÆčƒ½ęš«ę™‚é—œé–‰ļ¼Œęˆ–č€…" +"ä½ ēš„ē¶²éš›ē¶²č·Æé€£ē·šęœ‰å•é”Œć€‚" + +#: network/msnnotificationconnection.cpp:3252 +msgctxt "Server-reported user error dialog box" +msgid "

MSN message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3257 +msgctxt "Server error dialog box" +msgid "

MSN server message

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3262 +msgctxt "Server-reported client error dialog box" +msgid "

Internal error in KMess

%1

" +msgstr "" + +#: network/msnnotificationconnection.cpp:3270 +#, fuzzy +msgctxt "Connection error message, with more details for developer versions" +msgid "

Connection to the MSN server has been lost.%1

" +msgstr "å¤±åŽ»č‡³ä¼ŗęœå™Øēš„é€£ē·š" + +#: network/msnnotificationconnection.cpp:3302 +#, fuzzy +msgid "" +"Authentication failed, KMess could not process the passport login." +"
Details: %1" +msgstr "" +"čŖč­‰å¤±ę•—ć€‚KMess ē„”ę³•é€²č”Œpassport 登兄。\n" +"\n" +"ē“°ēÆ€ļ¼š%1" + +#: network/msnsockethttp.cpp:765 +#, fuzzy +msgid "SSL Error" +msgstr "ä¼ŗęœå™ØéŒÆčŖ¤" + +#: network/msnsockettcp.cpp:352 +#, fuzzy +msgid "Connection time limit exceeded" +msgstr "é€£ē·šé€¾ę™‚" + +#: network/msnsockettcp.cpp:368 +msgid "1 ping lost" +msgstr "1 ping lost" + +#: network/msnsockettcp.cpp:372 +msgid "%1 pings lost" +msgstr "%1 pings lost" + +#: network/msnsockettcp.cpp:387 +msgid "The connection to the server was lost." +msgstr "å¤±åŽ»č‡³ä¼ŗęœå™Øēš„é€£ē·š" + +#: network/msnswitchboardconnection.cpp:963 msgid "This person is offline or invisible." msgstr "ę­¤äŗŗé›¢ē·šęˆ–éš±å½¢" -#: network/msnswitchboardconnection.cpp:1049 +#: network/msnswitchboardconnection.cpp:1117 msgid "The contact initiated a MSN7 feature KMess can't handle yet." msgstr "此聯絔人使用了一個 KMess ē„”ę³•č™•ē†ēš„ MSN7 特色" -#: network/msnswitchboardconnection.cpp:1622 +#: network/msnswitchboardconnection.cpp:1802 +#: network/msnswitchboardconnection.cpp:1931 msgid "The message \"%1\" was not received!" msgstr "訊息 \"%1\" ę²’ęœ‰č¢«ę”¶åˆ°" -#: network/soap/httpsoapconnection.cpp:494 +#: network/soap/httpsoapconnection.cpp:553 msgid "Unable to make a connection: %1" msgstr "ē„”ę³•å° %1 連結" -#: network/soap/httpsoapconnection.cpp:521 +#: network/soap/httpsoapconnection.cpp:597 msgid "Unable to parse SOAP response" msgstr "" -#: network/soap/passportloginservice.cpp:173 +#: network/soap/passportloginservice.cpp:219 msgid "Too many redirects by login service" msgstr "ē™»å…„ęœå‹™ęœ‰å¤Ŗå¤šé‡ę–°å°Žå‘" -#: notification/notificationchat.cpp:173 -msgid "In %1's chat: %2" +#: notification/chatnotification.cpp:163 +#, fuzzy +msgid "In %1's chat: %2" msgstr "在 %1 ēš„äŗ¤č«‡ļ¼š%2" -#: notification/notificationchat.cpp:177 -msgid "%1 says:
'%2'" +#: notification/chatnotification.cpp:167 +#, fuzzy +msgid "%1 says:
'%2'" msgstr "%1說:
'%2'" -#: notification/notificationchat.cpp:181 -msgid "%1 has sent you an offline message:
'%2'" +#: notification/chatnotification.cpp:171 +#, fuzzy +msgid "%1 has sent you an offline message:
'%2'" msgstr "%1 å‚³é€äø€å€‹é›¢ē·ščØŠęÆļ¼š
'%2'" -#: notification/notificationchat.cpp:188 -msgid "%1's chat requests attention!" +#: notification/chatnotification.cpp:178 +#, fuzzy +msgid "%1's chat requests attention!" msgstr "%1 ēš„äŗ¤č«‡éœ€č¦ę³Øę„ļ¼" -#: notification/notificationchat.cpp:193 -msgid "%1:
%2" +#: notification/chatnotification.cpp:183 +#, fuzzy +msgid "%1:
%2" msgstr "%1:
%2" -#: notification/notificationchat.cpp:200 +#: notification/chatnotification.cpp:190 #, fuzzy -msgid "%1 has sent you a handwritten message!" +msgid "%1 has sent you a handwritten message!" msgstr "%1å‚³é€äŗ†äø€å€‹ä¾†é›»ęŒÆå‹•ēµ¦ä½ " -#: notification/notificationchat.cpp:204 -msgid "%1 has sent you a nudge!" +#: notification/chatnotification.cpp:194 +#, fuzzy +msgid "%1 has sent you a nudge!" msgstr "%1å‚³é€äŗ†äø€å€‹ä¾†é›»ęŒÆå‹•ēµ¦ä½ " -#: notification/notificationchat.cpp:208 -msgid "%1 has sent you a wink!" +#: notification/chatnotification.cpp:198 +#, fuzzy +msgid "%1 has sent you a wink!" msgstr "%1å‚³é€äŗ†äø€å€‹å‹•ē•«åœ–ē¤ŗēµ¦ä½ ļ¼" -#: notification/notificationchat.cpp:214 -msgid "%1 wants to use the webcam!" +#: notification/chatnotification.cpp:204 +#, fuzzy +msgid "%1 wants to use the webcam!" msgstr "%1ęƒ³č¦ä½æē”Øē¶²č·Æę”å½±ę©Ÿļ¼" -#: notification/notificationchat.cpp:215 -msgid "%1 is sending you a file!" +#: notification/chatnotification.cpp:205 +#, fuzzy +msgid "%1 is sending you a file!" msgstr "%1 å‚³é€ēµ¦ä½ äø€å€‹ęŖ”ę”ˆļ¼" -#: notification/notificationchat.cpp:216 -msgid "%1 has sent you an invitation!" +#: notification/chatnotification.cpp:206 +#, fuzzy +msgid "%1 has sent you an invitation!" msgstr "%1 傳送給你一個邀請!" -#: notification/notificationchat.cpp:223 -msgid "%1 has canceled the webcam session!" +#: notification/chatnotification.cpp:213 +#, fuzzy +msgid "%1 has canceled the webcam session!" msgstr "%1 å–ę¶ˆäŗ†ē¶²č·Æę”å½±ę©ŸēØ‹åŗ" -#: notification/notificationchat.cpp:224 -msgid "%1 has canceled the file transfer!" +#: notification/chatnotification.cpp:214 +#, fuzzy +msgid "%1 has canceled the file transfer!" msgstr "%1å–ę¶ˆäŗ†ęŖ”ę”ˆå‚³č¼øļ¼" -#: notification/notificationchat.cpp:225 -msgid "%1's activity has been canceled!" +#: notification/chatnotification.cpp:215 +#, fuzzy +msgid "%1's activity has been canceled!" msgstr "%1 ēš„č”Œå‹•č¢«å–ę¶ˆļ¼" -#: notification/notificationchat.cpp:232 -msgid "%1 has accepted to use the webcam!" +#: notification/chatnotification.cpp:222 +#, fuzzy +msgid "%1 has accepted to use the webcam!" msgstr "%1 ęŽ„å—ä½æē”Øē¶²č·Æę”å½±ę©Ÿļ¼" -#: notification/notificationchat.cpp:233 -msgid "%1 has accepted the file transfer!" +#: notification/chatnotification.cpp:223 +#, fuzzy +msgid "%1 has accepted the file transfer!" msgstr "%1 ęŽ„å—ęŖ”ę”ˆå‚³č¼øļ¼" -#: notification/notificationchat.cpp:234 -msgid "%1 has accepted your invitation!" +#: notification/chatnotification.cpp:224 +#, fuzzy +msgid "%1 has accepted your invitation!" msgstr "%1 ęŽ„å—ä½ ēš„é‚€č«‹ļ¼" -#: notification/notificationchat.cpp:241 -msgid "%1 has ended the webcam session!" +#: notification/chatnotification.cpp:231 +#, fuzzy +msgid "%1 has ended the webcam session!" msgstr "%1ēµęŸäŗ†ē¶²č·Æę”å½±ę©ŸēØ‹åŗļ¼" -#: notification/notificationchat.cpp:242 -msgid "The file transfer with %1 is done!" +#: notification/chatnotification.cpp:232 +#, fuzzy +msgid "The file transfer with %1 is done!" msgstr "與%1ēš„ęŖ”ę”ˆå‚³č¼øå®Œęˆļ¼" -#: notification/notificationchat.cpp:243 -msgid "%1's activity has ended!" +#: notification/chatnotification.cpp:233 +#, fuzzy +msgid "%1's activity has ended!" msgstr "%1ēš„č”Œå‹•å·²ēµęŸļ¼" -#: notification/notificationchat.cpp:250 -msgid "%1's webcam session has failed!" +#: notification/chatnotification.cpp:240 +#, fuzzy +msgid "%1's webcam session has failed!" msgstr "%1ēš„ē¶²č·Æę”å½±ę©ŸēØ‹åŗå¤±ę•—ļ¼" -#: notification/notificationchat.cpp:251 -msgid "The file transfer with %1 has failed!" +#: notification/chatnotification.cpp:241 +#, fuzzy +msgid "The file transfer with %1 has failed!" msgstr "與%1 ēš„ęŖ”ę”ˆå‚³č¼øå¤±ę•—ļ¼" -#: notification/notificationchat.cpp:252 -msgid "%1's activity has ended with an error!" +#: notification/chatnotification.cpp:242 +#, fuzzy +msgid "%1's activity has ended with an error!" msgstr "%1ēš„č”Œå‹•éŒÆčŖ¤ēµęŸļ¼" -#: notification/notificationcontactstatus.cpp:75 -#: notification/notificationcontactstatus.cpp:86 -msgid "%1 is now online" +#: notification/contactstatusnotification.cpp:70 +#, fuzzy +msgid "%1 is now online" msgstr "%1 正在線上" -#: notification/notificationcontactstatus.cpp:76 -msgid "%1 has gone away" +#: notification/contactstatusnotification.cpp:71 +#, fuzzy +msgid "%1 has gone away" msgstr "%1 已經走了" -#: notification/notificationcontactstatus.cpp:77 -msgid "%1 will be right back" +#: notification/contactstatusnotification.cpp:72 +#, fuzzy +msgid "%1 will be right back" msgstr "%1 é¦¬äøŠå›žä¾†" -#: notification/notificationcontactstatus.cpp:78 -msgid "%1 is now busy" +#: notification/contactstatusnotification.cpp:73 +#, fuzzy +msgid "%1 is now busy" msgstr "%1 ē¾åœØę­£åæ™" -#: notification/notificationcontactstatus.cpp:79 -msgid "%1 has become invisible" +#: notification/contactstatusnotification.cpp:74 +#, fuzzy +msgid "%1 has become invisible" msgstr "%1 å·²ē¶“éš±čŗ«" -#: notification/notificationcontactstatus.cpp:80 -msgid "%1 has gone idle" +#: notification/contactstatusnotification.cpp:75 +#, fuzzy +msgid "%1 has gone idle" msgstr "%1 發呆" -#: notification/notificationcontactstatus.cpp:81 -msgid "%1 has logged out" +#: notification/contactstatusnotification.cpp:76 +#, fuzzy +msgid "%1 has logged out" msgstr "%1 已經登出" -#: notification/notificationcontactstatus.cpp:82 -msgid "%1 is on the phone" +#: notification/contactstatusnotification.cpp:77 +#, fuzzy +msgid "%1 is on the phone" msgstr "%1 ę­£åœØč¬›é›»č©±" -#: notification/notificationcontactstatus.cpp:83 -msgid "%1 is out for lunch" +#: notification/contactstatusnotification.cpp:78 +#, fuzzy +msgid "%1 is out for lunch" msgstr "%1 外出用餐" -#: notification/notificationnewemail.cpp:75 -msgid "New email:
'%1'
by '%2'" +#: notification/newemailnotification.cpp:78 +#, fuzzy +msgid "New email:
'%1'
by '%2'" msgstr "ꖰ email
'%2' ä¾†ēš„
'%1'" -#: settings/accountswidget.cpp:81 +#: settings/accountpage.cpp:69 msgid "Browse..." msgstr "" -#: settings/accountswidget.cpp:82 -msgid "Browse and crop image..." +#: settings/accountpage.cpp:70 +#, fuzzy +msgid "Browse and crop picture..." msgstr "ē€č¦½äø¦å‰Ŗč£å½±åƒ..." -#: settings/accountswidget.cpp:404 -msgid "Display Picture" -msgstr "é”Æē¤ŗåœ–ē‰‡" +#: settings/accountpage.cpp:71 +msgid "Set previous image..." +msgstr "" -#: settings/accountswidget.cpp:422 -msgid "Downloading of display image failed" +#: settings/accountpage.cpp:448 +#, fuzzy +msgid "Downloading of display picture failed" msgstr "äø‹č¼‰åœ–ē‰‡å¤±ę•—" -#: settings/accountswidget.cpp:461 +#: settings/accountpage.cpp:507 +#, fuzzy msgid "" "An error occurred when trying to change the display picture.\n" -"Make sure that you have selected a correct image file" +"Make sure that you have selected an existing picture file." msgstr "" "å˜—č©¦ę”¹č®Šåœ–ē‰‡ę™‚ē™¼ē”ŸéŒÆčŖ¤ć€‚\n" "č«‹ē¢ŗå®šę‚Øéøę“‡äŗ†ę­£ē¢ŗēš„åœ–ē‰‡ęŖ”ę”ˆć€‚" -#: settings/chatstylepage.cpp:315 -msgid "Hi, how are you doing? :)" -msgstr "å—Øļ¼ä½ å„½å—Žļ¼Ÿ" - -#: settings/chatstylepage.cpp:316 -msgid "Stacy" -msgstr "č·³čˆžäæ " - -#: settings/chatstylepage.cpp:317 -msgid "Great!" -msgstr "å„½å•Šļ¼" - -#: settings/chatstylepage.cpp:319 -msgid "I /just/ got back from my vacation in Italy!" -msgstr "ꈑꉍ /剛從/ ē¾©å¤§åˆ©ęø”å‡å›žä¾†ļ¼" - -#: settings/emoticonwidget.cpp:126 -msgid "Replace Existing Emoticon" -msgstr "" - -#: settings/settingsdialog.cpp:53 +#: settings/accountsettingsdialog.cpp:56 #, fuzzy msgid "&Delete" msgstr "åˆŖé™¤ę­¤čÆēµ”äŗŗ(&D)" -#: settings/settingsdialog.cpp:55 +#: settings/accountsettingsdialog.cpp:58 settings/globalsettingsdialog.cpp:65 +#: settings/globalsettingsdialog.cpp:66 msgid "Settings" msgstr "設定" -#: settings/settingsdialog.cpp:73 +#: settings/accountsettingsdialog.cpp:75 msgid "Account" msgstr "åø³č™Ÿ" -#: settings/settingsdialog.cpp:74 +#: settings/accountsettingsdialog.cpp:76 #, fuzzy msgid "My Account" msgstr "åø³č™Ÿ" -#: settings/settingsdialog.cpp:81 +#: settings/accountsettingsdialog.cpp:80 msgid "Alerts" msgstr "č­¦å‘Š" -#: settings/settingsdialog.cpp:82 +#: settings/accountsettingsdialog.cpp:81 #, fuzzy msgid "Alerts and Notifications" msgstr "KMess ęē¤ŗ" -#: settings/settingsdialog.cpp:89 settings/settingsdialog.cpp:90 +#: settings/accountsettingsdialog.cpp:92 settings/accountsettingsdialog.cpp:93 msgid "Chatting" msgstr "交談" -#: settings/settingsdialog.cpp:93 settings/settingsdialog.cpp:94 +#: settings/accountsettingsdialog.cpp:98 settings/accountsettingsdialog.cpp:99 msgid "Chat Logging" msgstr "äŗ¤č«‡ē“€éŒ„" -#: settings/settingsdialog.cpp:232 +#: settings/accountsettingsdialog.cpp:193 +#, fuzzy +msgid "" +"The email address you have entered is not valid, and cannot be used as an " +"account: '%1'" +msgstr "ä½ č¼øå…„ēš„é€£ēµ”ä½å€äøåˆę³•ļ¼š%1" + +#: settings/accountsettingsdialog.cpp:201 +#, fuzzy +msgid "The email address you have entered is already in use: '%1'" +msgstr "ä½ č¼øå…„ēš„é€£ēµ”ä½å€äøåˆę³•ļ¼š%1" + +#: settings/accountsettingsdialog.cpp:272 msgid "Are you sure you want to delete this account?" msgstr "ę‚Øē¢ŗå®šč¦åˆŖé™¤ę­¤åø³č™Ÿļ¼Ÿ" -#: systemtraywidget.cpp:65 +#: settings/accountsmanagerpage.cpp:132 +#, fuzzy +msgid "" +"Are you sure you want to delete the account '%1' ?
All settings of this " +"account will be lost." +msgstr "ę‚Øē¢ŗå®šč¦åˆŖé™¤ę­¤åø³č™Ÿļ¼Ÿ" + +#: settings/chatstylepage.cpp:339 +msgid "Hi, how are you doing? :)" +msgstr "å—Øļ¼ä½ å„½å—Žļ¼Ÿ" + +#: settings/chatstylepage.cpp:340 +msgid "Stacy" +msgstr "č·³čˆžäæ " + +#: settings/chatstylepage.cpp:341 +msgid "Great!" +msgstr "å„½å•Šļ¼" + +#: settings/chatstylepage.cpp:343 +msgid "I /just/ got back from my vacation in Italy!" +msgstr "ꈑꉍ /剛從/ ē¾©å¤§åˆ©ęø”å‡å›žä¾†ļ¼" + +#: settings/emoticonspage.cpp:122 +msgid "Replace Existing Emoticon" +msgstr "" + +#: settings/globalsettingsdialog.cpp:45 +#, fuzzy +msgid "KMess Settings" +msgstr "設定" + +#: settings/globalsettingsdialog.cpp:57 settings/globalsettingsdialog.cpp:58 +msgid "Accounts" +msgstr "åø³č™Ÿ" + +#: settings/globalsettingsdialog.cpp:61 settings/globalsettingsdialog.cpp:63 +#, fuzzy +msgid "Notification" +msgstr "é›»å­éƒµä»¶ęē¤ŗ" + +#: settings/miscellaneouspage.cpp:72 +msgid "No selectable browsers detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:99 +msgid "No selectable e-mail clients detected." +msgstr "" + +#: settings/miscellaneouspage.cpp:284 +msgid "You have to select a command to run as custom browser!" +msgstr "" + +#: settings/miscellaneouspage.cpp:289 +#, c-format +msgid "" +"The command you selected to run as custom browser does not contain the " +"'%u' parameter. Without this, opening Web sites will not work.
Do you " +"want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:314 +msgid "You have to select a command to run as custom email client!" +msgstr "" + +#: settings/miscellaneouspage.cpp:319 +#, c-format +msgid "" +"The command you selected to run as custom email client does not " +"contain the '%u' parameter. Without this, composing mail will not work.
Do you want KMess to add it for you?" +msgstr "" + +#: settings/miscellaneouspage.cpp:342 +msgid "You have to select a directory for the received files!" +msgstr "" + +#: settings/miscellaneouspage.cpp:404 +#, fuzzy +msgid "Select Files Directory" +msgstr "å„²å­˜čŠå¤©å…§å®¹č‡³äøŠäø€å±¤ē›®éŒ„" + +#: systemtraywidget.cpp:64 msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'File' menu to quit the application." msgstr "" "é—œé–‰äø»č¦–ēŖ—ļ¼ŒKMess å°‡ęœƒåœØē³»ēµ±åˆ—ē¹¼ēŗŒåŸ·č”Œć€‚ä½æē”Øć€ŒęŖ”ę”ˆć€äø­ēš„ć€ŒēµęŸć€ä¾†ēµęŸēØ‹å¼ć€‚" -#: systemtraywidget.cpp:76 systemtraywidget.cpp:156 +#: systemtraywidget.cpp:75 systemtraywidget.cpp:163 systemtraywidget.cpp:173 msgid "Docking in System Tray" msgstr "ēø®å°åˆ°ē³»ēµ±åˆ—" -#: systemtraywidget.cpp:226 +#: systemtraywidget.cpp:242 msgid "
%1 (%2)" msgstr "
%1 (%2)" +#: systemtraywidget.cpp:245 +#, fuzzy +msgid "- %1 (%2)" +msgstr "%1 %2" + +#~ msgid "Click to send an email to this contact." +#~ msgstr "ęŒ‰é€™č£”ä¾†å‚³é€ email 給這個連絔人" + +#~ msgid "Picture:" +#~ msgstr "åœ–ē‰‡ļ¼š" + +#, fuzzy +#~ msgid "Login Information" +#~ msgstr "é”Æē¤ŗé›»å­éƒµä»¶č³‡čØŠ" + +#~ msgid "Logging in..." +#~ msgstr "登兄中..." + +#~ msgid "" +#~ "Allows you to choose which e-mail program KMess should open to view e-" +#~ "mail messages." +#~ msgstr "允許你選擇 KMess č©²é–‹å•Ÿēš„ e-mail č»Ÿé«”ä¾†ęŖ¢č¦– e-mail" + +#~ msgid "Use a specified command:" +#~ msgstr "ä½æē”Øē‰¹å®šēš„ęŒ‡ä»¤" + +#~ msgid "This account does not have an Hotmail inbox!" +#~ msgstr "é€™å€‹åø³č™Ÿäø¦ę²’ęœ‰ Hotmail" + +#, fuzzy +#~ msgid "Email: " +#~ msgstr "Email" + +#~ msgid "Remove group" +#~ msgstr "åˆŖé™¤ē¾¤ēµ„" + +#, fuzzy +#~ msgid "Show &Display Pictures" +#~ msgstr "é”Æē¤ŗåœ–ē‰‡" + +#~ msgid "You have 1 new e-mail in your inbox." +#~ msgstr "ä½ ęœ‰äø€å°ę–°éƒµä»¶åœØę”¶ä»¶å¤¾č£”" + +#~ msgid "You have %1 new emails in your inbox." +#~ msgstr "ä½ ęœ‰ %1 å°ę–°éƒµä»¶åœØę”¶ä»¶å¤¾č£”" + +#, fuzzy +#~ msgid "Guido Solinas" +#~ msgstr "上線(&G)" + +#~ msgid "The transfer of %1 failed. Couldn't open file" +#~ msgstr "%1 ēš„å‚³č¼øå¤±ę•—ć€‚ē„”ę³•é–‹å•ŸęŖ”ę”ˆ" + +#, fuzzy +#~ msgid "Sidebar" +#~ msgstr "偓邊列" + +#, fuzzy +#~ msgid "New contact's group" +#~ msgstr "ę–°å¢žčÆēµ”äŗŗ(&C)" + +#~ msgid "Enter your login information:" +#~ msgstr "č«‹č¼øå…„ä½ ēš„ē™»å…„čØŠęÆļ¼š" + +#~ msgid "Your friendly name:" +#~ msgstr "ä½ ēš„åēØ±" + +#, fuzzy +#~ msgid "Your email address:" +#~ msgstr "é›»å­éƒµä»¶ļ¼š" + +#~ msgid "Your password:" +#~ msgstr "ä½ ēš„åÆ†ē¢¼" + +#~ msgid "Display picture:" +#~ msgstr "é”Æē¤ŗåœ–ē‰‡ļ¼š" + +#~ msgid "Don't show a displa&y picture" +#~ msgstr "äøé”Æē¤ŗåœ–ē‰‡(&y)" + +#~ msgid "Status to set at login:" +#~ msgstr "ē™»å…„ę™‚čØ­å®šēš„ē‹€ę…‹ļ¼š" + +#~ msgid "Show notifications when you recei&ve an email" +#~ msgstr "ē•¶ä½ ę”¶åˆ°äø€å° email ę™‚ļ¼Œé”Æē¤ŗé€šēŸ„" + +#~ msgid "Organize chat folders by:" +#~ msgstr "ä»„ä½•ēØ®ę–¹å¼ęŽ’åˆ—čŠå¤©ē“€éŒ„č³‡ę–™å¤¾ļ¼š" + +#~ msgid "&Show graphics in chat messages" +#~ msgstr "åœØčŠå¤©čØŠęÆäø­é”Æē¤ŗåœ–ē¤ŗ(&S)" + +#~ msgid "Use Hotmail" +#~ msgstr "使用 Hotmail" + +#~ msgid "says:" +#~ msgstr "說:" + +#~ msgid "Current name: " +#~ msgstr "ē›®å‰ēš„åēØ±" + +#, fuzzy +#~ msgid "" +#~ "KMess could not connect to the MSN Messenger service.\n" +#~ "Please, be sure to be connected to the internet.\n" +#~ "reason: %1." +#~ msgstr "" +#~ "KMess ē„”ę³•é€£ēµåˆ° MSN Messenger ęœå‹™ć€‚\n" +#~ "č«‹ē¢ŗčŖęœ‰é€£ęŽ„åˆ°ē¶²éš›ē¶²č·Æć€‚\n" +#~ "系統錯誤:%1 (錯誤碼 %2)" + +#~ msgid "The remote server has closed the connection." +#~ msgstr "é ē«Æä¼ŗęœå™Øå·²é—œé–‰é€£ē·š" + +#~ msgid "Show MSN Messenger Service status?" +#~ msgstr "锯示 MSN Messenger ęœå‹™ē‹€ę…‹ļ¼Ÿ" + +#~ msgid "Received user confirmation" +#~ msgstr "å–å¾—ä½æē”Øč€…ē¢ŗčŖ" + +#~ msgid "Transfer to notification server" +#~ msgstr "å‚³é€åˆ°é€šēŸ„ä¼ŗęœå™Ø" + +#~ msgid "The server is too busy" +#~ msgstr "ä¼ŗęœå™Øåæ™ē¢Œ" + +#~ msgid "The server is unavailable" +#~ msgstr "ä¼ŗęœå™ØäøåÆē”Ø" + +#~ msgid "KMess received an unknown error message from the server: %1" +#~ msgstr "KMess å¾žä¼ŗęœå™Øę”¶åˆ°äø€å€‹ęœŖēŸ„ēš„éŒÆčŖ¤čØŠęÆļ¼š%1" + +#~ msgid "Warning: Server closes for maintenance in 1 minute!" +#~ msgstr "č­¦å‘Šļ¼šä¼ŗęœå™ØåœØäø€åˆ†é˜å¾Œå°‡é—œé–‰ē¶­č­·ļ¼" + #~ msgid "Add contact" #~ msgstr "ę–°å¢žčÆēµ”äŗŗ" @@ -3419,9 +4261,6 @@ msgstr "
%1 (%2)" #~ msgid "KMess Notification" #~ msgstr "é›»å­éƒµä»¶ęē¤ŗ" -#~ msgid "Accounts" -#~ msgstr "åø³č™Ÿ" - #~ msgid "" #~ msgstr "<åœØę­¤č¼øå…„ä½ ēš„å€‹äŗŗčØŠęÆ>" @@ -3439,9 +4278,6 @@ msgstr "
%1 (%2)" #~ "_ļ¼šč­Æč€…ēš„é›»å­éƒµä»¶\n" #~ "ä½ ēš„é›»å­éƒµä»¶" -#~ msgid "Insert an emoticon" -#~ msgstr "ę’å…„č”Øęƒ…ē¬¦č™Ÿ" - #~ msgid "Show/Hide &Contact Sidebar" #~ msgstr "锯示/éš±č— čÆēµ”äŗŗē‹€ę…‹åˆ—(&C)" @@ -3475,18 +4311,9 @@ msgstr "
%1 (%2)" #~ msgid "(On the Phone)" #~ msgstr "(噓...電話中)" -#~ msgid "Connection timeout" -#~ msgstr "é€£ē·šé€¾ę™‚" - #~ msgid "The current status of your contact." #~ msgstr "ä½ é€£ēµ”äŗŗē›®å‰ēš„ē‹€ę…‹ć€‚" -#~ msgid "Connect" -#~ msgstr "é€£ē·š" - -#~ msgid "Listening to %1" -#~ msgstr "正聆聽 %1" - #, fuzzy #~ msgid "The contact is listening to music" #~ msgstr "ę­¤čÆēµ”äŗŗäø¦äøåœØę‚Øēš„čÆēµ”äŗŗåå–®č£”" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b3d431a..b1644a8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,19 +3,18 @@ INCLUDE_DIRECTORIES( ${KDE4_INCLUDES} ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ) ########### next target ############### -SET(kmess_SOURCES +SET(kmess_SOURCES chat/chatmaster.cpp chat/chatmessagestyle.cpp chat/chatmessageview.cpp chat/chatview.cpp + chat/chat.cpp chat/chatwindow.cpp - chat/chatwindowinterface.cpp chat/contactaction.cpp chat/contactframe.cpp chat/contactsidebar.cpp - chat/emoticonbutton.cpp chat/emoticonsidebar.cpp - chat/websidebar.cpp + chat/inkedit.cpp chat/xsltransformation.cpp contact/contactbase.cpp contact/contact.cpp @@ -31,13 +30,16 @@ SET(kmess_SOURCES dialogs/awaymessagedialog.cpp dialogs/contactaddeduserdialog.cpp dialogs/contactpropertiesdialog.cpp - dialogs/networkwindow.cpp + dialogs/userpicturesdialog.cpp dialogs/transferentry.cpp dialogs/transferwindow.cpp network/chatinformation.cpp network/chatmessage.cpp network/mimemessage.cpp network/msnchallengehandler.cpp + network/msnsocketbase.cpp + network/msnsockettcp.cpp + network/msnsockethttp.cpp network/msnconnection.cpp network/msnnotificationconnection.cpp network/msnswitchboardconnection.cpp @@ -51,6 +53,7 @@ SET(kmess_SOURCES network/applications/inktransferp2p.cpp network/applications/mimeapplication.cpp network/applications/msnremotedesktop.cpp + network/applications/p2papplicationbase.cpp network/applications/p2papplication.cpp network/applications/msnobjecttransferp2p.cpp network/applications/sipconnection.cpp @@ -82,23 +85,29 @@ SET(kmess_SOURCES notification/passivepopupview.cpp notification/passivepopupwidget.cpp settings/accountpage.cpp + settings/accountsettingsdialog.cpp + settings/accountsmanagerpage.cpp settings/alertspage.cpp settings/chatloggingpage.cpp settings/chatstylepage.cpp - settings/emailpage.cpp settings/emoticonspage.cpp - settings/settingsdialog.cpp + settings/globalsettingsdialog.cpp + settings/miscellaneouspage.cpp utils/crashhandler.cpp utils/idletimer.cpp + utils/kmessconfig.cpp + utils/kmessdbus.cpp + utils/kmessshared.cpp utils/nowlisteningclient.cpp + utils/richtextparser.cpp utils/thumbnailprovider.cpp utils/xautolock.cpp utils/xmlfunctions.cpp account.cpp accountaction.cpp - autologinview.cpp - binreloc.c + accountsmanager.cpp contactlistviewdelegate.cpp + contactlistmodelfilter.cpp currentaccount.cpp emoticon.cpp emoticonmanager.cpp @@ -115,11 +124,12 @@ SET(kmess_SOURCES ) SET(kmess_UI_FILES - autologinview.ui initialview.ui kmessview.ui chat/chatview.ui + chat/chatwindow.ui chat/contactframe.ui + chat/inkedit.ui dialogs/addcontactdialog.ui dialogs/addemoticondialog.ui dialogs/awaymessagedialog.ui @@ -127,29 +137,60 @@ SET(kmess_UI_FILES dialogs/transferentry.ui dialogs/transferwindow.ui dialogs/contactpropertiesdialog.ui + dialogs/userpicturesdialog.ui notification/passivepopupview.ui settings/accountpage.ui + settings/accountsmanagerpage.ui settings/alertspage.ui settings/chatloggingpage.ui settings/chatstylepage.ui - settings/emailpage.ui settings/emoticonspage.ui + settings/miscellaneouspage.ui ) +SET(kmess_LIBS + ${KDE4_KDECORE_LIBS} + ${KDE4_KDEUI_LIBS} + ${KDE4_KIO_LIBS} + ${KDE4_KHTML_LIBS} + ${KDE4_KNOTIFYCONFIG_LIBS} + ${LIBXML2_LIBRARIES} + ${LIBXSLT_LIBRARIES} +) + +# If we're compiling in debug mode: +IF( ${KMESS_ENABLE_DEBUG_OUTPUT} ) + # Enable the Network Window + SET(kmess_SOURCES ${kmess_SOURCES} dialogs/networkwindow.cpp) + SET(kmess_UI_FILES ${kmess_UI_FILES} dialogs/networkwindow.ui) + # Enable the Models tester + IF( CMAKE_BUILD_TYPE STREQUAL debugfull ) + SET( kmess_SOURCES ${kmess_SOURCES} ../tests/modeltest/modeltest.cpp ) + ENDIF( CMAKE_BUILD_TYPE STREQUAL debugfull ) +ENDIF( ${KMESS_ENABLE_DEBUG_OUTPUT} ) + +# Enable BinReloc for Autopackage support. Also requires libpthread +IF( UNIX AND KMESS_ENABLE_BINRELOC EQUAL 1 ) + SET(kmess_SOURCES ${kmess_SOURCES} binreloc.c) + SET(kmess_LIBS ${kmess_LIBS} pthread) +ENDIF( UNIX AND KMESS_ENABLE_BINRELOC EQUAL 1 ) + +# Add XScreensaver library for away-idle detection. +IF( X11_Xscreensaver_FOUND ) + SET(kmess_LIBS ${kmess_LIBS} ${X11_Xscreensaver_LIB}) +ENDIF( X11_Xscreensaver_FOUND ) + +# Define the app icon for Windows / Mac OS +KDE4_ADD_APP_ICON( kmess_SOURCES ../data/icons/hi*-app-kmess.png ) + +# Define DBus adaptor for org.kmess.remoteControl +QT4_ADD_DBUS_ADAPTOR( kmess_SOURCES utils/kmessdbus.xml utils/kmessdbus.h KMessDBus ) + # Define all files KDE4_ADD_UI_FILES( kmess_SOURCES ${kmess_UI_FILES} ) KDE4_ADD_EXECUTABLE( kmess ${kmess_SOURCES} ) # Link to final executable -# the pthread is required for Autopackage/BinReloc -TARGET_LINK_LIBRARIES( kmess - ${KDE4_KDECORE_LIBS} - ${KDE4_KDEUI_LIBS} - ${KDE4_KIO_LIBS} - ${KDE4_KHTML_LIBS} - ${LIBXML2_LIBRARIES} - ${LIBXSLT_LIBRARIES} - ${X11_Xscreensaver_LIB} - pthread ) +TARGET_LINK_LIBRARIES( kmess ${kmess_LIBS} ) INSTALL( TARGETS kmess DESTINATION ${BIN_INSTALL_DIR}) diff --git a/src/account.cpp b/src/account.cpp index 898d2c8..92e3784 100644 --- a/src/account.cpp +++ b/src/account.cpp @@ -17,17 +17,16 @@ #include "account.h" -#include "kmessdebug.h" #include "contact/msnobject.h" +#include "utils/kmessconfig.h" +#include "accountsmanager.h" +#include "kmessdebug.h" #include #include -#include #include -#include -#include #include #include #include @@ -45,7 +44,7 @@ Account::Account() : autoreplyMessage_( i18n("I'm away from my computer") ), chatStyle_( "Fresh" ), contactFontColor_("#000000"), - customImageIndex_(0), + contactListDisplayMode_(VIEW_MIXED), deleted_(false), dirty_(false), doNotifyContactsOnline_(true), @@ -53,42 +52,44 @@ Account::Account() doNotifyContactsChatStart_(true), doNotifyContactsChatMessages_(false), doNotifyContactsOffline_(true), - doNotifyEmails_(true), - emailCommand_("kmail"), + doNotifyInboxEmails_(true), + doNotifyOtherEmails_(false), emailSupported_(true), // Assume true (for new accounts), until the msn server proves the opposite emoticonStyle_("KMess-new"), fontColor_("#000000"), - friendlyName_( i18n("Your name") ), + friendlyName_( i18n("Your name"), false ), // Do not parse this name, CurrentAccount is not ready when initializing guestAccount_(true), groupFollowupMessages_(true), handle_( i18n("you@hotmail.com") ), idleTime_(5), initialStatus_(STATUS_ONLINE), + listPictureSize_(0), notificationDuration_(10), saveChats_(false), savedChatDirectoryStructure_( 0 ), savePassword_(false), shakeNudge_(true), showAllowedContacts_(false), - showContactsByGroup_(true), showEmail_(true), + showEmptyGroups_(true), showMessageTime_(true), showNowListening_(false), - showListPictures_(false), showOfflineContacts_(true), showOtherFolders_(true), showRemovedContacts_(false), showSidebar_(true), + tabbedChatMode_( 0 ), useAutologin_(false), useContactFont_(false), useEmoticons_(true), useFontEffects_(true), - useHotmail_(true), useIdleTimer_(true), + useListFormatting_(false), + useChatFormatting_(false), verified_(true), - showImage_(true), + showPicture_(true), msnObject_(0) { QDir homeDir; @@ -130,46 +131,51 @@ void Account::copyAccount( const Account *account ) // object to the CurrentAccount and visa-versa. // See also: copyAccountUISettings() for properties only changed by the GUI. + setListPictureSize ( account->getListPictureSize() ); setLoginInformation ( account->getHandle(), - account->getFriendlyName(), + account->getFriendlyName( STRING_ORIGINAL ), account->getPassword() ); setShowAllowedContacts ( account->getShowAllowedContacts() ); - setShowContactsByGroup ( account->getShowContactsByGroup() ); + setContactListDisplayMode ( account->getContactListDisplayMode() ); setShowOfflineContacts ( account->getShowOfflineContacts() ); setShowRemovedContacts ( account->getShowRemovedContacts() ); - setShowListPictures ( account->getShowListPictures() ); + setShowEmptyGroups ( account->getShowEmptyGroups () ); setEmoticonStyle ( account->getEmoticonStyle() ); setAlertsInformation ( account->getUseIdleTimer(), account->getIdleTime(), account->getShakeNudge(), - account->getShowNowListening() ); + account->getShowNowListening(), + account->getShowWinks() ); setNotificationsInformation( account->getNotifyContactsOnline(), account->getNotifyContactsStatus(), account->getNotifyContactsChatStart(), account->getNotifyContactsChatMessages(), account->getNotifyContactsOffline(), - account->getNotifyEmails(), - account->getNotificationDuration() ); + account->getNotifyInboxEmails(), + account->getNotifyOtherEmails(), + account->getNotificationDuration(), + account->getHideNotificationsWhenBusy() ); setChatInformation ( account->getUseContactFont(), account->getUseEmoticons(), account->getUseFontEffects(), + account->getUseListFormatting(), + account->getUseChatFormatting(), account->getShowMessageTime(), account->getGroupFollowupMessages(), + account->getTabbedChatMode(), account->getChatStyle() ); setChatLoggingInformation ( account->getSaveChats(), account->getSaveChatPath(), account->getSavedChatDirectoryStructure() ); - setEmailInformation ( account->getUseHotmail(), - account->getEmailCommand(), - account->getShowEmail(), + setEmailInformation ( account->getShowEmail(), account->getShowOtherFolders() ); setEmailSupported ( account->getEmailSupported() ); setFontInformation ( account->getFont(), account->getFontColor(), account->getContactFont(), account->getContactFontColor() ); - setPersonalMessage ( account->getPersonalMessage() ); + setPersonalMessage ( account->getPersonalMessage( STRING_ORIGINAL ) ); setUseAutologin ( account->getUseAutologin() ); setAutoreplyMessage ( account->getAutoreplyMessage() ); @@ -177,12 +183,12 @@ void Account::copyAccount( const Account *account ) setInitialStatus ( account->getInitialStatus() ); setGuestAccount ( account->isGuestAccount() ); - setShowImage ( account->getShowImage() ); + setShowPicture ( account->getShowPicture() ); setTemporaryPassword ( account->getTemporaryPassword() ); setVerified ( account->isVerified() ); - dirty_ = account->isDirty(); - customImageIndex_ = account->customImageIndex_; + dirty_ = account->isDirty(); + displayPicturePath_ = account->displayPicturePath_; updateMsnObject(); } @@ -192,16 +198,17 @@ void Account::copyAccount( const Account *account ) void Account::copyAccountUISettings( const Account *account ) { // All properties that are modified through the main gui are listed here. - + // Contact list menu's + setListPictureSize( account->getListPictureSize() ); setShowAllowedContacts( account->getShowAllowedContacts() ); setShowOfflineContacts( account->getShowOfflineContacts() ); setShowRemovedContacts( account->getShowRemovedContacts() ); - setShowContactsByGroup( account->getShowContactsByGroup() ); - setShowListPictures ( account->getShowListPictures() ); + setContactListDisplayMode( account->getContactListDisplayMode() ); + setShowEmptyGroups ( account->getShowEmptyGroups () ); // Contact list header - setPersonalMessage ( account->getPersonalMessage() ); + setPersonalMessage ( account->getPersonalMessage( STRING_ORIGINAL ) ); setAutoreplyMessage ( account->getAutoreplyMessage() ); // Login @@ -219,14 +226,14 @@ void Account::copyAccountUISettings( const Account *account ) // Settings - customImageIndex_ = account->customImageIndex_; - dirty_ = account->isDirty(); + displayPicturePath_ = account->displayPicturePath_; + dirty_ = account->isDirty(); } -// Delete the account data -void Account::deleteAccountData() +// Set the account as deleted +void Account::setDeleted() { // Can be called twice, avoid warnings. if( deleted_ ) @@ -234,29 +241,6 @@ void Account::deleteAccountData() return; } -#ifdef KMESSDEBUG_KMESS - kDebug() << "deleting configuration fields"; -#endif - - // TODO: pass as argument?? - KConfig config; - - // Delete Profile_ - config.deleteGroup( "Profile_" + handle_ ); - - // Delete Contact_/ - QString contactPrefix = "Contact_" + handle_ + "/"; - foreach( QString groupName, config.groupList() ) - { - if( groupName.startsWith( contactPrefix ) ) - { - config.deleteGroup(groupName); - } - } - - // Make sure the config is saved - config.sync(); - // Mark as deleted, so other classes avoid saving the settings again. deleted_ = true; guestAccount_ = true; @@ -296,13 +280,14 @@ const QString& Account::getContactFontColor() const -// Read the email command used when not using hotmail -const QString& Account::getEmailCommand() const +// Read how contacts are shown, by group, by online/offline, or mixed. +Account::ContactListDisplayMode Account::getContactListDisplayMode() const { - return emailCommand_; + return contactListDisplayMode_; } + // Return whether email notifications are supported bool Account::getEmailSupported() const { @@ -327,9 +312,9 @@ const QString& Account::getFontColor() const // Return the user's friendlyName -QString Account::getFriendlyName() const +QString Account::getFriendlyName( FormattingMode mode ) const { - return friendlyName_; + return friendlyName_.getString( mode ); } @@ -358,17 +343,6 @@ const int& Account::getIdleTime() const -// Return the path for a new the custom display image. -QString Account::getNewCustomImagePath() -{ - customImageIndex_++; // Ensures the image name is always unique, so the ChatWindow's KHTMLPart doesn't cache the image. - QString imageRoot = ::KStandardDirs::locateLocal("data", "kmess"); - QString safeHandle = getHandle().toLower().replace( QRegExp( "[^a-z0-9_.@]" ), "-" ); - return imageRoot + "/msnpicture-" + safeHandle + "-" + QString::number(customImageIndex_) + ".png"; -} - - - // Return the time popup windows are shown. const int& Account::getNotificationDuration() const { @@ -417,10 +391,18 @@ bool Account::getNotifyContactsOffline() const -// Return if popup notifications will be shown for incoming mail. -bool Account::getNotifyEmails() const +// Return if popup notifications will be shown for mail incoming in the Inbox. +bool Account::getNotifyInboxEmails() const { - return doNotifyEmails_; + return doNotifyInboxEmails_; +} + + + +// Return if popup notifications will be shown for mail incoming in other folders. +bool Account::getNotifyOtherEmails() const +{ + return doNotifyOtherEmails_; } @@ -442,9 +424,9 @@ QString Account::getPassword() const // Return the personal message -QString Account::getPersonalMessage() const +QString Account::getPersonalMessage( FormattingMode mode ) const { - return personalMessage_; + return personalMessage_.getString( mode ); } @@ -457,6 +439,14 @@ const QString& Account::getEmoticonStyle() const +// Return whether to hide notifications when busy +bool Account::getHideNotificationsWhenBusy() const +{ + return hideNotificationsWhenBusy_; +} + + + // Return the status to set upon connection Status Account::getInitialStatus() const { @@ -513,14 +503,6 @@ bool Account::getShowAllowedContacts() const -// Read whether contacts are shown by group or by online/offline. -bool Account::getShowContactsByGroup() const -{ - return showContactsByGroup_; -} - - - // Read whether the email information should be shown in the main view. bool Account::getShowEmail() const { @@ -529,6 +511,14 @@ bool Account::getShowEmail() const +// Read whether empty groups should be shown. +bool Account::getShowEmptyGroups() const +{ + return showEmptyGroups_; +} + + + // Read whether message times should be shown. bool Account::getShowMessageTime() const { @@ -569,6 +559,22 @@ bool Account::getShowSidebar() const +// Read whether to show winks +bool Account::getShowWinks() const +{ + return showWinks_; +} + + + +// Read the way the chats will be grouped together +int Account::getTabbedChatMode() const +{ + return tabbedChatMode_; +} + + + // Return the a temporary password for the account for login attempts from the initialview dialog const QString & Account::getTemporaryPassword() const { @@ -585,6 +591,14 @@ bool Account::getUseAutologin() const +// Return whether or not to enable MSN Plus! formatting in chat +bool Account::getUseChatFormatting() const +{ + return useChatFormatting_; +} + + + // Return whether or not to show contact messages in the stored font. bool Account::getUseContactFont() const { @@ -609,14 +623,6 @@ bool Account::getUseFontEffects() const -// Read whether the user uses hotmail to read email or a set command -bool Account::getUseHotmail() const -{ - return useHotmail_; -} - - - // Return whether the idle timer should be used. bool Account::getUseIdleTimer() const { @@ -625,60 +631,53 @@ bool Account::getUseIdleTimer() const -// Returns whether or not to send our display image -bool Account::getShowImage() const +// Return whether or not to enable MSN Plus! formatting in the contact list +bool Account::getUseListFormatting() const { - return showImage_; -} - - -// Returns whether display pictures should be shown in contact list -bool Account::getShowListPictures() const -{ - return showListPictures_; + return useListFormatting_; } -// Return the path of the custom display image. -const QString Account::getCustomImagePath() const +// Returns whether or not to send our display picture +bool Account::getShowPicture() const { - QString safeHandle = getHandle().toLower().replace( QRegExp( "[^a-z0-9_.@]" ), "-" ); - QString suffix = ( customImageIndex_ > 0 ? "-" + QString::number(customImageIndex_) : QString::null ); - - return ::KStandardDirs::locateLocal("data", "kmess/msnpicture-" + safeHandle + suffix + ".png"); + return showPicture_; } -// Return the path to the *current* display image -const QString Account::getImagePath() const +// Returns display mode used to show pictures in contact list. +int Account::getListPictureSize() const { - KStandardDirs *dirs = KGlobal::dirs(); - QString imagePath; + return listPictureSize_; +} - // return image path if user has selected to show it else return QString::null - if( showImage_ ) + + +// Return the path to the current display picture +const QString Account::getPicturePath() const +{ + // Return the picture path if the user has selected to show it; else return an empty string + if( ! showPicture_ ) { - // if the user has selected a custom image it will be located (usually) in - // ~/.kde/share/apps/kmess/msnpicture-handle.png - imagePath = getCustomImagePath(); - - // If the file can't be found, fallback to the default image. - if(! QFile::exists(imagePath)) - { - imagePath = dirs->findResource( "data", "kmess/pics/kmesspic.png" ); - } - - return imagePath; + return QString(); } - else + + // if the user has selected a custom picture, it will be located in + // ~/.kde/share/apps/kmess//displaypics/.png + + // If the file can't be found, fallback to the default picture + if( displayPicturePath_.isEmpty() || ! QFile::exists( displayPicturePath_ ) ) { - return QString::null; + return KGlobal::dirs()->findResource( "data", "kmess/pics/kmesspic.png" ); } + + return displayPicturePath_; } + // Returns the string representation of the MsnObject const QString Account::getMsnObjectString() const { @@ -731,7 +730,7 @@ bool Account::isVerified() const // Read in account properties -void Account::readProperties( const KConfigGroup &config, QString handle) +void Account::readProperties( const QString &handle ) { handle_ = handle; QDir homeDir; @@ -740,8 +739,8 @@ void Account::readProperties( const KConfigGroup &config, QString handle) homeDir = QDir::home(); defaultPath = homeDir.absolutePath(); - // Choose the profiles group - KConfigGroup profileGroup = config.config()->group( "Profiles" ).group( handle_ ); + // Choose the main group + KConfigGroup profileGroup = KMessConfig::instance()->getAccountConfig( handle_, "Account" ); autoreplyMessage_ = profileGroup.readEntry( "autoreplymessage", i18n("I'm away from my computer") ); chatStyle_ = profileGroup.readEntry( "chatStyle", "Fresh" ); @@ -751,14 +750,16 @@ void Account::readProperties( const KConfigGroup &config, QString handle) contactFont_.setUnderline ( profileGroup.readEntry( "contactfontunderline", false ) ); contactFont_.setPointSize ( profileGroup.readEntry( "contactfontpointsize", 10 ) ); contactFontColor_ = profileGroup.readEntry( "contactfontcolor" , "#000000" ); - customImageIndex_ = profileGroup.readEntry( "customimageindex", 0 ); + contactListDisplayMode_ = (Account::ContactListDisplayMode) + profileGroup.readEntry( "contactListDisplayMode", (int)VIEW_MIXED ); + displayPicturePath_ = profileGroup.readEntry( "displayPicturePath", "" ); doNotifyContactsOnline_ = profileGroup.readEntry( "doNotifyContactsOnline", true ); doNotifyContactsStatus_ = profileGroup.readEntry( "doNotifyContactsStatus", false ); doNotifyContactsChatStart_ = profileGroup.readEntry( "doNotifyContactsChatStart", true ); doNotifyContactsChatMessages_ = profileGroup.readEntry( "doNotifyContactsChatMessages", false ); doNotifyContactsOffline_ = profileGroup.readEntry( "doNotifyContactsOffline", true ); - doNotifyEmails_ = profileGroup.readEntry( "doNotifyEmails", true ); - emailCommand_ = profileGroup.readEntry( "emailCommand", "kmail" ); + doNotifyInboxEmails_ = profileGroup.readEntry( "doNotifyInboxEmails", true ); + doNotifyOtherEmails_ = profileGroup.readEntry( "doNotifyOtherEmails", false ); emailSupported_ = profileGroup.readEntry( "emailSupported", true ); emoticonStyle_ = profileGroup.readEntry( "emoticonStyle", "KMess-new" ); font_.setFamily ( profileGroup.readEntry( "fontfamily", "Arial" ) ); @@ -767,40 +768,40 @@ void Account::readProperties( const KConfigGroup &config, QString handle) font_.setPointSize ( profileGroup.readEntry( "fontpointsize", 12 ) ); font_.setUnderline ( profileGroup.readEntry( "fontunderline", false ) ); fontColor_ = profileGroup.readEntry( "fontColor" , "#000000" ); - friendlyName_ = profileGroup.readEntry( "friendlyName" , "" ); + friendlyName_.setString ( profileGroup.readEntry( "friendlyName" , "" ) ); groupFollowupMessages_ = profileGroup.readEntry( "groupfollowupmessages", true ); + hideNotificationsWhenBusy_ = profileGroup.readEntry( "hideNotificationsWhenBusy", false ); idleTime_ = profileGroup.readEntry( "idleTime", 5 ); initialStatus_ = (Status)profileGroup.readEntry( "initialStatus", (int) STATUS_ONLINE); + listPictureSize_ = profileGroup.readEntry( "listPictureSize", 0 ); notificationDuration_ = profileGroup.readEntry( "notification", 5 ); - password_ = profileGroup.readEntry( "password" , "" ); - personalMessage_ = profileGroup.readEntry( "personalMessage", "" ); + personalMessage_.setString ( profileGroup.readEntry( "personalMessage", "" ) ); saveChatPath_ = profileGroup.readEntry( "saveChatPath", defaultPath ); saveChats_ = profileGroup.readEntry( "saveChats", false ); savedChatDirectoryStructure_ = profileGroup.readEntry( "savedChatDirectoryStructure", 0 ); + savePassword_ = profileGroup.readEntry( "savePassword", false ); shakeNudge_ = profileGroup.readEntry( "shakeNudge", true ); showAllowedContacts_ = profileGroup.readEntry( "showAllowed", false ); - showContactsByGroup_ = profileGroup.readEntry( "showByGroup", true ); showEmail_ = profileGroup.readEntry( "showEmail", true ); - showImage_ = profileGroup.readEntry( "showImage", true ); - showListPictures_ = profileGroup.readEntry( "showListPictures", false ); + showEmptyGroups_ = profileGroup.readEntry( "showEmptyGroups", true ); + showPicture_ = profileGroup.readEntry( "showPicture", true ); showMessageTime_ = profileGroup.readEntry( "showMessageTime", true ); showNowListening_ = profileGroup.readEntry( "showNowListening", false ); showOfflineContacts_ = profileGroup.readEntry( "showOfflineContacts", true ); showOtherFolders_ = profileGroup.readEntry( "showOtherFolders", true ); showRemovedContacts_ = profileGroup.readEntry( "showRemoved", false ); showSidebar_ = profileGroup.readEntry( "showSidebar", true ); + tabbedChatMode_ = profileGroup.readEntry( "tabbedChatMode", 2 ); useAutologin_ = profileGroup.readEntry( "useAutologin", false ); + useChatFormatting_ = profileGroup.readEntry( "useChatFormatting", false ); useContactFont_ = profileGroup.readEntry( "useContactFont", false ); useEmoticons_ = profileGroup.readEntry( "useEmoticons", true ); useFontEffects_ = profileGroup.readEntry( "useFontEffects", true ); - useHotmail_ = profileGroup.readEntry( "useHotmail", true ); useIdleTimer_ = profileGroup.readEntry( "useIdleTimer", true ); + useListFormatting_ = profileGroup.readEntry( "useListFormatting", false ); updateMsnObject(); - // If the password was in the config, the user wants it saved - savePassword_ = ( ! password_.isEmpty() ); - // After reading options from file, consider "dirty" to still be false guestAccount_ = false; dirty_ = false; @@ -829,7 +830,7 @@ void Account::readProperties( const KConfigGroup &config, QString handle) // Save account properties -void Account::saveProperties( KConfigGroup &config ) +void Account::saveProperties() { // Protect against unwanted usage if( guestAccount_ ) @@ -841,15 +842,15 @@ void Account::saveProperties( KConfigGroup &config ) kWarning() << "Application attempted to save the deleted account again!"; } + // Choose the main group + KConfigGroup profileGroup = KMessConfig::instance()->getAccountConfig( handle_, "Account" ); + if ( dirty_ ) { #ifdef KMESSDEBUG_ACCOUNT_DIRTY kDebug() << "Account " << handle_ << " is 'dirty', save properties."; #endif - // Choose the profiles group - KConfigGroup profileGroup = config.config()->group( "Profiles" ).group( handle_ ); - // Write new settings profileGroup.writeEntry( "autoreplymessage", autoreplyMessage_ ); profileGroup.writeEntry( "chatStyle", chatStyle_ ); @@ -859,14 +860,15 @@ void Account::saveProperties( KConfigGroup &config ) profileGroup.writeEntry( "contactfontunderline", contactFont_.underline() ); profileGroup.writeEntry( "contactfontpointsize", contactFont_.pointSize() ); profileGroup.writeEntry( "contactfontcolor", contactFontColor_ ); - profileGroup.writeEntry( "customimageindex", customImageIndex_ ); + profileGroup.writeEntry( "contactListDisplayMode", (int)contactListDisplayMode_ ); + profileGroup.writeEntry( "displayPicturePath", displayPicturePath_ ); profileGroup.writeEntry( "doNotifyContactsOnline", doNotifyContactsOnline_ ); profileGroup.writeEntry( "doNotifyContactsStatus", doNotifyContactsStatus_ ); profileGroup.writeEntry( "doNotifyContactsChatStart", doNotifyContactsChatStart_ ); profileGroup.writeEntry( "doNotifyContactsChatMessages", doNotifyContactsChatMessages_ ); profileGroup.writeEntry( "doNotifyContactsOffline", doNotifyContactsOffline_ ); - profileGroup.writeEntry( "doNotifyEmails", doNotifyEmails_ ); - profileGroup.writeEntry( "emailCommand", emailCommand_ ); + profileGroup.writeEntry( "doNotifyInboxEmails", doNotifyInboxEmails_ ); + profileGroup.writeEntry( "doNotifyOtherEmails", doNotifyOtherEmails_ ); profileGroup.writeEntry( "emailSupported", emailSupported_ ); profileGroup.writeEntry( "emoticonStyle", emoticonStyle_ ); profileGroup.writeEntry( "fontfamily", font_.family() ); @@ -875,44 +877,46 @@ void Account::saveProperties( KConfigGroup &config ) profileGroup.writeEntry( "fontunderline", font_.underline() ); profileGroup.writeEntry( "fontpointsize", font_.pointSize() ); profileGroup.writeEntry( "fontColor", fontColor_ ); - profileGroup.writeEntry( "friendlyName", friendlyName_ ); + profileGroup.writeEntry( "friendlyName", friendlyName_.getOriginal() ); profileGroup.writeEntry( "groupfollowupmessages", groupFollowupMessages_ ); + profileGroup.writeEntry( "hideNotificationsWhenBusy", hideNotificationsWhenBusy_ ); profileGroup.writeEntry( "idleTime", idleTime_ ); + profileGroup.writeEntry( "listPictureSize", listPictureSize_ ); profileGroup.writeEntry( "notification", notificationDuration_ ); - profileGroup.writeEntry( "personalMessage", personalMessage_ ); + profileGroup.writeEntry( "personalMessage", personalMessage_.getOriginal()); profileGroup.writeEntry( "saveChatPath", saveChatPath_ ); profileGroup.writeEntry( "saveChats", saveChats_ ); + profileGroup.writeEntry( "savePassword", savePassword_ ); profileGroup.writeEntry( "savedChatDirectoryStructure", savedChatDirectoryStructure_ ); profileGroup.writeEntry( "shakeNudge", shakeNudge_ ); profileGroup.writeEntry( "showAllowed", showAllowedContacts_ ); - profileGroup.writeEntry( "showByGroup", showContactsByGroup_ ); profileGroup.writeEntry( "showEmail", showEmail_ ); - profileGroup.writeEntry( "showListPictures", showListPictures_ ); + profileGroup.writeEntry( "showEmptyGroups", showEmptyGroups_ ); profileGroup.writeEntry( "showMessageTime", showMessageTime_ ); profileGroup.writeEntry( "showNowListening", showNowListening_ ); profileGroup.writeEntry( "showOfflineContacts", showOfflineContacts_ ); profileGroup.writeEntry( "showOtherFolders", showOtherFolders_ ); profileGroup.writeEntry( "showRemoved", showRemovedContacts_ ); profileGroup.writeEntry( "showSidebar", showSidebar_ ); + profileGroup.writeEntry( "showWinks", showWinks_ ); profileGroup.writeEntry( "initialStatus", (int)initialStatus_ ); + profileGroup.writeEntry( "tabbedChatMode", tabbedChatMode_ ); profileGroup.writeEntry( "useAutologin", useAutologin_ ); + profileGroup.writeEntry( "useChatFormatting", useChatFormatting_ ); profileGroup.writeEntry( "useContactFont", useContactFont_ ); profileGroup.writeEntry( "useEmoticons", useEmoticons_ ); profileGroup.writeEntry( "useFontEffects", useFontEffects_ ); - profileGroup.writeEntry( "useHotmail", useHotmail_ ); + profileGroup.writeEntry( "useListFormatting", useListFormatting_ ); profileGroup.writeEntry( "useIdleTimer", useIdleTimer_ ); - profileGroup.writeEntry( "showImage", showImage_ ); + profileGroup.writeEntry( "showPicture", showPicture_ ); - if( savePassword_ ) + if( ! savePassword_ ) { - profileGroup.writeEntry( "password", password_ ); - } - else - { - profileGroup.writeEntry( "password", "" ); - //remove password from cache - password_ = ""; - temporaryPassword_= ""; + // Remove the cached password + password_ = QString(); + temporaryPassword_= QString(); + + // When storing the passwords, it will be removed from the password manager also } } #ifdef KMESSDEBUG_ACCOUNT_DIRTY @@ -923,7 +927,7 @@ void Account::saveProperties( KConfigGroup &config ) #endif // Save to disk the changes now, to avoid losing data. - config.sync(); + profileGroup.config()->sync(); } @@ -944,11 +948,12 @@ void Account::saveTemporaryPassword() // Set common alerts information -void Account::setAlertsInformation( bool useIdleTimer, int idleTime, bool shakeNudge, bool showNowListening ) +void Account::setAlertsInformation( bool useIdleTimer, int idleTime, bool shakeNudge, bool showNowListening, bool showWinks ) { useIdleTimer_ = useIdleTimer; - idleTime_ = idleTime; - shakeNudge_ = shakeNudge; + idleTime_ = idleTime; + shakeNudge_ = shakeNudge; + showWinks_ = showWinks; emit changedNotificationsSettings(); emit changedTimerSettings(); @@ -973,15 +978,17 @@ void Account::setAlertsInformation( bool useIdleTimer, int idleTime, bool shakeN // Set notification alerts information void Account::setNotificationsInformation( bool doNotifyContactsOnline, bool doNotifyContactsStatus, bool doNotifyContactsChatStart, - bool doNotifyContactsChatMessages, bool doNotifyContactsOffline, bool doNotifyEmails, int notificationDuration ) + bool doNotifyContactsChatMessages, bool doNotifyContactsOffline, bool doNotifyInboxEmails, bool doNotifyOtherEmails, int notificationDuration, bool hideWhenBusy ) { doNotifyContactsOnline_ = doNotifyContactsOnline; doNotifyContactsStatus_ = doNotifyContactsStatus; doNotifyContactsChatStart_ = doNotifyContactsChatStart; doNotifyContactsChatMessages_ = doNotifyContactsChatMessages; doNotifyContactsOffline_ = doNotifyContactsOffline; - doNotifyEmails_ = doNotifyEmails; + doNotifyInboxEmails_ = doNotifyInboxEmails; + doNotifyOtherEmails_ = doNotifyOtherEmails; notificationDuration_ = notificationDuration; + hideNotificationsWhenBusy_ = hideWhenBusy; emit changedNotificationsSettings(); @@ -1010,13 +1017,18 @@ void Account::setAutoreplyMessage( const QString& autoreplyMessage) // Set chat information void Account::setChatInformation( bool useContactFont, bool useEmoticons, bool useFontEffects, - bool showMessageTime, bool groupFollowupMessages, const QString& chatStyle ) + bool useListFormatting, bool useChatFormatting, + bool showMessageTime, bool groupFollowupMessages, int tabbedChatMode, + const QString& chatStyle ) { bool changedSettings = (useContactFont_ != useContactFont) || (useEmoticons_ != useEmoticons) || (useFontEffects_ != useFontEffects) + || (useListFormatting_ != useListFormatting) + || (useChatFormatting_ != useChatFormatting) || (showMessageTime_ != showMessageTime) || (groupFollowupMessages_ != groupFollowupMessages) + || (tabbedChatMode_ != tabbedChatMode) || (chatStyle_ != chatStyle); // Avoid signals because the chat windows will regenerate all messages. @@ -1028,9 +1040,13 @@ void Account::setChatInformation( bool useContactFont, bool useEmoticons, bool u useContactFont_ = useContactFont; useEmoticons_ = useEmoticons; useFontEffects_ = useFontEffects; + useListFormatting_ = useListFormatting; + useChatFormatting_ = useChatFormatting; showMessageTime_ = showMessageTime; groupFollowupMessages_ = groupFollowupMessages; + tabbedChatMode_ = tabbedChatMode; chatStyle_ = chatStyle; + emit changedChatStyleSettings(); dirty_ = true; @@ -1060,16 +1076,29 @@ void Account::setChatLoggingInformation( bool saveChats, const QString& saveChat -// Set email information -void Account::setEmailInformation( bool useHotmail, const QString& emailCommand, bool showEmail, bool showOtherFolders ) + +// Set how contacts are shown, by group, by online/offline, or mixed. +void Account::setContactListDisplayMode( ContactListDisplayMode displayMode ) { - if( useHotmail_ != useHotmail - || emailCommand_ != emailCommand - || showEmail_ != showEmail + if ( displayMode != contactListDisplayMode_ ) + { + contactListDisplayMode_ = displayMode; + emit changedViewMode(); + dirty_ = true; +#ifdef KMESSDEBUG_ACCOUNT_DIRTY + kDebug() << "Setting 'dirty' to true."; +#endif + } +} + + + +// Set email information +void Account::setEmailInformation( bool showEmail, bool showOtherFolders ) +{ + if( showEmail_ != showEmail || showOtherFolders_ != showOtherFolders ) { - useHotmail_ = useHotmail; - emailCommand_ = emailCommand; showEmail_ = showEmail; showOtherFolders_ = showOtherFolders; @@ -1179,15 +1208,19 @@ void Account::setEmoticonStyle( const QString& emoticonStyle ) // Change the friendly name void Account::setFriendlyName(const QString& newName) { - if ( ( newName != "" ) && ( newName != friendlyName_ ) ) + if( newName.isEmpty() || newName == friendlyName_.getOriginal() ) { - friendlyName_ = newName; - emit changedFriendlyName(); - dirty_ = true; -#ifdef KMESSDEBUG_ACCOUNT_DIRTY - kDebug() << "Setting 'dirty' to true."; -#endif + return; } + + friendlyName_.setString( newName ); + + emit changedFriendlyName(); + dirty_ = true; + +#ifdef KMESSDEBUG_ACCOUNT_DIRTY + kDebug() << "Setting 'dirty' to true."; +#endif } @@ -1224,37 +1257,63 @@ void Account::setInitialStatus( Status status ) +// Set the mode of display list pictures +void Account::setListPictureSize( int mode ) +{ + // No need to update + if( mode == listPictureSize_ ) + { + return; + } + + listPictureSize_ = mode; + + emit changedDisplaySettings(); + dirty_ = true; + +#ifdef KMESSDEBUG_ACCOUNT_DIRTY + kDebug() << "Setting 'dirty' to true."; +#endif +} + + + // Set basic account data void Account::setLoginInformation( QString handle, QString friendlyName, QString password ) { #ifdef KMESSTEST - KMESS_ASSERT( handle.contains("@") ); - KMESS_ASSERT( handle != "" ); + KMESS_ASSERT( handle.contains("@") ); + KMESS_ASSERT( ! handle.isEmpty() ); #endif - if( handle_ != handle.toLower() - || friendlyName_ != friendlyName - || ( ! password.isEmpty() && password != password_ ) ) + handle = handle.toLower(); + + if( handle_ == handle + && friendlyName_.getOriginal() == friendlyName + && ( password.isEmpty() || password == password_ ) ) { - handle_ = handle.toLower(); - - // Never change the nickname if the account is not verified. We would receive a server error - if( verified_ ) - { - friendlyName_ = friendlyName; - emit changedFriendlyName(); - } - - if( ! password.isEmpty() ) - { - password_ = password; - } - - dirty_ = true; -#ifdef KMESSDEBUG_ACCOUNT_DIRTY - kDebug() << "Setting 'dirty' to true."; -#endif + return; } + + handle_ = handle; + + // Never change the nickname if the account is not verified. We would receive a server error + if( verified_ ) + { + friendlyName_.setString( friendlyName ); + emit changedFriendlyName(); + } + + if( ! password.isEmpty() ) + { + password_ = password; + } + + dirty_ = true; + +#ifdef KMESSDEBUG_ACCOUNT_DIRTY + kDebug() << "Setting 'dirty' to true."; +#endif } @@ -1299,26 +1358,73 @@ void Account::setNotifyContactsOffline( bool doNotifyContactsOffline ) -// Set whether to show popup notifications for incoming mail. -void Account::setNotifyEmails( bool doNotifyEmails ) +// Set whether to show popup notifications for mail incoming in the Inbox. +void Account::setNotifyInboxEmails( bool doNotifyInboxEmails ) { - doNotifyEmails_ = doNotifyEmails; + doNotifyInboxEmails_ = doNotifyInboxEmails; } + +// Set whether to show popup notifications for mail incoming in other folders. +void Account::setNotifyOtherEmails( bool doNotifyOtherEmails ) +{ + doNotifyOtherEmails_ = doNotifyOtherEmails; +} + + + +// Set the account's login password +void Account::setPassword( const QString &password ) +{ + password_ = password; + + dirty_ = true; + +#ifdef KMESSDEBUG_ACCOUNT_DIRTY + kDebug() << "Setting 'dirty' to true."; +#endif +} + + + // Set the personal message void Account::setPersonalMessage(const QString& newMessage) { - if( newMessage != personalMessage_ ) + if( newMessage == personalMessage_.getOriginal() ) { - personalMessage_ = newMessage; - emit changedPersonalMessage(); - - dirty_ = true; -#ifdef KMESSDEBUG_ACCOUNT_DIRTY - kDebug() << "Setting 'dirty' to true."; -#endif + return; } + + personalMessage_.setString( newMessage ); + emit changedPersonalMessage(); + + dirty_ = true; + +#ifdef KMESSDEBUG_ACCOUNT_DIRTY + kDebug() << "Setting 'dirty' to true."; +#endif +} + + +// Set the display picture file +void Account::setPicturePath( const QString& picturePath ) +{ + if( displayPicturePath_ == picturePath ) + { + return; + } + + displayPicturePath_ = picturePath; + + // Update the MSN Object linked to this account + updateMsnObject(); + + dirty_ = true; + +#ifdef KMESSDEBUG_ACCOUNT_DIRTY + kDebug() << "Setting 'dirty' to true."; +#endif } @@ -1327,6 +1433,12 @@ void Account::setPersonalMessage(const QString& newMessage) void Account::setSavePassword( bool savePassword ) { savePassword_ = savePassword; + + dirty_ = true; + +#ifdef KMESSDEBUG_ACCOUNT_DIRTY + kDebug() << "Setting 'dirty' to true."; +#endif } @@ -1348,18 +1460,21 @@ void Account::setShowAllowedContacts( bool showAllowedContacts ) -// Set whether contacts are shown by group or by online/offline. -void Account::setShowContactsByGroup( bool showContactsByGroup ) +// Set whether empty groups are shown +void Account::setShowEmptyGroups( bool showEmptyGroups ) { - if ( showContactsByGroup != showContactsByGroup_ ) + if( showEmptyGroups == showEmptyGroups_ ) { - showContactsByGroup_ = showContactsByGroup; - emit changedViewMode(); - dirty_ = true; -#ifdef KMESSDEBUG_ACCOUNT_DIRTY - kDebug() << "Setting 'dirty' to true."; -#endif + return; } + + showEmptyGroups_ = showEmptyGroups; + emit changedViewMode(); + + dirty_ = true; +#ifdef KMESSDEBUG_ACCOUNT_DIRTY + kDebug() << "Setting 'dirty' to true."; +#endif } @@ -1411,6 +1526,14 @@ void Account::setShowSidebar( bool showSidebar ) +// Set the way the chats will be grouped together +void Account::setTabbedChatMode( int tabbedChatMode ) +{ + tabbedChatMode_ = tabbedChatMode; +} + + + // Set a temporary password for the account for login attempts from the initialview dialog void Account::setTemporaryPassword( const QString &temporaryPassword ) { @@ -1455,32 +1578,15 @@ void Account::setVerified( bool verified ) -// Set whether or not to send our display image -void Account::setShowImage( bool showImage ) +// Set whether or not to send our display picture +void Account::setShowPicture( bool showPicture ) { - if( showImage != showImage_ ) - { - showImage_ = showImage; - dirty_ = true; -#ifdef KMESSDEBUG_ACCOUNT_DIRTY - kDebug() << "Setting 'dirty' to true."; -#endif - } -} - - - -// Set whether the display pictures of the contacts should be shown in list -void Account::setShowListPictures( bool showPictures) -{ - // No need to update - if( showPictures == showListPictures_ ) + if( showPicture == showPicture_ ) { return; } - showListPictures_ = showPictures; - emit changedDisplaySettings(); + showPicture_ = showPicture; dirty_ = true; #ifdef KMESSDEBUG_ACCOUNT_DIRTY @@ -1503,17 +1609,24 @@ void Account::updateMsnObject() msnObject_ = 0; } -#ifdef KMESSDEBUG_ACCOUNT_GENERAL - kDebug() << "Show Image: " << showImage_; -#endif - - if ( showImage_ ) + // Verify if the picture exists: if not, change it to the default one as returned + // by getPicturePath() + QString picturePath( getPicturePath() ); + if( picturePath != displayPicturePath_ ) { #ifdef KMESSDEBUG_ACCOUNT_GENERAL - kDebug() << "Image source: " << getImagePath(); + kDebug() << "Replacing picture" << displayPicturePath_ << "with" << picturePath; +#endif + displayPicturePath_ = picturePath; + } + +#ifdef KMESSDEBUG_ACCOUNT_GENERAL + kDebug() << "Show the picture?" << showPicture_ << "- Set picture path:" << displayPicturePath_; #endif - QFile iFile( getImagePath() ); + if ( showPicture_ ) + { + QFile iFile( displayPicturePath_ ); if ( iFile.open( QIODevice::ReadOnly ) ) { QByteArray data = iFile.readAll(); @@ -1524,7 +1637,7 @@ void Account::updateMsnObject() } else { - kWarning() << "Image could not be loaded: " << getImagePath(); + kWarning() << "Picture could not be loaded: " << displayPicturePath_; } } diff --git a/src/account.h b/src/account.h index 9291166..1f1d215 100644 --- a/src/account.h +++ b/src/account.h @@ -18,16 +18,12 @@ #ifndef ACCOUNT_H #define ACCOUNT_H -#include -#include - -#include - #include "contact/msnstatus.h" +#include "utils/richtextparser.h" +#include // Forward declarations -class KConfig; class KMessTest; class MsnObject; @@ -39,8 +35,8 @@ class MsnObject; * The properties of this class correspond with the profile section in the kmessrc file. * The data is read with the readProperties() method and saved with the saveProperties() method. * When the user switches to another account, the data is copied to the CurrentAccount class with - * the copyAccount() method. The set* methods are issued from the SettingsDialog code. - * When the account is disconnected, the data is copied back and saved to disk. + * the copyAccount() method. The set* methods are issued from the AccountSettingsDialog + * code. When the account is disconnected, the data is copied back and saved to disk. * * @author Mike K. Bennett * @ingroup Root @@ -58,6 +54,13 @@ class Account : public QObject , BYMONTH = 2 , BYDAY = 3 }; + // Contact List view organization constants + enum ContactListDisplayMode + { + VIEW_BYGROUP + , VIEW_BYSTATUS + , VIEW_MIXED + }; // The constructor Account(); @@ -67,18 +70,18 @@ class Account : public QObject virtual void copyAccount( const Account *account ); // Copy an account's user-interface, not settings, changable properties void copyAccountUISettings( const Account *account ); - // Delete the account data - void deleteAccountData(); + // Set the account as deleted + void setDeleted(); // Read the auto-reply message. const QString& getAutoreplyMessage() const; // Return the chat style name. const QString& getChatStyle() const; + // Read how contacts are shown, by group, by online/offline, or mixed. + ContactListDisplayMode getContactListDisplayMode() const; // Return the font used for contact messages, if forced to. const QFont& getContactFont() const; // Return the color of the forced contact font. const QString& getContactFontColor() const; - // Read the email command used when not using hotmail - const QString& getEmailCommand() const; // Return whether email notifications are supported bool getEmailSupported() const; // Return the user message font. @@ -86,7 +89,7 @@ class Account : public QObject // Return the color of the user message font. const QString& getFontColor() const; // Return the user's friendlyName - QString getFriendlyName() const; + QString getFriendlyName( FormattingMode mode = STRING_CLEANED ) const; // Whether follow-up messages from the contact should be grouped. bool getGroupFollowupMessages() const; // Return the user's handle @@ -95,6 +98,8 @@ class Account : public QObject const int& getIdleTime() const; // Return the status to set upon connection Status getInitialStatus() const; + // Returns display mode used to show pictures in contact list. + int getListPictureSize() const; // Return the time popup windows are shown. const int& getNotificationDuration() const; // Return if popup notifications will be shown for contacts which come online. @@ -107,12 +112,14 @@ class Account : public QObject bool getNotifyContactsChatMessages() const; // Return if popup notifications will be shown for contacts which go offline. bool getNotifyContactsOffline() const; - // Return if popup notifications will be shown for incoming mail. - bool getNotifyEmails() const; + // Return if popup notifications will be shown for mail incoming in the Inbox. + bool getNotifyInboxEmails() const; + // Return if popup notifications will be shown for mail incoming in other folders. + bool getNotifyOtherEmails() const; // Return the user's password QString getPassword() const; // Return the personal message - QString getPersonalMessage() const; + QString getPersonalMessage( FormattingMode mode = STRING_CLEANED ) const; // Return whether or not to save chats. bool getSaveChats() const; // Return the base directory to which chats are saved. @@ -121,18 +128,18 @@ class Account : public QObject const int& getSavedChatDirectoryStructure() const; // Read whether or not allowed contacts are shown. bool getShowAllowedContacts() const; - // Read whether contacts are shown by group or by online/offline. - bool getShowContactsByGroup() const; // Read whether the email information should be shown in the main view. bool getShowEmail() const; - // Returns whether display pictures should be shown in contact list. - bool getShowListPictures() const; // Read the selected emoticon's list number const QString& getEmoticonStyle() const; + // Read whether to hide notifications when busy + bool getHideNotificationsWhenBusy() const; // Read whether the password must be stored bool getSavePassword() const; // Read whether the chat window should shake when a nudge is received or sent. bool getShakeNudge() const; + // Read whether empty groups are shown + bool getShowEmptyGroups() const; // Read whether offline contacts should be shown. bool getShowOfflineContacts() const; // Read property of bool showMessageTime. @@ -145,30 +152,32 @@ class Account : public QObject bool getShowRemovedContacts() const; // Read whether or not the sidebar should be shown in chats bool getShowSidebar() const; + // Read whether to show winks + bool getShowWinks() const; + // Read the way the chats will be grouped together + int getTabbedChatMode() const; // Return the a temporary password for the account for login attempts from the initialview dialog const QString & getTemporaryPassword() const; // Return whether or not to autologin with this profile. bool getUseAutologin() const; + // Return whether or not to enable MSN Plus! formatting in chat + bool getUseChatFormatting() const; // Return whether or not to show contact messages in the stored font. bool getUseContactFont() const; // Return whether or not to show emoticons in chats. bool getUseEmoticons() const; // Return whether or not to use bold/italic/underline effects in chats. bool getUseFontEffects() const; - // Read whether the user uses hotmail to read email or a set command - bool getUseHotmail() const; // Return whether the idle timer should be used. bool getUseIdleTimer() const; - // Returns whether or not to send our display image - bool getShowImage() const; - // Return the path of the custom display image. - const QString getCustomImagePath() const; - // Return the path to the *current* display image - const QString getImagePath() const; + // Return whether or not to enable MSN Plus! formatting in the contact list + bool getUseListFormatting() const; + // Returns whether or not to send our display picture + bool getShowPicture() const; + // Return the path to the *current* display picture + const QString getPicturePath() const; // Returns the string representation of the MsnObject const QString getMsnObjectString() const; - // Return the path for a new the custom display image. - QString getNewCustomImagePath(); // Whether the account is marked to be deleted bool isDeleted() const; // Whether the account has unsaved settings changes @@ -178,21 +187,23 @@ class Account : public QObject // Return whether the account's passport is verified bool isVerified() const; // Read in account properties - void readProperties( const KConfigGroup &config, QString handle ); + void readProperties( const QString &handle ); // Save account properties - void saveProperties( KConfigGroup &config ); + void saveProperties(); // The login succeeded with the new password. Save the temporary password as new account password. void saveTemporaryPassword(); // Set alert information - void setAlertsInformation( bool useIdleTimer, int idleTime, bool shakeNudge, bool showNowListening ); + void setAlertsInformation( bool useIdleTimer, int idleTime, bool shakeNudge, bool showNowListening, bool showWinks ); // Set the auto-reply message. void setAutoreplyMessage( const QString& autoreplyMessage); // Set chat information - void setChatInformation( bool useContactFont, bool useEmoticons, bool useFontEffects, bool showMessageTime, bool groupFollowupMessages, const QString& chatStyle ); + void setChatInformation( bool useContactFont, bool useEmoticons, bool useFontEffects, bool useListFormatting, bool useChatFormatting, bool showMessageTime, bool groupFollowupMessages, int tabbedChatMode, const QString& chatStyle ); // Set chat logging information void setChatLoggingInformation( bool saveChats, const QString& saveChatPath, const int& directoryStructure ); + // Set how contacts are shown, by group, by online/offline, or mixed. + void setContactListDisplayMode( ContactListDisplayMode displayMode ); // Set email information - void setEmailInformation( bool useHotmail, const QString& emailCommand, bool showEmail, bool showOtherFolders ); + void setEmailInformation( bool showEmail, bool showOtherFolders ); // Set the font void setFont( const QFont& font ); // Set the font color @@ -207,6 +218,8 @@ class Account : public QObject void setGuestAccount( bool guestAccount ); // Change the status to set upon connection void setInitialStatus( Status status ); + // Set the mode of display list pictures + void setListPictureSize( int mode ); // change the personal message void setPersonalMessage( const QString& newMessage ); // Set basic account data @@ -214,7 +227,7 @@ class Account : public QObject // Set notification alerts information void setNotificationsInformation( bool doNotifyContactsOnline, bool doNotifyContactsStatus, bool doNotifyContactsChatStart, bool doNotifyContactsChatMessages, - bool doNotifyContactsOffline, bool doNotifyEmails, int notificationDuration ); + bool doNotifyContactsOffline, bool doNotifyInboxEmails, bool doNotifyOtherEmails, int notificationDuration, bool hideWhenBusy ); // Set whether to show popup notifications when contacts come online. void setNotifyContactsOnline( bool doNotifyContactsOnline ); // Set whether to show popup notifications when contacts change their msn status. @@ -225,22 +238,28 @@ class Account : public QObject void setNotifyContactsChatMessages( bool doNotifyContactsChatMessages ); // Set whether to show popup notifications when contacts go offline. void setNotifyContactsOffline( bool doNotifyContactsOffline ); - // Set whether to show popup notifications for incoming mail. - void setNotifyEmails( bool doNotifyEmails ); + // Set whether to show popup notifications for mail incoming in the Inbox. + void setNotifyInboxEmails( bool doNotifyInboxEmails ); + // Set whether to show popup notifications for mail incoming in other folders. + void setNotifyOtherEmails( bool doNotifyOtherEmails ); + // Set the account's login password + void setPassword( const QString &password ); + // Set the display picture file + void setPicturePath( const QString& picturePath ); // Set if the password must be stored void setSavePassword( bool savePassword ); // Set whether or not allowed contacts are shown. void setShowAllowedContacts( bool showAllowedContacts ); - // Set whether contacts are shown by group or by online/offline. - void setShowContactsByGroup( bool showContactsByGroup ); - // Set whether the display pictures of the contacts should be shown in list - void setShowListPictures( bool showPictures); + // Set whether empty groups are shown + void setShowEmptyGroups( bool showEmptyGroups ); // Set whether offline contacts should be shown. void setShowOfflineContacts( bool showOfflineContacts ); // Set whether or not removed (reverse) contacts are shown. void setShowRemovedContacts( bool showRemovedContacts ); // Set whether or not the sidebar should be shown in chats void setShowSidebar( bool showSidebar ); + // Set the way the chats will be grouped together + void setTabbedChatMode( int tabbedChatMode ); // Set a temporary password for the account for login attempts from the initialview dialog void setTemporaryPassword( const QString &temporaryPassword ); // Set whether or not to login with this account. @@ -249,8 +268,8 @@ class Account : public QObject void setUseEmoticons( bool useEmoticons); // Set whether the account's passport is verified void setVerified( bool verified ); - // Set whether or not to send our display image - void setShowImage( bool showImage ); + // Set whether or not to send our display picture + void setShowPicture( bool showPicture ); // Creates the MsnObject only if the user wants to show a display picture void updateMsnObject(); @@ -271,12 +290,14 @@ class Account : public QObject QFont contactFont_; // The font color to be applied to contact messages. QString contactFontColor_; - // The number of the custom image - int customImageIndex_; + // Whether contacts should be shown by group, by online/offline status, or mixed. + ContactListDisplayMode contactListDisplayMode_; // Whether the account is marked to be deleted bool deleted_; // Whether the account has been changed at all bool dirty_; + // Path of the display picture set by the user + QString displayPicturePath_; // Show a notification when contacts come online? bool doNotifyContactsOnline_; // Show a notification when contacts change their status? @@ -287,10 +308,10 @@ class Account : public QObject bool doNotifyContactsChatMessages_; // Show a notification when contacts go offline? bool doNotifyContactsOffline_; - // Show a notification when receiving new mail? - bool doNotifyEmails_; - // The external command used, optionally, to open email - QString emailCommand_; + // Show a notification when receiving new mail in the inbox? + bool doNotifyInboxEmails_; + // Show a notification when receiving new mail in other folders? + bool doNotifyOtherEmails_; // Whether the user can receive email notifications (hotmail.com or msn.com account) bool emailSupported_; // The directory of a selected emoticon @@ -300,18 +321,22 @@ class Account : public QObject // The user's message font color. QString fontColor_; // The user's friendly name, i.e. "Mike" - QString friendlyName_; + FormattedString friendlyName_; // Whether the account is a "guest account", not permanently saved on the computer bool guestAccount_; // Whether follow-up messages from the contact should be grouped. bool groupFollowupMessages_; // The user's handle, i.e. mkb137b@hotmail.com QString handle_; + // Whether to hide popup notifications when busy. + bool hideNotificationsWhenBusy_; // The number of minutes of inactivity before the user status is // changed to idle. int idleTime_; // The status to connect as Status initialStatus_; + // Display list pictures dimensions. + int listPictureSize_; // The duration in seconds that a notification balloon is shown. int notificationDuration_; // The user's password @@ -328,17 +353,15 @@ class Account : public QObject bool shakeNudge_; // Whether or not allowed contacts should be visible. bool showAllowedContacts_; - // Whether contacts should be shown by group (true) or by online/offline status (false). - bool showContactsByGroup_; // Whether or not to show any email notifications (the user may not // have a hotmail account). bool showEmail_; + // Whether or not to display empty groups in the contact list. + bool showEmptyGroups_; // Whether or not time information is shown for chat messages. bool showMessageTime_; // Whether now listening information should be shown or not. bool showNowListening_; - // Whether or not display pictures are shown. - bool showListPictures_; // Whether or not offline contacts are shown. bool showOfflineContacts_; // Whether or not notifications should be shown for "other folder" email. @@ -347,6 +370,10 @@ class Account : public QObject bool showRemovedContacts_; // Whether or not the sidebar should be shown in chats bool showSidebar_; + // whether to show winks + bool showWinks_; + // The state of the tabbed chatting feature + int tabbedChatMode_; // A temporary password for the account for login attempts from the initialview dialog QString temporaryPassword_; // Whether or not to autologin with this user. @@ -357,16 +384,18 @@ class Account : public QObject bool useEmoticons_; // Whether or not to use bold/italic/underline effects in chats. bool useFontEffects_; - // Whether to use Hotmail as the mail client or not (ie, use command given) - bool useHotmail_; // Whether or not the user wants to go idle after a certain time. bool useIdleTimer_; + // Whether or not to enable MSN Plus formatting in the contact list + bool useListFormatting_; + // Whether or not to enable MSN Plus formatting in chat + bool useChatFormatting_; // Whether the account's passport is verified bool verified_; // the user's personal message - QString personalMessage_; - // Whether or not to send our display image - bool showImage_; + FormattedString personalMessage_; + // Whether or not to send our display picture + bool showPicture_; // MsnObject representing our display picture if we have one MsnObject *msnObject_; diff --git a/src/accountaction.cpp b/src/accountaction.cpp index 61928f5..fd6370f 100644 --- a/src/accountaction.cpp +++ b/src/accountaction.cpp @@ -36,10 +36,7 @@ AccountAction::AccountAction(Account *account, QWidget *parent ) // signal. connect( this, SIGNAL( activated() ), this, SLOT ( slotActivated() ) ); -// // Connect the group so that this action's text will be updated if -// // the account's name changes. -// connect( account_, SIGNAL( changedFriendlyName() ), -// this, SLOT ( updateText() ) ); + // Initialize the text by calling update. updateText(); } @@ -69,7 +66,6 @@ void AccountAction::updateText() } setText( account_->getHandle() ); -// setText( account_->getFriendlyName() ); } #include "accountaction.moc" diff --git a/src/accountaction.h b/src/accountaction.h index b776666..9cbc0d3 100644 --- a/src/accountaction.h +++ b/src/accountaction.h @@ -31,6 +31,7 @@ class Account; * activated and can update its text when the account changes. * * @author Mike K. Bennett + * @ingroup Root */ class AccountAction : public KAction { @@ -38,9 +39,13 @@ class AccountAction : public KAction public: // The constructor - AccountAction(Account *account, QWidget *parent=0); + AccountAction( Account *account, QWidget *parent = 0 ); // The destructor - ~AccountAction(); + ~AccountAction(); + + public slots: + // Update the action's text based on the account. + void updateText(); protected slots: //Inherit from KAction... @@ -50,10 +55,6 @@ class AccountAction : public KAction // The stored user account Account *account_; - private slots: // Private slots - // Update the action's text based on the account. - void updateText(); - signals: void activated( Account *account ); }; diff --git a/src/accountsmanager.cpp b/src/accountsmanager.cpp new file mode 100644 index 0000000..657c554 --- /dev/null +++ b/src/accountsmanager.cpp @@ -0,0 +1,494 @@ +/*************************************************************************** + accountsmanager.cpp - description + ------------------- + begin : Sat May 3 2008 + copyright : (C) 2008 by Valerio Pilo + email : valerio@kmess.org + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "accountsmanager.h" + +#include "utils/kmessconfig.h" +#include "currentaccount.h" +#include "kmess.h" +#include "kmessapplication.h" +#include "kmessdebug.h" + +#include + +#include + + +#ifdef KMESSDEBUG_ACCOUNTSMANAGER + #define KMESSDEBUG_ACCOUNTSMANAGER_KWALLET +#endif + + + +// Initialize the singleton instance to zero +AccountsManager* AccountsManager::instance_(0); + + + +/** + * Constructor + */ +AccountsManager::AccountsManager() +: passwordManager_( 0 ) +{ +} + + + +// Destructor +AccountsManager::~AccountsManager() +{ + // Delete the accounts + qDeleteAll( accounts_ ); + accounts_.clear(); + +#ifdef KMESSDEBUG_ACCOUNTSMANAGER + kDebug() << "DESTROYED."; +#endif +} + + + +// Add a new account to the list +void AccountsManager::addAccount( Account *account ) +{ + // Append account + accounts_.append( account ); + +#ifdef KMESSDEBUG_ACCOUNTSMANAGER + kDebug() << "New account created:" << account->getHandle() << "."; +#endif + + emit accountAdded( account ); +} + + + +// An account's settings have been changed +void AccountsManager::changeAccount( Account *account, QString oldHandle, QString oldFriendlyName ) +{ + QString newHandle = account->getHandle(); + + // We're saving settings for a new account + if( ! accounts_.contains( account ) ) + { +#ifdef KMESSDEBUG_ACCOUNTSMANAGER + kDebug() << "Saving settings for new account" << newHandle; +#endif + + // Add the account to the account list. + addAccount( account ); + } +#ifdef KMESSDEBUG_ACCOUNTSMANAGER + else + { + kDebug() << "Saving settings for " << oldHandle; + } +#endif + + + CurrentAccount *currentAccount = CurrentAccount::instance(); + + // If it's the current account that has been changed, copy the account settings there + if( newHandle == currentAccount->getHandle() ) + { + // Copy the account settings to the current account +#ifdef KMESSDEBUG_ACCOUNTSMANAGER + kDebug() << "Copying modified Account settings to CurrentAccount."; +#endif + + currentAccount->copyAccount( account ); + } + + // If the account is set to use autologin, make sure that all other accounts do not + if( ! account->isDeleted() && account->getUseAutologin() ) + { + foreach( Account *otherAccount, accounts_ ) + { + if( otherAccount != account ) + { + otherAccount->setUseAutologin( false ); + } + } + } + + // Rename the account's directory if the handle has changed + if( oldHandle != newHandle ) + { +#ifdef KMESSDEBUG_ACCOUNTSMANAGER + kDebug() << "Moving account dir from" << oldHandle << "to" << newHandle; +#endif + + QString accountsPath = KMessConfig::instance()->getAccountsDirectory(); + + QDir accountsDir( accountsPath ); + + if( accountsDir.exists( newHandle ) ) + { + kWarning() << "Destination account directory" << newHandle << "already exists!"; + } + + if( accountsDir.rename( oldHandle, newHandle ) ) + { + kWarning() << "Unable to move account directory" << oldHandle << "to" << newHandle << "!"; + } + } + + // Commit configuration changes to disk, now + // Makes sure the settings are not lost if KMess is terminated or crashes. + account->saveProperties(); + + // Emit a signal so that the UI can be updated + emit accountChanged( account, oldHandle, oldFriendlyName ); +} + + + +// Verify is there is a saved account with the specified handle +bool AccountsManager::contains( Account *account ) const +{ + return accounts_.contains( account ); +} + + + +// Delete the given account +void AccountsManager::deleteAccount( Account *account ) +{ + if( KMESS_NULL(account) ) return; + + emit accountDeleted( account ); + + QString handle = account->getHandle(); + KMessApplication *kmessApp = static_cast( kapp ); + + if( ( handle == CurrentAccount::instance()->getHandle() ) && kmessApp->getContactListWindow()->isConnected() ) + { +#ifdef KMESSDEBUG_ACCOUNTSMANAGER + kDebug() << "Not deleting account " << handle << " yet."; +#endif + + // Already delete account data. + // NOTE: when more classes have an Account* object, consider creating a setDeleted(true) + // method, and let deleteAccountData() fire a deleteAccount(this) signal. + account->setDeleted(); + return; + } + +#ifdef KMESSDEBUG_ACCOUNTSMANAGER + kDebug() << "Deleting account for " << handle << "."; +#endif + + // Remove the account from the list of accounts + if( accounts_.removeAll( account ) == 0 ) + { + kWarning() << "Account" << handle << "not found in collection!"; + } + + // Delete the account directory + KMessConfig::instance()->destroyConfigDir( KMessConfig::instance()->getAccountsDirectory() + "/" + handle ); + + // Delete the account's contents + account->setDeleted(); + account->deleteLater(); +} + + + +/** + * Delete the instance of the accounts manager + */ +void AccountsManager::destroy() +{ + delete instance_; + instance_ = 0; +} + + + +// Return the account for a given handle +Account *AccountsManager::getAccountByHandle( const QString &handle ) +{ + foreach( Account *account, accounts_ ) + { + if( account->getHandle() == handle ) + { + return account; + } + } + + return 0; +} + + + +// Get the list of all saved accounts +const QList AccountsManager::getAccounts() const +{ + return accounts_; +} + + + +//Initialize the KWallet password manager +void AccountsManager::initializePasswordManager( bool block ) +{ + // Don't initialize if it is already + if( passwordManager_ != 0 ) + { +#ifdef KMESSDEBUG_ACCOUNTSMANAGER_KWALLET + kDebug() << "KWallet is already initialized."; +#endif + return; + } + + // Obtain the window ID of the main KMess window + KMessApplication *kmessApp = static_cast( kapp ); + WId wId = kmessApp->getContactListWindow()->window()->winId(); + + if( block ) + { + // Open KWallet (synchronously - blocks KMess until the password is given) + passwordManager_ = KWallet::Wallet::openWallet( KWallet::Wallet::LocalWallet(), wId, KWallet::Wallet::Synchronous ); + if( passwordManager_ == 0 ) + { + kWarning() << "Opening KWallet failed!"; + return; + } + slotWalletOpen( true ); + return; + } + else + { + // Open KWallet (asynchronously - the slot will be called when - and if - the wallet will be open) + passwordManager_ = KWallet::Wallet::openWallet( KWallet::Wallet::LocalWallet(), wId, KWallet::Wallet::Asynchronous ); + connect( passwordManager_, SIGNAL( walletOpened(bool) ), + this, SLOT ( slotWalletOpen(bool) ) ); + } + + // An internal KWallet error has occurred + if( passwordManager_ == 0 ) + { + kWarning() << "Opening KWallet failed!"; + } +} + + + +// Read the passwords from the just opened wallet +void AccountsManager::slotWalletOpen( bool success ) +{ + if( ! success ) + { +#ifdef KMESSDEBUG_ACCOUNTSMANAGER_KWALLET + kDebug() << "Wallet opening failed, aborting."; +#endif + + delete passwordManager_; + passwordManager_ = 0; + return; + } + + // Opening the wallet has failed, due to the user entering a wrong wallet password for example + if( passwordManager_ == 0 || ! passwordManager_->isOpen() ) + { +#ifdef KMESSDEBUG_ACCOUNTSMANAGER_KWALLET + kDebug() << "Opening KWallet failed, ref is" << passwordManager_; +#endif + return; + } + + // Look for an existing kmess folder and create one if needed + if( ! passwordManager_->hasFolder( "KMess" ) ) + { + passwordManager_->createFolder( "KMess" ); + } + + // Set the current folder for password storing, it should't fail + if( ! passwordManager_->setFolder( "KMess" ) ) + { +#ifdef KMESSDEBUG_ACCOUNTSMANAGER_KWALLET + kWarning() << "Setting KWallet folder failed!"; +#endif + return; + } + +#ifdef KMESSDEBUG_ACCOUNTSMANAGER_KWALLET + kDebug() << "KWallet successfully opened, reading passwords."; +#endif + + QString password; + + // Read the password for each account + foreach( Account *account, accounts_ ) + { + if( passwordManager_->readPassword( account->getHandle(), password ) != 0 || password.isEmpty() ) + { +#ifdef KMESSDEBUG_ACCOUNTSMANAGER_KWALLET + kDebug() << "Couldn't read password for account" << account->getHandle(); +#endif + continue; + } + + account->setPassword( password ); + } + +#ifdef KMESSDEBUG_ACCOUNTSMANAGER_KWALLET + kDebug() << "Passwords have been read, emitting ready signal."; +#endif + emit passwordsReady(); + + return; +} + + + +/** + * Return a singleton instance of the accounts manager + */ +AccountsManager* AccountsManager::instance() +{ + // If the instance is null, create a new accounts manager and return that. + if ( instance_ == 0 ) + { + instance_ = new AccountsManager(); + } + return instance_; +} + + + +/** + * Load the accounts from disk + */ +void AccountsManager::readProperties() +{ + // Obtain the list of account directories in the KMess config directory + QStringList accountList( KMessConfig::instance()->getAccountsList() ); + + // Add each one of the saved accounts to the internal list + foreach( QString handle, accountList ) + { + if( Account::isValidEmail( handle ) ) + { + Account *account = new Account(); + account->readProperties( handle ); + addAccount( account ); + } + } +} + + + +// Show the settings dialog for a given account +void AccountsManager::showAccountSettings( Account *account, QWidget *parentWindow, AccountSettingsDialog::Page startingPage ) +{ + // No account has been specified, create one + if( ! account ) + { +#ifdef KMESSDEBUG_ACCOUNTSMANAGER + kDebug() << "Opening settings for a new account"; +#endif + + // Create an account to store the profile information + account = new Account(); + + // Assume the user *does* want to save it's settings, + // otherwise he/she would have used the main login dialog. + account->setGuestAccount( false ); + } +#ifdef KMESSDEBUG_ACCOUNTSMANAGER + else + { + kDebug() << "Opening settings for " << account->getHandle(); + } +#endif + + CurrentAccount *currentAccount = CurrentAccount::instance(); + KMess *kmess = static_cast( kapp )->getContactListWindow(); + bool isCurrentAccount = ( account->getHandle() == currentAccount->getHandle() ); + bool isConnectedCurrentAccount = isCurrentAccount && ( kmess->isConnected() ); + + // Show the settings dialog + AccountSettingsDialog *accountSettingsDialog = AccountSettingsDialog::instance( parentWindow ); + + connect( accountSettingsDialog, SIGNAL( deleteAccount(Account*) ), + this, SLOT ( deleteAccount(Account*) ) ); + connect( accountSettingsDialog, SIGNAL( changedSettings(Account*,QString,QString) ), + this, SLOT ( changeAccount(Account*,QString,QString) ) ); + + // If it's the current account, copy some UI settings from the current account to the account + if( isConnectedCurrentAccount ) + { +#ifdef KMESSDEBUG_ACCOUNTSMANAGER + kDebug() << "Copying UI settings from CurrentAccount to the Account object."; +#endif + account->copyAccountUISettings( currentAccount ); + } + + accountSettingsDialog->loadSettings( account, isConnectedCurrentAccount, startingPage ); + accountSettingsDialog->show(); + accountSettingsDialog->raise(); +} + + + +// Store the password of all accounts to the user's KWallet +void AccountsManager::storeAccountsPasswords() +{ + QString handle; + QString password; + + // If the user didn't activate the KWallet, do nothing as it isn't available now + if( passwordManager_ == 0 ) + { +#ifdef KMESSDEBUG_ACCOUNTSMANAGER_KWALLET + kDebug() << "KWallet is not ready, not saving passwords."; +#endif + return; + } + + // Store the password for each account + foreach( Account *account, accounts_ ) + { + handle = account->getHandle(); + password = account->getPassword(); + + // If the password is empty, delete the whole account entry from the wallet + if( passwordManager_->hasEntry( handle ) && password.isEmpty() ) + { +#ifdef KMESSDEBUG_ACCOUNTSMANAGER_KWALLET + kDebug() << "Account" << handle << "removed from kwallet"; +#endif + + passwordManager_->removeEntry( handle ); + continue; + } + + // Store the password + if( passwordManager_->writePassword( handle, password ) != 0 ) + { +#ifdef KMESSDEBUG_ACCOUNTSMANAGER_KWALLET + kDebug() << "Couldn't store password for account" << handle; +#endif + } + } +} + + + +#include "accountsmanager.moc" diff --git a/src/accountsmanager.h b/src/accountsmanager.h new file mode 100644 index 0000000..93c3948 --- /dev/null +++ b/src/accountsmanager.h @@ -0,0 +1,118 @@ +/*************************************************************************** + accountsmanager.h - description + ------------------- + begin : Sat May 3 2008 + copyright : (C) 2008 by Valerio Pilo + email : valerio@kmess.org + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef ACCOUNTSMANAGER_H +#define ACCOUNTSMANAGER_H + +#include "settings/accountsettingsdialog.h" + +#include + +#include + +// Forward declarations +class Account; + + + +/** + * @brief The class responsible for keeping a list of saved user accounts + * + * @author Valerio Pilo + * @ingroup Root + */ +class AccountsManager : public QObject +{ + Q_OBJECT + + public: // Public methods + + // Verify is there is a saved account with the specified handle + bool contains( Account *account ) const; + // Return the account for a given handle + Account * getAccountByHandle( const QString &handle ); + // Get the list of all saved accounts + const QList getAccounts() const; + // Initialize the KWallet password manager + void initializePasswordManager( bool block = false ); + // Load the accounts from disk + void readProperties(); + // Show the settings dialog for a given account + void showAccountSettings( Account *account = 0, QWidget *parentWindow = 0, + AccountSettingsDialog::Page startingPage = AccountSettingsDialog::PageAccount ); + // Store the password of all accounts to the user's KWallet + void storeAccountsPasswords(); + + + public slots: + + // Add a new account to the list + void addAccount( Account *account ); + // An account's settings have been changed + void changeAccount( Account *account, QString oldHandle, QString oldFriendlyName ); + // Delete the given account + void deleteAccount( Account *account ); + + + public: // Public static methods + + // Delete the instance of the accounts manager + static void destroy(); + // Return a singleton instance of the accounts manager + static AccountsManager *instance(); + + + private: // Private methods + + // Constructor + AccountsManager(); + // Destructor + ~AccountsManager(); + + + private slots: + + // Read the passwords from the just opened wallet + void slotWalletOpen( bool success ); + + private: // Private properties + + // A list of user accounts + QList accounts_; + + + private: // Private static members + + // The instance of the accounts manager singleton + static AccountsManager *instance_; + // The instance of the KWallet password manager + KWallet::Wallet *passwordManager_; + + signals: + // A new account has been created + void accountAdded( Account *account ); + // An account's properties have changed + void accountChanged( Account *account, QString oldHandle, QString oldFriendlyName ); + // An account has been deleted + void accountDeleted( Account *account ); + // The password manager has read the passwords + void passwordsReady(); +}; + + + +#endif diff --git a/src/autologinview.cpp b/src/autologinview.cpp deleted file mode 100644 index 3dddda4..0000000 --- a/src/autologinview.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/*************************************************************************** - autologinview.cpp - description - ------------------- - begin : Mon Feb 10 2003 - copyright : (C) 2003 by Mike K. Bennett - email : mkb137b@hotmail.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 License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#include "autologinview.h" - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - - - -// The constructor -AutologinView::AutologinView( QWidget *parent ) - : QWidget( parent ) - , Ui::AutologinView() -{ - // Set up the UI first - setupUi( this ); - - // Select an image to load into the main screen.. mmmm, eggs! - // Applied both in InitialView and AutologinView. - QString imageName; - QDate currentDate = QDate::currentDate(); - if( currentDate.month() == 12 && currentDate.day() > 15 ) - { - imageName = "kmesslogo2"; - } - else - { - imageName = "kmesslogo"; - } - - // Load the chosen icon - QPixmap icon = KIconLoader::global()->loadIcon( imageName, KIconLoader::User ); - kmessLogo_->setPixmap( icon ); - kmessLogo_->setMinimumSize( icon.width(), icon.height() ); -} - - - -// The destructor -AutologinView::~AutologinView() -{ -} - - - -// Change the connection status text -void AutologinView::statusMessage( QString text ) -{ - detailsLabel_->setText( text ); -} - - - -#include "autologinview.moc" diff --git a/src/autologinview.ui b/src/autologinview.ui deleted file mode 100644 index 09f680f..0000000 --- a/src/autologinview.ui +++ /dev/null @@ -1,171 +0,0 @@ - - AutologinView - - - - 0 - 0 - 375 - 466 - - - - true - - - - - - - - Qt::Horizontal - - - - 20 - 20 - - - - - - - - - 0 - 0 - - - - - 64 - 64 - - - - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 20 - 20 - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 153 - - - - - - - - - 18 - 75 - true - PreferAntialias - true - - - - Logging in... - - - Qt::AlignCenter - - - - - - - - - - - - 59 - 59 - 59 - - - - - - - - - 59 - 59 - 59 - - - - - - - - - 119 - 117 - 111 - - - - - - - - - true - - - - - - - Qt::AlignCenter - - - - - - - Qt::Vertical - - - - 20 - 153 - - - - - - - - qPixmapFromMimeSource - - - diff --git a/src/binreloc.c b/src/binreloc.c index 82c648f..827ca31 100644 --- a/src/binreloc.c +++ b/src/binreloc.c @@ -13,11 +13,13 @@ #ifndef __BINRELOC_C__ #define __BINRELOC_C__ -#ifdef ENABLE_BINRELOC +#include "config-kmess.h" + +#if ( ENABLE_BINRELOC != 0 ) #include #include #include -#endif /* ENABLE_BINRELOC */ +#endif /* ( ENABLE_BINRELOC != 0 ) */ #include #include #include @@ -38,7 +40,7 @@ extern "C" { static char * _br_find_exe (BrInitError *error) { -#ifndef ENABLE_BINRELOC +#if ( ENABLE_BINRELOC == 0 ) if (error) *error = BR_INIT_ERROR_DISABLED; return NULL; @@ -177,9 +179,9 @@ _br_find_exe (BrInitError *error) static char * _br_find_exe_for_symbol (const void *symbol, BrInitError *error) { -#ifndef ENABLE_BINRELOC - if ( error && ( symbol || ! symbol ) ) /* Avoid a compiler warning */ - *error = BR_INIT_ERROR_DISABLED; + *error = BR_INIT_ERROR_DISABLED; /* Avoid a compiler warning */ + +#if ( ENABLE_BINRELOC == 0 ) return (char *) NULL; #else #define SIZE PATH_MAX + 100 diff --git a/src/chat/chat.cpp b/src/chat/chat.cpp new file mode 100644 index 0000000..a385767 --- /dev/null +++ b/src/chat/chat.cpp @@ -0,0 +1,1286 @@ +/*************************************************************************** + chat.cpp - description + ------------------- + begin : Wed Jan 15 22:41:32 CST 2003 + copyright : (C) 2003 by Mike K. Bennett + email : mkb137b@hotmail.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 License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "chat.h" + +#include "../contact/contact.h" +#include "../contact/contactextension.h" +#include "../contact/contactbase.h" +#include "../contact/contactlist.h" +#include "../network/chatinformation.h" +#include "../network/chatmessage.h" +#include "../network/msnswitchboardconnection.h" +#include "../network/specialgroups.h" +#include "../utils/richtextparser.h" +#include "../utils/xmlfunctions.h" +#include "../accountaction.h" +#include "../currentaccount.h" +#include "../kmessapplication.h" +#include "../kmessdebug.h" +#include "../kmess.h" +#include "chatmessageview.h" +#include "chatwindow.h" +#include "contactaction.h" +#include "contactsidebar.h" + +#include +#include +#include +#include + +#include +#include +#include + + + +#ifdef KMESSDEBUG_CHAT + #define KMESSDEBUG_CHAT_GENERAL + #define KMESSDEBUG_CHAT_CONTACTS + #define KMESSDEBUG_CHAT_FILETRANSFER +// #define KMESSDEBUG_CHAT_TYPING_MESSAGES +#endif + + +/** + * Define the maximum interval (in seconds) between each update of + * the status bar label, when displaying "contact is typing" messages. + */ +#define CHAT_MAXIMUM_TYPING_TIME 5 + + + +// The constructor +Chat::Chat( QWidget *parent ) +: ChatView( parent ) +, firstMessage_( true ) +, initialized_( false ) +, lastContact_( QString() ) +, msnSwitchboardConnection_( 0 ) +{ + hide(); + + // Setup the contact typing information timer + typingTimer_.setSingleShot( true ); + connect( &typingTimer_, SIGNAL( timeout() ), + this, SLOT ( contactTyping() ) ); +} + + + +// The destructor +Chat::~Chat() +{ +#ifdef KMESSDEBUG_CHAT_GENERAL + kDebug() << "DESTROYED."; +#endif +} + + + +// Choose the contact to start an invitation with. +QString Chat::chooseContact() +{ + if( KMESS_NULL(msnSwitchboardConnection_) ) return QString(); + + // Choose the contact. + const QStringList &contactsInChat = msnSwitchboardConnection_->getContactsInChat(); + switch( contactsInChat.count() ) + { + case 0: + // No contacts in the chat + if( msnSwitchboardConnection_->getLastContact().isEmpty() ) + { + // Send invitation to the first contact that should appear in the chat. + return msnSwitchboardConnection_->getFirstContact(); + } + else + { + // Resume chat with last contact + return msnSwitchboardConnection_->getLastContact(); + } + + case 1: + // Choose the only contact available in the chat + return contactsInChat.first(); + + default: + // Multiple contacts in the chat. + // TODO: The official client opens a contact-choose dialog here, and starts a new chat with the selected contact. + KMessageBox::sorry( this, i18n("You can't start this invitation because there are multiple contacts in this chat.") ); + return QString(); + } +} + + + +// A contact joined the chat +void Chat::contactJoined(QString handle, QString friendlyName) +{ + ContactAction *contactAction; + + if( ! participants_.contains( handle ) ) + { + participants_.prepend( handle ); + } + + lastContact_ = QString::null; + + contactAction = getContactActionByHandle( handle ); + if ( contactAction != 0 ) + { + contactAction->setInChat( true ); + } + + // Show message when the user has the sidebar disabled, + // or when a multi-chat has started. + bool isSidebarVisible = contactSidebar_->isVisible(); + if( ( ! isSidebarVisible && ! currentAccount_->getShowSidebar() ) + || ( msnSwitchboardConnection_ && msnSwitchboardConnection_->getContactsInChat().size() > 1 ) ) + { + showMessage( ChatMessage( ChatMessage::TYPE_NOTIFICATION, + ChatMessage::CONTENT_NOTIFICATION_PRESENCE, + false, + i18n("%1 has joined the chat.", Qt::escape( friendlyName ) ), + handle, + friendlyName ) ); + } + + + // Change the chat title + emit chatInfoChanged(); + + // Allow future changes in the nickname to update the chat title again + ContactBase *contact = currentAccount_->getContactByHandle( handle ); + if( contact ) + { + connect( contact, SIGNAL( changedFriendlyName() ), this, SIGNAL( chatInfoChanged() ) ); + } +} + + + +// A contact left the chat +void Chat::contactLeft(QString handle, bool isChatIdle ) +{ +#ifdef KMESSDEBUG_CHAT_GENERAL + kDebug() << "contact '" << handle << "' has left" << (isChatIdle ? " due to inactivity." : "") << "."; +#endif + + ContactAction *contactAction = getContactActionByHandle( handle ); + + if ( contactAction != 0 ) + { + contactAction->setInChat( false ); + } + + participants_.removeAll( handle ); + + // This was the last participant, save it as the last being in so we can + // still recognize this window as a chat with this contact + if( participants_.isEmpty() ) + { + lastContact_ = handle; + } + + // Show message when the user has the sidebar disabled, + // or a user left a multi-chat + bool isSidebarVisible = contactSidebar_->isVisible(); + if( ( ! isSidebarVisible && ! currentAccount_->getShowSidebar() ) + || ( msnSwitchboardConnection_ && msnSwitchboardConnection_->getContactsInChat().size() > 0 ) ) + { + QString contactName = currentAccount_->getContactFriendlyNameByHandle( handle ); + QString message; + + if( isChatIdle ) + { + message = i18n( "The conversation went idle, %1 has left the chat.", Qt::escape( contactName ) ); + } + else + { + message = i18n( "%1 has left the chat.", Qt::escape( contactName ) ); + } + + showMessage( ChatMessage( ChatMessage::TYPE_NOTIFICATION, + ChatMessage::CONTENT_NOTIFICATION_PRESENCE, + false, + message, + handle, + contactName ) ); + } + + // Change the caption to remove the contact who has left + emit chatInfoChanged(); + + // Disconnect the contact to avoid it updating the chat title + ContactBase *contact = currentAccount_->getContactByHandle( handle ); + if( contact ) + { + disconnect( contact, SIGNAL( changedFriendlyName() ), this, SIGNAL( chatInfoChanged() ) ); + } +} + + + +// A contact is typing +// If called without arguments, it will only update the list of typing contacts. +void Chat::contactTyping( const QString &handle, const QString &friendlyName, bool forceExpiration ) +{ + int secsTo; + int nextUpdate = CHAT_MAXIMUM_TYPING_TIME; // Allow a maximum number of seconds between each update + +#ifdef KMESSDEBUG_CHAT_TYPING_MESSAGES + kDebug() << "Called with handle=" << handle << ", friendlyName=" << friendlyName; + kDebug() << "Current list:" << typingContacts_; +#endif + + // Do not add anything to the list if the friendly name is empty + if( ! friendlyName.isEmpty() ) + { + QTime startTime = QTime::currentTime(); + + // If a contact is still typing, re-insert it in the list, so that the typing start time is updated + if( typingContacts_.contains( friendlyName ) ) + { + typingContacts_.remove( friendlyName ); + } + + // When we receive a message from this contact, we only remove it from the typing contacts + if( ! forceExpiration ) + { + // Add this contact to the list of contacts which are typing, and record when it has started writing + startTime.start(); + typingContacts_.insert( friendlyName, startTime ); + } + } + + // Update the list to remove expired typing events + QMutableMapIterator it( typingContacts_ ); + while( it.hasNext() ) + { + it.next(); + secsTo = (int) ( it.value().elapsed() * .001 ); // Only keep the seconds + + // If the typing event has expired, stop displaying it + if( secsTo >= CHAT_MAXIMUM_TYPING_TIME ) + { + typingContacts_.remove( it.key() ); + } + + // Find the typing event which will expire first, so we can next update when it expires + if( secsTo && secsTo < nextUpdate ) + { + nextUpdate = secsTo; + } + } + +#ifdef KMESSDEBUG_CHAT_TYPING_MESSAGES + kDebug() << "List after cleanup and update:" << typingContacts_; +#endif + + // The more time passes from the last update, the more we get close to the next update + if( nextUpdate < 5 ) + { + nextUpdate = CHAT_MAXIMUM_TYPING_TIME - nextUpdate; + } + +#ifdef KMESSDEBUG_CHAT_TYPING_MESSAGES + kDebug() << "Next update in" << nextUpdate << "seconds."; +#endif + + // Update the user interface + if( typingContacts_.contains( friendlyName ) ) + { + contactSidebar_->contactTyping( handle, friendlyName ); + } + else + { + contactSidebar_->messageReceived( handle ); + } + +#ifdef KMESSDEBUG_CHAT_TYPING_MESSAGES + kDebug() << "emitting signal from:" << this; +#endif + + // Let the other window components update, too + emit gotTypingMessage( this ); + + // Activate the timer for the next update if needed + if( ! typingContacts_.isEmpty() ) + { + typingTimer_.start( nextUpdate * 1000 ); + } +} + + + +// Return a list of the contacts in the chat to be used as window caption +QString Chat::getCaption() +{ + QStringList activeContacts; + + // The chat has no switchboard connection.. it is not even a chat! + if( msnSwitchboardConnection_ == 0 ) + { + // If the last contact is empty, it's probably a test chat window. + if( ! lastContact_.isEmpty() ) + { + activeContacts << lastContact_; + } + } + else + { + // Query the switchboard for the list of participants + activeContacts = msnSwitchboardConnection_->getContactsInChat(); + } + + // How many people are there in here? + switch( activeContacts.count() ) + { + // The chat is empty + case 0: + return QString(); + + // One contact is connected; or the only contact of the session has left + case 1: + return Qt::escape( currentAccount_->getContactFriendlyNameByHandle( activeContacts[0], STRING_CLEANED ) ); + + // Two contacts are connected + case 2: + return i18nc( "Name of a chat tab", "%1 and %2", + Qt::escape( currentAccount_->getContactFriendlyNameByHandle( activeContacts[0], STRING_CLEANED ) ), + Qt::escape( currentAccount_->getContactFriendlyNameByHandle( activeContacts[1], STRING_CLEANED ) ) + ); + + // Three or more contacts are connected + default: + return i18nc( "Name of a chat tab", "%1 et al.", + Qt::escape( currentAccount_->getContactFriendlyNameByHandle( activeContacts[0], STRING_CLEANED ) ) + ); + } +} + + + +// Return the chat window which currently contains this Chat +ChatWindow *Chat::getChatWindow() +{ + return static_cast( window() ); +} + + + +// Return the list of contacts in the chat +QStringList Chat::getParticipants() +{ + // If all contacts have left the chat, return the last contact as being in chat, + // even if it's not technically true + if( participants_.isEmpty() ) + { + return QStringList() << lastContact_; + } + + return participants_; +} + + + +// Return the list of contacts which are typing +QStringList Chat::getTypingContacts() +{ + return typingContacts_.keys(); +} + + + +// Return the switchboard connection used by the chat window. +MsnSwitchboardConnection * Chat::getSwitchboardConnection() const +{ + return msnSwitchboardConnection_; +} + + + +// Initialize the object +bool Chat::initialize( MsnSwitchboardConnection *switchboardConnection ) +{ + if ( initialized_ ) + { + kDebug() << "already initialized."; + return false; + } + + if( ! ChatView::initialize() ) + { + kDebug() << "Couldn't setup the chat view widget."; + return false; + } + + // Connect the sidebar slots + connect( contactSidebar_, SIGNAL( setContactAllowed(QString) ), + this, SIGNAL( setContactAllowed(QString) ) ); + connect( contactSidebar_, SIGNAL( setContactAdded(QString,bool) ), + this, SIGNAL( setContactAdded(QString,bool) ) ); + connect( contactSidebar_, SIGNAL( setContactBlocked(QString,bool) ), + this, SIGNAL( setContactBlocked(QString,bool) ) ); + + // Save the switchboard connection + setSwitchboardConnection( switchboardConnection ); + + // Pre-register the contacts as participants to this chat. + lastContact_ = switchboardConnection->getFirstContact(); + participants_ = switchboardConnection->getContactsInChat(); + + // Save the date/time the chat started. + // Use it to save a chatlog later. + startDate_ = QDate::currentDate(); + startTime_ = QTime::currentTime(); + + // Update the chat window caption with the contact name + emit chatInfoChanged(); + + initialized_ = true; + return true; +} + + + +// Invite a contact to the chat +void Chat::inviteContact( QString handle ) +{ + if( msnSwitchboardConnection_ == 0 ) + { + return; + } + + msnSwitchboardConnection_->inviteContact( handle ); +} + + + +// Return whether or not the chat is at its first incoming message +bool Chat::isChatFirstMessage() +{ + return firstMessage_; +} + + + +// Return whether or not the contact is in this chat. +bool Chat::isContactInChat( const QString &handle ) +{ +#ifdef KMESSDEBUG_CHAT_CONTACTS + kDebug() << "Checking handle " << handle << " - participants: " << participants_.join(",") << " - lastContact: " << lastContact_; +#endif + + if( participants_.isEmpty() ) + { +#ifdef KMESSDEBUG_CHAT_CONTACTS + kDebug() << "returning " << ( lastContact_ == handle ? "true" : "false" ); +#endif + return ( lastContact_ == handle ); + } + +#ifdef KMESSDEBUG_CHAT_CONTACTS + kDebug() << "returning " << ( participants_.contains( handle ) ? "true" : "false" ); +#endif + return participants_.contains( handle ); +} + + + +// Return whether or not this is an exclusive chat with the given contact +bool Chat::isExclusiveChatWithContact( const QString& handle ) +{ +#ifdef KMESSDEBUG_CHAT_CONTACTS + kDebug() << "Checking handle " << handle << " - participants: " << participants_.join(",") << " - lastContact: " << lastContact_; +#endif + if( participants_.isEmpty() ) + { +#ifdef KMESSDEBUG_CHAT_CONTACTS + kDebug() << "returning " << ( lastContact_ == handle ? "true" : "false" ); +#endif + return ( lastContact_ == handle ); + } + +#ifdef KMESSDEBUG_CHAT_CONTACTS + kDebug() << "returning " << ( participants_.contains(handle) && participants_.count() < 2 ? "true" : "false" ); +#endif + return ( participants_.contains(handle) && participants_.count() < 2 ); +} + + + +// The chat is closing +void Chat::queryClose() +{ +#ifdef KMESSDEBUG_CHAT_GENERAL + kDebug() << "Saving chat log"; +#endif + + // Notify ChatMaster + emit closing( this ); + + // Save the chat + saveChatAutomatically(); + + /** + * TODO: Uncomment this part: it needs a _reliable_ method to check whether there are running file + * transfers. The commented part uses "ApplicationList::isEmpty()" which I've removed, the new + * method to check will probably be elsewhere. The main code of that method was this: + * + // check if there are active applications + if ( mimeApplications_.count() + + p2pApplications_.count() - + abortingApplications_.count() == 0) + return true; else return false; + * + */ + /* + // If there are active applications show a warning to the user + if( participants_.count() == 1 ) // Transfers are not possibile in multiple chats + { + // Check if there are active applications + ContactBase *contact = currentAccount_->getContactByHandle( participants_.first() ); + if( contact != 0 && contact->getApplicationList() != 0 + && ! contact->getApplicationList()->isEmpty() ) + { + int choice = KMessageBox::warningContinueCancel( this, i18n("Continue closing the chat window?\nActive transfers will be aborted!")); + if( choice == KMessageBox::Cancel ) + { + return false; + } + } + } + */ +} + + + +// The application is exiting +void Chat::queryExit() +{ +#ifdef KMESSDEBUG_CHAT_GENERAL + kDebug() << "Saving chat log"; +#endif + + // Just save the chat before going down + saveChatAutomatically(); +} + + + +// A message was received from a contact. +void Chat::receivedMessage(const ChatMessage &message) +{ +#ifdef KMESSDEBUG_CHAT_GENERAL + kDebug() << "Displaying message, internal type=" << message.getType(); + kDebug() << "First message = " << firstMessage_ << "."; +#endif + + // Find if it's the first message of the chat + bool isFirstMessage = isEmpty(); + + showMessage( message ); + + // If this is the first message received... + if( firstMessage_ ) + { + // Change the first message property only when we're actually receiving the second message; + // this way the notification balloons can work correctly. (and maybe future features requiring + // correct detection of the first message!) + if( ! isFirstMessage ) + firstMessage_ = false; + } + + // Update the date of the last received message. Only allowed for contacts on the contact list. + Contact *sourceContact = currentAccount_->getContactList()->getContactByHandle( message.getContactHandle() ); + if( sourceContact != 0 && sourceContact->getExtension() ) + { + sourceContact->getExtension()->setLastMessageDate(); + } + + // Check if we should send an automatic reply to the chat message + if( currentAccount_ != 0 + && msnSwitchboardConnection_ != 0 + && currentAccount_->getAutoreply() + && ( lastSentAutoMessage_.isNull() || lastSentAutoMessage_.elapsed() > 30000 ) ) + { + // Send an auto away message every 30 sec (if the contact keeps writing) + +#ifdef KMESSDEBUG_CHAT_GENERAL + kDebug() << "Sending auto reply to chat message."; +#endif + + QString awayMessage = i18nc( "Automatic reply message", + "%1 (This message was sent automatically)", + currentAccount_->getAutoreplyMessage() ); + + // Send the autoreply message to the contact(s) + msnSwitchboardConnection_->sendChatMessage( awayMessage ); + + // Show the autoreply message + ChatMessage autoMessage = ChatMessage( ChatMessage::TYPE_OUTGOING, + ChatMessage::CONTENT_MESSAGE, + false, + awayMessage, + currentAccount_->getHandle(), + currentAccount_->getFriendlyName(), + currentAccount_->getPicturePath(), + currentAccount_->getFont(), + currentAccount_->getFontColor() ); + showMessage( autoMessage ); + + // Save the time the message was sent, to display the next after some time + lastSentAutoMessage_.start(); + } + + // Remove this contact from the list of typing messages + contactTyping( message.getContactHandle(), message.getContactName(), true ); + + // Emit the new message signal so that the user will receive a notification + emit gotChatMessage( message, this ); + + // Put back the focus to the message edit box + getMessageEditField()->setFocus(); +} + + + +// Save the chat if necessary +void Chat::saveChatAutomatically() +{ + QTime currentTime; + QDate currentDate; + QString basePath, year, month, day, hour, minute, time, file, savePath; + QDir dir; + int saveStructure; + + + // Check if "save chats" is enabled + if ( ! currentAccount_->getSaveChats() ) + { +#ifdef KMESSDEBUG_CHAT_GENERAL + kDebug() << "User has save chats disabled, not saving chat."; +#endif + return; + } + + + // Check if the message area is not empty + if(isEmpty() ) + { +#ifdef KMESSDEBUG_CHAT_GENERAL + kDebug() << "Message area is empty, not saving chat."; +#endif + return; + } + + // Get the base path + basePath = currentAccount_->getSaveChatPath(); + + dir.setPath( basePath ); + if( ! dir.exists() ) + { + // TODO: Add a message box to notify the chat log folder does not exist (and avoid displaying it when KMess is forced to quit). + kWarning() << "Base directory '" << basePath << "' doesn't exist. Check your settings."; + return; + } + +#ifdef KMESSDEBUG_CHAT_GENERAL + kDebug() << "Automatically saving the chat."; +#endif + + // Get date strings with numbers padded. + year .sprintf("%04d", startDate_.year() ); + month .sprintf("%02d", startDate_.month() ); + day .sprintf("%02d", startDate_.day() ); + hour .sprintf("%02d", startTime_.hour() ); + minute .sprintf("%02d", startTime_.minute() ); + time = hour + ":" + minute; + +#ifdef KMESSDEBUG_CHAT_GENERAL + kDebug() << "Date is " << year << "/" << month << "/" << day << " " << hour << ":" << minute << "."; +#endif + + // Determine the path to save + saveStructure = currentAccount_->getSavedChatDirectoryStructure(); + + switch(saveStructure) + { + case Account::BYYEAR : + { + // save as chatpath/yyyy/mmdd hh:mm contactemail.html + if(! dir.exists(year)) dir.mkdir(year); + dir.cd(year); + file = "/" + month + "-" + day + " "; + break; + } + case Account::BYMONTH : + { + // save as chatpath/yyyy/mm/dd hh:mm contactemail.html + if(! dir.exists(year)) dir.mkdir(year); + dir.cd(year); + if(! dir.exists(month)) dir.mkdir(month); + dir.cd(month); + file = "/" + day + " "; + break; + } + case Account::BYDAY : + { + // save as chatpath/yyyy/mm/dd/hh:mm contactemail.html + if(! dir.exists(year)) dir.mkdir(year); + dir.cd(year); + if(! dir.exists(month)) dir.mkdir(month); + dir.cd(month); + if(! dir.exists(day)) dir.mkdir(day); + dir.cd(day); + file = "/"; + break; + } + case Account::SINGLEDIRECTORY : + default : + { + // save as chatpath/yyyymmdd hh:mm contactemail.html + file = "/" + year + "-" + month + "-" + day + " "; + } + } + + savePath = dir.absolutePath() + file + time + " "; + if( participants_.isEmpty() ) + { + savePath += lastContact_; + } + else + { + savePath += participants_.first(); + } + + + // Make sure chat logs are not automatically overwritten. + if( QFile::exists( savePath + ".html" ) ) + { + kWarning() << "Chat log " << savePath << ".html already exists!"; + for( int i = 1; i < 100; i++ ) + { + if( ! QFile::exists(savePath + "." + QString::number(i) + ".html") ) + { + savePath += "." + QString::number(i); + break; + } + } + } + + // Save the chat + saveChatToFile( savePath + ".html" ); +} + + + +// Enable or disable the parts of the window which allow user interaction +void Chat::setEnabled( bool isEnabled ) +{ + // Also remove the switchboard connection when disabling + if( ! isEnabled && msnSwitchboardConnection_ != 0 ) + { + setSwitchboardConnection( 0 ); + } + + // Do not reactivate if there is no switchboard connection (ChatMaster will recreate it for us) + if( isEnabled && msnSwitchboardConnection_ == 0 ) + { + return; + } + + ChatView::setEnabled( isEnabled ); +} + + + +// Change the switchboard connection used by the chat window. +void Chat::setSwitchboardConnection( MsnSwitchboardConnection *newConnection ) +{ + QStringList participants; + QStringList::Iterator it; + + // Everything is connected already. +#ifdef KMESSDEBUG_CHAT_GENERAL + if( msnSwitchboardConnection_ == 0 ) + { + kDebug() << "Switchboard was not set up."; + } + else + { + kDebug() << "Switchboard was " + << ( msnSwitchboardConnection_ == newConnection ? "already set" : "different" ) << "." << endl; + } +#endif + + if( msnSwitchboardConnection_ != 0 ) + { + // Notify that all contacts have left the chat + if( ! msnSwitchboardConnection_->isEmpty() ) + { + // getContactsInChat() returns the last contact if the SB is empty. + participants = msnSwitchboardConnection_->getContactsInChat(); +#ifdef KMESSDEBUG_CHAT_GENERAL + kDebug() << "Removing old switchboard's participants from the chat:" << participants; +#endif + foreach( QString handle, participants ) + { + contactSidebar_->contactLeft( handle, false ); + } + } + + // Delete all signals between us and the old switchboard + disconnect( this, 0, msnSwitchboardConnection_, 0 ); + disconnect( msnSwitchboardConnection_, 0, contactSidebar_, 0 ); + disconnect( msnSwitchboardConnection_, 0, this, 0 ); + + // Also delete the old connection, if we're setting up a new one + if( msnSwitchboardConnection_ != newConnection ) + { + msnSwitchboardConnection_->deleteLater(); + } + } + + msnSwitchboardConnection_ = newConnection; + + if( newConnection == 0 ) + { + connect( this, SIGNAL( sendMessageToContact(QString) ), + this, SLOT ( slotSendingFailed(QString) ) ); + return; + } + else + { + disconnect( this, SIGNAL( sendMessageToContact(QString) ), + this, SLOT ( slotSendingFailed(QString) ) ); + } + + // Make the new signals connections + connect( msnSwitchboardConnection_, SIGNAL( contactJoinedChat(QString, QString) ), + contactSidebar_, SLOT ( contactJoined(QString, QString) ) ); + connect( msnSwitchboardConnection_, SIGNAL( contactLeftChat(QString,bool) ), + contactSidebar_, SLOT ( contactLeft(QString,bool) ) ); + connect( msnSwitchboardConnection_, SIGNAL( contactTyping(QString, QString) ), + contactSidebar_, SLOT ( contactTyping(QString, QString) ) ); + + connect( msnSwitchboardConnection_, SIGNAL( contactJoinedChat(QString, QString) ), + this, SLOT ( contactJoined(QString, QString) ) ); + connect( msnSwitchboardConnection_, SIGNAL( contactLeftChat(QString,bool) ), + this, SLOT ( contactLeft(QString,bool) ) ); + connect( msnSwitchboardConnection_, SIGNAL( contactTyping(QString, QString) ), + this, SLOT ( contactTyping(QString, QString) ) ); + connect( msnSwitchboardConnection_, SIGNAL( chatMessage(const ChatMessage&) ), + this, SLOT ( receivedMessage(const ChatMessage&) ) ); + connect( msnSwitchboardConnection_, SIGNAL( receivedNudge(const QString&) ), + this, SLOT ( slotReceivedNudge(const QString&) ) ); + connect( msnSwitchboardConnection_, SIGNAL( sendingFailed(QString) ), + this, SLOT ( slotSendingFailed(QString) ) ); + connect( msnSwitchboardConnection_, SIGNAL( deleteMe(MsnSwitchboardConnection*) ), + this, SLOT ( setSwitchboardConnection() ) ); + + connect( this, SIGNAL( sendMessageToContact(QString) ), + msnSwitchboardConnection_, SLOT ( sendChatMessage(QString) ) ); + connect( this, SIGNAL( sendInkToContact(QByteArray) ), + msnSwitchboardConnection_, SLOT ( sendInk(QByteArray) ) ); + connect( this, SIGNAL( userIsTyping() ), + msnSwitchboardConnection_, SLOT ( sendTypingMessage() ) ); + + + // Add to the sidebar all the contacts that are present in the new switchboard + participants = msnSwitchboardConnection_->getContactsInChat(); +#ifdef KMESSDEBUG_CHAT_GENERAL + kDebug() << "Adding new switchboard's participants to the chat:" << participants; +#endif + foreach( QString handle, participants ) + { + contactSidebar_->contactJoined( handle, QString() ); // The sidebar slot doesn't use the second parameter + } +} + + + +// Show a wink received by a contact +void Chat::showWink( const QString &handle, const QString &filename, const QString &/*animationName*/ ) +{ +#ifdef KMESSDEBUG_CHAT_GENERAL + kDebug() << "Processing received wink data."; +#endif + + QString friendlyName = currentAccount_->getContactFriendlyNameByHandle(handle); + + // If we aren't showing winks, notify the user that we got one but don't actually display the animation. + if( ! currentAccount_->getShowWinks() ) + { + receivedMessage( ChatMessage( ChatMessage::TYPE_NOTIFICATION, + ChatMessage::CONTENT_NOTIFICATION_WINK, + true, + i18n( "You received a wink from %1.", Qt::escape( friendlyName ) ), + handle, + friendlyName ) ); + return; + } + + // TODO: move the processing of wink files to a special "WinkArchive" class. + + // Test whether the file exists, before cabextract fails. + if( ! QFile::exists(filename) ) + { + kWarning() << "file not found: " << filename << "!"; + return; + } + + // Remove extension + QString dirName = QString(filename).remove( QRegExp("\\.[a-z]+$") ); + + QFile metaFile(dirName + "/content.xml"); + + // See if the file was extracted already + if( ! metaFile.exists() ) + { + // Run cabextract to get the contents of the file + // -q: quiet, only print errors, -d: output dir, -l: force lowercase (avoiding incompatibilities because win32 is case-insensitive) + KProcess cabextract(this); + cabextract.closeReadChannel( QProcess::StandardOutput ); + cabextract.closeReadChannel( QProcess::StandardError ); + cabextract << "cabextract" << "-q" << "-d" << dirName << filename; + bool done = cabextract.execute( 5000 ); + // TODO: capture `cabextract` error messages, display nicely. + + if( done != 0 ) + { + showMessage( ChatMessage( ChatMessage::TYPE_SYSTEM, + ChatMessage::CONTENT_SYSTEM_ERROR, + false, + i18n("The wink could not be displayed. Make sure you have 'cabextract' installed."), + handle ) ); + return; + } + if( cabextract.exitStatus() != QProcess::NormalExit || ! metaFile.exists() ) + { + showMessage( ChatMessage( ChatMessage::TYPE_SYSTEM, + ChatMessage::CONTENT_SYSTEM_ERROR, + false, + i18n("The wink could not be displayed. The data could not be read."), + handle ) ); + return; + } + } + + // Open the file + if( ! metaFile.open( QIODevice::ReadOnly ) ) + { + kWarning() << "file could not be opened: " << metaFile.fileName() << "!"; + return; + } + + // Parse the XML + QString xmlErrorMessage; + QDomDocument xml; + if( ! xml.setContent(&metaFile, true, &xmlErrorMessage) ) + { + kWarning() << "parsing of wink XML failed: " << xmlErrorMessage << "!"; + return; + } + + // Get the package nodes + QDomElement packageNode = xml.namedItem("package").toElement(); + if( packageNode.isNull() ) + { + kWarning() << "XML element /package not found!"; + return; + } + + if( packageNode.attribute("type") != "wink" ) + { + kWarning() << "XML element /package/@type is not 'wink'!"; + return; + } + + if( packageNode.attribute("contenttype") != "D" ) + { + kWarning() << "XML element /package/@contenttype is not 'D'!"; + } + + // Get the child nodes + QString thumbnail; + QString animation; + QString animationType; + QDomNodeList packageItems = packageNode.childNodes(); + for(int i = 0; i < packageItems.count(); i++) + { + QDomElement child = packageItems.item(i).toElement(); + if( child.tagName() == "item" ) + { + QString type = child.attribute("type"); + if( type == "animation" ) + { + animation = child.attribute("file"); + animationType = child.attribute("mimetype"); + } + else if( type == "thumbnail-show" || type == "thumbnail" ) + { + thumbnail = child.attribute("file"); + // Type not stored. There are winks with mimetype="image/png" while they're sending a JPG. + } + else + { + kWarning() << "unknown wink element type: '" << type << "'!"; + } + } + } + + // TODO: clean up weird characters from wink file name. + + if( thumbnail.isEmpty() || animation.isEmpty() || animationType.isEmpty() ) + { + kWarning() << "XML elements are missing, could not play wink!"; + return; + } + + // Escape data for inclusion in HTML. + animation = Qt::escape(animation).replace("'", "'"); // quotes are not escaped by QStyleSheet::escape(). + animationType = animationType.remove( QRegExp("[^a-zA-Z0-9\\-/]") ); + + // Height of 150 is a lot, but most winks are designed to be full-screen, so they can hardly be displayed smaller. + QString html = "
" + "" + "" + "" + "" + "" + "" + "" + "" + "
"; + + // Show a notification + receivedMessage( ChatMessage( ChatMessage::TYPE_NOTIFICATION, + ChatMessage::CONTENT_NOTIFICATION_WINK, + true, + i18n( "You have received a wink from %1", Qt::escape( friendlyName ) ) + html, + handle, + friendlyName ) ); + // TODO: include contact meta data in ChatMessage() constructor to show wink nicer +} + + + +// Notify the user of a received nudge +void Chat::slotReceivedNudge(const QString &handle) +{ +#ifdef KMESSDEBUG_CHAT_GENERAL + kDebug() << "Received a nudge."; +#endif + + // Get friendly name + QString friendlyName = currentAccount_->getContactFriendlyNameByHandle(handle); + receivedMessage( ChatMessage( ChatMessage::TYPE_NOTIFICATION, + ChatMessage::CONTENT_NOTIFICATION_NUDGE, + true, + i18n( "You received a nudge from %1!", Qt::escape( friendlyName ) ), + handle, + friendlyName ) ); + + // Start the buzz effect. + emit gotNudge(); +} + + + +// Signal that a message could not be sent to the switchboard +void Chat::slotSendingFailed( QString message ) +{ + message = ( message.length() > 16 ) ? ( message.left( 16 ) + "..." ) : message; + + // We're assuming the chat is empty or broken, so we won't query the switchboard for the contact handle + showMessage( ChatMessage( ChatMessage::TYPE_SYSTEM, + ChatMessage::CONTENT_SYSTEM_ERROR, + false, + i18n("The message '%1' could not be sent.", Qt::escape( message ) ), + lastContact_ ) ); + +} + + + +// Send a file to a contact. +void Chat::startFileTransfer( QList fileList ) +{ +#ifdef KMESSDEBUG_CHAT_FILETRANSFER + kDebug(); +#endif + if( KMESS_NULL(msnSwitchboardConnection_) ) return; + + // Ask for a contact + QString handle = chooseContact(); + + if( fileList.isEmpty() ) + { +#ifdef KMESSDEBUG_CHAT_FILETRANSFER + kDebug() << "asking for a file to send"; +#endif + + // If no file names were given, ask for a filename + QString filename = KFileDialog::getOpenFileName( KUrl("kfiledialog:///:fileupload" ) ); + + // Stop if no file was selected + if( filename.isEmpty() ) + { + return; + } + + // Ask the ChatMaster to initiate the file transfer. If there are multiple contacts + // in this chat, it needs to create a new chat session for that contact. + emit requestFileTransfer( handle, filename ); + } + else + { + foreach( QUrl file, fileList ) + { +#ifdef KMESSDEBUG_CHAT_FILETRANSFER + kDebug() << "Sending file " << file; +#endif + emit requestFileTransfer( handle, file.toLocalFile() ); + } + } +} + + + +// Send a nudge to a contact +void Chat::slotSendNudge() +{ + if( msnSwitchboardConnection_ == 0 ) + { + return; + } + + // Display message + const QStringList &contactsInChat = msnSwitchboardConnection_->getContactsInChat(); + QString message; + if( contactsInChat.count() == 1 && msnSwitchboardConnection_->isConnected() ) + { + message = i18n( "You've sent a nudge to %1!", + Qt::escape( currentAccount_->getContactFriendlyNameByHandle( contactsInChat.first() ) ) + ); + } + else + { + // Chat is either empty (should resume), or a multi-chat + message = i18n( "You've sent a nudge!" ); + } + + showMessage( ChatMessage( ChatMessage::TYPE_NOTIFICATION, + ChatMessage::CONTENT_NOTIFICATION_NUDGE, + false, + message, + QString::null ) ); + + // Send nudge + msnSwitchboardConnection_->sendNudge(); + + // Shake the window + emit gotNudge(); +} + + + +// Start a chat +void Chat::startChat() +{ + if( KMESS_NULL(msnSwitchboardConnection_) ) + { +#ifdef KMESSDEBUG_CHAT_GENERAL + kWarning() << "Tried to open a chat without a switchboard!"; +#endif + return; + } + + if( ! msnSwitchboardConnection_->isInactive() ) + { +#ifdef KMESSDEBUG_CHAT_GENERAL + kDebug() << "Opening a normal chat."; +#endif + // Initialize an online chat + } + else + { +#ifdef KMESSDEBUG_CHAT_GENERAL + kDebug() << "Opening an offline chat."; +#endif + // Initialize an offline chat + QString handle = msnSwitchboardConnection_->getLastContact(); + } + + // Add the participant contacts to the chat, even if they're offline + QStringList participants = msnSwitchboardConnection_->getContactsInChat(); +#ifdef KMESSDEBUG_CHAT_GENERAL + kDebug() << "Adding initial chat participants to the chat:" << participants; +#endif + foreach( QString handle, participants ) + { + contactSidebar_->contactJoined( handle, QString() ); // The sidebar slot doesn't use the second parameter + } + + getMessageEditField()->setFocus(); +} + + + +//Start voice conversation +void Chat::startConversation() +{ + if( KMESS_NULL(msnSwitchboardConnection_) ) + { +#ifdef KMESSDEBUG_CHAT_GENERAL + kWarning() << "Tried to open a conversation without a switchboard!"; +#endif + return; + } + + kWarning() << "not implemented!"; + // msnSwitchboardConnection_->startApp( MsnSwitchboardConnection::VOICECONVERSATION ); +} + + + +// Start GnomeMeeting with a contact. +void Chat::startMeeting() +{ + // Choose the contact. + QString handle = chooseContact(); + + if( KMESS_NULL(msnSwitchboardConnection_) ) + { +#ifdef KMESSDEBUG_CHAT_GENERAL + kWarning() << "Tried to open a meeting with \'" << handle << "\' without a switchboard!"; +#endif + return; + } + + emit requestNetMeeting(handle); +} + + + +#include "chat.moc" diff --git a/src/chat/chat.h b/src/chat/chat.h new file mode 100644 index 0000000..a307d2a --- /dev/null +++ b/src/chat/chat.h @@ -0,0 +1,177 @@ +/*************************************************************************** + chat.h - description + ------------------- + begin : Wed Jan 15 22:41:32 CST 2003 + copyright : (C) 2003 by Mike K. Bennett + email : mkb137b@hotmail.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 License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef CHAT_H +#define CHAT_H + +#include "chatview.h" + +//#include +#include +#include +#include +#include + +//#include + + +// Forward declarations +class ChatInformation; +class ChatMessage; +class ChatView; +class ChatWindow; +class ContactBase; +class ContactAction; +class KMessTest; +class MsnSwitchboardConnection; + +class QDir; + + + +/** + * @brief Manage an active chat + * + * This class manages a chat. It handles the communication with the Switchboard connection; + * and connects the Chat View signals and calls to make user interaction possible. + * + * It is meant to be inserted into a ChatWindow object, not to be used alone. + * + * @ingroup Chat + */ +class Chat : public ChatView +{ + Q_OBJECT + + friend class KMessTest; + + public: + // The construtor + Chat( QWidget* parent = 0 ); + // The destructor + ~Chat(); + // Return a list of the contacts in the chat to be used as window caption + QString getCaption(); + // Return the chat window which currently contains this Chat + ChatWindow *getChatWindow(); + // Return the list of contacts in the chat + QStringList getParticipants(); + // Return the list of contacts which are typing + QStringList getTypingContacts(); + // Initialize the object + bool initialize( MsnSwitchboardConnection *switchboardConnection ); + // Return the switchboard connection used by the chat window. + MsnSwitchboardConnection * getSwitchboardConnection() const; + // Return whether or not the contact is in this chat. + bool isContactInChat( const QString &handle ); + // Return whether or not this is an exclusive chat with the given contact + bool isExclusiveChatWithContact( const QString& handle ); + // Return whether or not the chat is at its first incoming message + bool isChatFirstMessage(); + // The application is exiting + void queryExit(); + // The chat is closing + void queryClose(); + // Enable or disable the parts of the window which allow user interaction + void setEnabled( bool isEnabled ); + // Start a chat + void startChat(); + // Show a wink received by a contact + void showWink( const QString &handle, const QString &filename, const QString &animationName ); + + public slots: + // A message was received from a contact. + void receivedMessage(const ChatMessage &message); + // Change the switchboard connection used by the chat window. + void setSwitchboardConnection( MsnSwitchboardConnection *newConnection = 0 ); + // Send a nudge + void slotSendNudge(); + // Send a file to a contact. + void startFileTransfer( QList fileList = QList() ); + //Voice conversation + void startConversation(); + // Start GnomeMeeting with a contact. + void startMeeting(); + + private: // Private methods + // Check if the user enabled an auto-reply, and send it + void checkAutoReply(); + // Choose the contact to start an invitation with. + QString chooseContact(); + // Save the chat if necessary + void saveChatAutomatically(); + + private slots: // Private slots + // A contact joined the chat + void contactJoined(QString handle, QString friendlyName); + // A contact left the chat + void contactLeft(QString handle, bool isChatIdle); + // A contact is typing + void contactTyping( const QString &handle = QString(), const QString &friendlyName = QString(), bool forceExpiration = false ); + // Invite a contact to the chat + void inviteContact(QString handle); + // Notify the user of a received nudge + void slotReceivedNudge(const QString &handle); + // Signal that a message could not be sent to the switchboard + void slotSendingFailed( QString message ); + + private: // Private attributes + // Whether or not the incoming message is the first incoming message + bool firstMessage_; + // Whether or not the object was initialized + bool initialized_; + // The last contact that left the chat. + QString lastContact_; + // The last time an automessage has been sent + QTime lastSentAutoMessage_; + // The object that connects to the switchboard server. + MsnSwitchboardConnection *msnSwitchboardConnection_; + // The list of participants to this chat + QStringList participants_; + // The date/time the chat started + QDate startDate_; + QTime startTime_; + // The list of users which are currently typing + QMap typingContacts_; + // A timer to update the typing information + QTimer typingTimer_; + + + signals: // Public signals + // Signal that some chat details (like the number of active contacts) have changed + void chatInfoChanged(); + // Signal that the chat is about to close. + void closing(QObject *object); + // Signal the presence of a new incoming chat message + void gotChatMessage( const ChatMessage &message, Chat *chat ); + // Signal that a typing message has been received + void gotTypingMessage( Chat *chat ); + // Signal that a nudge has been received + void gotNudge(); + // Signal that the ChatMaster should start a filetransfer. + void requestFileTransfer(const QString &handle, const QString &filename); + // Signal that the ChatMaster should start a newmeeting session. + void requestNetMeeting(const QString &handle); + // The user wants to add or remove a contact. + void setContactAdded( QString handle, bool isAdded ); + // The user wants to allow a contact to see his/hers online status. + void setContactAllowed( QString handle ); + // The user wants to block or unblock a contact. + void setContactBlocked( QString handle, bool isBlocked ); +}; + +#endif diff --git a/src/chat/chatmaster.cpp b/src/chat/chatmaster.cpp index 978725b..0c5c493 100644 --- a/src/chat/chatmaster.cpp +++ b/src/chat/chatmaster.cpp @@ -32,16 +32,16 @@ #include "../network/chatmessage.h" #include "../network/msnswitchboardconnection.h" #include "../currentaccount.h" +#include "../kmessapplication.h" #include "../kmessdebug.h" +#include "../utils/kmessconfig.h" +#include "chat.h" #include "chatwindow.h" #include #include -#include // Qt::escape() -#include -#include -#include +#include @@ -77,83 +77,106 @@ ChatMaster::~ChatMaster() // The connection has been established void ChatMaster::connected() { - if( ! chatWindows_.isEmpty() ) + // There are no chats to reactivate + if( chats_.isEmpty() ) { + return; + } + #ifdef KMESSDEBUG_CHATMASTER - kDebug() << "Trying reactivation of" << chatWindows_.count() << "open chat windows."; + kDebug() << "Trying reactivation of" << chats_.count() << "open chats."; #endif - // Go through all the chat windows and reactivate them - foreach( ChatWindow *chatWindow, chatWindows_ ) + QList windowsList; + + // Go through all the chats and reactivate them + foreach( Chat *chat, chats_ ) + { + QStringList participants = chat->getParticipants(); + + // Do not re-enable group chats, as they need a new invitation to work again + if( participants.count() > 1 ) { - QStringList participants = chatWindow->getParticipants(); + continue; + } - // Do not re-enable group chats, as they need a new invitation to work again - if( participants.count() > 1 ) - { - continue; - } + // Only reactivate the chat if this contact is in the connected account's list + if( CurrentAccount::instance()->getContactByHandle( participants.first() ) == 0 ) + { + continue; + } - // Only reactivate the chat if this contact is in the connected account's list - if( CurrentAccount::instance()->getContactByHandle( participants.first() ) ) + // Create a new switchboard, setting it as empty but with an hint about + // who to call if the user wants to chat again. + MsnSwitchboardConnection *switchboard = createSwitchboardConnection( 0, participants.first() ); + if( switchboard ) + { + chat->setSwitchboardConnection( switchboard ); + chat->setEnabled( true ); + + // Mark this chat's window for reactivation + if( ! windowsList.contains( chat->getChatWindow() ) ) { - // Create a new switchboard, setting it as empty but with an hint about - // who to call if the user wants to chat again. - MsnSwitchboardConnection *switchboard = createSwitchboardConnection( 0, participants.first() ); - if( switchboard ) - { - chatWindow->setSwitchboardConnection( switchboard ); - chatWindow->setEnabled( true ); - } + windowsList.append( chat->getChatWindow() ); } } } + + // Go through all the windows and reactivate them + foreach( ChatWindow *window, windowsList ) + { + window->setEnabled( true ); + } } -// The user has disconnected, so close all open chats and switchboard connections +// The user has disconnected, so close all open switchboard connections and disable the chats void ChatMaster::disconnected() { - if( ! chatWindows_.isEmpty() ) - { -#ifdef KMESSDEBUG_CHATMASTER - kDebug() << "Closing " << chatWindows_.count() << " open chat windows."; -#endif - - // Go through all the chat windows - foreach( ChatWindow *chatWindow, chatWindows_ ) - { - // Disconnect the chat windows so they won't cause problems, - // also disable the chat window from receiving user input. - chatWindow->setSwitchboardConnection( 0 ); - chatWindow->setEnabled( false ); - } - } - if( ! switchboardConnections_.isEmpty() ) { #ifdef KMESSDEBUG_CHATMASTER - kDebug() << "Closing open switchboards."; + kDebug() << "Closing" << switchboardConnections_.count() << "open switchboards."; #endif // Cleanup switchboard connections. qDeleteAll( switchboardConnections_ ); switchboardConnections_.clear(); } -} + // Don't waste time disabling the chats when exiting. + KMessApplication *kmessApp = static_cast( kapp ); + if( kmessApp->quitSelected() ) + { + return; + } - -// Forward the signal of a new incoming message from a chat window -void ChatMaster::forwardNewChatMessage( const ChatMessage &message, ChatWindow *chatWindow ) -{ -#ifdef KMESSTEST - KMESS_ASSERT( chatWindow != 0 ); -#endif + if( ! chatWindows_.isEmpty() ) + { #ifdef KMESSDEBUG_CHATMASTER - kDebug() << "Forwarding the new chat message signal."; + kDebug() << "Disabling" << chatWindows_.count() << "open chat windows."; #endif - emit newChatMessage( message, chatWindow ); + + // Go through all the chats + foreach( ChatWindow *window, chatWindows_ ) + { + // Disable the chats so they can't receive user input anymore + window->setEnabled( false ); + } + } + + if( ! chats_.isEmpty() ) + { +#ifdef KMESSDEBUG_CHATMASTER + kDebug() << "Closing" << chats_.count() << "open chats."; +#endif + + // Go through all the chats and disable them + foreach( Chat *chat, chats_ ) + { + chat->setEnabled( false ); + } + } } @@ -186,14 +209,6 @@ void ChatMaster::forwardSetContactAdded( QString handle, bool isAdded ) -// Forward a request to allow a contact, which comes from the ContactFrame. -void ChatMaster::forwardSetContactAllowed( QString handle ) -{ - emit allowContact( handle ); -} - - - // Forward a request to block or unblock a contact, which comes from the ContactFrame. void ChatMaster::forwardSetContactBlocked( QString handle, bool isBlocked ) { @@ -243,15 +258,15 @@ ApplicationList * ChatMaster::getApplicationList(const QString &handle) -// Return the chat window which uses the given switchboard connection -ChatWindow * ChatMaster::getChatWindowBySwitchboard(const MsnSwitchboardConnection *connection) +// Return the chat tab which uses the given switchboard connection +Chat *ChatMaster::getChatBySwitchboard( const MsnSwitchboardConnection *connection ) { - // Look through the chat windows for an exclusive chat with the contact given - foreach( ChatWindow *chatWindow, chatWindows_ ) + // Look through the chat windows for an exclusive chat with the given contact + foreach( Chat *chat, chats_ ) { - if( chatWindow->getSwitchboardConnection() == connection ) + if( chat->getSwitchboardConnection() == connection ) { - return chatWindow; + return chat; } } @@ -260,21 +275,35 @@ ChatWindow * ChatMaster::getChatWindowBySwitchboard(const MsnSwitchboardConnecti -// Return the chat window where we're having an conversation with the given contact. -ChatWindow * ChatMaster::getContactChatWindow(const QString &handle, bool privateChat) +// Return the chat window which uses the given switchboard connection +ChatWindow * ChatMaster::getChatWindowBySwitchboard(const MsnSwitchboardConnection *connection) { - ChatWindow *result = 0; - - // Look through the chat windows for an exclusive chat with the contact given - foreach( ChatWindow *chatWindow, chatWindows_ ) + Chat *chat = getChatBySwitchboard( connection ); + if( chat != 0 ) { - if( chatWindow->isExclusiveChatWithContact(handle) ) + return chat->getChatWindow(); + } + + return 0; +} + + + +// Return the chat where we're having an conversation with the given contact. +Chat *ChatMaster::getContactsChat( const QString &handle, bool privateChat ) +{ + Chat *result = 0; + + // Look through the chats for an exclusive one with the contact given + foreach( Chat *chat, chats_ ) + { + if( chat->isExclusiveChatWithContact( handle ) ) { - return chatWindow; // best candidate found. + return chat; // best candidate found } - else if( ! privateChat && chatWindow->isContactInChat( handle ) ) + else if( ! privateChat && chat->isContactInChat( handle ) ) { - result = chatWindow; // keep as option. + result = chat; // keep it as a second choice } } @@ -283,26 +312,33 @@ ChatWindow * ChatMaster::getContactChatWindow(const QString &handle, bool privat -// Return the chat window where we're having a conversation with the given contacts. -ChatWindow *ChatMaster::getContactsChatWindow( const QStringList &handles ) +// Return the chat where we're having a conversation with the given contacts. +// The privateChat parameter is ignored. +Chat *ChatMaster::getContactsChat( const QStringList &handles, bool privateChat ) { - // Do nothing if there are no open chats or if the list is empty (faster) - if( handles.isEmpty() || chatWindows_.isEmpty() ) + // Do nothing if there are no open chats or if the list is empty + if( handles.isEmpty() || chats_.isEmpty() ) { return 0; } - ChatWindow *result = 0; + // If the list only has one contact, just call the single handle version of this method. + if( handles.count() == 1 ) + { + return getContactsChat( handles.first(), privateChat ); + } - // Look through the chat windows for a group chat with all the list's contacts - foreach( ChatWindow *chatWindow, chatWindows_ ) + Chat *result = 0; + + // Look through the chats for a group chat with all the contacts of the list + foreach( Chat *chat, chats_ ) { bool found = true; // Check every contact in the list to see if they're all present in this chat for( QStringList::ConstIterator it = handles.begin(); it != handles.end(); ++it ) { - if( ! chatWindow->isContactInChat( *it ) ) + if( ! chat->isContactInChat( *it ) ) { found = false; break; @@ -311,7 +347,7 @@ ChatWindow *ChatMaster::getContactsChatWindow( const QStringList &handles ) if( found ) { - result = chatWindow; + result = chat; break; } } @@ -322,7 +358,7 @@ ChatWindow *ChatMaster::getContactsChatWindow( const QStringList &handles ) // Return the chat connection where we're having an conversation with the given contact. -MsnSwitchboardConnection * ChatMaster::getContactSwitchboardConnection(const QString &handle, bool privateChat) +MsnSwitchboardConnection *ChatMaster::getContactSwitchboardConnection( const QString &handle, bool doRequirePrivateChat ) { foreach( MsnSwitchboardConnection *connection, switchboardConnections_ ) { @@ -331,11 +367,13 @@ MsnSwitchboardConnection * ChatMaster::getContactSwitchboardConnection(const QSt continue; } - if( ( ! privateChat ) - || ( privateChat && connection->isExclusiveChatWithContact( handle ) ) ) + // If the wanted contact is in this chat, it's 99% sure this is the one we want, except when we want a private chat, but this is not + if( ! connection->isExclusiveChatWithContact( handle ) && doRequirePrivateChat ) { - return connection; + continue; } + + return connection; } return 0; @@ -356,7 +394,7 @@ bool ChatMaster::initialize() CurrentAccount *currentAccount = CurrentAccount::instance(); const ContactList *contactList = currentAccount->getContactList(); connect( contactList, SIGNAL( contactChangedMsnObject(Contact*) ), - this, SLOT ( slotContactChangedMsnObject(Contact*) )); + this, SLOT ( slotContactChangedMsnObject(Contact*) ) ); initialized_ = true; return true; @@ -367,8 +405,8 @@ bool ChatMaster::initialize() // Check whether the contact is in any of the existing chat windows. bool ChatMaster::isContactInChat( const QString &handle ) { - // Find the chat window where we have an exclusive chat - return ( getContactChatWindow( handle, false ) != 0 ); + // Find the chat where we have an exclusive chat with the given contact + return ( getContactsChat( handle, false ) != 0 ); } @@ -376,40 +414,68 @@ bool ChatMaster::isContactInChat( const QString &handle ) // Verify if a new chat can be opened and requests a switchboard void ChatMaster::requestChat( QString handle ) { - // Look through the chat windows for an exclusive chat with the given contact - ChatWindow *chatWindow = getContactChatWindow( handle, true ); + ChatInformation::ConnectionType connectionType; - // Create a new one if needed - if( chatWindow == 0 ) + // Look through the chats for an exclusive chat with the given contact + Chat *chat = getContactsChat( handle, true ); + + // No need to open another chat, notify about the presence of the existing one. + if( chat != 0 ) { -#ifdef KMESSDEBUG_CHATMASTER - kDebug() << "Requesting a connection to " << handle; -#endif + raiseChat( chat, true ); + return; + } - emit requestSwitchboard( handle, ChatInformation::CONNECTION_CHAT ); + // Get the contact, see if it's online + CurrentAccount *currentAccount = CurrentAccount::instance(); + ContactBase *contact = currentAccount->getContactByHandle( handle ); + + if( ( contact && contact->getStatus() == STATUS_OFFLINE ) + || ( currentAccount->getStatus() == STATUS_INVISIBLE ) ) + { + // Either we are invisible, or the contact is offline or invisible. + // We'll start an offline chat. + connectionType = ChatInformation::CONNECTION_OFFLINE; + +#ifdef KMESSDEBUG_CHATMASTER + kDebug() << "Starting an offline chat with " << handle; +#endif } else { - // Or notify about the presence of the existing one. - raiseChat( chatWindow, true ); + // Start a normal chat with an online contact + connectionType = ChatInformation::CONNECTION_CHAT; + +#ifdef KMESSDEBUG_CHATMASTER + kDebug() << "Requesting a switchboard to chat with " << handle; +#endif } + + MsnSwitchboardConnection *switchboard = getContactSwitchboardConnection( handle, true ); + if( switchboard != 0 ) + { + createChat( switchboard ); + return; + } + + emit requestSwitchboard( handle, connectionType ); } -// A chat window is closing -void ChatMaster::slotChatWindowClosing(QObject *chatWindow) +// A chat is closing +void ChatMaster::slotChatClosing( QObject *chatObject ) { #ifdef KMESSDEBUG_CHATMASTER - kDebug() << "Marking chat window as closing."; + kDebug() << "Marking chat as closing."; #endif // Make sure this chat window don't receive new messages. - ChatWindow *window = static_cast( chatWindow ); - closingChatWindows_.append( window ); + Chat *chat = static_cast( chatObject ); + closingChats_.append( chat ); // The contains check avoids deleting references to old switchboards which may be outdated and don't exist anymore. - MsnSwitchboardConnection *switchboard = window->getSwitchboardConnection(); + MsnSwitchboardConnection *switchboard = chat->getSwitchboardConnection(); if( switchboard && switchboardConnections_.contains( switchboard ) ) { switchboardConnections_.removeAll( switchboard ); @@ -418,6 +484,21 @@ void ChatMaster::slotChatWindowClosing(QObject *chatWindow) } +// A chat was destroyed +void ChatMaster::slotChatDestroyed( QObject *chatObject ) +{ +#ifdef KMESSDEBUG_CHATMASTER + kDebug() << "Removing chat from list."; +#endif + + // Remove from the list + Chat *chat = static_cast( chatObject ); + + chats_ .removeAll( chat ); + closingChats_.removeAll( chat ); +} + + // A chat window was destroyed void ChatMaster::slotChatWindowDestroyed(QObject *chatWindow) { @@ -427,8 +508,8 @@ void ChatMaster::slotChatWindowDestroyed(QObject *chatWindow) // Remove from the list ChatWindow *window = static_cast( chatWindow ); - chatWindows_ .removeAll( window ); - closingChatWindows_ .removeAll( window ); + + chatWindows_.removeAll( window ); } @@ -440,8 +521,10 @@ void ChatMaster::slotConnectApplication(Application *application) kDebug() << "Connecting application signals."; #endif - connect( application, SIGNAL( applicationMessage(const ChatMessage&) ), - this, SLOT( showSpecialMessage(const ChatMessage&) ) ); + connect( application, SIGNAL( applicationMessage(const ChatMessage&) ), + this, SLOT( showSpecialMessage(const ChatMessage&) ) ); + connect( application, SIGNAL( updateApplicationMessage(const QString&,const QString&) ), + this, SIGNAL( updateApplicationMessage(const QString&,const QString&) ) ); // Special connections for applications which were started dynamically to handle an incoming data stream. if( application->getMode() == Application::APP_MODE_DATACAST ) @@ -487,8 +570,18 @@ void ChatMaster::queueMessage( const MimeMessage &message, const QString &handle // Raise an existing chat window. Forcing a raise is reasonable only when the user requests to, since it makes the window // to grab keyboard focus and be raised on top of other windows. -void ChatMaster::raiseChat( ChatWindow *chatWindow, bool force ) +void ChatMaster::raiseChat( Chat *chat, bool force ) { + // Check if the pointer is valid + if( chat == 0 || ! chats_.contains( chat ) ) + { +#ifdef KMESSDEBUG_CHATMASTER + kDebug() << "Invalid raising request received; chat is probably already closed."; +#endif + return; + } + + ChatWindow *chatWindow = chat->getChatWindow(); if( chatWindow == 0 || ! chatWindows_.contains( chatWindow ) ) { #ifdef KMESSDEBUG_CHATMASTER @@ -500,32 +593,47 @@ void ChatMaster::raiseChat( ChatWindow *chatWindow, bool force ) // Making windows raise and get focus interrupts the user... it's better to make them appear minimized, // and let them just flash in the taskbar. - if( chatWindow->hasFocus() ) + if( chatWindow->isVisible() && chatWindow->hasFocus() ) { +#ifdef KMESSDEBUG_CHATMASTER + kDebug() << "Window has focus already."; +#endif return; } - if( force ) - { - chatWindow->hide(); + // Set the window on the current desktop + KWindowSystem::setOnDesktop( chatWindow->winId(), KWindowSystem::currentDesktop() ); - if( chatWindow->isMinimized() ) - chatWindow->showNormal(); - else - chatWindow->show(); - } - else if( chatWindow->isHidden() ) + // Activate the selected tab + chatWindow->setCurrentChat( chat ); + + if( ! force ) { + // Required for new chats chatWindow->showMinimized(); + return; } - // Along with notifying about it, also force the window to show and receive focus. - if( force ) + // Notify about the new window and force it to show and receive focus. Only use upon user request. + +#ifdef KMESSDEBUG_CHATMASTER + kDebug() << "Forcing window raise."; +#endif + + // Show the chat's window + if( chatWindow->isMinimized() ) { - chatWindow->raise(); - chatWindow->setFocus(); - chatWindow->activateWindow(); + chatWindow->showNormal(); } + else + { + chatWindow->show(); + } + + // Set the keyboard focus to the chat window + chatWindow->raise(); + KWindowSystem::activateWindow( chatWindow->winId() ); + KApplication::setActiveWindow( chatWindow ); } @@ -602,7 +710,7 @@ cleanup_return: // Deliver a chat message to the chat window (can be an Application message or an Offline-IM from MsnNotificationConnection). -void ChatMaster::showSpecialMessage( const ChatMessage &message ) +void ChatMaster::showSpecialMessage( const ChatMessage &message, const MsnSwitchboardConnection *switchboardChat ) { #ifdef KMESSDEBUG_CHATMASTER kDebug() << "Delivering application/ink/OIM chat message to chat window."; @@ -615,17 +723,25 @@ void ChatMaster::showSpecialMessage( const ChatMessage &message ) "Message type: " << message.getType() << " - Message class: " << message.getContentsClass() << "." << endl; #endif - ChatWindow *chatWindow = getContactChatWindow( handle, true ); + Chat *chat; + if( switchboardChat != 0 ) + { + chat = getChatBySwitchboard( switchboardChat ); + } + else + { + chat = getContactsChat( handle, true ); + } // Deliver the message to the contact's chat window - if( chatWindow != 0 ) + if( chat != 0 ) { #ifdef KMESSDEBUG_CHATMASTER - kDebug() << "Chat window exists, delivering message."; + kDebug() << "Delivering message."; #endif // The chat window is currently closing - if( closingChatWindows_.contains( chatWindow ) ) + if( closingChats_.contains( chat ) ) { if( message.isNormalMessage() ) { @@ -643,7 +759,7 @@ void ChatMaster::showSpecialMessage( const ChatMessage &message ) return; } - chatWindow->receivedMessage( message ); + chat->receivedMessage( message ); return; } @@ -688,8 +804,8 @@ void ChatMaster::showSpecialMessage( const ChatMessage &message ) } // Create a new chat window for the message - chatWindow = createChatWindow( switchboard ); - if( chatWindow == 0 ) + chat = createChat( switchboard ); + if( chat == 0 ) { #ifdef KMESSDEBUG_CHATMASTER kDebug() << "Could not create a chat window."; @@ -697,14 +813,14 @@ void ChatMaster::showSpecialMessage( const ChatMessage &message ) return; } - // Deliver the message to the new chat window - chatWindow->receivedMessage( message ); + // Deliver the message to the new chat + chat->receivedMessage( message ); } // Display an MSN Object that was received. -void ChatMaster::showMsnObject(const QString &handle, const MsnObject &msnObject, ChatWindow *chatWindow) +void ChatMaster::showMsnObject( const QString &handle, const MsnObject &msnObject, Chat *chat ) { QString fileName; QString emoticonCode; @@ -713,10 +829,10 @@ void ChatMaster::showMsnObject(const QString &handle, const MsnObject &msnObject // Note I don't use msnObject.getCreator, because I don't want to trust the other client! ContactBase *contact = 0; Contact *msnContact = 0; - ChatWindow *chatWindow2 = 0; + Chat *chatUpdate = 0; // Get msn object filename - fileName = MsnObjectTransferP2P::getPictureFileName( msnObject ); + fileName = KMessConfig::instance()->getMsnObjectFileName( msnObject ); // Handle the picture switch( msnObject.getType() ) @@ -732,8 +848,8 @@ void ChatMaster::showMsnObject(const QString &handle, const MsnObject &msnObject case MsnObject::WINK: // Show the Wink in the chat window where the original datacast message came from. - if(KMESS_NULL(chatWindow)) return; - chatWindow->showWink(handle, fileName, msnObject.getFriendly()); + if(KMESS_NULL(chat)) return; + chat->showWink( handle, fileName, msnObject.getFriendly() ); break; case MsnObject::EMOTICON: @@ -743,12 +859,12 @@ void ChatMaster::showMsnObject(const QString &handle, const MsnObject &msnObject emoticonCode = contact->getEmoticonCode(msnObject.getDataHash()); // always put before addEmoticonFile()! contact->addEmoticonFile( msnObject.getDataHash(), fileName ); - // Update all chat windows where the contact is. - foreach( chatWindow2, chatWindows_ ) + // Update all chats where the contact is present + foreach( chatUpdate, chats_ ) { - if( chatWindow2->isContactInChat(handle) ) + if( chatUpdate->isContactInChat( handle ) ) { - chatWindow2->updateCustomEmoticon(handle, emoticonCode); + chatUpdate->updateCustomEmoticon( handle, emoticonCode ); } } break; @@ -770,7 +886,6 @@ void ChatMaster::showMsnObject(const QString &handle, const MsnObject &msnObject void ChatMaster::slotContactChangedMsnObject( Contact *contact ) { QString handle = contact->getHandle(); - MsnObject msnObject( *contact->getMsnObject() ); // If the contact no longer likes to display an msn object, remove it if( contact->getMsnObject() == 0 ) @@ -783,8 +898,10 @@ void ChatMaster::slotContactChangedMsnObject( Contact *contact ) return; } + MsnObject msnObject( *contact->getMsnObject() ); + // See if the file already exists. - QString objectFileName = MsnObjectTransferP2P::getPictureFileName( msnObject ); + QString objectFileName = KMessConfig::instance()->getMsnObjectFileName( msnObject ); if( QFile::exists( objectFileName ) ) { bool imageInvalid = QImageReader::imageFormat( objectFileName ).isEmpty(); @@ -1031,6 +1148,12 @@ void ChatMaster::slotGotInkMessage( const QString &inkData, const QString &conta contactPicture = contact->getContactPicturePath(); } + // Cast the sender object to determinate if the ink is recevied from p2p or switchboard. + // WLM sends the ink (gif) by p2p protocol for private chat and by mime for multi-chat + // Other clients send all by mime message, so it's importat to determinate what switchboard + // is used to grep the correct chat window to showing the message + MsnSwitchboardConnection *switchboard = qobject_cast( sender() ); + // Send the message as HTML to the chat window. // Using data url scheme for embedded images (src="data:image/gif;base64,fdsfsdfsd") showSpecialMessage( ChatMessage( ChatMessage::TYPE_INCOMING, @@ -1038,7 +1161,7 @@ void ChatMaster::slotGotInkMessage( const QString &inkData, const QString &conta true, "", contactHandle, friendlyName, - contactPicture ) ); + contactPicture ), switchboard ); } @@ -1076,17 +1199,17 @@ void ChatMaster::slotGotMsnObject(const QString &msnObjectData, const QString &h // Get the switchboard connection where the emoticon/wink/voiceclip was posted const MsnSwitchboardConnection *connection = static_cast( sender() ); - ChatWindow *chatWindow = 0; + Chat *chat = 0; if( connection != 0 ) { - chatWindow = getChatWindowBySwitchboard(connection); + chat = getChatBySwitchboard( connection ); } // Parse the msn object MsnObject msnObject(msnObjectData); // Get the contact name, - QString friendlyName = CurrentAccount::instance()->getContactFriendlyNameByHandle(handle); + QString friendlyName = Qt::escape( CurrentAccount::instance()->getContactFriendlyNameByHandle( handle ) ); // Determine the statusmessage to display. QString statusMessage; @@ -1099,13 +1222,13 @@ void ChatMaster::slotGotMsnObject(const QString &msnObjectData, const QString &h // Show the status message if( ! statusMessage.isEmpty() ) { - if( ! KMESS_NULL(connection) && ! KMESS_NULL(chatWindow) ) + if( ! KMESS_NULL(connection) && ! KMESS_NULL(chat) ) { - chatWindow->showStatusMessage( statusMessage ); + chat->getChatWindow()->showStatusMessage( statusMessage ); } } - startMsnObjectDownload( handle, &msnObject, chatWindow ); + startMsnObjectDownload( handle, &msnObject, chat ); } @@ -1117,25 +1240,25 @@ void ChatMaster::slotMsnObjectReceived(const QString &handle, const MsnObject &m kDebug() << "Received msn object from: " << handle << "."; #endif - ChatWindow *chatWindow = 0; + Chat *chat = 0; // Get sender of this signal, slotGotMsnObject() assigned this to the p2papp. const P2PApplication *application = static_cast( sender() ); if( application != 0 ) { - chatWindow = application->getChatWindow(); - if( chatWindow != 0 && ! chatWindows_.contains(chatWindow) ) + chat = application->getChat(); + if( chat != 0 && ! chats_.contains( chat ) ) { #ifdef KMESSDEBUG_CHATMASTER - kDebug() << "Original chat window not found for received MSNObject " + kDebug() << "Original chat not found for received MSNObject " << "(objecttype=" << msnObject.getType() << " contact=" << handle << ")." << endl; #endif - chatWindow = getContactChatWindow(handle, true); + chat = getContactsChat( handle, true ); } } - showMsnObject(handle, msnObject, chatWindow); + showMsnObject( handle, msnObject, chat ); } @@ -1190,18 +1313,15 @@ void ChatMaster::slotSwitchboardReady() // Delete an existing switchboard -void ChatMaster::slotSwitchboardDelete( MsnSwitchboardConnection *closing ) +void ChatMaster::slotSwitchboardDelete( MsnSwitchboardConnection *closing, bool deleteObject ) { // Remove from collection switchboardConnections_.removeAll( closing ); - // Unset in chat windows - foreach( ChatWindow *chatWindow, chatWindows_ ) + // Do not delete the object: this method can be called as slot from the switchboard's destructor + if( ! deleteObject ) { - if( chatWindow->getSwitchboardConnection() == closing ) - { - chatWindow->setSwitchboardConnection( 0 ); - } + return; } // Disconnect and destroy @@ -1247,26 +1367,28 @@ void ChatMaster::startApplication( P2PApplication *application ) MsnSwitchboardConnection *ChatMaster::startSwitchboard( const ChatInformation &chatInfo ) { MsnSwitchboardConnection *switchboard = getContactSwitchboardConnection( chatInfo.getContactHandle(), true ); - ChatWindow *chatWindow = getChatWindowBySwitchboard( switchboard ); + Chat *chat = getChatBySwitchboard( switchboard ); if( switchboard != 0 && chatInfo.getType() != ChatInformation::CONNECTION_REFRESH ) { #ifdef KMESSDEBUG_CHATMASTER kDebug() << "Deleting old switchboard connection."; #endif - slotSwitchboardDelete( switchboard ); + slotSwitchboardDelete( switchboard, true ); switchboard = 0; } if( switchboard == 0 ) { - if( ! chatWindow ) + if( chat == 0 ) { + // Create a new switchboard connection switchboard = createSwitchboardConnection(); } else { - switchboard = createSwitchboardConnection( chatWindow->getSwitchboardConnection() ); + // Replace the old switchboard connection with a new one + switchboard = createSwitchboardConnection( chat->getSwitchboardConnection() ); } if( ! switchboard ) @@ -1278,9 +1400,9 @@ MsnSwitchboardConnection *ChatMaster::startSwitchboard( const ChatInformation &c switchboard->start( chatInfo ); - if( chatWindow != 0 ) + if( chat != 0 ) { - chatWindow->setSwitchboardConnection( switchboard ); + chat->setSwitchboardConnection( switchboard ); } // If this switchboard is a background one, made to request a contact's picture, @@ -1297,74 +1419,177 @@ MsnSwitchboardConnection *ChatMaster::startSwitchboard( const ChatInformation &c // Start a chat with the information gathered from a switchboard connection -ChatWindow *ChatMaster::createChatWindow( MsnSwitchboardConnection *switchboard ) +Chat *ChatMaster::createChat( MsnSwitchboardConnection *switchboard ) { - ChatWindow *chatWindow; +#ifdef KMESSTEST + KMESS_ASSERT( switchboard != 0 ); +#endif + + Chat *newChat; + ChatWindow *newChatWindow; // If the new chat is a group chat, find existing group chat windows; else find private chats - QStringList participants = switchboard->getContactsInChat(); - if( participants.count() == 1 ) - { - chatWindow = getContactChatWindow( switchboard->getFirstContact(), true ); - } - else - { - chatWindow = getContactsChatWindow( participants ); - } + newChat = getContactsChat( switchboard->getContactsInChat(), true ); - if( chatWindow != 0 ) + if( newChat != 0 ) { #ifdef KMESSDEBUG_CHATMASTER - kDebug() << "Chatwindow with " - << switchboard->getContactsInChat().join(",") << " already exists, raising it." << endl; + kDebug() << "A chat with contacts" + << switchboard->getContactsInChat().join(",") << "already exists, raising it." << endl; #endif + + // If we've requested a chat window, raise it forcing it open over other KMess' windows; + // if some contact wants to chat with us, the chat window will open minimized. + raiseChat( newChat, switchboard->getUserStartedChat() ); + + return newChat; } - else + + // Create the chat widget + newChat = new Chat(); + + if( newChat == 0 ) { - // Create object (the parent is the KMess class) - chatWindow = new ChatWindow( static_cast( parent() ) ); - - // Connect signals - connect( chatWindow, SIGNAL( closing(QObject*) ), - this, SLOT ( slotChatWindowClosing(QObject*) )); - connect( chatWindow, SIGNAL( destroyed(QObject*) ), - this, SLOT ( slotChatWindowDestroyed(QObject*) )); - connect( chatWindow, SIGNAL( newChatMessage(const ChatMessage&, ChatWindow*) ), - this, SLOT ( forwardNewChatMessage(const ChatMessage&, ChatWindow*) )); - connect( chatWindow, SIGNAL( setContactAllowed( QString ) ), - this, SLOT ( forwardSetContactAllowed( QString ) ) ); - connect( chatWindow, SIGNAL( setContactAdded( QString, bool ) ), - this, SLOT ( forwardSetContactAdded( QString, bool ) ) ); - connect( chatWindow, SIGNAL( setContactBlocked( QString, bool ) ), - this, SLOT ( forwardSetContactBlocked( QString, bool ) )); - connect( chatWindow, SIGNAL( appCommand(QString, QString, QString) ), - this, SLOT ( slotDeliverAppCommand(QString, QString, QString) )); - - // Connect request signals - connect( chatWindow, SIGNAL( requestFileTransfer(const QString&, const QString&) ), - this, SLOT ( startFileTransfer(const QString&, const QString&) )); - connect( chatWindow, SIGNAL( requestNetMeeting(const QString&) ), - this, SLOT ( startNetMeeting(const QString&) )); - - // Bail out if the window could not be initialized - if( ! chatWindow->initialize( switchboard->getFirstContact() ) ) - { - kWarning() << "Couldn't initialize the new chat window!"; - return 0; - } - - chatWindows_.append( chatWindow ); + kDebug() << "Couldn't create a new chat tab."; + return 0; } - // Finally, notify the chat window about the new chat - chatWindow->setSwitchboardConnection( switchboard ); - chatWindow->startChat(); + // Initialize it + if( ! newChat->initialize( switchboard ) ) + { + kDebug() << "Couldn't initialize the chat tab."; + return 0; + } + + // Select the chat window where to open the new tab, or create a new one + newChatWindow = createChatWindow( newChat ); + + // Create the first tab in the chat + newChat = newChatWindow->addChatTab( newChat ); + if( newChat == 0 ) + { + kWarning() << "Couldn't add the initial chat."; + return 0; + } + + // Connect the chat's request signals + connect( newChat, SIGNAL( gotChatMessage(const ChatMessage&,Chat*) ), + this, SIGNAL( newChatMessage(const ChatMessage&,Chat*) ) ); + connect( newChat, SIGNAL( setContactAllowed(QString) ), + this, SIGNAL( allowContact(QString) ) ); + connect( newChat, SIGNAL( setContactAdded(QString,bool) ), + this, SLOT ( forwardSetContactAdded(QString,bool) ) ); + connect( newChat, SIGNAL( setContactBlocked(QString,bool) ), + this, SLOT ( forwardSetContactBlocked(QString,bool) ) ); + connect( newChat, SIGNAL( appCommand(QString,QString,QString) ), + this, SLOT ( slotDeliverAppCommand(QString,QString,QString) ) ); + connect( newChat, SIGNAL( requestFileTransfer(const QString&,const QString&) ), + this, SLOT ( startFileTransfer(const QString&,const QString&) ) ); + connect( newChat, SIGNAL( requestNetMeeting(const QString&) ), + this, SLOT ( startNetMeeting(const QString&) ) ); + connect( newChat, SIGNAL( closing(QObject*) ), + this, SLOT ( slotChatClosing(QObject*) ) ); + connect( newChat, SIGNAL( destroyed(QObject*) ), + this, SLOT ( slotChatDestroyed(QObject*) ) ); + connect( this, SIGNAL( updateApplicationMessage(const QString&,const QString&) ), + newChat, SIGNAL( updateApplicationMessage(const QString&,const QString&) ) ); + + // Add the new chat to our list + chats_.append( newChat ); + + // Finally, start the new chat + newChat->startChat(); // If we've requested a chat window, raise it forcing it open over other KMess' windows; // if some contact wants to chat with us, the chat window will open minimized. - raiseChat( chatWindow, switchboard->getUserStartedChat() ); + raiseChat( newChat, switchboard->getUserStartedChat() ); - return chatWindow; + return newChat; +} + + + +// Create a new chat window or retrieve an existing one if tabbed chatting is enabled +ChatWindow *ChatMaster::createChatWindow( Chat *chat ) +{ + ChatWindow *window = 0; + CurrentAccount *currentAccount = CurrentAccount::instance(); + + if( ! chatWindows_.empty() ) + { +#ifdef KMESSDEBUG_CHATMASTER + kDebug() << "At least one chat window is already open: checking the tabbed chatting settings."; +#endif + + if( currentAccount->getTabbedChatMode() == 0 ) // Always group in tabs + { + // Pick the last open chat window + window = chatWindows_.last(); +#ifdef KMESSDEBUG_CHATMASTER + kDebug() << "Always group in tabs. Picking the last created window."; +#endif + } + else if( currentAccount->getTabbedChatMode() == 1 ) // Group tabs by initial contact's group + { +#ifdef KMESSDEBUG_CHATMASTER + kDebug() << "Group in tabs by contact group. Choosing a window."; +#endif + QString handle( chat->getSwitchboardConnection()->getFirstContact() ); + Contact *contact = currentAccount->getContactList()->getContactByHandle( handle ); + + if( contact && ! contact->getGroupIds().isEmpty() ) + { + QString group = contact->getGroupIds().first(); +#ifdef KMESSDEBUG_CHATMASTER + kDebug() << "Searching chats for one whose first contact is in the same group as the new one's."; +#endif + foreach( Chat *chatItem, chats_ ) + { + QString handle( chatItem->getSwitchboardConnection()->getFirstContact() ); + Contact *contact = currentAccount->getContactList()->getContactByHandle( handle ); + + if( contact && ! contact->getGroupIds().isEmpty() + && contact->getGroupIds().first() == group ) + { +#ifdef KMESSDEBUG_CHATMASTER + kDebug() << "Match found!"; +#endif + window = chatItem->getChatWindow(); + break; + } + } + } + } + } + + // Found a window to use, return that + if( window != 0 ) + { + return window; + } + + // Create the new chat window +#ifdef KMESSDEBUG_CHATMASTER + kDebug() << "No existing chat window, creating new."; +#endif + // Create the window: it should have no parent, so it will be displayed in the taskbar for Windows. + window = new ChatWindow(); + + // Bail out if the window could not be initialized + if( ! window->initialize() ) + { + kWarning() << "Couldn't initialize the new chat window!"; + return 0; + } + + // Connect its signals + connect( window, SIGNAL( destroyed(QObject*) ), + this, SLOT ( slotChatWindowDestroyed(QObject*) ) ); + + // Add the new chat window to our list + chatWindows_.append( window ); + + return window; } @@ -1412,7 +1637,7 @@ MsnSwitchboardConnection *ChatMaster::createSwitchboardConnection( MsnSwitchboar connect(switchboard, SIGNAL( requestNewSwitchboard(QString) ), this, SLOT ( forwardRequestNewSwitchboard(QString) )); connect(switchboard, SIGNAL( requestChatWindow(MsnSwitchboardConnection*) ), - this, SLOT ( createChatWindow(MsnSwitchboardConnection*) )); + this, SLOT ( createChat(MsnSwitchboardConnection*) )); connect(switchboard, SIGNAL( deleteMe(MsnSwitchboardConnection*) ), this, SLOT ( slotSwitchboardDelete(MsnSwitchboardConnection*) )); @@ -1421,7 +1646,7 @@ MsnSwitchboardConnection *ChatMaster::createSwitchboardConnection( MsnSwitchboar -// Start a file transfer with the information from the ChatWindow +// Start a file transfer with the information from the Chat void ChatMaster::startFileTransfer( const QString &handle, const QString &filename ) { ApplicationList *appList = getApplicationList(handle); @@ -1429,6 +1654,15 @@ void ChatMaster::startFileTransfer( const QString &handle, const QString &filena // Get the contact properties, see how we can transfer the file. const ContactBase *contact = CurrentAccount::instance()->getContactByHandle( handle ); + + // If the contact is offline (that is, not online nor invisible), refuse to start the file transfer + MsnSwitchboardConnection *connection = getContactSwitchboardConnection( handle, true ); + if( ! connection || ( contact && contact->isOffline() && connection->isInactive() ) ) + { + kWarning() << "Attempted to start a file transfer with an offline contact!"; + return; + } + if( contact != 0 && contact->hasP2PSupport() ) { // The contact supports file transfer over MSNP2P @@ -1474,7 +1708,7 @@ void ChatMaster::startNetMeeting(const QString &handle) // Start a msnobject transfer to get the contact's msn object. -void ChatMaster::startMsnObjectDownload( const QString &handle, const MsnObject *msnObject, ChatWindow *chatWindow ) +void ChatMaster::startMsnObjectDownload( const QString &handle, const MsnObject *msnObject, Chat *chat ) { // Test input if(KMESS_NULL(msnObject)) return; @@ -1494,7 +1728,7 @@ void ChatMaster::startMsnObjectDownload( const QString &handle, const MsnObject } // Get the picture filename, perhaps from a cache - QString objectFileName = MsnObjectTransferP2P::getPictureFileName( *msnObject ); + QString objectFileName = KMessConfig::instance()->getMsnObjectFileName( *msnObject ); bool fileExists = QFile::exists( objectFileName ); // Check if the image can be read. @@ -1521,8 +1755,8 @@ void ChatMaster::startMsnObjectDownload( const QString &handle, const MsnObject #endif // Already have it, handle processing in a generic way. - // Don't use slotMsnObjectReceived() because it uses sender() to get the ChatWindow object. - showMsnObject(handle, msnObject->objectString(), chatWindow); + // Don't use slotMsnObjectReceived() because it uses sender() to get the Chat object. + showMsnObject( handle, msnObject->objectString(), chat ); } else { @@ -1532,8 +1766,8 @@ void ChatMaster::startMsnObjectDownload( const QString &handle, const MsnObject // Create and initialize the application. P2PApplication *app = new MsnObjectTransferP2P(appList, *msnObject); - app->setChatWindow( chatWindow ); // for winks, to display in originating chat window. - connect(app, SIGNAL( pictureReceived(const QString&, const MsnObject&) ), + app->setChat( chat ); // for winks, to display in originating chat window. + connect(app, SIGNAL( msnObjectReceived(const QString&, const MsnObject&) ), this, SLOT ( slotMsnObjectReceived(const QString&, const MsnObject&) )); startApplication(app); } @@ -1619,7 +1853,7 @@ void ChatMaster::timedUpdate() } // See if the object already exists in the cache - QString objectFileName = MsnObjectTransferP2P::getPictureFileName( *msnObject ); + QString objectFileName = KMessConfig::instance()->getMsnObjectFileName( *msnObject ); if( QFile::exists( objectFileName ) && ! QImageReader::imageFormat( objectFileName ).isEmpty() && msnObject->verifyFile( objectFileName ) ) @@ -1672,4 +1906,5 @@ void ChatMaster::timedUpdate() } + #include "chatmaster.moc" diff --git a/src/chat/chatmaster.h b/src/chat/chatmaster.h index df79bcb..00bf823 100644 --- a/src/chat/chatmaster.h +++ b/src/chat/chatmaster.h @@ -23,7 +23,6 @@ #include "../network/mimemessage.h" #include -#include // Forward declarations @@ -31,6 +30,7 @@ class Application; class ApplicationList; class ChatInformation; class ChatMessage; +class Chat; class ChatWindow; class Contact; class ContactBase; @@ -46,7 +46,9 @@ class MsnSwitchboardConnection; /** * This class governs the chat windows, detecting when a chat * can be restarted in an open window and the like. + * * @author Mike K. Bennett + * @ingroup Chat */ class ChatMaster : public QObject { @@ -65,36 +67,36 @@ class ChatMaster : public QObject public slots: // Public slots // The connection has been established void connected(); - // The user has disconnected, so close all open chats + // The user has disconnected, so close all open switchboard connections and disable the chats void disconnected(); // Raise an existing chat window - void raiseChat( ChatWindow *chatWindow, bool force = false ); + void raiseChat( Chat *chat, bool force = false ); // Verify if a new chat can be opened and requests a switchboard void requestChat( QString handle ); // Deliver an application or offline message to the chat window (can be submitted by an Application or Offline-IM from MsnNotificationConnection). - void showSpecialMessage(const ChatMessage &message); + void showSpecialMessage(const ChatMessage &message, const MsnSwitchboardConnection *switchboardChat = 0 ); // Start a switchboard connection with the information gathered from the Notification connection MsnSwitchboardConnection *startSwitchboard( const ChatInformation &chatInfo ); - // Start a file transfer with the information from the ChatWindow + // Start a file transfer with the information from the Chat void startFileTransfer( const QString &handle, const QString &filename ); // Periodically update events. It's based on the pings sent by MsnNotificationConnection. void timedUpdate(); private slots: // Private slots - // Create and initialize a new chat window. - ChatWindow *createChatWindow( MsnSwitchboardConnection *switchboard ); - // Forward the signal of a new incoming message from a chat window - void forwardNewChatMessage( const ChatMessage &message, ChatWindow *chatWindow ); + // Start a chat with the information gathered from a switchboard connection + Chat *createChat( MsnSwitchboardConnection *switchboard ); + // Create a new chat window or retrieve an existing one if tabbed chatting is enabled + ChatWindow *createChatWindow( Chat *chat ); // Forward a new switchboard server request signal coming from an existing switchboard connection void forwardRequestNewSwitchboard( QString handle ); // Forward a request to add or remove a contact from the contactlist, which comes from the ContactFrame. void forwardSetContactAdded( QString handle, bool isAdded ); - // Forward a request to allow a contact, which comes from the ContactFrame. - void forwardSetContactAllowed( QString handle ); // Forward a request to block or unblock a contact, which comes from the ContactFrame. void forwardSetContactBlocked( QString handle, bool isBlocked ); - // A chat window is closing - void slotChatWindowClosing(QObject *chatWindow); + // A chat is closing + void slotChatClosing( QObject *chatObject ); + // A chat was destroyed + void slotChatDestroyed( QObject *chatObject ); // A chat window was destroyed void slotChatWindowDestroyed(QObject *chatWindow); // A new application was created for a contact. @@ -118,7 +120,7 @@ class ChatMaster : public QObject // A msn object (picture, wink, emoticon) was received for the contact. void slotMsnObjectReceived(const QString &handle, const MsnObject &msnObject); // Delete an existing switchboard - void slotSwitchboardDelete( MsnSwitchboardConnection *closing ); + void slotSwitchboardDelete( MsnSwitchboardConnection *closing, bool deleteObject = false ); // The switchboard is ready to send more messages. void slotSwitchboardReady(); // Start a netmeeting invitation @@ -130,23 +132,25 @@ class ChatMaster : public QObject // Check whether the contact is in any of the existing chat windows. bool isContactInChat( const QString &handle ); // Display an MSN Object that was received. - void showMsnObject(const QString &handle, const MsnObject &msnObject, ChatWindow *chatWindow); + void showMsnObject(const QString &handle, const MsnObject &msnObject, Chat *chatWindow); // Configure and start the mime application object. void startApplication( MimeApplication *application ); // Configure and start the P2P application object. void startApplication( P2PApplication *application ); // Start the transfer of the contact's picture - void startMsnObjectDownload(const QString &handle, const MsnObject *msnObject, ChatWindow *chatWindow); + void startMsnObjectDownload(const QString &handle, const MsnObject *msnObject, Chat *chatWindow); // Return the application list for a given contact ApplicationList *getApplicationList(const QString &handle); + // Return the chat tab which uses the given switchboard connection + Chat *getChatBySwitchboard(const MsnSwitchboardConnection *connection); // Return the chat window which uses the given switchboard connection ChatWindow *getChatWindowBySwitchboard(const MsnSwitchboardConnection *connection); // Return the chat window where we're having an conversation with the given contact. - ChatWindow *getContactChatWindow(const QString &handle, bool privateChat); + Chat *getContactsChat( const QString &handle, bool privateChat ); // Return the chat window where we're having a conversation with the given contacts. - ChatWindow *getContactsChatWindow(const QStringList &handles); + Chat *getContactsChat( const QStringList &handles, bool privateChat ); // Return the chat connection where we're having an conversation with the given contact. - MsnSwitchboardConnection * getContactSwitchboardConnection(const QString &handle, bool privateChat); + MsnSwitchboardConnection *getContactSwitchboardConnection( const QString &handle, bool doRequirePrivateChat ); // Append the message to the queue, waiting to be delivered void queueMessage( const MimeMessage &message, const QString &handle, bool privateChatRequired ); // Send all pending mime messages for the contact. @@ -160,10 +164,12 @@ class ChatMaster : public QObject bool privateChatRequired; }; + // The pointers to the currently active chats + QList chats_; // The pointers to the chat windows QList chatWindows_; - // The pointers of chat windows that are closing - QList closingChatWindows_; + // The pointers to chats which are closing + QList closingChats_; // Whether or not the object was initialized bool initialized_; // The list of contacts whose DPs must be downloaded @@ -181,13 +187,15 @@ class ChatMaster : public QObject // Ask the Notification connection to block a contact void blockContact( QString handle ); // Signal the presence of a new incoming chat message - void newChatMessage( const ChatMessage &message, ChatWindow *chatWindow ); + void newChatMessage( const ChatMessage &message, Chat *chatWindow ); // Ask the Notification connection to remove a contact void removeContact( QString handle, bool block ); // Ask the Notification connection to initiate a new switchboard connection with the contact void requestSwitchboard( QString handle, ChatInformation::ConnectionType type ); // Ask the Notification connection to unblock a contact void unblockContact( QString handle ); + // Signal for ChatMessageView to replace an application's accept/reject/cancel links with another text + void updateApplicationMessage( const QString &messageId, const QString &newMessage ); }; #endif diff --git a/src/chat/chatmessagestyle.cpp b/src/chat/chatmessagestyle.cpp index 4cfcc59..81801b2 100644 --- a/src/chat/chatmessagestyle.cpp +++ b/src/chat/chatmessagestyle.cpp @@ -18,6 +18,7 @@ #include "chatmessagestyle.h" #include "../contact/contactbase.h" +#include "../utils/richtextparser.h" #include "../currentaccount.h" #include "../emoticon.h" #include "../emoticonmanager.h" @@ -26,13 +27,12 @@ #include #include -#include #include #include +#include #include #include -#include #include @@ -41,16 +41,13 @@ ChatMessageStyle::ChatMessageStyle() : QObject(0) , contactFontColor_("#000000") - , lastPendingEmoticonId_(0) , showTime_(true) , useContactFont_(false) , useEmoticons_(true) , useFontEffects_(true) + , useFormatting_(false) { xslTransformation_ = new XslTransformation(); - - // Get placeholder for pending custom emoticons. - pendingPlaceholder_ = KGlobal::dirs()->findResource("appdata", "pics/empty.png"); } @@ -262,8 +259,8 @@ QString ChatMessageStyle::createFallbackMessage(const ChatMessage &message) // Extract fonts parseFont(message, font, color, fontBefore, fontAfter); - // Escape HTML, replace emoticons - parseMsnString( name, handle /*, true */ ); + // Escape HTML, replace standard emoticons, links and formatting + RichTextParser::parseMsnString( name, useEmoticons_, true, false, useFormatting_ ); // Replace font special effects, like *bold* if( useFontEffects_ ) @@ -274,7 +271,8 @@ QString ChatMessageStyle::createFallbackMessage(const ChatMessage &message) // Body can already be HTML if generated internally. if( ! message.hasHtmlBody() ) { - parseMsnString( body, handle ); + // Escape HTML, replace all emoticons, links and formatting + RichTextParser::parseMsnString( body, useEmoticons_, false, true, useFormatting_, handle, pendingEmoticonTags_ ); // Replace font special effects, like *bold* if( useFontEffects_ ) @@ -305,7 +303,7 @@ QString ChatMessageStyle::createFallbackMessage(const ChatMessage &message) else if( type == ChatMessage::TYPE_SYSTEM ) { // Red system message - parseMsnString(body); + Emoticon::htmlEscape( body ); parseBody(body); return "

" "" + body + "" @@ -315,14 +313,14 @@ QString ChatMessageStyle::createFallbackMessage(const ChatMessage &message) || type == ChatMessage::TYPE_APPLICATION_FILE || type == ChatMessage::TYPE_APPLICATION_AUDIO ) { // Blue application message - parseMsnString(body); + Emoticon::htmlEscape( body ); parseBody(body); return "
" + body + "
"; } else { // Purple notification message - parseMsnString(body); + Emoticon::htmlEscape( body ); parseBody(body); return "
" + body + "
"; } @@ -361,8 +359,8 @@ QString ChatMessageStyle::createMessageXml(const ChatMessage &message) // Extract fonts parseFont(message, font, color, fontBefore, fontAfter); - // Parse the name - parseMsnString( name, handle /*, true */ ); + // Escape HTML, replace standard emoticons, links and formatting + RichTextParser::parseMsnString( name, useEmoticons_, true, false, useFormatting_ ); // Parse effects characters (_, *, /) if( useFontEffects_ ) @@ -373,7 +371,8 @@ QString ChatMessageStyle::createMessageXml(const ChatMessage &message) // Body can already be HTML if generated internally. if( ! message.hasHtmlBody() ) { - parseMsnString( body, handle ); + // Escape HTML, replace all emoticons, links and formatting + RichTextParser::parseMsnString( body, useEmoticons_, false, true, useFormatting_, handle, pendingEmoticonTags_ ); if( useFontEffects_ ) { @@ -580,7 +579,7 @@ void ChatMessageStyle::parseEffects(QString &text) const for( int i = 0; i < 3; i++ ) { effectsCharacter = QRegExp::escape( effectCharacters.mid(i, 1) ); - effectsSearch.setPattern( effectsCharacter + "([a-zA-Z0-9]+)" + effectsCharacter ); + effectsSearch.setPattern( effectsCharacter + "([\\w\\s]+)" + effectsCharacter ); offset = 0; @@ -689,473 +688,6 @@ void ChatMessageStyle::parseFont(const ChatMessage &message, QFont &font, QStrin -// Replace the Messenger Plus characters with HTML markup -void ChatMessageStyle::parseMsnPlusString( QString &text ) const -{ - /* - I'm really concerned about the way MSN+ embeds reserved characters into the - text, which may cause i18n problems, but given the popularity of MSN+, this - really needs to be implemented. - */ - - bool boldFlag = false; - bool italicFlag = false; - bool underlineFlag = false; - bool fontFlag = false; - QColor color; - - QRegExp htmlTest( "^\x04""&#?[a-z0-9]+;" ); - QRegExp fontCapture = QRegExp( "^\x03""([0-9]{1,2})(,([0-9]{1,2}))?" ); - - for( int index = 0; index < text.length(); index++ ) - { - switch( text.at( index ).unicode() ) - { - case 0x0002: // bold character - boldFlag = !boldFlag; - - text = text.replace( index, 1, ( boldFlag ) ? "" : "" ); - index += ( boldFlag ) ? 2 : 3; // Skip the characters we've just added - break; - - case 0x0003: // color character - fontFlag = !fontFlag; - - fontCapture.indexIn( text, index, QRegExp::CaretAtOffset ); - - switch( fontCapture.cap(1).toInt() ) - { - case 0: - color = QColor( "white" ); - break; - case 1: - color = QColor( "black" ); - break; - case 2: - color = QColor( "blue" ); - break; - case 3: - color = QColor( "green" ); - break; - case 4: - color = QColor( "red" ); - break; - case 5: - color = QColor( "brown" ); - break; - case 6: - color = QColor( "purple" ); - break; - case 7: - color = QColor( "orange" ); - break; - case 8: - color = QColor( "yellow" ); - break; - case 9: - color = QColor( "lightGreen" ); - break; - case 10: - color = QColor( "cyan" ); - break; - case 11: - color = QColor( "lightBlue" ); - break; - case 12: - color = QColor( "blue" ); - break; - case 13: - color = QColor( "pink" ); - break; - case 14: - color = QColor( "darkGray" ); - break; - case 15: - default: - color = QColor( "gray" ); - break; - } - - // Font background text is ignored, as it's impossible to render in Qt's HTML subset. - if( fontCapture.matchedLength() == -1 ) - { - // No color found after the special character, close the html tag - text = text.replace( index, 1, "" ); - index += 6; // Skip the characters we've just added - } - else - { - // Font color open - text = text.replace( index, fontCapture.matchedLength(), "" ); - index += 21; // Skip the characters we've just added - } - break; - - case 0x0004: - // Sound tag: this character is followed by another which identifies the sound ID - htmlTest.indexIn( text, index, QRegExp::CaretAtOffset ); - if( htmlTest.matchedLength() != -1 ) - { - // Some sounds IDs are HTML entities: that has to be taken care of, too. - text = text.replace( index, htmlTest.matchedLength(), "" ); - } - else - { - // we need to delete this character and the following one from the string - text = text.replace( index, 2, "" ); - } - - // Restart from where we encountered the starting character - index -= 1; - break; - - case 0x0005: // italic character - italicFlag = !italicFlag; - - text = text.replace( index, 1, ( italicFlag ) ? "" : "" ); - index += ( italicFlag ) ? 2 : 3; // Skip the characters we've just added - break; - - case 0x001f: // underline character - underlineFlag = !underlineFlag; - - text = text.replace( index, 1, ( underlineFlag ) ? "" : "" ); - index += ( underlineFlag ) ? 2 : 3; // Skip the characters we've just added - break; - } - - } - - // Close any tag still open. Hopefully, the parser will not complain too much if the closing order is wrong. - if( boldFlag ) text.append( "" ); - if( italicFlag ) text.append( "
" ); - if( underlineFlag ) text.append( "" ); - if( fontFlag ) text.append( "" ); -} - - - -// Replace the MSN characters with HTML markup -void ChatMessageStyle::parseMsnString( QString &text, const QString &handle, bool alwaysShowEmoticons ) -{ - Emoticon::htmlEscape( text ); - - // MessengerPlus is quite a "low level" encoding, so do it first - parseMsnPlusString( text ); - - // Links and emoticons are replaced in one loop cycle, traversing the message text. - // Multiple search-replace cyles give unwanted side effects: - // - smileys can pop up in links like ftp://user:pass@host/ and https://host - // - emoticon replacements could be replaced by another cycle. - - - bool allowAddingEmoticons = false; - const EmoticonManager *manager = EmoticonManager::instance(); - - // Build a collection of all emoticon data. - const QRegExp &emoticonRegExp = manager->getHtmlPattern(); - const QMap &emoticonReplacements = manager->getHtmlReplacements(); - - - QString code; - QRegExp customRegExp; - QRegExp pendingRegExp; - QMap customReplacements; - QString customEmoticonsPattern; - - // Get theme of custom emoticons. - if( ! handle.isEmpty() ) - { - if( handle == CurrentAccount::instance()->getHandle() ) - { - customRegExp = manager->getHtmlPattern( true ); - customReplacements = manager->getHtmlReplacements( false, true ); - // We already have all of our emoticons, there are no pending ones - } - else - { - const ContactBase *contact = CurrentAccount::instance()->getContactByHandle( handle ); - if( contact != 0 ) - { - customRegExp = contact->getEmoticonPattern(); - customReplacements = contact->getEmoticonReplacements(); - pendingRegExp = contact->getPendingEmoticonPattern(); - - allowAddingEmoticons = true; - customEmoticonsPattern = manager->getHtmlPattern( true ).pattern(); - } - } - } - - - QRegExp linkRegExp; - linkRegExp.setPattern( "\\b(?:http://|https://|ftp://|sftp://|www\\.)" // match protocol string - "[^ \r\n]+" // followed by the host/path - ); - - QRegExp emailRegExp; - emailRegExp.setPattern( - "\\b(" // begin of word, start capture - "[a-z0-9_\\-\\.]+" // match e-mail username - "\\@" // match '@' - "[a-z0-9\\-\\.]+" // match domain hostname - "[a-z0-9]{2,3}" // match top-level-domain - ")" // end capture` - "(?:[^a-zA-Z0-9\\-]|$)" // not followed by more simple characters, or should find an end-of-line - ); - - QRegExp geekLinkRegExp; - geekLinkRegExp.setPattern( - "(^|\\b)" // look-before test, for start of capture or word delimiter - "(" // begin of word, start capture - "([a-z0-9\\-]+\\.)+" // match simple characters, but it should contain a dot between each part. - "([a-z]{2,3})" // finally match domain part 2 or 3 characters - ")" // end capture - "(?:[^a-zA-Z0-9]|$)" // not followed by more simple characters, or should find an end-of-line - ); - - QRegExp punctuationChars( "(?:[.,;!?\"'])$" ); - QRegExp invalidCcTld( "^(js|hh|cc|ui|fo|so|ko|qt|pp|cf|am|in|gz|ps|ai|rv|rm|wm)$" ); // block typical files instead of listing the whole country code list. - QRegExp topLevelDomain( "^(?:com|org|net|edu|gov)$" ); - - static const int REGEXP_COUNT = 6; - const QRegExp* regexps[REGEXP_COUNT]; - regexps[0] = ( customRegExp.isEmpty() ? 0 : &customRegExp ); // is first, to allow overwriting normal emoticons. - regexps[1] = ( pendingRegExp.isEmpty() ? 0 : &pendingRegExp ); - regexps[2] = ( ( useEmoticons_ || alwaysShowEmoticons ) && ! emoticonRegExp.isEmpty() ? &emoticonRegExp : 0 ); - regexps[3] = &linkRegExp; - regexps[4] = &emailRegExp; - regexps[5] = &geekLinkRegExp; - - -#ifdef KMESSTEST - KMESS_ASSERT( emoticonRegExp.isValid() ); - KMESS_ASSERT( emailRegExp.isValid() ); - KMESS_ASSERT( linkRegExp.isValid() ); - KMESS_ASSERT( geekLinkRegExp.isValid() ); -#endif - - QString replacement; - int lastPos = 0; - int matches[ REGEXP_COUNT]; - memset( matches, -1, sizeof( matches ) ); - - while(true) - { - // Find out which expression matches first. - int matchedRegExp = -1; - int matchStart = -1; - int matchedLength = 0; // avoid gcc warning - for(int i = 0; i < REGEXP_COUNT; i++) - { - if( regexps[ i ] == 0 ) - { - continue; - } - - matches[ i ] = regexps[ i ]->indexIn( text, lastPos ); - if( matches[ i ] == -1 || (int) text.length() < matches[ i ] ) - { - continue; - } - -#ifdef KMESSDEBUG_CHATVIEW - kDebug() << "regexp " << i << " matches at character " << matches[ i ]; -#endif - - // See if it's before all other regexps - if( matches[ i ] < matchStart || matchStart == -1 ) - { - matchStart = matches[ i ]; - matchedRegExp = i; - matchedLength = regexps[ i ]->matchedLength(); - } - } - - - QString link; - QString linkBefore; - QString code; - QString altText; - QString placeholderId; - - // Determine the replacement for the matched expression. - switch( matchedRegExp ) - { - - // Found a custom emoticon - case 0: - code = text.mid( matchStart, customRegExp.matchedLength() ); // cap(0) is not const. - - // Avoid replacing invalid emoticons with nothing - if( ! customReplacements.contains( code ) ) - { -#ifdef KMESSDEBUG_CHATVIEW - kWarning() << "Emoticon replacement for '" << code << "' not found!"; -#endif - replacement = code; - break; - } - - replacement = customReplacements[ code ]; - - // This emoticon is unknown, allow the user to add it by adding an internal KMess link to it - if( allowAddingEmoticons && ! customEmoticonsPattern.contains( code ) ) - { - QString imagePath( replacement ); - QString urlCode = KUrl::toPercentEncoding( code ); - - // Retrieve the image name from the replacement - imagePath = imagePath.replace( "\"", "'" ); - imagePath = imagePath.mid( imagePath.indexOf( "src='" ) + 5 ); - imagePath = imagePath.mid( 0, imagePath.indexOf( "'" ) ); - - // The name attribute is required as, if the user adds the emoticon, we'll want to make all links like this unclickable - replacement = "" - + replacement - + ""; - } - break; - - - // Found a custom emoticon, but the image file is still being downloaded. - // Generate a placeholder tag, , and update this tag later when the emoticon is received. - case 1: - // Generate and store placeholder ID. - placeholderId = "ce" + QString::number( ++lastPendingEmoticonId_ ); - pendingEmoticonTags_.append( placeholderId ); - - // Insert placeholder. - code = text.mid( matchStart, pendingRegExp.matchedLength() ); // cap(0) is not const. - replacement = "" + code
-                    + ""; - break; - - - // Found an emoticon - case 2: - code = text.mid( matchStart, emoticonRegExp.matchedLength() ); // cap(0) is not const. - if( emoticonReplacements.contains( code ) ) - { - replacement = emoticonReplacements[ code ]; - } - else - { - // HACK: Replace with the same string, to skip the entire code and continue parsing after it - // See EmoticonTheme::updateCache() - replacement = code; -#ifdef KMESSDEBUG_CHATVIEW - kDebug() << "Skipping unmatched code '" << code << "'"; -#endif - } - - break; - - - // Found a link - case 3: - // When www. is found, automatically add http:// to the href. - // This doesn't clash, because http:// links are matched earlier. - link = linkRegExp.cap(0); - if( ! link.isEmpty() ) - { - // filter out puntuation char - matchedLength = link.length(); - if( punctuationChars.exactMatch(link) // matches standard chars at end. - || ( link.endsWith(")") && ! link.contains("(") ) ) // has ")" at end, unless it's a wikipedia disambiguation link - { - matchedLength--; - link.remove( matchedLength, 1 ); - } - - // Create link - replacement = ( link.startsWith("www.") ) - ? replacement = "" + link + "" - : replacement = "" + link + ""; - } - break; - - - // Found a e-mail address. - case 4: - link = emailRegExp.cap(1); - if( ! link.isEmpty() ) - { - matchedLength = link.length(); // filter out puntuation char - replacement = "" + link + ""; - } - break; - - - // Found a geek-style link. - case 5: - linkBefore = geekLinkRegExp.cap(1); // matched look-before character. - link = geekLinkRegExp.cap(2); - if( ! link.isEmpty() ) - { - // Avoid matching "index.htm", "test.js" etc.. - // The list can never be complete but filter out 99% of the cases. - QString tld = geekLinkRegExp.cap(4); - if( ( tld.length() == 2 && ! invalidCcTld.exactMatch(tld) ) - || ( tld.length() == 3 && topLevelDomain.exactMatch(tld) ) ) - { - matchedLength = linkBefore.length() + link.length(); // filter out puntuation char - replacement = linkBefore + "" + link + ""; - } - } - break; - - // Nothing was found, stop. - case -1: - break; - - default: -#ifdef KMESSTEST - kWarning() << "result of regular expression " << matchedRegExp << " is unhandled!"; -#endif - break; - } - - // Nothing was found, stop. - if( matchedRegExp == -1 ) - { - // C doesn't allow us to break the while loop inside the switch statement, so break again. - break; - } - - // Process the replacement. - if( replacement.isEmpty() || text.mid(matchStart, matchedLength).isEmpty() ) - { - // No replacement found, move cursor to next char. - lastPos = matchStart + 1; - } - else - { - // Replace the original text. -#ifdef KMESSDEBUG_CHATVIEW - kDebug() << "replacing '" << text.mid( matchStart, matchedLength ) << "' with: " << replacement << " (matched regexp=" << matchedRegExp << ")"; -#endif - text = text.replace( matchStart, matchedLength, replacement ); - lastPos = matchStart + replacement.length(); - replacement = QString::null; - } - } - - // Replace any "> "s in the message with "> " to avoid missing spaces after emoticons - text = text.replace( "> ", "> " ); - - // Replace double spaces with double  s so that they'll show properly - text = text.replace( " ", "  " ); -} - - - // The the contact font void ChatMessageStyle::setContactFont(const QFont &font) { @@ -1240,6 +772,14 @@ void ChatMessageStyle::setUseFontEffects(bool useFontEffects) +// Enable or disable MSN Plus formatting +void ChatMessageStyle::setUseFormatting( bool useFormatting ) +{ + useFormatting_ = useFormatting; +} + + + // Strip the DOCTYPE tag from the message QString ChatMessageStyle::stripDoctype( const QString &parsedMessage ) { diff --git a/src/chat/chatmessagestyle.h b/src/chat/chatmessagestyle.h index 3a91d34..8d50143 100644 --- a/src/chat/chatmessagestyle.h +++ b/src/chat/chatmessagestyle.h @@ -33,6 +33,7 @@ class XslTransformation; * Utility class to convert chat messages to the current style/appearance. * * @author Diederik van der Boor + * @ingroup Chat */ class ChatMessageStyle : public QObject { @@ -83,6 +84,8 @@ class ChatMessageStyle : public QObject void setUseEmoticons(bool useEmoticons); // Enable or disable font effects void setUseFontEffects(bool useFontEffects); + // Enable or disable MSN Plus formatting + void setUseFormatting( bool useFormatting ); private: // private methods @@ -116,14 +119,10 @@ class ChatMessageStyle : public QObject QFont contactFont_; // The contact font color QString contactFontColor_; - // The last ID of the pending emoticon placeholders (to generate ID's) - int lastPendingEmoticonId_; // The name of the style QString name_; - // The ID's of the pending emoticons + // A list of IDs of pending emoticons QStringList pendingEmoticonTags_; - // The filename for the pending placeholder image. - QString pendingPlaceholder_; // Whether the time should be displayed bool showTime_; // Whether the contact font should be used @@ -132,6 +131,8 @@ class ChatMessageStyle : public QObject bool useEmoticons_; // Whether font effects should be used bool useFontEffects_; + // Whether MSN Plus formatting should be used + bool useFormatting_; // The XSL transformation XslTransformation *xslTransformation_; }; diff --git a/src/chat/chatmessageview.cpp b/src/chat/chatmessageview.cpp index ed89f55..8b3dfe6 100644 --- a/src/chat/chatmessageview.cpp +++ b/src/chat/chatmessageview.cpp @@ -24,17 +24,13 @@ #include "../kmessdebug.h" #include +#include -#include -#include -#include - +#include #include #include #include -#include #include -#include @@ -283,6 +279,27 @@ void ChatMessageView::setStandardHtml(const QString &htmlBody, const QString &cs +// Replace an application's accept/reject/cancel links with another text +void ChatMessageView::updateApplicationMessage( const QString &messageId, const QString &newMessage ) +{ + DOM::HTMLDocument document( htmlDocument() ); + DOM::HTMLElement linksSpan = document.getElementById( "app" + messageId + "-links-block" ); + + // This chat doesn't contain messages for this application, bail out + if( linksSpan.isNull() ) + { + return; + } + + // Change the span's ID so it won't trigger changes anymore + linksSpan.setId( DOM::DOMString( "app" + messageId ) ); + + // Replace the links with the given text + linksSpan.setInnerText( DOM::DOMString( newMessage ) ); +} + + + // Update an emoticon image placeholder tag with the real replacement. void ChatMessageView::updateCustomEmoticon( const QString &code, const QString &replacement, const QString &handle, const QStringList &pendingEmoticonTagIds ) diff --git a/src/chat/chatmessageview.h b/src/chat/chatmessageview.h index 283f136..58c84ee 100644 --- a/src/chat/chatmessageview.h +++ b/src/chat/chatmessageview.h @@ -31,6 +31,7 @@ class QStringList; * A KHTMLPart is used for this because unlike QTextBrowser, KHTML has support for CSS. * * @author Diederik van der Boor + * @ingroup Chat */ class ChatMessageView : public KHTMLPart { @@ -64,6 +65,8 @@ class ChatMessageView : public KHTMLPart void addedEmoticon( QString shortcut ); // Scroll to the bottom of the chat browser void scrollChatToBottom(); + // Replace an application's accept/reject/cancel links with another text + void updateApplicationMessage( const QString &messageId, const QString &newMessage ); private: // private properties // Whether or not the chat message area is empty diff --git a/src/chat/chatview.cpp b/src/chat/chatview.cpp index 6035442..3847799 100644 --- a/src/chat/chatview.cpp +++ b/src/chat/chatview.cpp @@ -18,33 +18,31 @@ #include "chatview.h" #include "../contact/contactbase.h" +#include "../contact/contactlist.h" #include "../dialogs/addemoticondialog.h" +#include "../utils/kmessconfig.h" +#include "../utils/kmessshared.h" #include "../currentaccount.h" #include "../emoticonmanager.h" #include "../kmess.h" #include "../kmessapplication.h" #include "../kmessdebug.h" +#include "contactaction.h" #include "chatmessagestyle.h" #include "chatmessageview.h" +#include "contactsidebar.h" +#include "inkedit.h" #include #include #include #include -#include #include -#include -#include #include -#include #include -#include -#include #include -#include #include -#include #include #include #include @@ -52,9 +50,6 @@ #include #include #include -#include -#include -#include #define TYPING_NOTIFICATION_TIME 4000 @@ -62,44 +57,66 @@ // The constructor -ChatView::ChatView(QWidget *parent ) - : QWidget(parent), - Ui::ChatView(), - chatStyle_(0), - currentAccount_(0), - doSendTypingMessages_(true), - initialized_(false) +ChatView::ChatView( QWidget *parent ) +: QWidget( parent ) +, Ui::ChatView() +, contactSidebar_( 0 ) +, currentAccount_( 0 ) +, chatStyle_( 0 ) +, currentZoom_( 100 ) +, doSendTypingMessages_( true ) +, initialized_( false ) { // Setup the UI as first thing setupUi( this ); // Insert a KHTMLPart in the placeholder - chatMessageView_ = new ChatMessageView( static_cast( khtmlPlaceholder_ ) ); - connect( chatMessageView_, SIGNAL( popupMenu(const QString&, const QPoint&) ), - this, SLOT ( slotShowContextMenu(const QString&, const QPoint&) )); - connect( chatMessageView_, SIGNAL( openUrlRequest(const KUrl&) ), - this, SLOT( slotOpenURLRequest(const KUrl&) ) ); + chatMessageView_ = new ChatMessageView( static_cast( messageViewFrame_ ) ); + connect( chatMessageView_, SIGNAL( popupMenu(const QString&,const QPoint&) ), + this, SLOT ( slotShowContextMenu(const QString&,const QPoint&) ) ); + connect( chatMessageView_, SIGNAL( openUrlRequest(const KUrl&) ), + this, SLOT( slotOpenURLRequest(const KUrl&) ) ); + connect( this, SIGNAL( updateApplicationMessage(const QString&,const QString&) ), + chatMessageView_, SLOT( updateApplicationMessage(const QString&,const QString&) ) ); // Create a layout to maximize the KHTMLPart - QBoxLayout *messageLayout = new QHBoxLayout( khtmlPlaceholder_ ); + QBoxLayout *messageLayout = new QHBoxLayout( messageViewFrame_ ); + messageLayout->setSpacing( 0 ); + messageLayout->setContentsMargins( 0, 0, 0, 0 ); messageLayout->addWidget( chatMessageView_->view() ); // Stretches widget + // Create the ink editor and connect its signals + inkEdit_ = new InkEdit(); + inkEdit_->installEventFilter(this); + + inkEdit_->hide(); + editorFrame_->layout()->addWidget( inkEdit_ ); + + connect( inkEdit_, SIGNAL( inkModified(bool) ), + this, SLOT( slotInkModified(bool) ) ); + // Connect the message edit so that if its displayed color changes, // it checked to match the user's chosen color. connect( messageEdit_, SIGNAL( currentColorChanged( const QColor & ) ), this, SLOT ( editorColorChanged( const QColor & ) ) ); + connect( messageEdit_, SIGNAL( textChanged() ), + this, SLOT ( messageTextChanged() ) ); - connect( messageEdit_, SIGNAL( currentColorChanged( const QColor & ) ), - this, SLOT ( editorColorChanged( const QColor & ) ) ); + connect( newLineButton_, SIGNAL( clicked() ), + this, SLOT ( newLineClicked() ) ); + + connect( sendButton_, SIGNAL( clicked() ), + this, SLOT ( sendClicked() ) ); + connect( switchButton_,SIGNAL( clicked() ), + this, SLOT ( slotSwitchEditor() ) ); // Set initial widget state sendButton_ ->setEnabled( false ); sendButton_ ->setFocusPolicy( Qt::NoFocus ); newLineButton_->setFocusPolicy( Qt::NoFocus ); - - // Remove the default toolbox from the Sidebar - sidebar_->removeItem( 0 ); + switchButton_ ->setFocusPolicy( Qt::NoFocus ); + switchButton_ ->setIcon( KIcon( "draw-freehand" ) ); //Reset index for fast-retype indexSentences_ = 0; @@ -116,10 +133,6 @@ ChatView::ChatView(QWidget *parent ) // Lastly, initialize the "Typing notification" timer userTypingTimer_.setInterval( TYPING_NOTIFICATION_TIME ); userTypingTimer_.setSingleShot( true ); - - // Added because the ubuntu gutsy version of kde 4.0 does not seem to call this as the api claims - KConfigGroup chatViewConfig = KGlobal::config()->group( "ChatView" ); - readProperties( chatViewConfig ); } @@ -131,12 +144,115 @@ ChatView::~ChatView() chatMessages_.clear(); lastContactMessages_.clear(); + // Delete the contact actions + // Avoid crashing when the switchboard/contact fires a "contactLeftChat" signal. + qDeleteAll( contactActions_ ); + contactActions_.clear(); + // Also erase the chat style parser delete chatStyle_; - - // Added because the ubuntu version of kde 4.0 doesnt seem to call this automatically as the API documentation suggests - KConfigGroup chatViewConfig = KGlobal::config()->group( "ChatView" ); - saveProperties( chatViewConfig ); +} + + + +// Set the zoom factor of the text +void ChatView::changeZoomFactor( bool increase ) +{ + int newZoom = chatMessageView_->zoomFactor(); + + if( increase ) + { + newZoom += 25; + } + else + { + newZoom -= 25; + } + + if( newZoom > 20 && newZoom < 300 ) + { + currentZoom_ = newZoom; + chatMessageView_->setZoomFactor( currentZoom_ ); + } +} + + + +// Create the contact actions +void ChatView::createContactActions() +{ + ContactAction *contactAction; + QHashIterator it( currentAccount_->getContactList()->getContactList() ); + Contact *contact; + + while ( it.hasNext() ) + { + contact = it.next().value(); + contactAction = new ContactAction( contact, inviteMenu_ ); + connect( contactAction, SIGNAL( activated(QString) ), + this, SLOT ( inviteContact(QString) ) ); + contactActions_.append( contactAction ); + } +} + + + +// Copy the currently selected text +void ChatView::editCopy() +{ + // Get the cursor reference + QTextCursor cursor = messageEdit_->textCursor(); + + if( cursor.hasSelection() ) + { + messageEdit_->copy(); + } + else if( chatMessageView_->hasSelection() ) // never has focus, only selection. + { + kapp->clipboard()->setText( chatMessageView_->selectedText() ); + // setData() for HTML version. + } +} + + + +// The color in the text box changed. +void ChatView::editorColorChanged(const QColor &color) +{ +#ifdef KMESSTEST + KMESS_ASSERT( currentAccount_ != 0 ); +#endif + + // Whenever the QTextEdit's contents is entirely deleted, the font color spontaneously resets to black; + // if this happens, set the color back to the user's color. + // HACK: This possibly is a Qt <= 4.4 bug exposed. + if ( color.name() != currentAccount_->getFontColor() ) + { +#ifdef KMESSDEBUG_CHATVIEW + kDebug() << "Color was reset to" << color.name() << ". Restoring it to the account setting."; +#endif + messageEdit_->setTextColor( QColor( currentAccount_->getFontColor() ) ); + } +} + + +// The user pressed return in the message editor, so send the message +void ChatView::enterPressed() +{ + // If there's no typed messages, avoid sending empty message + if( messageEdit_->document()->isEmpty() ) + { + return; + } + + // Don't send any typing messages while preparing to send the message in the text box... + doSendTypingMessages_ = false; + + // Send the message. + sendMessage(); + + // Now messages can again be sent + doSendTypingMessages_ = true; } @@ -149,11 +265,36 @@ bool ChatView::eventFilter( QObject *obj, QEvent *event ) QKeyEvent *keyEvent = 0; QDragEnterEvent *dragEvent = 0; QDropEvent *dropEvent = 0; - QFocusEvent *focusEvent = 0; bool ctrl = false; bool shift = false; int key = 0; + if( obj == inkEdit_ ) + { + // If key was pressed, check if it's return or + // switch the editor to messages editor. + if ( event->type() == QEvent::KeyPress ) + { + keyEvent = static_cast( event ); + key = keyEvent->key(); + if( key == Qt::Key_Return || key == Qt::Key_Enter ) + { + sendClicked(); + return false; + } + + slotSwitchEditor(); + + // Grep the key pressed and put into editor to continue + // the sentence started + if ( QChar( key ).isLetterOrNumber() ) + { + messageEdit_->insertPlainText ( QChar( key ) ); + } + } + return false; + } + switch( event->type() ) { case QEvent::DragEnter: @@ -166,13 +307,21 @@ bool ChatView::eventFilter( QObject *obj, QEvent *event ) break; case QEvent::WindowActivate: - messageEdit_->setFocus(); + if( messageEdit_->isVisible() ) + { + messageEdit_->setFocus(); + } + else + { + inkEdit_ ->inkFrame_->setFocus(); + } + break; case QEvent::FocusOut: - if( obj == messageEdit_ ) + case QEvent::Show: + if( isVisible() && obj == messageEdit_ ) { - focusEvent = static_cast( event ); messageEdit_->setFocus( Qt::OtherFocusReason ); } break; @@ -187,7 +336,9 @@ bool ChatView::eventFilter( QObject *obj, QEvent *event ) kDebug() << "Drag'n'dropped files: " << dropEvent->mimeData()->urls(); #endif - emit sendFiles( dropEvent->mimeData()->urls() ); + // Send the files to the contact + startFileTransfer( dropEvent->mimeData()->urls() ); + dropEvent->acceptProposedAction(); return true; } @@ -276,129 +427,26 @@ bool ChatView::eventFilter( QObject *obj, QEvent *event ) -// The color in the text box changed. -void ChatView::editorColorChanged(const QColor &color) +// Return the contact action with the given handle +ContactAction* ChatView::getContactActionByHandle( const QString& handle ) { -#ifdef KMESSTEST - KMESS_ASSERT( currentAccount_ != 0 ); -#endif - // Sometimes the text box color seems to spontaneously reset to black. - // If this happened, set the color back to the user's color. - if ( color.name() != currentAccount_->getFontColor() ) + foreach( ContactAction *contactAction, contactActions_ ) { -#ifdef KMESSDEBUG_CHATVIEW - kDebug() << "ChatView - Restore the color to the account setting by calling 'updateEditorFont'."; -#endif - updateEditorFont(); + if ( contactAction->getHandle() == handle ) + { + return contactAction; + } } + + return 0; } -// Copy the currently selected text -void ChatView::editCopy() +// Return a pointer to this chat's Contact Sidebar +ContactSidebar *ChatView::getContactSidebar() const { - // Get the cursor reference - QTextCursor cursor = messageEdit_->textCursor(); - - if( cursor.hasSelection() ) - { - messageEdit_->copy(); - } - else if( chatMessageView_->hasSelection() ) // never has focus, only selection. - { - kapp->clipboard()->setText( chatMessageView_->selectedText() ); - // setData() for HTML version. - } -} - - - -// Set the zoom factor of the text -void ChatView::changeZoomFactor( bool increase ) -{ - int newZoom = chatMessageView_->zoomFactor(); - - if( increase ) - { - newZoom += 25; - } - else - { - newZoom -= 25; - } - - if( newZoom > 20 && newZoom < 300 ) - { - currentZoom_ = newZoom; - chatMessageView_->setZoomFactor( currentZoom_ ); - } -} - - -// The user pressed return in the message editor, so send the message -void ChatView::enterPressed() -{ - // If there's no typed messages, avoid sending empty message - if( messageEdit_->document()->isEmpty() ) - { - return; - } - - // Don't send any typing messages while preparing to send the message in the text box... - doSendTypingMessages_ = false; - - // Send the message. - sendMessage(); - - // Now messages can again be sent - doSendTypingMessages_ = true; -} - - - -// Initialize the object -bool ChatView::initialize() -{ -#ifdef KMESSDEBUG_CHATVIEW - kDebug() << "initializing."; -#endif - - if ( initialized_ ) - { - kDebug() << "already initialized."; - return false; - } - if ( !initializeCurrentAccount() ) - { - return false; - } - - // Get chat style - chatStyle_ = new ChatMessageStyle(); - updateChatStyle(); - - initialized_ = true; - return true; -} - - - -// Initialize the current account -bool ChatView::initializeCurrentAccount() -{ - currentAccount_ = CurrentAccount::instance(); - if ( currentAccount_ == 0 ) - { - kDebug() << "Couldn't get the instance of the current account."; - return false; - } - connect( currentAccount_, SIGNAL( changedFontSettings() ), - this, SLOT ( updateEditorFont() ) ); - connect( currentAccount_, SIGNAL( changedChatStyleSettings() ), - this, SLOT ( updateChatStyle() ) ); - updateEditorFont(); - return true; + return contactSidebar_; } @@ -419,16 +467,28 @@ QString ChatView::getHtml() const +// Return a pointer to this chat's menu of inviteable contacts +KMenu *ChatView::getInviteMenu() const +{ + return inviteMenu_; +} + + + +// Give access to the message edit area. +KTextEdit * ChatView::getMessageEditField() const +{ + return messageEdit_; +} + + + // Return the selected text in the message area. QString ChatView::getSelectedText(bool asHtml) const { if( asHtml ) { -#if KDE_IS_VERSION(3,4,0) return chatMessageView_->selectedTextAsHTML(); -#else - return chatMessageView_->selectedText(); -#endif } else { @@ -438,6 +498,90 @@ QString ChatView::getSelectedText(bool asHtml) const +// Initialize the object +bool ChatView::initialize() +{ +#ifdef KMESSDEBUG_CHATVIEW + kDebug() << "initializing."; +#endif + + if ( initialized_ ) + { + kDebug() << "already initialized."; + return false; + } + if ( !initializeCurrentAccount() ) + { + return false; + } + if ( !initializeContactSidebar() ) + { + return false; + } + + // Create a menu for the contact actions + inviteMenu_ = new KMenu( i18n("&Invite") ); + + // Create the contact actions + createContactActions(); + + // Get chat style + chatStyle_ = new ChatMessageStyle(); + updateChatStyle(); + + initialized_ = true; + return true; +} + + + +// Set up the contact sidebar +bool ChatView::initializeContactSidebar() +{ +#ifdef KMESSTEST + KMESS_ASSERT( contactSidebar_ == 0 ); +#endif + + // Create the sidebar + contactSidebar_ = new ContactSidebar( parentWidget() ); + // Initialize the sidebar + if ( !contactSidebar_->initialize() ) + { + kDebug() << "Couldn't initialize the contact sidebar."; + return false; + } + + // Hide the sidebar by default + contactSidebar_->hide(); + +#ifdef KMESSTEST + KMESS_ASSERT( contactSidebar_ != 0 ); +#endif + + return true; +} + + + +// Initialize the current account +bool ChatView::initializeCurrentAccount() +{ + currentAccount_ = CurrentAccount::instance(); + if ( currentAccount_ == 0 ) + { + kDebug() << "Couldn't get the instance of the current account."; + return false; + } + connect( currentAccount_, SIGNAL( changedFontSettings() ), + this, SLOT ( updateEditorFont() ) ); + connect( currentAccount_, SIGNAL( changedChatStyleSettings() ), + this, SLOT ( updateChatStyle() ) ); + updateEditorFont(); + return true; +} + + + // Insert an emoticon into the message editor void ChatView::insertEmoticon( QString emoticonText ) { @@ -503,20 +647,35 @@ void ChatView::newLineClicked() // Restore the window properties (called by the parent ChatWindow) -void ChatView::readProperties( KConfigGroup &config ) +void ChatView::readProperties( const KConfigGroup &config ) { + KConfigGroup group; + + // Choose the config group if it was not given + if( &config == 0 ) + { + group = KMessConfig::instance()->getAccountConfig( currentAccount_->getHandle(), "ChatView" ); + } + else + { + group = config; + } + #ifdef KMESSDEBUG_CHATVIEW kDebug() << "Reading saved properties."; #endif - // Set the default widget sizes - sidebarSplitter_->setSizes( config.readEntry( "SidebarSplitterSizes", QList() ) ); - messageSplitter_->setSizes( config.readEntry( "MessageSplitterSizes", QList() ) ); + // Set the default widget sizes. The message editor has a default read size of 1 so it'll be + // as small as possible, without becoming invisible + int minChatViewHeight = messageViewFrame_->minimumSize().height(); + messageSplitter_->setSizes( group.readEntry( "MessageSplitterSizes", QList() << minChatViewHeight << 1 ) ); // Load the level of zoom - currentZoom_ = config.readEntry( "CurrentZoom", 100 ); + currentZoom_ = group.readEntry( "CurrentZoom", chatMessageView_->zoomFactor() ); // Restore it in the chat messages view chatMessageView_->setZoomFactor( currentZoom_ ); + // Read if the spelling check feature is enabled + messageEdit_->setCheckSpellingEnabled( group.readEntry( "UseSpellCheck", false ) ); } @@ -554,13 +713,25 @@ void ChatView::saveChatToFile( const QString &path ) // Save the window properties (called by parent ChatWindow) void ChatView::saveProperties( KConfigGroup &config ) { + KConfigGroup group; + + // Choose the config group if it was not given + if( &config == 0 ) + { + group = KMessConfig::instance()->getAccountConfig( currentAccount_->getHandle(), "ChatView" ); + } + else + { + group = config; + } + #ifdef KMESSDEBUG_CHATVIEW kDebug() << "Saving properties."; #endif - config.writeEntry( "SidebarSplitterSizes", sidebarSplitter_->sizes() ); - config.writeEntry( "MessageSplitterSizes", messageSplitter_->sizes() ); - config.writeEntry( "CurrentZoom" , currentZoom_ ); + group.writeEntry( "MessageSplitterSizes", messageSplitter_->sizes() ); + group.writeEntry( "CurrentZoom", currentZoom_ ); + group.writeEntry( "UseSpellCheck", messageEdit_->checkSpellingEnabled() ); } @@ -576,20 +747,62 @@ void ChatView::scrollChatToBottom() // The user clicked send, so send the message void ChatView::sendClicked() { - sendMessage(); + if( messageEdit_->isVisible() ) + { + sendMessage(); + } + else + { + sendInk(); + } - // Ensure the typing area always gets focus, - // so the user can type the next message directly. + // Ensure the typing or draw area always gets focus, + // so the user can type or draw the next message directly. // This area looses focus when you do other things like choosing emoticons. - messageEdit_->setFocus(); + if( messageEdit_->isVisible() ) + { + messageEdit_->setFocus(); + } + else + { + inkEdit_ ->inkFrame_->setFocus(); + } } +// Send a ink via server +void ChatView::sendInk() +{ + // Get the image bytes and emit the signal + QByteArray ink = inkEdit_->getImageBytes(); + + emit sendInkToContact( ink ); + + // Clear and reset the state of send button + inkEdit_->clearImage(); + sendButton_->setEnabled( false ); + + // Show the message in the browser window + QString text = ""; + + ChatMessage message( ChatMessage::TYPE_OUTGOING, + ChatMessage::CONTENT_MESSAGE_INK, + false, + text, + currentAccount_->getHandle(), + currentAccount_->getFriendlyName(), + currentAccount_->getPicturePath()); + + showMessage(message); +} + + // Send a message via the server void ChatView::sendMessage() { - int maxSendableMessageLength = 1400; + // Max length is fixed to 10 chunks ( multi-packet ) + int maxSendableMessageLength = 14000; // Get the message field's contents QString text = messageEdit_->toPlainText(); @@ -616,11 +829,17 @@ void ChatView::sendMessage() } else { - // Just remove the message from the message field - messageEdit_->clear(); + // Remove the message from the message field (allowing undo) lastSentence_.clear(); - } + QTextCursor cursor = messageEdit_->textCursor(); + messageEdit_->setTextCursor( cursor ); + + cursor.beginEditBlock(); + cursor.select( QTextCursor::Document ); + cursor.removeSelectedText(); + cursor.endEditBlock(); + } // Replace "\n" with "\r\n" (to follow the Windows linebreak style followed by the MSN servers) // @TODO Move this server stuff to the network/protocol code @@ -639,8 +858,8 @@ void ChatView::sendMessage() false, text, currentAccount_->getHandle(), - currentAccount_->getFriendlyName(), - currentAccount_->getImagePath(), + currentAccount_->getFriendlyName( STRING_ORIGINAL ), + currentAccount_->getPicturePath(), currentAccount_->getFont(), currentAccount_->getFontColor() ); @@ -653,6 +872,37 @@ void ChatView::sendMessage() +// Enable or disable the parts of the chat which allow user interaction +void ChatView::setEnabled( bool isEnabled ) +{ + // Set the state of the main UI elements + contactSidebar_->setEnabled( isEnabled ); + inviteMenu_ ->setEnabled( isEnabled ); + inkEdit_ ->setEnabled( isEnabled ); + messageEdit_ ->setEnabled( isEnabled ); + newLineButton_ ->setEnabled( isEnabled ); + sendButton_ ->setEnabled( isEnabled ); + switchButton_ ->setEnabled( isEnabled ); + + // Clear the contact actions at the very moment they expire (on disconnection) + qDeleteAll( contactActions_ ); + contactActions_.clear(); + + // The chat is being enabled back, replace some stuff which changes + // at every connection + if( isEnabled ) + { + // Recreate the contact actions + createContactActions(); + + // Re-read the current account pointer + // because it likely is a different one + currentAccount_ = CurrentAccount::instance(); + } +} + + + // Add the given message to the message browser. void ChatView::showMessage(const ChatMessage &message) { @@ -734,6 +984,12 @@ void ChatView::showMessage(const ChatMessage &message) // - regenerating messages to group them // - regenerating messages for received custom emoticons. chatMessages_.append( chatMessage ); + + // Also notify the sidebar, so that it updates the right contact frame + if( ! KMESS_NULL( contactSidebar_ ) ) + { + contactSidebar_->messageReceived( chatMessage->getContactHandle() ); + } } @@ -841,6 +1097,24 @@ void ChatView::slotAddNewEmoticon() +// The user are drawing a ink +void ChatView::slotInkModified( bool erasered ) +{ + if( ! erasered ) + { + if( ! sendButton_->isEnabled() ) + { + sendButton_->setEnabled( true ); + } + } + else + { + sendButton_->setEnabled( false ); + } +} + + + // The user clicked the "copy address" or "copy email" option in the context menu void ChatView::slotCopyAddress() { @@ -881,6 +1155,14 @@ void ChatView::slotCopyChatText() +// The user clicked the "find text" option in the context menu +void ChatView::slotFindChatText() +{ + chatMessageView_->findText(); +} + + + // Open a new url clicked in the khtml widget void ChatView::slotOpenURLRequest( const KUrl &url ) { @@ -903,6 +1185,15 @@ void ChatView::slotOpenURLRequest( const KUrl &url ) slotAddNewEmoticon(); } } + else if( url.protocol() == "file" ) + { + // Obtain the widget of the main KMess window, to correctly link it to the opened app + KMessApplication *kmessApp = static_cast( kapp ); + QWidget *mainWindow = kmessApp->getContactListWindow()->window(); + + // Execute the local file with the system's default association (KRun auto-deletes itself) + new KRun( url, mainWindow, 0, true ); + } else { // Just execute the link @@ -1003,7 +1294,7 @@ void ChatView::slotShowContextMenu( const QString &clickedUrl, const QPoint &poi connect( urlAction, SIGNAL(triggered(bool)), this, SLOT(slotVisitAddress()) ); contextMenu->addAction( urlAction ); // urlAction = new KAction( i18n("Copy &Address"), "copy", 0, this, SLOT(slotCopyAddress()), this, "copyurl" ); - urlAction = new KAction( KIcon( "copy" ), i18n("Copy &Address"), this ); + urlAction = new KAction( KIcon( "edit-copy" ), i18n("Copy &Address"), this ); connect( urlAction, SIGNAL(triggered(bool)), this, SLOT(slotCopyAddress()) ); contextMenu->addAction( urlAction ); } @@ -1015,10 +1306,12 @@ void ChatView::slotShowContextMenu( const QString &clickedUrl, const QPoint &poi KAction *copyAction = KStandardAction::copy( this, SLOT(slotCopyChatText()), 0 ); // , actionCollection() ); KAction *selectAllAction = KStandardAction::selectAll( this, SLOT(slotSelectAllChatText()), 0 ); // , actionCollection() ); KAction *saveToFileAction = KStandardAction::save( this, SLOT(showSaveChatDialog()), 0 ); // , actionCollection() ); + KAction *findAction = KStandardAction::find( this, SLOT(slotFindChatText()), 0 ); // Update the labels a bit though copyAction ->setText( i18n("&Copy text") ); selectAllAction ->setText( i18n("Select &All") ); + findAction ->setText( i18n("Find &Text" ) ); saveToFileAction->setText( i18n("Save chat to &File") ); // Add a separator to divide the context-depending entries from the rest of the menu @@ -1029,6 +1322,7 @@ void ChatView::slotShowContextMenu( const QString &clickedUrl, const QPoint &poi contextMenu->addAction( copyAction ); contextMenu->addAction( selectAllAction ); + contextMenu->addAction( findAction ); contextMenu->addSeparator(); contextMenu->addAction( saveToFileAction ); @@ -1050,6 +1344,50 @@ void ChatView::slotShowContextMenu( const QString &clickedUrl, const QPoint &poi +// Switch the editor between ink editor and text editor +void ChatView::slotSwitchEditor() +{ + // TODO Create inkEdit only on request + bool isMessageEditVisible = messageEdit_->isVisible(); + messageEdit_->setVisible( ! isMessageEditVisible ); + inkEdit_ ->setVisible( isMessageEditVisible ); + + if( isMessageEditVisible ) + { + // The inkEdit is visible + if( inkEdit_->isEmpty() ) + { + sendButton_->setEnabled( false ); + } + else + { + sendButton_->setEnabled( true ); + } + + switchButton_->setIcon( KIcon( "preferences-desktop-font" ) ); + inkEdit_ ->inkFrame_->setFocus(); + newLineButton_->setEnabled( false); + } + else + { + // The messageEdit is visible + if( messageEdit_->document()->isEmpty() ) + { + sendButton_->setEnabled( false ); + } + else + { + sendButton_->setEnabled( true ); + } + + messageEdit_ ->setFocus(); + switchButton_->setIcon( KIcon( "draw-freehand" ) ); + newLineButton_->setEnabled( true ); + } +} + + + // The user clicked the "visit address" or "send email" option in the context menu, or clicked a link in the ChatMessageView void ChatView::slotVisitAddress() { @@ -1066,8 +1404,8 @@ void ChatView::slotVisitAddress() kDebug() << "Opening URL: " << chatViewClickedUrl_; #endif - KMessApplication *kmessApp = static_cast( kapp ); - new KRun( chatViewClickedUrl_, kmessApp->getContactListWindow()->window() ); + // Launch the browser for the given URL + KMessShared::openBrowser( chatViewClickedUrl_ ); // Reset the url chatViewClickedUrl_.clear(); @@ -1075,40 +1413,6 @@ void ChatView::slotVisitAddress() -// Update the editor's font to match the account's font -void ChatView::updateEditorFont() -{ -#ifdef KMESSTEST - KMESS_ASSERT( currentAccount_ != 0 ); -#endif - QColor color; - - if( currentAccount_ == 0 ) - { - return; - } - - // Change the color to the user's color - color.setNamedColor( currentAccount_->getFontColor() ); - messageEdit_->setTextColor( color ); - messageEdit_->setFont( currentAccount_->getFont() ); - messageEdit_->setCurrentFont( currentAccount_->getFont() ); - messageEdit_->setFontPointSize( currentAccount_->getFont().pointSize() ); - - // If the contact font settings changed, regenerate the messages. - if( chatStyle_ != 0 ) - { - if( currentAccount_->getUseContactFont() != chatStyle_->getUseContactFont() - || currentAccount_->getContactFont() != chatStyle_->getContactFont() - || currentAccount_->getContactFontColor() != chatStyle_->getContactFontColor() ) - { - updateChatStyle(); - } - } -} - - - // Update the chat style void ChatView::updateChatStyle() { @@ -1120,13 +1424,14 @@ void ChatView::updateChatStyle() if(KMESS_NULL(currentAccount_)) return; // Load new settings in the chat style object - chatStyle_->setStyle ( currentAccount_->getChatStyle() ); - chatStyle_->setContactFont ( currentAccount_->getContactFont() ); - chatStyle_->setContactFontColor( currentAccount_->getContactFontColor() ); - chatStyle_->setShowTime ( currentAccount_->getShowMessageTime() ); - chatStyle_->setUseContactFont ( currentAccount_->getUseContactFont() ); - chatStyle_->setUseEmoticons ( currentAccount_->getUseEmoticons() ); - chatStyle_->setUseFontEffects ( currentAccount_->getUseFontEffects() ); + chatStyle_->setStyle ( currentAccount_->getChatStyle() ); + chatStyle_->setContactFont ( currentAccount_->getContactFont() ); + chatStyle_->setContactFontColor( currentAccount_->getContactFontColor() ); + chatStyle_->setShowTime ( currentAccount_->getShowMessageTime() ); + chatStyle_->setUseContactFont ( currentAccount_->getUseContactFont() ); + chatStyle_->setUseEmoticons ( currentAccount_->getUseEmoticons() ); + chatStyle_->setUseFontEffects ( currentAccount_->getUseFontEffects() ); + chatStyle_->setUseFormatting ( currentAccount_->getUseChatFormatting() ); // Support grouping of follow-up messages. bool groupFollowups = currentAccount_->getGroupFollowupMessages(); @@ -1233,5 +1538,40 @@ void ChatView::updateCustomEmoticon( const QString &handle, const QString &code } + +// Update the editor's font to match the account's font +void ChatView::updateEditorFont() +{ +#ifdef KMESSTEST + KMESS_ASSERT( currentAccount_ != 0 ); +#endif + QColor color; + + if( currentAccount_ == 0 ) + { + return; + } + + // Change the color to the user's color + color.setNamedColor( currentAccount_->getFontColor() ); + messageEdit_->setTextColor( color ); + messageEdit_->setFont( currentAccount_->getFont() ); + messageEdit_->setCurrentFont( currentAccount_->getFont() ); + messageEdit_->setFontPointSize( currentAccount_->getFont().pointSize() ); + + // If the contact font settings changed, regenerate the messages. + if( chatStyle_ != 0 ) + { + if( currentAccount_->getUseContactFont() != chatStyle_->getUseContactFont() + || currentAccount_->getContactFont() != chatStyle_->getContactFont() + || currentAccount_->getContactFontColor() != chatStyle_->getContactFontColor() ) + { + updateChatStyle(); + } + } +} + + + #include "chatview.moc" diff --git a/src/chat/chatview.h b/src/chat/chatview.h index dda1374..3dfb47e 100644 --- a/src/chat/chatview.h +++ b/src/chat/chatview.h @@ -32,18 +32,26 @@ // Forward declarations -class CurrentAccount; -class KMessTest; +class KMenu; + class ChatMessageStyle; class ChatMessageView; +class ContactAction; +class ContactSidebar; +class CurrentAccount; +class InkEdit; +class KMessTest; +class KTextEdit; /** * The view widget of a chat with a contact with message display and entry. + * * @author Mike K. Bennett + * @ingroup Chat */ -class ChatView : public QWidget, public Ui::ChatView +class ChatView : public QWidget, private Ui::ChatView { Q_OBJECT @@ -58,10 +66,18 @@ class ChatView : public QWidget, public Ui::ChatView void editCopy(); // Initialize the object bool initialize(); + // Return the contact action with the given handle + ContactAction *getContactActionByHandle(const QString& handle); + // Return a pointer to this chat's menu of inviteable contacts + KMenu *getInviteMenu() const; + // Return a pointer to this chat's Contact Sidebar + ContactSidebar *getContactSidebar() const; // Return the encoding of the HTML document. QString getEncoding() const; // Return the HTML source of the page. QString getHtml() const; + // Give access to the message edit area. + KTextEdit *getMessageEditField() const; // Return the selected text in the message area. QString getSelectedText(bool asHtml) const; // Whether or not the message area is empty @@ -71,15 +87,17 @@ class ChatView : public QWidget, public Ui::ChatView // Change the text zoom factor void changeZoomFactor( bool increase ); // Restore the window properties (called by the parent ChatWindow) - void readProperties( KConfigGroup &config ); + void readProperties( const KConfigGroup &config = *((const KConfigGroup*)0) ); // Save the window properties (called by the parent ChatWindow) - void saveProperties( KConfigGroup &config ); + void saveProperties( KConfigGroup &config = *((KConfigGroup*)0) ); public slots: // Insert an emoticon into the message editor void insertEmoticon( QString emoticonText ); // Scroll to the bottom of the chat browser void scrollChatToBottom(); + // Enable or disable the parts of the chat which allow user interaction + void setEnabled( bool isEnabled ); // Add the given message to the message browser. void showMessage( const ChatMessage &message ); // Show a dialog to save the chat. @@ -88,12 +106,20 @@ class ChatView : public QWidget, public Ui::ChatView void saveChatToFile(const QString &path ); private: // Private methods + // Create the contact actions + void createContactActions(); // Event filter to detect special actions in the message editor. bool eventFilter( QObject *obj, QEvent *event ); + // Set up the contact sidebar + bool initializeContactSidebar(); // Initialize the current account bool initializeCurrentAccount(); + // Send a ink via server + void sendInk(); // Send a message via the server void sendMessage(); + // Send a file to a contact. + virtual void startFileTransfer( QList fileList = QList() ) = 0; private slots: // Private slots // The user pressed return in the message editor, so send the message @@ -106,23 +132,36 @@ class ChatView : public QWidget, public Ui::ChatView void sendClicked(); // Open a dialog to add a new custom emoticon seen in the chat void slotAddNewEmoticon(); + // The user are drawing a ink + void slotInkModified( bool erasered ); // The user clicked a kmess internal link in the ChatMessageView void slotSendAppCommand(); // The user clicked the "copy address" or "copy email" option in the context menu void slotCopyAddress(); // The user clicked the "copy text" option in the context menu. void slotCopyChatText(); + // The user clicked the "find text" option in the context menu + void slotFindChatText(); // Open a new url clicked in the khtml widget - void slotOpenURLRequest( const KUrl &url ); + void slotOpenURLRequest( const KUrl &url ); // The user clicked the "select all" option in the context menu. void slotSelectAllChatText(); // The user right clicked at the KHTMLPart to show a popup. void slotShowContextMenu(const QString &url, const QPoint &point); + // Switch the editor between ink editor and text editor + void slotSwitchEditor(); // The user clicked the "visit address" or "send email" option in the context menu, or clicked a link in the ChatMessageView void slotVisitAddress(); // Update the editor's font to match the account's font void updateEditorFont(); + + protected: // Protected attributes + // The contact sidebar, which goes in the sidebar + ContactSidebar *contactSidebar_; + // A pointer to the instance of the current account + CurrentAccount *currentAccount_; + private: // Private attributes QList chatMessages_; // The embedded khtml part @@ -131,14 +170,18 @@ class ChatView : public QWidget, public Ui::ChatView ChatMessageStyle *chatStyle_; // URL address which has been right-clicked KUrl chatViewClickedUrl_; - // A pointer to the instance of the current account - CurrentAccount *currentAccount_; + // The contact actions in the invite menu + QList contactActions_; // Stores the current level of zoom int currentZoom_; // Whether or not typing messages should be sent (true except the very moment a text message is sent) bool doSendTypingMessages_; // Whether or not the object was initialized bool initialized_; + // The ink editor + InkEdit *inkEdit_; + // The list of invitable contacts + KMenu *inviteMenu_; // The last messages sent by the same contact. This is used to combine them QList lastContactMessages_; // The messages that contain custom emoticons @@ -146,15 +189,17 @@ class ChatView : public QWidget, public Ui::ChatView // A timer to time whether a "user is typing" message should be sent. QTimer userTypingTimer_; // Index for fast-retype - int indexSentences_; + int indexSentences_; // Last sentence in writing - QString lastSentence_; + QString lastSentence_; private slots: // The color in the text box changed. void editorColorChanged(const QColor &color); // Update the chat style void updateChatStyle(); + // Invite a contact to the chat + virtual void inviteContact(QString handle) = 0; signals: // Public signals // Signal that the user wants to add a new custom emoticon copying it from a friend's @@ -163,8 +208,12 @@ class ChatView : public QWidget, public Ui::ChatView void appCommand(QString cookie, QString contact, QString method); // Signal that the given text should be sent as a message void sendMessageToContact(QString text); + // Signal that the given ink should be sent as a message + void sendInkToContact( QByteArray ink ); // Signal that the user wants to transfer some files void sendFiles( QList urls ); + // Signal for ChatMessageView to replace an application's accept/reject/cancel links with another text + void updateApplicationMessage( const QString &messageId, const QString &newMessage ); // Signal that the user is typing void userIsTyping(); }; diff --git a/src/chat/chatview.ui b/src/chat/chatview.ui index 150f152..b92ce2f 100644 --- a/src/chat/chatview.ui +++ b/src/chat/chatview.ui @@ -5,208 +5,212 @@ 0 0 - 432 - 338 + 289 + 281 - - - 2 - + - 1 + 0 - - + + 0 + + + + + + 0 + 0 + + + + 0 + - Qt::Horizontal + Qt::Vertical - 6 + 4 false - - - Qt::Vertical + + + + 0 + 100 + - - 6 + + + 250 + 175 + - - false - - - - - 0 - 0 - - - - - 250 - 250 - - - - QFrame::NoFrame - - - QFrame::Plain - - - - - QFrame::NoFrame - - - QFrame::Plain - - - 0 - - - - 1 - - - - - - - - - - 0 - 0 - - - - - 80 - 30 - - - - S&end - - - Alt+E - - - - - - - - 0 - 0 - - - - - 80 - 30 - - - - Ne&w Line - - - Alt+W - - - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 10 - - - - - - - - - - - 1 - 0 - - - - - 200 - 70 - - - - - 32767 - 32767 - - - - false - - - - - - - QFrame::NoFrame QFrame::Plain - + + 0 + + + + + + 0 + 0 + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 1 + 0 - - 0 - - - + + + + + 0 + 0 + + - 130 - 0 + 200 + 70 - - 0 + + + 32767 + 32767 + - - - - 0 - 0 - 120 - 294 - + + Qt::NoFocus + + + QFrame::NoFrame + + + QFrame::Sunken + + + + 0 - - Sidebar - - + + 0 + + + + + + 1 + 0 + + + + + 200 + 70 + + + + + 32767 + 32767 + + + + Qt::WheelFocus + + + QFrame::StyledPanel + + + false + + + + + + + + 4 + + + + + + + + + + + + Qt::Horizontal + + + + 18 + 17 + + + + + + + + + 0 + 0 + + + + Ne&w Line + + + Alt+W + + + + + + + + 0 + 0 + + + + S&end + + + Alt+E + + + + + @@ -222,60 +226,6 @@
ktextedit.h
- - messageEdit_ - sendButton_ - newLineButton_ - - - - messageEdit_ - textChanged() - ChatView - messageTextChanged() - - - 20 - 20 - - - 20 - 20 - - - - - newLineButton_ - pressed() - ChatView - newLineClicked() - - - 20 - 20 - - - 20 - 20 - - - - - sendButton_ - pressed() - ChatView - sendClicked() - - - 20 - 20 - - - 20 - 20 - - - - + diff --git a/src/chat/chatwindow.cpp b/src/chat/chatwindow.cpp index 86bbfe5..cfb31ff 100644 --- a/src/chat/chatwindow.cpp +++ b/src/chat/chatwindow.cpp @@ -1,8 +1,8 @@ /*************************************************************************** chatwindow.cpp - description ------------------- - begin : Wed Jan 15 22:41:32 CST 2003 - copyright : (C) 2003 by Mike K. Bennett + begin : Tue Apr 23 2002 + copyright : (C) 2002 by Mike K. Bennett email : mkb137b@hotmail.com ***************************************************************************/ @@ -17,105 +17,111 @@ #include "chatwindow.h" -#include "../contact/contactbase.h" -#include "../contact/contactlist.h" -#include "../network/chatinformation.h" -#include "../network/chatmessage.h" #include "../network/msnswitchboardconnection.h" -#include "../network/specialgroups.h" -#include "../utils/xmlfunctions.h" -#include "../accountaction.h" +#include "../utils/richtextparser.h" +#include "../utils/kmessconfig.h" #include "../currentaccount.h" +#include "../kmess.h" #include "../kmessapplication.h" #include "../kmessdebug.h" -#include "../kmess.h" -#include "chatmessageview.h" -#include "chatview.h" -#include "contactaction.h" +#include "chat.h" +#include "config-kmess.h" #include "contactsidebar.h" #include "emoticonsidebar.h" -#include "websidebar.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include #include +#include #include -#include +#include #include -#include -#include +#include +#include #include #include -#include -#include -#include -#include +#include #include -#include -#include +#include #include -#include +#include #ifdef KMESSDEBUG_CHATWINDOW - #define KMESSDEBUG_CHATWINDOW_GENERAL - #define KMESSDEBUG_CHATWINDOW_CONTACTS - #define KMESSDEBUG_CHATWINDOW_FILETRANSFER +// #define KMESSDEBUG_CHATWINDOW_TYPING_MESSAGES #endif -/** - * Define the maximum interval (in seconds) between each update of - * the status bar label, when displaying "contact is typing" messages. - */ -#define MAXIMUM_TYPING_TIME 5 - - - // The constructor -ChatWindow::ChatWindow(QWidget *parent ) - : ChatWindowInterface(parent), - chatView_(0), - contactSidebar_(0), - currentAccount_(0), - customEmoticonSidebar_(0), - firstMessage_(true), - initialized_(false), - lastContact_(QString::null), - msnSwitchboardConnection_(0), - standardEmoticonSidebar_(0), - temporarySidebar_(false), - webSidebar_(0) +ChatWindow::ChatWindow( QWidget *parent ) +: KMainWindow( parent ) +, Ui::ChatWindow() +, currentAccount_( 0 ) +, currentInviteMenu_( 0 ) +, customEmoticonSidebar_( 0 ) +, initialized_( false ) +, isSidebarTemporary_( false ) +, lastActiveChatIndex_( -1 ) +, standardEmoticonSidebar_( 0 ) { - statusLabel_ = new KSqueezedTextLabel( this ); - statusBar()->addWidget( statusLabel_, 1 ); + // Create the interface + QWidget *mainWidget = new QWidget( this ); + setupUi( mainWidget ); + setCentralWidget( mainWidget ); - caption_ = i18n("Chat"); - setCaption( caption_ ); + // Create the menus + initMenus(); + + // Create the tabs bar + tabBar_ = new KTabBar( this ); + tabBar_->setElideMode( Qt::ElideRight ); + tabBar_->setDrawBase( false ); + tabBar_->setUsesScrollButtons( false ); +#if KDE_IS_VERSION(4,0,70) + tabBar_->setCloseButtonEnabled( true ); +#else + tabBar_->setHoverCloseButton( true ); + tabBar_->setHoverCloseButtonDelayed( true ); +#endif + + tabFrame_->layout()->addWidget( tabBar_ ); + connect( tabBar_, SIGNAL( currentChanged(int) ), + this, SLOT ( slotSwitchTab(int) ) ); + connect( tabBar_, SIGNAL( closeRequest(int) ), + this, SLOT ( slotSwitchAndDeleteTab(int) ) ); + connect( tabBar_, SIGNAL( mouseMiddleClick(int) ), + this, SLOT ( slotSwitchAndDeleteTab(int) ) ); + connect( tabBar_, SIGNAL( wheelDelta(int) ), + this, SLOT ( slotWheelMouseMoved(int) ) ); + + // Associate the keyboard shortcuts + new QShortcut( QKeySequence("Esc"), this, SLOT( queryClose() ) ); + new QShortcut( QKeySequence("Shift+Esc"), this, SLOT( queryCloseAll() ) ); + new QShortcut( QKeySequence(QKeySequence::NextChild), this, SLOT( slotSwitchToRightTab() ) ); + new QShortcut( QKeySequence(QKeySequence::PreviousChild), this, SLOT( slotSwitchToLeftTab() ) ); + new QShortcut( QKeySequence(QKeySequence::Forward), this, SLOT( slotSwitchToRightTab() ) ); + new QShortcut( QKeySequence(QKeySequence::Back), this, SLOT( slotSwitchToLeftTab() ) ); + + + // Create the status bar + statusLabel_ = new KSqueezedTextLabel( this ); + statusLabel_->setTextFormat( Qt::PlainText ); + statusBar()->addWidget( statusLabel_, 1 ); + // NOTE: Workaround - if the next statement is omitted, the first status message ever shown never appears + showStatusMessage( " " ); // Install a filter to catch window activation events, to stop title blinking installEventFilter( this ); - // Connect the blink timer - connect( &blinkTimer_, SIGNAL( timeout() ), - this, SLOT ( blinkCaption() ) ); - // Connect the status clear timer - connect( &statusTimer_, SIGNAL( timeout() ), - this, SLOT ( updateTypingMessage() )); - - // Setup the status bar text timer - statusTimer_.setSingleShot( true ); - // Setup the window title blinking timer blinkTimer_.setSingleShot( false ); + connect( &blinkTimer_, SIGNAL( timeout() ), + this, SLOT ( slotBlinkCaption() ) ); + + // Setup the status bar text timer + statusTimer_.setSingleShot( true ); + connect( &statusTimer_, SIGNAL( timeout() ), + this, SLOT ( showStatusMessage() ) ); } @@ -123,43 +129,69 @@ ChatWindow::ChatWindow(QWidget *parent ) // The destructor ChatWindow::~ChatWindow() { -#ifdef KMESSDEBUG_KMESS - kDebug() << "closing window..."; -#endif + // Save the window properties + saveProperties(); - // Reset pointer, because calls from closeConnectionLater could invoke showMessage(). - // The object is deleted automatically since it's a QObject child. - chatView_ = 0; - - // Delete the contact actions - // Avoid crashing when the switchboard/contact fires a "contactLeftChat" signal. - qDeleteAll( contactActions_ ); - contactActions_.clear(); - -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL +#ifdef KMESSDEBUG_CHATWINDOW kDebug() << "DESTROYED."; #endif } -// Filter to catch window activation events -bool ChatWindow::eventFilter( QObject */*obj*/, QEvent *event ) +// Show the "about KDE" message. +void ChatWindow::aboutKDE() { - // Stop blinking if the window is active - if( blinkTimer_.isActive() && event->type() == QEvent::WindowActivate ) - { - blinkTimer_.stop(); - setCaption( caption_ ); - } + helpMenu_->aboutKDE(); +} - return false; + + +// Show the "about KMess" message. +void ChatWindow::aboutKMess() +{ + helpMenu_->aboutApplication(); +} + + + +// Add a new chat tab +Chat *ChatWindow::addChatTab( Chat *newChat ) +{ + // Add the new tab to the list of chats + chats_.append( newChat ); + + // Also create a tab for the new chat + tabBar_->addTab( newChat->getCaption() ); + + // If there's more than one tab, show the bar and the Close All option + bool moreThanOneTabs = ( chats_.count() > 1 ); + tabBar_->setVisible( moreThanOneTabs ); + closeAllAction_->setVisible( moreThanOneTabs ); + + // Connect its main signals + connect( newChat, SIGNAL( chatInfoChanged() ), + this, SLOT ( slotChatInfoChanged() ) ); + connect( newChat, SIGNAL( gotNudge() ), + this, SLOT ( slotGotNudge() ) ); + connect( newChat, SIGNAL( sendMessageToContact(QString) ), + this, SLOT ( slotUserSentMessage() ) ); + connect( newChat, SIGNAL( gotChatMessage(const ChatMessage&,Chat*) ), + this, SLOT ( slotGotChatMessage(const ChatMessage&,Chat*) ) ); + connect( newChat, SIGNAL( gotTypingMessage(Chat*) ), + this, SLOT ( slotGotTypingMessage(Chat*) ) ); + + // Add the chat's view and contact sidebar to the window's frames + chatFrame_->layout()->addWidget( newChat ); + contactSidebarFrame_->layout()->addWidget( newChat->getContactSidebar() ); + + return newChat; } // Make the caption blink if the window still doesn't have focus -void ChatWindow::blinkCaption() +void ChatWindow::slotBlinkCaption() { // If the window now has focus, stop blinking if( isActiveWindow() ) @@ -168,18 +200,18 @@ void ChatWindow::blinkCaption() blinkTimer_.stop(); // Reset the caption to normal - setCaption( caption_ ); + setWindowTitle(); return; } // Make the caption alternate case if ( blinkToUpper_ ) { - setCaption( QString( "* " + caption_.toUpper() ) ); + setWindowTitle( QString( "* " + caption_.toUpper() ) ); } else { - setCaption( QString( "* " + caption_.toLower() ) ); + setWindowTitle( QString( "* " + caption_.toLower() ) ); } blinkToUpper_ = ! blinkToUpper_; @@ -190,212 +222,18 @@ void ChatWindow::blinkCaption() // Toggle the sidebar based on account preferences void ChatWindow::checkSidebarPreferences() { - if(KMESS_NULL(chatView_)) return; - if(KMESS_NULL(chatView_->sidebarContainer_)) return; - if(KMESS_NULL(currentAccount_)) return; + if( KMESS_NULL( sidebar_ ) ) return; + if( KMESS_NULL( currentAccount_ ) ) return; if( currentAccount_->getShowSidebar() ) { - temporarySidebar_ = false; - chatView_->sidebarContainer_->show(); + isSidebarTemporary_ = false; + sidebar_->show(); } else { - temporarySidebar_ = true; - chatView_->sidebarContainer_->hide(); - } -} - - - -// Choose the contact to start an invitation with. -QString ChatWindow::chooseContact() -{ - if( KMESS_NULL(msnSwitchboardConnection_) ) return QString(); - - // Choose the contact. - const QStringList &contactsInChat = msnSwitchboardConnection_->getContactsInChat(); - switch( contactsInChat.count() > 1 ) - { - case 0: - // No contacts in the chat - if( msnSwitchboardConnection_->getLastContact().isEmpty() ) - { - // Send invitation to the first contact that should appear in the chat. - return msnSwitchboardConnection_->getFirstContact(); - } - else - { - // Resume chat with last contact - return msnSwitchboardConnection_->getLastContact(); - } - - case 1: - // Choose the only contact available in the chat - return contactsInChat.first(); - - default: - // Multiple contacts in the chat. - // TODO: The official client opens a contact-choose dialog here, and starts a new chat with the selected contact. - KMessageBox::sorry( this, i18n("You can't start this invitation because there are multiple contacts in this chat.") ); - return QString(); - } -} - - - -// A contact joined the chat -void ChatWindow::contactJoined(QString handle, QString friendlyName) -{ - ContactAction *contactAction; - - // Avoid newlines which cause problems to the UI layout. - caption_ = getCaption().replace( "\n", " " ); - setCaption( caption_ ); - - if( ! participants_.contains( handle ) ) - { - participants_.prepend( handle ); - } - - lastContact_ = QString::null; - - contactAction = getContactActionByHandle( handle ); - if ( contactAction != 0 ) - { - contactAction->setInChat( true ); - } - - // Show message when the user has the sidebar disabled, - // or when a multi-chat has started. - if( ( ! chatView_->sidebarContainer_->isVisible() && ! currentAccount_->getShowSidebar() ) - || ( msnSwitchboardConnection_ && msnSwitchboardConnection_->getContactsInChat().size() > 1 ) ) - { - chatView_->showMessage( ChatMessage( ChatMessage::TYPE_NOTIFICATION, - ChatMessage::CONTENT_NOTIFICATION_PRESENCE, - false, - i18n("%1 has joined the chat.", friendlyName), - handle, - friendlyName ) ); - } - - ContactBase *contact = currentAccount_->getContactByHandle( handle ); - if( contact ) - { - connect( contact, SIGNAL( changedFriendlyName() ), this, SLOT( update() ) ); - } -} - - - -// A contact left the chat -void ChatWindow::contactLeft(QString handle, bool isChatIdle ) -{ -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kDebug() << "contact '" << handle << "' has left" << (isChatIdle ? " due to inactivity." : "") << "."; -#endif - - ContactAction *contactAction = getContactActionByHandle( handle ); - - if ( contactAction != 0 ) - { - contactAction->setInChat( false ); - } - - // Change the caption to remove the contact who has left - caption_ = getCaption().replace( "\n", "" ); - setCaption( caption_ ); - - participants_.removeAll( handle ); - - // This was the last participant, save it as the last being in so we can - // still recognize this window as a chat with this contact - if( participants_.isEmpty() ) - { - lastContact_ = handle; - } - - // Show message when the user has the sidebar disabled, - // or a user left a multi-chat - if( ( ! chatView_->sidebarContainer_->isVisible() && ! currentAccount_->getShowSidebar() ) - || ( msnSwitchboardConnection_ && msnSwitchboardConnection_->getContactsInChat().size() > 0 ) ) - { - QString contactName = currentAccount_->getContactFriendlyNameByHandle( handle ); - QString message; - - if( isChatIdle ) - { - message = i18n( "The conversation went idle, %1 has left the chat.", contactName ); - } - else - { - message = i18n( "%1 has left the chat.", contactName ); - } - - chatView_->showMessage( ChatMessage( ChatMessage::TYPE_NOTIFICATION, - ChatMessage::CONTENT_NOTIFICATION_PRESENCE, - false, - message, - handle, - contactName ) ); - } - - ContactBase *contact = currentAccount_->getContactByHandle( handle ); - if( contact ) - { - disconnect( contact, SIGNAL( changedFriendlyName() ), this, SLOT( update() ) ); - } -} - - - -// A contact is typing -void ChatWindow::contactTyping(QString, QString friendlyName) -{ - // If a contact is still typing, re-insert it in the list, so that the typing start time is updated - if( typingContacts_.contains( friendlyName ) ) - { - typingContacts_.remove( friendlyName ); - } - - // Add this contact to the list of contacts which are typing, and record when it has started writing - QTime startTime = QTime::currentTime(); - startTime.start(); - typingContacts_.insert( friendlyName, startTime ); - - // Update the actual status bar - updateTypingMessage(); -} - - - -// Create the contact actions -void ChatWindow::createContactActions() -{ - ContactAction *contactAction; - QHashIterator it( currentAccount_->getContactList()->getContactList() ); - Contact *contact; - - while ( it.hasNext() ) - { - contact = it.next().value(); - contactAction = new ContactAction( contact, inviteMenu_ ); - connect( contactAction, SIGNAL( activated(QString) ), - this, SLOT ( inviteContact(QString) ) ); - contactActions_.append( contactAction ); - } -} - - - - -// put the marked text/object into the clipboard and remove -// it from the document -void ChatWindow::editCut() -{ - if( chatView_->messageEdit_->hasFocus() ) - { - chatView_->messageEdit_->cut(); + isSidebarTemporary_ = true; + sidebar_->hide(); } } @@ -404,7 +242,21 @@ void ChatWindow::editCut() // put the marked text/object into the clipboard void ChatWindow::editCopy() { - chatView_->editCopy(); + getCurrentChat()->editCopy(); +} + + + +// put the marked text/object into the clipboard and remove +// it from the document +void ChatWindow::editCut() +{ + KTextEdit *typingField = getCurrentChat()->getMessageEditField(); + + if( typingField->hasFocus() ) + { + typingField->cut(); + } } @@ -437,8 +289,7 @@ void ChatWindow::editFont() currentAccount_->setFont( selection ); // Commit changes to disk, now - KConfigGroup group = KGlobal::config()->group( "" ); - currentAccount_->saveProperties( group ); + currentAccount_->saveProperties(); } } @@ -460,8 +311,7 @@ void ChatWindow::editFontColor() currentAccount_->setFontColor(fontColor); // Commit changes to disk, now - KConfigGroup group = KGlobal::config()->group( "" ); - currentAccount_->saveProperties( group ); + currentAccount_->saveProperties(); } } @@ -471,7 +321,7 @@ void ChatWindow::editFontColor() void ChatWindow::editPaste() { // Regardless of focus, always paste in message edit. - chatView_->messageEdit_->paste(); + getCurrentChat()->getMessageEditField()->paste(); } @@ -479,7 +329,7 @@ void ChatWindow::editPaste() // enlarge the font size void ChatWindow::editZoomIn() { - chatView_->changeZoomFactor( true ); + getCurrentChat()->changeZoomFactor( true ); } @@ -487,47 +337,48 @@ void ChatWindow::editZoomIn() // decrease the font size void ChatWindow::editZoomOut() { - chatView_->changeZoomFactor( false ); + getCurrentChat()->changeZoomFactor( false ); } + // The emoticon button was pressed. -void ChatWindow::emoticonButtonPressed() +void ChatWindow::showEmoticonPanel() { // Find out what toolbox does the emoticon sidebar have - int emoticonSidebarId = chatView_->sidebar_->indexOf( standardEmoticonSidebar_ ); + int emoticonSidebarId = sidebar_->indexOf( standardEmoticonSidebar_ ); // When the side bar is hidden, temporary show it. - if( ! chatView_->sidebarContainer_->isVisible() ) + if( ! sidebar_->isVisible() ) { - temporarySidebar_ = true; - chatView_->sidebar_->setCurrentIndex( emoticonSidebarId ); - chatView_->sidebarContainer_->show(); + isSidebarTemporary_ = true; + sidebar_->setCurrentIndex( emoticonSidebarId ); + sidebar_->show(); } else { // Sidebar is visible // Show the emoticon sidebar - if( chatView_->sidebar_->currentIndex() != emoticonSidebarId ) + if( sidebar_->currentIndex() != emoticonSidebarId ) { // Show emoticons - chatView_->sidebar_->setCurrentIndex( emoticonSidebarId ); + sidebar_->setCurrentIndex( emoticonSidebarId ); } else { // Emotion sidebar is displayed currently // Hide the emoticon sidebar - if( temporarySidebar_ ) + if( isSidebarTemporary_ ) { // Hide again - chatView_->sidebarContainer_->hide(); + sidebar_->hide(); } else { // Show Main tab (contacts) again - chatView_->sidebar_->setCurrentIndex( chatView_->sidebar_->indexOf( contactSidebar_ ) ); + sidebar_->setCurrentIndex( sidebar_->indexOf( getCurrentChat()->getContactSidebar() ) ); } } } @@ -535,78 +386,64 @@ void ChatWindow::emoticonButtonPressed() -// Forward the application command to the ChatMaster -void ChatWindow::forwardAppCommand(QString cookie, QString contact, QString command) +// Filter to catch window activation events +bool ChatWindow::eventFilter( QObject */*obj*/, QEvent *event ) { - emit appCommand(cookie, contact, command); -} - - -// Return a list of the contacts in the chat to be used as window caption -QString ChatWindow::getCaption() -{ - QStringList activeContacts; - - // The chat has no switchboard connection.. it is not even a chat! - if( msnSwitchboardConnection_ == 0 ) + switch( event->type() ) { - // If the last contact is empty, it's probably a test chat window. - if( ! lastContact_.isEmpty() ) - { - activeContacts << lastContact_; - } - } - else - { - // Query the switchboard for the list of participants - activeContacts = msnSwitchboardConnection_->getContactsInChat(); - } - - // How many people are there in here? - switch( activeContacts.count() ) - { - // The chat is empty - case 0: - return i18n("Chat"); + case QEvent::WindowActivate: + // Stop blinking immediately when the window is activated + if( blinkTimer_.isActive() ) + { + blinkTimer_.stop(); + setWindowTitle(); + } break; - // One contact is connected; or the only contact of the session has left - case 1: - return i18n( "%1 - Chat", - currentAccount_->getContactFriendlyNameByHandle( activeContacts[0] ) ); - break; - - // Two contacts are connected - case 2: - return i18n( "%1 and %2 - Chat", - currentAccount_->getContactFriendlyNameByHandle( activeContacts[0] ), - currentAccount_->getContactFriendlyNameByHandle( activeContacts[1] ) - ); - break; - - // Three or more contacts are connected default: - return i18n( "%1 et al. - Chat", - currentAccount_->getContactFriendlyNameByHandle( activeContacts[0] ) - ); break; } - // We can't arrive here. Is there a clean way to avoid the useless compiler warning? - return QString::null; + return false; } -// Return the contact action with the given handle -ContactAction* ChatWindow::getContactActionByHandle(const QString& handle) +/** + * @brief Return a reference to a chat + * + * When called without parameters, this method returns the active chat. + * If the given index is not valid, the current index is returned, too. + * + * @param index Number of the chat to retrieve, or nothing to get the currently active one. + * @return Chat * + */ +Chat *ChatWindow::getChat( int index ) { - foreach( ContactAction *contactAction, contactActions_ ) +#ifdef KMESSTEST + KMESS_ASSERT( tabBar_->count() > 0 ); +#endif + + if( index < 0 || index >= chats_.count() ) { - if ( contactAction->getHandle() == handle ) + return chats_.at( tabBar_->currentIndex() ); + } + + return chats_.at( index ); +} + + + +// Return the chat object for a given switchboard connection, if found. +Chat * ChatWindow::getChatBySwitchboardConnection( const MsnSwitchboardConnection *connection ) const +{ + foreach( Chat *chat, chats_ ) + { + MsnSwitchboardConnection *chatConnection = chat->getSwitchboardConnection(); + if( chatConnection == connection ) { - return contactAction; + return chat; } } @@ -615,81 +452,222 @@ ContactAction* ChatWindow::getContactActionByHandle(const QString& handle) -// Return the list of contacts in the chat -QStringList ChatWindow::getParticipants() +// Return a reference to the active chat +Chat *ChatWindow::getCurrentChat() { - // If all contacts have left the chat, return the last contact as being in chat, - // even if it's not technically true - if( participants_.isEmpty() ) +#ifdef KMESSTEST + KMESS_ASSERT( tabBar_->count() > 0 ); +#endif + + // This really shouldn't happen, but instead of getting a qFatal(), + // let the code crash with a normal null pointer instead. + if( tabBar_->count() == 0 ) { - return QStringList() << lastContact_; + return 0; } - return participants_; + return chats_.at( tabBar_->currentIndex() ); } -// Return the switchboard connection used by the chat window. -MsnSwitchboardConnection * ChatWindow::getSwitchboardConnection() const +// Show the user manual for KMess. +void ChatWindow::helpContents() { - return msnSwitchboardConnection_; + KToolInvocation::invokeHelp("kmess/index"); } -// Initialize the object -bool ChatWindow::initialize( QString handle ) + +// Create the chat menu +void ChatWindow::initChatMenu() { - if ( initialized_ ) + KAction *closeAction, *saveAction; + + // Create the menu and the Invite Contact sub-menu + chatMenu_ = new KMenu( i18n("&Chat"), this ); + + // Create the actions + sendAction_ = new KAction( KIcon("folder-remote"), i18n("Send a &File"), this ); + meetingAction_ = new KAction( KIcon("gnomemeeting"), i18n("Start a &Meeting"), this ); + nudgeAction_ = new KAction( KIcon("preferences-desktop-notification-bell"), i18n("Send a &Nudge!"), this ); + saveAction = new KAction( KIcon("document-save"), i18n("Save chat"), this ); + addEmoticonAction_ = new KAction( KIcon("emoticons"), i18n("&Emoticons"), this ); + closeAction = KStandardAction::close( this, SLOT( queryClose() ), actionCollection_ ); + closeAllAction_ = new KAction( KIcon("dialog-close"), i18n("Close &All Tabs"), this ); + + // Initially the chat has one tab only, so the Close All option is not useful + closeAllAction_->setVisible( false ); + + // Add shorter texts for the toolbar + meetingAction_ ->setIconText( i18n("Meeting") ); + nudgeAction_ ->setIconText( i18n("Nudge") ); + + // Add invite button for the toolbar + inviteButton_ = new KActionMenu( KIcon("list-add-user"), i18n("&Invite"), this ); + inviteButton_->setDelayed( false ); + + // Connect them + connect( sendAction_, SIGNAL( triggered(bool) ), + this, SLOT ( startFileTransfer() ) ); + connect( nudgeAction_, SIGNAL( triggered(bool) ), + this, SLOT ( sendNudge() ) ); + connect( meetingAction_, SIGNAL( triggered(bool) ), + this, SLOT ( startMeeting() ) ); + connect( saveAction, SIGNAL( triggered(bool) ), + this, SLOT ( saveChat() ) ); + connect( addEmoticonAction_, SIGNAL( triggered() ), + this, SLOT ( showEmoticonPanel() ) ); + connect( closeAllAction_, SIGNAL( triggered() ), + this, SLOT ( queryCloseAll() ) ); + +#ifdef HAS_KPHONE // If KPhone is not enabled, don't support voice conversation + KAction *conversation = new KAction( "kphone", i18n("Start or Stop a &Conversation"), this ); + connect( send, SIGNAL(triggered(bool)), this, SLOT( startConversation() ) ); +#endif + + // Plug the items into the Chat menu + // The Invite menu goes before this separator + firstChatMenuItem_ = chatMenu_->addSeparator(); + chatMenu_->addAction( sendAction_ ); + chatMenu_->addAction( meetingAction_ ); +#ifdef HAS_KPHONE // If KPhone is not enabled, don't support voice conversation + chatMenu_->addAction( conversation ); +#endif + chatMenu_->addAction( nudgeAction_ ); + chatMenu_->addSeparator(); + chatMenu_->addAction( saveAction ); + chatMenu_->addAction( closeAction ); + chatMenu_->addAction( closeAllAction_ ); + + // Also plug the icons into the toolbar + // removed 'close', not a frequently used action (and you'll have Alt+F4 and the window close button for that). + toolBar()->addAction( inviteButton_ ); + toolBar()->addAction( sendAction_ ); + toolBar()->addAction( nudgeAction_ ); + toolBar()->addAction( addEmoticonAction_ ); + + // Plug the menu into the menubar + menuBar()-> addMenu( chatMenu_ ); +} + + + +// Create the edit menu +void ChatWindow::initEditMenu() +{ + KAction *changeFont, *changeFontColor; + KAction *copy, *zoomIn, *zoomOut; + KMenu *editMenu; + + // Create the menu + editMenu = new KMenu( i18n("&Edit"), this ); + + // Create the "edit" menus + changeFont = new KAction( KIcon("preferences-desktop-font"), i18n("Change &Font"), this ); + changeFontColor = new KAction( KIcon("format-stroke-color"), i18n("Change Font &Color"), this ); + connect( changeFont, SIGNAL( triggered(bool) ), + this, SLOT( editFont() ) ); + connect( changeFontColor, SIGNAL( triggered(bool) ), + this, SLOT( editFontColor() ) ); + + // Add shorter texts for the toolbar + changeFont ->setIconText( i18n("&Font") ); + changeFontColor->setIconText( i18n("Font &Color") ); + + // More standard actions + cutAction_ = KStandardAction::cut ( this, SLOT( editCut() ), actionCollection_ ); + copy = KStandardAction::copy ( this, SLOT( editCopy() ), actionCollection_ ); + pasteAction_ = KStandardAction::paste ( this, SLOT( editPaste() ), actionCollection_ ); + zoomIn = KStandardAction::zoomIn ( this, SLOT( editZoomIn() ), actionCollection_ ); + zoomOut = KStandardAction::zoomOut( this, SLOT( editZoomOut() ), actionCollection_ ); + + // Plug the items into our new shiny Edit menu + editMenu->addAction( cutAction_ ); + editMenu->addAction( copy ); + editMenu->addAction( pasteAction_ ); + editMenu->addSeparator(); + editMenu->addAction( changeFont ); + editMenu->addAction( changeFontColor ); + editMenu->addSeparator(); + editMenu->addAction( zoomIn ); + editMenu->addAction( zoomOut ); + + // Plug the icons to the toolbar. + // Toolbar is only for fast access to frequently used actions. + // So cut/copy/paste are no longer in the toolbar by default.. It's not an office app you know. + KToolBar *mainToolBar = toolBar(); + mainToolBar->addSeparator(); + + // Plug the menu into the menubar + menuBar()->addMenu( editMenu ); +} + + + +// Create the help menu +void ChatWindow::initHelpMenu() +{ + KAction *aboutKDE, *aboutKMess, *helpContents; + KMenu *helpMenu; + + // Create the menu + helpMenu = new KMenu( i18n("&Help"), this ); + + // Create the help menu. + helpMenu_ = new KHelpMenu( this, KGlobal::mainComponent().aboutData() ); + + // Create the help menu items + aboutKMess = KStandardAction::aboutApp ( this, SLOT( aboutKMess() ), this ); + aboutKDE = KStandardAction::aboutKDE ( this, SLOT( aboutKDE() ), this ); + helpContents = KStandardAction::helpContents( this, SLOT( helpContents() ), actionCollection_ ); + + // Plug the items into the new Help menu + helpMenu->addAction( helpContents ); + helpMenu->addSeparator(); + helpMenu->addAction( aboutKMess ); + helpMenu->addAction( aboutKDE ); + + // Plug the menu into the menubar + menuBar()->addMenu( helpMenu ); +} + + + +// Initialize the user interface +bool ChatWindow::initialize() +{ + if( initialized_ ) { kDebug() << "already initialized."; return false; } - if ( !initializeChatView() ) - { - kDebug() << "Couldn't setup the chat view widget."; - return false; - } - if ( !initializeContactSidebar() ) - { - kDebug() << "Couldn't setup the contacts sidebar widget."; - return false; - } - if ( !initializeEmoticonSidebar() ) - { - kDebug() << "Couldn't setup the emoticon sidebar widget."; - return false; - } - if ( !initializeWebSidebar() ) - { - kDebug() << "Couldn't setup the web sidebar widget."; - return false; - } - if ( !initializeCurrentAccount() ) + if( ! initializeCurrentAccount() ) { kDebug() << "Couldn't setup the current account."; return false; } - // Get the window properties -// KConfigGroup group = KGlobal::config()->group( "" ); -// readProperties( group ); + // Create the emoticon sidebars + standardEmoticonSidebar_ = new EmoticonSidebar( sidebar_, false ); + customEmoticonSidebar_ = new EmoticonSidebar( sidebar_, true ); - // Pre-register this contact as a participant in the chat window. - // At this time we still don't have a switchboard, this is needed to ensure that this window is - // recognized as this contact's window right from the start. - participants_.clear(); - lastContact_ = handle; + sidebar_->addItem( standardEmoticonSidebar_, i18n( "Emoticons" ) ); + sidebar_->addItem( customEmoticonSidebar_, i18n( "My emoticons" ) ); - // Save the date/time the chat started. - // Use it to save a chatlog later. - startDate_ = QDate::currentDate(); - startTime_ = QTime::currentTime(); + // Read the window properties + readProperties(); + checkSidebarPreferences(); - // Update the chat window caption with the contact name - update(); + // HACK: Initially show the window as minimized. + // When tabBar_->addTab() is called (in the addChatTab() method) it will show the window before it's time, + // it will be empty and small, and it disappears a bit later and reappear later when everything is correctly set up. + // If the window is started minimized, it won't flash but will stay quiet in the tray. + // This won't affect its future appearance, since ChatMaster will raise it later. + // Sounds like a bug in Qt4.4. + showMinimized(); initialized_ = true; return true; @@ -697,82 +675,6 @@ bool ChatWindow::initialize( QString handle ) -// Set up the main chat view -bool ChatWindow::initializeChatView() -{ - - // Create the chat view - chatView_ = new ChatView( this ); - - if ( chatView_ == 0 ) - { - kDebug() << "Couldn't create a new chat view."; - return false; - } - - // Initialize it - if ( ! chatView_->initialize() ) - { - kDebug() << "Couldn't initialize the chat view."; - return false; - } - - setCentralWidget( chatView_ ); - - connect( chatView_, SIGNAL( sendFiles(QList) ), - this, SLOT( slotStartFileTransfer(QList) ) ); - connect( chatView_, SIGNAL( appCommand(QString, QString, QString) ), - this, SLOT( forwardAppCommand(QString, QString, QString) ) ); - connect( chatView_, SIGNAL( sendMessageToContact(QString) ), - this, SLOT( userSentMessage() ) ); - - return true; -} - - - -// Set up the contact sidebar -bool ChatWindow::initializeContactSidebar() -{ -#ifdef KMESSTEST - KMESS_ASSERT( contactSidebar_ == 0 ); -#endif - if ( chatView_ == 0 ) - { - kDebug() << "The chatview widget needs to be created before the contact sidebar."; - return false; - } - // Create the sidebar - contactSidebar_ = new ContactSidebar( chatView_->sidebar_ ); - - // Initialize the sidebar - if ( !contactSidebar_->initialize() ) - { - kDebug() << "Couldn't initialize the contact sidebar."; - return false; - } - - chatView_->sidebar_->addItem( contactSidebar_, i18n( "Contacts" ) ); - chatView_->sidebar_->setCurrentIndex( chatView_->sidebar_->indexOf( contactSidebar_ ) ); - - // connect some signals so that the sidebars can send commands back - connect( contactSidebar_, SIGNAL( inviteContact( QString ) ), - this, SLOT( inviteContact( QString ) ) ); - connect( contactSidebar_, SIGNAL( setContactAllowed( QString ) ), - this, SIGNAL( setContactAllowed( QString ) ) ); - connect( contactSidebar_, SIGNAL( setContactAdded( QString, bool ) ), - this, SIGNAL( setContactAdded( QString, bool ) ) ); - connect( contactSidebar_, SIGNAL( setContactBlocked( QString, bool ) ), - this, SIGNAL( setContactBlocked( QString, bool ) ) ); - -#ifdef KMESSTEST - KMESS_ASSERT( contactSidebar_ != 0 ); -#endif - return true; -} - - - // Set up the current account bool ChatWindow::initializeCurrentAccount() { @@ -798,164 +700,128 @@ bool ChatWindow::initializeCurrentAccount() -// Initialize the emoticon chooser -bool ChatWindow::initializeEmoticonSidebar() +// Create the menus. +void ChatWindow::initMenus() { - if( KMESS_NULL(chatView_) ) return false; + // ActionCollection to collect the actions with a shortcut + actionCollection_ = new KActionCollection( this, KComponentData() ); - // Create the emoticon sidebars - standardEmoticonSidebar_ = new EmoticonSidebar( chatView_->sidebar_, false ); - customEmoticonSidebar_ = new EmoticonSidebar( chatView_->sidebar_, true ); + // Initialize the menus with their separate functions + initChatMenu(); + initEditMenu(); + initSettingsMenu(); + initHelpMenu(); - // Connect up the emoticon chooser - connect( standardEmoticonSidebar_, SIGNAL( insertEmoticon( QString ) ), - chatView_, SLOT ( insertEmoticon( QString ) ) ); - connect( customEmoticonSidebar_, SIGNAL( insertEmoticon( QString ) ), - chatView_, SLOT ( insertEmoticon( QString ) ) ); + // Get a fast reference to the main toolbar object + KToolBar *mainToolbar = toolBar(); - chatView_->sidebar_->addItem( standardEmoticonSidebar_, i18n( "Emoticons" ) ); - chatView_->sidebar_->addItem( customEmoticonSidebar_, i18n( "My emoticons" ) ); + // Add the emoticon button + mainToolbar->addAction( addEmoticonAction_ ); + // Plug the sidebar button in after the emoticon button + mainToolbar->addAction( sidebarAction_ ); - return true; + // Add collected actions + addActions( actionCollection_->actions() ); + + setAutoSaveSettings( "ChatWindow", true ); } -// Set up the web sidebar -bool ChatWindow::initializeWebSidebar() +// Create the settings menu +void ChatWindow::initSettingsMenu() { -#ifdef KMESSTEST - KMESS_ASSERT( webSidebar_ == 0 ); -#endif - if ( chatView_ == 0 ) - { - kDebug() << "The chatview widget needs to be created before the web sidebar."; - return false; - } + KMenu *settingsMenu; + KToggleAction *spellCheckAction; - /* - // This sidebar needs to be improved more + // Create the menu + settingsMenu = new KMenu( i18n("&Settings"), this ); + // Create the "settings" menus + spellCheckAction = new KToggleAction( KIcon("tools-check-spelling"), i18n("Use &Spell Checking"), this ); + emoticonAction_ = new KToggleAction( KIcon("services"), i18n("Show &Emoticons"), this ); + sidebarAction_ = new KAction( KIcon("view-sidetree"), i18n("Hide Side&bar"), this ); + showToolBar_ = new KToggleAction( KIcon("view-sidetree"), i18n("Hide &Toolbar"), actionCollection_ ); + showStatusBar_ = KStandardAction::showStatusbar( this, SLOT( showStatusBar() ), this ); + showMenuBar_ = KStandardAction::showMenubar( this, SLOT( showMenuBar() ), actionCollection_ ); - // Create the sidebar - webSidebar_ = new WebSidebar( chatView_->sidebar_, "WebSidebar" ); + // Assign to the sidebar action a keyboard shortcut and a tool tip like the standard actions + sidebarAction_->setShortcut( QKeySequence( "Ctrl+T" ) ); + sidebarAction_->setToolTip( i18n("Hide the contact sidebar") ); // tooltip and title updated by ChatWindow::toggleSidebar() - // Initialize the sidebar - if ( ! webSidebar_->initialize() ) - { - kDebug() << "Couldn't initialize the web sidebar."; - return false; - } + // Connect the do... slots! + connect( emoticonAction_, SIGNAL( toggled(bool) ), + this, SLOT ( toggleEmoticons(bool) ) ); + connect( sidebarAction_, SIGNAL( activated() ), + this, SLOT ( toggleSidebar() ) ); + connect( showToolBar_, SIGNAL( toggled(bool) ), + this, SLOT ( showToolBar() ) ); + connect( spellCheckAction, SIGNAL( toggled(bool) ), + this, SLOT ( toggleSpellCheck(bool) ) ); - chatView_->sidebar_->addItem( webSidebar_, i18n("Activities") ); + // Plug the items into the new Settings menu + settingsMenu->addAction( spellCheckAction ); + settingsMenu->addSeparator(); + settingsMenu->addAction( emoticonAction_ ); + settingsMenu->addAction( showMenuBar_ ); + settingsMenu->addAction( showToolBar_ ); + settingsMenu->addAction( showStatusBar_ ); + settingsMenu->addAction( sidebarAction_ ); - -#ifdef KMESSTEST - KMESS_ASSERT( webSidebar_ != 0 ); -#endif - - */ - return true; + // Plug the menu into the menubar + menuBar()->addMenu( settingsMenu ); } -// Invite a contact to the chat -void ChatWindow::inviteContact( QString handle ) +// Return whether the side bar is enabled +bool ChatWindow::isSidebarVisible() { - if( msnSwitchboardConnection_ == 0 ) - { - return; - } - - msnSwitchboardConnection_->inviteContact( handle ); + return sidebar_->isVisible(); } -// The application is exiting -bool ChatWindow::queryExit() -{ -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kDebug() << "saving chatlog"; -#endif - - // Save the chat before going down! - saveChatAutomatically(); - - // Always accept this one, otherwise the chat window won't close. - // The quit is precented in KMessApplication::slotLastWindowClosed() too. -#ifdef KMESSDEBUG_KMESSINTERFACE - kDebug() << "Accepting exit request."; -#endif - - return true; -} - - - -// The chat window is closing +// A chat tab is closing bool ChatWindow::queryClose() { -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kDebug() << "saving chatlog"; +#ifdef KMESSDEBUG_CHATWINDOW + kDebug() << "Closing current chat tab"; #endif - // Save the chat - saveChatAutomatically(); - - /** - * TODO: Uncomment this part: it needs a _reliable_ method to check whether there are running file - * transfers. The commented part uses "ApplicationList::isEmpty()" which I've removed, the new - * method to check will probably be elsewhere. The main code of that method was this: - * - // check if there are active applications - if ( mimeApplications_.count() + - p2pApplications_.count() - - abortingApplications_.count() == 0) - return true; else return false; - * - */ - /* - // If there are active applications show a warning to the user - if( participants_.count() == 1 ) // Transfers are not possibile in multiple chats + int currentIndex = tabBar_->currentIndex(); + Chat *currentChat = getCurrentChat(); + if( currentChat != 0 ) { - // Check if there are active applications - ContactBase *contact = currentAccount_->getContactByHandle( participants_.first() ); - if( contact != 0 && contact->getApplicationList() != 0 - && ! contact->getApplicationList()->isEmpty() ) + // Save the chat's UI settings before closing it, so the next selected tab will read them + currentChat->saveProperties(); + + currentChat->queryClose(); + + if( ! removeChatTab( currentIndex ) ) { - int choice = KMessageBox::warningContinueCancel( this, i18n("Continue closing the chat window?\nActive transfers will be aborted!")); - if( choice == KMessageBox::Cancel ) - { - return false; - } + kWarning() << "Unable to close the current chat!"; + } + + // If there still are open tabs, don't close + if( chats_.count() > 0 ) + { + // Select the leftmost tab + int newIndex = ( currentIndex == 0 ) ? currentIndex : currentIndex - 1; + tabBar_->setCurrentIndex( newIndex ); + slotSwitchTab( newIndex ); + return false; } } - */ - // Notify ChatMaster - emit closing(this); - - // Delete the contact actions - // Avoid crashing when the switchboard/contact fires a "contactLeftChat" signal. - qDeleteAll( contactActions_ ); - contactActions_.clear(); - - // Delete the contact frames - // Avoid crashing when the switchboard/contact fires a "contactTyping" signal. - // Don't delete this in the destructor, QObject will already do this. - delete contactSidebar_; - contactSidebar_ = 0; + // Kill this window + hide(); + deleteLater(); // If the main window is not visible, make sure only this window closes KMessApplication *kmessApp = static_cast( kapp ); if( ! kmessApp->getContactListWindow()->isVisible() && ! kmessApp->quitSelected() ) { - // Kill this window - hide(); - deleteLater(); - #ifdef KMESSDEBUG_KMESSINTERFACE kDebug() << "Rejecting quit request, only close this window."; #endif @@ -976,55 +842,181 @@ bool ChatWindow::queryClose() -// Return whether or not the contact is in this chat. -bool ChatWindow::isContactInChat( const QString &handle ) +// The chat window is closing +bool ChatWindow::queryCloseAll() { -#ifdef KMESSDEBUG_CHATWINDOW_CONTACTS - kDebug() << "Checking handle " << handle << " - participants: " << participants_.join(",") << " - lastContact: " << lastContact_; -#endif - - if( participants_.isEmpty() ) + if( chats_.count() > 1 ) { -#ifdef KMESSDEBUG_CHATWINDOW_CONTACTS - kDebug() << "returning " << ( lastContact_ == handle ? "true" : "false" ); -#endif - return ( lastContact_ == handle ); + int res = KMessageBox::questionYesNoCancel( this, + i18n( "There are multiple tabs open in this chat window. Do you want to close the " + "current tab only, or all tabs?

" + "Note:You can also close all tabs at once by pressing Shift+Esc." ), + i18nc( "Caption when closing a single chat window tab", "Closing a Chat Tab" ), + KGuiItem( i18n( "Close all tabs" ), "window-close" ), // Yes option + KGuiItem( i18n( "Close current tab" ), "tab-close" ), // No option + KStandardGuiItem::cancel(), + "closeOneChatTabInfo" ); + switch( res ) + { + case KMessageBox::Yes : break; + case KMessageBox::No : return queryClose(); + case KMessageBox::Cancel: + default : return false; + } } -#ifdef KMESSDEBUG_CHATWINDOW_CONTACTS - kDebug() << "returning " << ( participants_.contains( handle ) ? "true" : "false" ); -#endif - return participants_.contains( handle ); + // Just close all tabs one by one, until the last one closes the window too + while( chats_.count() > 0 ) + { + queryClose(); + } + + return true; } -// Return whether or not this is an exclusive chat with the given contact -bool ChatWindow::isExclusiveChatWithContact( const QString& handle ) +// The application is exiting +bool ChatWindow::queryExit() { -#ifdef KMESSDEBUG_CHATWINDOW_CONTACTS - kDebug() << "Checking handle " << handle << " - participants: " << participants_.join(",") << " - lastContact: " << lastContact_; +#ifdef KMESSDEBUG_CHATWINDOW + kDebug() << "Closing all open chats"; #endif - if( participants_.isEmpty() ) + + // Allow performing last operations to all open chats and delete them + foreach( Chat *chat, chats_ ) { -#ifdef KMESSDEBUG_CHATWINDOW_CONTACTS - kDebug() << "returning " << ( lastContact_ == handle ? "true" : "false" ); -#endif - return ( lastContact_ == handle ); + chat->queryExit(); + delete chat; } -#ifdef KMESSDEBUG_CHATWINDOW_CONTACTS - kDebug() << "returning " << ( participants_.contains(handle) && participants_.count() < 2 ? "true" : "false" ); + // Clear the list of chat tabs + chats_.clear(); + + // Force a call to the destructor, to ensure correct cleanup by ChatMaster + deleteLater(); + + // Always accept this one, otherwise the chat window won't close. + // The quit is precented in KMessApplication::slotLastWindowClosed() too. +#ifdef KMESSDEBUG_KMESSINTERFACE + kDebug() << "Accepting exit request."; #endif - return ( participants_.contains(handle) && participants_.count() < 2 ); + + return true; } -// Return whether or not the chat is at its first incoming message -bool ChatWindow::isChatFirstMessage() +// Restore the window properties (called by KMainWindow) +void ChatWindow::readProperties(const KConfigGroup &config ) { - return firstMessage_; + KConfigGroup group; + + // Choose the config group if it was not given + if( &config == 0 ) + { + group = KMessConfig::instance()->getAccountConfig( currentAccount_->getHandle(), "ChatWindow" ); + } + else + { + group = config; + } + + // Read the window position + QPoint pos = group.readEntry( "Position", QPoint() ); + if( ! pos.isNull() ) + { + move( pos ); + } + + // Set the default widget sizes. The sidebar has a default read size of 1 so it'll be + // as small as possible, without becoming invisible + int minSidebarWidth = sidebar_->minimumSize().width(); + sidebarSplitter_->setSizes( group.readEntry( "SidebarSplitterSizes", QList() << minSidebarWidth << 1 ) ); +} + + + +// Delete an existing chat tab +bool ChatWindow::removeChatTab( int index ) +{ +#ifdef KMESSTEST + KMESS_ASSERT( chats_.count() > 0 ); +#endif + + // Find which chat has the given index + Chat *chat = getChat( index ); + + if( chat == 0 ) + { + kWarning() << "Asked to remove index" << index << ", but there are" << chats_.count() << "open tabs!"; + return false; + } +#ifdef KMESSDEBUG_CHATWINDOW + kDebug() << "Removing Chat:" << chat; + kDebug() << "All chats:" << chats_; + kDebug() << "Index of tab:" << index; + kDebug() << "Index in the list:" << chats_.indexOf( chat ); +#endif + + // Remove the tab + tabBar_->removeTab( chats_.indexOf( chat ) ); + + // Remove the chat from the list of open chats + chats_.removeAll( chat ); + + // If there's more than one tab, show the bar and the Close All option + bool moreThanOneTabs = ( chats_.count() > 1 ); + tabBar_->setVisible( moreThanOneTabs ); + closeAllAction_->setVisible( moreThanOneTabs ); + + // Remove the chat's view and contact sidebar from the window's frames + ContactSidebar *contactSideBar = chat->getContactSidebar(); + chatFrame_->layout()->removeWidget( chat ); + contactSidebarFrame_->layout()->removeWidget( contactSideBar ); + delete contactSideBar; + delete chat; + + return true; +} + + + +// Save the chat according to the user's request +void ChatWindow::saveChat() +{ + getCurrentChat()->showSaveChatDialog(); +} + + + +// Save the window properties (called by KMainWindow) +void ChatWindow::saveProperties( KConfigGroup &config ) +{ + KConfigGroup group; + + // Choose the config group if it was not given + if( &config == 0 ) + { + group = KMessConfig::instance()->getAccountConfig( currentAccount_->getHandle(), "ChatWindow" ); + } + else + { + group = config; + } + + // Save the window position + group.writeEntry( "Position", pos() ); + + // Save widgets sizes + group.writeEntry( "SidebarSplitterSizes", sidebarSplitter_->sizes() ); + + // Only save the chats properties when there are some + if( chats_.count() > 0 ) + { + // Save the last active chat's settings + getCurrentChat()->saveProperties( group ) ; + } } @@ -1032,19 +1024,9 @@ bool ChatWindow::isChatFirstMessage() // Enable or disable the parts of the window which allow user interaction void ChatWindow::setEnabled( bool isEnabled ) { - if( ! isEnabled && msnSwitchboardConnection_ != 0 ) - { - setSwitchboardConnection( 0 ); - } - // Set the state of the main UI elements - chatView_->messageEdit_ ->setEnabled( isEnabled ); - chatView_->sendButton_ ->setEnabled( isEnabled ); - chatView_->newLineButton_->setEnabled( isEnabled ); - contactSidebar_ ->setEnabled( isEnabled ); customEmoticonSidebar_ ->setEnabled( isEnabled ); standardEmoticonSidebar_ ->setEnabled( isEnabled ); - inviteMenu_ ->setEnabled( isEnabled ); // Set the state of the extra contact actions meetingAction_ ->setEnabled( isEnabled ); @@ -1059,11 +1041,6 @@ void ChatWindow::setEnabled( bool isEnabled ) // on every connection if( isEnabled ) { - // Recreate the contact actions - qDeleteAll( contactActions_ ); - contactActions_.clear(); - createContactActions(); - // Re-read the current account pointer // because it likely is a different one currentAccount_ = CurrentAccount::instance(); @@ -1072,402 +1049,148 @@ void ChatWindow::setEnabled( bool isEnabled ) -// Change the switchboard connection used by the chat window. -void ChatWindow::setSwitchboardConnection( MsnSwitchboardConnection *newConnection ) +// "Show menu bar" was toggled. +void ChatWindow::showMenuBar() { - if( KMESS_NULL(chatView_ ) ) return; - if( KMESS_NULL(contactSidebar_) ) return; - - QStringList participants; - QStringList::Iterator it; - - // Everything is connected already. -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - if( msnSwitchboardConnection_ == 0 ) + if(!showMenuBar_->isChecked()) { - kDebug() << "Switchboard was not set up."; + menuBar()->hide(); } else { - kDebug() << "Switchboard was " - << ( msnSwitchboardConnection_ == newConnection ? "already set" : "different" ) << "." << endl; - } -#endif - - if( msnSwitchboardConnection_ != 0 ) - { - // Notify that all contacts have left the chat - participants = msnSwitchboardConnection_->getContactsInChat(); - for( it = participants.begin(); it != participants.end(); ++it ) - { - contactSidebar_->contactLeft( *it, false ); - } - - // Delete all signals between us and the old switchboard - disconnect( chatView_, 0, msnSwitchboardConnection_, 0 ); - disconnect( msnSwitchboardConnection_, 0, contactSidebar_, 0 ); - disconnect( msnSwitchboardConnection_, 0, this, 0 ); - - // Also delete the old connection, if we're setting up a new one - if( msnSwitchboardConnection_ != newConnection ) - { - msnSwitchboardConnection_->deleteLater(); - } - } - - msnSwitchboardConnection_ = newConnection; - - if( newConnection == 0 ) - { - connect( chatView_, SIGNAL( sendMessageToContact(QString) ), - this, SLOT ( slotSendingFailed(QString) ) ); - return; - } - else - { - disconnect( chatView_, SIGNAL( sendMessageToContact(QString) ), - this, SLOT ( slotSendingFailed(QString) ) ); - } - - // Make the new signals connections - connect( msnSwitchboardConnection_, SIGNAL( contactJoinedChat(QString, QString) ), - contactSidebar_, SLOT ( contactJoined(QString, QString) ) ); - connect( msnSwitchboardConnection_, SIGNAL( contactLeftChat(QString,bool) ), - contactSidebar_, SLOT ( contactLeft(QString,bool) ) ); - connect( msnSwitchboardConnection_, SIGNAL( contactTyping(QString, QString) ), - contactSidebar_, SLOT ( contactTyping(QString, QString) ) ); - - connect( msnSwitchboardConnection_, SIGNAL( contactJoinedChat(QString, QString) ), - this, SLOT ( contactJoined(QString, QString) ) ); - connect( msnSwitchboardConnection_, SIGNAL( contactLeftChat(QString,bool) ), - this, SLOT ( contactLeft(QString,bool) ) ); - connect( msnSwitchboardConnection_, SIGNAL( contactTyping(QString, QString) ), - this, SLOT ( contactTyping(QString, QString) ) ); - connect( msnSwitchboardConnection_, SIGNAL( chatMessage(const ChatMessage&) ), - this, SLOT ( receivedMessage(const ChatMessage&) ) ); - connect( msnSwitchboardConnection_, SIGNAL( receivedNudge(const QString&) ), - this, SLOT ( slotReceivedNudge(const QString&) ) ); - connect( msnSwitchboardConnection_, SIGNAL( sendingFailed(QString) ), - this, SLOT ( slotSendingFailed(QString) ) ); - connect( msnSwitchboardConnection_, SIGNAL( deleteMe(MsnSwitchboardConnection*) ), - this, SLOT ( setSwitchboardConnection() ) ); - - connect( chatView_, SIGNAL( sendMessageToContact(QString) ), - msnSwitchboardConnection_, SLOT ( sendChatMessage(QString) ) ); - connect( chatView_, SIGNAL( userIsTyping() ), - msnSwitchboardConnection_, SLOT ( sendTypingMessage() ) ); - - - // Add to the sidebar all the contacts that are present in the new switchboard - participants = msnSwitchboardConnection_->getContactsInChat(); - for( it = participants.begin(); it != participants.end(); ++it ) - { - contactSidebar_->contactJoined( *it, QString::null ); + menuBar()->show(); } } -// Restore the window properties (called by KMainWindow) -void ChatWindow::readProperties( const KConfigGroup &config ) +// "Show status bar" was toggled. +void ChatWindow::showStatusBar() { -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kDebug() << "Reading saved properties."; -#endif - - // Choose the chat window group for the current user - KConfigGroup group = config.group( "Profiles" ).group( currentAccount_->getHandle() ).group( "ChatWindow" ); - - // First save the general interface settings - ChatWindowInterface::readProperties( group ); - - // Save the spell checking preference - toggleSpellCheck( group.readEntry( "UseSpellCheck", false ) ); - - // Also read ChatView's settings - chatView_->readProperties( group ); + statusBar()->setVisible( showStatusBar_->isChecked() ); } -// A message was received from a contact. -void ChatWindow::receivedMessage(const ChatMessage &message) +// Show a status message for some seconds in the status dialog +void ChatWindow::showStatusMessage( QString message, int duration ) { -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kDebug() << "Displaying message, internal type=" << message.getType(); - kDebug() << "First message = " << firstMessage_ << "."; + // Avoid newlines which cause problems to the UI layout. + message = message.replace( "\n", " " ); + +#ifdef KMESSDEBUG_CHATWINDOW + kDebug() << "Showing status bar text" << message << "with duration" << duration; #endif - if( KMESS_NULL(chatView_) ) return; + statusLabel_->setText( message ); - // Find if it's the first message of the chat - bool isFirstMessage = chatView_->isEmpty(); - - chatView_->showMessage( message ); - - // If the window doesn't have focus... - if( ! isActiveWindow() ) - { - // Start the caption blinking - startBlink(); - } - - // If this is the first message received... - if( firstMessage_ ) - { - // Change the first message property only when we're actually receiving the second message; - // this way the notification balloons can work correctly. (and maybe future features requiring - // correct detection of the first message!) - if( ! isFirstMessage ) - firstMessage_ = false; - } - - // It's the first message now - if( isFirstMessage ) - { - // Update the sidebar - checkSidebarPreferences(); - - // Check if we should autoreply the chat message - if( currentAccount_ != 0 && - msnSwitchboardConnection_ != 0 && - currentAccount_->getAutoreply() ) - { -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kDebug() << "Sending auto reply to chat message."; -#endif - // Send the autoreply message - QString awayMessage = currentAccount_->getAutoreplyMessage(); - awayMessage += i18n(" (This message was sent automatically)"); - msnSwitchboardConnection_->sendChatMessage( awayMessage ); - - // Show the autoreply message - ChatMessage autoMessage = ChatMessage( ChatMessage::TYPE_OUTGOING, - ChatMessage::CONTENT_MESSAGE, - false, - awayMessage, - currentAccount_->getHandle(), - currentAccount_->getFriendlyName(), - currentAccount_->getImagePath(), - currentAccount_->getFont(), - currentAccount_->getFontColor() ); - chatView_->showMessage( autoMessage ); - } - } - - - // Emit the new message signal so that the user will receive a notification - if( currentAccount_ != 0 && ! isActiveWindow() ) - { - emit newChatMessage( message, this ); - } - - // Notify the sidebar, so the contact frame can update itself - if( ! KMESS_NULL(contactSidebar_) ) // TODO: likely not needed, won't remove it so close before a release. - { - contactSidebar_->messageReceived( message.getContactHandle() ); - } - - // Stop the "user is typing" message - statusLabel_->setText( QString::null ); + // Each message will have an expiration time of its own or none at all statusTimer_.stop(); - // Put back the focus to the message edit box - chatView_->messageEdit_->setFocus(); -} - - - -// Save the chat according to the user's request -void ChatWindow::saveChat() -{ - chatView_->showSaveChatDialog(); -} - - - -// Save the chat if necessary -void ChatWindow::saveChatAutomatically() -{ - QTime currentTime; - QDate currentDate; - QString basePath, year, month, day, hour, minute, time, file, savePath; - QDir dir; - int saveStructure; - - - // Check if "save chats" is enabled - if ( ! currentAccount_->getSaveChats() ) + // Non-expiring messages do not trigger the timer + if( duration <= 0 || message.isEmpty() ) { -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kDebug() << "User has save chats disabled, not saving chat."; -#endif return; } - - // Check if the message area is not empty - if(chatView_->isEmpty() ) - { -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kDebug() << "Message area is empty, not saving chat."; +#ifdef KMESSDEBUG_CHATWINDOW + kDebug() << "Setting status bar update timer to" << duration << "sec."; #endif - return; - } - - // Get the base path - basePath = currentAccount_->getSaveChatPath(); - - dir.setPath( basePath ); - if( ! dir.exists() ) - { - // TODO: Add a message box to notify the chat log folder does not exist (and avoid displaying it when KMess is forced to quit). - kWarning() << "Base directory '" << basePath << "' doesn't exist. Check your settings."; - return; - } - -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kDebug() << "Automatically saving the chat."; -#endif - - // Get date strings with numbers padded. - year .sprintf("%04d", startDate_.year() ); - month .sprintf("%02d", startDate_.month() ); - day .sprintf("%02d", startDate_.day() ); - hour .sprintf("%02d", startTime_.hour() ); - minute .sprintf("%02d", startTime_.minute() ); - time = hour + ":" + minute; - -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kDebug() << "Date is " << year << "/" << month << "/" << day << " " << hour << ":" << minute << "."; -#endif - - // Determine the path to save - saveStructure = currentAccount_->getSavedChatDirectoryStructure(); - - switch(saveStructure) - { - case Account::BYYEAR : - { - // save as chatpath/yyyy/mmdd hh:mm contactemail.html - if(! dir.exists(year)) dir.mkdir(year); - dir.cd(year); - file = "/" + month + "-" + day + " "; - break; - } - case Account::BYMONTH : - { - // save as chatpath/yyyy/mm/dd hh:mm contactemail.html - if(! dir.exists(year)) dir.mkdir(year); - dir.cd(year); - if(! dir.exists(month)) dir.mkdir(month); - dir.cd(month); - file = "/" + day + " "; - break; - } - case Account::BYDAY : - { - // save as chatpath/yyyy/mm/dd/hh:mm contactemail.html - if(! dir.exists(year)) dir.mkdir(year); - dir.cd(year); - if(! dir.exists(month)) dir.mkdir(month); - dir.cd(month); - if(! dir.exists(day)) dir.mkdir(day); - dir.cd(day); - file = "/"; - break; - } - case Account::SINGLEDIRECTORY : - default : - { - // save as chatpath/yyyymmdd hh:mm contactemail.html - file = "/" + year + "-" + month + "-" + day + " "; - } - } - - savePath = dir.absolutePath() + file + time + " "; - if( participants_.isEmpty() ) - { - savePath += lastContact_; - } - else - { - savePath += participants_.first(); - } - - - // Make sure chat logs are not automatically overwritten. - if( QFile::exists( savePath + ".html" ) ) - { - kWarning() << "Chat log " << savePath << ".html already exists!"; - for( int i = 1; i < 100; i++ ) - { - if( ! QFile::exists(savePath + "." + QString::number(i) + ".html") ) - { - savePath += "." + QString::number(i); - break; - } - } - } - - // Save the chat - chatView_->saveChatToFile( savePath + ".html" ); + statusTimer_.start( duration * 1000 ); } -// Save the window properties (called by KMainWindow) -void ChatWindow::saveProperties( KConfigGroup &config ) +// "Show toolbar" was toggled. +void ChatWindow::showToolBar() { -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kDebug() << "Saving properties."; -#endif - - // Choose the chat window group for the current user - KConfigGroup group = config.group( "Profiles" ).group( currentAccount_->getHandle() ).group( "ChatWindow" ); - - // First save the general interface settings - ChatWindowInterface::saveProperties( group ); - - // Save the spell checking preference - group.writeEntry( "UseSpellCheck", chatView_->messageEdit_->checkSpellingEnabled() ); - - // Also save ChatView's settings - chatView_->saveProperties( group ); + toolBar( "mainToolBar" )->setVisible( showToolBar_->isChecked() ); } -// Shake the window, for nudge/buzzer effect. -void ChatWindow::shakeWindow() +// A message has been received +void ChatWindow::slotGotChatMessage( const ChatMessage &message, Chat *chat ) { - QTime t; + // Update the sidebar + checkSidebarPreferences(); + + // If is the user the sender of the chat message, switch to the contacts sidebar + if( ! message.isIncoming() ) + { + // If the emoticon sidebar is still visible, show contact bar again. + if( sidebar_->currentIndex() == sidebar_->indexOf( standardEmoticonSidebar_ ) ) + { + sidebar_->setCurrentIndex( sidebar_->indexOf( getCurrentChat()->getContactSidebar() ) ); + } + + // When the sidebar was only temporary visible, hide it again + if( isSidebarTemporary_ && ! currentAccount_->getShowSidebar() ) + { + sidebar_->hide(); + } + } + + // Show the alert icon + if( chat != getCurrentChat() ) + { + tabBar_->setTabIcon( chats_.indexOf( chat ), KIcon( "mail-mark-important" ) ); + } + + // If the window does not have focus, blink the caption as visual cue of an event + if( isActiveWindow() ) + { + return; + } + + // Start blinking the caption + blinkToUpper_ = true; + slotBlinkCaption(); + blinkTimer_.start( 2000 ); +} + + + +// A nudge has been received: shake the window. +void ChatWindow::slotGotNudge() +{ + if( ! currentAccount_->getShakeNudge() ) + { + return; + } + // avoid shaking again in a short period. if( lastShake_.secsTo( QTime::currentTime() ) < 15 ) { -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kDebug() << "Not shaking the window after " - << lastShake_.secsTo(QTime::currentTime()) << " seconds." << endl; +#ifdef KMESSDEBUG_CHATWINDOW + kDebug() << "Not shaking the window until" + << lastShake_.secsTo( QTime::currentTime() ) << "more seconds."; #endif return; } lastShake_ = QTime::currentTime(); - // Shake the window. - // Code example from: http://ariya.blogspot.com/2005/12/buzz-or-shake-my-window.html + QTime t; int xp = x(); int yp = y(); + t.start(); + + // Code example from: http://ariya.blogspot.com/2005/12/buzz-or-shake-my-window.html + + // Shake the window. for ( int i = 16; i > 0; ) { kapp->processEvents(); + if ( t.elapsed() >= 50 ) { int delta = i >> 2; int dir = i & 3; int dx = (dir == 1 || dir == 2) ? delta : -delta; int dy = (dir < 2) ? delta : -delta; + move( xp+dx, yp+dy ); t.restart(); i--; @@ -1480,265 +1203,232 @@ void ChatWindow::shakeWindow() -// "Show status bar" was toggled. -void ChatWindow::showStatusBar() +// Wheel mouse moved: change the tab. +void ChatWindow::slotWheelMouseMoved( int delta ) { -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kDebug() << "Checking the status bar. showStatusBar_->isChecked() = " << showStatusBar_->isChecked() << "."; -#endif - - // We initialite the chatview later, so ignore the first call from readProperties() - if ( chatView_ == 0 ) return; - - - if( showStatusBar_->isChecked() ) + // If delta < 0 moves right trought tabs + if( delta < 0 ) { - statusBar()->show(); + slotSwitchToRightTab(); } + // If delta > 0 moves left trought tabs else { - statusBar()->hide(); + slotSwitchToLeftTab(); } } -// Show a status message for some seconds in the status dialog -void ChatWindow::showStatusMessage( QString message, int duration ) +// The 'Send nudge' button has been clicked +void ChatWindow::sendNudge() { - // Avoid newlines which cause problems to the UI layout. - message = message.replace( "\n", " " ); + getCurrentChat()->slotSendNudge(); +} - statusLabel_->setText( "" + Qt::escape( message ) + "" ); - if( message.isEmpty() ) + +// Change the active chat +void ChatWindow::setCurrentChat( Chat *chat ) +{ + tabBar_->setCurrentIndex( chats_.indexOf( chat ) ); +} + + + +// Start a file transfer +void ChatWindow::startFileTransfer() +{ + getCurrentChat()->startFileTransfer(); +} + + + +// Switch the window to the clicked tab +void ChatWindow::slotChatInfoChanged() +{ + // Grep the chat has emitted the signal + Chat *chat = static_cast< Chat *>( sender() ); + + // Search it into the list + int index = chats_.indexOf( chat ); + if( index != -1 ) { - statusTimer_.stop(); - } - else - { - statusTimer_.stop(); + // Change the tab caption + tabBar_->setTabText( index, chat->getCaption() ); - if( duration > 0 ) + // If chat is current chat then calls update caption method + if ( chat == getCurrentChat() ) { - statusTimer_.start( duration * 1000 ); + setWindowTitle(); } } } -// Show a wink received by a contact -void ChatWindow::showWink( const QString &handle, const QString &filename, const QString &/*animationName*/ ) +// Switch the window to the clicked tab +void ChatWindow::slotSwitchTab( int tabIndex ) { -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kDebug() << "Processing received wink data."; + // Avoid connecting to non-existent sidebar tabs + if( ! initialized_ ) + { +#ifdef KMESSDEBUG_CHATWINDOW + kDebug() << "Not switching tab while not initialized."; #endif - - // TODO: move the processing of wink files to a special "WinkArchive" class. - - // Test whether the file exists, before cabextract fails. - if( ! QFile::exists(filename) ) - { - kWarning() << "file not found: " << filename << "!"; return; } - // Remove extension - QString dirName = QString(filename).remove( QRegExp("\\.[a-z]+$") ); - - QFile metaFile(dirName + "/content.xml"); - - // See if the file was extracted already - if( ! metaFile.exists() ) + if( tabIndex < 0 || tabIndex >= chats_.count() ) { - // Run cabextract to get the contents of the file - // -q: quiet, only print errors, -d: output dir, -l: force lowercase (avoiding incompatibilities because win32 is case-insensitive) - KProcess cabextract(this); - cabextract.closeReadChannel( QProcess::StandardOutput ); - cabextract.closeReadChannel( QProcess::StandardError ); - cabextract << "cabextract" << "-q" << "-d" << dirName << filename; - bool done = cabextract.execute( 5000 ); - // TODO: capture `cabextract` error messages, display nicely. - - if( done != 0 ) - { - chatView_->showMessage( ChatMessage( ChatMessage::TYPE_SYSTEM, - ChatMessage::CONTENT_SYSTEM_ERROR, - false, - i18n("The wink could not be displayed. Make sure you have 'cabextract' installed."), - handle ) ); - return; - } - if( cabextract.exitStatus() != QProcess::NormalExit || ! metaFile.exists() ) - { - chatView_->showMessage( ChatMessage( ChatMessage::TYPE_SYSTEM, - ChatMessage::CONTENT_SYSTEM_ERROR, - false, - i18n("The wink could not be displayed. The data could not be read."), - handle ) ); - return; - } - } - - // Open the file - if( ! metaFile.open( QIODevice::ReadOnly ) ) - { - kWarning() << "file could not be opened: " << metaFile.fileName() << "!"; + kWarning() << "Chat tab index" << tabIndex << "doesn't exist in the tabs list!"; return; } - // Parse the XML - QString xmlErrorMessage; - QDomDocument xml; - if( ! xml.setContent(&metaFile, true, &xmlErrorMessage) ) + // Don't reactivate already selected chats + // Don't return if current tab and lastActiveChat are 0 beacuse if we close chat 0 + // and lastActiveChat is 0 the chat doesn't refresh! + if( lastActiveChatIndex_ == tabIndex && ( lastActiveChatIndex_ != 0 && tabIndex != 0 ) ) { - kWarning() << "parsing of wink XML failed: " << xmlErrorMessage << "!"; return; } - // Get the package nodes - QDomElement packageNode = xml.namedItem("package").toElement(); - if( packageNode.isNull() ) + Chat *chat = chats_.at( tabIndex ); + ContactSidebar *contactSidebar = chat->getContactSidebar(); + + // Remove the widgets of the various open chats from the chat and contact sidebar frame + Chat *oldChat = getChat( lastActiveChatIndex_ ); + if( oldChat ) { - kWarning() << "XML element /package not found!"; - return; + // Save the chat's UI settings + oldChat->saveProperties(); + + ContactSidebar *oldContactSidebar = oldChat->getContactSidebar(); + + // Disconnect the slots from the previously selected chat + disconnect( oldContactSidebar, 0, this, 0 ); + disconnect( standardEmoticonSidebar_, 0, oldChat, 0 ); + disconnect( customEmoticonSidebar_, 0, oldChat, 0 ); + + oldChat->getInviteMenu()->hide(); + oldContactSidebar->hide(); + oldChat->hide(); } - if( packageNode.attribute("type") != "wink" ) - { - kWarning() << "XML element /package/@type is not 'wink'!"; - return; - } + // Load the old chat's UI settings into this chat + chat->readProperties(); - if( packageNode.attribute("contenttype") != "D" ) - { - kWarning() << "XML element /package/@contenttype is not 'D'!"; - } + // Reset the icon + tabBar_->setTabIcon( tabIndex, KIcon() ); - // Get the child nodes - QString thumbnail; - QString animation; - QString animationType; - QDomNodeList packageItems = packageNode.childNodes(); - for(int i = 0; i < packageItems.count(); i++) - { - QDomElement child = packageItems.item(i).toElement(); - if( child.tagName() == "item" ) - { - QString type = child.attribute("type"); - if( type == "animation" ) - { - animation = child.attribute("file"); - animationType = child.attribute("mimetype"); - } - else if( type == "thumbnail-show" ) - { - thumbnail = child.attribute("file"); - // Type not stored. There are winks with mimetype="image/png" while they're sending a JPG. - } - else - { - kWarning() << "unknown wink element type: '" << type << "'!"; - } - } - } + // Display the new chat + chat->show(); + contactSidebar->show(); - // TODO: clean up weird characters from wink file name. + // connect some signals so that the sidebars can send commands back + connect( standardEmoticonSidebar_, SIGNAL( insertEmoticon(QString) ), + chat, SLOT ( insertEmoticon(QString) ) ); + connect( customEmoticonSidebar_, SIGNAL( insertEmoticon(QString) ), + chat, SLOT ( insertEmoticon(QString) ) ); - if( thumbnail.isEmpty() || animation.isEmpty() || animationType.isEmpty() ) - { - kWarning() << "XML elements are missing, could not play wink!"; - return; - } + // Add the chat's invite menu in the toolbar + inviteButton_->setMenu( chat->getInviteMenu() ); - // Escape data for inclusion in HTML. - animation = Qt::escape(animation).replace("'", "'"); // quotes are not escaped by QStyleSheet::escape(). - animationType = animationType.remove( QRegExp("[^a-zA-Z0-9\\-/]") ); + // Replace the old chat's invite menu with the new one's + chatMenu_->removeAction( currentInviteMenu_ ); + currentInviteMenu_ = chatMenu_->insertMenu( firstChatMenuItem_, chat->getInviteMenu() ); - // Height of 150 is a lot, but most winks are designed to be full-screen, so they can hardly be displayed smaller. - QString html = "
" - "" - "" - "" - "" - "" - "" - "" - "" - "
"; + // If the new chat is an offline one, disable the unavailable features + MsnSwitchboardConnection *connection = chat->getSwitchboardConnection(); + bool enableFeatures = ( connection && ! connection->isInactive() ); + sendAction_ ->setEnabled( enableFeatures ); + nudgeAction_ ->setEnabled( enableFeatures ); + meetingAction_ ->setEnabled( enableFeatures ); + currentInviteMenu_->setEnabled( enableFeatures ); - // Show a notification - QString friendlyName = currentAccount_->getContactFriendlyNameByHandle(handle); - receivedMessage( ChatMessage( ChatMessage::TYPE_NOTIFICATION, - ChatMessage::CONTENT_NOTIFICATION_WINK, - true, - i18n( "You have received a wink from %1", friendlyName ) + html, - handle, - friendlyName ) ); - // TODO: include contact meta data in ChatMessage() constructor to show wink nicer -} + // Save the new chat as last active one + lastActiveChatIndex_ = tabIndex; - -// Start blinking the caption -void ChatWindow::startBlink() -{ - setCaption( caption_.toUpper() ); - blinkToUpper_ = false; - blinkTimer_.start( 2000 ); + // Update the UI with this chat's details + setWindowTitle(); + slotGotTypingMessage( chat ); } -// Start a chat -void ChatWindow::startChat() +// Switch the window to the tab at the left of the current one +void ChatWindow::slotSwitchToLeftTab() { - if( KMESS_NULL(msnSwitchboardConnection_) ) + // Find out at what tab are we and how many are there + int current = tabBar_->currentIndex(); + int count = tabBar_->count(); + + // Do nothing if there's only one tab + if( count <= 1 ) { -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kWarning() << "Tried to open a chat without a switchboard!"; -#endif return; } - if( ! msnSwitchboardConnection_->isInactive() ) + // If the first tab was selected, then restart from the last tab + if( current == 0 ) { -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kDebug() << "Opening a normal chat."; -#endif - // Initialize an online chat - - // Create the contact actions if they haven't already been created - if ( contactActions_.count() == 0 ) - { - createContactActions(); - } - } - else - { -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kDebug() << "Opening an offline chat."; -#endif - // Initialize an offline chat - QString handle = msnSwitchboardConnection_->getLastContact(); + tabBar_->setCurrentIndex( count - 1 ); + return; } - // Add the participant contacts to the chat, even if they're offline - if( ! KMESS_NULL( contactSidebar_ ) ) + tabBar_->setCurrentIndex( current - 1 ); +} + + + +// Switch the window to the tab at the right of the current one +void ChatWindow::slotSwitchToRightTab() +{ + // Find out at what tab are we and how many are there + int current = tabBar_->currentIndex(); + int count = tabBar_->count(); + + // Do nothing if there's only one tab + if( count <= 1 ) { - QStringList participants = msnSwitchboardConnection_->getContactsInChat(); - QStringList::Iterator it = participants.begin(); - for( ; it != participants.end(); ++it ) - { - contactSidebar_->contactJoined( *it, QString::null ); // The sidebar slot doesn't use the second parameter - } + return; } - chatView_->messageEdit_->setFocus(); - checkSidebarPreferences(); + // If the last tab was selected, then restart from the first tab + if( current >= ( count - 1 ) ) + { + tabBar_->setCurrentIndex( 0 ); + return; + } + + tabBar_->setCurrentIndex( current + 1 ); +} + + + +// Switch the window to the clicked tab and remove it +void ChatWindow::slotSwitchAndDeleteTab( int tabIndex ) +{ + tabBar_->setCurrentIndex( tabIndex ); + queryClose(); +} + + + +// The user sent a new message +void ChatWindow::slotUserSentMessage() +{ + // If the emoticon sidebar is still visible, show contact bar again. + if( sidebar_->currentIndex() == sidebar_->indexOf( standardEmoticonSidebar_ ) ) + { + sidebar_->setCurrentIndex( sidebar_->indexOf( getCurrentChat()->getContactSidebar() ) ); + } + + // When the sidebar was only temporary visible, hide it again + if( isSidebarTemporary_ && ! currentAccount_->getShowSidebar() ) + { + sidebar_->hide(); + } } @@ -1746,48 +1436,21 @@ void ChatWindow::startChat() // Start GnomeMeeting with a contact. void ChatWindow::startMeeting() { - // Choose the contact. - QString handle = chooseContact(); - - if( KMESS_NULL(msnSwitchboardConnection_) ) - { -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kWarning() << "Tried to open a meeting with \'" << handle << "\' without a switchboard!"; -#endif - return; - } - - emit requestNetMeeting(handle); + getCurrentChat()->startMeeting(); } -//Start voice conversation +// Start a voice conversation void ChatWindow::startConversation() { - if( KMESS_NULL(msnSwitchboardConnection_) ) - { -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kWarning() << "Tried to open a conversation without a switchboard!"; -#endif - return; - } - - kWarning() << "not implemented!"; - // msnSwitchboardConnection_->startApp( MsnSwitchboardConnection::VOICECONVERSATION ); -} - - - -// Change the status bar message. -void ChatWindow::statusMessage(QString /*message*/) -{ + getCurrentChat()->startConversation(); } // Called when the "use emoticons" action is called. -void ChatWindow::toggleEmoticons(bool useEmoticons) +void ChatWindow::toggleEmoticons( bool useEmoticons ) { // Set the new emoticon use value to the account currentAccount_->setUseEmoticons( useEmoticons ); @@ -1795,36 +1458,18 @@ void ChatWindow::toggleEmoticons(bool useEmoticons) -// Called when the "use spell checking" action is called. -void ChatWindow::toggleSpellCheck( bool useSpellCheck ) -{ - // Don't crash if the chat view isn't available - if( KMESS_NULL(chatView_) ) return; - -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kDebug() << "Spell checking is now " << useSpellCheck; -#endif - - // Change the spell checking feature status - chatView_->messageEdit_->setCheckSpellingEnabled( useSpellCheck ); -} - - - // Called when the "show sidebar" action is called. void ChatWindow::toggleSidebar() { - chatView_->scrollChatToBottom(); - - if( chatView_->sidebarContainer_->isVisible() ) + if( sidebar_->isVisible() ) { - chatView_->sidebarContainer_->hide(); + sidebar_->hide(); sidebarAction_->setText( i18n("Show Side&bar") ); sidebarAction_->setToolTip( i18n("Show the contact sidebar") ); } else { - chatView_->sidebarContainer_->show(); + sidebar_->show(); sidebarAction_->setText( i18n("Hide Side&bar") ); sidebarAction_->setToolTip( i18n("Hide the contact sidebar") ); } @@ -1832,9 +1477,9 @@ void ChatWindow::toggleSidebar() // Toggle the current account's setting. if ( currentAccount_ != 0 ) { - currentAccount_->setShowSidebar( chatView_->sidebarContainer_->isVisible() ); - -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL + currentAccount_->setShowSidebar( sidebar_->isVisible() ); + +#ifdef KMESSDEBUG_CHATWINDOW kDebug() << "Set 'show sidebar' to " << currentAccount_->getShowSidebar() << "."; #endif } @@ -1842,236 +1487,132 @@ void ChatWindow::toggleSidebar() -// Signal that a message could not be sent to the switchboard -void ChatWindow::slotSendingFailed( QString message ) +// Called when the "use spell checking" action is called. +void ChatWindow::toggleSpellCheck( bool useSpellCheck ) { - message = ( message.length() > 16 ) ? ( message.left( 16 ) + "..." ) : message; + // Don't crash if no tabs are available + if( KMESS_NULL(getCurrentChat()) ) return; - // We're assuming the chat is empty or broken, so we won't query the switchboard for the contact handle - chatView_->showMessage( ChatMessage( ChatMessage::TYPE_SYSTEM, - ChatMessage::CONTENT_SYSTEM_ERROR, - false, - i18n("The message '%1' could not be sent.", message ), - lastContact_ ) ); - -} - - - -// Send a file to a contact. -void ChatWindow::slotStartFileTransfer( QList fileList ) -{ -#ifdef KMESSDEBUG_CHATWINDOW_FILETRANSFER - kDebug(); -#endif - if( KMESS_NULL(msnSwitchboardConnection_) ) return; - - // Ask for a contact - QString handle = chooseContact(); - - if( fileList.isEmpty() ) - { -#ifdef KMESSDEBUG_CHATWINDOW_FILETRANSFER - kDebug() << "asking for a file to send"; +#ifdef KMESSDEBUG_CHATWINDOW + kDebug() << "Spell checking is now " << useSpellCheck; #endif - // If no file names were given, ask for a filename - QString filename = KFileDialog::getOpenFileName( KUrl("kfiledialog:///:fileupload" ) ); - - // Stop if no file was selected - if( filename.isEmpty() ) - { - return; - } - - // Ask the ChatMaster to initiate the file transfer. If there are multiple contacts - // in this chat, it needs to create a new chat session for that contact. - emit requestFileTransfer( handle, filename ); - } - else - { - foreach( QUrl file, fileList ) - { -#ifdef KMESSDEBUG_CHATWINDOW_FILETRANSFER - kDebug() << "Sending file " << file; -#endif - emit requestFileTransfer( handle, file.toLocalFile() ); - } - } -} - - - -// Notify the user of a received nudge -void ChatWindow::slotReceivedNudge(const QString &handle) -{ -#ifdef KMESSDEBUG_CHATWINDOW_GENERAL - kDebug() << "Received a nudge."; -#endif - - // Get friendly name - QString friendlyName = currentAccount_->getContactFriendlyNameByHandle(handle); - receivedMessage( ChatMessage( ChatMessage::TYPE_NOTIFICATION, - ChatMessage::CONTENT_NOTIFICATION_NUDGE, - true, - i18n("You received a nudge from %1!", friendlyName), - handle, - friendlyName ) ); - - // Start the buzz effect. - if( currentAccount_->getShakeNudge() ) - { - shakeWindow(); - } -} - - - -// Send a nudge to a contact -void ChatWindow::slotSendNudge() -{ - if( msnSwitchboardConnection_ == 0 ) - { - return; - } - - // Display message - const QStringList &contactsInChat = msnSwitchboardConnection_->getContactsInChat(); - QString message; - if( contactsInChat.count() == 1 && msnSwitchboardConnection_->isConnected() ) - { - message = i18n( "You've sent a nudge to %1!", - currentAccount_->getContactFriendlyNameByHandle( contactsInChat.first() ) - ); - } - else - { - // Chat is either empty (should resume), or a multi-chat - message = i18n( "You've sent a nudge!" ); - } - - chatView_->showMessage( ChatMessage( ChatMessage::TYPE_NOTIFICATION, - ChatMessage::CONTENT_NOTIFICATION_NUDGE, - false, - message, - QString::null ) ); - - // Send nudge - msnSwitchboardConnection_->sendNudge(); - - // Shake the window - if( currentAccount_->getShakeNudge() ) - { - shakeWindow(); - } -} - - - -// An event requires the window to update its properties -void ChatWindow::update() -{ - caption_ = getCaption().replace( "\n", " " ); - setCaption( caption_ ); -} - - - -// Update the messages which contain custom emoticons -void ChatWindow::updateCustomEmoticon( const QString &handle, const QString &code ) -{ - // Relay to chat view. - chatView_->updateCustomEmoticon(handle, code); + // Change the spell checking feature status + getCurrentChat()->getMessageEditField()->setCheckSpellingEnabled( useSpellCheck ); } // Update the contact typing messages in the status bar -void ChatWindow::updateTypingMessage() +void ChatWindow::slotGotTypingMessage( Chat *chat ) { - // Allow a maximum number of seconds between each update. - int nextUpdate = MAXIMUM_TYPING_TIME; - - int secsTo; - QStringList typingContactsList; - - QMutableMapIterator it( typingContacts_ ); - while( it.hasNext() ) + // Get the active chat if called with no or invalid parameters + if( chat == 0 ) { - it.next(); - secsTo = (int) ( it.value().elapsed() * .001 ); // Only keep the seconds + chat = getCurrentChat(); +#ifdef KMESSDEBUG_CHATWINDOW_TYPING_MESSAGES + kDebug() << "Using current chat" << chat; +#endif + } +#ifdef KMESSDEBUG_CHATWINDOW_TYPING_MESSAGES + else + { + kDebug() << "Using chat:" << chat; + } +#endif - // If the typing event has expired, stop displaying it - if( secsTo >= MAXIMUM_TYPING_TIME ) - { - typingContacts_.remove( it.key() ); - } - else - { - // Find the typing event which will expire first, so we can remove that - if( secsTo && secsTo < nextUpdate ) - { - nextUpdate = secsTo; - } + QPalette *palette = new QPalette(); + int tabIndex = chats_.indexOf( chat ); + QStringList typingContacts = chat->getTypingContacts(); - typingContactsList << it.key(); - } +#ifdef KMESSDEBUG_CHATWINDOW_TYPING_MESSAGES + kDebug() << "These contacts are typing:" << typingContacts; +#endif + + // Update the color of this chat's tab + if( typingContacts.isEmpty() ) + { + tabBar_->setTabTextColor( tabIndex, palette->color( QPalette::WindowText ) ); + } + else + { + tabBar_->setTabTextColor( tabIndex, palette->color( QPalette::Highlight ) ); } - // The more time passes from the last update, the more we get close to the next update - if( nextUpdate < 5 ) + // If the typing message was not intended for the currently active tab, skip + // the status bar processing altogether + if( chat != getCurrentChat() ) { - nextUpdate = MAXIMUM_TYPING_TIME - nextUpdate; +#ifdef KMESSDEBUG_CHATWINDOW_TYPING_MESSAGES + kDebug() << "Typing message was not for the active chat, skipping status bar update."; +#endif + return; } // If no one is typing anymore, clean up the status bar - if( typingContacts_.count() == 0 ) + if( typingContacts.isEmpty() ) { - statusLabel_->setText( QString::null ); + showStatusMessage( QString() ); return; } QString statusString; // Decide what string will be used depending on how many contacts are typing - if( typingContacts_.count() == 1 ) + if( typingContacts.count() == 1 ) { - statusString = i18n("%1 is typing.", typingContactsList.first() ); + QString first = Qt::escape( typingContacts.first() ); + statusString = i18n( "%1 is typing.", first ); } else { - QString first = typingContactsList[0], second = typingContactsList[1]; - int count = typingContactsList.count() - 2; + int count = typingContacts.count() - 2; + QString first = Qt::escape( typingContacts[0] ); + QString second = Qt::escape( typingContacts[1] ); - if( typingContacts_.count() == 2 ) + if( count == 0 ) { - statusString = i18n("%1 and %2 are typing.", first, second ); + statusString = i18n( "%1 and %2 are typing.", first, second ); } else { - statusString = i18n("%1, %2 and %3 others are typing.", first, second, count ); + statusString = i18n( "%1, %2 and %3 others are typing.", first, second, count ); } } - // Set the newly built message to the status bar - showStatusMessage( statusString, nextUpdate ); + // Set the message to the status bar without a time limit: the chat itself will send another + // signal when the current message expires. + showStatusMessage( statusString, 0 ); } -// The user sent a new message -void ChatWindow::userSentMessage() +// Change the caption of the chat window +void ChatWindow::setWindowTitle( const QString &caption ) { - // If the emoticon sidebar is still visible, show contact bar again. - if( chatView_->sidebar_->currentIndex() == chatView_->sidebar_->indexOf( standardEmoticonSidebar_ ) ) + // Remember the window caption when it is fetched from the current chat + if( caption.isEmpty() ) { - chatView_->sidebar_->setCurrentIndex( chatView_->sidebar_->indexOf( contactSidebar_ ) ); + Chat *currentChat = getCurrentChat(); + if( currentChat != 0 ) + { + // Avoid newlines which would cause problems to the UI layout + caption_ = currentChat->getCaption().replace( "\n", " " ); + } + else + { + caption_ = QString(); + } } - // When the sidebar was only temporary visible, hide it again - if( temporarySidebar_ && ! currentAccount_->getShowSidebar() ) + // Always append the "Chat" prefix to the chat + if( caption.isEmpty() && caption_.isEmpty() ) { - chatView_->sidebarContainer_->hide(); + setCaption( i18nc( "Chat window caption, without contact name", "Chat" ) ); + } + else + { + setCaption( i18nc( "Chat window caption, with contact name", "%1 - Chat", ( caption.isEmpty() ? caption_ : caption ) ) ); } } diff --git a/src/chat/chatwindow.h b/src/chat/chatwindow.h index 1834fa7..6d56771 100644 --- a/src/chat/chatwindow.h +++ b/src/chat/chatwindow.h @@ -1,8 +1,8 @@ /*************************************************************************** chatwindow.h - description ------------------- - begin : Wed Jan 15 22:41:32 CST 2003 - copyright : (C) 2003 by Mike K. Bennett + begin : Tue Apr 23 2002 + copyright : (C) 2002 by Mike K. Bennett email : mkb137b@hotmail.com ***************************************************************************/ @@ -18,246 +18,243 @@ #ifndef CHATWINDOW_H #define CHATWINDOW_H -#include "chatmaster.h" -#include "chatwindowinterface.h" +#include "ui_chatwindow.h" -#include #include -#include -#include #include -#include +#include +#include +#include +#include -// Forward declarations -class ChatInformation; -class ChatView; +// forward declarations +class Chat; class ChatMessage; -class ContactBase; -class ContactAction; -class ContactSidebar; +class ChatView; class CurrentAccount; class EmoticonSidebar; -class KMessTest; class MsnSwitchboardConnection; -class QDir; + class QLabel; -class WebSidebar; + +class KActionMenu; +class KConfigGroup; +class KHelpMenu; +class KMenu; +class KTabBar; +class KToolBarButton; +class KToolBarPopupAction; -/* ChatWindow is the main window for a chat with one or more contacts */ -class ChatWindow : public ChatWindowInterface +/** + * The interface for the chat window, defining the menus. + * + * @author Mike K. Bennett + * @ingroup Chat + */ +class ChatWindow : public KMainWindow, private Ui::ChatWindow { Q_OBJECT friend class KMessTest; public: - // The construtor - ChatWindow( QWidget* parent=0 ); + // The constructor + ChatWindow(QWidget *parent=0); // The destructor - virtual ~ChatWindow(); - // Filter to catch window activation events - bool eventFilter( QObject *obj, QEvent *event ); - // Return the list of contacts in the chat - QStringList getParticipants(); + virtual ~ChatWindow(); + // Add a new chat tab + Chat *addChatTab( Chat *newChat ); + // Return a reference to a chat + Chat *getChat( int index = -1 ); + // Return a reference to the active chat + Chat *getCurrentChat(); + // Change the active chat + void setCurrentChat( Chat *chat ); // Initialize the object - bool initialize( QString handle ); - // Return the switchboard connection used by the chat window. - MsnSwitchboardConnection * getSwitchboardConnection() const; - // Return whether or not the contact is in this chat. - bool isContactInChat( const QString &handle ); - // Return whether or not this is an exclusive chat with the given contact - bool isExclusiveChatWithContact( const QString& handle ); - // Return whether or not the chat is at its first incoming message - bool isChatFirstMessage(); + bool initialize(); + // Return whether the side bar is enabled + bool isSidebarVisible(); + // Return the chat object for a given switchboard connection, if found. + Chat *getChatBySwitchboardConnection( const MsnSwitchboardConnection *connection ) const; // Enable or disable the parts of the window which allow user interaction - void setEnabled( bool isEnabled ); - // Start a chat - void startChat(); - // Show a status message temporary in the status dialog - void showStatusMessage( QString message, int duration = 5000 ); - // Show a wink received by a contact - void showWink( const QString &handle, const QString &filename, const QString &animationName ); - // Update the messages which contain custom emoticons - void updateCustomEmoticon( const QString &handle, const QString &code ); - - public slots: - // A message was received from a contact. - void receivedMessage(const ChatMessage &message); - // Change the switchboard connection used by the chat window. - void setSwitchboardConnection( MsnSwitchboardConnection *newConnection = 0 ); - // An event requires the window to update its properties - void update(); - - protected: - // Restore the window properties (called by KMainWindow) - virtual void readProperties( const KConfigGroup &config ); - // Save the window properties (called by KMainWindow) - virtual void saveProperties( KConfigGroup &config ); - - protected slots: - // put the marked text/object into the clipboard and remove - // it from the document - void editCut(); - // put the marked text/object into the clipboard - void editCopy(); - // Bring up a dialog to change the message font color. - void editFontColor(); - // Bring up a dialog to change the message font color. - void editFont(); - // paste the clipboard into the document - void editPaste(); - // enlarge the font size - void editZoomIn(); - // decrease the font size - void editZoomOut(); - // "Show status bar" was toggled. - void showStatusBar(); - // Send a nudge - void slotSendNudge(); - // Send a file to a contact. - void slotStartFileTransfer( QList fileList = QList() ); - //Voice conversation - void startConversation(); - // Start GnomeMeeting with a contact. - void startMeeting(); - // Change the status bar message. - void statusMessage(QString message); - // Called when the "use emoticons" action is called. - void toggleEmoticons(bool useEmoticons); - // Called when the "show sidebar" action is called. - void toggleSidebar(); - // Called when the "use spell checking" action is called. - void toggleSpellCheck( bool useSpellCheck ); + void setEnabled( bool isEnabled ); private: // Private methods - // Check if the user enabled an auto-reply, and send it - void checkAutoReply(); // Toggle the sidebar based on account preferences - void checkSidebarPreferences(); - // Choose the contact to start an invitation with. - QString chooseContact(); - // Create the contact actions - void createContactActions(); - // Return the contact action with the given handle - ContactAction* getContactActionByHandle(const QString& handle); - // Set up the main chat view - bool initializeChatView(); - // Set up the contact sidebar - bool initializeContactSidebar(); - // Set up the current account - bool initializeCurrentAccount(); - // Initialize the emoticon chooser - bool initializeEmoticonSidebar(); - // Set up the switchboard connection - bool initializeSwitchboardConnection(); - // Set up the contact sidebar - bool initializeWebSidebar(); + void checkSidebarPreferences(); + // Filter to catch window activation and keyboard shortcut events + bool eventFilter( QObject *obj, QEvent *event ); + // Initialize the connect menu. + void initChatMenu(); + // Initialize the settings menu. + void initEditMenu(); + // Initialize the help menu. + void initHelpMenu(); + // Set up the preferences which depend on the current account + bool initializeCurrentAccount(); + // Create the menus. + void initMenus(); + // Initialize the settings menu. + void initSettingsMenu(); + // Restore the window properties (called by KMainWindow) + void readProperties( const KConfigGroup &config = *((const KConfigGroup *)0) ); + // Delete an existing chat tab + bool removeChatTab( int index ); // The application is exiting - bool queryExit(); - // The chat window is closing - bool queryClose(); - // Save the chat if necessary - void saveChatAutomatically(); - // Shake the window, for nudge/buzzer effect. - void shakeWindow(); - // Start blinking the caption - void startBlink(); + bool queryExit(); + // Save the window properties (called by KMainWindow) + void saveProperties( KConfigGroup &config = *((KConfigGroup *)0) ); + + public slots: + // Show a status message temporary in the status dialog + void showStatusMessage( QString message = QString(), int duration = 5000 ); private slots: // Private slots - // Make the caption blink if the window still doesn't have focus - void blinkCaption(); - // A contact joined the chat - void contactJoined(QString handle, QString friendlyName); - // A contact left the chat - void contactLeft(QString handle, bool isChatIdle); - // A contact is typing - void contactTyping(QString handle, QString friendlyName); - // The emoticon button was pressed. - void emoticonButtonPressed(); - // Forward the application command to the ChatMaster - void forwardAppCommand(QString cookie, QString contact, QString command); - // Return a list of the contacts in the chat to be used as window caption - QString getCaption(); - // Invite a contact to the chat - void inviteContact(QString handle); - // Notify the user of a received nudge - void slotReceivedNudge(const QString &handle); + // Show the "about KDE" message. + void aboutKDE(); + // Show the "about KMess" message. + void aboutKMess(); + // put the marked text/object into the clipboard + void editCopy(); + // put the marked text/object into the clipboard and remove it from the document + void editCut(); + // Bring up a dialog to change the message font color. + void editFont(); + // Bring up a dialog to change the message font color. + void editFontColor(); + // paste the clipboard into the document + void editPaste(); + // enlarge the text size + void editZoomIn(); + // decrease the text size + void editZoomOut(); + // Show the user manual for KMess. + void helpContents(); + // A chat tab is closing + bool queryClose(); + // The chat window is closing + bool queryCloseAll(); // Save the chat according to the user's request - void saveChat(); - // Signal that a message could not be sent to the switchboard - void slotSendingFailed( QString message ); + void saveChat(); + // Change the caption of the chat window + void setWindowTitle( const QString &caption = QString() ); + // The emoticon button was pressed. + void showEmoticonPanel(); + // "Show status bar" was toggled. + void showStatusBar(); + // "Show toolbar" was toggled. + void showToolBar(); + // "Show menu bar" was toggled. + void showMenuBar(); + // Make the caption blink if the window still doesn't have focus + void slotBlinkCaption(); + // A message has been received + void slotGotChatMessage( const ChatMessage &message, Chat *chat ); + // A nudge has been received: shake the window. + void slotGotNudge(); // Update the status label text - void updateTypingMessage(); + void slotGotTypingMessage( Chat *chat = 0 ); + // Wheel mouse moved: change the tab. + void slotWheelMouseMoved( int delta ); + // The 'Send nudge' button has been clicked + void sendNudge(); + // Change the info for tab + void slotChatInfoChanged(); + // Switch the window to the clicked tab + void slotSwitchTab( int tabIndex ); + // Switch the window to the clicked tab and remove it + void slotSwitchAndDeleteTab( int tabIndex ); + // Switch the window to the tab at the left of the current one + void slotSwitchToLeftTab(); + // Switch the window to the tab at the right of the current one + void slotSwitchToRightTab(); // The user sent a new message - void userSentMessage(); + void slotUserSentMessage(); + // Start a voice conversation + void startConversation(); + // Start a file transfer + void startFileTransfer(); + // Start GnomeMeeting with a contact. + void startMeeting(); + // Called when the "use emoticons" action is called. + void toggleEmoticons( bool useEmoticons ); + // Called when the "show sidebar" action is called. + void toggleSidebar(); + // Called when the "use spell checking" action is called. + void toggleSpellCheck( bool useSpellCheck ); - private: // Private attributes + private: // private attributes + // The add emoticon action + KAction *addEmoticonAction_; // A timer used to make the caption blink on new messages. - QTimer blinkTimer_; + QTimer blinkTimer_; // Whether to blink to upper (true) or lower (false) case - bool blinkToUpper_; + bool blinkToUpper_; // The stored window caption - QString caption_; - // The chat view widget - ChatView *chatView_; - // The contact actions in the invite menu - QList contactActions_; - // The contact sidebar, which goes in the qtoolbox widget - ContactSidebar *contactSidebar_; + QString caption_; + // The Chat menu + KMenu *chatMenu_; + // The list of active chat tabs + QList chats_; + // Action to close the window along with all of its tabs + KAction *closeAllAction_; // A pointer to the instance of the current account - CurrentAccount *currentAccount_; + CurrentAccount *currentAccount_; + // The currently shown Invite menu + QAction *currentInviteMenu_; // The custom emoticons sidebar - EmoticonSidebar *customEmoticonSidebar_; - // Whether or not the incoming message is the first incoming message - bool firstMessage_; + EmoticonSidebar *customEmoticonSidebar_; + // Action to cut text to the clipboard + KAction *cutAction_; + // The emoticon sidebar toggling action + KAction *emoticonAction_; + // The first item in the Chat Menu (used to add the Invite menu before it) + QAction *firstChatMenuItem_; + // The help menu launcher + KHelpMenu *helpMenu_; // Whether or not the object was initialized - bool initialized_; - // The last contact that left the chat. - QString lastContact_; - // The last time the window was shaked - QTime lastShake_; - // The object that connects to the switchboard server. - MsnSwitchboardConnection *msnSwitchboardConnection_; - // The list of participants to this chat - QStringList participants_; - // The standard emoticons sidebar - EmoticonSidebar *standardEmoticonSidebar_; - // The date/time the chat started - QDate startDate_; - QTime startTime_; - // The status label - QLabel *statusLabel_; - // A timer to time the duration that a status message is shown - QTimer statusTimer_; + bool initialized_; + // The contact invite action + KActionMenu *inviteButton_; // Whether the sidebar should only be temporary visible - bool temporarySidebar_; - // The list of users which are currently typing - QMap typingContacts_; - // The web sidebar, which goes in the qtoolbox widget - WebSidebar *webSidebar_; - + bool isSidebarTemporary_; + // The index of the chat tab which was activated last + int lastActiveChatIndex_; + // The last time the window was shaked + QTime lastShake_; + // Action to open a meeting + KAction *meetingAction_; + // Action to send a nudge + KAction *nudgeAction_; + // Action to paste the clipboard contents + KAction *pasteAction_; + // Toggle actions for showing and hiding the statusbar + KToggleAction *showStatusBar_; + // Toggle actions for showing and hiding the toolbar + KToggleAction *showToolBar_; + // Toggle actions for showing and hiding the menu bar + KToggleAction *showMenuBar_; + // The sidebar toggle + KAction *sidebarAction_; + // Action to start a file transfer + KAction *sendAction_; + // The standard emoticons sidebar + EmoticonSidebar *standardEmoticonSidebar_; + // The status label + QLabel *statusLabel_; + // A timer to time the duration that a status message is shown + QTimer statusTimer_; + // The bar of chat tabs + KTabBar *tabBar_; + // ActionCollection + KActionCollection *actionCollection_; signals: // Public signals - // Signal that there's an application command - void appCommand(QString cookie, QString contact, QString method); // Signal that the window is about to close. void closing(QObject *object); - // Signal the presence of a new incoming chat message - void newChatMessage( const ChatMessage &message, ChatWindow *chatWindow ); - // Signal that the ChatMaster should start a filetransfer. - void requestFileTransfer(const QString &handle, const QString &filename); - // Signal that the ChatMaster should start a newmeeting session. - void requestNetMeeting(const QString &handle); - // The user wants to add or remove a contact. - void setContactAdded( QString handle, bool isAdded ); - // The user wants to allow a contact to see his/hers online status. - void setContactAllowed( QString handle ); - // The user wants to block or unblock a contact. - void setContactBlocked( QString handle, bool isBlocked ); }; - #endif diff --git a/src/chat/chatwindow.ui b/src/chat/chatwindow.ui new file mode 100644 index 0000000..8a21dba --- /dev/null +++ b/src/chat/chatwindow.ui @@ -0,0 +1,137 @@ + + ChatWindow + + + + 0 + 0 + 392 + 270 + + + + + 2 + + + 0 + + + + + + 0 + 0 + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 0 + + + 0 + + + + + + + + Qt::Horizontal + + + 4 + + + false + + + + + 100 + 0 + + + + + 250 + 250 + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 0 + + + 0 + + + + + + + 0 + 0 + + + + + 130 + 0 + + + + 0 + + + 0 + + + + + 0 + 0 + 120 + 218 + + + + Contacts + + + + 0 + + + 0 + + + + + + + + + + qPixmapFromMimeSource + + + diff --git a/src/chat/chatwindowinterface.cpp b/src/chat/chatwindowinterface.cpp deleted file mode 100644 index b95466c..0000000 --- a/src/chat/chatwindowinterface.cpp +++ /dev/null @@ -1,532 +0,0 @@ -/*************************************************************************** - chatwindowinterface.cpp - description - ------------------- - begin : Tue Apr 23 2002 - copyright : (C) 2002 by Mike K. Bennett - email : mkb137b@hotmail.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 License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#include "chatwindowinterface.h" - -#include "../kmessdebug.h" -#include "config-kmess.h" - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - - -// The constructor -ChatWindowInterface::ChatWindowInterface(QWidget *parent ) - : KMainWindow(parent) -{ - // Create the menus - initMenus(); - // read the window properties, according to the API documentation, the KMainWindow - // destructor is supposed to call this, but it doesnt seem to on my system... - readProperties( KGlobal::config()->group( "ChatWindowInterface" ) ); -} - - - -// The destructor -ChatWindowInterface::~ChatWindowInterface() -{ - // save the window properties, according to the API documentation, the KMainWindow - // destructor is supposed to call this, but it doesnt seem to on my system... - KConfigGroup chatWindowInterfaceConfig = KGlobal::config()->group( "ChatWindowInterface" ); - saveProperties( chatWindowInterfaceConfig ); - kDebug() << "DESTROYED."; -} - - - -// Show the "about KDE" message. -void ChatWindowInterface::aboutKDE() -{ - helpMenu_->aboutKDE(); -} - - - -// Show the "about KMess" message. -void ChatWindowInterface::aboutKMess() -{ - helpMenu_->aboutApplication(); -} - - - -// put the marked text/object into the clipboard and remove -// it from the document -void ChatWindowInterface::editCut() -{ - kDebug() << "not implemented"; -} - - - -// put the marked text/object into the clipboard -void ChatWindowInterface::editCopy() -{ - kDebug() << "not implemented"; -} - - - -// Bring up a dialog to change the message font. -void ChatWindowInterface::editFont() -{ - kDebug() << "not implemented"; -} - - - -// Bring up a dialog to change the message font color. -void ChatWindowInterface::editFontColor() -{ - kDebug() << "not implemented"; -} - - - -// paste the clipboard into the document -void ChatWindowInterface::editPaste() -{ - kDebug() << "not implemented"; -} - - - -// enlarge the text size -void ChatWindowInterface::editZoomIn() -{ - kDebug(); -} - - - -// decrease the text size -void ChatWindowInterface::editZoomOut() -{ - kDebug(); -} - - - -// The emoticon button was pressed. -void ChatWindowInterface::emoticonButtonPressed() -{ - kDebug() << "not implemented"; -} - - - -// close the chat window -void ChatWindowInterface::fileClose() -{ - close(); -} - - - - -// Show the user manual for KMess. -void ChatWindowInterface::helpContents() -{ - KToolInvocation::invokeHelp("kmess/index"); -} - - - - -// Create the chat menu -void ChatWindowInterface::initChatMenu() -{ - KAction *close, *save; - KActionMenu *inviteButton; - KMenu *chatMenu; - - // Create the menu and the Invite Contact sub-menu - chatMenu = new KMenu( i18n("&Chat"), this ); - inviteMenu_ = new KMenu( i18n("&Invite"), this ); - - // Create the actions - sendAction_ = new KAction( KIcon("folder-remote"), i18n("Send a &File"), this ); - meetingAction_ = new KAction( KIcon("gnomemeeting"), i18n("Start a &Meeting"), this ); - nudgeAction_ = new KAction( KIcon("preferences-desktop-notification-bell"), i18n("Send a &Nudge!"), this ); - save = new KAction( KIcon("document-save"), i18n("Save chat"), this ); - addEmoticonAction_ = new KAction( KIcon("emoticons"), i18n("&Emoticons"), this ); - close = KStandardAction::close( this, SLOT( fileClose() ), this ); - - // Add shorter texts for the toolbar - meetingAction_ ->setIconText( i18n("Meeting") ); - nudgeAction_ ->setIconText( i18n("Nudge") ); - - // Add invite button for the toolbar - inviteButton = new KActionMenu( KIcon("list-add-user"), i18n("&Invite"), this ); - inviteButton->setMenu( inviteMenu_ ); - inviteButton->setDelayed( false ); - - // Connect them - connect( sendAction_, SIGNAL( triggered(bool) ), - this, SLOT( slotStartFileTransfer() ) ); - connect( meetingAction_, SIGNAL( triggered(bool) ), - this, SLOT( startMeeting() ) ); - connect( nudgeAction_, SIGNAL( triggered(bool) ), - this, SLOT( slotSendNudge() ) ); - connect( save, SIGNAL( triggered(bool) ), - this, SLOT( saveChat() ) ); - connect( addEmoticonAction_, SIGNAL( triggered() ), - this, SLOT( emoticonButtonPressed() ) ); - -#ifdef HAS_KPHONE // If KPhone is not enabled, don't support voice conversation - KAction *conversation = new KAction( "kphone", i18n("Start or Stop a &Conversation"), this ); - connect( send, SIGNAL(triggered(bool)), this, SLOT( startConversation() ) ); -#endif - - // Plug the items into the Chat menu - chatMenu-> addMenu( inviteMenu_ ); - chatMenu->addSeparator(); - chatMenu->addAction( sendAction_ ); - chatMenu->addAction( meetingAction_ ); -#ifdef HAS_KPHONE // If KPhone is not enabled, don't support voice conversation - chatMenu->addAction( conversation ); -#endif - chatMenu->addAction( nudgeAction_ ); - chatMenu->addSeparator(); - chatMenu->addAction( save ); - chatMenu->addAction( close ); - - // Also plug the icons into the toolbar - // removed 'close', not a frequently used action (and you'll have Alt+F4 and the window close button for that). - toolBar()->addAction( inviteButton ); - toolBar()->addAction( sendAction_ ); - toolBar()->addAction( nudgeAction_ ); - toolBar()->addAction( addEmoticonAction_ ); - - // Plug the menu into the menubar - menuBar()-> addMenu( chatMenu ); -} - - - -// Create the edit menu -void ChatWindowInterface::initEditMenu() -{ - KAction *changeFont, *changeFontColor; - KAction *copy, *zoomIn, *zoomOut; - KMenu *editMenu; - - // Create the menu - editMenu = new KMenu( i18n("&Edit"), this ); - - // Create the "edit" menus - changeFont = new KAction( KIcon("preferences-desktop-font"), i18n("Change &Font"), this ); - changeFontColor = new KAction( KIcon("format-stroke-color"), i18n("Change Font &Color"), this ); - connect( changeFont, SIGNAL( triggered(bool) ), - this, SLOT( editFont() ) ); - connect( changeFontColor, SIGNAL( triggered(bool) ), - this, SLOT( editFontColor() ) ); - - // Add shorter texts for the toolbar - changeFont ->setIconText( i18n("&Font") ); - changeFontColor->setIconText( i18n("Font &Color") ); - - // More standard actions - cutAction_ = KStandardAction::cut ( this, SLOT( editCut() ), this ); - copy = KStandardAction::copy ( this, SLOT( editCopy() ), this ); - pasteAction_ = KStandardAction::paste ( this, SLOT( editPaste() ), this ); - zoomIn = KStandardAction::zoomIn ( this, SLOT( editZoomIn() ), this ); - zoomOut = KStandardAction::zoomOut( this, SLOT( editZoomOut() ), this ); - - // Plug the items into our new shiny Edit menu - editMenu->addAction( cutAction_ ); - editMenu->addAction( copy ); - editMenu->addAction( pasteAction_ ); - editMenu->addSeparator(); - editMenu->addAction( changeFont ); - editMenu->addAction( changeFontColor ); - editMenu->addSeparator(); - editMenu->addAction( zoomIn ); - editMenu->addAction( zoomOut ); - - // Plug the icons to the toolbar. - // Toolbar is only for fast access to frequently used actions. - // So cut/copy/paste are no longer in the toolbar by default.. It's not an office app you know. - KToolBar *mainToolBar = toolBar(); - mainToolBar->addSeparator(); - mainToolBar->addAction( changeFont ); - mainToolBar->addAction( changeFontColor ); - mainToolBar->addSeparator(); - mainToolBar->addAction( zoomIn ); - mainToolBar->addAction( zoomOut ); - mainToolBar->addSeparator(); - - // Plug the menu into the menubar - menuBar()->addMenu( editMenu ); -} - - - -// Create the help menu -void ChatWindowInterface::initHelpMenu() -{ - KAction *aboutKDE, *aboutKMess, *helpContents; - KMenu *helpMenu; - - // Create the menu - helpMenu = new KMenu( i18n("&Help"), this ); - - // Create the help menu. - helpMenu_ = new KHelpMenu( this, KGlobal::mainComponent().aboutData() ); - - // Create the help menu items - aboutKMess = KStandardAction::aboutApp ( this, SLOT( aboutKMess() ), this ); - aboutKDE = KStandardAction::aboutKDE ( this, SLOT( aboutKDE() ), this ); - helpContents = KStandardAction::helpContents( this, SLOT( helpContents() ), this ); - - // Plug the items into the new Help menu - helpMenu->addAction( helpContents ); - helpMenu->addSeparator(); - helpMenu->addAction( aboutKMess ); - helpMenu->addAction( aboutKDE ); - - // Plug the menu into the menubar - menuBar()->addMenu( helpMenu ); -} - - - -// Create the menus. -void ChatWindowInterface::initMenus() -{ - // Initialize the menus with their separate functions - initChatMenu(); - initEditMenu(); - initSettingsMenu(); - initHelpMenu(); - - // Get a fast reference to the main toolbar object - KToolBar *mainToolbar = toolBar(); - - // Add the emoticon button - mainToolbar->addAction( addEmoticonAction_ ); - // Plug the sidebar button in after the emoticon button - mainToolbar->addAction( sidebarAction_ ); -} - - - -// Create the settings menu -void ChatWindowInterface::initSettingsMenu() -{ - KMenu *settingsMenu; - KToggleAction *spellCheckAction; - - // Create the menu - settingsMenu = new KMenu( i18n("&Settings"), this ); - - // Create the "settings" menus - spellCheckAction = new KToggleAction( KIcon("tools-check-spelling"), i18n("Use &Spell Checking"), this ); - emoticonAction_ = new KToggleAction( KIcon("services"), i18n("Show &Emoticons"), this ); - sidebarAction_ = new KAction( KIcon("view-sidetree"), i18n("Hide Side&bar"), this ); - showStatusBar_ = KStandardAction::showStatusbar( this, SLOT( showStatusBar() ), this ); - - // Assign to the sidebar action a keyboard shortcut and a tool tip like the standard actions - sidebarAction_->setShortcut( QKeySequence( "Ctrl+T" ) ); - sidebarAction_->setToolTip( i18n("Hide the contact sidebar") ); // tooltip and title updated by ChatWindow::toggleSidebar() - - // Connect the do... slots! - connect( emoticonAction_, SIGNAL( toggled(bool) ), - this, SLOT ( toggleEmoticons(bool) ) ); - connect( sidebarAction_, SIGNAL( activated() ), - this, SLOT ( toggleSidebar() ) ); - connect( spellCheckAction, SIGNAL( toggled(bool) ), - this, SLOT ( toggleSpellCheck(bool) ) ); - - // Plug the items into the new Settings menu - settingsMenu->addAction( spellCheckAction ); - settingsMenu->addSeparator(); - settingsMenu->addAction( emoticonAction_ ); -// settingsMenu->addAction( showToolBar_ ); - settingsMenu->addAction( showStatusBar_ ); - settingsMenu->addAction( sidebarAction_ ); - - // Plug the menu into the menubar - menuBar()->addMenu( settingsMenu ); -} - - - -// Restore the window properties (called by KMainWindow) -void ChatWindowInterface::readProperties(const KConfigGroup &config ) -{ - - KMainWindow::readProperties( config ); - - // Pull in the window size and position with a default for common screen dimensions - QSize size = config.readEntry( "Size", QSize(550,450) ); - kDebug() << "read chat window size as " << size; - if( size.isValid() ) - { - resize( size ); - } - - QPoint pos = config.readEntry( "Position", QPoint() ); - kDebug() << "read chat window position as " << pos; - if( ! pos.isNull() ) - { - move( pos ); - } - - // bar status settings -// showToolBar_ -> setChecked( config.readEntry( "Show Toolbar", true ) ); - showStatusBar_ -> setChecked( config.readEntry( "Show Statusbar", true ) ); - kDebug() << "read status bar presence as " << showStatusBar_->isChecked(); - -// showToolBar(); - showStatusBar(); - - - // Toolbar settings - toolBar()->applySettings( config ); -} - - - -// Save the chat according to the user's request -void ChatWindowInterface::saveChat() -{ - kDebug() << "not implemented"; -} - - - -// Save the window properties (called by KMainWindow) -void ChatWindowInterface::saveProperties( KConfigGroup &config ) -{ - // Save the window geometry - kDebug() << "Saving window size: " << size(); - config.writeEntry( "Size", size() ); - kDebug() << "Saving window position: " << pos(); - config.writeEntry( "Position", pos() ); -// config.writeEntry( "Show Toolbar", showToolBar_->isChecked() ); - kDebug() << "Saving statusbar presence: " << showStatusBar_->isChecked(); - config.writeEntry( "Show Statusbar", showStatusBar_->isChecked() ); - - // Toolbar settings - toolBar()->saveSettings( config ); - - - KMainWindow::saveProperties( config ); -} - - - -// "Show status bar" was toggled. -void ChatWindowInterface::showStatusBar() -{ - statusBar()->setVisible( showStatusBar_->isChecked() ); -} - - - -// "Show toolbar" was toggled. -void ChatWindowInterface::showToolBar() -{ -// if(!showToolBar_->isChecked()) -// { -// toolBar("mainToolBar")->hide(); -// } -// else -// { -// toolBar("mainToolBar")->show(); -// } -} - - - -// Start GnomeMeeting with a contact. -void ChatWindowInterface::startMeeting() -{ - kDebug() << "not implemented"; -} - - - -void ChatWindowInterface::startConversation() -{ - kDebug() << "not implemented"; -} - - - -void ChatWindowInterface::slotSendNudge() -{ - kDebug() << "not implemented"; -} - - - -// Send a file to a contact. -void ChatWindowInterface::slotStartFileTransfer( QList /*uriList*/ ) -{ - kDebug() << "not implemented"; -} - - -// Change the status bar message. -void ChatWindowInterface::statusMessage(QString /*message*/) -{ - kDebug() << "not implemented"; -} - - - -// Called when the "use emoticons" action is called. -void ChatWindowInterface::toggleEmoticons(bool /*useEmoticons*/) -{ - kDebug() << "not implemented"; -} - - - -// Called when the "show sidebar" action is called. -void ChatWindowInterface::toggleSidebar() -{ - kDebug() << "not implemented"; -} - - - -// Called when the "use spell checking" action is called. -void ChatWindowInterface::toggleSpellCheck( bool /*useSpellCheck*/ ) -{ - kDebug() << "not implemented"; -} - - -#include "chatwindowinterface.moc" diff --git a/src/chat/chatwindowinterface.h b/src/chat/chatwindowinterface.h deleted file mode 100644 index 9b5c7f0..0000000 --- a/src/chat/chatwindowinterface.h +++ /dev/null @@ -1,144 +0,0 @@ -/*************************************************************************** - chatwindowinterface.h - description - ------------------- - begin : Tue Apr 23 2002 - copyright : (C) 2002 by Mike K. Bennett - email : mkb137b@hotmail.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 License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#ifndef CHATWINDOWINTERFACE_H -#define CHATWINDOWINTERFACE_H - -#include -#include - -#include -#include -#include - - -// forward declarations -class KActionMenu; -class KConfigGroup; -class KHelpMenu; -class KMenu; -class KToolBarButton; -class KToolBarPopupAction; - - - -/** - * The interface for the chat window, defining the menus. - * @author Mike K. Bennett - */ -class ChatWindowInterface : public KMainWindow -{ - Q_OBJECT - - public: - // The constructor - ChatWindowInterface(QWidget *parent=0); - // The destructor - virtual ~ChatWindowInterface(); - - protected: // Protected methods - // Restore the window properties (called by KMainWindow) - virtual void readProperties( const KConfigGroup &config ); - // Save the window properties (called by KMainWindow) - virtual void saveProperties( KConfigGroup &config ); - - protected slots: // Protected slots - // put the marked text/object into the clipboard and remove - // it from the document - virtual void editCut(); - // put the marked text/object into the clipboard - virtual void editCopy(); - // Bring up a dialog to change the message font color. - virtual void editFontColor(); - // Bring up a dialog to change the message font color. - virtual void editFont(); - // paste the clipboard into the document - virtual void editPaste(); - // enlarge the text size - virtual void editZoomIn(); - // decrease the text size - virtual void editZoomOut(); - // The emoticon button was pressed. - virtual void emoticonButtonPressed(); - // "Show status bar" was toggled. - virtual void showStatusBar(); - // Start GnomeMeeting with a contact. - virtual void startMeeting(); - // Change the status bar message. - virtual void statusMessage(QString message); - // Called when the "use emoticons" action is called. - virtual void toggleEmoticons(bool useEmoticons); - // Called when the "show sidebar" action is called. - virtual void toggleSidebar(); - // Called when the "use spell checking" action is called. - virtual void toggleSpellCheck(bool useSpellCheck); - // Send a nudge - virtual void slotSendNudge(); - // Send a file to a contact. - virtual void slotStartFileTransfer( QList uriList = QList() ); - // Save the chat according to the user's request - virtual void saveChat(); - //Voice conversation - virtual void startConversation(); - - protected: // Protected attributes - // The list of invitable contacts - KMenu *inviteMenu_; - // The main chat actions - KAction *meetingAction_, *nudgeAction_, *sendAction_; - // Cut and paste options - KAction *cutAction_, *pasteAction_; - // The add emoticon action - KAction *addEmoticonAction_; - // The emoticon sidebar toggling action - KAction *emoticonAction_; - // Toggle actions for showing and hiding the toolbars and statusbars. - KToggleAction *showStatusBar_, *showToolBar_; - // The sidebar toggle - KAction *sidebarAction_; - - - private: // Private methods - // Initialize the connect menu. - void initChatMenu(); - // Initialize the settings menu. - void initEditMenu(); - // Initialize the help menu. - void initHelpMenu(); - // Create the menus. - void initMenus(); - // Initialize the settings menu. - void initSettingsMenu(); - - private slots: // Private slots - // Show the "about KMess" message. - void aboutKMess(); - // Show the "about KDE" message. - void aboutKDE(); - // Close the chat window - void fileClose(); - // Show the user manual for KMess. - void helpContents(); - // "Show toolbar" was toggled. - void showToolBar(); - - private: // private attributes - // The help menu launcher - KHelpMenu *helpMenu_; - -}; -#endif diff --git a/src/chat/contactaction.cpp b/src/chat/contactaction.cpp index 1b40f4b..cefc6f4 100644 --- a/src/chat/contactaction.cpp +++ b/src/chat/contactaction.cpp @@ -18,6 +18,7 @@ #include "contactaction.h" #include "../contact/contact.h" +#include "../currentaccount.h" #include "../kmessdebug.h" #include @@ -30,7 +31,7 @@ ContactAction::ContactAction(const Contact *contact, KMenu *menu, QWidget *paren contact_(contact), inChat_(false), menu_(menu), - plugged_(false) + added_(false) { #ifdef KMESSTEST KMESS_ASSERT( menu_ != 0 ); @@ -99,28 +100,18 @@ void ContactAction::updateText() // Update the visibility of the action based on the contact's status, group, and list void ContactAction::updateVisibility() { - bool shouldBePlugged; + bool shouldBeAdded = ( ! inChat_ && contact_->isOnline() && contact_->isFriend() ); -#ifdef KMESSDEBUG_CONTACTACTION - kDebug() << "Checking visibility for " << contact_->getHandle() << "."; -#endif - - shouldBePlugged = ( ! inChat_ && contact_->isOnline() && contact_->isFriend() ); - -#ifdef KMESSDEBUG_CONTACTACTION - kDebug() << "Should be plugged = " << shouldBePlugged << "."; -#endif - - // Plug the contact in if it should be plugged and it's not - if ( shouldBePlugged && ! plugged_ ) + // Add the contact to the menu if it should be added and it's not + if ( shouldBeAdded && ! added_ ) { menu_->addAction( this ); - plugged_ = true; + added_ = true; } - else if ( ! shouldBePlugged && plugged_ ) - { // Unplug the contact if it's plugged but shouldn't be + else if ( ! shouldBeAdded && added_ ) + { // Pull the contact out of the menu if it's added but shouldn't be menu_->removeAction( this ); - plugged_ = false; + added_ = false; } } diff --git a/src/chat/contactaction.h b/src/chat/contactaction.h index ef243db..aadb210 100644 --- a/src/chat/contactaction.h +++ b/src/chat/contactaction.h @@ -18,8 +18,6 @@ #ifndef CONTACTACTION_H #define CONTACTACTION_H -#include - #include @@ -31,7 +29,9 @@ class KMenu; /** * @brief Menu actions to invite contacts. + * * @author Mike K. Bennett + * @ingroup Chat */ class ContactAction : public KAction { @@ -39,9 +39,9 @@ class ContactAction : public KAction public: // The constructor - ContactAction( const Contact *contact, KMenu *menu, QWidget *parent=0 ); + ContactAction( const Contact *contact, KMenu *menu, QWidget *parent=0 ); // The destructor - ~ContactAction(); + ~ContactAction(); // Return the contact's handle const QString getHandle() const; // Set whether or not the contact is in the chat @@ -63,9 +63,9 @@ class ContactAction : public KAction // Whether or not the contact is in the chat bool inChat_; // The menu into which the action is inserted - KMenu *menu_; - // Whether or not the contact has been plugged into the menu - bool plugged_; + KMenu *menu_; + // Whether or not the contact has been added into the menu + bool added_; signals: // Public signals // Signal the contact's friendly name when the action is selected diff --git a/src/chat/contactframe.cpp b/src/chat/contactframe.cpp index 2fb3582..6ff7fe2 100644 --- a/src/chat/contactframe.cpp +++ b/src/chat/contactframe.cpp @@ -20,32 +20,23 @@ #include "../contact/contact.h" #include "../contact/contactlist.h" #include "../contact/msnstatus.h" +#include "../dialogs/contactpropertiesdialog.h" +#include "../utils/kmessshared.h" +#include "../utils/richtextparser.h" #include "../currentaccount.h" #include "../kmessdebug.h" #include -#include #include -#include -#include #include -#include -#include #include -#include -#include #include #include -#include #include #include -#include #include -#include -#include #include -#include // Time in milliseconds before the glowing done for a typing user fades away @@ -59,6 +50,7 @@ ContactFrame::ContactFrame(QWidget *parent ) , Ui::ContactFrame() , activated_(false) , contact_(0) + , contactPropertiesDialog_(0) , detailedContact_(0) , handle_(QString::null) , currentMode_(ModeNormal) @@ -78,8 +70,10 @@ ContactFrame::ContactFrame(QWidget *parent ) nowListeningPixmapLabel_->setPixmap( KIconLoader::global()->loadIcon("knotify", KIconLoader::NoGroup, KIconLoader::SizeSmall ) ); nowListeningPixmapLabel_->hide(); - handleLabel_ ->installEventFilter( this ); - contactPixmapLabel_->installEventFilter( this ); + contactPixmapLabel_ ->installEventFilter( this ); + statusLabel_ ->installEventFilter( this ); + personalMessageLabel_ ->installEventFilter( this ); + installEventFilter( this ); // Set up and connect the typing timer @@ -122,7 +116,7 @@ void ContactFrame::activate( ContactBase *contact ) } contact_ = contact; - handle_ = contact_->getHandle(); + handle_ = contact_->getHandle(); detailedContact_ = CurrentAccount::instance()->getContactList()->getContactByHandle( handle_ ); // Connect up the contact to update the frame on name, status, and picture changes @@ -132,8 +126,10 @@ void ContactFrame::activate( ContactBase *contact ) this, SLOT ( updateStatusWidgets() ) ); connect( contact_, SIGNAL( changedPicture() ), this, SLOT ( updatePicture() ) ); + connect( contact_, SIGNAL( destroyed(QObject*) ), + this, SLOT ( contactDestroyed(QObject*) ) ); - if( detailedContact_ ) + if( detailedContact_ != 0 ) { connect( detailedContact_, SIGNAL( changedPersonalMessage(Contact*) ), this, SLOT ( updateStatusWidgets() ) ); @@ -150,7 +146,6 @@ void ContactFrame::activate( ContactBase *contact ) // And prepare the widgets updatePicture(); updateStatusWidgets(); - handleLabel_->setText( handle_ ); } @@ -158,7 +153,7 @@ void ContactFrame::activate( ContactBase *contact ) // Allow this contact to see our MSN status void ContactFrame::allowContact() { - if ( detailedContact_ == 0 ) + if( detailedContact_ == 0 ) { return; } @@ -170,10 +165,38 @@ void ContactFrame::allowContact() +// The contact was destroyed +void ContactFrame::contactDestroyed( QObject *object ) +{ + // This method is relevant for invited contacts, the following happens: + // - an InvitedContact leaves the chat, SB notifies + // - ContactFrame::setDisplayMode() will be called, and updates the widgets. + // - CurrentAccount deletes the InvitedContact object. + // - somehow a code paths leads to this class (Chat::setSwitchboardConnection(0) is already patched). + // - crash. + +#ifdef KMESSDEBUG_CONTACTFRAME + if( contact_ != object ) + { + kWarning() << "Received unexpected contact reference to" << object->metaObject()->className(); + } + else + { + kDebug() << "Resetting contact reference."; + } +#endif + + activated_ = false; + contact_ = 0; + detailedContact_ = 0; +} + + + // Copy some details of the contact to the clipboard. // Only one method is used to copy all different details, and that's to avoid having three identical methods which only copy different // text bits on the clipboard. -void ContactFrame::copyText() +void ContactFrame::copyText() { // Get the signal sender to find out who called us KAction *action = static_cast( const_cast( sender() ) ); @@ -187,11 +210,11 @@ void ContactFrame::copyText() { kapp->clipboard()->setText( handle_ ); } - else if( action == popupCopyPersonalMessage_ && detailedContact_ ) + else if( action == popupCopyPersonalMessage_ && detailedContact_ != 0 ) { kapp->clipboard()->setText( detailedContact_->getPersonalMessage() ); } - else if( detailedContact_ ) + else if( detailedContact_ != 0 ) { // Copy the link from PM or Friendly Name kapp->clipboard()->setText( action->toolTip() ); @@ -200,6 +223,23 @@ void ContactFrame::copyText() +void ContactFrame::editNotes() +{ + // Check if there are details for contact + if( detailedContact_ != 0 && detailedContact_->getExtension() != 0 ) + { + // Create the contact properties dialog + if( contactPropertiesDialog_ == 0 ) + { + contactPropertiesDialog_ = new ContactPropertiesDialog( this ); + } + + contactPropertiesDialog_->launch( detailedContact_, true ); + } +} + + + // The personal status message received an event. bool ContactFrame::eventFilter( QObject *obj, QEvent *event ) { @@ -214,10 +254,6 @@ bool ContactFrame::eventFilter( QObject *obj, QEvent *event ) { showContactPopup( mouseEvent->globalPos() ); } - else if( obj == handleLabel_ ) - { - sendEmail(); - } else if( obj == contactPixmapLabel_ ) { showProfile(); @@ -239,7 +275,7 @@ QString ContactFrame::getHandle() const // Initialize the contact popup bool ContactFrame::initContactPopup() { - if ( contact_ == 0 ) + if( contact_ == 0 ) { return false; } @@ -247,6 +283,7 @@ bool ContactFrame::initContactPopup() // Initialize context popup actions popupEmailContact_ = new KAction( KIcon("mail-message-new"), i18n("&Send email"), this ); popupMsnProfile_ = new KAction( KIcon("preferences-desktop-user"), i18n("&View Profile"), this ); + popupEditNotes_ = new KAction( KIcon("user-properties"), i18n("Ed&it Notes"), this ); popupAddContact_ = new KAction( KIcon("list-add"), i18n("&Add Contact"), this ); popupAllowContact_ = new KAction( KIcon("dialog-ok-apply"), i18n("A&llow Contact"), this ); @@ -263,6 +300,7 @@ bool ContactFrame::initContactPopup() // Connect the actions connect( popupEmailContact_, SIGNAL(triggered(bool)), this, SLOT( sendEmail() ) ); connect( popupMsnProfile_, SIGNAL(triggered(bool)), this, SLOT( showProfile() ) ); + connect( popupEditNotes_, SIGNAL(triggered(bool)), this, SLOT( editNotes() ) ); connect( popupAddContact_, SIGNAL(triggered(bool)), this, SLOT( toggleContactAdded() ) ); connect( popupAllowContact_, SIGNAL(triggered(bool)), this, SLOT( allowContact() ) ); @@ -311,20 +349,25 @@ bool ContactFrame::initContactPopup() } // Initialize the popup popup - contactActionPopup_ = new KMenu( contact_->getHandle(), this ); + contactActionPopup_ = new KMenu( handle_, this ); // Attach the actions to the menu + // Order is as consistent as possible with the menu in KMessView + contactActionPopup_->addTitle( contact_->getHandle() ); contactActionPopup_->addAction( popupEmailContact_ ); contactActionPopup_->addAction( popupMsnProfile_ ); contactActionPopup_->addAction( popupCopyMenu_ ); + contactActionPopup_->addAction( popupEditNotes_ ); contactActionPopup_->addSeparator(); + contactActionPopup_->addAction( popupAddContact_ ); contactActionPopup_->addAction( popupAllowContact_ ); - contactActionPopup_->addAction( popupRemoveContact_ ); - contactActionPopup_->addSeparator(); + contactActionPopup_->addAction( popupBlockContact_ ); contactActionPopup_->addAction( popupUnblockContact_ ); + contactActionPopup_->addAction( popupRemoveContact_ ); + return true; } @@ -362,61 +405,43 @@ void ContactFrame::sendEmail() // Change the display mode of the frame when the contact leaves the chat or there are many active contacts void ContactFrame::setDisplayMode( DisplayMode mode ) { + bool isEnabled = ( mode & ModeDisabled ) ? false : true; + // Reset the widgets only if enabling or disabling have been requested if( ( mode & ModeEnabled ) || ( mode & ModeDisabled ) ) { - bool isEnabled = ( mode & ModeDisabled ) ? false : true; - // Enable or disable the frame contents contactPixmapLabel_ ->setEnabled( isEnabled ); + } #ifdef KMESSDEBUG_CONTACTFRAME - kDebug() << "Frame" << this << "- Enabled:" << isEnabled; + kDebug() << "Frame" << this << "- Enabled:" << isEnabled << "- Mode:" << mode; #endif - } // Change the displayed widgets if( ( mode & ModeNormal ) || ( mode & ModeSingle ) ) { - contactPixmapLabel_ ->setVisible( true ); - handleLabel_ ->setVisible( true ); + contactPixmapLabel_ ->setVisible( ( detailedContact_ != 0 ) ); // Hide the picture for invited contacts statusPixmapLabel_ ->setVisible( true ); statusLabel_ ->setVisible( true ); personalMessageLabel_ ->setVisible( true ); nowListeningPixmapLabel_ ->setVisible( true ); -// separator_ ->setVisible( ! ( mode & ModeSingle ) ); // Only show in Normal mode - -#ifdef KMESSDEBUG_CONTACTFRAME - kDebug() << "Frame" << this << "- Changed mode to Normal."; -#endif } else if( mode & ModeSmall ) { contactPixmapLabel_ ->setVisible( false ); - handleLabel_ ->setVisible( true ); statusPixmapLabel_ ->setVisible( true ); statusLabel_ ->setVisible( true ); personalMessageLabel_ ->setVisible( true ); nowListeningPixmapLabel_ ->setVisible( true ); -// separator_ ->setVisible( true ); - -#ifdef KMESSDEBUG_CONTACTFRAME - kDebug() << "Frame" << this << "- Changed mode to Small."; -#endif } else if( mode & ModeTiny ) { contactPixmapLabel_ ->setVisible( false ); - handleLabel_ ->setVisible( false ); statusPixmapLabel_ ->setVisible( true ); statusLabel_ ->setVisible( true ); personalMessageLabel_ ->setVisible( false ); nowListeningPixmapLabel_ ->setVisible( false ); -// separator_ ->setVisible( false ); - -#ifdef KMESSDEBUG_CONTACTFRAME - kDebug() << "Frame" << this << "- Changed mode to Tiny."; -#endif } // Set the current mode internally, so contact property updates don't change the way we display the content @@ -431,32 +456,32 @@ void ContactFrame::setDisplayMode( DisplayMode mode ) // Update and show the contact popup menu void ContactFrame::showContactPopup( const QPoint &point ) { - bool isAdded = false; - bool isAddable = false; - bool isAllowed = true; - bool isBlocked = false; + bool isAdded = false; + bool isAddable = false; + bool isAllowed = true; + bool isBlocked = false; bool isBlockable = false; bool hasPersonalMessage = false; - if( detailedContact_ ) + if( detailedContact_ != 0 ) { - isAddable = true; + isAddable = true; isBlockable = true; - isAdded = detailedContact_->isFriend(); + isAdded = detailedContact_->isFriend(); isAllowed = detailedContact_->isAllowed(); isBlocked = detailedContact_->isBlocked(); hasPersonalMessage = ! detailedContact_->getPersonalMessage().isEmpty(); } - popupAllowContact_ ->setEnabled( ! isAllowed ); - popupCopyPersonalMessage_->setEnabled( hasPersonalMessage ); + popupAllowContact_ ->setVisible( ! isAllowed ); + popupCopyPersonalMessage_->setVisible( hasPersonalMessage ); - popupAddContact_ ->setEnabled( isAddable && ! isAdded ); - popupRemoveContact_ ->setEnabled( isAddable && isAdded ); + popupAddContact_ ->setVisible( isAddable && ! isAdded ); + popupRemoveContact_ ->setVisible( isAddable && isAdded ); - popupBlockContact_ ->setEnabled( isBlockable && ! isBlocked ); - popupUnblockContact_ ->setEnabled( isBlockable && isBlocked ); + popupBlockContact_ ->setVisible( isBlockable && ! isBlocked ); + popupUnblockContact_ ->setVisible( isBlockable && isBlocked ); contactActionPopup_->popup( point ); } @@ -474,8 +499,8 @@ void ContactFrame::showProfile() // Create a URL to the msn profile page, localized with our system's locale. KUrl url = KUrl( "http://members.msn.com/default.msnw?mem=" + handle_ + "&mkt=" + KGlobal::locale()->country() ); - // Launch the default html program for the given URL (and then auto-delete) - new KRun( url, window() ); + // Launch the browser for the given URL + KMessShared::openBrowser( url ); } @@ -503,7 +528,7 @@ void ContactFrame::stopTyping() // Add or remove the contact from the contact list void ContactFrame::toggleContactAdded() { - if ( detailedContact_ == 0 ) + if( detailedContact_ == 0 ) { return; } @@ -518,7 +543,7 @@ void ContactFrame::toggleContactAdded() // Change the contact's blocked/unblocked status void ContactFrame::toggleContactBlocked() { - if ( detailedContact_ == 0 ) + if( detailedContact_ == 0 ) { return; } @@ -594,14 +619,14 @@ void ContactFrame::updateStatusWidgets() Status status; Flags flags = FlagNone; - if ( contact_ == 0 ) + if( contact_ == 0 ) { return; } status = contact_->getStatus(); - if(detailedContact_ && detailedContact_->isBlocked()) + if( detailedContact_ != 0 && detailedContact_->isBlocked()) { // Show blocked regardless of status statusIdentifier = i18n( "Blocked" ); @@ -612,9 +637,20 @@ void ContactFrame::updateStatusWidgets() statusIdentifier = MsnStatus::getName( status ); } - statusLabel_->setText( Qt::escape( contact_->getFriendlyName() ) ); - statusPixmapLabel_->setToolTip( i18n( "The contact is %1", statusIdentifier ) ); - statusPixmapLabel_->setPixmap( MsnStatus::getIcon( status, flags ) ); + bool showFormatting = CurrentAccount::instance()->getUseChatFormatting(); + + if( showFormatting ) + { + statusLabel_->setText( contact_->getFriendlyName( STRING_FORMATTED ) ); + } + else + { + statusLabel_->setText( Qt::escape( contact_->getFriendlyName( STRING_CLEANED ) ) ); + } + + statusLabel_ ->setToolTip( contact_->getFriendlyName() ); + statusPixmapLabel_ ->setToolTip( i18n( "The contact is %1", statusIdentifier ) ); + statusPixmapLabel_ ->setPixmap( MsnStatus::getIcon( status, flags ) ); // Update the detailed info widgets, if available, and if we're not in Tiny display mode, which means that no // personal message/song is displayed at all @@ -623,6 +659,9 @@ void ContactFrame::updateStatusWidgets() #ifdef KMESSDEBUG_CONTACTFRAME kDebug() << "Not updating widgets. Mode:" << currentMode_ << " Detailed info:" << detailedContact_; #endif + + personalMessageLabel_ ->hide(); + nowListeningPixmapLabel_->hide(); return; } @@ -633,7 +672,14 @@ void ContactFrame::updateStatusWidgets() if( label.isEmpty() ) { nowListeningPixmapLabel_->hide(); - label = Qt::escape( detailedContact_->getPersonalMessage() ); + if( showFormatting ) + { + label = detailedContact_->getPersonalMessage( STRING_FORMATTED ); + } + else + { + label = Qt::escape( detailedContact_->getPersonalMessage( STRING_CLEANED ) ); + } } else { @@ -646,6 +692,7 @@ void ContactFrame::updateStatusWidgets() personalMessageLabel_->show(); personalMessageLabel_->setText( label ); + personalMessageLabel_->setToolTip( label ); } else { diff --git a/src/chat/contactframe.h b/src/chat/contactframe.h index 8974a16..4951ccc 100644 --- a/src/chat/contactframe.h +++ b/src/chat/contactframe.h @@ -21,14 +21,13 @@ #include "ui_contactframe.h" #include -#include #include -#include // Forward declarations class Contact; class ContactBase; +class ContactPropertiesDialog; class CurrentAccount; class KAction; class KActionMenu; @@ -38,9 +37,11 @@ class KMenu; /** * The frame displaying contact information. + * * @author Mike K. Bennett + * @ingroup Chat */ -class ContactFrame : public QWidget, public Ui::ContactFrame +class ContactFrame : public QWidget, private Ui::ContactFrame { Q_OBJECT @@ -87,8 +88,12 @@ class ContactFrame : public QWidget, public Ui::ContactFrame private slots: // Private slots // Allow this contact to see our MSN status void allowContact(); + // The contact was destroyed + void contactDestroyed( QObject *object ); // Copy some details of the contact to the clipboard void copyText(); + // Edit notes + void editNotes(); // Email the contact void sendEmail(); // Update and show the contact popup menu @@ -112,13 +117,15 @@ class ContactFrame : public QWidget, public Ui::ContactFrame // The contact whom the frame represents ContactBase *contact_; // The menu of actions possible to perform on a given contact - KMenu *contactActionPopup_; + KMenu *contactActionPopup_; // The contact's image QPixmap contactPicture_; // The contact picture date QDateTime contactPictureDate_; // The contact picture file QString contactPicturePath_; + // Contact properties dialog + ContactPropertiesDialog *contactPropertiesDialog_; // The contact's image visible while the contact is typing QPixmap contactTypingPicture_; // The detailed contact information, if available @@ -143,6 +150,8 @@ class ContactFrame : public QWidget, public Ui::ContactFrame KAction *popupCopyHandle_; // Contact popup KAction to copy links from pm and friendly name KAction *popupCopyLink_; + // Contact popup KAction to edit notes + KAction *popupEditNotes_; // Contact popup KAction to send an email to the contact KAction *popupEmailContact_; // Contact popup KAction to show the contact's profile diff --git a/src/chat/contactframe.ui b/src/chat/contactframe.ui index 9dc05a0..0a5fc35 100644 --- a/src/chat/contactframe.ui +++ b/src/chat/contactframe.ui @@ -5,8 +5,8 @@ 0 0 - 357 - 308 + 114 + 132 @@ -22,6 +22,9 @@ + + 0 + @@ -66,6 +69,9 @@ + + Qt::RichText + @@ -111,6 +117,9 @@ + + Qt::RichText +
@@ -137,6 +146,12 @@ 48 + + + 96 + 96 + + PointingHandCursor @@ -175,48 +190,18 @@ - - - - - 0 - 0 - - - - - 96 - 0 - - - - - true - - - - PointingHandCursor - - - Click to send an email to this contact. - - - false - - - Qt::Vertical - QSizePolicy::Expanding + QSizePolicy::Fixed - 10 - 10 + 20 + 20 diff --git a/src/chat/contactsidebar.cpp b/src/chat/contactsidebar.cpp index 85c3fcb..f3a8fa1 100644 --- a/src/chat/contactsidebar.cpp +++ b/src/chat/contactsidebar.cpp @@ -21,13 +21,6 @@ #include "../currentaccount.h" #include "../kmessdebug.h" -#include -#include -#include -#include -#include -#include - // The constructor @@ -44,7 +37,7 @@ ContactSidebar::ContactSidebar( QWidget *parent ) setAcceptDrops( true ); // Add some more space at the bottom - viewBox_->addSpacing( 20 ); + viewBox_->addStretch(); } @@ -125,6 +118,7 @@ kDebug()<< handle; if( contactFrames_.count() > 1 ) { contactFrames_.removeAll( contactFrame ); + delete contactFrame; return; } diff --git a/src/chat/contactsidebar.h b/src/chat/contactsidebar.h index 934d79d..e5b6c68 100644 --- a/src/chat/contactsidebar.h +++ b/src/chat/contactsidebar.h @@ -21,7 +21,6 @@ #include "contactframe.h" #include -#include // Forward declarations @@ -33,7 +32,9 @@ class QVBoxLayout; /** * The sidebar in a chat that contains the little contact information frames. + * * @author Mike K. Bennett + * @ingroup Chat */ class ContactSidebar : public QWidget { @@ -60,8 +61,6 @@ class ContactSidebar : public QWidget void contactTyping(QString handle, QString friendlyName); signals: - // invite a contact to a chat (result of a drag and drop operation) - void inviteContact( QString handle ); // The user wants to add or remove a contact. void setContactAdded( QString handle, bool isAdded ); // The user wants to allow a contact to see hi/hers online status. diff --git a/src/chat/emoticonbutton.cpp b/src/chat/emoticonbutton.cpp deleted file mode 100644 index ac46d00..0000000 --- a/src/chat/emoticonbutton.cpp +++ /dev/null @@ -1,101 +0,0 @@ -/*************************************************************************** - emoticonbutton.cpp - description - ------------------- - begin : Mon May 6 2002 - copyright : (C) 2002 by Mike K. Bennett - email : mkb137b@hotmail.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 License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#include "emoticonbutton.h" - -#include "../emoticon.h" -#include "../kmessdebug.h" - -#include -#include -#include -#include -#include -#include -#include - - - -EmoticonButton::EmoticonButton( const Emoticon *emoticon, QWidget *parent ) - : QToolButton( parent ), - emoticon_(emoticon) -{ - QString emoticonFile = emoticon_->getPicturePath(); - - // Set the pixmap - setIcon( QIcon( emoticonFile ) ); - setFixedSize( EMOTICON_BUTTON_SIZE, EMOTICON_BUTTON_SIZE ); - - // Set other properties. - setAutoRaise(true); // flat, only show border on mouse over - setToolButtonStyle( Qt::ToolButtonIconOnly ); - - // Connect the button's own clicked signal to the clicked slot - connect( this, SIGNAL( clicked() ), - this, SLOT ( slotClicked() ) ); - // Connect to the emoticon to receive updates. - connect( emoticon, SIGNAL( changed() ), - this, SLOT ( slotPixmapChanged() ) ); -} - - - -EmoticonButton::~EmoticonButton() -{ -} - - - -// The button was clicked. -void EmoticonButton::slotClicked() -{ - emit insertEmoticon( emoticon_->getShortcut() ); -} - - - -void EmoticonButton::enterEvent( QEvent */*event*/ ) -{ - // Do not reassign the tooltip if it's there already - if( ! toolTip().isEmpty() ) - { - return; - } - - // Escape all html characters to ensure correct visualization by Qt's rich text engine - QString tooltip( emoticon_->getTooltip() ); - Emoticon::htmlEscape( tooltip ); - - // Add the emoticon tooltip only when mouse is over the emoticon - setToolTip( QString( emoticon_->getHtml(false) + " " + tooltip ) ); -} - - - -// The pixmap changed -void EmoticonButton::slotPixmapChanged() -{ -#ifdef KMESSDEBUG_EMOTICONSIDEBAR - kDebug() << "Emoticon has changed!"; -#endif - - setIcon( QIcon( emoticon_->getPicturePath() ) ); -} - - - -#include "emoticonbutton.moc" diff --git a/src/chat/emoticonbutton.h b/src/chat/emoticonbutton.h deleted file mode 100644 index e43f7a2..0000000 --- a/src/chat/emoticonbutton.h +++ /dev/null @@ -1,69 +0,0 @@ -/*************************************************************************** - emoticonbutton.h - description - ------------------- - begin : Mon May 6 2002 - copyright : (C) 2002 by Mike K. Bennett - email : mkb137b@hotmail.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 License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#ifndef EMOTICONBUTTON_H -#define EMOTICONBUTTON_H - -#include -#include - - -// forward declarations -class Emoticon; - - -/** - * Emoticon buttons size - * - * Force all the buttons to be 32x32 pixels sized. This define's value should be equal to the one in - * the EmoticonButton class. - */ -#define EMOTICON_BUTTON_SIZE 32 - - - -/** - * A button displaying an emoticon for easy insertion into a message. - * Also stores emoticon data for parsing. - * @author Mike K. Bennett - */ -class EmoticonButton : public QToolButton -{ - Q_OBJECT - - public: - EmoticonButton( const Emoticon *emoticon, QWidget *parent ); - ~EmoticonButton(); - - private slots: // Private slots - // The button was clicked. - void slotClicked(); - // The pixmap changed - void slotPixmapChanged(); - - private: // Private attributes - // The emoticon represented by this button. - const Emoticon *emoticon_; - // To receive mouse move events - void enterEvent( QEvent *event ); - - signals: // Signals - // Request that the emoticon's html code be inserted in the message. - void insertEmoticon(QString html); -}; - -#endif diff --git a/src/chat/emoticonsidebar.cpp b/src/chat/emoticonsidebar.cpp index 5e77561..21ace4e 100644 --- a/src/chat/emoticonsidebar.cpp +++ b/src/chat/emoticonsidebar.cpp @@ -20,20 +20,24 @@ #include "../emoticonmanager.h" #include "../emoticontheme.h" #include "../kmessdebug.h" -#include "emoticonbutton.h" +#include "../dialogs/addemoticondialog.h" +#include "../accountsmanager.h" +#include "../currentaccount.h" -#include -#include -#include -#include +#include +#include +#include +#include +#include // The constructor EmoticonSidebar::EmoticonSidebar( QWidget *parent, bool useCustomTheme ) : QWidget(parent) - , columns_(-1) + , emoticonDialog_(0) , isCustom_(useCustomTheme) + , list_(0) { // Get and connect to the emoticon manager. We'll need to update the sidebar when the emoticon // theme changes @@ -41,16 +45,32 @@ EmoticonSidebar::EmoticonSidebar( QWidget *parent, bool useCustomTheme ) connect( manager_, SIGNAL( updated() ), this, SLOT ( slotThemeUpdated() ) ); + // Create and set the properties for list widget + list_ = new EmoticonListWidget( this ); + + // Connect to click of each button + connect( list_ , SIGNAL( leftClicked ( const QListWidgetItem* ) ), + this, SLOT ( slotItemClicked( const QListWidgetItem* ) ) ); + + // Enable the right-click context menu + connect( list_, SIGNAL( rightClicked (const QListWidgetItem*,const QPoint& ) ), + this, SLOT ( showContextMenu(const QListWidgetItem*,const QPoint& ) ) ); + + // Create and set the properties for the warning message + noEmoticonsWarning_ = new QLabel( this ); + noEmoticonsWarning_->setScaledContents( true ); + noEmoticonsWarning_->setWordWrap( true ); + noEmoticonsWarning_->setText( i18nc( "Informative label on the chat's Sidebar", + "

You haven't added any custom emoticons yet.

" + "

To add new emoticons, click here!

" ) ); + // Enable the link click action + connect( noEmoticonsWarning_, SIGNAL( linkActivated(const QString&) ), + this, SLOT ( slotNoEmoticonsLinkClicked(const QString&) ) ); + // Create the layout - layout_ = new QGridLayout( this ); - - // Set some attributes to it, to make it display correctly - layout_->setMargin( 0 ); - layout_->setSpacing( 0 ); - layout_->setAlignment( Qt::AlignLeft | Qt::AlignTop ); - - // Choose a size policy suitable for fully dinamic resizing of our contents - setSizePolicy( QSizePolicy::Ignored, QSizePolicy::Expanding ); + layout_ = new QVBoxLayout( this ); + layout_->addWidget( noEmoticonsWarning_ ); + layout_->addWidget( list_ ); // Force adding the theme's emoticons slotThemeUpdated(); @@ -58,97 +78,75 @@ EmoticonSidebar::EmoticonSidebar( QWidget *parent, bool useCustomTheme ) +// Constructor for emoticon list widget class +EmoticonListWidget::EmoticonListWidget( QWidget *parent ) + : QListWidget(parent) +{ + // Set the list properties + setViewMode( QListView::IconMode ); + setResizeMode( QListView::Adjust ); + setIconSize( QSize( 16,16 ) ); + setMovement( QListView::Static ); + setSelectionMode( QAbstractItemView::SingleSelection ); + setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); + setFrameShape(QFrame::NoFrame ); + setStyleSheet( "QListWidget { background-color: transparent; }" ); +} + + + +// Reimplement the mouse press event to grep left and right click +void EmoticonListWidget::mousePressEvent( QMouseEvent *e ) +{ + QListWidget::mousePressEvent( e ); + QListWidgetItem *item = itemAt( e->pos() ); + if( item == 0 ) + { + return; + } + if( e->button() == Qt::LeftButton ) + { + emit leftClicked( item ); + } + else if( e->button() == Qt::RightButton ) + { + emit rightClicked( item, e->pos() ); + } +} + + + // The destructor EmoticonSidebar::~EmoticonSidebar() { + delete emoticonDialog_; + delete list_; delete layout_; } -// Create an emoticon button on the grid -void EmoticonSidebar::createEmoticonButton(const Emoticon *emoticon) +// One item was clicked +void EmoticonSidebar::slotItemClicked( const QListWidgetItem * item ) { - EmoticonButton *button; + // Deselect current item so it has the click effect + list_->setCurrentItem( 0 ); - // Create the button - // Use a separate EmoticonButton, so we can also include the - // emoticon code in the button signal. - button = new EmoticonButton( emoticon, this ); - - // Connect the button's insertEmoticon signal - connect( button, SIGNAL( insertEmoticon(QString) ) , - this, SLOT ( slotInsertEmoticon(QString) ) ); + emit insertEmoticon( item->data( Qt::UserRole ).toString() ); } -// Overwritten method to detect resizes -void EmoticonSidebar::resizeEvent(QResizeEvent *event) +// The "Click to open the custom emoticons settings" link has been clicked +void EmoticonSidebar::slotNoEmoticonsLinkClicked( const QString &url ) { -#ifdef KMESSDEBUG_EMOTICONSIDEBAR - kDebug() << "Resizing from " << event->oldSize() << " to " << size(); -#endif + Q_UNUSED( url ); - // Call the parent - QWidget::resizeEvent( event ); - - // Update the layout with the new size - updateEmoticonLayout(); + AccountsManager::instance()->showAccountSettings( CurrentAccount::instance(), window(), AccountSettingsDialog::PageEmoticonsTabCustom ); } -// Layout the emoticon buttons -void EmoticonSidebar::updateEmoticonLayout() -{ - // Select the child buttons - QList childWidgets = findChildren(); - - // The list is null if there aren't any children. - if( childWidgets.count() == 0 ) - { - return; - } - - // Calculate the number of button columns that will fit in the new sidebar size - int availableColumns = ( width() / EMOTICON_BUTTON_SIZE ) - 1; - - -#ifdef KMESSDEBUG_EMOTICONSIDEBAR - kDebug() << "Changing grid " << size() << " to " << availableColumns << " columns, totally " << childWidgets.count() << (isCustom_?"custom":"standard") << " emoticons."; -#endif - - // Transfer all buttons from the old and now misshaped grid to the new one - int col = 0, row = 0; - foreach( EmoticonButton *button, childWidgets ) - { - layout_->removeWidget( button ); - layout_->addWidget( button, row, col++ ); - - if( col > availableColumns ) - { - col = 0; - row++; - } - } - - // Save the current number of columns for the next update - columns_ = availableColumns; - - // Tell the frame we've changed shape - updateGeometry(); -} - - - -// A button was clicked -void EmoticonSidebar::slotInsertEmoticon(QString html) -{ - emit insertEmoticon(html); -} - - // The theme has changed, we need to reload it void EmoticonSidebar::slotThemeUpdated() { @@ -156,14 +154,8 @@ void EmoticonSidebar::slotThemeUpdated() kDebug() << "Removing old theme from the sidebar."; #endif - // Select the child buttons - QList childWidgets = findChildren(); - - // If there are children, delete them all. - if( childWidgets.count() != 0 ) - { - qDeleteAll( childWidgets ); - } + // Clear list + list_->clear(); #ifdef KMESSDEBUG_EMOTICONSIDEBAR kDebug() << "Updating sidebar with current emoticons."; @@ -172,22 +164,98 @@ void EmoticonSidebar::slotThemeUpdated() // Add all theme emoticons to the list EmoticonTheme *theme = manager_->getTheme( isCustom_ ); const QList &emoticons = theme->getEmoticons(); + + list_ ->setVisible( ! emoticons.isEmpty() ); + noEmoticonsWarning_->setVisible( emoticons.isEmpty() && isCustom_ ); + foreach( Emoticon *emoticon, emoticons ) { - if( emoticon->isValid() ) + if( ! emoticon->isValid() ) { - createEmoticonButton( emoticon ); + continue; } + + QListWidgetItem *item = new QListWidgetItem( QIcon( emoticon->getPicturePath() ), "", list_ ); + + // Set the shortcut into data of current item widget + item->setData( ShortcutRole, emoticon->getShortcut() ); + item->setData( PictureRole, emoticon->getPicturePath() ); + + // Add the emoticon tooltip + QString tooltip( emoticon->getTooltip() ); + Emoticon::htmlEscape( tooltip ); + item->setToolTip( QString( emoticon->getHtml(false) + " " + tooltip ) ); } #ifdef KMESSDEBUG_EMOTICONSIDEBAR kDebug() << "Updated total" << emoticons.count() << "emoticons"; #endif - - // Update the buttons layout to fit the current number of buttons and sidebar size - updateEmoticonLayout(); } + +// Right mouse button was clicked +void EmoticonSidebar::showContextMenu( const QListWidgetItem *item, const QPoint &point ) +{ + // Deselect current item so it has the click effect + list_->setCurrentItem( 0 ); + + // The popup menu is only for custom emoticon + if( isCustom_ == false ) + { + return; + } + + // Create the popup menu for custom emoticon + KMenu menu; + KAction addAction( KIcon( "insert-image" ), i18n( "Add to Chat" ), this ); + KAction insertAction( KIcon( "list-add" ), i18n( "Insert new" ), this ); + KAction editAction( KIcon( "draw-freehand" ), i18n( "Edit" ), this ); + KAction removeAction( KIcon( "list-remove" ), i18n( "Remove" ), this ); + + menu.addAction( &addAction ); + menu.addAction( &insertAction ); + menu.addAction( &editAction ); + menu.addAction( &removeAction ); + + // Exec the menu popup and grep the action selected + QAction *clickedAction = menu.exec( mapToGlobal( point ) ); + + if( clickedAction == 0 ) + { + // No action clicked + return; + } + + // Check which action was clicked + if( clickedAction == &addAction ) + { + slotItemClicked( item ); + return; + } + else if( clickedAction == &removeAction ) + { + manager_->getTheme( isCustom_ )->removeEmoticon( item->data( ShortcutRole ).toString() ); + return; + } + + if( emoticonDialog_ == 0 ) + { + emoticonDialog_ = new AddEmoticonDialog( manager_->getTheme( true ), this ); + } + + if( clickedAction == &insertAction ) + { + emoticonDialog_->preSelect( "", "" ); + } + else if( clickedAction == &editAction ) + { + emoticonDialog_->editEmoticon( item->data( PictureRole ).toString(), item->data( ShortcutRole ).toString() ); + } + + emoticonDialog_->show(); +} + + #include "emoticonsidebar.moc" diff --git a/src/chat/emoticonsidebar.h b/src/chat/emoticonsidebar.h index 82207ad..9db3afd 100644 --- a/src/chat/emoticonsidebar.h +++ b/src/chat/emoticonsidebar.h @@ -18,13 +18,18 @@ #ifndef EMOTICONSIDEBAR_H #define EMOTICONSIDEBAR_H -#include +#include +class AddEmoticonDialog; class Emoticon; +class EmoticonListWidget; class EmoticonManager; +class QLabel; +class QMouseEvent; +class QPoint; class QResizeEvent; -class QGridLayout; +class QVBoxLayout; @@ -32,6 +37,7 @@ class QGridLayout; * Implements an emoticon chooser as sidebar tab. * * @author Diederik van der Boor, Valerio Pilo + * @ingroup Chat */ class EmoticonSidebar : public QWidget { @@ -43,29 +49,35 @@ class EmoticonSidebar : public QWidget // The destructor virtual ~EmoticonSidebar(); - protected slots: - // Overwritten method to detect resizes - virtual void resizeEvent(QResizeEvent*); - private slots: - // A button was clicked - void slotInsertEmoticon(QString html); + // One item was clicked + void slotItemClicked( const QListWidgetItem *item ); + // The "Click to open the custom emoticons settings" link has been clicked + void slotNoEmoticonsLinkClicked( const QString &url ); // The theme has changed, we need to reload it void slotThemeUpdated(); + // Right mouse button was clicked + void showContextMenu(const QListWidgetItem *item, const QPoint &point ); - private: // private methods - // Create an emoticon button on the grid - void createEmoticonButton(const Emoticon *emoticon); - // Layout the emoticon buttons - void updateEmoticonLayout(); + private: // Private enumerations + enum ButtonRole + { + ShortcutRole = Qt::UserRole // Role to store the button's shortcut + , PictureRole // Role to store the button's picture path + }; private: // private properties - // Current number of columns used by the grid - int columns_; + // Emoticon dialog for edit the custom emoticons + AddEmoticonDialog *emoticonDialog_; // Whether the sidebar contains a standard or custom theme bool isCustom_; - // Grid which will lay our emoticon buttons out - QGridLayout *layout_; + // Vertical Layout which will lay our list + QVBoxLayout *layout_; + // The list widget of emoticons + EmoticonListWidget *list_; + // A warning message to tell the user he/she's got no custom emoticons + QLabel *noEmoticonsWarning_; + // Reference to the emoticon manager, to update the emoticon buttons EmoticonManager *manager_; @@ -74,4 +86,25 @@ class EmoticonSidebar : public QWidget void insertEmoticon(QString html); }; + + +// Extend the class QListWidget to grep the mousePressEvent +// because the use of showContextMenu in main class calls also the clicked slot. +class EmoticonListWidget : public QListWidget +{ + Q_OBJECT + + public: + EmoticonListWidget( QWidget *parent ); + + protected: + // Reimplement the mouse press event to grep left and right click + void mousePressEvent( QMouseEvent *e ); + + signals: + void leftClicked ( const QListWidgetItem* ); + void rightClicked( const QListWidgetItem*, const QPoint& ); +}; + + #endif diff --git a/src/chat/inkedit.cpp b/src/chat/inkedit.cpp new file mode 100644 index 0000000..1f9e89d --- /dev/null +++ b/src/chat/inkedit.cpp @@ -0,0 +1,251 @@ +/*************************************************************************** + inkvedit.cpp - description + ------------------- + begin : Wed May 14 2008 + copyright : (C) 2008 by Antonio Nastasi + email : sifcenter@gmail.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 License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "inkedit.h" + +#include "../kmessdebug.h" + +#include +#include + +#include +#include +#include +#include + + + InkEdit::InkEdit(QWidget *parent) + : QWidget(parent), + color_(Qt::black) + ,isEmpty_(true) + ,scribbling_(false) +{ + setupUi( this ); + setAttribute( Qt::WA_StaticContents ); + + // Set the buttons + colorButton_->setIcon( KIcon( "format-stroke-color" ) ); + clearButton_->setIcon( KIcon( "draw-eraser" ) ); + + connect( colorButton_, SIGNAL( clicked() ), + this, SLOT( changeColor() ) ); + connect( clearButton_, SIGNAL( clicked() ), + this, SLOT( clearImage() ) ); + + // Reset the drawed area + rect_.setTopLeft( QPoint( -1, -1 ) ); + rect_.setBottomRight( QPoint( -1, -1 ) ); +} + + + +// Clear the current image +void InkEdit::clearImage() +{ + image_.fill( qRgb( 255, 255, 255 ) ); + update(); + isEmpty_ = true; + + // Reset the drawed area + rect_.setTopLeft( QPoint( -1, -1 ) ); + rect_.setBottomRight( QPoint( -1, -1 ) ); + + emit inkModified( true ); +} + + + +// Change color for current pen +void InkEdit::changeColor() +{ + QColor color; + int result = KColorDialog::getColor( color ); + if ( result == KColorDialog::Accepted ) + { + color_ = color; + } +} + + + +// Crop the image to send only the drawed area +void InkEdit::cropImage( QPoint position ) +{ + int sizePen = sizePen_->value(); + + // Adjust the initial size and position + if( rect_.topLeft().x() == - 1 || rect_.topLeft().y() == -1 ) + { + rect_.setTopLeft( QPoint( position.x(), position.y() ) ); + rect_.setBottomRight( QPoint( position.x() + sizePen , position.y() + sizePen ) ); + return; + } + + // Adjust the x position and width + if( position.x() < rect_.topLeft().x() ) + { + rect_.setTopLeft( QPoint( position.x() - sizePen , rect_.topLeft().y() ) ); + } + else if( position.x() > rect_.bottomRight().x() ) + { + rect_.setBottomRight( QPoint( position.x() + sizePen, rect_.bottomRight().y() ) ); + } + + // Adjust the y position and height + if( position.y() < rect_.topLeft().y() ) + { + rect_.setTopLeft( QPoint( rect_.topLeft().x(), position.y( ) - sizePen ) ); + } + else if( position.y() > rect_.bottomRight().y() ) + { + rect_.setBottomRight( QPoint( rect_.bottomRight().x() , position.y()+ sizePen ) ); + } +} + + + +// Draw a line from start point to last point +void InkEdit::drawLineTo( const QPoint &endPoint ) +{ + QPainter painter( &image_ ); + painter.setPen( QPen( color_, sizePen_->value(), Qt::SolidLine, Qt::RoundCap, + Qt::RoundJoin ) ); + + painter.drawLine( lastPoint_, endPoint ); + + int rad = (1 / 2) + 2; + update( QRect( lastPoint_, endPoint ).normalized() + .adjusted( -rad, -rad, +rad, +rad ) ); + + lastPoint_ = endPoint; +} + + + +// Return if the image is empty +bool InkEdit::isEmpty() +{ + return isEmpty_; +} + + + +void InkEdit::mousePressEvent( QMouseEvent *event ) +{ + if( event->button() == Qt::LeftButton ) + { + lastPoint_ = event->pos(); + cropImage( lastPoint_ ); + scribbling_ = true; + } +} + + + +void InkEdit::mouseMoveEvent(QMouseEvent *event) +{ + if( ( event->buttons() & Qt::LeftButton ) && scribbling_ ) + { + QPoint position = event->pos(); + cropImage( position ); + drawLineTo( position ); + } +} + + + +void InkEdit::mouseReleaseEvent(QMouseEvent *event) +{ + if( event->button() == Qt::LeftButton && scribbling_ ) + { + QPoint position = event->pos(); + cropImage( position ); + drawLineTo( position ); + + isEmpty_ = false; + scribbling_ = false; + emit inkModified(); + } +} + + + +void InkEdit::paintEvent(QPaintEvent */*event*/) +{ + QPainter painter( this) ; + painter.drawImage( QPoint(0, 0), image_ ); +} + + + +void InkEdit::resizeEvent( QResizeEvent *event ) +{ + /*int newWidth = width(); + int newHeight = height(); + kDebug() << image_.size(); + kDebug() << newWidth; + resizeImage( &image_, QSize( newWidth, newHeight ) ); + update();*/ + if( width() > image_.width() || height() > image_.height() ) + { + int newWidth = qMax( width() + 128, image_.width() ); + int newHeight = qMax( height() + 128, image_.height() ); + resizeImage( &image_, QSize( newWidth, newHeight ) ); + update(); + } + + QWidget::resizeEvent( event ); +} + + + +// Return the bytes rapresents the image +const QByteArray& InkEdit::getImageBytes() +{ + QBuffer buffer( &imageBytes_ ); + buffer.open( QIODevice::WriteOnly ); + image_.copy( rect_ ).save( &buffer, "PNG" ); + //image_.scaled( size(), Qt::KeepAspectRatio, Qt::SmoothTransformation ).save( &buffer, "PNG" ); + return imageBytes_; +} + + + +void InkEdit::resizeImage( QImage *image, const QSize &newSize ) +{ + if( image->size() == newSize ) + { + + return; + } + + QImage newImage( newSize, QImage::Format_ARGB32 ); + newImage.fill( qRgb( 255, 255, 255 ) ); + QPainter painter( &newImage ); + if( ! image->isNull() ) + { + painter.drawImage( QPoint( 0, 0 ), (*image).scaled( newSize, Qt::KeepAspectRatio, Qt::SmoothTransformation ) ); + } + else + { + painter.drawImage( QPoint( 0, 0 ), *image ); + } + + *image = newImage; +} + +#include "inkedit.moc" diff --git a/src/chat/inkedit.h b/src/chat/inkedit.h new file mode 100644 index 0000000..83b6d69 --- /dev/null +++ b/src/chat/inkedit.h @@ -0,0 +1,81 @@ +/*************************************************************************** + inkedit.cpp - description + ------------------- + begin : Wed May 14 2008 + copyright : (C) 2008 by Antonio Nastasi + email : sifcenter@gmail.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 License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef INKEDIT_H +#define INKEDIT_H + +#include "ui_inkedit.h" + + + +class InkEdit : public QWidget, public Ui::InkEdit +{ + Q_OBJECT + + public: + InkEdit(QWidget *parent = 0); + // Return the bytes rapresents the image + const QByteArray &getImageBytes(); + // Return if the image is empty + bool isEmpty(); + + public slots: + // Clear the current image + void clearImage(); + + protected: // protected methods + // Implements all events to grep the mouse pointer + void mousePressEvent( QMouseEvent *event ); + void mouseMoveEvent( QMouseEvent *event ); + void mouseReleaseEvent( QMouseEvent *event ); + void paintEvent( QPaintEvent *event ); + void resizeEvent( QResizeEvent *event ); + + private: // private methods + // Crop the image to send only the drawed area + void cropImage( QPoint position ); + // Draw a line from start point to last point + void drawLineTo( const QPoint &endPoint ); + // Resize image method + void resizeImage( QImage *image, const QSize &newSize ); + + private slots: + // Change color for current pen + void changeColor(); + + private: // private attribute + // Color of current pen + QColor color_; + // Variable to store if the image is empty or not + bool isEmpty_; + // The bytes of image + QByteArray imageBytes_; + // The main image + QImage image_; + // Last point where the mouse pointer was released + QPoint lastPoint_; + // Rect to store the position and size of current drawed area + QRect rect_; + // Return if we are in writing or no + bool scribbling_; + + signals: + // Emitted when the ink was modified + void inkModified( bool erasered = false ); +}; + +#endif diff --git a/src/chat/inkedit.ui b/src/chat/inkedit.ui new file mode 100644 index 0000000..4a6c5b9 --- /dev/null +++ b/src/chat/inkedit.ui @@ -0,0 +1,124 @@ + + InkEdit + + + + 0 + 0 + 386 + 153 + + + + + 200 + 70 + + + + + 0 + + + 0 + + + + + Qt::WheelFocus + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + 2 + + + 2 + + + + + Qt::Horizontal + + + + 311 + 107 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::NoFocus + + + + + + + + + + Qt::NoFocus + + + + + + + + + + + 100 + 0 + + + + + 100 + 16777215 + + + + Size pen + + + 1 + + + 10 + + + Qt::Horizontal + + + + + + + + + + + diff --git a/src/chat/websidebar.cpp b/src/chat/websidebar.cpp deleted file mode 100644 index da17ee3..0000000 --- a/src/chat/websidebar.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/*************************************************************************** - websidebar.cpp - description - ------------------- - begin : Sat Oct 8 2005 - copyright : (C) 2005 by Diederik van der Boor - email : vdboor --at-- codingdomain.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 License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#include "websidebar.h" - -#include "../network/soap/msnappdirectoryservice.h" -#include "../kmessdebug.h" - -#include -#include - -#include -#include -#include - - - -WebSidebar::WebSidebar(QWidget *parent) - : QWidget(parent) - , appdirService_(0) - , khtml_(0) -{ - // Stretch widget - setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); - QHBoxLayout *layout = new QHBoxLayout( this ); - - khtml_ = new KHTMLPart( this ); - layout->addWidget( khtml_->view() ); // Stretches widget - - // Enable all features msn games might use - khtml_->setJScriptEnabled(true); - khtml_->setJavaEnabled(true); - khtml_->setMetaRefreshEnabled(true); - khtml_->setOnlyLocalReferences(false); - khtml_->setPluginsEnabled(true); - - // Connect signals for browsing - connect( khtml_->browserExtension(), SIGNAL( openUrlRequestDelayed(const KUrl&,const KParts::OpenUrlArguments&,const KParts::BrowserArguments&) ) , - this, SLOT( slotOpenURLRequest(const KUrl&) ) ); -} - - -WebSidebar::~WebSidebar() -{ - -} - - - -// Initialize the sidebar -bool WebSidebar::initialize() -{ - requestGameList(); - return true; -} - - - -// Request the list of games from the msn server -void WebSidebar::requestGameList() -{ - if(appdirService_ == 0) - { - appdirService_ = new MsnAppDirectoryService(); - connect(appdirService_, SIGNAL( requestFinished() ) , - this, SLOT( slotRequestFinished() ) ); - } - - // TODO: handle some caching/singleton stuff somewhere so we only have to request this once - appdirService_->queryServiceList( MsnAppDirectoryService::GAMES ); -} - - - -// Open a new url in the khtml widget -void WebSidebar::slotOpenURLRequest( const KUrl &url ) -{ - khtml_->openUrl( url ); -} - - - -// A request to the msn appdir finished -void WebSidebar::slotRequestFinished() -{ - kDebug(); - if(KMESS_NULL(appdirService_)) return; - - khtml_->begin(); - - khtml_->write("" - "MSN Activities" - "

Games

"); - - - foreach( MsnAppDirectoryService::Entry *entry, appdirService_->getEntries() ) - { - khtml_->write("
" + entry->name + "
"); - khtml_->write("
" + entry->description + "
"); - - kDebug() << entry->appIconUrl; - kDebug() << entry->url; - } - - khtml_->write("
"); - khtml_->end(); -} - - -#include "websidebar.moc" diff --git a/src/chat/websidebar.h b/src/chat/websidebar.h deleted file mode 100644 index fba496a..0000000 --- a/src/chat/websidebar.h +++ /dev/null @@ -1,65 +0,0 @@ -/*************************************************************************** - websidebar.h - description - ------------------- - begin : Sat Oct 8 2005 - copyright : (C) 2005 by Diederik van der Boor - email : vdboor --at-- codingdomain.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 License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#ifndef WEBSIDEBAR_H -#define WEBSIDEBAR_H - -#include - -#include - - -class KHTMLPart; -class KUrl; -class MsnAppDirectoryService; - - - -/** - * A sidebar with web-based content. - * @author Diederik van der Boor - */ -class WebSidebar : public QWidget -{ - Q_OBJECT - - public: - // The constructor - WebSidebar(QWidget *parent=0); - // The destructor - virtual ~WebSidebar(); - // Initialize the sidebar - bool initialize(); - - private slots: - // Open a new url in the khtml widget - void slotOpenURLRequest( const KUrl &url ); - // A request to the msn appdir finished - void slotRequestFinished(); - - private: - // Request the list of games from the msn server - void requestGameList(); - - private: - // The connection to the appdir server - MsnAppDirectoryService *appdirService_; - // The embedded khtml part - KHTMLPart *khtml_; -}; - -#endif diff --git a/src/chat/xsltransformation.cpp b/src/chat/xsltransformation.cpp index 047b64a..5b20c53 100644 --- a/src/chat/xsltransformation.cpp +++ b/src/chat/xsltransformation.cpp @@ -32,9 +32,7 @@ #include #include -#include #include -#include #include diff --git a/src/chat/xsltransformation.h b/src/chat/xsltransformation.h index 0000feb..6cb6335 100644 --- a/src/chat/xsltransformation.h +++ b/src/chat/xsltransformation.h @@ -32,6 +32,7 @@ * chat messages in the desired HTML markup. * * @author Diederik van der Boor + * @ingroup Chat */ class XslTransformation { diff --git a/src/contact/contact.cpp b/src/contact/contact.cpp index 2f8a322..d3c2ea0 100644 --- a/src/contact/contact.cpp +++ b/src/contact/contact.cpp @@ -21,16 +21,9 @@ #include "../kmessdebug.h" #include "../contact/msnobject.h" #include "../network/specialgroups.h" +#include "../utils/kmessconfig.h" #include "contactextension.h" -#include -#include -#include - -#include -#include -#include - #ifdef KMESSDEBUG_CONTACT #define KMESSDEBUG_CONTACT_GENERAL @@ -55,7 +48,7 @@ Contact::Contact(QString handle, QString friendlyName, int lists, QStringList gr { #ifdef KMESSTEST KMESS_ASSERT( ! handle_.isEmpty() ); - KMESS_ASSERT( ! friendlyName_.isEmpty() ); + KMESS_ASSERT( ! friendlyName_.getOriginal().isEmpty() ); KMESS_ASSERT( lists != 0 ); #endif @@ -71,12 +64,13 @@ Contact::Contact(QString handle, QString friendlyName, int lists, QStringList gr // (KMess implemented this before the official client supported // msnobject transfers). Names can be aliased, which is why there're // also there. - extension_ = new ContactExtension(handle_); + extension_ = new ContactExtension( this ); - connect ( extension_, SIGNAL( changedFriendlyName() ), - this, SLOT( forwardChangedFriendlyName() ) ); - connect ( extension_, SIGNAL( changedPicture() ), - this, SLOT( forwardChangedPicture() ) ); + // Relay some signals needed externally + connect ( extension_, SIGNAL( changedFriendlyName() ), + this, SIGNAL( changedFriendlyName() ) ); + connect ( extension_, SIGNAL( changedPicture() ), + this, SIGNAL( changedPicture() ) ); } @@ -134,34 +128,28 @@ bool Contact::checkIfContactAddedUser() -// Slot to pass on the changedFriendlyName() -void Contact::forwardChangedFriendlyName() -{ - emit changedFriendlyName(); -} - - - -// Forward the "changed picture" signal -void Contact::forwardChangedPicture() -{ - emit changedPicture(); -} - - - // Return the path to the contact's picture QString Contact::getContactPicturePath() const { - QString picturePath = extension_->getContactPicturePath(); + // Check before if there is some alternative contact's picture + QString picturePath = extension_->getContactAlternativePicturePath(); - if( picturePath.isEmpty() ) + if( ! picturePath.isEmpty() ) { - return getContactDefaultPicturePath(); + return picturePath; + } + + // Check for contact picture ( sended by msn object ) + picturePath = extension_->getContactPicturePath(); + + if( ! picturePath.isEmpty() ) + { + return picturePath; } else { - return picturePath; + // else return the default contact picture path + return getContactDefaultPicturePath(); } } @@ -191,15 +179,15 @@ ContactExtension *Contact::getExtension() const // Return the contact's friendly name -QString Contact::getFriendlyName() const +QString Contact::getFriendlyName( FormattingMode mode ) const { - if ( extension_->getUseAlternativeName() ) + if( extension_->getUseAlternativeName() ) { - return extension_->getAlternativeName(); + return extension_->getAlternativeName( mode ); } else { - return friendlyName_; + return friendlyName_.getString( mode ); } } @@ -237,9 +225,9 @@ const MsnObject* Contact::getMsnObject() const // Return the contact's personal message -const QString & Contact::getPersonalMessage() const +const QString & Contact::getPersonalMessage( FormattingMode mode ) const { - return personalMessage_; + return personalMessage_.getString( mode ); } @@ -261,9 +249,9 @@ Status Contact::getStatus() const // Return the contact's true friendly name, regardless of extension -QString Contact::getTrueFriendlyName() const +QString Contact::getTrueFriendlyName( FormattingMode mode ) const { - return friendlyName_; + return friendlyName_.getString( mode ); } @@ -363,8 +351,9 @@ void Contact::readProperties( const KConfigGroup &config ) KConfigGroup contactConfig = config.group( handle_ ); // Restore cached state of this class - capabilities_ = contactConfig.readEntry( "capabilities", 0 ); - clientAppName_ = contactConfig.readEntry( "clientAppName", "" ); + capabilities_ = contactConfig.readEntry( "capabilities", 0 ); + clientAppName_ = contactConfig.readEntry( "clientAppName", "" ); + personalMessage_.setString( contactConfig.readEntry( "lastPersonalMessage", "" ) ); // TODO: restore more state variables here, to implement contact list caching. @@ -403,8 +392,9 @@ void Contact::saveProperties( KConfigGroup &config ) KConfigGroup contactConfig = config.group( handle_ ); // Save state of this class - contactConfig.writeEntry( "capabilities", getCapabilities() ); - contactConfig.writeEntry( "clientAppName", getClientAppName() ); + contactConfig.writeEntry( "capabilities", getCapabilities() ); + contactConfig.writeEntry( "clientAppName", getClientAppName() ); + contactConfig.writeEntry( "lastPersonalMessage", getPersonalMessage( STRING_ORIGINAL ) ); // TODO: save more state variables here, to implement contact list caching. @@ -461,12 +451,14 @@ void Contact::setFriend(bool isFriend) // Change the contact's friendly name void Contact::setFriendlyName(QString newName) { - if( ! newName.isEmpty() ) + if( newName.isEmpty() ) { - friendlyName_ = newName; -// updateItemIdentifierAndPixmap(); - emit changedFriendlyName(); + return; } + + friendlyName_.setString( newName ); + + emit changedFriendlyName(); } @@ -522,15 +514,18 @@ void Contact::setList(const QString list, bool isMember) // Set the personal message of the contact void Contact::setPersonalStatus( const QString &message, const QString &mediaType, const QString &mediaString ) { - if( personalMessage_ != message - || currentMediaType_ != mediaType - || currentMediaString_ != mediaString ) + if( personalMessage_.getOriginal() == message + && currentMediaType_ == mediaType + && currentMediaString_ == mediaString ) { - personalMessage_ = message; - currentMediaType_ = mediaType; - currentMediaString_ = mediaString; - emit changedPersonalMessage(this); + return; } + + currentMediaType_ = mediaType; + currentMediaString_ = mediaString; + personalMessage_.setString( message ); + + emit changedPersonalMessage(this); } diff --git a/src/contact/contact.h b/src/contact/contact.h index 6c24961..a7fbcd1 100644 --- a/src/contact/contact.h +++ b/src/contact/contact.h @@ -30,7 +30,6 @@ class ContactExtension; class KConfigGroup; - /** * @brief Data class for contact information. * @@ -95,7 +94,7 @@ class Contact : public ContactBase // Return a pointer to the extension class ContactExtension *getExtension() const; // Return the contact's friendly name - QString getFriendlyName() const; + QString getFriendlyName( FormattingMode mode = STRING_CLEANED ) const; // Return the group ID's the contact is added to QStringList getGroupIds() const; // Return the contact's globally unique identifier @@ -103,11 +102,11 @@ class Contact : public ContactBase // Return the contact's previous status Status getLastStatus() const; // Return the contact's personal message - const QString & getPersonalMessage() const; + const QString & getPersonalMessage( FormattingMode mode = STRING_CLEANED ) const; // Return the contact's status Status getStatus() const; // Return the contact's true friendly name, regardless of extension - QString getTrueFriendlyName() const; + QString getTrueFriendlyName( FormattingMode mode = STRING_CLEANED ) const; // Return an MSN Object const MsnObject* getMsnObject() const; // Get the source group for an imminent move operation @@ -177,18 +176,12 @@ class Contact : public ContactBase // Whether or not the contact is on the pending list bool pending_; // The contact's personal message - QString personalMessage_; + FormattedString personalMessage_; // Whether or not the contact is on the reverse list bool reverse_; // The contact's online status Status status_; - private slots: // Slots - // Forward the "changed friendlyname" signal - void forwardChangedFriendlyName(); - // Forward the "changed picture" signal - void forwardChangedPicture(); - signals: // Public signals // Signal that the contact may have changed list affiliation void changedList(Contact *contact); diff --git a/src/contact/contactbase.cpp b/src/contact/contactbase.cpp index d55bcfd..24014fd 100644 --- a/src/contact/contactbase.cpp +++ b/src/contact/contactbase.cpp @@ -24,7 +24,6 @@ #include #include -#include #include #include @@ -46,6 +45,7 @@ ContactBase::ContactBase(QString handle, QString friendlyName, uint capabilities ContactBase::~ContactBase() { delete applicationList_; + applicationList_ = 0; } @@ -244,8 +244,6 @@ void ContactBase::detectClientAppName( uint capabilities, const MsnObject *msnOb && ! pictureLocation.startsWith("TFR") ) // MSN / WLM { // Known variations: - // - KMess.tmp - // - EncartaIcon.png (Encarta Instant Answers) if( pictureLocation == "KMess.tmp" ) { pictureClientName = "KMess"; @@ -258,6 +256,11 @@ void ContactBase::detectClientAppName( uint capabilities, const MsnObject *msnOb { pictureClientName = "Kopete"; } + else if( pictureLocation == "EncartaIcon.png" ) + { + // Encarta Instant Answers. + // ignore, no special string for this one. + } else { #ifdef KMESSDEBUG_CONTACTBASE @@ -418,9 +421,9 @@ const QMap& ContactBase::getEmoticonReplacements() const // Return the contact's friendly name -QString ContactBase::getFriendlyName() const +QString ContactBase::getFriendlyName( FormattingMode mode ) const { - return friendlyName_; + return friendlyName_.getString( mode ); } @@ -457,6 +460,14 @@ bool ContactBase::hasApplicationList() const +// Returns whether the contact has capability +bool ContactBase::hasCapability( MsnClientCapabilities flag ) const +{ + return ( capabilities_ & flag ) == flag; +} + + + // Returns whether the contact's client supports the given MSNP2P version bool ContactBase::hasP2PSupport( MsnClientCapabilities minimalVersion ) const { diff --git a/src/contact/contactbase.h b/src/contact/contactbase.h index 63cd43f..78e0cb6 100644 --- a/src/contact/contactbase.h +++ b/src/contact/contactbase.h @@ -18,11 +18,11 @@ #ifndef CONTACTBASE_H #define CONTACTBASE_H +#include "../utils/richtextparser.h" #include "contact/msnstatus.h" #include #include -#include #include @@ -121,7 +121,7 @@ class ContactBase : public QObject // Return the custom emoticon replacements. const QMap & getEmoticonReplacements() const; // Return the contact's friendly name - virtual QString getFriendlyName() const; + virtual QString getFriendlyName( FormattingMode mode = STRING_CLEANED ) const; // Return the contact's handle QString getHandle() const; // Return the search pattern for pending custom emoticons. @@ -132,6 +132,8 @@ class ContactBase : public QObject const QList getSwitchboardConnections() const; // Returns whether the contact has an application list initialized. bool hasApplicationList() const; + // Returns whether the contact has capability + bool hasCapability( MsnClientCapabilities flag ) const; // Returns whether the contact's client supports the given MSNP2P version bool hasP2PSupport( MsnClientCapabilities minimalVersion = MSN_CAP_MSN60 ) const; // Return true if the contact is offline @@ -168,7 +170,7 @@ class ContactBase : public QObject // The emoticon regexp QRegExp emoticonRegExp_; // The contact's friendly name - QString friendlyName_; + FormattedString friendlyName_; // The contact's handle QString handle_; // The pending custom emoticons for the contact. diff --git a/src/contact/contactextension.cpp b/src/contact/contactextension.cpp index c1e9e4a..58fccec 100644 --- a/src/contact/contactextension.cpp +++ b/src/contact/contactextension.cpp @@ -19,47 +19,86 @@ #include "../currentaccount.h" #include "../kmessdebug.h" -#include "contact.h" +#include "contactlist.h" -#include #include -#include #include -#include +#include // The constructor with specified contact handle -ContactExtension::ContactExtension(QString handle ) +ContactExtension::ContactExtension( Contact *contact ) : QObject(), - alternativeName_(""), - handle_(handle), + alternativeName_(), + alternativePictureFile_(""), notifyOnline_(true), pictureFile_(""), soundFile_(""), useAlternativeName_(false) { + // Set the current contact and connect the contactOffline event for lastSeen entry + handle_ = contact->getHandle(); + contact_ = contact; + connect( contact_ , SIGNAL( contactOffline( Contact*, bool ) ), this, SLOT( setLastSeen() ) ); } // The destructor ContactExtension::~ContactExtension() { - } -// Read property of QString alternativeName_. -const QString & ContactExtension::getAlternativeName() const +// Clear the cache of picture files +void ContactExtension::clearCache() { - return alternativeName_; + QString fileName; + QFile file; + + // Grep all pictures and remove these + foreach( fileName, pictureFileList_ ) + { + // Remove the picture file + file.setFileName( fileName ); + if( file.exists() ) + { + file.remove(); + file.close(); + } + + // Remove the dat file + file.setFileName( fileName + ".dat" ); + if( file.exists() ) + { + file.remove(); + file.close(); + } + } + pictureFileList_.clear(); } -// Read property of QString PictureFile_. +// Read the contact alias +const QString & ContactExtension::getAlternativeName( FormattingMode mode ) const +{ + return alternativeName_.getString( mode ); +} + + + +// Read the custom contact picture path +const QString& ContactExtension::getContactAlternativePicturePath() const +{ + return alternativePictureFile_; +} + + + +// Read the original contact picture path const QString ContactExtension::getContactPicturePath() const { if(QFile::exists(pictureFile_)) @@ -74,7 +113,7 @@ const QString ContactExtension::getContactPicturePath() const -// Read property of QString SoundFile_. +// Read the custom contact sound path const QString ContactExtension::getContactSoundPath() const { if(QFile::exists(soundFile_)) @@ -89,7 +128,30 @@ const QString ContactExtension::getContactSoundPath() const -// Read property of bool notifyOnline_ +// Read when the contact has been seen the last time +const QDateTime& ContactExtension::getLastSeen() +{ + return lastSeen_; +} + + +// Read when the last message from this contact has been received +const QDateTime& ContactExtension::getLastMessageDate() +{ + return lastMessageDate_; +} + + + +// Get the notes about this contact +const QString& ContactExtension::getNotes() const +{ + return notes_; +} + + + +// Read whether KMess should notify when this contact comes online or not bool ContactExtension::getNotifyOnline() const { return notifyOnline_; @@ -97,7 +159,7 @@ bool ContactExtension::getNotifyOnline() const -// Read property of bool useAlternativeName_. +// Read whether to use the alias or not bool ContactExtension::getUseAlternativeName() const { return useAlternativeName_; @@ -105,7 +167,7 @@ bool ContactExtension::getUseAlternativeName() const -// Read property of pictures list +// Read the list of pictures which the contact has used QStringList ContactExtension::getPictureList() const { return pictureFileList_; @@ -117,22 +179,22 @@ QStringList ContactExtension::getPictureList() const void ContactExtension::readProperties( const KConfigGroup &config ) { // Get the configuration group where this contact's data is stored - KConfigGroup contactConfig = config.group( "extension" ); + KConfigGroup extensionGroup = config.group( "Extension" ); // When changing any of those default values, also change the saving condition // in saveProperties() ! - alternativeName_ = contactConfig.readEntry("alternativeName", ""); - - notifyOnline_ = contactConfig.readEntry("notifyOnline", true); - - pictureFile_ = contactConfig.readEntry("pictureFile", ""); - - pictureFileList_ = contactConfig.readEntry("pictureFileList", QStringList() ); - - soundFile_ = contactConfig.readEntry("soundFile", ""); + alternativeName_ = extensionGroup.readEntry("alternativeName", "" ); + alternativePictureFile_= extensionGroup.readEntry("alternativePictureFile", "" ); + lastSeen_ = extensionGroup.readEntry("lastSeen", QDateTime() ); + lastMessageDate_ = extensionGroup.readEntry("lastMessageDate", QDateTime() ); + notifyOnline_ = extensionGroup.readEntry("notifyOnline", true ); + notes_ = extensionGroup.readEntry("notes", "" ); + pictureFile_ = extensionGroup.readEntry("pictureFile", "" ); + pictureFileList_ = extensionGroup.readEntry("pictureFileList", QStringList() ); + soundFile_ = extensionGroup.readEntry("soundFile", "" ); // We use the accessor function here because it handles the update, if required - setUseAlternativeName ( contactConfig.readEntry("useAlternativeName", false) ); + setUseAlternativeName ( extensionGroup.readEntry("useAlternativeName", false ) ); } @@ -141,17 +203,20 @@ void ContactExtension::readProperties( const KConfigGroup &config ) void ContactExtension::saveProperties( KConfigGroup &config ) { // Get the configuration group where this contact's data is stored - KConfigGroup contactConfig = config.group( "extension" ); + KConfigGroup extensionGroup = config.group( "Extension" ); // If no info have been changed, don't waste space writing it, and if it's present already, remove the group. - if( ! useAlternativeName_ + if( ! useAlternativeName_ && notifyOnline_ - && alternativeName_ == "" - && pictureFile_ == "" - && soundFile_ == "" ) + && alternativeName_.getOriginal().isEmpty() + && alternativePictureFile_ .isEmpty() + && lastSeen_ .isNull() + && lastMessageDate_ .isNull() + && pictureFile_ .isEmpty() + && soundFile_ .isEmpty() ) { #ifdef KMESSDEBUG_CONTACTEXTENSION - if( contactConfig.hasGroup( "extension" ) ) + if( extensionGroup.hasGroup( "Extension" ) ) { kDebug() << "Deleting unused contact info for" << handle_; } @@ -161,43 +226,85 @@ void ContactExtension::saveProperties( KConfigGroup &config ) } #endif - config.deleteGroup( "extension" ); + config.deleteGroup( "Extension" ); return; } - contactConfig.writeEntry( "useAlternativeName", useAlternativeName_ ); - contactConfig.writeEntry( "alternativeName", alternativeName_ ); - contactConfig.writeEntry( "notifyOnline", notifyOnline_ ); - contactConfig.writeEntry( "pictureFile", pictureFile_ ); - contactConfig.writeEntry( "pictureFileList", pictureFileList_ ); - contactConfig.writeEntry( "soundFile", soundFile_ ); + extensionGroup.writeEntry( "useAlternativeName", useAlternativeName_ ); + extensionGroup.writeEntry( "alternativePictureFile", alternativePictureFile_ ); + extensionGroup.writeEntry( "alternativeName", alternativeName_.getOriginal() ); + extensionGroup.writeEntry( "notifyOnline", notifyOnline_ ); + extensionGroup.writeEntry( "notes", notes_ ); + + // If the contact is connects, refresh the lastSeen before saves it + if( contact_->isOnline() ) + { + setLastSeen(); + } + + extensionGroup.writeEntry( "lastSeen", lastSeen_ ); + extensionGroup.writeEntry( "lastMessageDate", lastMessageDate_ ); + extensionGroup.writeEntry( "pictureFile", pictureFile_ ); + extensionGroup.writeEntry( "pictureFileList", pictureFileList_ ); + extensionGroup.writeEntry( "soundFile", soundFile_ ); } -// Write property of QString alternativeName_. -void ContactExtension::setAlternativeName( const QString& _newVal ) +// Change the contact alias +void ContactExtension::setAlternativeName( const QString& newAlternativeName ) { - if ( _newVal != "" ) + // Ignore invalid requests + if( newAlternativeName.isEmpty() || newAlternativeName == alternativeName_.getOriginal() ) { - alternativeName_ = _newVal; + return; + } - if (getUseAlternativeName() == true) emit changedFriendlyName(); + // Copy the new name to the three versions + alternativeName_.setString( newAlternativeName ); + + if( getUseAlternativeName() ) + { + emit changedFriendlyName(); } } -// Write property of QString pictureFile_. -void ContactExtension::setContactPicturePath( const QString & _newVal) +// Change the custom contact picture path +void ContactExtension::setContactAlternativePicturePath( const QString& _newVal ) +{ + alternativePictureFile_ = _newVal; +} + + + +// Change the original contact picture path +void ContactExtension::setContactPicturePath( const QString & _newVal ) { pictureFile_ = _newVal; - // If the current picture isn't in the list of all used pictures, - // then add it. - if( ! pictureFileList_.contains( _newVal ) && ! _newVal.isEmpty() ) + if( ! _newVal.isEmpty() ) { - pictureFileList_.append( _newVal ); + // If the current picture isn't in the list of all used pictures, + // then add it. + if( ! pictureFileList_.contains( _newVal ) ) + { + pictureFileList_.append( _newVal ); + } + + // If the picture file hasn't a dat file, then create it + // and put into the current date + QFile fileDat( _newVal + ".dat" ); + if( ! fileDat.exists () ) + { + if ( fileDat.open( QIODevice::WriteOnly | QIODevice::Text ) ) + { + QTextStream out( &fileDat ); + out << QDate::currentDate ().toString( Qt::SystemLocaleDate ); + fileDat.close(); + } + } } emit changedPicture(); @@ -205,7 +312,7 @@ void ContactExtension::setContactPicturePath( const QString & _newVal) -// Write property of QString soundFile_. +// Change the custom contact sound path void ContactExtension::setContactSoundPath( const QString & _newVal) { soundFile_ = _newVal; @@ -213,7 +320,31 @@ void ContactExtension::setContactSoundPath( const QString & _newVal) -// Write propety of bool notifyOnline_ +// Set when the contact has been seen the last time +void ContactExtension::setLastSeen() +{ + lastSeen_ = QDateTime::currentDateTime(); +} + + + +// Set the time of the last received message from this contact +void ContactExtension::setLastMessageDate() +{ + lastMessageDate_ = QDateTime::currentDateTime(); +} + + + +// Write the notes about this contact +void ContactExtension::setNotes( const QString& _newVal ) +{ + notes_ = _newVal; +} + + + +// Write whether KMess should notify when this contact comes online or not void ContactExtension::setNotifyOnline( bool _newVal ) { notifyOnline_ = _newVal; @@ -221,7 +352,7 @@ void ContactExtension::setNotifyOnline( bool _newVal ) -// Write property of bool useAlternativeName_ +// Set whether to use the alias or not void ContactExtension::setUseAlternativeName( bool _newVal) { bool needUpdate; diff --git a/src/contact/contactextension.h b/src/contact/contactextension.h index 59799cb..851064d 100644 --- a/src/contact/contactextension.h +++ b/src/contact/contactextension.h @@ -18,14 +18,16 @@ #ifndef CONTACTEXTENSION_H #define CONTACTEXTENSION_H +#include "../utils/richtextparser.h" #include "contactbase.h" +#include "contact.h" #include +#include // forward declarations class Contact; - class KConfigGroup; @@ -47,43 +49,69 @@ class ContactExtension : public QObject public: // The constructor with specified contact handle - ContactExtension(QString handle); + ContactExtension( Contact *contact ); // The destructor - ~ContactExtension(); + ~ContactExtension(); - // Read property of QString alternativeName_. - const QString & getAlternativeName() const; - // Read property of QString pictureFile_. + // Clear the cache of picture files + void clearCache(); + // Read the contact alias + const QString & getAlternativeName( FormattingMode mode = STRING_CLEANED ) const; + // Read the custom contact picture path + const QString & getContactAlternativePicturePath() const; + // Read the original contact picture path const QString getContactPicturePath() const; - // Read property of QString soundFile_. + // Read the custom contact sound path const QString getContactSoundPath() const; - // Read property of bool notifyOnline_ + // Read when the contact has been seen the last time + const QDateTime& getLastSeen(); + // Read when the last message from this contact has been received + const QDateTime& getLastMessageDate(); + // Get the notes about this contact + const QString& getNotes() const; + // Read whether KMess should notify when this contact comes online or not bool getNotifyOnline() const; - // Read property of bool useAlternativeName_. + // Read whether to use the alias or not bool getUseAlternativeName() const; - // Read property of pictures list + // Read the list of pictures which the contact has used QStringList getPictureList() const; // Load extension settings for a contact void readProperties( const KConfigGroup &config ); // Save extension settings for a contact void saveProperties( KConfigGroup &config ); - // Write property of QString alternativeName_. - void setAlternativeName( const QString& _newVal ); - // Write property of QString pictureFile_. + // Change the contact alias + void setAlternativeName( const QString& newAlternativeName ); + // Change the custom contact picture path + void setContactAlternativePicturePath( const QString& _newVal ); + // Change the original contact picture path void setContactPicturePath( const QString& _newVal ); - // Write property of QString soundFile_. + // Change the custom contact sound path void setContactSoundPath( const QString& _newVal ); - // Write property of bool notifyOnline_ + // Set the time of the last received message from this contact + void setLastMessageDate(); + // Write the notes about this contact + void setNotes( const QString& _newVal ); + // Write whether KMess should notify when this contact comes online or not void setNotifyOnline( bool _newVal ); - // Write property of bool useAlternativeName_; + // Set whether to use the alias or not void setUseAlternativeName( bool _newVal ); private: // Private attributes // The alternative name - QString alternativeName_; + FormattedString alternativeName_; + // The alternative picture + QString alternativePictureFile_; + // The current contact + Contact *contact_; // The contact's handle (ie email) QString handle_; + // The last date the contact has been seen + QDateTime lastSeen_; + // The date the last message has been received + QDateTime lastMessageDate_; + // The contact's notes string + QString notes_; // Whether or not to notify online/offline status bool notifyOnline_; // A picture used for the "contact is online" balloons @@ -101,5 +129,9 @@ class ContactExtension : public QObject // Signal that the contact's picture path has changed void changedPicture(); + private slots: + // Set when the contact has been seen the last time + void setLastSeen(); + }; #endif diff --git a/src/contact/contactlist.cpp b/src/contact/contactlist.cpp index b7a3d1d..44cff88 100644 --- a/src/contact/contactlist.cpp +++ b/src/contact/contactlist.cpp @@ -20,6 +20,7 @@ #include "../contact/msnobject.h" #include "../network/specialgroups.h" +#include "../utils/kmessconfig.h" #include "../currentaccount.h" #include "../kmessdebug.h" #include "contact.h" @@ -35,7 +36,6 @@ #define KMESSDEBUG_CONTACTLIST_GENERAL #define KMESSDEBUG_CONTACTLIST_TOOLTIP #define KMESSDEBUG_CONTACTLIST_DISCONNECTION - #define KMESSDEBUG_CONTACTLIST_MODEL #endif @@ -179,10 +179,19 @@ Group * ContactList::addGroup( QString groupId, QString groupName ) Group *group = new Group( groupId, groupName ); groups_.append( group ); + if( group->isSpecialGroup() ) + { + group->setSortPosition( 9999 ); + } + else + { + group->setSortPosition( groups_.count() - 1 ); + connect( group, SIGNAL( changedPosition( Group*, int ) ), + this, SLOT( slotGroupMoved( Group*, int ) ) ); + } // Update the model. int row = rootNode_->childCount(); - beginInsertRows( QModelIndex(), row, row ); new ContactListModelItem( group, rootNode_ ); endInsertRows(); @@ -197,7 +206,7 @@ Group * ContactList::addGroup( QString groupId, QString groupName ) // Change a contact's status (and update the friendly name) -void ContactList::changeContactStatus( QString handle, QString friendlyName, Status status, +void ContactList::changeContactStatus( QString handle, Status status, QString friendlyName, uint capabilities, QString msnObjectString, bool showBaloon ) { // Ignore call if we are closing... @@ -221,7 +230,10 @@ void ContactList::changeContactStatus( QString handle, QString friendlyName, Sta oldStatus = contact->getStatus(); // Update the settings - contact->setFriendlyName( friendlyName ); + if( ! friendlyName.isEmpty() ) + { + contact->setFriendlyName( friendlyName ); + } contact->setStatus( status, showBaloon ); contact->loadMsnObject( msnObjectString ); contact->setCapabilities( capabilities ); // also resets clientName if caps changed. @@ -239,14 +251,14 @@ void ContactList::changeContactStatus( QString handle, QString friendlyName, Sta // Signal that the contact has changed status if( oldStatus != status ) { - emit contactChangeStatus( contact, showBaloon ); + emit contactChangedStatus( contact, showBaloon ); forwardDataChanged( rootNode_->childContacts( handle ) ); } // Switch the contact between the Offline and Online groups as needed if( wasOnline != contact->isOnline() ) { - // Get a reference to both groups + // Get references to both groups ContactListModelItem *onlineGroup = rootNode_->childGroup( SpecialGroups::ONLINE ); ContactListModelItem *offlineGroup = rootNode_->childGroup( SpecialGroups::OFFLINE ); if( ! onlineGroup || ! offlineGroup ) @@ -254,29 +266,50 @@ void ContactList::changeContactStatus( QString handle, QString friendlyName, Sta kWarning() << "The Online or Offline groups are not available!"; return; } + QModelIndex onlineGroupIndex ( createIndex( onlineGroup ->row(), 0, onlineGroup ) ); + QModelIndex offlineGroupIndex( createIndex( offlineGroup->row(), 0, offlineGroup ) ); + if( ! onlineGroupIndex.isValid() || ! offlineGroupIndex.isValid() ) + { + kWarning() << "The Online or Offline groups indices are not valid!"; + return; + } // Then find the contact in both groups and move it // NOTE The childContacts() calls in the two foreach loops should return only one item, // because we're searching for a contact into a specific group - if( contact->isOnline() ) { - foreach( ContactListModelItem *item, offlineGroup->childContacts( handle ) ) + ModelItemList offlineList( offlineGroup->childContacts( handle ) ); + foreach( ContactListModelItem *item, offlineList ) { + int oldPos = item->row(); + int newPos = onlineGroup->childCount(); + + // Move the item to the new group and notify the views + beginInsertRows( onlineGroupIndex, newPos, newPos ); + beginRemoveRows( offlineGroupIndex, oldPos, oldPos ); item->setParent( onlineGroup ); - forwardDataChanged( item ); + endRemoveRows(); + endInsertRows(); } } else { - foreach( ContactListModelItem *item, onlineGroup ->childContacts( handle ) ) + ModelItemList onlineList( onlineGroup->childContacts( handle ) ); + foreach( ContactListModelItem *item, onlineList ) { + int oldPos = item->row(); + int newPos = offlineGroup->childCount(); + + // Move the item to the new group and notify the views + beginInsertRows( offlineGroupIndex, newPos, newPos ); + beginRemoveRows( onlineGroupIndex, oldPos, oldPos ); item->setParent( offlineGroup ); - forwardDataChanged( item ); + endRemoveRows(); + endInsertRows(); } } } - } @@ -287,14 +320,14 @@ void ContactList::changeContactStatus( QString handle, QString friendlyName, Sta * @param parent The index to count columns of * @return int */ -int ContactList::columnCount( const QModelIndex &parent ) const +int ContactList::columnCount( const QModelIndex &/*parent*/ ) const { - if (! parent.isValid()) - { - return rootNode_->columnCount(); - } + if( rootNode_ == 0 ) + { + return 0; + } - return static_cast( parent.internalPointer() )->columnCount(); + return rootNode_->columnCount(); } @@ -317,10 +350,25 @@ bool ContactList::contactExists( QString handle ) QVariant ContactList::data( const QModelIndex &index, int role ) const { // If the index isn't valid or the caller wants a non-displayable role, do nothing - if( ! index.isValid() || role != Qt::DisplayRole ) + if( role != Qt::DisplayRole && role != Qt::UserRole ) + { +#ifdef KMESSDEBUG_CONTACTLISTMODEL + kDebug() << "Role is not useable:" << role << "- Index:" << index; +#endif return QVariant(); + } - return static_cast( index.internalPointer() )->data( index.column() ); + ContactListModelItem *item = static_cast( index.internalPointer() ); + + if( ! index.isValid() || ! item ) + { +#ifdef KMESSDEBUG_CONTACTLISTMODEL + kDebug() << "Invalid item for index:" << index; +#endif + return QVariant(); + } + + return item->data( ( role == Qt::DisplayRole ) ? index.column() : 1 ); } @@ -334,9 +382,9 @@ QVariant ContactList::data( const QModelIndex &index, int role ) const * @param start Item in the model where to start from * @param depth Current search depth */ -void ContactList::dump( ContactListModelItem *start, int depth ) +void ContactList::dump( ContactListModelItem *start, int depth ) const { -#ifdef KMESSDEBUG_CONTACTLIST_MODEL +#ifdef KMESSDEBUG_CONTACTLISTMODEL bool started = false; if( ! start ) { @@ -350,6 +398,7 @@ void ContactList::dump( ContactListModelItem *start, int depth ) kDebug(); kDebug() << "Contact List model dump"; kDebug() << "--------------------------------------"; + kDebug() << "Root @" << (void*)rootNode_; started = true; } @@ -364,16 +413,22 @@ void ContactList::dump( ContactListModelItem *start, int depth ) switch( type ) { case ContactListModelItem::ItemContact: - kDebug() << spacer << item->data( 1 ).toInt() << ") Contact:" << item->data( 0 ).toMap()["handle"].toString(); + kDebug() << spacer << (i+1) << ") Contact:" + << item->data( 0 ).toMap()["handle"].toString() + << "(" << item->data( 1 ).toInt() << ") " + "@" << (void*)item; break; case ContactListModelItem::ItemGroup: - kDebug() << spacer << item->data( 1 ).toInt() << ") Group:" << item->data( 0 ).toMap()["id"].toString(); + kDebug() << spacer << (i+1) << ") Group:" + << item->data( 0 ).toMap()["id"].toString() + << "(" << item->data( 1 ).toInt() << ") " + "@" << (void*)item; dump( item, depth + 1 ); break; default: - kDebug() << spacer << "Unknown type of item: " + type; + kDebug() << spacer << "Unknown type of item: " + type << "@" << (void*)item; break; } } @@ -390,6 +445,83 @@ void ContactList::dump( ContactListModelItem *start, int depth ) +// Find out if a model index contains other indices +bool ContactList::hasChildren( const QModelIndex &parent ) const +{ + if( parent.column() > 0 ) + { + return false; + } + + if( ! parent.isValid() ) + { + if( rootNode_ == 0 ) + { + return false; + } + + return ( rootNode_->childCount() > 0 ); + } + + ContactListModelItem *item = static_cast( parent.internalPointer() ); + + if( ! item ) + { + return false; + } + + return ( item->childCount() > 0 ); +} + + + +// Find out if the model contains a valid index at the specified position +bool ContactList::hasIndex( int row, int column, const QModelIndex &parent ) const +{ + if( ! parent.isValid() ) + { + if( rootNode_ == 0 ) + { + return false; + } + + return ( ( row >= 0 && row < rootNode_-> childCount() ) + && ( column >= 0 && column < rootNode_->columnCount() ) ); + } + + if( parent.column() > 0 ) + { + return false; + } + + ContactListModelItem *item = static_cast( parent.internalPointer() ); + + if( ! item ) + { + return false; + } + + return ( ( row >= 0 && row < item-> childCount() ) + && ( column >= 0 && column < item->columnCount() ) ); +} + + + +// Find out if a group contains contacts +bool ContactList::isGroupEmpty( const QString &groupId ) const +{ + ContactListModelItem *item = rootNode_->childGroup( groupId ); + if( item == 0 ) + { + kWarning() << "Cannot find group" << groupId; + return false; + } + + return ( item->childCount() <= 0 ); +} + + + /** * Return the flags which characterize the index * @@ -415,7 +547,7 @@ Qt::ItemFlags ContactList::flags( const QModelIndex &index ) const */ void ContactList::forwardDataChanged( ContactListModelItem *item ) { - forwardDataChanged( ( ModelItemList() << item ) ); + forwardDataChanged( ModelItemList() << item ); } @@ -423,26 +555,39 @@ void ContactList::forwardDataChanged( ContactListModelItem *item ) /** * Emits the Data Changed signal on some items * - * @param item The list of items which changed + * @param itemList The list of items which changed */ void ContactList::forwardDataChanged( ModelItemList itemList ) { if( itemList.isEmpty() ) { -#ifdef KMESSDEBUG_CONTACTLIST_MODEL +#ifdef KMESSDEBUG_CONTACTLISTMODEL kDebug() << "Called with an empty list!"; #endif return; } - foreach( ContactListModelItem* item, itemList ) + foreach( ContactListModelItem *item, itemList ) { - // Get an index for the parent of this item - QModelIndex parent( createIndex( item->parent()->row(), 0, item->parent() ) ); + QModelIndex changedIndex ( createIndex( item->row(), 0, item ) ); - // Get an index for the changed item itself and signal that it's changed - QModelIndex updatedIndex( index( item->row(), 0, parent ) ); - emit dataChanged( updatedIndex, updatedIndex ); +/* + // Useful debugging statements, but way too verbose +#ifdef KMESSDEBUG_CONTACTLISTMODEL + kDebug() << "--------------------------------------------------"; + kDebug() << "Item :" << item; + kDebug() << "Root item :" << rootNode_; + kDebug() << "Parent item :" << item->parent(); + kDebug() << "Index :" << changedIndex; + kDebug() << "Parent index :" << changedIndex.parent(); + if( changedIndex.parent().isValid() ) + kDebug() << "Parent index refers to:" << static_cast( changedIndex.parent().internalPointer() ); + else + kDebug() << "Parent index refers to: Root, or a broken item"; + kDebug() << "Parent index's parent :" << changedIndex.parent().parent(); +#endif +*/ + emit dataChanged( changedIndex, changedIndex ); } } @@ -499,13 +644,28 @@ Group* ContactList::getGroupById( QString groupId ) const // Return the group with the given sort position -Group* ContactList::getGroupBySortPosition(int sortPosition) const +Group* ContactList::getGroupBySortPosition( int sortPosition, bool next ) const { - foreach( Group *group, groups_ ) + if( next ) { - if ( group->getSortPosition() == sortPosition ) + foreach( Group *group, groups_ ) { - return group; + if ( group->getSortPosition() >= sortPosition && ! group->isSpecialGroup() ) + { + return group; + } + } + } + else + { + Group *group; + for( int i = groups_.count() - 1; i >= 0; i-- ) + { + group = groups_.at( i ); + if ( group->getSortPosition() <= sortPosition && ! group->isSpecialGroup() ) + { + return group; + } } } @@ -542,7 +702,7 @@ bool ContactList::groupExists( QString groupId ) */ QVariant ContactList::headerData( int section, Qt::Orientation orientation, int role ) const { - if( orientation == Qt::Horizontal && role == Qt::DisplayRole ) + if( rootNode_ && orientation == Qt::Horizontal && role == Qt::DisplayRole ) return rootNode_->data( section ); return QVariant(); @@ -604,7 +764,7 @@ QModelIndex ContactList::parent( const QModelIndex &index ) const ContactListModelItem *item = static_cast( index.internalPointer() ); - if( ! item ) + if( ! item || item == rootNode_ ) { return QModelIndex(); } @@ -628,22 +788,17 @@ QModelIndex ContactList::parent( const QModelIndex &index ) const * and when changes group, for example when it is moved or copied from a group to another. * First it identifies lists and groups where the contact was and will be; then the changes are applied. * The contact's list items are then iteratively moved from the old to the new lists/groups, and any - * remaining addition and removal is taken care of. + * remaining addition and removal is performed. * * @param contact The contact to update in the model */ void ContactList::slotContactMoved( Contact *contact ) { - // The oldItems will be copied into the newNodes - ModelItemList oldItems; + ModelItemList oldNodes; ModelItemList newNodes; QStringList groupIds = contact->getGroupIds(); - // Add the groups to the list of new groups of which the contact is member - if( groupIds.isEmpty() ) - { - newNodes << rootNode_; - } + // Add the current groups to the nodes in which the contact should now be visible foreach( QString groupId, groupIds ) { ContactListModelItem *item = rootNode_->childGroup( groupId ); @@ -653,9 +808,15 @@ void ContactList::slotContactMoved( Contact *contact ) } } - // Add the lists to the list of new groups of which the contact is member + // Add the current lists to the nodes in which the contact should now be visible if( contact->isFriend() ) { + // Friends with no groups are displayed in root + if( groupIds.isEmpty() ) + { + newNodes << rootNode_; + } + if( contact->isOnline() ) { newNodes << rootNode_->childGroup( SpecialGroups::ONLINE ); @@ -677,8 +838,10 @@ void ContactList::slotContactMoved( Contact *contact ) } } - // Loop through the nodes which contain this contact, avoid moving the contact if it's still in the same group/list - foreach( ContactListModelItem *oldNode, rootNode_->childContacts( contact->getHandle() ) ) + // Loop through the nodes which did contain this contact. + // Moves items between groups only: if the contact is still in a group, don't move it + ModelItemList itemsList( rootNode_->childContacts( contact->getHandle() ) ); + foreach( ContactListModelItem *oldNode, itemsList ) { if( newNodes.contains( oldNode->parent() ) ) { @@ -688,14 +851,14 @@ void ContactList::slotContactMoved( Contact *contact ) else { // It's not in this node anymore, we can move this node elsewhere - oldItems << oldNode; + oldNodes << oldNode; } } // The contact is still in the same nodes, avoid any moving around - if( oldItems.isEmpty() && newNodes.isEmpty() ) + if( oldNodes.isEmpty() && newNodes.isEmpty() ) { -#ifdef KMESSDEBUG_CONTACTLIST_MODEL +#ifdef KMESSDEBUG_CONTACTLISTMODEL kDebug() << "Not moving anything, the contact's nodes are unchanged."; #endif // Just update the contact's nodes @@ -703,30 +866,20 @@ void ContactList::slotContactMoved( Contact *contact ) return; } -#ifdef KMESSDEBUG_CONTACTLIST_MODEL - kDebug() << "Moving" << oldItems.count() << "items of contact" << contact->getHandle() << "to" << newNodes.count() << "nodes."; +#ifdef KMESSDEBUG_CONTACTLISTMODEL + kDebug() << "Moving" << contact->getHandle() << "from nodes:" << oldNodes << "to nodes:" << newNodes; #endif // Move the contact's items between changed nodes - for( int idx = 0; idx < qMax( oldItems.count(), newNodes.count() ); ++idx ) + for( int idx = 0; idx < qMax( oldNodes.count(), newNodes.count() ); ++idx ) { - bool hasOldNode = ( idx < oldItems.count() ); + bool hasOldNode = ( idx < oldNodes.count() ); bool hasNewNode = ( idx < newNodes.count() ); int insertIntoPos, removeFromPos; QModelIndex oldParentIndex, newParentIndex; ContactListModelItem *item = 0, *oldNode = 0, *newNode = 0; - // If there's an item to remove from a node, start a removal process - if( hasOldNode ) - { - item = oldItems.at( idx ); - oldNode = item->parent(); - removeFromPos = item->row(); - oldParentIndex = ( oldNode == rootNode_ ) ? QModelIndex() : index( oldNode->row(), 0, QModelIndex() ); - - beginRemoveRows( oldParentIndex, removeFromPos, removeFromPos ); - } // If there's an item to add to a node, start an addition process if( hasNewNode ) { @@ -736,6 +889,16 @@ void ContactList::slotContactMoved( Contact *contact ) beginInsertRows( newParentIndex, insertIntoPos, insertIntoPos ); } + // If there's an item to remove from a node, start a removal process + if( hasOldNode ) + { + item = oldNodes.at( idx ); + oldNode = item->parent(); + removeFromPos = item->row(); + oldParentIndex = ( oldNode == rootNode_ ) ? QModelIndex() : index( oldNode->row(), 0, QModelIndex() ); + + beginRemoveRows( oldParentIndex, removeFromPos, removeFromPos ); + } // Move the contact between two nodes if( hasOldNode && hasNewNode ) @@ -754,22 +917,50 @@ void ContactList::slotContactMoved( Contact *contact ) } // Complete the addition and/or deletion process - if( hasNewNode ) - { - endInsertRows(); - } if( hasOldNode ) { endRemoveRows(); } + if( hasNewNode ) + { + endInsertRows(); + } + } +} + + + +// Forward from a group that it has moved +void ContactList::slotGroupMoved( Group *group, int newPosition ) +{ + // Find out which group was replaced by this one + int oldPosition = groups_.indexOf( group ); + Group *oldGroup = groups_.at( newPosition ); + + if( newPosition < groups_.count() && oldPosition != -1 ) + { + groups_.swap( oldPosition, newPosition ); } -#ifdef KMESSDEBUG_CONTACTLIST_MODEL - kDebug() << "Moving complete. sorting the list."; -#endif + // Signal that the groups have changed - // A lot of items have possibly changed, sort the list again - sort(); + ContactListModelItem *newPosItem = rootNode_->childGroup( group->getId() ); + ContactListModelItem *oldPosItem = rootNode_->childGroup( oldGroup->getId() ); + + int newPosRow = newPosItem->row(); + int oldPosRow = oldPosItem->row(); + + QModelIndex newPosIndex( createIndex( newPosRow, 0, newPosItem ) ); + QModelIndex oldPosIndex( createIndex( oldPosRow, 0, oldPosItem ) ); + + if( oldPosRow < newPosRow ) + { + emit dataChanged( oldPosIndex, newPosIndex ); + } + else + { + emit dataChanged( newPosIndex, oldPosIndex ); + } } @@ -831,14 +1022,18 @@ void ContactList::removeGroup( QString groupId ) int row = nodeToRemove->row(); - // Remove the group + // Delete the group's node in the model beginRemoveRows( QModelIndex(), row, row ); - groups_.removeAll( group ); + delete nodeToRemove; endRemoveRows(); - emit groupRemoved( group ); // Signal the UI + // Also delete it from the internal list of groups + groups_.removeAll( group ); - delete nodeToRemove; + // Signal the deletion to the UI + emit groupRemoved( group ); + + // When all receivers have deleted the group from their lists, we delete it too delete group; } @@ -870,8 +1065,7 @@ void ContactList::renameGroup( QString groupId, QString groupName ) Group *group = getGroupById( groupId ); if( group == 0 ) { - kWarning() << "Group '" << groupId << "' " - << "not found in the contact list." << endl; + kWarning() << "Group" << groupId << "not found in the contact list."; return; } @@ -879,6 +1073,8 @@ void ContactList::renameGroup( QString groupId, QString groupName ) // If the group exists in the list, signal that it's changed forwardDataChanged( rootNode_->childGroup( groupId ) ); + + emit groupChanged( group ); // Signal the UI } @@ -890,6 +1086,29 @@ void ContactList::renameGroup( QString groupId, QString groupName ) */ void ContactList::reset( bool restore ) { + // Empty the model structure and reset it + if( rootNode_ ) + { +#ifdef KMESSDEBUG_CONTACTLISTMODEL + kDebug() << "Resetting model tree..."; +#endif + + // Delete everything from the model tree + for( int row = 0; row < rootNode_->childCount(); row++ ) + { + beginRemoveRows( QModelIndex(), row, row ); + delete rootNode_->child( row ); + endRemoveRows(); + } + + // Notify views that the old model is gone + QAbstractItemModel::reset(); + + // Delete the root node + delete rootNode_; + rootNode_ = 0; + } + if( contacts_.count() || groups_.count() ) { #ifdef KMESSDEBUG_CONTACTLIST_DISCONNECTION @@ -909,23 +1128,6 @@ void ContactList::reset( bool restore ) groups_.clear(); } - // Be quiet if we're not doing anything. - if( rootNode_ == 0 && ! restore ) - { - return; - } - -#ifdef KMESSDEBUG_CONTACTLIST_MODEL - kDebug() << "Resetting model tree..."; -#endif - - // Delete the root node - delete rootNode_; - rootNode_ = 0; - - // Notify views that the old model is gone - QAbstractItemModel::reset(); - // Do not recreate the groups if( ! restore ) { @@ -943,33 +1145,64 @@ void ContactList::reset( bool restore ) #ifdef KMESSTEST KMESS_ASSERT( groups_.count() == 4 ); + KMESS_ASSERT( rootNode_->childCount() == 4 ); #endif } // Read groups and contacts properties -void ContactList::readProperties( const KConfigGroup &config ) +void ContactList::readProperties() { #ifdef KMESSDEBUG_CONTACTLIST_GENERAL kDebug() << "Loading properties for the contact list"; #endif - // Get the position of the groups and contacts settings of this account - KConfigGroup groupsConfig = config.group("Groups"); - KConfigGroup contactsConfig = config.group("Contacts"); + KConfigGroup config; + QString handle = CurrentAccount::instance()->getHandle(); + + config = KMessConfig::instance()->getContactListConfig( handle, "Groups" ); // Load all groups - foreach( Group *group, groups_ ) + QList sortedList( groups_ ); + Group *group; + int newPosition; + + for( int i = 0; i < groups_.count(); i++ ) { - group->readProperties( groupsConfig ); + group = groups_.value( i ); + group->readProperties( config ); + + // Signal that this group has changed, so it will be correctly repainted + forwardDataChanged( rootNode_->childGroup( group->getId() ) ); + + if( group->isSpecialGroup() ) + { + continue; + } + + newPosition = group->getSortPosition(); + if( newPosition >= groups_.count() ) + { + newPosition = groups_.count() - 1; + } + + sortedList.swap( i, newPosition ); } + groups_.clear(); + groups_ = sortedList; + + config.sync(); + config = KMessConfig::instance()->getContactListConfig( handle, "Contacts" ); + // Load all contact extensions foreach( Contact *contact, contacts_ ) { - contact->readProperties( contactsConfig ); + contact->readProperties( config ); } + + config.sync(); } @@ -982,44 +1215,33 @@ void ContactList::readProperties( const KConfigGroup &config ) */ int ContactList::rowCount( const QModelIndex &parent ) const { - ContactListModelItem *parentItem; + ContactListModelItem *parentItem = 0; + if( rootNode_ == 0 ) + { + return 0; + } if( ! parent.isValid() ) { parentItem = rootNode_; } - else if( parent.column() > 0 ) - { - return 0; - } else { parentItem = static_cast( parent.internalPointer() ); } + if( ! parentItem ) + { + return 0; + } + return parentItem->childCount(); } -// Sort the model's items -void ContactList::sort( int column, Qt::SortOrder order ) -{ - Q_UNUSED( column ); - - // Signal the views that we're about to change the model someway - emit layoutAboutToBeChanged(); - - rootNode_->sort( order ); - - // Complete the model update - emit layoutChanged(); -} - - - // Save groups and contacts properties -void ContactList::saveProperties( KConfigGroup &config ) +void ContactList::saveProperties() { #ifdef KMESSDEBUG_CONTACTLIST_GENERAL kDebug() << "Saving properties for the contact list"; @@ -1032,19 +1254,25 @@ void ContactList::saveProperties( KConfigGroup &config ) return; } - // Get the position of the groups and contacts settings of this account - KConfigGroup groupsConfig = config.group("Groups"); - KConfigGroup contactsConfig = config.group("Contacts"); - + // Get the position of the contacts settings of this account + KConfigGroup config; + QString handle = CurrentAccount::instance()->getHandle(); // Skip saving groups if there aren't any if( groups_.count() > 0 ) { + config = KMessConfig::instance()->getContactListConfig( handle, "Groups" ); + // Save all groups foreach( Group *group, groups_ ) { - group->saveProperties( groupsConfig ); + // The position for contact is the same of the group in qlist + group->setSortPosition( groups_.indexOf( group ) ); + group->saveProperties( config ); } + + // Write the data now! + config.sync(); } #ifdef KMESSDEBUG_CONTACTLIST_GENERAL else @@ -1056,15 +1284,17 @@ void ContactList::saveProperties( KConfigGroup &config ) // Skip saving contacts if there aren't any, as above if( ! contacts_.isEmpty() ) { + config = KMessConfig::instance()->getContactListConfig( handle, "Contacts" ); + // We want to delete unused contact info; so here we get a list of all contacts and remove // the used ones. Then we remove what's left in this list - QStringList pendingRemoval = contactsConfig.groupList(); + QStringList pendingRemoval = config.groupList(); // Save all contact extensions foreach( Contact *contact, contacts_ ) { pendingRemoval.removeAll( contact->getHandle() ); - contact->saveProperties( contactsConfig ); + contact->saveProperties( config ); } // Delete the remaining contacts info, which at this point are only old contacts not in list anymore @@ -1077,14 +1307,17 @@ void ContactList::saveProperties( KConfigGroup &config ) #endif // Remove the custom picture associated with this contact, if there is any - contactConfig = contactsConfig.group( unusedContact ); + contactConfig = config.group( unusedContact ); picture.setFileName( contactConfig.readEntry( "pictureFile", "" ) ); if( picture.exists() ) { picture.remove(); } - contactsConfig.deleteGroup( unusedContact ); + config.deleteGroup( unusedContact ); } + + // Write the data now! + config.sync(); } #ifdef KMESSDEBUG_CONTACTLIST_GENERAL else @@ -1092,29 +1325,6 @@ void ContactList::saveProperties( KConfigGroup &config ) kDebug() << "No contacts to save"; } #endif - - // Write the data now! - config.sync(); -} - - - -// Set a contact to offline -void ContactList::setContactOffline( QString handle ) -{ - Contact *contact; - - contact = getContactByHandle( handle ); - if ( contact == 0 ) - { - kDebug() << "Couldn't find contact " << handle << " in the contact list."; - return; - } - - contact->setStatus( STATUS_OFFLINE ); - - // If the contact exists in the list, signal that it's changed - slotContactMoved( contact ); } diff --git a/src/contact/contactlist.h b/src/contact/contactlist.h index 4e862e1..bca1daf 100644 --- a/src/contact/contactlist.h +++ b/src/contact/contactlist.h @@ -19,21 +19,17 @@ #ifndef CONTACTLIST_H #define CONTACTLIST_H -#include -#include -#include - -#include - #include "contact/msnstatus.h" #include "contactlistmodelitem.h" +#include +#include + // Forward declarations class Contact; class CurrentAccount; class Group; -class KConfig; class KMessTest; @@ -72,7 +68,7 @@ class ContactList : public QAbstractItemModel // Add a group to the contact list Group * addGroup( QString groupId, QString groupName ); // Change a contact's status (and update the friendly name) - void changeContactStatus( QString handle, QString friendlyName, Status status, + void changeContactStatus( QString handle, Status status, QString friendlyName = QString(), uint capabilities = 0, QString msnObjectString = QString(), bool showBaloon = true ); // Return the contact with the given guid Contact* getContactByGuid( QString guid ) const; @@ -83,11 +79,13 @@ class ContactList : public QAbstractItemModel // Return the group with the given id Group* getGroupById( QString groupId ) const; // Return the group with the given sort position - Group* getGroupBySortPosition(int sortPosition) const; + Group* getGroupBySortPosition( int sortPosition, bool next ) const; // Return the list of groups const QList& getGroupList() const; + // Find out if a group contains contacts + bool isGroupEmpty( const QString &groupId ) const; // Read groups and contacts properties - void readProperties( const KConfigGroup &config ); + void readProperties(); // Remove a group void removeGroup( QString groupId ); // Change a contact's name @@ -97,9 +95,7 @@ class ContactList : public QAbstractItemModel // Restore the orginal state of the contact list (empty it) void reset( bool restore = true ); // Save groups and contacts properties - void saveProperties( KConfigGroup &config ); - // Set a contact to offline - void setContactOffline( QString handle ); + void saveProperties(); public: // Public model methods // Get the number of columns present in an index @@ -107,9 +103,13 @@ class ContactList : public QAbstractItemModel // Return the data contained by an index in the model QVariant data( const QModelIndex &index, int role ) const; // Dumps the contact list contents to the debug output - void dump( ContactListModelItem *start = 0, int depth = 1 ); + void dump( ContactListModelItem *start = 0, int depth = 1 ) const; // Return the flags which characterize the index Qt::ItemFlags flags( const QModelIndex &index ) const; + // Find out if a model index contains other indices + bool hasChildren( const QModelIndex &parent ) const; + // Find out if the model contains a valid index at the specified position + bool hasIndex( int row, int column, const QModelIndex &parent = QModelIndex() ) const; // Return the text for a list or tree column header. QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const; // Obtain a model index for a specificly located item @@ -118,8 +118,6 @@ class ContactList : public QAbstractItemModel QModelIndex parent( const QModelIndex &index ) const; // Get the number of rows present in an index int rowCount( const QModelIndex &parent = QModelIndex() ) const; - // Sort the model's items - void sort( int column = 0, Qt::SortOrder order = Qt::AscendingOrder ); private: // Private methods // Return whether or not the contact with the given handle exists @@ -133,11 +131,13 @@ class ContactList : public QAbstractItemModel private slots: // Private slots // Forward from a contact that is has moved - void slotContactMoved(Contact *contact); + void slotContactMoved( Contact *contact ); + // Forward from a group that is has move + void slotGroupMoved( Group *group, int newPosition ); // Forward from a contact that it is offline - void slotForwardContactOffline(Contact *contact, bool showBaloon); + void slotForwardContactOffline( Contact *contact, bool showBaloon ); // Forward from a contact that it is contact is online - void slotForwardContactOnline(Contact *contact, bool showBaloon); + void slotForwardContactOnline( Contact *contact, bool showBaloon ); private: // Private attributes @@ -149,16 +149,18 @@ class ContactList : public QAbstractItemModel ContactListModelItem *rootNode_; signals: // Signals - // Signal that a contact changed it's status. - void contactChangeStatus( Contact *contact, bool showBaloon ); // Signal that a contact changed it's msnobject. void contactChangedMsnObject(Contact *contact); + // Signal that a contact changed it's status. + void contactChangedStatus( Contact *contact, bool showBaloon ); // Signal that a contact is offline void contactOffline( Contact *contact, bool showBaloon ); // Signal that a contact is online void contactOnline( Contact *contact, bool showBaloon ); // Signal that a group has been added void groupAdded( const Group *group ); + // Signal that a group has been modified + void groupChanged(const Group *group); // Signal that a group has been added void groupRemoved(const Group *group); }; diff --git a/src/contact/contactlistmodelitem.cpp b/src/contact/contactlistmodelitem.cpp index bea68f0..5838eaf 100644 --- a/src/contact/contactlistmodelitem.cpp +++ b/src/contact/contactlistmodelitem.cpp @@ -17,12 +17,12 @@ #include "contactlistmodelitem.h" +#include "../network/specialgroups.h" #include "contact.h" +#include "contactextension.h" #include "group.h" #include "kmessdebug.h" -#include - /** @@ -124,7 +124,7 @@ void ContactListModelItem::appendChild( ContactListModelItem *item ) */ ContactListModelItem *ContactListModelItem::child( int row ) { - if( row >= childItems_.count() ) + if( row < 0 || row >= childItems_.count() ) { return 0; } @@ -219,38 +219,6 @@ int ContactListModelItem::columnCount() const -/** - * Find if one item is lesser than another - * - * @param firstItem First item to compare - * @param secondItem Other item to compare - * @return bool - */ -bool ContactListModelItem::compareItems( const ContactListModelItem *firstItem, const ContactListModelItem *secondItem ) -{ - if( ! firstItem || ! secondItem ) - { - kWarning() << "Attempted comparison between invalid items!"; - return false; - } - - // Save the items' values for a faster comparison - int first = firstItem ->data( 1 ).toInt(); - int second = secondItem->data( 1 ).toInt(); - - // Sort alphabetically contacts having the same status - if( first == second ) - { - int comparison = QString::localeAwareCompare( firstItem->data( 2 ).toString(), secondItem->data( 2 ).toString() ); - return ( comparison < 0 ); - } - - // The contacts are in different states - return ( first < second ); -} - - - /** * Return a collection of data from this item * @@ -266,7 +234,7 @@ QVariant ContactListModelItem::data( int column ) const // Output the sorting information if( column == 1 ) { - int sortIndex = 9999; + int sortIndex; if( itemType_ == ItemContact ) { @@ -287,29 +255,77 @@ QVariant ContactListModelItem::data( int column ) const case STATUS_OFFLINE: default: sortIndex = 8; break; } + + // Add to the index the first character of the friendly name, so that + // when two contacts have the same status, there's a (rough but fast) + // sorting method + QString sortChar( contact->getFriendlyName().mid( 0, 1 ) ); + if( ! sortChar.isEmpty() ) + { + sortIndex += sortChar.at( 0 ).toUpper().toAscii(); + } } else if( itemType_ == ItemGroup ) { Group *group = static_cast( object_ ); + QString groupId = group->getId(); - // This number is set so that the groups always come after the contacts - sortIndex = group->getSortPosition() + 9; + // These numbers are set so that the groups always come after the contacts in the root group + + // Non-special groups must be the first + if( ! group->isSpecialGroup() ) + { + sortIndex = 1000 + group->getSortPosition(); + } + // The Online group must come right after them + else if( groupId == SpecialGroups::ONLINE ) + { + sortIndex = 32763; + } + // The Offline group must follow Online + else if( groupId == SpecialGroups::OFFLINE ) + { + sortIndex = 32764; + } + // Then the remaining special groups, Allowed + else if( groupId == SpecialGroups::ALLOWED ) + { + sortIndex = 32765; + } + // And Removed + else + { + sortIndex = 32766; + } } return sortIndex; } - // Return a string to use for quick item comparison + // Return a string for full contact list search if( column == 2 ) { if( itemType_ == ItemContact ) { Contact *contact = static_cast( object_ ); - return contact->getFriendlyName(); + + // Enable searching by email, friendly name and personal message + QString searchBy( contact->getHandle() + " " + + contact->getFriendlyName() + " " + + contact->getPersonalMessage() ); + + // Enable searching by email, true friendly name, and alias + if( contact->getExtension() && contact->getExtension()->getUseAlternativeName() ) + { + return searchBy + " " + contact->getTrueFriendlyName(); + } + + return searchBy; } else if( itemType_ == ItemGroup ) { Group *group = static_cast( object_ ); + return group->getName(); } } @@ -317,6 +333,7 @@ QVariant ContactListModelItem::data( int column ) const // Column 1 and 2 are done, and we have 3 columns only if( column != 0 ) { + kWarning() << "Invalid column number" << column << "given!"; return QVariant(); } @@ -327,18 +344,24 @@ QVariant ContactListModelItem::data( int column ) const { Contact *contact = static_cast( object_ ); - itemData[ "type" ] = ItemContact; - itemData[ "handle" ] = contact->getHandle(); - itemData[ "friendly" ] = contact->getFriendlyName(); - itemData[ "trueFriendly" ] = contact->getTrueFriendlyName(); - itemData[ "displayPicture" ] = contact->getContactPicturePath(); - itemData[ "personalMessage" ] = contact->getPersonalMessage(); - itemData[ "groups" ] = contact->getGroupIds(); - itemData[ "mediaType" ] = contact->getCurrentMediaType(); - itemData[ "mediaString" ] = contact->getCurrentMediaString(); - itemData[ "status" ] = (int) contact->getStatus(); - itemData[ "isBlocked" ] = contact->isBlocked(); - itemData[ "clientName" ] = contact->getClientAppName(); + itemData[ "type" ] = ItemContact; + itemData[ "handle" ] = contact->getHandle(); + itemData[ "friendly" ] = contact->getFriendlyName( STRING_CLEANED ); + itemData[ "friendlyFormatted" ] = contact->getFriendlyName( STRING_FORMATTED ); + itemData[ "trueFriendly" ] = contact->getTrueFriendlyName( STRING_CLEANED ); + itemData[ "trueFriendlyFormatted" ] = contact->getTrueFriendlyName( STRING_FORMATTED ); + itemData[ "personalMessage" ] = contact->getPersonalMessage( STRING_CLEANED ); + itemData[ "personalMessageFormatted" ] = contact->getPersonalMessage( STRING_FORMATTED ); + itemData[ "displayPicture" ] = contact->getContactPicturePath(); + itemData[ "groups" ] = contact->getGroupIds(); + itemData[ "mediaType" ] = contact->getCurrentMediaType(); + itemData[ "mediaString" ] = contact->getCurrentMediaString(); + itemData[ "status" ] = (int) contact->getStatus(); + itemData[ "isBlocked" ] = contact->isBlocked(); + itemData[ "isReverse" ] = contact->isReverse(); + itemData[ "clientName" ] = contact->getClientAppName(); + itemData[ "lastSeen" ] = contact->getExtension()->getLastSeen(); + itemData[ "lastMessage" ] = contact->getExtension()->getLastMessageDate(); if( parentNode_->object() ) { @@ -380,6 +403,7 @@ QVariant ContactListModelItem::data( int column ) const itemData[ "onlineContacts" ] = QString::number( numOnlineContacts ); itemData[ "totalContacts" ] = QString::number( childCount() ); itemData[ "isExpanded" ] = group->isExpanded(); + itemData[ "isSpecialGroup" ] = group->isSpecialGroup(); } else { @@ -514,46 +538,6 @@ void ContactListModelItem::setParent( ContactListModelItem *newParent ) -/** - * Sort this item's children - * - * Currently sorting is performed by status only. - * Adding sort ordering would require an UI option and another compareItems method. - * - * @param order Sorting order. Currently ignored. - * @param sortChildren False to avoid sorting child nodes after this node's items. - */ -void ContactListModelItem::sort( Qt::SortOrder order, bool sortChildren ) -{ - Q_UNUSED( order ); - - // Contacts have no children - if( childItems_.count() == 0 ) - { - return; - } - - // Stable sort the child items: already ordered items are not changed - qStableSort( childItems_.begin(), childItems_.end(), ContactListModelItem::compareItems ); - - // This option can be used to sort a single group, or the main group alone - if( ! sortChildren ) - { - return; - } - - // Only sort child groups, to sort faster - foreach( ContactListModelItem *item, childItems_ ) - { - if( item->getType() == ItemGroup ) - { - item->sort( order ); - } - } -} - - - /** * Custom operator to display nodes and items in the debug output * diff --git a/src/contact/contactlistmodelitem.h b/src/contact/contactlistmodelitem.h index 58e6182..94d794d 100644 --- a/src/contact/contactlistmodelitem.h +++ b/src/contact/contactlistmodelitem.h @@ -18,9 +18,9 @@ #ifndef CONTACTLISTMODELITEM_H #define CONTACTLISTMODELITEM_H -#include #include #include +#include // Forward declarations @@ -41,15 +41,16 @@ QDebug operator<<( QDebug s, const ContactListModelItem *item ); /** - * This class represent a Contact List node or item in the Model/View paradigm. + * This class represent a Contact List node or item in the Model/View paradigm. * - * The Model is a way to universally represent data which could be reused later by different views: - * for example, the contact list, or a list of contacts available to be invited in a chat. - * The data output by the model can be easily expanded for future uses. - * A model's item doesn't contain anything. A node is an element which contains other nodes or items. + * The Model is a way to universally represent data which could be reused later by different views: + * for example, the contact list, or a list of contacts available to be invited in a chat. + * The data output by the model can be easily expanded for future uses. + * A model's item doesn't contain anything. A node is an element which contains other nodes or items. * - * @author Valerio Pilo -*/ + * @author Valerio Pilo + * @ingroup Contact + */ class ContactListModelItem { public: // Public enumerations @@ -98,12 +99,6 @@ class ContactListModelItem int row() const; // Set another node to be the parent of this item void setParent( ContactListModelItem *newParent ); - // Sort this item's children - void sort( Qt::SortOrder order, bool sortChildren = true ); - - public: // Public static methods - // Compare this item to another, checking if this is less than the other - static bool compareItems( const ContactListModelItem *firstItem, const ContactListModelItem *secondItem ); private: // Private properties // The internal list of the item's children diff --git a/src/contact/group.cpp b/src/contact/group.cpp index 575ce49..f2e85c0 100644 --- a/src/contact/group.cpp +++ b/src/contact/group.cpp @@ -20,14 +20,7 @@ #include "../network/specialgroups.h" #include "../currentaccount.h" #include "../kmessdebug.h" - -#include -#include -#include - - -// Reset the first available group position, so the groups keep an unique number -int Group::nextAvailableGroupPosition_(0); +#include "../utils/kmessconfig.h" @@ -112,7 +105,7 @@ void Group::readProperties( const KConfigGroup &config ) // Obtain the sort positiong of this group. Special groups have no sorting. if( ! isSpecialGroup() ) { - sortPosition_ = groupConfig.readEntry( "sortPosition", nextAvailableGroupPosition_++ ); + sortPosition_ = groupConfig.readEntry( "sortPosition", sortPosition_ ); } else { @@ -157,7 +150,6 @@ void Group::setName(const QString& newName) if ( ( name_ != newName ) && ( newName != "" ) ) { name_ = newName; - emit nameChanged(); } } @@ -169,9 +161,8 @@ void Group::setSortPosition(int sortPosition) #ifdef KMESSDEBUG_GROUP kDebug() << "Group " << name_ << " new sort position = " << sortPosition; #endif - - sortPosition_ = sortPosition; - emit sortPositionChanged(); + sortPosition_ = sortPosition; + emit changedPosition( this, sortPosition_ ); } @@ -180,7 +171,6 @@ void Group::setSortPosition(int sortPosition) void Group::setExpanded(bool expanded) { isExpanded_ = expanded; - emit expandedStateChanged(); } diff --git a/src/contact/group.h b/src/contact/group.h index 2e2bb7b..0873c14 100644 --- a/src/contact/group.h +++ b/src/contact/group.h @@ -18,15 +18,9 @@ #ifndef GROUP_H #define GROUP_H -#include - #include -// Forward declarations -class KConfig; - - /** * @brief Data class for group information. @@ -82,18 +76,8 @@ class Group : public QObject // The group's sort value int sortPosition_; - private: // Private static attributes - // Default sorting position for new groups - static int nextAvailableGroupPosition_; - - signals: // Public signals - // The expanded state was changed - void expandedStateChanged(); - // The name was changed - void nameChanged(); - // The sorting index was changed - void sortPositionChanged(); - + signals: + void changedPosition( Group*, int ); }; #endif diff --git a/src/contact/invitedcontact.h b/src/contact/invitedcontact.h index c52ef6d..3b8835e 100644 --- a/src/contact/invitedcontact.h +++ b/src/contact/invitedcontact.h @@ -30,6 +30,7 @@ * If your privacy settings allow this, contacts can always start a chat with you (even if they're not on your AL/BL/FL/RL lists). * * @author Mike K. Bennett + * @ingroup Contact */ class InvitedContact : public ContactBase { diff --git a/src/contact/msnobject.cpp b/src/contact/msnobject.cpp index b3a8223..bb5fa39 100644 --- a/src/contact/msnobject.cpp +++ b/src/contact/msnobject.cpp @@ -22,7 +22,6 @@ #include #include #include -#include #include diff --git a/src/contact/msnobject.h b/src/contact/msnobject.h index 16f7b00..eb901e8 100644 --- a/src/contact/msnobject.h +++ b/src/contact/msnobject.h @@ -30,7 +30,7 @@ * contact pictures, emoticons and backgrounds. * * @author Mike K. Bennett - * @ingroup Root + * @ingroup Contact */ class MsnObject { diff --git a/src/contact/msnstatus.cpp b/src/contact/msnstatus.cpp index cd3b3f5..91f490a 100644 --- a/src/contact/msnstatus.cpp +++ b/src/contact/msnstatus.cpp @@ -74,7 +74,7 @@ QPixmap MsnStatus::getIcon( const Status status, const Flags flags ) switch( flags ) { case FlagNone: break; - case FlagBlocked: iconOverlay = "dialog-cancel"; break; + case FlagBlocked: iconOverlay = "contact_busy_overlay"; break; case FlagWebMessenger: break; case FlagMobile: break; } @@ -86,7 +86,7 @@ QPixmap MsnStatus::getIcon( const Status status, const Flags flags ) if( ! iconOverlay.isEmpty() ) { // Add the overlay image to our icon - QPixmap overlayIcon = KIconLoader::global()->loadIcon( iconOverlay, KIconLoader::Small ); + QPixmap overlayIcon = KIconLoader::global()->loadIcon( iconOverlay, KIconLoader::User ); QImage iconImage = icon.toImage(); QImage overlayImage = overlayIcon.toImage(); diff --git a/src/contact/msnstatus.h b/src/contact/msnstatus.h index 75a91ef..f57da45 100644 --- a/src/contact/msnstatus.h +++ b/src/contact/msnstatus.h @@ -23,8 +23,9 @@ /** - * Available MSN states - */ + * Available MSN states + * @ingroup Contact + */ enum Status { STATUS_ONLINE = 0 @@ -40,10 +41,11 @@ enum Status /** - * Contact flags - * - * These can be used to apply icon overlays to the status icons - */ + * Contact flags + * + * These can be used to apply icon overlays to the status icons + * @ingroup Contact + */ enum Flags { FlagNone = 0 @@ -65,6 +67,7 @@ enum Flags * * @author Valerio Pilo * @author Richard Conway + * @ingroup Contact */ class MsnStatus { diff --git a/src/contactlistmodelfilter.cpp b/src/contactlistmodelfilter.cpp new file mode 100644 index 0000000..0c060d6 --- /dev/null +++ b/src/contactlistmodelfilter.cpp @@ -0,0 +1,289 @@ +/*************************************************************************** + contactlistmodelfilter.cpp - description + ------------------- + begin : Thu Jul 10 2008 + copyright : (C) 2008 by Valerio Pilo + email : valerio@kmess.org + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "contactlistmodelfilter.h" + +#include "contact/contactlistmodelitem.h" +#include "network/specialgroups.h" +#include "currentaccount.h" +#include "kmessdebug.h" + + + +// The constructor +ContactListModelFilter::ContactListModelFilter( QObject *parent ) +: QSortFilterProxyModel( parent ) +, showAllowed_ ( true ) +, showEmpty_ ( false ) +, showGroupsMode_( Account::VIEW_MIXED ) +, showOffline_ ( true ) +, showRemoved_ ( true ) +{ + // Set filtering options + setDynamicSortFilter( true ); + setFilterKeyColumn( 2 ); + setFilterRole( Qt::DisplayRole ); + setFilterCaseSensitivity( Qt::CaseInsensitive ); + setSortRole( Qt::UserRole ); + setSortCaseSensitivity( Qt::CaseInsensitive ); + + // Update the account-dependant options and re-sort the list + updateOptions(); + + // Now that we have a ref to the current account, connect the signals we need + connect( currentAccount_, SIGNAL( changedDisplaySettings() ), + this, SLOT ( updateOptions() ) ); + connect( currentAccount_, SIGNAL( changedViewMode() ), + this, SLOT ( updateOptions() ) ); +} + + + +/** + * Dumps the contact list contents to the debug output + * + * This method is temporary and for debugging purposes exclusively. + * This method is recursive. Do not call with any arguments, they are for internal use only. + * + * @param start Item in the model where to start from + * @param depth Current search depth + */ +void ContactListModelFilter::dump( QModelIndex start, int depth ) const +{ +#ifdef KMESSDEBUG_CONTACTLISTMODEL + bool started = false; + + if( ! start.isValid() ) + { + start = QModelIndex(); + kDebug() << "Contact List Filter model stats"; + kDebug() << "--------------------------------------"; + kDebug() << "Columns:" << columnCount(); + kDebug() << "Rows:" << rowCount(); + kDebug(); + kDebug() << "Contact List Filter model dump"; + kDebug() << "--------------------------------------"; + kDebug() << "Root @" << start; + started = true; + } + + QString spacer = QString().fill( '-', 2 * depth ) + ">"; + + // Print the current node's contents, and manage children recursively + for( int i = 0; i < rowCount( start ); i++ ) + { + QModelIndex itemIndex( index( i, 0, start ) ); + ModelDataList itemData( itemIndex.data().toMap() ); + + switch( itemData["type"].toInt() ) + { + case ContactListModelItem::ItemContact: + kDebug() << spacer << (i+1) << ") Contact:" + << itemData["handle"].toString() + << "@" << itemIndex; + break; + + case ContactListModelItem::ItemGroup: + kDebug() << spacer << (i+1) << ") Group:" + << itemData["id"].toString() + << "@" << itemIndex; + dump( itemIndex, depth + 1 ); + break; + + default: + kDebug() << spacer << "Unknown type of item: " + itemData["type"].toInt() << "@" << itemIndex; + break; + } + } + + if( started ) + { + kDebug() << "--------------------------------------"; + } +#else + Q_UNUSED( start ); + Q_UNUSED( depth ); +#endif +} + + + +/** + * @brief Determine if a row is visible or not + * + * Uses the internal data from the given index to determine if, according to the current + * account options, a row should be hid or shown. + * + * @param sourceRow Where the item to check is located inside the sourceParent index + * @param sourceParent The index containing the item to check + */ +bool ContactListModelFilter::filterAcceptsRow( int sourceRow, const QModelIndex& sourceParent ) const +{ + bool isVisible = true; + + // Retrieve the item data from the source model + QModelIndex index( sourceModel()->index( sourceRow, 0, sourceParent ) ); + QMap itemData( index.data().toMap() ); + + if( itemData.isEmpty() ) + { +#ifdef KMESSDEBUG_CONTACTLISTMODEL + kDebug() << "Item" << index << "does not contain any data!"; +#endif + return true; + } + + switch( itemData[ "type" ].toInt() ) + { + case ContactListModelItem::ItemContact: + + // Contacts in special groups are always visible. Their group may be not, though + if( ! itemData[ "isInSpecialGroup" ].toBool() ) + { + // Hide contacts without group when showing by online/offline + if( showGroupsMode_ == Account::VIEW_BYSTATUS ) + { + isVisible = false; + } + else if( showGroupsMode_ == Account::VIEW_BYGROUP ) + { + isVisible = ( showOffline_ || ( (Status) itemData[ "status" ].toInt() ) != STATUS_OFFLINE ); + } + else + { + isVisible = ( ( (Status) itemData[ "status" ].toInt() ) != STATUS_OFFLINE ); + } + } + + // Handle contact searches: the view sets the filter expression, and we use it here + if( ! filterRegExp().isEmpty() ) + { + isVisible = ( isVisible && QSortFilterProxyModel::filterAcceptsRow( sourceRow, sourceParent ) ); + } + +#ifdef KMESSDEBUG_CONTACTLISTMODEL + kDebug() << "Visibility check: contact" << itemData[ "handle" ].toString() << "is" + << ( isVisible ? "visible" : "hidden" ); +#endif + break; + + case ContactListModelItem::ItemGroup: + + if( itemData[ "id" ] == SpecialGroups::ALLOWED ) + { + isVisible = ( showAllowed_ ); + } + else if( itemData[ "id" ] == SpecialGroups::REMOVED ) + { + isVisible = ( showRemoved_ ); + } + else if( itemData[ "id" ] == SpecialGroups::ONLINE ) + { + isVisible = ( showGroupsMode_ == Account::VIEW_BYSTATUS ); + } + else if( itemData[ "id" ] == SpecialGroups::OFFLINE ) + { + isVisible = ( showOffline_ && + ( showGroupsMode_ == Account::VIEW_BYSTATUS || showGroupsMode_ == Account::VIEW_MIXED ) ); + + // Also enable the Offline group when the offline contacts within groups are not visible + if( ! isVisible && showGroupsMode_ == Account::VIEW_MIXED && ! filterRegExp().isEmpty() ) + { + isVisible = true; + } + } + else if( showGroupsMode_ == Account::VIEW_BYSTATUS ) + { + isVisible = false; + } + else if( ! showEmpty_ ) + { + if( showOffline_ && showGroupsMode_ != Account::VIEW_MIXED ) + { + isVisible = ( itemData[ "totalContacts" ].toInt() > 0 ); + } + else + { + isVisible = ( itemData[ "onlineContacts" ].toInt() > 0 ); + } + } + +#ifdef KMESSDEBUG_CONTACTLISTMODEL + kDebug() << "Visibility check: group" << itemData[ "name" ].toString() << "is" + << ( isVisible ? "visible" : "hidden" ); +#endif + break; + + default: + kWarning() << "Unknown item:" << itemData; + break; + + } + + return isVisible; +} + + + +/** + * @brief Set the original model which will be filtered + * + * Connects the source model to the method which sorts the list when something in the source model is changed, + * then works as a normal setSourceModel(). + * + * @param sourceModel The model to filter + */ +void ContactListModelFilter::setSourceModel( QAbstractItemModel *newSourceModel ) +{ + // Disconnect from the first model (if any), and connect to the new one + if( sourceModel() ) + { + disconnect( sourceModel(), 0, this, 0 ); + } + + connect( newSourceModel, SIGNAL( dataChanged(const QModelIndex&,const QModelIndex&) ), + this, SLOT ( updateOptions() ) ); + + QSortFilterProxyModel::setSourceModel( newSourceModel ); +} + + + +/** + * @brief Update the internal filter/sort options + * + * Updates the internal preferences to reflect the current account's + */ +void ContactListModelFilter::updateOptions() +{ +#ifdef KMESSDEBUG_CONTACTLISTMODEL + kDebug() << "Updating account options from" << sender() << "( this:" << this << ", source model:" << sourceModel() << ")"; +#endif + + // Read the settings + currentAccount_ = CurrentAccount::instance(); + showAllowed_ = currentAccount_->getShowAllowedContacts(); + showRemoved_ = currentAccount_->getShowRemovedContacts(); + showGroupsMode_ = currentAccount_->getContactListDisplayMode(); + showOffline_ = currentAccount_->getShowOfflineContacts(); + showEmpty_ = currentAccount_->getShowEmptyGroups(); + + // Invalidate the proxy model, to update sorting and visibility of the model's items + invalidate(); +} + + diff --git a/src/contactlistmodelfilter.h b/src/contactlistmodelfilter.h new file mode 100644 index 0000000..ebc4106 --- /dev/null +++ b/src/contactlistmodelfilter.h @@ -0,0 +1,86 @@ +/*************************************************************************** + contactlistmodelfilter.h - description + ------------------- + begin : Thu Jul 10 2008 + copyright : (C) 2008 by Valerio Pilo + email : valerio@kmess.org + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef CONTACTLISTMODELFILTER_H +#define CONTACTLISTMODELFILTER_H + +#include +#include "account.h" + + +// Forward declarations +class CurrentAccount; + + + +/** + * @brief Filtering class for the contact list model. + * + * This class serves as a filter for the contact list model: it reads the original list data, + * sorts and filters out the list nodes according to the current visual options, and exposes a + * different model with the changes applied. + * + * @author Valerio Pilo + * @ingroup Root + */ +class ContactListModelFilter : public QSortFilterProxyModel +{ + Q_OBJECT + + + public: // Public methods + + // The constructor + ContactListModelFilter( QObject* parent = 0 ); + // Set the original model which will be filtered + void setSourceModel( QAbstractItemModel *newSourceModel ); + + + protected: // Protected methods + + // Determine if a row is visible or not + bool filterAcceptsRow( int sourceRow, const QModelIndex& sourceParent ) const; + + private slots: // Private slots + + // Update the internal filter/sort options + void updateOptions(); + // Dumps the model contents to the debug output + void dump( QModelIndex start = QModelIndex(), int depth = 1 ) const; + + + private: // Private properties + + // Reference to the current account + CurrentAccount *currentAccount_; + // Whether or not to show the Allowed special group + bool showAllowed_; + // Whether or not to show empty groups + bool showEmpty_; + // Whether or not to show the contacts grouped by online status or group + Account::ContactListDisplayMode showGroupsMode_; + // Whether or not to show the offline contacts in groups + bool showOffline_; + // Whether or not to show the Removed special group + bool showRemoved_; + + +}; + + + +#endif diff --git a/src/contactlistviewdelegate.cpp b/src/contactlistviewdelegate.cpp index e7705c7..bd440f9 100644 --- a/src/contactlistviewdelegate.cpp +++ b/src/contactlistviewdelegate.cpp @@ -21,23 +21,15 @@ #include "emoticonmanager.h" #include "contact/contactlistmodelitem.h" #include "contact/msnstatus.h" +#include "utils/richtextparser.h" #include "kmessdebug.h" -#include #include #include -#include #include #include #include -#include - - -/** - * Define the fixed size of the contacts' display pictures in the contact list - */ -#define DISPLAY_PICTURE_SIZE 42 @@ -52,20 +44,8 @@ ContactListViewDelegate::ContactListViewDelegate( QWidget *parent ) : QAbstractItemDelegate( parent ) , iconLoader_( KIconLoader::global() ) { - // Create a transparent label which will be reused to draw all contacts names - textWidget_ = new QLabel( parent ); - textWidget_->setTextFormat( Qt::RichText ); - textWidget_->setAttribute( Qt::WA_NoSystemBackground ); - textWidget_->setAlignment( Qt::AlignTop | Qt::AlignJustify ); - textWidget_->setText( " " ); - textWidget_->adjustSize(); - textWidget_->hide(); - - // Create a transparent label to be used for contact status icon drawing - pictureWidget_ = new QLabel( parent ); - pictureWidget_->setMinimumSize( QSize( KIconLoader::SizeSmall, KIconLoader::SizeSmall ) ); - pictureWidget_->setAttribute( Qt::WA_NoSystemBackground ); - pictureWidget_->hide(); + // Create test document + textDocument_ = new QTextDocument(); // Save the current account's reference currentAccount_ = CurrentAccount::instance(); @@ -78,8 +58,7 @@ ContactListViewDelegate::ContactListViewDelegate( QWidget *parent ) */ ContactListViewDelegate::~ContactListViewDelegate() { - delete textWidget_; - delete pictureWidget_; + delete textDocument_; } @@ -99,10 +78,10 @@ void ContactListViewDelegate::paint( QPainter *painter, const QStyleOptionViewIt { Flags statusFlags; QString groupIconName; - ContactListModelItem *item = static_cast( index.internalPointer() ); + QString text; - // Only render column zero, and avoid invalid tree items which can't be rendered - if( index.column() != 0 || item->getType() == ContactListModelItem::ItemRoot ) + // Only render column zero + if( index.column() != 0 ) { return; } @@ -121,7 +100,7 @@ void ContactListViewDelegate::paint( QPainter *painter, const QStyleOptionViewIt } // Read the actual data off the model index - QMap itemData = item->data( index.column() ).toMap(); + ModelDataList itemData( index.data().toMap() ); // Set the initial position where to paint. // Leave one pixel above, and one on the left, to help spacing. @@ -130,7 +109,7 @@ void ContactListViewDelegate::paint( QPainter *painter, const QStyleOptionViewIt position.ry()++; // Paint the different types of list items - switch( item->getType() ) + switch( itemData[ "type" ].toInt() ) { case ContactListModelItem::ItemGroup: { @@ -147,58 +126,69 @@ void ContactListViewDelegate::paint( QPainter *painter, const QStyleOptionViewIt } // Get the contact's picture - pictureWidget_->setPixmap( KIconLoader::global()->loadIcon( groupIconName - , KIconLoader::NoGroup - , KIconLoader::SizeSmall ) ); - pictureWidget_->adjustSize(); + QPixmap pixmap( KIconLoader::global()->loadIcon( groupIconName + , KIconLoader::NoGroup + , KIconLoader::SizeSmall ) ); - // Paint it -#if QT_VERSION >= 0x040400 - pictureWidget_->render( painter, position ); -#else - pictureWidget_->render( painter->device(), position ); -#endif + painter->drawPixmap( position, pixmap ); // Leave a small margin next to the arrow (even if it's not drawn, so we align the group names anyway) - position.rx() += pictureWidget_->width() + 2; + position.rx() += pixmap.width() + 2; + position.ry() += pixmap.height() -3; // Prepare and paint the group name - textWidget_->setText( i18nc( "Group name in the contact list with online/total contacts of that group" - , "%1 (%2/%3)" - , Qt::escape( itemData[ "name" ].toString() ) - , itemData[ "onlineContacts" ].toString() - , itemData[ "totalContacts" ].toString() ) ); - textWidget_->adjustSize(); + if( itemData[ "isSpecialGroup" ].toBool() ) + { + text = i18nc( "Group name in the contact list with total contacts of that group" + , "%1 (%2)" + , Qt::escape( itemData[ "name" ].toString() ) + , itemData[ "totalContacts" ].toString() ); + } + else + { + text = i18nc( "Group name in the contact list with online/total contacts of that group" + , "%1 (%2/%3)" + , Qt::escape( itemData[ "name" ].toString() ) + , itemData[ "onlineContacts" ].toString() + , itemData[ "totalContacts" ].toString() ); + } -#if QT_VERSION >= 0x040400 - textWidget_->render( painter, position ); -#else - textWidget_->render( painter->device(), position ); -#endif + // Set bold font + QFont font; + font.setBold( true ); + painter->setFont( font ); + painter->drawText( position, text ); break; } case ContactListModelItem::ItemContact: { + int displayPictureSize = currentAccount_->getListPictureSize(); + + // Use this variable to store the position when we draw the icon status on bottom edge. + QPoint oldPosition; + // Only show the picture if it's been enabled by the user - if( currentAccount_->getShowListPictures() ) + if( displayPictureSize != 0 ) { QPixmap pixmap( itemData[ "displayPicture" ].toString() ); - pixmap = pixmap.scaled( DISPLAY_PICTURE_SIZE, DISPLAY_PICTURE_SIZE, Qt::KeepAspectRatio, Qt::FastTransformation ); + pixmap = pixmap.scaled( displayPictureSize, displayPictureSize, + Qt::KeepAspectRatio, Qt::FastTransformation ); - // Get the contact's picture - pictureWidget_->setPixmap( pixmap ); - pictureWidget_->adjustSize(); + painter->drawPixmap( position, pixmap ); - // Paint it -#if QT_VERSION >= 0x040400 - pictureWidget_->render( painter, position ); -#else - pictureWidget_->render( painter->device(), position ); -#endif - // Leave a small margin next to the display picture - position.rx() += DISPLAY_PICTURE_SIZE + 2; + // If the display picture is enough, show small status icon over the picture + if( displayPictureSize >= 48 ) + { + oldPosition = position; + position.ry() += displayPictureSize - KIconLoader::SizeSmall; + } + else + { + // Leave a small margin next to the display picture + position.rx() += displayPictureSize + 2; + } } // Determine which status image to load @@ -207,23 +197,37 @@ void ContactListViewDelegate::paint( QPainter *painter, const QStyleOptionViewIt { statusFlags = FlagBlocked; } - pictureWidget_->setPixmap( MsnStatus::getIcon( (Status) itemData[ "status" ].toInt(), statusFlags ) ); - pictureWidget_->adjustSize(); - // Paint it -#if QT_VERSION >= 0x040400 - pictureWidget_->render( painter, position ); -#else - pictureWidget_->render( painter->device(), position ); -#endif - // Leave a small margin next to the status picture - position.rx() += KIconLoader::SizeSmall + 4; + painter->drawPixmap( position, MsnStatus::getIcon( (Status) itemData[ "status" ].toInt(), statusFlags ) ); + + if( displayPictureSize >= 48 ) + { + position = oldPosition; + position.rx() += displayPictureSize + 4; + } + else + { + // Leave a small margin next to the status picture + position.rx() += KIconLoader::SizeSmall + 4; + } // Get the contact information. - QString friendlyName = itemData[ "friendly" ].toString(); + QString friendlyName, personalMessage; QString mediaType = itemData[ "mediaType" ].toString(); QString mediaString = itemData[ "mediaString" ].toString(); - QString personalMessage = itemData[ "personalMessage" ].toString(); + + // Parse the name and message of the contact, adding emoticons and formatting + if( currentAccount_->getUseListFormatting() ) + { + friendlyName = itemData[ "friendlyFormatted" ].toString(); + personalMessage = itemData[ "personalMessageFormatted" ].toString(); + } + else + { + friendlyName = Qt::escape( itemData[ "friendly" ].toString() ); + personalMessage = Qt::escape( itemData[ "personalMessage" ].toString() ); + } + QString messageString; if( ! mediaString.isEmpty() ) @@ -249,38 +253,42 @@ void ContactListViewDelegate::paint( QPainter *painter, const QStyleOptionViewIt } else if( ! personalMessage.isEmpty() ) // When there's no media, show the PM { - messageString = "" + Qt::escape( personalMessage ) + ""; + messageString = "" + personalMessage + ""; + } + + // Fix HTML entities in the friendly name + if( ! itemData[ "isReverse" ].toBool() ) // The contact does not have us in its list + { + friendlyName = "" + friendlyName + ""; } - // Draw the text widget if( messageString.isEmpty() ) { // Only person name - textWidget_->setText( Qt::escape( friendlyName ) ); + text = friendlyName; } - else if( ! currentAccount_->getShowListPictures() ) + else if( ! currentAccount_->getListPictureSize() ) { // Person with message after it - textWidget_->setText( Qt::escape( friendlyName ) + " - " + messageString + "" ); + text = friendlyName + " - " + messageString + ""; } else { // Message below, - textWidget_->setText( Qt::escape( friendlyName ) + "
" + messageString + "" ); + text = friendlyName + "
" + messageString + ""; } - textWidget_->adjustSize(); -#if QT_VERSION >= 0x040400 - textWidget_->render( painter, position ); -#else - textWidget_->render( painter->device(), position ); -#endif + textDocument_->setHtml( text ); + painter->translate( position.x(), option.rect.topLeft().y() - 2 ); + textDocument_->drawContents( painter ); break; } default: - kWarning() << "Unknown type of item:" << item->getType(); + kWarning() << "Unknown type of item:" << itemData[ "type" ].toInt(); + kWarning() << "Index:" << index; + kWarning() << "Data:" << itemData; break; } @@ -301,34 +309,43 @@ QSize ContactListViewDelegate::sizeHint( const QStyleOptionViewItem &option, con { Q_UNUSED( option ); - ContactListModelItem *item = static_cast( index.internalPointer() ); + // Read the actual data off the model index + ModelDataList itemData( index.data().toMap() ); - QSize size( KIconLoader::SizeSmall + 2, KIconLoader::SizeSmall + 2 ); + QSize size( KIconLoader::SizeSmall + 2, KIconLoader::SizeSmall + 4 ); - if( ! item ) + if( itemData.isEmpty() ) { return size; } - switch( item->getType() ) + int picturesDimension = currentAccount_->getListPictureSize(); + switch( itemData[ "type" ].toInt() ) { case ContactListModelItem::ItemContact: - if( currentAccount_->getShowListPictures() ) + if( picturesDimension > 0 ) { QSize pictureSize( size ); - pictureSize.rheight() = DISPLAY_PICTURE_SIZE + 2; + if( picturesDimension <= 32 ) + { + // Fix the margin + pictureSize.rheight() = 36; + } + else + { + pictureSize.rheight() = picturesDimension + 2; + } + return pictureSize; } else { return size; } - break; case ContactListModelItem::ItemGroup: default: return size; - break; } } diff --git a/src/contactlistviewdelegate.h b/src/contactlistviewdelegate.h index a58247e..04d6629 100644 --- a/src/contactlistviewdelegate.h +++ b/src/contactlistviewdelegate.h @@ -23,20 +23,20 @@ // Forward declarations class CurrentAccount; -class QLabel; class KIconLoader; - +class QTextDocument; /** - * Displays a contact list item using its model + * Displays a contact list item using its model * - * This class is used by a Contact List view to display a single contact - * or group. It receives the data to display from the Contact List model and paints - * it directly. + * This class is used by a Contact List view to display a single contact + * or group. It receives the data to display from the Contact List model and paints + * it directly. * - * @author Valerio Pilo -*/ + * @author Valerio Pilo + * @ingroup Root + */ class ContactListViewDelegate : public QAbstractItemDelegate { public: @@ -55,10 +55,8 @@ class ContactListViewDelegate : public QAbstractItemDelegate CurrentAccount *currentAccount_; // Icon loader to make paint a bit faster KIconLoader *iconLoader_; - // Widget to display the contact's friendly name - QLabel *textWidget_; - // Widget to display the contact's status icon - QLabel *pictureWidget_; + // Text Document for rich text + QTextDocument *textDocument_; }; #endif diff --git a/src/currentaccount.cpp b/src/currentaccount.cpp index b0a8bdc..eb3af87 100644 --- a/src/currentaccount.cpp +++ b/src/currentaccount.cpp @@ -17,29 +17,24 @@ #include "currentaccount.h" -#include "kmess.h" -#include "kmessapplication.h" -#include "kmessdebug.h" #include "contact/contactbase.h" #include "contact/contactlist.h" #include "contact/contact.h" #include "contact/invitedcontact.h" +#include "utils/kmessconfig.h" +#include "utils/kmessshared.h" +#include "emoticonmanager.h" +#include "kmess.h" +#include "kmessapplication.h" +#include "kmessdebug.h" #include #include #include -#include -#include -#include #include #include -#include -#include -#include -#include -#include // Initialize the instance to zero @@ -142,6 +137,14 @@ void CurrentAccount::destroy() +// Return the Passport authentication ticket +const QString& CurrentAccount::getAuthenticationTicket() const +{ + return authenticationTicket_; +} + + + // Return whether or not to autoreply to messages bool CurrentAccount::getAutoreply() const { @@ -183,17 +186,16 @@ ContactBase * CurrentAccount::getContactByHandle(const QString &handle) const // Return a contact's name by handle -QString CurrentAccount::getContactFriendlyNameByHandle(const QString &handle) const +QString CurrentAccount::getContactFriendlyNameByHandle( const QString &handle, FormattingMode mode ) const { - ContactBase *contact = getContactByHandle(handle); + ContactBase *contact = getContactByHandle( handle ); + if( contact == 0 ) { - return QString::null; - } - else - { - return contact->getFriendlyName(); + return QString(); } + + return contact->getFriendlyName( mode ); } @@ -245,6 +247,13 @@ const QString& CurrentAccount::getInboxCommand() const } +// Return the language code setted for current account +const QString& CurrentAccount::getLanguageCode() const +{ + return languageCode_; +} + + // Find an invited contact by handle InvitedContact * CurrentAccount::getInvitedContactByHandle(const QString &handle) const @@ -262,6 +271,14 @@ InvitedContact * CurrentAccount::getInvitedContactByHandle(const QString &handle +// Return the key for offline im messages +const QString& CurrentAccount::getOfflineImKey() const +{ + return offlineImKey_; +} + + + // Return the local IP. const QString& CurrentAccount::getLocalIp() const { @@ -277,6 +294,22 @@ int CurrentAccount::getNoEmails() const +// Return the passport token +const QString& CurrentAccount::getPassportToken() const +{ + return passportToken_; +} + + + +// Return the proof token +const QString& CurrentAccount::getProofToken() const +{ + return proofToken_; +} + + + // Read property of int sessionLength. int CurrentAccount::getSessionLength() const { @@ -325,51 +358,9 @@ CurrentAccount* CurrentAccount::instance() // Open mail with the given command, url, and folder -void CurrentAccount::openMail( const QString& command, const QString& folder, const QString& url ) +void CurrentAccount::openMail( const QString &folder ) { -#ifdef KMESSDEBUG_CURRENTACCOUNT - kDebug(); -#endif - - - if( getUseHotmail() ) - { - if( url == "" ) - { - KMessageBox::error( 0, i18n( "This account does not have an Hotmail inbox!" ) ); - return; - } - - QString login = getHandle(); - QString sl; - sl.sprintf( "%d", getSessionLength() ); - - QString context = authorization_ + sl + getPassword(); - QByteArray credentials = QCryptographicHash::hash( context.toLatin1(), QCryptographicHash::Md5 ); - - // Concat url - KUrl linkUrl( url - + "&mode=ttl" - + "&login=" + login.left( login.indexOf("@") ) - + "&username=" + login - + "&sid=" + sid_ - + "&id=" + command - + "&sl=" + sl - + "&rru=" + folder - + "&auth=" + authorization_.toLatin1() - + "&creds=" + credentials - + "&svc=mail" - + "&js=yes" ); - - // Start url with KRun. - // The KRun object auto-deletes itself. - KMessApplication *kmessApp = static_cast( kapp ); - new KRun( linkUrl, kmessApp->getContactListWindow()->window(), 0, false, false, "" ); - } - else - { - startProcess( getEmailCommand() ); - } + KMessShared::openEmailClient( folder, getEmailSupported() ); } @@ -377,26 +368,8 @@ void CurrentAccount::openMail( const QString& command, const QString& folder, co // Open e-mail at the compose page with the given contact handle void CurrentAccount::openMailAtCompose( QString contactHandle ) { -#ifdef KMESSDEBUG_CURRENTACCOUNT - kDebug(); -#endif - - QString contactEmail, folder; - - if( getUseHotmail() ) - { - // The contact's email has to have the @ and . changed. - contactEmail = contactHandle.replace( QRegExp( "@" ), "%40" ); - contactEmail = contactEmail.replace( QRegExp( "\\." ), "%2e" ); - // For a compose message, the folder had to include the address of the contact - folder = composeFolder_ + "?mailto=1&to=" + contactEmail; - // Launch the html - openMail( composeCommand_, folder, composeUrl_ ); - } - else - { - startProcess( getEmailCommand() + " " + contactHandle ); - } + // For a compose message, the folder had to include the address of the contact + openMail( composeFolder_ + "?mailto=1&to=" + contactHandle ); } @@ -404,25 +377,15 @@ void CurrentAccount::openMailAtCompose( QString contactHandle ) // Open e-mail at the user's inbox void CurrentAccount::openMailAtInbox() { -#ifdef KMESSDEBUG_CURRENTACCOUNT - kDebug(); -#endif - - if( getUseHotmail() ) - { - openMail( inboxCommand_, inboxFolder_, inboxUrl_ ); - } - else - { - startProcess( getEmailCommand() ); - } + openMail( inboxFolder_ ); } // Set some account information void CurrentAccount::setAccountInformation( QString authorization, QString preferredEmail, - QString sid, bool emailSupported, QString externalIp, uint externalPort, + QString sid, QString languageCode, bool emailSupported, + QString externalIp, uint externalPort, QString localIp) { time_t currentTime, t; @@ -436,6 +399,7 @@ void CurrentAccount::setAccountInformation( QString authorization, QString prefe authorization_ = authorization; preferredEmail_ = preferredEmail; sid_ = sid; + languageCode_ = languageCode; externalIp_ = externalIp; externalPort_ = externalPort; localIp_ = localIp; @@ -450,6 +414,14 @@ void CurrentAccount::setAccountInformation( QString authorization, QString prefe +// Store the Passport authentication ticket +void CurrentAccount::setAuthenticationTicket( const QString &ticket ) +{ + authenticationTicket_ = ticket; +} + + + // Set whether or not to autoreply to a contact's chat message. void CurrentAccount::setAutoreply(bool autoreply) { @@ -501,6 +473,14 @@ void CurrentAccount::setInitialEmailInformation( int noEmailsInInbox, int noEmai +// Set the key for offline im messages +void CurrentAccount::setOfflineImKey( const QString &key ) +{ + offlineImKey_ = key; +} + + + // Set the e-mail post url void CurrentAccount::setEmailUrl( QString postUrl ) { @@ -525,6 +505,21 @@ void CurrentAccount::setNoEmails( int noEmails ) +// Set the passport token +void CurrentAccount::setPassportToken( const QString &token ) +{ + passportToken_ = token; +} + + + +// Set the proof token +void CurrentAccount::setProofToken( const QString &token ) +{ + proofToken_ = token; +} + + // Set the user's status void CurrentAccount::setStatus( Status status ) { diff --git a/src/currentaccount.h b/src/currentaccount.h index 8faf14e..548ffcc 100644 --- a/src/currentaccount.h +++ b/src/currentaccount.h @@ -19,11 +19,8 @@ #define CURRENTACCOUNT_H #include "account.h" -#include "contact/msnstatus.h" -#include #include -#include // Forward declarations @@ -64,6 +61,8 @@ class CurrentAccount : public Account virtual void copyAccount( const Account *account ); // Delete the instance of the contact list static void destroy(); + // Return the Passport authentication ticket + const QString& getAuthenticationTicket() const; // Return whether or not to autoreply to messages bool getAutoreply() const; // Return the compose command. @@ -71,7 +70,7 @@ class CurrentAccount : public Account // Return a contact by handle ContactBase *getContactByHandle(const QString &handle) const; // Return a contact's name by handle - QString getContactFriendlyNameByHandle(const QString &handle) const; + QString getContactFriendlyNameByHandle(const QString &handle, FormattingMode mode = STRING_CLEANED ) const; // Return the contact list as read-only const ContactList * getContactList() const; // Return the contact which was last dragged. @@ -84,10 +83,18 @@ class CurrentAccount : public Account uint getExternalPort() const; // Return the inbox command. const QString& getInboxCommand() const; + // Return the language code setted for current account + const QString& getLanguageCode() const; // Return the local IP. const QString& getLocalIp() const; // Return the number of email in the inbox int getNoEmails() const; + // Return the key for offline im messages + const QString& getOfflineImKey() const; + // Return the passport token + const QString& getPassportToken() const; + // Return the proof token + const QString& getProofToken() const; // Return the user's staus Status getStatus() const; // Return whether the given contact exists in the contact list. @@ -95,15 +102,18 @@ class CurrentAccount : public Account // Return a singleton instance of the current account static CurrentAccount* instance(); // Open e-mail with the given command, url, and folder - void openMail(const QString& command, const QString& folder, const QString& url); + void openMail( const QString &folder ); // Open e-mail at the compose page with the given contact handle void openMailAtCompose(QString contactHandle); // Open e-mail at the user's inbox void openMailAtInbox(); // Set some account information void setAccountInformation( QString authorization, QString preferredEmail, - QString sid, bool emailSupported, QString externalIp, uint externalPort, + QString sid, QString languageCode, bool emailSupported, + QString externalIp, uint externalPort, QString internalIp ); + // Store the Passport authentication ticket + void setAuthenticationTicket( const QString &ticket ); // Set whether or not to autoreply to a contact's chat message. void setAutoreply(bool autoreply); // Set compose properties @@ -118,6 +128,12 @@ class CurrentAccount : public Account void setEmailUrl( QString postUrl ); // Set the number of emails void setNoEmails( int noEmails ); + // Change the key for offline im messages + void setOfflineImKey( const QString &key ); + // Set the passport token + void setPassportToken( const QString &token ); + // Set the proof token + void setProofToken( const QString &token ); // Set the user's status void setStatus( Status status ); @@ -140,6 +156,8 @@ class CurrentAccount : public Account void startProcess(QString command); private: // Private attributes + // The current passport authentication ticket + QString authenticationTicket_; // The MS Passport authorization used to access hotmail. QString authorization_; // Whether or not the program should autoreply to chat messages. @@ -168,14 +186,22 @@ class CurrentAccount : public Account static CurrentAccount *instance_; // The list of invited contacts, not part of the MSN ContactList of the user. QList invitedContacts_; + // Key for offline im messages + QString offlineImKey_; + // Current language code setted for current account + QString languageCode_; // The local IP address QString localIp_; // The time at which the user synchronized with the notification server. unsigned int loginTime_; // The number of emails in the user's inbox. int noEmails_; + // Passport token + QString passportToken_; // The email address considered by the server to be the user's preferred address. I don't know when it differs from the handle. QString preferredEmail_; + // Proof token + QString proofToken_; // A value used to access the user's hotmail account. QString sid_; // The online status of the user. diff --git a/src/dialogs/addcontactdialog.cpp b/src/dialogs/addcontactdialog.cpp index 7fd4a87..25b37f2 100644 --- a/src/dialogs/addcontactdialog.cpp +++ b/src/dialogs/addcontactdialog.cpp @@ -19,18 +19,10 @@ #include "../contact/contactlist.h" #include "../contact/group.h" +#include "../utils/kmessconfig.h" #include "../currentaccount.h" #include "../kmessdebug.h" -#include -#include -#include -#include - -#include -#include -#include - /** @@ -64,7 +56,7 @@ AddContactDialog::AddContactDialog( QString &handle, QString &groupId, QWidget * this, SLOT ( interfaceChanged() ) ); // Lock the dialog height, it's ugly otherwise - restoreDialogSize( KGlobal::config()->group("AddContactDialog") ); + restoreDialogSize( KMessConfig::instance()->getGlobalConfig( "AddContactDialog" ) ); setFixedHeight( height() ); // Fill up the groups list from the contactlist data @@ -109,7 +101,7 @@ AddContactDialog::AddContactDialog( QString &handle, QString &groupId, QWidget * // Destructor AddContactDialog::~AddContactDialog() { - KConfigGroup group = KGlobal::config()->group("AddContactDialog"); + KConfigGroup group = KMessConfig::instance()->getGlobalConfig( "AddContactDialog" ); saveDialogSize( group ); } diff --git a/src/dialogs/addcontactdialog.h b/src/dialogs/addcontactdialog.h index 66b4597..a1c9d5c 100644 --- a/src/dialogs/addcontactdialog.h +++ b/src/dialogs/addcontactdialog.h @@ -20,8 +20,6 @@ #include "ui_addcontactdialog.h" -#include - #include @@ -34,8 +32,9 @@ * * @author Mike K. Bennett * @author Valerio Pilo + * @ingroup Dialogs */ -class AddContactDialog : public KDialog, public Ui::AddContactDialog +class AddContactDialog : public KDialog, private Ui::AddContactDialog { Q_OBJECT diff --git a/src/dialogs/addemoticondialog.cpp b/src/dialogs/addemoticondialog.cpp index 5eaa0e3..b0c0408 100644 --- a/src/dialogs/addemoticondialog.cpp +++ b/src/dialogs/addemoticondialog.cpp @@ -17,18 +17,12 @@ #include "addemoticondialog.h" +#include "../utils/kmessconfig.h" #include "../emoticonmanager.h" #include "../kmessdebug.h" -#include -#include -#include -#include -#include - #include #include -#include #include @@ -45,15 +39,20 @@ * * @param theme Theme to add the new emoticon to * @param parent Parent widget - * @param name Qt object name */ AddEmoticonDialog::AddEmoticonDialog( EmoticonTheme *theme, QWidget *parent ) : KDialog( parent ) , Ui::AddEmoticonDialog() , theme_(theme) + , isEditing_(false) { // Set up the interface and the dialog - setupUi( this ); + QWidget *mainWidget = new QWidget( this ); + setupUi( mainWidget ); + setMainWidget( mainWidget ); + + // Configure the dialog + setWindowModality( Qt::WindowModal ); setButtons( Help | Ok | Cancel ); setDefaultButton( Ok ); setCaption( i18n("Add New Emoticon") ); @@ -61,7 +60,7 @@ AddEmoticonDialog::AddEmoticonDialog( EmoticonTheme *theme, QWidget *parent ) setMainWidget( container_ ); // Lock the dialog height, it's ugly otherwise - restoreDialogSize( KGlobal::config()->group("AddEmoticonDialog") ); + restoreDialogSize( KMessConfig::instance()->getGlobalConfig( "AddEmoticonDialog" ) ); setFixedHeight( height() ); // Connect the interface's signals to manage its events @@ -72,6 +71,8 @@ AddEmoticonDialog::AddEmoticonDialog( EmoticonTheme *theme, QWidget *parent ) connect( shortcutEdit_, SIGNAL( textChanged(const QString&) ), this, SLOT( interfaceChanged() ) ); + movie_ = new QMovie(); + // Force an update of the widgets (mainly to show the KMess logo as // the preview and to disable the Ok button) interfaceChanged(); @@ -86,7 +87,7 @@ AddEmoticonDialog::AddEmoticonDialog( EmoticonTheme *theme, QWidget *parent ) */ AddEmoticonDialog::~AddEmoticonDialog() { - KConfigGroup group = KGlobal::config()->group("AddEmoticonDialog"); + KConfigGroup group = KMessConfig::instance()->getGlobalConfig( "AddEmoticonDialog" ); saveDialogSize( group ); #ifdef KMESSDEBUG_EMOTICONS_ADDING @@ -120,6 +121,17 @@ void AddEmoticonDialog::choosePicture() +// Edit the custom emoticon +void AddEmoticonDialog::editEmoticon( const QString pictureName, const QString shortcut ) +{ + setCaption( i18n("Edit Emoticon") ); + isEditing_ = true; + preSelect( pictureName, shortcut ); +} + + + + /** * Controls the OK button by checking the dialog's widgets * @@ -128,9 +140,10 @@ void AddEmoticonDialog::choosePicture() */ void AddEmoticonDialog::interfaceChanged() { - QPixmap emoticon( pictureEdit_->text() ); + movie_->stop(); + movie_->setFileName( pictureEdit_->text() ); - if( ! emoticon.isNull() ) + if( movie_->isValid() ) { // The chosen file is valid, update the preview. @@ -138,10 +151,10 @@ void AddEmoticonDialog::interfaceChanged() kDebug() << "Updated preview."; #endif - emoticonPreview_->setPixmap( emoticon ); + emoticonPreview_->setMovie( movie_ ); + movie_->start(); } - else if( emoticonPreview_->pixmap() == 0 - || emoticon.serialNumber() != emoticonPreview_->pixmap()->serialNumber() ) + else { // The chosen file is not valid, reset the preview to the KMess logo. @@ -153,7 +166,7 @@ void AddEmoticonDialog::interfaceChanged() } // Enable the OK button only if both fields have valid contents - enableButtonOk( ! emoticon.isNull() && ! shortcutEdit_->text().isEmpty() ); + enableButtonOk( movie_->isValid() && ! shortcutEdit_->text().isEmpty() ); } @@ -162,14 +175,14 @@ void AddEmoticonDialog::interfaceChanged() * Preselects a file name and an emoticon shortcut in the dialog * * @param pictureName Full path to the file that will be added - * @param code Emoticon shortcut to preselect + * @param shortcut Emoticon shortcut to preselect */ void AddEmoticonDialog::preSelect( QString pictureName, QString shortcut ) { // Select the image. Disable the field also to avoid messing up with the name. pictureEdit_->setText( pictureName ); - pictureEdit_->setEnabled( false ); - browseButton_->setEnabled( false ); + pictureEdit_->setEnabled( pictureName.isEmpty() ); + browseButton_->setEnabled( pictureName.isEmpty() ); // Select the shortcut, and save it so later we can tell everyone we've added this particular emoticon preselectedShortcut_ = shortcut; @@ -192,6 +205,9 @@ void AddEmoticonDialog::preSelect( QString pictureName, QString shortcut ) */ void AddEmoticonDialog::slotButtonClicked( int button ) { + bool isEditing = isEditing_; + isEditing_ = false; + // If the Cancel button has been pressed, close without saving if( button != Ok ) { @@ -199,7 +215,7 @@ void AddEmoticonDialog::slotButtonClicked( int button ) return; } - QImage emoticonData; + QImageReader emoticonData; QString shortcut, pictureName; #ifdef KMESSDEBUG_EMOTICONS_ADDING @@ -209,9 +225,17 @@ void AddEmoticonDialog::slotButtonClicked( int button ) shortcut = shortcutEdit_->text(); pictureName = pictureEdit_->text(); - emoticonData.load( pictureName ); + // Check if the shortcut is really changed + if( preselectedShortcut_ == shortcut && isEditing ) + { + accept(); + return; + } - if( emoticonData.isNull() || shortcut.isEmpty() ) + emoticonData.setFileName( pictureName ); + QString format( emoticonData.format() ); + + if( format.isEmpty() || shortcut.isEmpty() ) { kWarning() << "Shortcut or picture is not valid!"; return; @@ -220,6 +244,10 @@ void AddEmoticonDialog::slotButtonClicked( int button ) // If the emoticon does already exist in the theme, ask if you want to replace it. if( theme_->contains( shortcut ) ) { +#ifdef KMESSDEBUG_EMOTICONS_ADDING + kDebug() << "Asking for overwrite."; +#endif + int result = KMessageBox::questionYesNo( this, i18n( "The emoticon \"%1\" already exists, do you want to replace it?", shortcut ), i18n("Add New Emoticon") ); @@ -233,36 +261,75 @@ void AddEmoticonDialog::slotButtonClicked( int button ) } } - // Get handles for the original picture and the new emoticon + // Create any missing directories. + QDir dir; + dir.mkpath( theme_->getThemePath() ); + + if( isEditing ) + { +#ifdef KMESSDEBUG_EMOTICONS_ADDING + kDebug() << "Editing emoticon: shortcut changed from " << preselectedShortcut_ << " to " << shortcut; +#endif + theme_->renameEmoticon( preselectedShortcut_, shortcut ); + theme_->saveTheme(); + + accept(); + return; + } + + // Access the original picture file details QFileInfo pictureInfo( pictureName ); - QFile originalPicture( pictureName ); - QFile newThemePicture( theme_->getThemePath() + pictureInfo.fileName() ); - // Open the two images - if( ! originalPicture.open( QIODevice::ReadOnly ) ) + // For the most common image formats, keep the original filetype; otherwise, save the image as a PNG. This increases portability + // between 3rd-party clients and ensures that MSN will always be able to read our emoticons. + if( format == "gif" || format == "png" || format == "jpg" ) { - kWarning() << "Couldn't open source file: " << originalPicture.fileName(); - return; + // Just copy over the image + + // Get handles for the original picture and the new emoticon + QFile originalPicture( pictureName ); + QFile newThemePicture( theme_->getThemePath() + pictureInfo.fileName() ); + +#ifdef KMESSDEBUG_EMOTICONS_ADDING + kDebug() << "Copying original picture" << pictureName << "to theme as" << newThemePicture.fileName(); +#endif + + // Open the two images + if( ! originalPicture.open( QIODevice::ReadOnly ) ) + { + kWarning() << "Couldn't open source file: " << originalPicture.fileName(); + return; + } + + if( ! newThemePicture.open( QIODevice::WriteOnly ) ) + { + kWarning() << "Couldn't open destination file: " << newThemePicture.fileName(); + return; + } + + // Copy the file contents + newThemePicture.write( originalPicture.readAll() ); + newThemePicture.close(); + originalPicture.close(); + + // Quick validity check + if( newThemePicture.size() != originalPicture.size() ) + { + kWarning() << "File sizes do not match: " + << originalPicture.fileName() << " (" << originalPicture.size() << ")" + << " != " << newThemePicture.fileName() << " (" << newThemePicture.size() << ")" << endl; + return; + } } - - if( ! newThemePicture.open( QIODevice::WriteOnly ) ) + else { - kWarning() << "Couldn't open destination file: " << newThemePicture.fileName(); - return; - } + // Save the loaded picture as a PNG image. - // Copy the file contents - newThemePicture.write( originalPicture.readAll() ); - newThemePicture.close(); - originalPicture.close(); +#ifdef KMESSDEBUG_EMOTICONS_ADDING + kDebug() << "Recoding original picture" << pictureName << "(which format was" << format << ") to theme as" << pictureInfo.completeBaseName() << ".png"; +#endif - // Quick validity check - if( newThemePicture.size() != originalPicture.size() ) - { - kWarning() << "File sizes do not match: " - << originalPicture.fileName() << " (" << originalPicture.size() << ")" - << " != " << newThemePicture.fileName() << " (" << newThemePicture.size() << ")" << endl; - return; + emoticonData.read().save( theme_->getThemePath() + pictureInfo.completeBaseName() + ".png", "png" ); } @@ -272,7 +339,7 @@ void AddEmoticonDialog::slotButtonClicked( int button ) // We've just created a file whose name is like "file.name.png", so give to the theme a name "file.name" so it can guess // the file type on its own. - theme_->addEmoticon( pictureInfo.baseName(), QStringList( shortcut ) ); + theme_->addEmoticon( pictureInfo.completeBaseName(), QStringList( shortcut ) ); theme_->saveTheme(); // If a shortcut has been preselected, signal that we've added that emoticon. diff --git a/src/dialogs/addemoticondialog.h b/src/dialogs/addemoticondialog.h index 4546edb..a342565 100644 --- a/src/dialogs/addemoticondialog.h +++ b/src/dialogs/addemoticondialog.h @@ -22,6 +22,7 @@ #include +#include class EmoticonTheme; @@ -34,8 +35,9 @@ class EmoticonTheme; * If the user accepts the changes, the new emoticon will be added to the current custom emoticons theme. * * @author Valerio Pilo -*/ -class AddEmoticonDialog : public KDialog, public Ui::AddEmoticonDialog + * @ingroup Dialogs + */ +class AddEmoticonDialog : public KDialog, private Ui::AddEmoticonDialog { Q_OBJECT @@ -44,6 +46,8 @@ class AddEmoticonDialog : public KDialog, public Ui::AddEmoticonDialog AddEmoticonDialog( EmoticonTheme *theme, QWidget *parent = 0 ); // Destructor virtual ~AddEmoticonDialog(); + // Edit the custom emoticon + void editEmoticon( const QString pictureName, const QString shortcut ); // Preselects a file name and an emoticon shortcut in the dialog void preSelect( QString pictureName, QString shortcut ); @@ -58,8 +62,12 @@ class AddEmoticonDialog : public KDialog, public Ui::AddEmoticonDialog private: // Preselected shortcut text QString preselectedShortcut_; + // Movie object for gif movie + QMovie *movie_; // Theme instance to which we'll add the new emoticon EmoticonTheme *theme_; + // Determinate if we are editing the current emoticon + bool isEditing_; signals: // Signal that we've added an emoticon with this code diff --git a/src/dialogs/awaymessagedialog.cpp b/src/dialogs/awaymessagedialog.cpp index bf66a82..ea161ae 100644 --- a/src/dialogs/awaymessagedialog.cpp +++ b/src/dialogs/awaymessagedialog.cpp @@ -17,12 +17,7 @@ #include "awaymessagedialog.h" -#include -#include -#include -#include - -#include +#include "../utils/kmessconfig.h" @@ -32,13 +27,14 @@ AwayMessageDialog::AwayMessageDialog( QWidget *parent ) , Ui::AwayMessageDialog() { // Set up the interface and the dialog - setupUi( this ); + QWidget *mainWidget = new QWidget( this ); + setupUi( mainWidget ); + setMainWidget( mainWidget ); + setButtons( Ok | Cancel ); setDefaultButton( Ok ); setCaption( i18n("Specify an Away message") ); - restoreDialogSize( KGlobal::config()->group("AwayMessageDialog") ); - - setMainWidget( container_ ); + restoreDialogSize( KMessConfig::instance()->getGlobalConfig( "AwayMessageDialog" ) ); adjustSize(); } @@ -48,7 +44,7 @@ AwayMessageDialog::AwayMessageDialog( QWidget *parent ) // The destructor AwayMessageDialog::~AwayMessageDialog() { - KConfigGroup group = KGlobal::config()->group("AwayMessageDialog"); + KConfigGroup group = KMessConfig::instance()->getGlobalConfig( "AwayMessageDialog" ); saveDialogSize( group ); } diff --git a/src/dialogs/awaymessagedialog.h b/src/dialogs/awaymessagedialog.h index 0a1251d..fe0ccc8 100644 --- a/src/dialogs/awaymessagedialog.h +++ b/src/dialogs/awaymessagedialog.h @@ -29,9 +29,9 @@ * contacts start chatting with the user. * * @author Mike K. Bennett + * @ingroup Dialogs */ - -class AwayMessageDialog : public KDialog, public Ui::AwayMessageDialog +class AwayMessageDialog : public KDialog, private Ui::AwayMessageDialog { Q_OBJECT diff --git a/src/dialogs/contactaddeduserdialog.cpp b/src/dialogs/contactaddeduserdialog.cpp index bea0be7..b0345b9 100644 --- a/src/dialogs/contactaddeduserdialog.cpp +++ b/src/dialogs/contactaddeduserdialog.cpp @@ -17,10 +17,6 @@ #include "contactaddeduserdialog.h" -#include - -#include - ContactAddedUserDialog::ContactAddedUserDialog() @@ -86,7 +82,9 @@ ContactAddedUserDialog::ReturnCode ContactAddedUserDialog::launch(QString contac returnCode_ = BLOCK; // Set up the label - messageLabel_->setText( messageLabel_->text().arg(contactName + " (" + contactHandle + ")") ); + messageLabel_->setText( i18n( "%1 (%2) \n has added you to his or her contact list. " + , contactName, contactHandle ) ); + // Show the dialog modally exec(); diff --git a/src/dialogs/contactaddeduserdialog.h b/src/dialogs/contactaddeduserdialog.h index 3df1617..3416154 100644 --- a/src/dialogs/contactaddeduserdialog.h +++ b/src/dialogs/contactaddeduserdialog.h @@ -20,16 +20,15 @@ #include "ui_contactaddeduserdialog.h" -#include -#include - #include /** * The dialog for when someone has added the user to his or her contact list. + * * @author Mike K. Bennett + * @ingroup Dialogs */ class ContactAddedUserDialog : public KDialog, private Ui::ContactAddedUserDialog { diff --git a/src/dialogs/contactaddeduserdialog.ui b/src/dialogs/contactaddeduserdialog.ui index 76dc30b..076767a 100644 --- a/src/dialogs/contactaddeduserdialog.ui +++ b/src/dialogs/contactaddeduserdialog.ui @@ -5,8 +5,8 @@ 0 0 - 477 - 193 + 482 + 206 @@ -19,8 +19,7 @@ - %1 -has added you to his or her contact list. + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop diff --git a/src/dialogs/contactpropertiesdialog.cpp b/src/dialogs/contactpropertiesdialog.cpp index 76ae84a..bff94e5 100644 --- a/src/dialogs/contactpropertiesdialog.cpp +++ b/src/dialogs/contactpropertiesdialog.cpp @@ -19,47 +19,65 @@ #include "../contact/contact.h" #include "../contact/contactextension.h" -#include "../network/applications/msnobjecttransferp2p.h" +#include "../contact/contactlist.h" +#include "../contact/group.h" +#include "../utils/kmessconfig.h" +#include "../utils/richtextparser.h" #include "../currentaccount.h" #include "../kmessdebug.h" #include #include +#include #include #include +#include + ContactPropertiesDialog::ContactPropertiesDialog( QWidget *parent ) : KDialog( parent ) + , Ui::ContactProperties() , ok_( false ) , mediaSound_(0) { - setupUi( this ); - setMainWidget( mainFrame_ ); + // Set up the interface and the dialog + QWidget *mainWidget = new QWidget( this ); + setupUi( mainWidget ); + setMainWidget( mainWidget ); + + // Configure the dialog + setWindowModality( Qt::WindowModal ); + KIconLoader *loader = KIconLoader::global(); // Set the dialog size setButtons( Ok | Cancel ); setDefaultButton( Ok ); - restoreDialogSize( KGlobal::config()->group("ContactPropertiesDialog") ); + restoreDialogSize( KMessConfig::instance()->getGlobalConfig( "ContactPropertiesDialog" ) ); // Set the icons for the buttons - pictureButton_->setIcon( loader->loadIcon( "document-open", KIconLoader::Small ) ); - soundButton_->setIcon( loader->loadIcon( "document-open", KIconLoader::Small ) ); - playButton_->setIcon( loader->loadIcon( "media-playback-start", KIconLoader::Small ) ); + soundButton_->setIcon( loader->loadIcon( "document-open", KIconLoader::Small ) ); + playButton_->setIcon( loader->loadIcon( "media-playback-start", KIconLoader::Small ) ); - connect( pictureButton_, SIGNAL( clicked() ), this, SLOT( choosePicture() ) ); - connect( soundButton_, SIGNAL( clicked() ), this, SLOT( chooseSound() ) ); - connect( playButton_, SIGNAL( clicked() ), this, SLOT( slotPlaySound() ) ); + // Set properties for clear cache button + clearCacheButton_->setIcon( loader->loadIcon( "draw-eraser", KIconLoader::Small ) ); + + connect( clearCacheButton_, SIGNAL( clicked() ), this, SLOT( slotClearCache() ) ); + connect( restoreButton_, SIGNAL( clicked() ), this, SLOT( restoreContactPicture() ) ); + connect( soundButton_, SIGNAL( clicked() ), this, SLOT( chooseSound() ) ); + connect( playButton_, SIGNAL( clicked() ), this, SLOT( slotPlaySound() ) ); + + imageContact_->installEventFilter( this ); } ContactPropertiesDialog::~ContactPropertiesDialog() { - KConfigGroup group = KGlobal::config()->group("ContactPropertiesDialog"); + KConfigGroup group = KMessConfig::instance()->getGlobalConfig( "ContactPropertiesDialog" ); saveDialogSize( group ); delete mediaSound_; @@ -95,28 +113,48 @@ void ContactPropertiesDialog::applyChanges() { extension->setUseAlternativeName( alternativeNameCheckBox_->isChecked() ); } - extension->setAlternativeName( nameEdit_->text() ); - extension->setNotifyOnline( notifyOnlineCheckBox_->isChecked() ); - extension->setContactSoundPath ( soundEdit_->text() ); + extension->setAlternativeName ( nameEdit_->text() ); + extension->setNotes ( notesEdit_->toPlainText() ); + extension->setNotifyOnline ( notifyOnlineCheckBox_->isChecked() ); + extension->setContactSoundPath ( soundEdit_->text() ); + extension->setContactAlternativePicturePath( alternativePicturePath_ ); - // If the user doesn't want to use the custom picture anymore, replace it with the contact's one. - if( pictureEdit_->text().isEmpty() ) + + const QStringList groupIdsList = contact_->getGroupIds(); + QListWidgetItem *item; + QString currentId; + + groupList_->setGridSize( QSize( 2, (int) ceil( (float) groupList_->count() / 2.0 ) ) ); + + // Search for added/removed contact group + for( int i = 0; i < groupList_->count(); i++ ) { - const MsnObject *msnObject = contact_->getMsnObject(); - if( msnObject == 0 ) + item = groupList_->item( i ); + currentId = item->data( 6 ).toString(); + + if( item->checkState() == Qt::Checked ) { - extension->setContactPicturePath( QString::null ); + // If item is checked and the groupIdsList doesn't contain + // the currentId, it means the user want to add the contact in other group + if( ! groupIdsList.contains( currentId ) ) + { + emit addContactToGroup( contact_->getHandle(), currentId ); + } + // else the user is already in the group + continue; } else { - extension->setContactPicturePath( MsnObjectTransferP2P::getPictureFileName( * msnObject ) ); + // If item is unchecked and the groupIdsList contains + // the currentId, it means the user want to remove the contact from the group + if( groupIdsList.contains( currentId ) ) + { + emit removeContactFromGroup( contact_->getHandle(), currentId ); + } + // else the user isn't already in the group } } - else - { - extension->setContactPicturePath( pictureEdit_->text() ); - } } @@ -144,10 +182,17 @@ void ContactPropertiesDialog::chooseFile(KLineEdit *edit, QString wildcard) void ContactPropertiesDialog::choosePicture() { KUrl file; - file = KFileDialog::getImageOpenUrl( pictureEdit_->text(), this ); - if ( !file.isEmpty() ) + file = KFileDialog::getImageOpenUrl( alternativePicturePath_ , this ); + if ( ! file.isEmpty() ) { - pictureEdit_->setText( file.toLocalFile() ); + QPixmap pixmap( file.toLocalFile() ); + + // If it's a valid image + if( ! pixmap.isNull() ) + { + imageContact_->setPixmap( pixmap ); + alternativePicturePath_ = file.toLocalFile(); + } } } @@ -169,8 +214,50 @@ void ContactPropertiesDialog::chooseSound() +bool ContactPropertiesDialog::eventFilter(QObject *obj, QEvent *event ) +{ + if( obj == imageContact_ ) + { + QString image; + if( alternativePicturePath_.isEmpty() ) + { + image = contact_->getExtension()->getContactPicturePath(); + + if( image.isEmpty() ) + { + image = contact_->getContactDefaultPicturePath(); + } + } + else + { + image = alternativePicturePath_; + } + + int eventType = event->type(); + + if( eventType == QEvent::Enter ) + { + QImage glowingImage( image ); + KIconEffect::toGamma( glowingImage, 0.8f ); + imageContact_->setPixmap( QPixmap::fromImage( glowingImage ) ); + } + else if( eventType == QEvent::Leave ) + { + imageContact_->setPixmap( image ); + } + else if( eventType == QEvent::MouseButtonRelease ) + { + choosePicture(); + } + } + + return false; +} + + + // Show the dialog and obtain the contact handle. -bool ContactPropertiesDialog::launch(Contact *contact) +bool ContactPropertiesDialog::launch( Contact *contact, bool openNotesTab ) { #ifdef KMESSDEBUG_CONTACTPROPERTIES kDebug() << "Launch with contact " << contact->getHandle(); @@ -187,6 +274,13 @@ bool ContactPropertiesDialog::launch(Contact *contact) // Setup the dialog setupWidgets(); + // If openNotesTab is true, set the current index to notes tab + if( openNotesTab ) + { + tabs_->setCurrentIndex( 2 ); + notesEdit_->setFocus(); + } + // Show the dialog modally exec(); @@ -204,8 +298,6 @@ bool ContactPropertiesDialog::launch(Contact *contact) // The online notification checkbox was toggled void ContactPropertiesDialog::notifyOnlineCheckBoxToggled(bool checked) { - pictureEdit_->setEnabled( checked ); - pictureButton_->setEnabled( checked ); soundEdit_->setEnabled( checked ); soundButton_->setEnabled( checked ); playButton_->setEnabled( checked ); @@ -213,55 +305,162 @@ void ContactPropertiesDialog::notifyOnlineCheckBoxToggled(bool checked) +// Restore the original contact picture +void ContactPropertiesDialog::restoreContactPicture() +{ + // Restore the contact's picture + QString originalPicture = contact_->getExtension()->getContactPicturePath(); + + if( originalPicture.isEmpty() ) + { + originalPicture = contact_->getContactDefaultPicturePath(); + } + + QPixmap pixmap( originalPicture ); + + if( ! pixmap.isNull() ) + { + imageContact_->setPixmap( pixmap ); + alternativePicturePath_ = ""; + } + + restoreButton_->hide(); +} + + + // Setup the dialog's widgets void ContactPropertiesDialog::setupWidgets() { // Use bold font for the friendly name of the contact QFont font; font.setBold(true); + ContactExtension *extension = contact_->getExtension(); + + // Set the button default view to hide + restoreButton_->hide(); trueNameLabel_->setFont( font ); trueNameLabel_->setText( Qt::escape( contact_->getTrueFriendlyName() ) ); // Set the informations about contact - personalMessageLabel_->setText( Qt::escape( contact_->getPersonalMessage() ) ); - emailLabel_->setText( i18n( "Email: " ) + contact_->getHandle() ); - clientLabel_->setText( i18n( "Client: " ) + contact_->getClientAppName() ); - - alternativeNameCheckBox_->setChecked( contact_->getExtension()->getUseAlternativeName() ); - alternativeNameCheckBoxToggled( contact_->getExtension()->getUseAlternativeName() ); - nameEdit_->setText( contact_->getExtension()->getAlternativeName() ); - - notifyOnlineCheckBox_->setChecked( contact_->getExtension()->getNotifyOnline() ); - notifyOnlineCheckBoxToggled( contact_->getExtension()->getNotifyOnline() ); - pictureEdit_->setText( contact_->getExtension()->getContactPicturePath() ); - - // Grep the current image file and put them into preview label - QString file = pictureEdit_->text(); - QPixmap image; - if( ! file.isEmpty() ) + QString pm = Qt::escape( contact_->getPersonalMessage() ); + if( pm.isEmpty() ) { - image.load( file ); + // Hide to avoid blank space + personalMessageLabel_->hide(); } else { - // Set default image if the current file is empty - image.load( contact_->getContactDefaultPicturePath() ); + personalMessageLabel_->setText( pm ); + } + + QString lastSeenString, lastMessageString; + if( contact_->isOnline() ) + { + lastSeenString = i18n( "Connected" ); + } + else if( extension->getLastSeen().isNull() ) + { + lastSeenString = i18n( "Not seen yet" ); + } + else + { + lastSeenString = extension->getLastSeen().toString(); + } + + if( extension->getLastMessageDate().isNull() ) + { + lastMessageString = i18n( "No messages yet" ); + } + else + { + lastMessageString = extension->getLastMessageDate().toString(); + } + + lastSeenLabel_ ->setText( i18n( "Last seen: %1", lastSeenString ) ); + lastMessageLabel_ ->setText( i18n( "Last message: %1", lastMessageString ) ); + emailLabel_ ->setText( i18n( "Email: %1", contact_->getHandle() ) ); + clientLabel_ ->setText( i18n( "Client: %1", contact_->getClientAppName() ) ); + nameEdit_ ->setText( extension->getAlternativeName() ); + notesEdit_ ->setPlainText( extension->getNotes() ); + + alternativeNameCheckBox_->setChecked( extension->getUseAlternativeName() ); + alternativeNameCheckBoxToggled( extension->getUseAlternativeName() ); + notifyOnlineCheckBox_->setChecked( extension->getNotifyOnline() ); + notifyOnlineCheckBoxToggled( extension->getNotifyOnline() ); + + // Set the contact picture + QString picturePath = contact_->getContactPicturePath(); + + QPixmap pixmap( picturePath ); + + // If pixmap is null set the default contact picture + if( pixmap.isNull() ) + { + pixmap.load( contact_->getContactDefaultPicturePath() ); + } + + imageContact_->setPixmap( pixmap ); + + alternativePicturePath_ = extension->getContactAlternativePicturePath(); + + // If the alternative picture is used, show the restore button + if( ! alternativePicturePath_.isEmpty() ) + { + restoreButton_->show(); + } + + soundEdit_->setText( extension->getContactSoundPath() ); + + // Set the group list + QStringList groupIdsList = contact_->getGroupIds(); + QList groupContactList = CurrentAccount::instance()->getContactList()->getGroupList(); + QListWidgetItem *item; + + foreach( Group *group, groupContactList ) + { + if( ! group->isSpecialGroup() ) + { + item = new QListWidgetItem( group->getName(), groupList_ ); + item->setFlags( Qt::ItemIsUserCheckable | Qt::ItemIsEnabled ); + item->setData( 6, group->getId() ); + + if( groupIdsList.contains( group->getId() ) ) + { + item->setCheckState( Qt::Checked ); + } + else + { + item->setCheckState( Qt::Unchecked ); + } + } } - imageContact_->setPixmap( image ); - soundEdit_->setText( contact_->getExtension()->getContactSoundPath() ); // Set the pictures list - QString pictureFile; + QStringList pictureList( extension->getPictureList() ); QListWidgetItem *pictureItem; - foreach( pictureFile, contact_->getExtension()->getPictureList() ) + + foreach( QString pictureFile, pictureList ) { - // Load into QPixmap - image.load( pictureFile ); + // Load into QPixmap and check if the pixmap is valid + if( ! pixmap.load( pictureFile ) ) + { + continue; + } // Set the new item and put it into pictures list pictureItem = new QListWidgetItem(); - pictureItem->setIcon( QIcon( image ) ); + pictureItem->setIcon( QIcon( pixmap ) ); + + QFile fileDat( pictureFile + ".dat" ); + if ( fileDat.exists() && fileDat.open( QIODevice::ReadOnly | QIODevice::Text ) ) + { + QTextStream in( &fileDat ); + pictureItem->setText( in.readLine() ); + fileDat.close(); + } + pictureList_->addItem( pictureItem ); } } @@ -284,6 +483,19 @@ void ContactPropertiesDialog::slotButtonClicked( int button ) +// The "Clear cache" button has been pressed +void ContactPropertiesDialog::slotClearCache() +{ + if( pictureList_->count() != 0 ) + { + ContactExtension *extension = contact_->getExtension(); + extension->clearCache(); + pictureList_->clear(); + } +} + + + // The play sound button has been pressed void ContactPropertiesDialog::slotPlaySound() { diff --git a/src/dialogs/contactpropertiesdialog.h b/src/dialogs/contactpropertiesdialog.h index 3b1a1c7..190e39c 100644 --- a/src/dialogs/contactpropertiesdialog.h +++ b/src/dialogs/contactpropertiesdialog.h @@ -28,19 +28,24 @@ class Contact; -/**The dialog for modifying contact properties (ContactExtension). - *@author Michael Curtis - */ - -class ContactPropertiesDialog : public KDialog, public Ui::ContactProperties +/** + * The dialog for modifying contact properties (ContactExtension). + * + * @author Michael Curtis + * @ingroup Dialogs + */ +class ContactPropertiesDialog : public KDialog, private Ui::ContactProperties { Q_OBJECT public: - ContactPropertiesDialog( QWidget *parent=0 ); - ~ContactPropertiesDialog(); + ContactPropertiesDialog( QWidget *parent=0 ); + virtual ~ContactPropertiesDialog(); // Show the dialog and obtain the contact handle. - bool launch(Contact *contact); + bool launch( Contact *contact, bool openNotesTab = false ); + + protected: + bool eventFilter(QObject *obj, QEvent *event); private: // Private methods void applyChanges(); @@ -49,28 +54,38 @@ class ContactPropertiesDialog : public KDialog, public Ui::ContactProperties void chooseFile(KLineEdit *edit, QString wildcard); private slots: - // The alt name checkbox was toggled. - void alternativeNameCheckBoxToggled(bool checked); - // Choose a picture file (KFile dialog) - void choosePicture(); - // Choose a sound file (KFile dialog) - void chooseSound(); - // The online notification checkbox was toggled - void notifyOnlineCheckBoxToggled(bool checked); + // The alt name checkbox was toggled. + void alternativeNameCheckBoxToggled(bool checked); + // Choose a picture file (KFile dialog) + void choosePicture(); + // Choose a sound file (KFile dialog) + void chooseSound(); + // The online notification checkbox was toggled + void notifyOnlineCheckBoxToggled(bool checked); + // Restore the original contact picture + void restoreContactPicture(); // The Ok or Cancel button has been pressed void slotButtonClicked( int button ); + // The "Clear cache" button has been pressed + void slotClearCache(); // The play sound button has been pressed void slotPlaySound(); // Called when media sound finished void slotSoundFinished(); private: // Private attributes - Contact *contact_; + // Alternative picture path + QString alternativePicturePath_; + // Contact + Contact *contact_; // Whether or not OK was pressed. - bool ok_; + bool ok_; // Sound media object Phonon::MediaObject *mediaSound_; + signals: + void addContactToGroup ( QString contact, QString id ); + void removeContactFromGroup( QString contact, QString id ); }; #endif diff --git a/src/dialogs/contactpropertiesdialog.ui b/src/dialogs/contactpropertiesdialog.ui index 1103f10..2eedb37 100644 --- a/src/dialogs/contactpropertiesdialog.ui +++ b/src/dialogs/contactpropertiesdialog.ui @@ -5,269 +5,359 @@ 0 0 - 494 - 385 + 387 + 437 - Form + Contact Properties for %1 - - - QFrame::StyledPanel + + + 0 - - QFrame::Raised - - - - 0 + + + + 0 + 0 + 371 + 397 + - - - - 0 - - - - - 0 - 0 - 468 - 331 - + + &Information + + + + + + + + + + + 96 + 96 + + + + + 96 + 96 + + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + + + true + + + Qt::AlignCenter + + + + + + + Restore + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + Qt::RichText + + + true + + + + + + + + + + + + + + + + + + + + + + + + Qt::RichText + + + true + + + + + + + Qt::Vertical + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 250 + 10 + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 10 + 20 + + + + + + + + + + Groups: - - &Informations - - - - - - - - - - - 96 - 96 - - - - QFrame::StyledPanel - - - QFrame::Sunken - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - TextLabel - - - - - - - TextLabel - - - - - - - Qt::ElideRight - - - - - - - TextLabel - - - Qt::RichText - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Use alternative name for this person - - - - - - - - - - Show a popup balloon when this person goes online or offline - - - - - - - - - Picture: - - - - - - - Sound: - - - - - - - ... - - - - - - - ... - - - - - - - - - - - - ... - - - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - 0 - 0 - 468 - 331 - + + + + + + 0 + 0 + + + + + 0 + 100 + + + + Qt::ScrollBarAlwaysOff + + + QAbstractItemView::MultiSelection + + + Qt::ElideNone + + + true - - I&mages - - - - - - Qt::ScrollBarAlwaysOff - - - QAbstractItemView::SingleSelection - - - - 96 - 96 - - - - QListView::Static - - - QListView::Adjust - - - QListView::IconMode - - - - - - - + + + + + Use alternative name for this person + + + + + + + + + + Show a popup when the contact goes online/offline + + + + + + + + + Sound: + + + + + + + ... + + + + + + + + + + + + ... + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + 0 + 0 + 371 + 397 + + + + I&mages + + + + + + Qt::ScrollBarAlwaysOff + + + QAbstractItemView::SingleSelection + + + + 96 + 96 + + + + QListView::Static + + + QListView::Adjust + + + QListView::IconMode + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + &Clear Cache + + + + + + + + + + + 0 + 0 + 371 + 397 + + + + Notes + + + + + + +
@@ -278,11 +368,6 @@ QLineEdit
klineedit.h
- - KSqueezedTextLabel - QLabel -
ksqueezedtextlabel.h
-
@@ -293,8 +378,8 @@ setEnabled(bool) - 74 - 184 + 97 + 206 74 @@ -302,22 +387,6 @@ - - notifyOnlineCheckBox_ - toggled(bool) - pictureEdit_ - setEnabled(bool) - - - 137 - 255 - - - 193 - 291 - - - notifyOnlineCheckBox_ toggled(bool) @@ -345,24 +414,8 @@ 253 - 440 - 319 - - - - - notifyOnlineCheckBox_ - toggled(bool) - pictureButton_ - setEnabled(bool) - - - 464 - 252 - - - 467 - 276 + 399 + 339 @@ -373,12 +426,12 @@ setEnabled(bool) - 481 - 245 + 435 + 268 - 474 - 322 + 434 + 339 diff --git a/src/dialogs/networkwindow.cpp b/src/dialogs/networkwindow.cpp index 546ca52..00b0fd4 100644 --- a/src/dialogs/networkwindow.cpp +++ b/src/dialogs/networkwindow.cpp @@ -21,6 +21,11 @@ #include "networkwindow.h" +#include "../network/mimemessage.h" +#include "../network/msnnotificationconnection.h" +#include "../network/p2pmessage.h" +#include "../utils/kmessconfig.h" + #include #include #include @@ -34,39 +39,52 @@ #include #include #include - -#include "../network/p2pmessage.h" +#include // Declare the instance NetworkWindow * NetworkWindow::instance_(0); + // Constructor NetworkWindow::NetworkWindow( QWidget *parent ) : KDialog( parent, Qt::Dialog ) // Explicitly set the window type to disable the destructive close behavior - , connectionTabs_(0) + , Ui::NetworkWindow() { // Set up the dialog and its buttons - setButtons( Close | User1 | User2 | User3 ); + setButtons( Close | User1 | User2 ); setDefaultButton( Close ); setCaption( i18n("Network Window") ); - restoreDialogSize( KGlobal::config()->group("NetworkWindow") ); + restoreDialogSize( KMessConfig::instance()->getGlobalConfig( "NetworkWindow" ) ); + + // Load the ui file in a main qwidget + QWidget *mainWidget = new QWidget(this); + setupUi( mainWidget ); + setMainWidget( mainWidget ); + + // Set up the behavior of the Tab Widget +#if KDE_IS_VERSION(4,1,0) + connectionTabs_->setCloseButtonEnabled( true ); +#else + connectionTabs_->setHoverCloseButton( true ); +#endif + connect( connectionTabs_, SIGNAL( closeRequest(QWidget*) ), this, SLOT( closeTab(QWidget*) ) ); + connect( connectionTabs_, SIGNAL( currentChanged(int) ), this, SLOT( slotUpdateWidgets(int) ) ); + + // Set up the behavior of the Send button + connect( sendCommandButton_, SIGNAL( released() ), this, SLOT( slotSendCommand() ) ); // Name our custom buttons and setup their behavior setButtonText( User1, i18n("S&ave tab") ); setButtonText( User2, i18n("C&lear tab") ); - setButtonText( User3, i18n("Cl&ose tab") ); + setButtonIcon( User1, KIcon("document-save") ); + setButtonIcon( User2, KIcon("edit-clear-list") ); connect( this, SIGNAL( user1Clicked() ), this, SLOT( saveCurrentTab() ) ); connect( this, SIGNAL( user2Clicked() ), this, SLOT( clearCurrentTab() ) ); - connect( this, SIGNAL( user3Clicked() ), this, SLOT( closeCurrentTab() ) ); - // Create the window's contents: a tab widget with a tab for each connection - connectionTabs_ = new KTabWidget( this ); - - // Add it as main widget with enough space to a good number of lines at once - setMainWidget(connectionTabs_); - setInitialSize( QSize(800, 600) ); + // Set the default state of the ui widgets + sendStandardCmdRadio_->setChecked( true ); } @@ -74,7 +92,7 @@ NetworkWindow::NetworkWindow( QWidget *parent ) // Destructor NetworkWindow::~NetworkWindow() { - KConfigGroup group = KGlobal::config()->group("NetworkWindow"); + KConfigGroup group = KMessConfig::instance()->getGlobalConfig( "NetworkWindow" ); saveDialogSize( group ); foreach( ConnectionEntry *entry, connectionViews_.values() ) @@ -101,6 +119,9 @@ NetworkWindow::~NetworkWindow() entry->logView->append( html ); entry->lastMessage = now; + + // Update the widgets for the currently visible tab + slotUpdateWidgets(); } @@ -142,7 +163,7 @@ NetworkWindow::~NetworkWindow() ConnectionEntry *entry = getConnectionEntry(connection); entry->logView->append("

the connection was closed
" + getTime() + "

\n"); entry->lastMessage = QDateTime::currentDateTime(); - + entry->isClosed = true; // // Unregister the connection, so new attempts from the same class generate a new object. // connectionViews_.remove(browser); } @@ -152,67 +173,152 @@ NetworkWindow::~NetworkWindow() // Return a log description for a standard command. QString NetworkWindow::describeCommand(const QString &command) { - if( command.startsWith("VER ") ) + QString firstPart = command.left(3); // command[0] in normal code. + int errorCode = firstPart.toInt(); + + if( errorCode != 0 ) { - return formatDescription("Protocol version negotiation"); - } - else if ( command.startsWith("CVR ") ) - { - return formatDescription("Application version exchange"); - } - else if ( command.startsWith("XFR ") ) - { - return formatDescription("Server transfer request"); - } - else if ( command.startsWith("USR ") ) - { - return formatDescription("User login information"); - } - else if ( command.startsWith("SYN ") ) - { - return formatDescription("Contactlist sync request"); - } - else if ( command.startsWith("CHG ") ) - { - return formatDescription("Client status message (change of online state, client capabilities or msn object)"); - } - else if ( command.startsWith("CHL ") ) - { - return formatDescription("Challenge query"); - } - else if ( command.startsWith("IRO ") ) - { - return formatDescription("Contact already in chat"); - } - else if ( command.startsWith("CAL ") ) - { - return formatDescription("Calling a contact to join chat"); - } - else if ( command.startsWith("RNG ") ) - { - return formatDescription("Invitation for a chat"); - } - else if ( command.startsWith("ANS ") ) - { - return formatDescription("Chat invitation answer with user login information"); - } - else if ( command.startsWith("JOI ") ) - { - return formatDescription("Contact joins chat"); - } - else if ( command.startsWith("FIL ") ) - { - return formatDescription("Indicates the size of the entire file"); - } - else if ( command.startsWith("TFR ") ) - { - return formatDescription("Start of file transfer"); + switch( errorCode ) + { + // Command is a 3 digit error code. + case 200: return formatDescription("Error: Invalid syntax"); + case 201: return formatDescription("Error: Invalid parameter"); + case 205: return formatDescription("Error: Invalid principal; not an MSN account"); + case 206: return formatDescription("Error: Domain name missing"); + case 207: return formatDescription("Error: Already logged in"); + case 208: return formatDescription("Error: Invalid principal; not an MSN account"); + case 209: return formatDescription("Error: Nickname change illegal"); + case 210: return formatDescription("Error: Principal list full"); + case 213: return formatDescription("Error: Invalid rename request"); + case 215: return formatDescription("Error: Principal already on list"); + case 216: return formatDescription("Error: Principal not on list"); + case 217: return formatDescription("Error: Principal not online"); + case 218: return formatDescription("Error: Already in this mode"); + case 219: return formatDescription("Error: Principal is in the opposite list"); + case 223: return formatDescription("Error: Too many groups"); + case 224: return formatDescription("Error: Invalid group"); + case 225: return formatDescription("Error: Principal not in group"); + case 227: return formatDescription("Error: Group not empty"); + case 228: return formatDescription("Error: Group with same name already exists"); + case 229: return formatDescription("Error: Group name too long"); + case 230: return formatDescription("Error: Cannot remove group zero"); + case 231: return formatDescription("Error: Invalid group"); + case 240: return formatDescription("Error: Empty domain"); + case 280: return formatDescription("Error: Switchboard server failed"); + case 281: return formatDescription("Error: Transfer to switchboard failed"); + case 282: return formatDescription("Error: P2P header error"); + case 300: return formatDescription("Error: Required field missing"); + case 302: return formatDescription("Error: Not logged in"); + case 402: // same as 403 + case 403: return formatDescription("Error: Error accessing contact list"); + case 420: return formatDescription("Error: Invalid account permissions"); // CVR with unofficial client, non beta service tester + case 500: return formatDescription("Error: Service Temporarily Unavailable"); + case 501: return formatDescription("Error: Database server error"); + case 502: return formatDescription("Error: Protocol command is disabled"); + case 510: return formatDescription("Error: File operation failed"); + case 511: return formatDescription("Error: Account is banned"); + case 520: return formatDescription("Error: Memory allocation failed"); + case 540: return formatDescription("Error: Challenge response failed"); + case 600: return formatDescription("Error: Server is busy"); + case 601: return formatDescription("Error: Server is unavailable"); + case 602: return formatDescription("Error: Peer nameserver is down"); + case 603: return formatDescription("Error: Database connection failed"); + case 604: return formatDescription("Error: Server is going down"); + case 605: return formatDescription("Error: Server unavailable"); + case 700: return formatDescription("Error: Connection failed"); + case 710: return formatDescription("Error: Bad command parameter"); + case 711: return formatDescription("Error: Write is blocking"); + case 712: return formatDescription("Error: Session is overloaded"); + case 713: return formatDescription("Error: Opening chat sessions too fast"); + case 714: return formatDescription("Error: Too many chat sessions open"); + case 715: return formatDescription("Error: Unexpected command value"); + case 717: return formatDescription("Error: Bad friend file"); + case 731: return formatDescription("Error: Not expected"); + case 800: return formatDescription("Error: Changing names too fast"); + case 911: return formatDescription("Error: Authentication ticket was incorrect"); + case 913: return formatDescription("Error: not allowed when hidden"); + case 923: return formatDescription("Error: Kids' Passport without parental consent"); + case 924: return formatDescription("Error: passport account not verified yet"); + case 928: return formatDescription("Error: bad ticket"); + case 931: return formatDescription("Error: account not on this server"); // if using a cached NS instead of the main dispatch point. + + case 900: + case 912: + case 918: + case 919: + case 921: + case 922: return formatDescription("Error: Server too busy"); + + case 914: + case 915: + case 916: return formatDescription("Error: Server unavailable"); + case 917: return formatDescription("Error: authentication failed"); + default: return formatDescription("Error, type is unknown!"); + } } else { -// return QString::null; - return formatDescription( QString::null ); // always add time. + if( firstPart == "VER" ) + { + return formatDescription("Protocol version negotiation"); + } + else if ( firstPart == "CVR" ) + { + return formatDescription("Application version exchange"); + } + else if ( firstPart == "XFR" ) + { + return formatDescription("Server transfer request"); + } + else if ( firstPart == "USR" ) + { + return formatDescription("User login information"); + } + else if ( firstPart == "SYN" ) + { + return formatDescription("Contactlist sync request"); + } + else if ( firstPart == "CHG" ) + { + return formatDescription("Client status message (change of online state, client capabilities or msn object)"); + } + else if ( firstPart == "CHL" ) + { + return formatDescription("Challenge query"); + } + else if ( firstPart == "IRO" ) + { + return formatDescription("Contact already in chat"); + } + else if ( firstPart == "CAL" ) + { + return formatDescription("Calling a contact to join chat"); + } + else if ( firstPart == "RNG" ) + { + return formatDescription("Invitation for a chat"); + } + else if ( firstPart == "ANS" ) + { + return formatDescription("Chat invitation answer with user login information"); + } + else if ( firstPart == "JOI" ) + { + return formatDescription("Contact joins chat"); + } + else if ( firstPart == "FIL" ) + { + return formatDescription("Indicates the size of the entire file"); + } + else if ( firstPart == "TFR" ) + { + return formatDescription("Start of file transfer"); + } } + + // Default +// return QString::null; + return formatDescription( QString::null ); // always add time. } @@ -663,7 +769,23 @@ NetworkWindow::~NetworkWindow() else { // Whole message is in utf-8 - // remove last
because KTextBrowser::append() already adds it. + + // First hide things we don't want to log. + if( entry->type == TYPE_HTTP ) + { + // Hide passwords from the passport login, if they are included in the message + int passStart = utf8Message.indexOf(""); + if( passStart != -1 ) + { + passStart += 15; // size of xml tag + int passEnd = utf8Message.indexOf("", passStart); + int passLen = ( passEnd - passStart ); + utf8Message = utf8Message.replace( passStart, passLen, QString( passLen, '*' ) ); + } + } + + // Convert to HTML. + // Remove last
because KTextBrowser::append() already adds it. logMessage = formatString( utf8Message ); logMessage = logMessage.replace(QRegExp("
$"), QString::null); @@ -767,6 +889,7 @@ NetworkWindow::~NetworkWindow() // The message a utf-8 (MSNSLP) payload if the session id is zero. bool hasSlpPayload = ( sessionId == 0 && dataSize > 0 ); int dataEnd = ( p2pDataStart + dataSize ); + int realEnd = ( message.size() ); if( hasSlpPayload ) { // See if the SLP body is terminated with a final null character (should be). @@ -777,7 +900,7 @@ NetworkWindow::~NetworkWindow() } // Display the SLP body - QString slpMessage = QString::fromUtf8( message.data() + p2pDataStart, qMin( dataSize, (quint32) message.size() - p2pDataStart ) ); + QString slpMessage = QString::fromUtf8( message.data() + p2pDataStart, qMin( dataSize, (quint32) qMin( dataEnd, realEnd ) - p2pDataStart ) ); logMessage += "\n
" + formatString(slpMessage); // Add message footer @@ -885,9 +1008,12 @@ NetworkWindow::~NetworkWindow() connectionViews_.insert( connection, entry ); // Add new tab - connectionTabs_->addTab( entry->logView, connection->objectName() ); + connectionTabs_->addTab( entry->logView, KIcon( "edit-select-all" ), connection->objectName() ); } + // Initialize new connections and reinitialize old ones as open + entry->isClosed = false; + return entry; } @@ -907,7 +1033,7 @@ NetworkWindow::~NetworkWindow() ConnectionEntry *entry = getConnectionEntry(connection); // If empty, set the initial label. Otherwise add a IRC-like rename message - if( entry->logView->toHtml().length() == 0 ) + if( entry->type == TYPE_UNKNOWN ) { connectionTabs_->setTabText( connectionTabs_->indexOf( entry->logView ), title ); entry->logView->append("

Log started by " + QString(connection->objectName()) + "

"); @@ -923,7 +1049,7 @@ NetworkWindow::~NetworkWindow() // Show the window if there are connection logs to show void NetworkWindow::show() { - if( connectionTabs_ == 0 || connectionTabs_->count() < 1 ) + if( connectionTabs_->count() < 1 ) { KMessageBox::error( this, i18n("No connections are present.\nCannot open the Network Window.") ); return; @@ -937,7 +1063,7 @@ NetworkWindow::~NetworkWindow() // The 'save tab' button was pressed. void NetworkWindow::saveCurrentTab() { - if( connectionTabs_ == 0 ) + if( connectionTabs_->currentWidget() == 0 ) return; QString path; @@ -980,7 +1106,7 @@ NetworkWindow::~NetworkWindow() // The 'clear tab' button was pressed. void NetworkWindow::clearCurrentTab() { - if( connectionTabs_ == 0 ) + if( connectionTabs_->currentWidget() == 0 ) return; static_cast( connectionTabs_->currentWidget() )->clear(); @@ -988,23 +1114,16 @@ NetworkWindow::~NetworkWindow() - // The 'close tab' button was pressed. - void NetworkWindow::closeCurrentTab() + // A 'close tab' button was pressed. + void NetworkWindow::closeTab( QWidget *removedWidget ) { - if( connectionTabs_ == 0 ) - return; - - if( connectionTabs_->currentIndex() == 0 ) + if( connectionTabs_->indexOf( removedWidget ) == 0 ) { KMessageBox::information( this, i18n("Cannot close the main connection tab.") ); return; } - // Remove the current page from the tab widget - QWidget *removedWidget = connectionTabs_->currentWidget(); - connectionTabs_->removeTab( connectionTabs_->currentIndex() ); - - // Also remove it from the list of views + // Remove the widget from the list of views QHashIteratorit( connectionViews_ ); while( it.hasNext() ) { @@ -1037,5 +1156,175 @@ NetworkWindow::~NetworkWindow() } + // A tab was selected. + void NetworkWindow::slotUpdateWidgets( int selectedTab ) + { + bool enable = false; + + // Automatically obtain the tab index instead of getting it as a parameter + if( selectedTab < -1 ) + { + selectedTab = connectionTabs_->currentIndex(); + } + + // If there are open tabs, find out which one is selected. + // If there are none, just disable the command sending group + if( selectedTab != -1 ) + { + QWidget *currentWidget = connectionTabs_->currentWidget(); + QHashIterator it( connectionViews_ ); + + // Iterate through all connections to find whether the current one is connected or not + while( it.hasNext() ) + { + it.next(); + if( it.value()->logView == currentWidget ) + { + // The active tab's connection is active, enable the widgets + if( ! it.value()->isClosed ) + { + enable = true; + } + break; + } + } + } + + commandSendingGroup_->setEnabled( enable ); + } + + + + // Send a command + void NetworkWindow::slotSendCommand() + { + // Get the text fields' text + QString command( commandEdit_->text().toUpper() ); + QString payload( payloadEdit_->toPlainText() ); + + // Empty commands can't be sent + if( command.isEmpty() || connectionTabs_->currentIndex() == -1 ) + { + commandEdit_->setFocus(); + return; + } + + + // Warn the developer about what he or she is doing. + int result = KMessageBox::warningContinueCancel( this, + i18n( "Sending commands to the server is a risky operation.
" + "If you don't know how exactly send messages to the servers," + "you could be lucky and just get disconnected, or you may" + "incur in more serious consequences.
" + "You have been warned!
" + "Do you want to continue sending this message?" ), + i18n( "Network Window" ), + KStandardGuiItem::cont(), + KStandardGuiItem::cancel(), + "sendServerCommandWarning" ); + // Bail out, just in time + if( result != KMessageBox::Continue ) + { + return; + } + + // The developer knows what he or she is doing, send the command + + // Replace all newlines with the kind used by the server + payload.replace( QRegExp( "\r?\n" ), "\r\n" ); + + // Empty payloads can, and will be replaced with a single newline + if( payload.isEmpty() ) + { + payload = "\r\n"; + } + else if( ! payload.endsWith( "\r\n" ) ) + { + // Warn the developer that the payloads must end with a newline + int result = KMessageBox::warningYesNo( this, + i18n( "The payload you are trying to send does not end with the " + "required newline ('\\r\\n')!
" + "Do you want KMess to add it for you?" ), + i18n( "Network Window" ), + KStandardGuiItem::yes(), + KStandardGuiItem::no(), + "noPayloadWarning" ); + // Append the missing newline to the payload + if( result == KMessageBox::Yes ) + { + payload.append( "\r\n" ); + } + } + + // Find the currently active tab + QWidget *currentWidget = connectionTabs_->currentWidget(); + QHashIterator it( connectionViews_ ); + void *connection; + const ConnectionEntry *entry; + + // Iterate through all connections to find out which one's tab is selected in the UI + while( it.hasNext() ) + { + it.next(); + + // Save the entry, we'll need it later + entry = it.value(); + + // If the current tab is for this connection.. + if( entry->logView == currentWidget ) + { + // .. disallow sending commands to disconnected connections + if( entry->isClosed ) + { + commandEdit_->setFocus(); + return; + } + + // ..save the tab's connection to send commands there + connection = it.key(); + break; + } + } + + // Send the command to the right type of connection + MsnNotificationConnection *nsConnection; + switch( entry->type ) + { + case TYPE_NS: + case TYPE_SB: + nsConnection = static_cast( connection ); + + // Disallow sending commands to disconnected connections + if( ! nsConnection->isConnected() ) + { + return; + } + + // Send the type of command the developer wants + if( sendStandardCmdRadio_->isChecked() ) + { + nsConnection->sendCommand( command, payload ); + } + else + { + nsConnection->sendMimeMessage( MsnNotificationConnection::ACK_ALWAYS, MimeMessage( payload ) ); + } + return; + + // TODO: Enable sending commands to these types of connections. + case TYPE_UNKNOWN: + case TYPE_FTP: + case TYPE_FTP_RAW: + case TYPE_DC: + case TYPE_HTTP: + default: + KMessageBox::error( 0, i18n( "Cannot send commands to this kind of connection!" ) ); + return; + } + } + + +#include "networkwindow.moc" #endif // KMESS_NETWORK_WINDOW + diff --git a/src/dialogs/networkwindow.h b/src/dialogs/networkwindow.h index a64ca36..2ff2a6f 100644 --- a/src/dialogs/networkwindow.h +++ b/src/dialogs/networkwindow.h @@ -23,6 +23,8 @@ #ifndef NETWORKWINDOW_H #define NETWORKWINDOW_H +#include "ui_networkwindow.h" + #include #include @@ -39,8 +41,9 @@ class KTextBrowser; * Based on the original work of Michael Jarrett, but totally revised. * * @author Diederik van der Boor + * @ingroup Dialogs */ -class NetworkWindow : public KDialog +class NetworkWindow : public KDialog, private Ui::NetworkWindow { Q_OBJECT @@ -71,7 +74,11 @@ class NetworkWindow : public KDialog // The 'clear tab' button was pressed. void clearCurrentTab(); // The 'close tab' button was pressed. - void closeCurrentTab(); + void closeTab( QWidget *removedWidget ); + // A tab was selected. + void slotUpdateWidgets( int selectedTab = -2 ); + // Send a command + void slotSendCommand(); private: // Private methods // Constructor @@ -123,12 +130,11 @@ class NetworkWindow : public KDialog KTextBrowser *logView; ConnectionType type; QDateTime lastMessage; + bool isClosed; }; // The html view for each connection QHash connectionViews_; - // The tab bar with all connections - KTabWidget *connectionTabs_; // The instance of the network window static NetworkWindow *instance_; diff --git a/src/dialogs/networkwindow.ui b/src/dialogs/networkwindow.ui new file mode 100644 index 0000000..437a66d --- /dev/null +++ b/src/dialogs/networkwindow.ui @@ -0,0 +1,198 @@ + + NetworkWindow + + + + 0 + 0 + 350 + 376 + + + + Network Window + + + + + + + 0 + 0 + + + + Command to Current Tab + + + + + + + 0 + 0 + + + + Command: + + + + + + + Qt::Vertical + + + + + + + + + Type: + + + + + + + Standard + + + + + + + MIME + + + + + + + Qt::Vertical + + + + 20 + 18 + + + + + + + + + 0 + 0 + + + + Send + + + + + + + + + + + + 0 + 0 + + + + 3 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Command payload (can be empty): + + + + + + + + 0 + 0 + + + + + 0 + 45 + + + + + 16777215 + 45 + + + + false + + + + + + + + + + + 0 + 100 + + + + Qt::ElideRight + + + true + + + true + + + true + + + + + + + + KTabWidget + QTabWidget +
ktabwidget.h
+ 1 +
+
+ + +
diff --git a/src/dialogs/transferentry.cpp b/src/dialogs/transferentry.cpp index 3295f2e..8e55df5 100644 --- a/src/dialogs/transferentry.cpp +++ b/src/dialogs/transferentry.cpp @@ -19,24 +19,18 @@ #include "../kmessdebug.h" -#include -#include #include #include -#include #include -#include - #include #include -#include #include // Constructor -TransferEntry::TransferEntry( QWidget *parent, const QString filename, uint filesize, +TransferEntry::TransferEntry( QWidget *parent, const QString filename, const ulong filesize, bool incoming, const QImage preview) : QWidget( parent ), Ui::TransferEntry(), @@ -45,6 +39,7 @@ TransferEntry::TransferEntry( QWidget *parent, const QString filename, uint file filename_(filename), filesize_(filesize), previousPercentage_(-1), + previousTransferred_(0), transferID_(-1) { // Set up the user interface @@ -58,11 +53,12 @@ TransferEntry::TransferEntry( QWidget *parent, const QString filename, uint file << "', preview=" << ( preview_.isNull() ? "null" : "set" ) << "." << endl; #endif + KIconLoader *loader = KIconLoader::global(); + // Set pixmap and filename if( preview_.isNull() ) { // Get a default icon pixmap - KIconLoader *loader = KIconLoader::global(); QString iconTitle = KMimeType::iconNameForUrl( KUrl( filename_) ); preview_ = loader->loadIcon( iconTitle, KIconLoader::NoGroup, iconLabel_->width() ); @@ -85,15 +81,27 @@ TransferEntry::TransferEntry( QWidget *parent, const QString filename, uint file filenameLabel_->setText("" + filename_ + ""); + QPixmap pixmapTransfer; // Enable urls? if(incoming_) { // Can't open it yet. openLabel_->hide(); openLabel_->setEnabled(false); + pixmapTransfer = loader->loadIcon( "go-down", KIconLoader::Small ); + } + else + { + pixmapTransfer = loader->loadIcon( "go-up", KIconLoader::Small ); } cancelLabel_->setEnabled(true); + iconTransferLabel_->setPixmap( pixmapTransfer ); + + // Set the timer to update the transfer rate and eta + timer_ = new QTimer(); + connect( timer_ , SIGNAL( timeout() ), this, SLOT( updateTransferRate() ) ); + timer_->start( 3000 ); } @@ -104,6 +112,7 @@ TransferEntry::~TransferEntry() #ifdef KMESSDEBUG_TRANSFERENTRY kDebug() << "DESTROYED. [file=" << filename_ << "]"; #endif + delete timer_; } @@ -144,7 +153,7 @@ QString TransferEntry::getFileName() const // Mark the transfer as failed -void TransferEntry::failTransfer(const QString &message) +void TransferEntry::failTransfer( const QString &message ) { if( isDone_ ) { @@ -165,9 +174,11 @@ void TransferEntry::failTransfer(const QString &message) } else { - statusLabel_->setText(message); + statusLabel_->setText( message ); } + timer_->stop(); + // Make sure the widget does not resize when the progressbar hides setMinimumHeight( height() ); @@ -204,11 +215,13 @@ void TransferEntry::finishTransfer() // Update the widgets statusLabel_->setText( i18n("Completed") ); + progressBar_->hide(); cancelLabel_->setEnabled(false); cancelLabel_->hide(); - openLabel_->setEnabled(true); - openLabel_->show(); + openLabel_ ->setEnabled(true); + openLabel_ ->show(); + timer_ ->stop(); isDone_ = true; } @@ -238,8 +251,9 @@ void TransferEntry::setTransferID( int transferID ) } + // Convert a string to some more readable form -QString TransferEntry::toReadableBytes(uint bytes) +QString TransferEntry::toReadableBytes( ulong bytes ) { QString format; if(bytes > 1048576) @@ -261,7 +275,7 @@ QString TransferEntry::toReadableBytes(uint bytes) // Set a status message -void TransferEntry::setStatusMessage(const QString &message) +void TransferEntry::setStatusMessage( const QString &message ) { #ifdef KMESSTEST KMESS_ASSERT( ! isDone_ ); @@ -279,13 +293,13 @@ void TransferEntry::setStatusMessage(const QString &message) kDebug() << "displaying '" << message << "'."; #endif - statusLabel_->setText(message); + statusLabel_->setText( message ); } // Update the progress bar -void TransferEntry::updateProgress( uint bytesTransferred ) +void TransferEntry::updateProgress( ulong bytesTransferred ) { #ifdef KMESSTEST KMESS_ASSERT( ! isDone_ ); @@ -299,39 +313,69 @@ void TransferEntry::updateProgress( uint bytesTransferred ) return; } + bytesTransferred_ = bytesTransferred; - int percent = (int) ( ( (double) bytesTransferred * 100.0 ) / (double) filesize_ ); + int percent = (int) ( ( (double) bytesTransferred * 100.0 ) / (double) filesize_ ); + QString transferred = toReadableBytes( bytesTransferred ); + QString total = toReadableBytes( filesize_ ); // Avoid useless repaints - if( percent == previousPercentage_ ) + if( ! ( percent == previousPercentage_ ) ) { - return; + previousPercentage_ = percent; + progressBar_->setValue( percent ); } #ifdef KMESSDEBUG_TRANSFERENTRY kDebug() << "transfer is at " << ((float)percent/10) << " percent."; #endif - progressBar_->setValue( percent ); - - QString statusLabel; - QString transfered = toReadableBytes(bytesTransferred); - QString complete = toReadableBytes(filesize_); - - previousPercentage_ = percent; - if( incoming_ ) { - statusLabel = i18n("%1 of %2 received"); + statusText_ = i18n( "%1 of %2 received.", transferred, total ); } else { - statusLabel = i18n("%1 of %2 sent"); + statusText_ = i18n( "%1 of %2 sent.", transferred, total ); } - statusLabel_->setText( statusLabel.arg(transfered).arg(complete) ); + statusLabel_->setText( statusText_ + " " + speedText_ ); } +// Update the transfer rate and ETA +void TransferEntry::updateTransferRate() +{ + // To avoid to works with different transferred bytes + ulong tempTransferred = bytesTransferred_; + + // Calculate the bytes transferred from the last calling + ulong bytesTransferredFromLast = tempTransferred - previousTransferred_; + + QString speed, eta; + + // Approximate the speed with the timeout of timer (3) + int bytesSpeed = (int)( bytesTransferredFromLast / 3 ); + int currentEta; + + // Verify if the bytesSpeed is 0 + if( ! ( bytesSpeed == 0 ) ) + { + currentEta = (int) ( ( filesize_ - tempTransferred ) / bytesSpeed ); + QTime timeEta; + eta = timeEta.addSecs( currentEta ).toString(); + previousTransferred_ = tempTransferred; + } + else + { + // Is impossible to calculate ETA + eta = i18n( "infinite" ); + } + + speedText_ = QString("Speed: %1, ETA: %2").arg( toReadableBytes( bytesSpeed ) ).arg( eta ); + + statusLabel_->setText( statusText_ + " " + speedText_ ); +} + #include "transferentry.moc" diff --git a/src/dialogs/transferentry.h b/src/dialogs/transferentry.h index d9f6548..f964605 100644 --- a/src/dialogs/transferentry.h +++ b/src/dialogs/transferentry.h @@ -20,17 +20,21 @@ #include "ui_transferentry.h" -#include - -class TransferEntry : public QWidget, public Ui::TransferEntry +/** + * @brief One transfer entry in the transfer window. + * + * @author Diederik van der Boor + * @ingroup Dialogs + */ +class TransferEntry : public QWidget, private Ui::TransferEntry { Q_OBJECT public: // Constructor - TransferEntry( QWidget *parent, const QString filename, const uint filesize, bool incoming = false, + TransferEntry( QWidget *parent, const QString filename, const ulong filesize, bool incoming = false, const QImage preview = QImage() ); // Destructor virtual ~TransferEntry(); @@ -43,7 +47,7 @@ public: void setTransferID( int transferID ); // Format nicely the byte quantities - static QString toReadableBytes( uint bytes ); + static QString toReadableBytes( ulong bytes ); public slots: // Mark the transfer as failed @@ -53,13 +57,15 @@ public slots: // Set a status message void setStatusMessage( const QString &message ); // Update the progress bar - void updateProgress( uint bytesTransferred ); + void updateProgress( ulong bytesTransferred ); private slots: // The cancel link was pressed void cancelClicked(); // The open link was pressed void openClicked(); + // Update the transfer rate and ETA + void updateTransferRate(); signals: // Emit a request to cancel the transfer @@ -73,11 +79,21 @@ private: // The file name QString filename_; // The file size - uint filesize_; + ulong filesize_; // The image preview QPixmap preview_; // The previous percentage int previousPercentage_; + // The current trasferred bytes + ulong bytesTransferred_; + // The timer for estimated the trasfer rate + QTimer *timer_; + // The previous trasferred bytes + ulong previousTransferred_; + // The current status text + QString statusText_; + // The current speed text + QString speedText_; // The ID of this transfer, used by the Transfer Window int transferID_; }; diff --git a/src/dialogs/transferentry.ui b/src/dialogs/transferentry.ui index a7c2e8d..8670afb 100644 --- a/src/dialogs/transferentry.ui +++ b/src/dialogs/transferentry.ui @@ -6,7 +6,7 @@ 0 0 350 - 85 + 70 @@ -18,7 +18,7 @@ 350 - 85 + 70 @@ -85,20 +85,34 @@ - - - - 0 - 0 - - - - - 200 - 0 - - - + + + + + + + + + + + + + 0 + 0 + + + + + 200 + 0 + + + + KSqueezedTextLabel + + + + @@ -118,6 +132,9 @@ 0 + + KSqueezedTextLabel + @@ -223,8 +240,8 @@ openClicked() - 20 - 20 + 325 + 18 20 @@ -239,8 +256,8 @@ cancelClicked() - 20 - 20 + 325 + 40 20 diff --git a/src/dialogs/transferwindow.cpp b/src/dialogs/transferwindow.cpp index bcacc1e..eb06586 100644 --- a/src/dialogs/transferwindow.cpp +++ b/src/dialogs/transferwindow.cpp @@ -17,16 +17,10 @@ #include "transferwindow.h" +#include "../utils/kmessconfig.h" #include "../kmessdebug.h" #include "transferentry.h" -#include -#include -#include -#include -#include - -#include // Initialize the entries counter @@ -41,9 +35,10 @@ TransferWindow::TransferWindow( QWidget *parent ) : KDialog( parent, Qt::Dialog ) // Explicitly set the window type to disable the destructive close behavior , Ui::TransferWindow() { - // Setup the user interface - setupUi( this ); - setMainWidget( scrollingFrame_ ); + // Set up the interface and the dialog + QWidget *mainWidget = new QWidget( this ); + setupUi( mainWidget ); + setMainWidget( mainWidget ); // Get the scroll area's layout and add a flexible space to it, so our entries will stay at the top layout_ = static_cast( transfersArea_->layout() ); @@ -53,7 +48,7 @@ TransferWindow::TransferWindow( QWidget *parent ) setButtons( User1 | Close ); setDefaultButton( Close ); setCaption( i18n("File Transfers") ); - restoreDialogSize( KGlobal::config()->group("TransferWindow") ); + restoreDialogSize( KMessConfig::instance()->getGlobalConfig( "TransferWindow" ) ); // Set up the Clean Up button behavior setButtonText( User1, i18n("Cl&ean Up") ); @@ -76,7 +71,7 @@ TransferWindow::~TransferWindow() #endif // Save the dialog size and position - KConfigGroup group = KGlobal::config()->group("TransferWindow"); + KConfigGroup group = KMessConfig::instance()->getGlobalConfig( "TransferWindow" ); saveDialogSize( group ); // Destroy the instance data @@ -87,7 +82,7 @@ TransferWindow::~TransferWindow() // Add an entry to the transfer manager -int TransferWindow::addEntry( const QString filename, uint filesize, bool incoming, const QImage preview ) +int TransferWindow::addEntry( const QString filename, ulong filesize, bool incoming, const QImage preview ) { #ifdef KMESSDEBUG_TRANSFERWINDOW kDebug() << "adding entry for '" << filename << "'."; @@ -161,7 +156,7 @@ void TransferWindow::setStatusMessage( int transferID, const QString &message ) // Update the progress bar of a transfer -void TransferWindow::updateProgress( int transferID, uint bytesTransferred ) +void TransferWindow::updateProgress( int transferID, ulong bytesTransferred ) { if( ! entryList_.contains( transferID ) ) { diff --git a/src/dialogs/transferwindow.h b/src/dialogs/transferwindow.h index 468fa65..741763f 100644 --- a/src/dialogs/transferwindow.h +++ b/src/dialogs/transferwindow.h @@ -21,7 +21,6 @@ #include "ui_transferwindow.h" #include -#include #include @@ -34,9 +33,11 @@ class TransferEntry; /** * A file transfer manager (aka download manager) singleton. + * * @author Diederik van der Boor + * @ingroup Dialogs */ -class TransferWindow : public KDialog, Ui::TransferWindow +class TransferWindow : public KDialog, private Ui::TransferWindow { Q_OBJECT @@ -48,7 +49,7 @@ class TransferWindow : public KDialog, Ui::TransferWindow public: // Add a new entry - int addEntry( const QString filename, uint filesize, bool incoming = false, + int addEntry( const QString filename, ulong filesize, bool incoming = false, const QImage preview = QImage() ); // Destroy the current instance static void destroy(); @@ -63,7 +64,7 @@ class TransferWindow : public KDialog, Ui::TransferWindow // Set the status message of a transfer void setStatusMessage( int transferID, const QString &message ); // Update the progress bar of a transfer - void updateProgress( int transferID, uint bytesTransferred ); + void updateProgress( int transferID, ulong bytesTransferred ); private slots: // The "Clean up" button was pressed. diff --git a/src/dialogs/userpicturesdialog.cpp b/src/dialogs/userpicturesdialog.cpp new file mode 100644 index 0000000..75fa4ad --- /dev/null +++ b/src/dialogs/userpicturesdialog.cpp @@ -0,0 +1,141 @@ +/*************************************************************************** + userpicturesdialog.cpp - description + ------------------- + begin : Fri Jul 7 2008 + copyright : (C) 2008 by Antonio Nastasi + email : sifcenter@gmail.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 License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + + +#include "userpicturesdialog.h" + +#include "../utils/kmessconfig.h" +#include "../kmessdebug.h" + +#include + + +UserPicturesDialog::UserPicturesDialog( QWidget *parent ) + : QWidget( parent ) +{ + setupUi(this); + setWindowTitle( i18n( "Choose or remove your avatar" ) ); + + useButton_ ->setText( i18n( "Use" ) ); + deleteButton_ ->setText( i18n( "Remove" ) ); + + connect( listPictures_, SIGNAL( itemSelectionChanged() ), + this, SLOT( slotItemSelectionChanged() ) ); + + connect( useButton_, SIGNAL( clicked() ), this, SLOT( useButtonClicked() ) ); + connect( deleteButton_, SIGNAL( clicked() ), this, SLOT( deleteButtonClicked() ) ); +} + + + +UserPicturesDialog::~UserPicturesDialog() +{ + kDebug() << "DESTROYED"; +} + + + +// Delete button was clicked +void UserPicturesDialog::deleteButtonClicked() +{ + // Check if the current item is valid + QListWidgetItem *currentItem = listPictures_->currentItem(); + if( currentItem == 0 ) + { + return; + } + + // Check if the file exists and remove it + QString filename = currentItem->data( 6 ).toString(); + if( QFile::exists( filename ) ) + { + QFile::remove( filename ); + } + + // Update the list + updateWidgets( handle_ ); +} + + + +// Current item was changed +void UserPicturesDialog::slotItemSelectionChanged() +{ + QListWidgetItem *currentItem = listPictures_->currentItem(); + + if( currentItem == 0 ) + { + useButton_ ->setEnabled( false ); + deleteButton_->setEnabled( false ); + } + else + { + // Set current item to avoid lost the blue rect on selection + listPictures_->setCurrentItem( currentItem ); + useButton_ ->setEnabled( true ); + deleteButton_->setEnabled( true); + } +} + + + +// Use button was clicked +void UserPicturesDialog::useButtonClicked() +{ + // Check if the current item is valid + QListWidgetItem *currentItem = listPictures_->currentItem(); + if( currentItem == 0 ) + { + return; + } + + emit pictureUpdate( false, currentItem->data( 6 ).toString() ); + hide(); +} + + + +// Update the widgets +void UserPicturesDialog::updateWidgets( const QString &handle ) +{ + int number = 0; + QString filePath; + QString dirPath = KMessConfig::instance()->getAccountDirectory( handle ); + QDir dir( dirPath + "/displaypics" ); + QListWidgetItem *item; + + handle_ = handle; + listPictures_->clear(); + + foreach( QString file, dir.entryList( QDir::Files | QDir::NoDotAndDotDot ) ) + { + // To avoid listing of temporary picture file + if( file.contains( "temporary-picture" ) ) + { + continue; + } + + filePath = dir.absolutePath() + "/" + file; + item = new QListWidgetItem( QIcon( filePath ), QString::number( ++number ), listPictures_ ); + item->setData( 6, filePath ); + } + + useButton_ ->setEnabled( false ); + deleteButton_->setEnabled( false ); +} + +#include "userpicturesdialog.moc" diff --git a/src/dialogs/userpicturesdialog.h b/src/dialogs/userpicturesdialog.h new file mode 100644 index 0000000..9190815 --- /dev/null +++ b/src/dialogs/userpicturesdialog.h @@ -0,0 +1,58 @@ +/*************************************************************************** + userpicturesdialog.h - description + ------------------- + begin : Fri Jul 7 2008 + copyright : (C) 2008 by Antonio Nastasi + email : sifcenter@gmail.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 License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef USERPICTURESDIALOG_H +#define USERPICTURESDIALOG_H + +#include "ui_userpicturesdialog.h" + +#include + + +/** + * + * @author Antonio Nastasi + * @ingroup Dialogs + */ +class UserPicturesDialog : public QWidget, private Ui::UserPicturesDialog +{ + Q_OBJECT + + public: + // Constructor + UserPicturesDialog( QWidget *parent = 0 ); + // Destructor + ~UserPicturesDialog(); + // Update the widgets + void updateWidgets( const QString &handle ); + + private slots: + // Delete button was clicked + void deleteButtonClicked(); + // Current item was changed + void slotItemSelectionChanged(); + // Use button was clicked + void useButtonClicked(); + + private: // private attributes + QString handle_; + + signals: + void pictureUpdate( bool resize, QString picture ); +}; + +#endif diff --git a/src/dialogs/userpicturesdialog.ui b/src/dialogs/userpicturesdialog.ui new file mode 100644 index 0000000..07fd323 --- /dev/null +++ b/src/dialogs/userpicturesdialog.ui @@ -0,0 +1,85 @@ + + UserPicturesDialog + + + Qt::ApplicationModal + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + + QAbstractItemView::NoEditTriggers + + + false + + + + 64 + 64 + + + + QListView::Static + + + QListView::Adjust + + + QListView::Batched + + + QListView::IconMode + + + true + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/emoticon.cpp b/src/emoticon.cpp index d053657..fba0e2d 100644 --- a/src/emoticon.cpp +++ b/src/emoticon.cpp @@ -20,14 +20,9 @@ #include "kmessdebug.h" #include "currentaccount.h" -#include -#include #include -#include -#include #include -#include #include @@ -86,9 +81,7 @@ Emoticon::Emoticon( const QString &pictureName, const QString &tooltip, const QS /** * Create an exact copy of another emoticon * - * @param pictureName The picture file name - * @param tooltip The name of this emoticon, which will be displayed as tooltip in the Emoticon Sidebar - * @param pictureDirectory The folder where this emoticon's image is located + * @param other The object to copy */ Emoticon::Emoticon( const Emoticon &other ) : QObject() @@ -119,7 +112,7 @@ Emoticon::~Emoticon() /** * Add a text shortcut which will translate to this emoticon * - * @param text Shortcut text + * @param shortcut Shortcut text */ void Emoticon::addShortcut( QString shortcut ) { @@ -359,6 +352,7 @@ void Emoticon::setTooltip( const QString &pictureTooltip ) */ void Emoticon::update() { + bool found = false; QImage emoticonData; QString emoticonPath; QStringList allowedTypes; @@ -380,40 +374,44 @@ void Emoticon::update() // For each iteration: // - with a standard emoticon, will check both folders (current and default theme); // - with a custom emoticon, will skip the check in the default theme folder, since they simply can't be there. - QStringList::Iterator itType = allowedTypes.begin(); - do + foreach( QString pictureType, allowedTypes ) { if( isCustomEmoticon_ ) { - picturePath_ = emoticonPath + pictureName_ + "." + *itType; + picturePath_ = emoticonPath + "/" + pictureName_ + "." + pictureType; } else { - picturePath_ = dirs->findResource( "emoticons", emoticonPath + "/" + pictureName_ + "." + *itType ); + picturePath_ = dirs->findResource( "emoticons", emoticonPath + "/" + pictureName_ + "." + pictureType ); + } + + if( ! picturePath_.isNull() && KStandardDirs::exists( picturePath_ ) ) + { + found = true; + break; + } + } + + // If this emoticon does not exist in this theme, try again loading the default KMess emoticon + if( ! found ) + { + foreach( QString pictureType, allowedTypes ) + { + // Search in Kmess' default theme folder + picturePath_ = dirs->findResource( "emoticons", "KMess-new/" + originalPictureName_ + "." + pictureType ); if( ! picturePath_.isNull() && KStandardDirs::exists( picturePath_ ) ) { break; } - - // Search in Kmess' default theme folder - picturePath_ = dirs->findResource( "emoticons", "KMess-new/" + originalPictureName_ + "." + *itType ); } - - if( ! picturePath_.isNull() && KStandardDirs::exists( picturePath_ ) ) - { - break; - } - - ++itType; } - while( itType != allowedTypes.end() ); // Fail if the path isn't valid, or if the emoticon can't be loaded if( picturePath_.isEmpty() || ! emoticonData.load( picturePath_ ) || emoticonData.isNull() ) { #ifdef KMESSDEBUG_EMOTICONS_GENERAL - kDebug() << "Update failed: " << originalPictureName_ << " (" << (isCustomEmoticon_?"custom":"standard") << ")"; + kDebug() << "Update failed: " << picturePath_ << "(" << (isCustomEmoticon_?"custom":"standard") << ", shortcut" << originalPictureName_ << ")"; #endif valid_ = false; return; diff --git a/src/emoticon.h b/src/emoticon.h index 7a6c128..1338885 100644 --- a/src/emoticon.h +++ b/src/emoticon.h @@ -18,7 +18,6 @@ #ifndef EMOTICON_H #define EMOTICON_H -#include #include diff --git a/src/emoticonmanager.cpp b/src/emoticonmanager.cpp index 53544f7..ad89621 100644 --- a/src/emoticonmanager.cpp +++ b/src/emoticonmanager.cpp @@ -23,11 +23,8 @@ #include "kmessdebug.h" #include -#include #include -#include - #ifdef KMESSDEBUG_EMOTICONS #define KMESSDEBUG_EMOTICONS_GENERAL @@ -159,14 +156,6 @@ void EmoticonManager::disconnected() kDebug() << "Guest account - do not save the theme."; } #endif - - - // Change theme and connect its update signal - delete customTheme_; - customTheme_ = new EmoticonTheme(); - connect( customTheme_, SIGNAL( updated() ), this, SIGNAL( updated() ) ); - - emit updated(); } @@ -316,8 +305,6 @@ EmoticonManager* EmoticonManager::instance() if ( instance_ == 0 ) { instance_ = new EmoticonManager(); - connect( CurrentAccount::instance(), SIGNAL(changedEmoticonSettings() ), - instance_, SLOT(slotChangedEmoticonSettings() ) ); } return instance_; } diff --git a/src/emoticonmanager.h b/src/emoticonmanager.h index 905443c..b93a6a8 100644 --- a/src/emoticonmanager.h +++ b/src/emoticonmanager.h @@ -21,7 +21,6 @@ #include "emoticon.h" #include "emoticontheme.h" -#include #include diff --git a/src/emoticontheme.cpp b/src/emoticontheme.cpp index da157eb..2379352 100644 --- a/src/emoticontheme.cpp +++ b/src/emoticontheme.cpp @@ -16,16 +16,16 @@ ***************************************************************************/ #include "emoticontheme.h" + +#include "utils/kmessconfig.h" #include "kmessdebug.h" #include #include #include -#include #include #include -#include #include #include #include @@ -64,7 +64,8 @@ EmoticonTheme::EmoticonTheme( const EmoticonTheme &other ) , themePath_(other.themePath_) { // Duplicate one by one the other theme's emoticons - foreach( Emoticon *emoticon, other.getEmoticons() ) + const QListemoticonList( other.getEmoticons() ); + foreach( Emoticon *emoticon, emoticonList ) { emoticon = new Emoticon( *emoticon ); emoticon->update(); @@ -427,53 +428,24 @@ const QString &EmoticonTheme::getThemePath() bool EmoticonTheme::loadTheme( QString themeName, bool isCustomTheme ) { bool success = false; - KStandardDirs *dirs = KGlobal::dirs(); - themePath_ = QString::null; + QString oldThemePath = themePath_; isCustomTheme_ = isCustomTheme; #ifdef KMESSDEBUG_EMOTICON_THEMES kDebug() << "Loading " << themeName << " as " << (isCustomTheme?"custom":"default") << " theme."; #endif - // Try to find the theme between all possible locations - QString resourceType, resourceDir; - if( isCustomTheme_ ) + // Change the theme name (where it is stored) + setThemeName( themeName ); + + if( oldThemePath == themePath_ ) { - // Custom themes are located in: [kmess app data folder]/customemoticons/[account email] - // This call creates missing directories. - themePath_ = KStandardDirs::locateLocal( "data", "kmess/customemoticons/" + themeName + "/emoticons.xml", true ); - - QFileInfo pathInfo( themePath_ ); - - // KStandardDirs::locateLocal() also returns the file name, which we don't need. - themePath_ = pathInfo.absolutePath() + "/"; - - // Check if the folder exists - pathInfo.setFile( themePath_ ); - if( ! pathInfo.isDir() ) - { - // The theme hasn't been created! - kWarning() << "Couldn't create the new theme folder '" << themePath_ << "'!"; - - return false; - } +#ifdef KMESSDEBUG_EMOTICON_THEMES + kDebug() << "Theme" << themeName << "was already loaded!"; +#endif + return true; } - else - { - // Standard themes can be in the KDE global emoticons dir, or in the ~/.kde/share/emoticons folder, and possibly elsewhere - themePath_ = dirs->findResourceDir( "emoticons", themeName + "/emoticons.xml" ); - - // The theme hasn't been found! - if( themePath_.isNull() ) - { - return false; - } - - // findResourceDir() only returns the base path for the file you pass to it. - themePath_ += themeName + "/"; - } - // Set the theme loading status, needed by addEmoticon() loadingTheme_ = true; @@ -601,6 +573,19 @@ bool EmoticonTheme::saveTheme() return true; } + // Create any missing directories. + QDir dir; + dir.mkpath( themePath_ ); + + // Check if the folder exists + if( ! dir.exists() ) + { + // The theme hasn't been created! + kWarning() << "Couldn't create the new theme folder '" << themePath_ << "'!"; + + return false; + } + QString themeFileName( themePath_ + "emoticons.xml" ); QFile xmlFile( themeFileName ); @@ -673,6 +658,36 @@ bool EmoticonTheme::saveTheme() +/** + * @brief Change the theme name + * + * Alter the name of the theme, which is the name of the directory where the theme will + * be stored. + * + * @param newThemeName The new name + */ +void EmoticonTheme::setThemeName( const QString &newThemeName ) +{ + KStandardDirs *dirs = KGlobal::dirs(); + + // Try to find the theme between all possible locations + if( isCustomTheme_ ) + { + // Custom themes are located in: //customemoticons + themePath_ = KMessConfig::instance()->getAccountDirectory( newThemeName ) + "/customemoticons/"; + } + else + { + // Standard themes can be in the KDE global emoticons dir, or in the ~/.kde/share/emoticons folder, and possibly elsewhere + themePath_ = dirs->findResourceDir( "emoticons", newThemeName + "/emoticons.xml" ); + + // findResourceDir() only returns the base path for the file you pass to it. + themePath_ += newThemeName + "/"; + } +} + + + /** * Rebuild the search&replace caches */ @@ -683,14 +698,6 @@ void EmoticonTheme::updateCache() QString emoticonTextPattern; QFileInfo file; - if( emoticons_.isEmpty() ) - { -#ifdef KMESSDEBUG_EMOTICON_THEMES - kDebug() << "Not updating the caches: the theme is empty."; -#endif - return; - } - #ifdef KMESSDEBUG_EMOTICON_THEMES kDebug() << "Updating the caches."; #endif diff --git a/src/emoticontheme.h b/src/emoticontheme.h index 47ebdd5..aa861e4 100644 --- a/src/emoticontheme.h +++ b/src/emoticontheme.h @@ -22,7 +22,6 @@ #include #include -#include #include @@ -80,6 +79,8 @@ class EmoticonTheme : public QObject bool renameEmoticon( QString oldShortcut, QString newShortcut ); // Save the current theme to an XML theme definition file bool saveTheme(); + // Change the theme name + void setThemeName( const QString &newThemeName ); public: // Public static methods // Return the full path of the first emoticon of the specified theme diff --git a/src/initialview.cpp b/src/initialview.cpp index 464a567..d68ac11 100644 --- a/src/initialview.cpp +++ b/src/initialview.cpp @@ -17,46 +17,37 @@ #include "initialview.h" +#include "utils/kmessconfig.h" +#include "accountsmanager.h" #include "account.h" #include "kmessdebug.h" -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include +#include #include -#include #include +#include // The constructor -InitialView::InitialView( QWidget *parent, const QListaccountList ) +InitialView::InitialView( QWidget *parent ) : QWidget( parent ) , Ui::InitialView() + , isConnecting_( false ) { // Set up the UI first setupUi( this ); // Set the username box with the last used email address - config_ = KGlobal::config()->group( "InitialView" ); + config_ = KMessConfig::instance()->getGlobalConfig( "InitialView" ); defaultHandle_ = config_.readEntry( "defaultHandle", "me@hotmail.com" ); // Enable auto completion handleCombobox_->setCompletionMode( KGlobalSettings::CompletionPopup ); // Select an image to load into the main screen.. mmmm, eggs! - // Applied both in InitialView and AutologinView. QString imageName; QDate currentDate = QDate::currentDate(); if( currentDate.month() == 12 && currentDate.day() > 15 ) @@ -67,15 +58,12 @@ InitialView::InitialView( QWidget *parent, const QListaccountList ) { imageName = "kmesslogo"; } - // Load the chosen icon - KIconLoader *loader = KIconLoader::global(); - QPixmap icon = loader->loadIcon( imageName, KIconLoader::User ); + loader_ = KIconLoader::global(); + QPixmap icon = loader_->loadIcon( imageName, KIconLoader::User ); kmessLogo_->setPixmap( icon ); kmessLogo_->setMinimumSize( icon.width(), icon.height() ); - connectButton_->setIcon( loader->loadIcon( "network-connect", KIconLoader::Small, KIconLoader::SizeMedium ) ); - // Add the items to the initial status combo box QStringList states; states << i18n("Online") @@ -88,7 +76,8 @@ InitialView::InitialView( QWidget *parent, const QListaccountList ) initialStatus_->insertItems( 0, states ); // Load the accounts list into our combo box - foreach( Account *account, accountList ) + const QList accountsList = AccountsManager::instance()->getAccounts(); + foreach( Account *account, accountsList ) { addAccount( account ); } @@ -99,15 +88,39 @@ InitialView::InitialView( QWidget *parent, const QListaccountList ) // Connect the remaining signals connect( handleCombobox_, SIGNAL( editTextChanged(const QString&) ), this, SLOT ( updateView() ) ); - // TODO: Remove this workaround before the KMess2 release. KDE4.1 will have a fix. +#if KDE_IS_VERSION(4,0,70) + connect( handleCombobox_, SIGNAL( returnPressed() ), + connectButton_, SLOT ( animateClick() ) ); +#else connect( handleCombobox_->lineEdit(), SIGNAL( returnPressed() ), connectButton_, SLOT ( animateClick() ) ); +#endif connect( connectButton_, SIGNAL( clicked() ), - this, SLOT ( connectToMsnDelayed() ) ); + this, SLOT ( slotConnectClicked() ) ); connect( rememberAccountCheckBox_, SIGNAL( stateChanged(int) ), this, SLOT ( rememberAccountStateChanged(int) ) ); connect( optionsLabel_, SIGNAL( leftClickedUrl(QString) ), this, SLOT ( toggleOptionsBox() ) ); + + // When an account is edited, reflect the changes in the accounts list + connect( AccountsManager::instance(), SIGNAL( accountChanged(Account*,QString,QString) ), + this, SLOT ( updateView() ) ); + + // When (if!) the passwords have been read from the user's password wallet, show them + connect( AccountsManager::instance(), SIGNAL( passwordsReady() ), + this, SLOT ( updateView() ) ); + + // The status is needed only later + statusLabel_->hide(); + + // Force an update of the view + setEnabled( true ); + updateView(); + + // Use Solid to find out whether we're connected or not, and apply the status immediately + connect( Solid::Networking::notifier(), SIGNAL( statusChanged(Solid::Networking::Status) ), + this, SLOT ( slotConnectionStatusChanged(Solid::Networking::Status) ) ); + slotConnectionStatusChanged( Solid::Networking::status() ); } @@ -131,7 +144,7 @@ void InitialView::addAccount(Account *account) accounts_.insert( handle, account ); // Add an entry for the account to the dropdown list - handleCombobox_->addItem( handle ); // + " (" + account->getFriendlyName() + ")" ); + handleCombobox_->addItem( handle ); handleCombobox_->completionObject()->addItem( handle ); // Select the account in the combobox if it's the default account. @@ -181,60 +194,37 @@ void InitialView::changedAccount( QString oldName, QString newName ) -// Connect to MSN with the entered account data -void InitialView::connectToMsn() -{ - QString handle = getSelectedHandle(); - - // Avoid connecting with empty fields - if( handle.isEmpty() || passwordEdit_->text().isEmpty() ) - { - return; - } - - // Also don't connect if the handle is invalid - if( ! Account::isValidEmail( handle ) ) - { - handleCombobox_->setFocus(); - return; - } - - // Save the entered text - config_.writeEntry( "defaultHandle", handle ); - - // Update the initial status - Status initialStatus; - - // Find out what status has been chosen - switch( initialStatus_->currentIndex() ) - { - case 1: initialStatus = STATUS_AWAY; break; - case 2: initialStatus = STATUS_BE_RIGHT_BACK; break; - case 3: initialStatus = STATUS_BUSY; break; - case 4: initialStatus = STATUS_OUT_TO_LUNCH; break; - case 5: initialStatus = STATUS_ON_THE_PHONE; break; - case 6: initialStatus = STATUS_INVISIBLE; break; - case 0: - default: initialStatus = STATUS_ONLINE; break; - } - - // Inform parent with the account information - emit connectWithAccount( handle, passwordEdit_->text(), rememberAccountCheckBox_->isChecked(), - rememberPasswordCheckBox_->isChecked(), initialStatus ); -} - - - /** - * The "connect" button was pressed, schedule connection + * @brief Update the view when the network connection status changes * - * This method avoids instant deletion of our widgets while they're still animating. - * It happens because, when we emit the connectWithAccount signal, the receiver (the KMess class) - * deletes this class, which widgets are still performing Qt4 microanimations. + * This method receives KDE's Solid network connection status changes, and updates the view's widgets + * to reflect it. + * + * @param newStatus The new status of the network connection */ -void InitialView::connectToMsnDelayed() +void InitialView::slotConnectionStatusChanged( Solid::Networking::Status newStatus ) { - QTimer::singleShot( 150, this, SLOT( connectToMsn() ) ); + // If Solid is unable to retrieve the status, assume we're connected + bool isConnected = ( newStatus == Solid::Networking::Connected || newStatus == Solid::Networking::Unknown ); + + connectButton_->setEnabled( isConnected ); + + if( isConnected && ! isConnecting_ ) + { + statusLabel_->setVisible( false ); + statusMessage( QString() ); + } + else + { + if( isConnecting_ ) + { + // Force a disconnection + connectButton_->click(); + } + + statusLabel_->setVisible( true ); + statusMessage( i18n("Internet connection not available.") ); + } } @@ -301,6 +291,13 @@ void InitialView::updateView() passwordEdit_->setText( account->getPassword() ); } + // Set the current account picture + QPixmap picture( account->getPicturePath() ); + if( ! picture.isNull() ) + { + pictureLabel_->setPixmap( picture ); + } + rememberAccountCheckBox_->setChecked( ! account->isGuestAccount() ); rememberAccountCheckBox_->setDisabled( ! account->isGuestAccount() ); @@ -322,9 +319,23 @@ void InitialView::updateView() else { // User typed a new account name + + // Set the default picture + KStandardDirs *dirs = KGlobal::dirs(); + QPixmap picture( dirs->findResource( "data", "kmess/pics/kmesspic.png" ) ); + if( ! picture.isNull() ) + { + pictureLabel_->setPixmap( picture ); + } + + // Set the default options + rememberAccountCheckBox_ ->setDisabled( false ); + rememberPasswordCheckBox_->setDisabled( false ); + rememberAccountCheckBox_ ->setChecked ( true ); + rememberPasswordCheckBox_->setChecked ( false ); + // Clear password again passwordEdit_->setText( QString::null ); - rememberAccountCheckBox_->setDisabled( false ); initialStatus_->setCurrentIndex( 0 ); } @@ -350,6 +361,140 @@ void InitialView::rememberAccountStateChanged( int state ) +// Enable or disable the widgets when we're waiting or connecting +void InitialView::setEnabled( bool isEnabled ) +{ + loginBox_ ->setEnabled( isEnabled ); + optionsBox_ ->setEnabled( isEnabled ); + optionsLabel_ ->setVisible( isEnabled ); + initialStatusLabel_->setEnabled( isEnabled ); + initialStatus_ ->setEnabled( isEnabled ); + statusLabel_ ->setVisible( ! isEnabled ); + + // Switch the button's look + if( isEnabled ) + { + connectButton_->setText( i18n( "Connect" ) ); + connectButton_->setIcon( loader_->loadIcon( "network-connect", KIconLoader::Small, KIconLoader::SizeMedium ) ); + } + else + { + connectButton_->setText( i18n( "Disconnect" ) ); + connectButton_->setIcon( loader_->loadIcon( "network-disconnect", KIconLoader::Small, KIconLoader::SizeMedium ) ); + } +} + + + +// The connect/disconnect button has been clicked +void InitialView::slotConnectClicked() +{ +#ifdef KMESSDEBUG_INITIALVIEW + kDebug() << "Connect button clicked," << (isConnecting_?"disconnecting":"connecting"); +#endif + + // The button was acting as Disconnect button when it was clicked + if( isConnecting_ ) + { + isConnecting_ = false; + + // Enable back the widgets to allow connecting again + setEnabled( true ); + + emit disconnectClicked(); + + return; + } + + // The button was acting as Connect button when it was clicked + + QString handle = getSelectedHandle(); + + // Avoid connecting with empty fields + if( handle.isEmpty() || passwordEdit_->text().isEmpty() ) + { + return; + } + + // Also don't connect if the handle is invalid + if( ! Account::isValidEmail( handle ) ) + { + handleCombobox_->setFocus(); + return; + } + + // Set the UI options for the selected handle + handleCombobox_->setEditText( handle ); + + isConnecting_ = true; + + // Disable the widgets to start connecting + setEnabled( false ); + + // Save the currently selected account for the next logins + defaultHandle_ = handle; + config_.writeEntry( "defaultHandle", handle ); + + // Find out what status has been chosen + Status initialStatus; + switch( initialStatus_->currentIndex() ) + { + case 1: initialStatus = STATUS_AWAY; break; + case 2: initialStatus = STATUS_BE_RIGHT_BACK; break; + case 3: initialStatus = STATUS_BUSY; break; + case 4: initialStatus = STATUS_OUT_TO_LUNCH; break; + case 5: initialStatus = STATUS_ON_THE_PHONE; break; + case 6: initialStatus = STATUS_INVISIBLE; break; + case 0: + default: initialStatus = STATUS_ONLINE; break; + } + + // Inform parent with the account information + emit connectWithAccount( handle, passwordEdit_->text(), rememberAccountCheckBox_->isChecked(), + rememberPasswordCheckBox_->isChecked(), initialStatus ); +} + + + +// Start connecting with a specified account +void InitialView::startedConnecting( const QString handle ) +{ + // Do nothing if an invalid or no account has been selected + if( handle.isEmpty() || ! accounts_.contains( handle ) ) + { +#ifdef KMESSDEBUG_INITIALVIEW + kDebug() << "Not updating view for invalid handle" << handle; +#endif + return; + } + +#ifdef KMESSDEBUG_INITIALVIEW + kDebug() << "Updating UI for" << handle; +#endif + + // Set the UI options for the selected handle + handleCombobox_->setEditText( handle ); + + isConnecting_ = true; + + // Disable the widgets to start connecting + setEnabled( false ); + + // Save the currently selected account for the next logins + defaultHandle_ = handle; + config_.writeEntry( "defaultHandle", handle ); +} + + + +// Change the connection status text +void InitialView::statusMessage( QString text ) +{ + statusLabel_->setText( text ); +} + + + // Toggle displaying the Options box, which allows remembering accounts & passwords void InitialView::toggleOptionsBox() { diff --git a/src/initialview.h b/src/initialview.h index b28e8d7..5e1dc36 100644 --- a/src/initialview.h +++ b/src/initialview.h @@ -22,12 +22,12 @@ #include "contact/msnstatus.h" #include -#include + +#include // Forward declarations class Account; -class KConfig; @@ -41,51 +41,61 @@ class KConfig; * @author Mike K. Bennett * @ingroup Root */ -class InitialView : public QWidget, public Ui::InitialView +class InitialView : public QWidget, private Ui::InitialView { Q_OBJECT public: // The constructor - InitialView( QWidget *parent, const QListaccountList ); + InitialView( QWidget *parent ); // The destructor virtual ~InitialView(); + // Add an account to the list of displayed accounts from which the user can choose + void addAccount( Account *account ); // Modify an account in the list of displayed accounts from which the user can choose void changedAccount( QString oldName, QString newName ); // The account was deleted void deleteAccount(Account *account); + // Start connecting with a specified account + void startedConnecting( const QString handle ); public slots: // Public slots // A profile was selected from the drop-down list, or written manually. void updateView(); + // Change the connection status text + void statusMessage( QString text ); private slots: - // Connect to MSN with the entered account data - void connectToMsn(); - // The "connect" button was pressed, schedule connection - void connectToMsnDelayed(); // Get the currently selected handle QString getSelectedHandle() const; // The "remember account" checkbox change its state void rememberAccountStateChanged( int state ); + // Enable or disable the widgets when we're connecting or waiting + void setEnabled( bool isEnabled ); + // The connect/disconnect button has been clicked + void slotConnectClicked(); + // Detect changes in the status of the internet connection + void slotConnectionStatusChanged( Solid::Networking::Status newStatus ); // Toggle displaying the Options box, which allows remembering accounts & passwords void toggleOptionsBox(); - private: // Private methods - // Add an account to the list of displayed accounts from which the user can choose - void addAccount( Account *account ); - private: // Private attributes // The list of accounts to choose from - QHash accounts_; + QHash accounts_; // The application's configuration file KConfigGroup config_; // The default handle to display QString defaultHandle_; + // Whether the UI is set up for connection or waiting for the login data + bool isConnecting_; + // Loader for icons + KIconLoader *loader_; signals: // Public signals // Connect with the given account void connectWithAccount( QString handle, QString password, bool rememberAccount, bool rememberPassword, Status initialStatus ); + // Disconnect button was clicked + void disconnectClicked(); }; #endif diff --git a/src/initialview.ui b/src/initialview.ui index 722c421..95f57f7 100644 --- a/src/initialview.ui +++ b/src/initialview.ui @@ -5,87 +5,26 @@ 0 0 - 378 - 530 + 546 + 637 + + 5 + + + 5 + - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 20 - 16 - - - - - - - - - 0 - 0 - - - - - 64 - 64 - - - - false - - - Qt::AlignVCenter - - - false - - - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 20 - 16 - - - - - - - - + + + QFrame::Sunken + - Qt::Vertical + Qt::Horizontal - - QSizePolicy::Fixed - - - - 61 - 13 - - - + @@ -106,525 +45,142 @@ - - - Enter your login information: + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 100 + 104 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 2 + + + + + + 96 + 96 + + + + + 96 + 96 + + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + + + true + + + Qt::AlignCenter + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + - + false - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 16 - 16 - - - - - - - - Email address - - + false + + + + + Email address: + + + false + + + + + + + true + + + + + + + Password: + + + false + + + + + + + QLineEdit::Password + + + + + TextLabel2 + TextLabel3 + handleCombobox_ + passwordEdit_ - - - true - - - - - - - Password - - - false - - - - - - - - - - - - 0 - 0 - 0 - - - - - - - 204 - 204 - 204 - - - - - - - 255 - 255 - 255 - - - - - - - 229 - 229 - 229 - - - - - - - 102 - 102 - 102 - - - - - - - 136 - 136 - 136 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 58 - 137 - 201 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - 204 - 204 - 204 - - - - - - - 255 - 255 - 255 - - - - - - - 234 - 234 - 234 - - - - - - - 102 - 102 - 102 - - - - - - - 136 - 136 - 136 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 58 - 137 - 201 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 0 - 0 - 0 - - - - - - - - - 128 - 128 - 128 - - - - - - - 204 - 204 - 204 - - - - - - - 255 - 255 - 255 - - - - - - - 234 - 234 - 234 - - - - - - - 102 - 102 - 102 - - - - - - - 136 - 136 - 136 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 128 - 128 - 128 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 58 - 137 - 201 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 0 - 0 - 0 - - - - - - - - QLineEdit::Password - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 16 - 16 - - - - - - + Status at login @@ -668,448 +224,6 @@ - - - - - - - 0 - 0 - 0 - - - - - - - 204 - 204 - 204 - - - - - - - 255 - 255 - 255 - - - - - - - 229 - 229 - 229 - - - - - - - 102 - 102 - 102 - - - - - - - 136 - 136 - 136 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 58 - 137 - 201 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - 204 - 204 - 204 - - - - - - - 255 - 255 - 255 - - - - - - - 234 - 234 - 234 - - - - - - - 102 - 102 - 102 - - - - - - - 136 - 136 - 136 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 58 - 137 - 201 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 0 - 0 - 0 - - - - - - - - - 128 - 128 - 128 - - - - - - - 204 - 204 - 204 - - - - - - - 255 - 255 - 255 - - - - - - - 234 - 234 - 234 - - - - - - - 102 - 102 - 102 - - - - - - - 136 - 136 - 136 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 128 - 128 - 128 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 58 - 137 - 201 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 0 - 0 - 0 - - - - - - Remem&ber this profile @@ -1120,448 +234,6 @@ - - - - - - - 0 - 0 - 0 - - - - - - - 204 - 204 - 204 - - - - - - - 255 - 255 - 255 - - - - - - - 229 - 229 - 229 - - - - - - - 102 - 102 - 102 - - - - - - - 136 - 136 - 136 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 58 - 137 - 201 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - 204 - 204 - 204 - - - - - - - 255 - 255 - 255 - - - - - - - 234 - 234 - 234 - - - - - - - 102 - 102 - 102 - - - - - - - 136 - 136 - 136 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 58 - 137 - 201 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 0 - 0 - 0 - - - - - - - - - 128 - 128 - 128 - - - - - - - 204 - 204 - 204 - - - - - - - 255 - 255 - 255 - - - - - - - 234 - 234 - 234 - - - - - - - 102 - 102 - 102 - - - - - - - 136 - 136 - 136 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 128 - 128 - 128 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 58 - 137 - 201 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 0 - 0 - 0 - - - - - - Also r&emember the password @@ -1609,448 +281,6 @@ - - - - - - - 0 - 0 - 0 - - - - - - - 204 - 204 - 204 - - - - - - - 255 - 255 - 255 - - - - - - - 229 - 229 - 229 - - - - - - - 102 - 102 - 102 - - - - - - - 136 - 136 - 136 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 85 - 170 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - 204 - 204 - 204 - - - - - - - 255 - 255 - 255 - - - - - - - 234 - 234 - 234 - - - - - - - 102 - 102 - 102 - - - - - - - 136 - 136 - 136 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 85 - 170 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 0 - 0 - 0 - - - - - - - - - 128 - 128 - 128 - - - - - - - 204 - 204 - 204 - - - - - - - 255 - 255 - 255 - - - - - - - 234 - 234 - 234 - - - - - - - 102 - 102 - 102 - - - - - - - 136 - 136 - 136 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 128 - 128 - 128 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 85 - 170 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 0 - 0 - 0 - - - - - - Qt::TabFocus @@ -2077,14 +307,21 @@ + + + + + + + Qt::AlignCenter + + + Qt::Vertical - - QSizePolicy::Expanding - 20 @@ -2096,6 +333,65 @@ + + + + Qt::Horizontal + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 20 + 16 + + + + + + + + + 0 + 0 + + + + + 64 + 64 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 20 + 16 + + + + + + @@ -2113,7 +409,6 @@ - passwordEdit_ initialStatus_ rememberAccountCheckBox_ connectButton_ @@ -2127,12 +422,12 @@ animateClick() - 265 - 277 + 282 + 237 - 225 - 430 + 236 + 480 diff --git a/src/kmess.cpp b/src/kmess.cpp index 16839fa..e78a61f 100644 --- a/src/kmess.cpp +++ b/src/kmess.cpp @@ -17,8 +17,8 @@ #include "kmess.h" +#include "chat/chat.h" #include "chat/chatmaster.h" -#include "chat/chatwindow.h" #include "contact/contact.h" #include "contact/contactlist.h" #include "contact/group.h" @@ -34,12 +34,16 @@ #include "notification/contactstatusnotification.h" #include "notification/newemailnotification.h" #include "notification/passivepopup.h" -#include "settings/settingsdialog.h" +#include "settings/accountsettingsdialog.h" #include "utils/idletimer.h" +#include "utils/kmessconfig.h" +#include "utils/kmessdbus.h" +#include "utils/kmessshared.h" #include "utils/nowlisteningclient.h" +#include "utils/richtextparser.h" #include "account.h" +#include "accountsmanager.h" #include "accountaction.h" -#include "autologinview.h" #include "currentaccount.h" #include "emoticonmanager.h" #include "initialview.h" @@ -50,26 +54,22 @@ #include -#include #include #include #include #include #include -#include #include -#include #include #include #include -#include +#include // The constructor KMess::KMess( QWidget *parent ) : KMessInterface( parent ), - autologinView_(0), chatMaster_(0), chatNotification_(0), contactStatusNotification_(0), @@ -103,8 +103,7 @@ KMess::~KMess() // Saving properties manually. - KConfigGroup group = KGlobal::config()->group( "" ); - saveProperties( group ); + saveProperties(); // Delete all chat windows if(chatMaster_ != 0) @@ -133,16 +132,15 @@ KMess::~KMess() delete newEmailNotification_; delete nowListeningClient_; delete msnNotificationConnection_; + + AccountsManager::destroy(); CurrentAccount::destroy(); TransferWindow::destroy(); + KMessConfig::destroy(); #ifdef KMESS_NETWORK_WINDOW NetworkWindow::destroy(); #endif - // Delete the accounts - qDeleteAll( accounts_ ); - accounts_.clear(); - #ifdef KMESSDEBUG_KMESS kDebug() << "DESTROYED."; #endif @@ -150,54 +148,11 @@ KMess::~KMess() -// The account changed it's status to invisible -void KMess::accountInvisible() -{ - // Disable the now listening detection - nowListeningClient_->setEnabled( false ); - -#ifdef KMESSDEBUG_KMESS - kDebug() << "account went invisible, disabled now listening detection."; -#endif -} - - - -// The account changed it's status to offline -void KMess::accountOffline() -{ - // Disable the now listening detection - nowListeningClient_->setEnabled( false ); - -#ifdef KMESSDEBUG_KMESS - kDebug() << "account went offline, disabled now listening detection."; -#endif -} - - - -// The account changed it's status to online -void KMess::accountOnline() -{ - // Enable the now listening detection if needed. - nowListeningClient_->setEnabled( currentAccount_->getShowNowListening() ); - -#ifdef KMESSDEBUG_KMESS - kDebug() << "account went online. Now listening is " - << ( currentAccount_->getShowNowListening() ? "enabled" : "disabled") << "." << endl; -#endif -} - - - -// Add the account and create the GUI elements -void KMess::addAccount(Account *account) +// Add the account to the GUI +void KMess::slotAccountAdded(Account *account) { AccountAction *accountAction; - // Append account - accounts_.append( account ); - // Make the action for the "Connect..." menu accountAction = new AccountAction( account, this ); connectActionMenu_->addAction( accountAction ); @@ -214,6 +169,12 @@ void KMess::addAccount(Account *account) connect( accountAction, SIGNAL( activated(Account*) ), this, SLOT ( showSettingsForAccount(Account*) ) ); + + // If the initial login window is visible, add the new account there, too + if( initialView_ ) + { + initialView_->addAccount( account ); + } } @@ -259,18 +220,12 @@ void KMess::addNewGroup() bool okPressed = false; // Set a default group name - newGroupName = "New Group"; + newGroupName = i18n( "New Group" ); // Launch a dialog to get a new group name -#if KDE_IS_VERSION(3,2,0) newGroupName = KInputDialog::getText(i18n("Add a group"), i18n("Enter the new name for this group:"), newGroupName, &okPressed, this); -#else - newGroupName = KLineEditDlg::getText(i18n("Add a group"), - i18n("Enter the new name for this group:"), - newGroupName, &okPressed, this); -#endif if(okPressed) { @@ -302,89 +257,75 @@ void KMess::applicationClosing() // An account's settings have been changed -void KMess::changedAccountSettings( Account *account, QString oldHandle, QString oldFriendlyName ) +void KMess::slotAccountChanged( Account *account, QString oldHandle, QString oldFriendlyName ) { QString newHandle = account->getHandle(); - // We're saving settings for a new account - if( accounts_.contains( account ) == 0 ) - { - // Make sure the account handle was changed off the default - if( newHandle.isEmpty() || ! Account::isValidEmail( newHandle ) ) - { - KMessageBox::error( 0, i18n( "The contact address you have entered is not valid: '%1'", newHandle ) ); - delete account; - return; - } - - if( newHandle != i18n( "you@hotmail.com" ) ) - { - // Avoid recognizing the new account handle and friendly name as changed, - // since that would mean changing an entry which doesn't exists yet. - oldHandle = newHandle; - oldFriendlyName = account->getFriendlyName(); - - // Add the account to the account list. - addAccount(account); - } - else - { - // The account wasn't changed, so delete it. - delete account; - return; - } - } - #ifdef KMESSDEBUG_KMESS - kDebug() << "Saving settings for " << account->getHandle(); + kDebug() << "Saving UI settings for" << newHandle; #endif -#ifdef KMESSTEST - KMESS_ASSERT( msnNotificationConnection_ != 0 ); -#endif - - bool isCurrentAccount = false; - bool isConnectedCurrentAccount = false; if ( msnNotificationConnection_ != 0 ) { - isCurrentAccount = ( oldHandle == currentAccount_->getHandle() ); - isConnectedCurrentAccount = ( isCurrentAccount && msnNotificationConnection_->isConnected() ); - } + // While we're saving stuff, also save the contact list settings + msnNotificationConnection_->saveProperties(); - // If the account matches the current account.. - if( isCurrentAccount ) - { - // If the friendly name was changed, ask the server to change it - if ( account->isVerified() && account->getFriendlyName() != oldFriendlyName ) + bool isCurrentAccount = ( oldHandle == currentAccount_->getHandle() ); + bool isConnectedCurrentAccount = ( isCurrentAccount && msnNotificationConnection_->isConnected() ); + + // If the account matches the current account and the friendly name was changed, ask the server to change it + if( isConnectedCurrentAccount && account->isVerified() && account->getFriendlyName( STRING_ORIGINAL ) != oldFriendlyName ) { - msnNotificationConnection_->changeFriendlyName( account->getFriendlyName() ); - } - - // Copy the account settings to the current account -#ifdef KMESSDEBUG_KMESS - kDebug() << "Copying modified Account settings to CurrentAccount."; -#endif - currentAccount_->copyAccount( account ); - } - - // If the account is set to use autologin, make sure that all other accounts are not - if( ! account->isDeleted() && account->getUseAutologin() ) - { - foreach( Account *otherAccount, accounts_ ) - { - if( otherAccount != account ) - { - otherAccount->setUseAutologin( false ); - } + msnNotificationConnection_->changeFriendlyName( account->getFriendlyName( STRING_ORIGINAL ) ); } } // Change the account name in the UI when it's been changed - if( initialView_ && oldHandle != newHandle ) + if( oldHandle == newHandle ) { + return; + } + + // Update it in the initial view's list of accounts + if( initialView_ ) + { +#ifdef KMESSDEBUG_KMESS + kDebug() << "Updating initial view"; +#endif // Notify the initial view when the account handle has changed. initialView_->changedAccount( oldHandle, newHandle ); } + + // Update the menu items + connectMenuItems_ [ account ]->updateText(); + settingsMenuItems_[ account ]->updateText(); +} + + + +// A view pictures mode has been selected from the menu. +void KMess::changedListPictureSize( int mode ) +{ + int newMode = 0; + switch( mode ) + { + case 0: + break; + case 1: + newMode = 32; + break; + case 2: + newMode = 40; + break; + case 3: + newMode = 48; + break; + + default: + break; + } + + currentAccount_->setListPictureSize( newMode ); } @@ -450,9 +391,13 @@ void KMess::changeStatus( int index ) // Tray notifications settings were changed void KMess::changedNotificationsSettings() { - chatNotification_->setEnabled( currentAccount_->getNotifyContactsChatStart(), currentAccount_->getNotifyContactsChatMessages() ); - contactStatusNotification_->setEnabled( currentAccount_->getNotifyContactsOnline(), currentAccount_->getNotifyContactsOffline(), currentAccount_->getNotifyContactsStatus() ); - newEmailNotification_->setEnabled( currentAccount_->getNotifyEmails() ); + chatNotification_ ->setEnabled( currentAccount_->getNotifyContactsChatStart(), + currentAccount_->getNotifyContactsChatMessages() ); + contactStatusNotification_->setEnabled( currentAccount_->getNotifyContactsOnline(), + currentAccount_->getNotifyContactsOffline(), + currentAccount_->getNotifyContactsStatus() ); + newEmailNotification_ ->setEnabled( currentAccount_->getNotifyInboxEmails(), + currentAccount_->getNotifyOtherEmails() ); } @@ -567,20 +512,10 @@ void KMess::changedStatus( Account *account ) void KMess::changeViewMode(int mode) { #ifdef KMESSTEST - KMESS_ASSERT( ( mode == 0 ) || ( mode == 1 ) ); + KMESS_ASSERT( ( mode >= 0 ) || ( mode <= 2 ) ); #endif - if ( mode == 0 ) - { - CurrentAccount::instance()->setShowContactsByGroup( true ); - } - else if ( mode == 1 ) - { - CurrentAccount::instance()->setShowContactsByGroup( false ); - } - else - { - kDebug() << "changeViewMode() - WARNING - Invalid view mode = " << mode; - } + + CurrentAccount::instance()->setContactListDisplayMode( (Account::ContactListDisplayMode) mode ); } @@ -665,19 +600,35 @@ void KMess::showRemoveContactDialog(QString handle) // Show a dialog before removing the group void KMess::showRemoveGroupDialog(QString groupId) { - Group *group = currentAccount_->getContactList()->getGroupById(groupId); - - // If the group was found + const ContactList *list = currentAccount_->getContactList(); + Group *group = list->getGroupById( groupId ); + + // If the group was not found, bail out if(group == 0) { kDebug() << "Couldn't find a matching group."; return; } - QString message = i18n( "Are you sure you want to remove the group %1 from your contact list?", group->getName()); + // If the group was not empty, bail also out. We would receive an error from the server, otherwise + if( ! list->isGroupEmpty( groupId ) ) + { + // TODO Allow the user to choose between: 1) delete or delete+block all contacts in the group; + // 2) remove all contacts from the group; 3) cancel the operation. + KMessageBox::error( this, + i18nc( "dialog text", "The group \"%1\" is not empty: remove all contacts from it, then try again!", + group->getName() ), + i18nc( "dialog title", "Group removal" ) ); + return; + } - int result = KMessageBox::warningContinueCancel( this, message, i18n( "Remove group" ), - KGuiItem(i18n("Remove"), "edit-delete"), + + int result = KMessageBox::warningContinueCancel( this, + i18nc( "dialog text", + "Are you sure you want to remove the group %1" + "from your contact list?", group->getName() ), + i18nc( "dialog title", "Group removal" ), + KGuiItem( i18nc( "dialog button", "Remove" ), "edit-delete" ), KStandardGuiItem::cancel(), QString(), KMessageBox::Dangerous @@ -717,15 +668,9 @@ void KMess::showRenameGroupDialog(QString groupId) newGroupName = group->getName(); // Launch a dialog to get a new group name -#if KDE_IS_VERSION(3,2,0) newGroupName = KInputDialog::getText(i18n("Rename group"), i18n("Enter the new name for this group:"), newGroupName, &okPressed, this); -#else - newGroupName = KLineEditDlg::getText(i18n("Rename group"), - i18n("Enter the new name for this group:"), - newGroupName, &okPressed, this); -#endif if(okPressed) { @@ -756,7 +701,8 @@ void KMess::checkAutologin(QString handle) kDebug() << "No handle was given, find an account that uses autologin."; #endif - foreach( Account *account, accounts_ ) + const QList accountsList = AccountsManager::instance()->getAccounts(); + foreach( Account *account, accountsList ) { // For completeness, also test for guest accounts. if( account->isGuestAccount() ) @@ -780,13 +726,29 @@ void KMess::checkAutologin(QString handle) #ifdef KMESSDEBUG_KMESS kDebug() << "finding account: " << handle << "."; #endif - loginAccount = getAccountByHandle(handle); + loginAccount = AccountsManager::instance()->getAccountByHandle(handle); } - if ( loginAccount != 0 ) + bool doAutoLogin = ( loginAccount != 0 ); + + // Wait for the user password if needed + AccountsManager::instance()->initializePasswordManager( doAutoLogin ); + + if( doAutoLogin ) { - // Use the autologin view as the main view - switchViewToLoginScreen(); + if( loginAccount->getPassword().isEmpty() ) + { + KMessageBox::error( this, + i18nc( "dialog text", + "

Cannot login automatically with account \"%1\":
" + "you must first save the account password!

", + handle ), + i18nc( "dialog title", "Autologin failed" ) ); + return; + } + + // Set the info about login + initialView_->startedConnecting( loginAccount->getHandle() ); connectWithAccount( loginAccount ); } } @@ -809,22 +771,44 @@ void KMess::connected() showAllowedAction_->setChecked( currentAccount_->getShowAllowedContacts() ); showOfflineAction_->setChecked( currentAccount_->getShowOfflineContacts() ); showRemovedAction_->setChecked( currentAccount_->getShowRemovedContacts() ); - showPicturesAction_->setChecked( currentAccount_->getShowListPictures() ); - if ( currentAccount_->getShowContactsByGroup() ) + showEmptyAction_ ->setChecked( currentAccount_->getShowEmptyGroups () ); + + // Set the pictures mode + int newMode = 0; + switch( currentAccount_->getListPictureSize() ) { - viewMode_->setCurrentItem( 0 ); - } - else - { - viewMode_->setCurrentItem( 1 ); + case 0: + break; + case 22: + newMode = 1; + break; + case 32: + newMode = 2; + break; + case 40: + newMode = 3; + break; + case 48: + newMode = 4; + break; + case 64: + newMode = 5; + break; + + default: + break; } + listPictureSize_->setCurrentItem( newMode ); + + // Set the list's groups and contacts display mode + viewMode_->setCurrentItem( currentAccount_->getContactListDisplayMode() ); + // Show the connected message - statusMessage( i18n("Connected"), TYPE_MESSAGE ); + statusMessage( i18n("Connected"), false ); // The connection was successful, this means the supplied // email and password were correct: save the settings now - KConfigGroup config = KGlobal::config()->group( "" ); - saveProperties( config ); + saveProperties(); // Notify ChatMaster we're connected chatMaster_->connected(); @@ -858,9 +842,9 @@ void KMess::connectWithAccount(Account *account) // Update the main view's controls to match this account's details. changedStatus( account ); - - // Show the "logging in" screen while we're logging in - switchViewToLoginScreen(); + // Switch to the login view and tell it we're connecting + switchViewToInitialScreen(); + initialView_->startedConnecting( account->getHandle() ); // Copy the account to the current account #ifdef KMESSDEBUG_KMESS @@ -881,7 +865,7 @@ void KMess::connectWithAccount(Account *account) void KMess::connectWithAccount(QString handle, QString password, bool rememberAccount, bool rememberPassword, Status initialStatus ) { // Try to find an existing account - Account *account = getAccountByHandle(handle); + Account *account = AccountsManager::instance()->getAccountByHandle(handle); if( account != 0 ) { // Found an existing account. @@ -900,7 +884,7 @@ void KMess::connectWithAccount(QString handle, QString password, bool rememberAc account->setGuestAccount( ! rememberAccount ); account->setSavePassword( rememberPassword ); account->setInitialStatus( initialStatus ); - addAccount( account ); + AccountsManager::instance()->addAccount( account ); // Connect connectWithAccount( account ); @@ -956,17 +940,7 @@ bool KMess::createDirectories() // "Add new account" has been selected from the menu. void KMess::createNewAccount() { - Account *account; - // If there are no profiles, create a "default" account - // Create an account to store the profile information - account = new Account(); - - // Assume the user *does* want to save it's settings, - // otherwise he/she would have used the main login dialog. - account->setGuestAccount(false); - - // Show the settings dialog for the new account - showSettingsForAccount( account ); + AccountsManager::instance()->showAccountSettings(); } @@ -974,11 +948,11 @@ void KMess::createNewAccount() // The current account changed its name, so set the corresponding account's name void KMess::currentAccountChangedName() { - Account *account = getAccountByHandle( currentAccount_->getHandle() ); + Account *account = AccountsManager::instance()->getAccountByHandle( currentAccount_->getHandle() ); if( account != 0 ) { // Set the account's name to the current account's name - account->setFriendlyName( currentAccount_->getFriendlyName() ); + account->setFriendlyName( currentAccount_->getFriendlyName( STRING_ORIGINAL ) ); } // Set the caption to the account's new name @@ -987,36 +961,12 @@ void KMess::currentAccountChangedName() -// Delete the given account -void KMess::deleteAccount(Account *account) +// Delete the given account from the UI +void KMess::slotAccountDeleted( Account *account ) { AccountAction *accountAction; if( KMESS_NULL(account) ) return; - QString handle = account->getHandle(); - if( handle == currentAccount_->getHandle() && msnNotificationConnection_->isConnected() ) - { -#ifdef KMESSDEBUG_KMESS - kDebug() << "Not deleting account " << account->getHandle() << " yet."; -#endif - - // Already delete account data. - // NOTE: when more classes have an Account* object, consider creating a setDeleted(true) - // method, and let deleteAccountData() fire a deleteAccount(this) signal. - account->deleteAccountData(); - return; - } - -#ifdef KMESSDEBUG_KMESS - kDebug() << "Deleting account for " << handle << "."; -#endif - - // Remove the account from the list of accounts - if( accounts_.removeAll( account ) == 0 ) - { - kWarning() << "account not found in collection!"; - } - // Remove it from the initial screen's list if( initialView_ ) { @@ -1040,11 +990,29 @@ void KMess::deleteAccount(Account *account) settingsActionMenu_->removeAction(accountAction); delete settingsMenuItems_.take( account ); } +} - // Delete here as this class maintains the collection. - // No need to call deleteAccountData(), it triggered this slot. - account->deleteAccountData(); - account->deleteLater(); + + +/** + * @brief Update the UI when the network connection status changes + * + * This method receives KDE's Solid network connection status changes, and updates the view's widgets + * to reflect it. + * + * @param newStatus The new status of the network connection + */ +void KMess::slotConnectionStatusChanged( Solid::Networking::Status newStatus ) +{ + // Do not disable the connection menu if we're connected already + if( isConnected() ) + { + return; + } + + // If Solid is unable to retrieve the status, assume we're connected + bool isNetConnected = ( newStatus == Solid::Networking::Connected || newStatus == Solid::Networking::Unknown ); + connectActionMenu_->setEnabled( isNetConnected ); } @@ -1073,7 +1041,7 @@ void KMess::disconnected() kDebug() << "Disconnected."; #endif - // this method is also called when initializing the GUI, avoid manging the settings at that point. + // this method is also called when initializing the GUI, avoid mangling the settings at that point. if( initialized_ ) { // ContactList is saved by the MsnNotificationConnection already. @@ -1081,16 +1049,16 @@ void KMess::disconnected() // however CurrentAccount has a const reference to the list // because MsnNotificationConnection maintains the list instead. - // Transfer account settings that are made in the GUI. - Account *account = getAccountByHandle(currentAccount_->getHandle()); - if( ! KMESS_NULL(account) ) + // Save the account. If it is not found, it's the initial disconnect call. + Account *account = AccountsManager::instance()->getAccountByHandle( currentAccount_->getHandle() ); + if( account ) { if( account->isDeleted() ) { #ifdef KMESSDEBUG_KMESS - kDebug() << "account was deleted, removing menu items."; + kDebug() << "Account" << account->getHandle() << "was deleted, removing menu items."; #endif - deleteAccount(account); + slotAccountDeleted( account ); } else { @@ -1098,6 +1066,7 @@ void KMess::disconnected() kDebug() << "Saving the CurrentAccount."; #endif + // Transfer account settings that are made in the GUI. account->copyAccountUISettings( currentAccount_ ); } } @@ -1106,7 +1075,7 @@ void KMess::disconnected() // Update the GUI disconnect_->setEnabled( false ); enableMenus(false); - statusMessage( i18n("Disconnected"), TYPE_ERROR ); + statusMessage( i18n("Disconnected"), true ); // Hide the status bar now that we're not connected if( showStatusBar_->isChecked() ) @@ -1150,6 +1119,9 @@ bool KMess::initialize() kDebug() << "initializing main class."; #endif + // Initialize the Rich Text parser engine + RichTextParser::initialize(); + // Create current account instance currentAccount_ = CurrentAccount::instance(); if ( currentAccount_ == 0 ) @@ -1198,19 +1170,20 @@ bool KMess::initialize() return false; } + // Use Solid to find out whether we're connected or not, and disable the Connect menu if we are not + connect( Solid::Networking::notifier(), SIGNAL( statusChanged(Solid::Networking::Status) ), + this, SLOT ( slotConnectionStatusChanged(Solid::Networking::Status) ) ); + slotConnectionStatusChanged( Solid::Networking::status() ); - // Start reading the properties - KConfigGroup group = KGlobal::config()->group(""); - readProperties( group ); - + // Connect current account signals for Now Listening + connect( currentAccount_, SIGNAL( accountInvisible() ), + this, SLOT ( changedNowListeningSettings() )); + connect( currentAccount_, SIGNAL( accountOffline() ), + this, SLOT ( changedNowListeningSettings() )); + connect( currentAccount_, SIGNAL( accountOnline() ), + this, SLOT ( changedNowListeningSettings() )); // Connect current account - connect( currentAccount_, SIGNAL( accountInvisible() ), - this, SLOT ( accountInvisible() )); - connect( currentAccount_, SIGNAL( accountOffline() ), - this, SLOT ( accountOffline() )); - connect( currentAccount_, SIGNAL( accountOnline() ), - this, SLOT ( accountOnline() )); connect( currentAccount_, SIGNAL( changedFriendlyName() ), this, SLOT ( currentAccountChangedName() )); connect( currentAccount_, SIGNAL( changedNowListeningSettings() ), @@ -1221,7 +1194,20 @@ bool KMess::initialize() this, SLOT ( changedStatus() )); connect( currentAccount_, SIGNAL( changedMsnObject() ), msnNotificationConnection_, SLOT( changedMsnObject() )); + connect( currentAccount_, SIGNAL( changedEmoticonSettings() ), + EmoticonManager::instance(),SLOT(slotChangedEmoticonSettings() ) ); + // Connect the Account Changed signal to update the GUI + AccountsManager *accountsManager = AccountsManager::instance(); + connect( accountsManager, SIGNAL( accountAdded(Account*) ), + this, SLOT ( slotAccountAdded(Account*) ) ); + connect( accountsManager, SIGNAL( accountChanged(Account*,QString,QString) ), + this, SLOT ( slotAccountChanged(Account*,QString,QString) ) ); + connect( accountsManager, SIGNAL( accountDeleted(Account*) ), + this, SLOT ( slotAccountDeleted(Account*) ) ); + + // Read the accounts and properties + readProperties(); // Start disconnected. // Added debug here because this has a potential to cause problems.. @@ -1231,6 +1217,8 @@ bool KMess::initialize() #endif disconnected(); + // Setting up DBus + dbus_ = new KMessDBus( this ); // All done, mark as initialized #ifdef KMESSDEBUG_KMESS @@ -1243,22 +1231,6 @@ bool KMess::initialize() -// Return the account for a given handle -Account * KMess::getAccountByHandle( const QString &handle ) -{ - foreach( Account *account, accounts_ ) - { - if( account->getHandle() == handle ) - { - return account; - } - } - - return 0; -} - - - // Initialize the chat master bool KMess::initChatMaster() { @@ -1296,7 +1268,7 @@ bool KMess::initChatMaster() connect( chatMaster_, SIGNAL( allowContact(QString) ), msnNotificationConnection_, SLOT ( allowContact(QString) ) ); - connect( msnNotificationConnection_, SIGNAL( startedSwitchboard(const ChatInformation&) ), + connect( msnNotificationConnection_, SIGNAL( startSwitchboard(const ChatInformation&) ), chatMaster_, SLOT ( startSwitchboard(const ChatInformation&) ) ); connect( msnNotificationConnection_, SIGNAL( offlineMessage(const ChatMessage&) ), chatMaster_, SLOT ( showSpecialMessage(const ChatMessage&) )); @@ -1378,8 +1350,8 @@ bool KMess::initMsnNotificationConnection() this, SLOT ( disconnected() ) ); connect( msnNotificationConnection_, SIGNAL( contactAddedUser(const Contact*) ), // Contact added user this, SLOT ( showContactAddedUserDialog(const Contact*) ) ); - connect( msnNotificationConnection_, SIGNAL( statusMessage(QString, KMessInterface::ConnectionStatus) ), // Display a status message - this, SLOT ( statusMessage(QString, KMessInterface::ConnectionStatus) ) ); + connect( msnNotificationConnection_, SIGNAL( statusMessage(QString,bool) ), // Display a status message + this, SLOT ( statusMessage(QString,bool) ) ); return true; } @@ -1452,18 +1424,18 @@ bool KMess::initNotifications() newEmailNotification_ = new NewEmailNotification ( notificationManager_ ); // Connect the chat messages notification signals - connect( chatMaster_, SIGNAL( newChatMessage(const ChatMessage&, ChatWindow*) ), - chatNotification_, SLOT ( notify(const ChatMessage&, ChatWindow*) ) ); - connect( chatNotification_, SIGNAL( raiseChat(ChatWindow*,bool) ), - chatMaster_, SLOT ( raiseChat(ChatWindow*,bool) ) ); + connect( chatMaster_, SIGNAL( newChatMessage(const ChatMessage&, Chat*) ), + chatNotification_, SLOT ( notify(const ChatMessage&, Chat*) ) ); + connect( chatNotification_, SIGNAL( raiseChat(Chat*,bool) ), + chatMaster_, SLOT ( raiseChat(Chat*,bool) ) ); // Connect the status change notification signals - connect( contactList, SIGNAL( contactOnline(Contact*,bool) ), - contactStatusNotification_, SLOT ( notify(Contact*,bool) ) ); - connect( contactList, SIGNAL( contactOffline(Contact*,bool) ), - contactStatusNotification_, SLOT ( notify(Contact*,bool) ) ); - connect( contactList, SIGNAL( contactChangeStatus(Contact*,bool) ), - contactStatusNotification_, SLOT ( notify(Contact*,bool) ) ); + connect( contactList, SIGNAL( contactOnline(Contact*,bool) ), + contactStatusNotification_, SLOT ( notify(Contact*,bool) ) ); + connect( contactList, SIGNAL( contactOffline(Contact*,bool) ), + contactStatusNotification_, SLOT ( notify(Contact*,bool) ) ); + connect( contactList, SIGNAL( contactChangedStatus(Contact*,bool) ), + contactStatusNotification_, SLOT ( notify(Contact*,bool) ) ); // Connect the "Email notification" signals connect( msnNotificationConnection_, SIGNAL( newEmail(QString, QString, bool, QString, QString, QString) ), @@ -1508,11 +1480,33 @@ bool KMess::initNowListening() -// Read in account and other properties -void KMess::readProperties(const KConfigGroup &config) +// Check if the connection to the server is active +bool KMess::isConnected() { - // Choose the config group - KConfigGroup group = config.config()->group( "General" ); + if( KMESS_NULL(msnNotificationConnection_) ) + { + return false; + } + + return msnNotificationConnection_->isConnected(); +} + + + +// Read in account and other properties +void KMess::readProperties( const KConfigGroup &config ) +{ + KConfigGroup group; + + // Choose the config group if it was not given + if( &config == 0 ) + { + group = KMessConfig::instance()->getGlobalConfig( "General" ); + } + else + { + group = config; + } KMessInterface::readProperties( group ); @@ -1520,32 +1514,31 @@ void KMess::readProperties(const KConfigGroup &config) kDebug() << "reading properties"; #endif - Account *account; - QStringList accountList; + AccountsManager *accountsManager = AccountsManager::instance(); - // Get a list of the profiles stored in the configuration file - accountList = group.readEntry( "ProfileList", QStringList() ); - - // For each listed account, create an account and have it read in its settings - for ( int i = 0; i < accountList.count(); i++ ) - { -#ifdef KMESSDEBUG_KMESS - kDebug() << "initializing account " << accountList[i] << "."; -#endif - - account = new Account(); - account->readProperties( config, accountList[i] ); - addAccount( account ); - } + // Load the saved accounts from disk and create them + accountsManager->readProperties(); } // Save account and other properties -void KMess::saveProperties(KConfigGroup &config) +void KMess::saveProperties( KConfigGroup &config ) { - // Choose the config group - KConfigGroup group = config.config()->group( "General" ); + KConfigGroup group; + + // Save the accounts' passwords + AccountsManager::instance()->storeAccountsPasswords(); + + // Choose the config group if it was not given + if( &config == 0 ) + { + group = KMessConfig::instance()->getGlobalConfig( "General" ); + } + else + { + group = config; + } // Save the UI configuration KMessInterface::saveProperties( group ); @@ -1554,10 +1547,9 @@ void KMess::saveProperties(KConfigGroup &config) kDebug() << "saving properties"; #endif - QStringList accountList; - // Have all the accounts save their properties - foreach( Account *account, accounts_ ) + const QList accountsList = AccountsManager::instance()->getAccounts(); + foreach( Account *account, accountsList ) { // Avoid saving guest accounts if( account->isGuestAccount() || account->isDeleted() ) @@ -1576,15 +1568,11 @@ void KMess::saveProperties(KConfigGroup &config) } // Save properties of accounts - account->saveProperties( config ); - accountList.append( account->getHandle() ); + account->saveProperties(); } - // Save the list of profiles - group.writeEntry( "ProfileList", accountList ); - // Write data now! - config.sync(); + group.sync(); } @@ -1594,52 +1582,20 @@ void KMess::setCaptionToUser() { if ( currentAccount_ != 0 ) { - // Set the caption, avoiding newlines which cause problems to the titlebar layout. - setCaption( currentAccount_->getFriendlyName().replace( "\n", " " ) ); + // Get the friendly name, but avoid newlines which cause problems to the titlebar layout + QString friendlyName( currentAccount_->getFriendlyName().replace( "\n", " " ) ); + + // Set the caption + setPlainCaption( i18nc( "Main window caption", "KMess - %1", friendlyName ) ); } } // Show the settings dialog for a given account -void KMess::showSettingsForAccount(Account *account) +void KMess::showSettingsForAccount( Account *account ) { -#ifdef KMESSDEBUG_KMESS - kDebug() << "opening settings for " << account->getHandle(); -#endif -#ifdef KMESSTEST - KMESS_ASSERT( msnNotificationConnection_ != 0 ); -#endif - - bool isCurrentAccount = false; - bool isConnectedCurrentAccount = false; - - if ( msnNotificationConnection_ != 0 ) - { - isCurrentAccount = ( account->getHandle() == currentAccount_->getHandle() ); - isConnectedCurrentAccount = isCurrentAccount && ( msnNotificationConnection_->isConnected() ); - } - - // Show the settings dialog - SettingsDialog *settingsDialog = SettingsDialog::instance( this ); - - connect( settingsDialog, SIGNAL( deleteAccount(Account*) ), - this, SLOT ( deleteAccount(Account*) ) ); - connect( settingsDialog, SIGNAL( changedSettings(Account*,QString,QString) ), - this, SLOT ( changedAccountSettings(Account*,QString,QString) ) ); - - // If it's the current account, copy some UI settings from the current account to the account - if( isCurrentAccount ) - { -#ifdef KMESSDEBUG_KMESS - kDebug() << "copying global user-interface settings from CurrentAccount to the Account object."; -#endif - account->copyAccountUISettings( currentAccount_ ); - } - - settingsDialog->changeAccountSettings( account, isConnectedCurrentAccount ); - settingsDialog->show(); - settingsDialog->raise(); + AccountsManager::instance()->showAccountSettings( account ); } @@ -1648,7 +1604,7 @@ void KMess::showSettingsForAccount(Account *account) void KMess::showSettingsForCurrentAccount() { // Use the Account object so it's consistent with the other AccountAction events. - Account *accountData = getAccountByHandle( CurrentAccount::instance()->getHandle() ); + Account *accountData = AccountsManager::instance()->getAccountByHandle( CurrentAccount::instance()->getHandle() ); if( KMESS_NULL(accountData) ) return; showSettingsForAccount( accountData ); } @@ -1663,7 +1619,7 @@ void KMess::showUserProfile() return; } - new KUrl( "http://members.msn.com/default.msnw?mem=" + currentAccount_->getHandle() + "&mkt=" + KGlobal::locale()->country() ); + KMessShared::openProfile( currentAccount_->getHandle() ); } @@ -1695,6 +1651,8 @@ void KMess::switchViewToContactList() msnNotificationConnection_, SLOT ( blockContact(QString) ) ); connect( view_, SIGNAL( changePersonalMessage(QString) ), // Change the personal message. msnNotificationConnection_, SLOT ( changePersonalMessage(QString) ) ); + connect( view_, SIGNAL( changeStatus(int) ), + this, SLOT ( changeStatus(int ) ) ); connect( view_, SIGNAL( copyContact(QString, QString) ), msnNotificationConnection_, SLOT ( addContactToGroup(QString, QString) ) ); connect( view_, SIGNAL( moveContact(QString, QString, QString) ), // Move the contact @@ -1713,12 +1671,10 @@ void KMess::switchViewToContactList() this, SLOT ( showRenameGroupDialog(QString) ) ); connect( view_, SIGNAL( unblockContact(QString) ), // Unblock the contact msnNotificationConnection_, SLOT ( unblockContact(QString) ) ); - // Set it as the application's main widget setCentralWidget( view_ ); // Make sure the other views' pointers are zero: setCentralWidget deletes the old central widget - autologinView_ = 0; initialView_ = 0; } @@ -1727,65 +1683,36 @@ void KMess::switchViewToContactList() // Switch the view to the initial login screen void KMess::switchViewToInitialScreen() { - // If the view was already set, reload it + // If the view was already set, do nothing if( initialView_ ) { - delete initialView_; + return; } // Create and set up the new widget - initialView_ = new InitialView( this, accounts_ ); + initialView_ = new InitialView( this ); initialView_->updateView(); initialView_->show(); // Connect it so it triggers the login process connect( initialView_, SIGNAL( connectWithAccount(QString,QString,bool,bool,Status) ), this, SLOT ( connectWithAccount(QString,QString,bool,bool,Status) ) ); + connect( initialView_, SIGNAL( disconnectClicked() ), + this, SLOT ( disconnectClicked() ) ); + + connect( msnNotificationConnection_, SIGNAL( statusMessage(QString,bool) ), + initialView_, SLOT ( statusMessage(QString) ) ); + // Set it as the window's main widget setCentralWidget( initialView_ ); // Make sure the other views' pointers are zero: setCentralWidget deletes the old central widget - autologinView_ = 0; view_ = 0; } -// Switch the view to the login progress screen -void KMess::switchViewToLoginScreen() -{ - // If the view was already set, reload it - if( autologinView_ ) - { - delete autologinView_; - } - - // Create the widget - autologinView_ = new AutologinView( this ); - - // Connect the signal to show connection status messages - connect( msnNotificationConnection_, SIGNAL( statusMessage(QString,KMessInterface::ConnectionStatus) ), - autologinView_, SLOT ( statusMessage(QString) ) ); - - // Swap the main window widget with the new one - setCentralWidget( autologinView_ ); - - // Make sure the other views' pointers are zero: setCentralWidget deletes the old central widget - initialView_ = 0; - view_ = 0; -} - - - -// The "show display pictures" menu item has been toggled. -void KMess::toggleDisplayPictures(bool show) -{ - currentAccount_->setShowListPictures( show ); -} - - - // The "show allowed contacts" menu item has been toggled. void KMess::toggleShowAllowed(bool show) { @@ -1794,6 +1721,24 @@ void KMess::toggleShowAllowed(bool show) +// The "show empty groups" menu item has been toggled. +void KMess::toggleShowEmpty( bool show ) +{ + currentAccount_->setShowEmptyGroups( show ); +} + + + +// The "show search in contact list" menu item has been toggled. +void KMess::toggleShowSearchFrame(bool show) +{ + if( view_ != 0 ) + { + view_->toggleShowSearchFrame( show ); + } +} + + // The "show offline contacts" menu item has been toggled. void KMess::toggleShowOffline(bool show) { diff --git a/src/kmess.dox b/src/kmess.dox index fa5640e..526ac90 100644 --- a/src/kmess.dox +++ b/src/kmess.dox @@ -18,7 +18,7 @@ * the class structure KMess uses. This API documentation was created to lower that bar, * so it becomes easier to contribute code back to KMess. * A global introduction to KMess development process can be found online at: - * - http://www.kmess.org/development/ + * - http://trac.kmess.org/ * * These pages document the classes and functions KMess is build from. * The documentation also provides insight in the relation and @@ -26,8 +26,8 @@ * and aids developers to determine how code can be written. * Because KMess is built on top of the KDE and Qt libraries, * it's important to have a general understanding of the KDE and Qt libraries too: - * - http://developer.kde.org/documentation/library/3.4-api/ - * - http://doc.trolltech.com/3.3/index.html + * - http://api.kde.org/ + * - http://doc.trolltech.com/4.3/index.html * * * @section protocol About the MSN protocol @@ -35,7 +35,8 @@ * There is no official documentation about how things are supposed to operate, * and how clients should respond in certain situations. * - * Parts of the protocol are being documentated in a wiki-style site at: http://msnpiki.msnfanatic.com/ + * Parts of the protocol are being documentated in a wiki-style site at: http://msnpiki.msnfanatic.com/. + * We also have a small introduction at http://trac.kmess.org/. * Other sites scattered arround the net also provide documentation about * specialized parts of the protocol. These sites are listed at our development page, * but hopefully this information will be merged with the msnpiki documentation soon. @@ -48,7 +49,7 @@ * Working with an undocumented protocol also means developers need to take care of * situations that can't be forseen. It's impossible to make guesses about error handling; * e.g. having a list of things which the server may send differently. - * Code needs to verify it's boundaries, and warn (e.g. with kdWarning()) + * Code needs to verify it's boundaries, and warn (e.g. with kWarning()) * when received data can't be processed correctly. * * The code is filled with assertion tests and strict validations of the data being parsed. @@ -59,8 +60,8 @@ * * To prevent crashes in unexpected situations, tests are added to detect null-pointers and warn appropriately. * As rule of thumb: - * - Normal debugging messages are displayed with kdDebug(). - * - Serious errors are displayed with kdWarning(). + * - Normal debugging messages are displayed with kDebug(). + * - Serious errors are displayed with kWarning(). * - Debugging messages should only be displayed when the program is compiled in debug mode. * - Warning messages may also be displayed by the final packaged executable. * - Null pointers are checked using: if(KMESS_NULL(..)) return;. @@ -69,7 +70,7 @@ * The macros for these statements are found in kmessdebug.h. * The debug mode can be enabled in two ways: * - in KDevelop, select the 'debug' build configuration. - * - for manual compiling, use CXXFLAGS="-g -ansi -pedantic -Wall" ./configure --enable-debug-output --enable-debug=full. + * - for manual compiling, use CXXFLAGS="-g -ansi -pedantic -Wall" ./configure --enable-debug-output --build-type=debugfull. * * The debug mode adds: * - filenames and line numbers to crash dumps. @@ -100,8 +101,8 @@ * When KMess is compiled in debug mode, the debug code between * the \#ifdef KMESSTEST and \#ifdef KMESSDEBUG_... statements will be compiled. * Most macro's are simple defines to enable debug output for certain classes. - * Debug messages are outputed with kdDebug(). For warnings visible to the end-user, - * the kdWarning() function is used instead. These warnings are not embedded in \#ifdef blocks. + * Debug messages are outputed with kDebug(). For warnings visible to the end-user, + * the kWarning() function is used instead. These warnings are not embedded in \#ifdef blocks. * * Macros are also use to optionally wrap function calls to handle debug output. * The KMESS_NULL macro is used to prevent crashes in unexpected situations. @@ -267,3 +268,12 @@ * @todo write detailed documentation */ +/** + * @defgroup Utils utils + * @brief Utility functions used by various classes. + * @todo write detailed documentation + * + * A package to store utility classes. + * By keeping the utilities here, these classes won't clutter up other modules. + */ + diff --git a/src/kmess.h b/src/kmess.h index 44020de..c39550a 100644 --- a/src/kmess.h +++ b/src/kmess.h @@ -24,13 +24,12 @@ #include #include -#include +#include // Forward declarations class Account; class AccountAction; -class AutologinView; class ChatMaster; class Contact; class ContactList; @@ -41,6 +40,8 @@ class NewEmailNotification; class CurrentAccount; class IdleTimer; class InitialView; +class LoginView; +class KMessDBus; class KMessTest; class KMessView; class MsnNotificationConnection; @@ -61,6 +62,7 @@ class KMess : public KMessInterface { Q_OBJECT + friend class KMessDBus; friend class KMessTest; public: // Public methods @@ -72,22 +74,20 @@ class KMess : public KMessInterface void checkAutologin(QString handle); // Initialize the class bool initialize(); + // Check if the connection to the server is active + bool isConnected(); protected: // Protected methods // Read in account and other properties - virtual void readProperties(const KConfigGroup &config); + virtual void readProperties( const KConfigGroup &config = *((const KConfigGroup *)0) ); // Save account and other properties - virtual void saveProperties(KConfigGroup &config); + virtual void saveProperties( KConfigGroup &config = *((KConfigGroup *)0) ); private: // Private methods - // Add the account and create the GUI elements - void addAccount(Account *account); // The application is closing, after queryClose() was approved void applicationClosing(); // Create the program's default directories in .kde/share/apps/ bool createDirectories(); - // Return the account for a given handle - Account * getAccountByHandle( const QString &handle ); // Initialize the chat master bool initChatMaster(); // Initialize the emoticon manager @@ -106,22 +106,21 @@ class KMess : public KMessInterface void switchViewToContactList(); // Switch the view to the initial login screen void switchViewToInitialScreen(); - // Switch the view to the initial login screen - void switchViewToLoginScreen(); +public slots: + // Add the account and create the GUI elements + void slotAccountAdded( Account *account ); + // An account's settings have been changed + void slotAccountChanged( Account *account, QString oldHandle, QString oldFriendlyName ); + // Delete the given account from the UI + void slotAccountDeleted( Account *account ); private slots: // Private slots - // The account changed it's status to invisible - void accountInvisible(); - // The account changed it's status to offline - void accountOffline(); - // The account changed it's status to online - void accountOnline(); // "Add a new contact" was selected from the menu. void addNewContact(); // "Add a new group" was selected from the menu. void addNewGroup(); - // An account's settings have been changed - void changedAccountSettings( Account *account, QString oldHandle, QString oldFriendlyName ); + // A view pictures mode has been selected from the menu. + void changedListPictureSize( int mode ); // A status was selected from the menu. void changeStatus( int index ); // Tray notifications settings were changed @@ -149,6 +148,8 @@ class KMess : public KMessInterface #endif // Open the transfer manager void showTransferWindow(); + // Detect changes in the status of the internet connection + void slotConnectionStatusChanged( Solid::Networking::Status newStatus ); // A connection has been made with the notification server. void connected(); // Connect to the server with the given account @@ -159,8 +160,6 @@ class KMess : public KMessInterface void currentAccountChangedName(); // "Add new account" has been selected from the menu. void createNewAccount(); - // Delete the given account - void deleteAccount(Account *account); // Disconnect was selected from the menu. void disconnectClicked(); // The program is not connected (initially) or no longer connected (after @@ -172,10 +171,12 @@ class KMess : public KMessInterface void showSettingsForCurrentAccount(); // Show the user's MSN profile. void showUserProfile(); - // The "show display pictures" menu item has been toggled. - void toggleDisplayPictures(bool show); // The "show allowed contacts" menu item has been toggled. void toggleShowAllowed(bool show); + // The "show empty groups" menu item has been toggled. + void toggleShowEmpty( bool show ); + // The "show search in contact list" menu item has been toggled. + void toggleShowSearchFrame(bool show); // The "show offline contacts" menu item has been toggled. void toggleShowOffline(bool show); // The "Show removed contacts" menu item has been toggled. @@ -186,10 +187,6 @@ class KMess : public KMessInterface void userIsNotIdle(); private: // Private attributes - // A list of user accounts - QList accounts_; - // The autologin view widget - AutologinView *autologinView_; // The chat master - the object that controls the chat window ChatMaster *chatMaster_; // The menu items of the connect menu @@ -222,6 +219,8 @@ class KMess : public KMessInterface QHash settingsMenuItems_; // The main view widget KMessView *view_; + // The DBus class + KMessDBus *dbus_; }; #endif diff --git a/src/kmessapplication.cpp b/src/kmessapplication.cpp index 4e8b496..7f0b426 100644 --- a/src/kmessapplication.cpp +++ b/src/kmessapplication.cpp @@ -24,16 +24,12 @@ #include "config-kmess.h" -#include -#include - #include #include -#include #include -#ifdef ENABLE_BINRELOC +#if ( ENABLE_BINRELOC != 0 ) // Required for autopackage support. // Handles detection of paths at run time. #include "binreloc.h" @@ -61,10 +57,6 @@ KMessApplication::KMessApplication() // Start remaining initialisation initializePaths(); initializeMainWindow(); - -// // Delay further initialisation until the event loop is active. -// // This makes it easier to show messages boxes, etc.. -// QTimer::singleShot( 0, this, SLOT( slotEventLoopActive() ) ); } @@ -120,9 +112,9 @@ void KMessApplication::initializeMainWindow() QString testName = args->getOption("runtest"); if( ! testName.isEmpty() ) { + // KMessTest auto-deletes itself if necessary KMessTest *kmessTest = new KMessTest( contactListWindow_ ); kmessTest->runTest( testName ); - delete kmessTest; return; } #endif @@ -145,7 +137,7 @@ void KMessApplication::initializeMainWindow() */ void KMessApplication::initializePaths() { -#ifdef ENABLE_BINRELOC +#if ( ENABLE_BINRELOC != 0 ) // Register run-time detected paths for Autopackage support. // This also prevents the "square boxes images" problem from happening // if the --prefix of ./configure was incorrect. @@ -189,15 +181,6 @@ void KMessApplication::slotAboutToQuit() -/** - * Start the main window. - */ -void KMessApplication::slotEventLoopActive() -{ -} - - - /** * Called when the last window is closed. * @@ -245,3 +228,5 @@ void KMessApplication::setQuitSelected(bool quitSelected) quitSelected_ = quitSelected; } + +#include "kmessapplication.moc" diff --git a/src/kmessapplication.h b/src/kmessapplication.h index fce0817..9989b66 100644 --- a/src/kmessapplication.h +++ b/src/kmessapplication.h @@ -57,7 +57,6 @@ class KMessApplication : public KApplication private slots: void slotAboutToQuit(); - void slotEventLoopActive(); void slotLastWindowClosed(); private: // private methods diff --git a/src/kmessdebug.cpp b/src/kmessdebug.cpp index 2e57116..6ddf1aa 100644 --- a/src/kmessdebug.cpp +++ b/src/kmessdebug.cpp @@ -21,6 +21,8 @@ #include #include +#include + // kmessdebug.h adds a KMESS_NULL macro to detect // and display null pointer warnings. This is used @@ -45,8 +47,11 @@ */ bool _kmessWarnNull(bool isNull, const char *var, const char *funcinfo, const char *file, int line) { - if(isNull) - kWarning() << "'" << var << "' should not be null in " << funcinfo << ", " << file << " (" << line << ")!"; + if( isNull ) + { + kWarning().nospace() << "'" << var << "' should not be null in " << funcinfo << ", " << file << " (" << line << ")!"; + } + return isNull; } @@ -80,7 +85,7 @@ * Unlike Q_ASSERT(), this function won't crash KMess, * since it could be trigged by an invalid client * - * @param condition The source code of the condition passed to the KMESS_ASSERT macro. + * @param assertion The source code of the condition passed to the KMESS_ASSERT macro. * @param file The filename where the KMESS_ASSERT macro is called from. * @param line The line number where the KMESS_ASSERT macro is called from. * @ingroup Debug @@ -149,20 +154,26 @@ bool _kmessAssert( const char *assertion, const char *file, int line ) /** * @brief A Qt debug message handler. - * @param type The debug message type, generated by qDebug(), qFatal(), etc.. - * @param message The message to print. * * This function can be installed using @code qInstallMsgHandler( kmessDebugPrinter ); @endcode * It's used to avoid unwanted exit(1) or abort() calls. + * + * @param type The debug message type, generated by qDebug(), qFatal(), etc.. + * @param message The message to print. + * @ingroup Debug */ void kmessDebugPrinter( QtMsgType type, const char *message ) { bool isAssert = ( strncmp( message, "ASSERT", 7 ) == 0 ); // 'ASSERT failure' or 'ASSERT: ' + static QTime timer; + if( ! timer.isValid() ) + timer.start(); + float elapsed = (float)timer.elapsed() / (float)1000; if( isAssert ) { // can be qWarning() by us or qFatal() from Qt. - fprintf( stderr, "kmess(%d) %s\n", getpid(), message ); + fprintf( stderr, "%.3f> kmess(%d) %s\n", elapsed, getpid(), message ); #ifdef KMESSTEST // Crash on qFatal() from Qt, called from Q_ASSERT() @@ -178,19 +189,19 @@ void kmessDebugPrinter( QtMsgType type, const char *message ) switch( type ) { case QtDebugMsg: - fprintf( stderr, "%s\n", message ); + fprintf( stderr, "%.3f> %s\n", elapsed, message ); break; case QtWarningMsg: - fprintf( stderr, "WARNING: %s\n", message ); + fprintf( stderr, "%.3f> WARNING: %s\n", elapsed, message ); break; case QtCriticalMsg: - fprintf( stderr, "CRITICAL: %s\n", message ); + fprintf( stderr, "%.3f> CRITICAL: %s\n", elapsed, message ); break; case QtFatalMsg: - fprintf( stderr, "FATAL: %s\n", message ); + fprintf( stderr, "%.3f> FATAL: %s\n", elapsed, message ); #ifdef KMESSTEST abort(); diff --git a/src/kmessdebug.h b/src/kmessdebug.h index 0bcfd98..2c3966a 100644 --- a/src/kmessdebug.h +++ b/src/kmessdebug.h @@ -33,11 +33,6 @@ #define KMESSDEBUG_KMESSAPPLICATION #define KMESSDEBUG_KMESSINTERFACE #define KMESSDEBUG_KMESSVIEW - #define KMESSDEBUG_KMESSVIEWINTERFACE - #define KMESSDEBUG_KMESSLISTVIEWITEM -// #define KMESSDEBUG_CONTACTLISTVIEWDELEGATE - #define KMESSDEBUG_CONTACTLISTVIEWITEM - #define KMESSDEBUG_GROUPLISTVIEWITEM #define KMESSDEBUG_INITIALVIEW #define KMESSDEBUG_SETTINGSDIALOG #define KMESSDEBUG_CONTACTPROPERTIES @@ -58,24 +53,28 @@ #define KMESSDEBUG_ACCOUNT #define KMESSDEBUG_CURRENTACCOUNT + #define KMESSDEBUG_ACCOUNTSMANAGER #define KMESSDEBUG_CONTACT #define KMESSDEBUG_CONTACTBASE #define KMESSDEBUG_CONTACTEXTENSION #define KMESSDEBUG_CONTACTLIST +// #define KMESSDEBUG_CONTACTLISTMODELTEST +// #define KMESSDEBUG_CONTACTLISTMODEL #define KMESSDEBUG_GROUP #define KMESSDEBUG_CHATMASTER + #define KMESSDEBUG_CHAT #define KMESSDEBUG_CHATWINDOW #define KMESSDEBUG_CHATVIEW #define KMESSDEBUG_CHATMESSAGEVIEW #define KMESSDEBUG_CONTACTSIDEBAR #define KMESSDEBUG_EMOTICONSIDEBAR #define KMESSDEBUG_CONTACTFRAME - #define KMESSDEBUG_CONTACTACTION #define KMESSDEBUG_INVITEDCONTACT #define KMESSDEBUG_EMOTICONS + #define KMESSDEBUG_RICHTEXTPARSER #define KMESSDEBUG_IDLETIMER #define KMESSDEBUG_AUTOLOCK #define KMESSDEBUG_NOWLISTENINGCLIENT @@ -83,6 +82,8 @@ #define KMESSDEBUG_THUMBNAILPROVIDER #define KMESSDEBUG_SYSTEMTRAY #define KMESSDEBUG_CRASHHANDLER + #define KMESSDEBUG_SHAREDMETHODS + #define KMESSDEBUG_KMESSDBUS #define KMESSDEBUG_MIMEMESSAGE #define KMESSDEBUG_MULTIPACKETMESSAGE diff --git a/src/kmessinterface.cpp b/src/kmessinterface.cpp index 2a412f1..80e5261 100644 --- a/src/kmessinterface.cpp +++ b/src/kmessinterface.cpp @@ -17,17 +17,18 @@ #include "kmessinterface.h" +#include "settings/globalsettingsdialog.h" +#include "utils/kmessconfig.h" +#include "utils/kmessshared.h" #include "kmessapplication.h" #include "kmessdebug.h" #include "systemtraywidget.h" -#include -#include #include #include #include +#include -#include #include #include #include @@ -35,13 +36,10 @@ #include #include #include -#include -#include #include #include #include #include -#include #include #include @@ -50,7 +48,7 @@ // The constructor KMessInterface::KMessInterface( QWidget *parent ) : KMainWindow( parent ) - , connectState_(TYPE_ERROR) + , isErrorStatus_(true) , initialized_(false) { } @@ -105,6 +103,15 @@ void KMessInterface::applicationClosing() } + +// A view pictures mode has been selected from the menu. +void KMessInterface::changedListPictureSize( int /*mode*/ ) +{ + kDebug() << "not implemented"; +} + + + // A status was selected from the menu. void KMessInterface::changeStatus( int /*index*/ ) { @@ -133,19 +140,12 @@ void KMessInterface::showTransferWindow() -void KMessInterface::configureNotifications() -{ -// TODO: Re-enable the notification configuration dialog. -// KNotifyConfigWidget::configure(this); -} - - - // Create the "Actions" menu void KMessInterface::createActionsMenu() { - KAction *newAccount, *searchForContact, *searchByInterest; - KMenu *actionsMenu; + KAction *newAccount, *searchForContact, *searchByInterest; + KToggleAction *searchInContactList; + KMenu *actionsMenu; // Create the menu actionsMenu = new KMenu( i18n("&Actions"), this ); @@ -153,9 +153,15 @@ void KMessInterface::createActionsMenu() // Create the "settings" menus newContact_ = new KAction( KIcon("list-add-user"), i18n("New &Contact"), this ); newGroup_ = new KAction( KIcon("user-group-new"), i18n("New &Group"), this ); - searchForContact = new KAction( KIcon("edit-find-user"), i18n("Search for Contact"), this ); + searchForContact = new KAction( KIcon("edit-find-user"), i18n("Search for Contact"), this ); searchByInterest = new KAction( KIcon("system-search"), i18n("Search by &Interest"), this ); + + searchInContactList = new KToggleAction( KIcon("edit-find-user"), i18n("Search in Contact List"), actionCollection_ ); + searchInContactList->setShortcut( QKeySequence::fromString( tr( "Ctrl+f" ) ) ); + actionCollection_->addAction("edit-find-user", searchInContactList); + newAccount = new KAction( KIcon("user-identity"), i18n("New &Account"), this ); + globalSettings_ = new KAction( KIcon("kmess"), i18n("Configure &KMess"), this ); connect( newContact_, SIGNAL( triggered(bool) ), SLOT( addNewContact() ) ); @@ -165,12 +171,15 @@ void KMessInterface::createActionsMenu() SLOT( searchForContact() ) ); connect( searchByInterest, SIGNAL( triggered(bool) ), SLOT( searchForContactByInterest() ) ); + connect( searchInContactList, SIGNAL( triggered(bool) ), + SLOT( toggleShowSearchFrame(bool) ) ); connect( newAccount, SIGNAL( triggered(bool) ), SLOT( createNewAccount() ) ); + connect( globalSettings_, SIGNAL( triggered(bool) ), + SLOT( showGlobalSettings() ) ); // preferences-desktop-user settingsActionMenu_ = new KActionMenu( KIcon("configure"), i18n("Account &Settings"), this ); - configureNotifications_ = KStandardAction::configureNotifications( this, SLOT(configureNotifications()), this ); // Plug the items into "settings" actionsMenu->addAction( newContact_ ); @@ -178,11 +187,11 @@ void KMessInterface::createActionsMenu() actionsMenu->addSeparator(); actionsMenu->addAction( searchForContact ); actionsMenu->addAction( searchByInterest ); + actionsMenu->addAction( searchInContactList ); actionsMenu->addSeparator(); actionsMenu->addAction( newAccount ); actionsMenu->addAction( settingsActionMenu_ ); - actionsMenu->addSeparator(); - actionsMenu->addAction( configureNotifications_ ); + actionsMenu->addAction( globalSettings_ ); // Plug the menu into the menubar menuBar()->addMenu( actionsMenu ); @@ -225,8 +234,8 @@ void KMessInterface::createConnectMenu() connect( status_, SIGNAL( triggered(int) ), this, SLOT( changeStatus(int) ) ); - close = KStandardAction::close( this, SLOT( menuClose() ), this ); - quit = KStandardAction::quit ( this, SLOT( menuQuit() ), this ); + close = KStandardAction::close( this, SLOT( menuClose() ), actionCollection_ ); + quit = KStandardAction::quit ( this, SLOT( menuQuit() ), actionCollection_ ); // Plug the items into "connect" connectMenu->addAction( connectActionMenu_ ); @@ -238,8 +247,8 @@ void KMessInterface::createConnectMenu() connectMenu->addAction( close ); connectMenu->addAction( quit ); - toolBar( "mainToolBar" )->addAction( disconnect_ ); - toolBar( "mainToolBar" )->addAction( status_ ); + /* toolBar( "mainToolBar" )->addAction( disconnect_ ); + toolBar( "mainToolBar" )->addAction( status_ );*/ // Plug the menu into the menubar menuBar()->addMenu( connectMenu ); @@ -260,7 +269,7 @@ void KMessInterface::createHelpMenu() helpMenu_ = new KHelpMenu(this, KGlobal::mainComponent().aboutData()); // Create the help menu items - helpContents = KStandardAction::helpContents( this, SLOT( helpContents() ), this ); + helpContents = KStandardAction::helpContents( this, SLOT( helpContents() ), actionCollection_ ); aboutKMess = KStandardAction::aboutApp ( this, SLOT( aboutKMess() ), this ); aboutKDE = KStandardAction::aboutKDE ( this, SLOT( aboutKDE() ), this ); @@ -279,11 +288,17 @@ void KMessInterface::createHelpMenu() // Create the menus void KMessInterface::createMenus() { + // ActionCollection to collect the actions with a shortcut + actionCollection_ = new KActionCollection( this, KComponentData() ); + // Create the 4 menus createConnectMenu(); createViewMenu(); createActionsMenu(); createHelpMenu(); + + // Add collected actions + addActions( actionCollection_->actions() ); } @@ -291,7 +306,7 @@ void KMessInterface::createMenus() // Create the "View" menu void KMessInterface::createViewMenu() { - QStringList viewModes; + QStringList viewModes, listPictureSizes; // Create the menu viewMenu_ = new KMenu( i18n("&View"), this ); @@ -300,16 +315,27 @@ void KMessInterface::createViewMenu() showAllowedAction_ = new KToggleAction( i18n("Show &Allowed Contacts"), this ); showOfflineAction_ = new KToggleAction( i18n("Show &Offline Contacts"), this ); showRemovedAction_ = new KToggleAction( i18n("Show &Removed Contacts"), this ); - showPicturesAction_= new KToggleAction( i18n("Show &Display Pictures"), this ); + showEmptyAction_ = new KToggleAction( i18n("Show &Empty Groups"), this ); + + // The list mode display picture + listPictureSize_ = new KSelectAction( KIcon("view-list-tree"), i18n("Display Pictures Size"), this ); + listPictureSizes << i18n( "Do not display" ) + << i18n( "Small" ) + << i18n( "Medium" ) + << i18n( "Large" ); + listPictureSize_->setItems( listPictureSizes ); viewMode_ = new KSelectAction( KIcon("view-list-tree"), i18n("&Sort Contacts by"), this ); - viewModes << i18n("Group") << i18n("Online/Offline"); + viewModes << i18n("Group") // Account::VIEW_BYGROUP + << i18n("Online/Offline") // Account::VIEW_BYSTATUS + << i18n("Mixed"); // Account::VIEW_MIXED viewMode_->setItems(viewModes); showTransferAction_ = new KAction( KIcon("document-open-remote"), i18n("Show &Transfer Window"), this ); - showToolBar_ = new KToggleAction( i18n("Show &Tool bar"), this ); + //showToolBar_ = new KToggleAction( i18n("Show &Tool bar"), this ); showStatusBar_ = KStandardAction::showStatusbar( this, SLOT( showStatusBar() ), this ); + showMenuBar_ = KStandardAction::showMenubar( this, SLOT( showMenuBar() ), actionCollection_ ); #ifdef KMESS_NETWORK_WINDOW showNetworkAction_ = new KAction( KIcon("network-workgroup"), i18n("Show &Network Window"), this ); @@ -317,26 +343,29 @@ void KMessInterface::createViewMenu() #endif // Connect the actions - connect( showToolBar_, SIGNAL( triggered(bool) ), this, SLOT( showToolBar() ) ); - connect( viewMode_, SIGNAL( triggered(int) ), this, SLOT( changeViewMode(int) ) ); - connect( showPicturesAction_, SIGNAL( triggered(bool) ), this, SLOT( toggleDisplayPictures(bool) ) ); - connect( showAllowedAction_, SIGNAL( triggered(bool) ), this, SLOT( toggleShowAllowed(bool) ) ); - connect( showOfflineAction_, SIGNAL( triggered(bool) ), this, SLOT( toggleShowOffline(bool) ) ); - connect( showRemovedAction_, SIGNAL( triggered(bool) ), this, SLOT( toggleShowRemoved(bool) ) ); - connect( showTransferAction_, SIGNAL( triggered(bool) ), this, SLOT( showTransferWindow() ) ); +// connect( showToolBar_, SIGNAL( triggered(bool) ), this, SLOT( showToolBar() ) ); + connect( viewMode_, SIGNAL( triggered(int) ), this, SLOT( changeViewMode(int) ) ); + connect( listPictureSize_,SIGNAL( triggered(int) ), this, SLOT( changedListPictureSize(int) ) ); + connect( showAllowedAction_, SIGNAL( triggered(bool) ), this, SLOT( toggleShowAllowed(bool) ) ); + connect( showOfflineAction_, SIGNAL( triggered(bool) ), this, SLOT( toggleShowOffline(bool) ) ); + connect( showRemovedAction_, SIGNAL( triggered(bool) ), this, SLOT( toggleShowRemoved(bool) ) ); + connect( showEmptyAction_, SIGNAL( triggered(bool) ), this, SLOT( toggleShowEmpty(bool) ) ); + connect( showTransferAction_, SIGNAL( triggered(bool) ), this, SLOT( showTransferWindow() ) ); // Plug the items into "view" viewMenu_->addAction( showAllowedAction_ ); viewMenu_->addAction( showRemovedAction_ ); viewMenu_->addAction( showOfflineAction_ ); + viewMenu_->addAction( showEmptyAction_ ); viewMenu_->addSeparator(); - viewMenu_->addAction( showPicturesAction_ ); + viewMenu_->addAction( listPictureSize_); viewMenu_->addSeparator(); viewMenu_->addAction( viewMode_ ); viewMenu_->addSeparator(); viewMenu_->addAction( showTransferAction_ ); viewMenu_->addSeparator(); - viewMenu_->addAction( showToolBar_ ); +// viewMenu_->addAction( showToolBar_ ); + viewMenu_->addAction( showMenuBar_ ); viewMenu_->addAction( showStatusBar_ ); #ifdef KMESS_NETWORK_WINDOW @@ -382,14 +411,15 @@ void KMessInterface::enableMenus(bool connected) } status_->setEnabled( connected ); - newContact_-> setEnabled( connected ); - newGroup_-> setEnabled( connected ); - showAllowedAction_->setEnabled( connected ); - showOfflineAction_->setEnabled( connected ); - showRemovedAction_->setEnabled( connected ); - showPicturesAction_->setEnabled( connected ); - showProfile_-> setEnabled( connected ); - viewMode_-> setEnabled( connected ); + newContact_ ->setEnabled( connected ); + newGroup_ ->setEnabled( connected ); + showAllowedAction_ ->setEnabled( connected ); + showOfflineAction_ ->setEnabled( connected ); + showRemovedAction_ ->setEnabled( connected ); + showEmptyAction_ ->setEnabled( connected ); + listPictureSize_->setEnabled( connected ); + showProfile_ ->setEnabled( connected ); + viewMode_ ->setEnabled( connected ); // showNetworkAction should ALWAYS be enabled! } @@ -416,7 +446,7 @@ bool KMessInterface::initialize() } // Initialize the status bar - statusLabel_ = new QLabel( this ); + statusLabel_ = new KSqueezedTextLabel( this ); statusBar()->addWidget( statusLabel_, 2 ); statusTimer_ = new QLabel( this ); @@ -477,6 +507,7 @@ bool KMessInterface::initSystemTrayWidget() menu->addAction( status_ ); menu->addSeparator(); menu->addAction( settingsActionMenu_ ); + menu->addAction( globalSettings_ ); // Make the connections for the system tray widget connect( systemTrayWidget_, SIGNAL( quitSelected() ), @@ -608,29 +639,49 @@ void KMessInterface::readProperties( const KConfigGroup &config ) kDebug() << "Reading properties"; #endif + KConfigGroup group; + + // Choose the config group if it was not given + if( &config == 0 ) + { + group = KMessConfig::instance()->getGlobalConfig( "ContactListWindow" ); + } + else + { + group = config; + } + // Pull in the window size and position - QSize windowsize = config.readEntry( "Size", QSize() ); + QSize windowsize = group.readEntry( "Size", QSize() ); if(!windowsize.isEmpty()) { resize(windowsize); } - QPoint position = config.readEntry( "Position", QPoint() ); + QPoint position = group.readEntry( "Position", QPoint() ); if(!position.isNull()) { move(position); } - // bar status settings - bool bViewToolbar = config.readEntry( "Show Toolbar", true ); + + bool bViewMenubar = group.readEntry( "Show Menubar", true ); + showMenuBar_->setChecked( bViewMenubar ); + menuBar()->setVisible( bViewMenubar ); + + // Commented for future work +/* // bar status settings + bool bViewToolbar = group.readEntry( "Show Toolbar", true ); showToolBar_->setChecked(bViewToolbar); showToolBar(); +*/ - bool bViewStatusbar = config.readEntry( "Show Statusbar", true ); - showStatusBar_->setChecked(bViewStatusbar); + bool bViewStatusbar = group.readEntry( "Show Statusbar", true ); + showStatusBar_->setChecked( bViewStatusbar ); showStatusBar(); // bar position settings - KConfigGroup mainToolBarConfig = config.group( "mainToolBar" ); - toolBar( "mainToolBar" )->applySettings( mainToolBarConfig ); + /* KConfigGroup mainToolBarGroup = group.group( "mainToolBar" ); + toolBar( "mainToolBar" )->applySettings( mainToolBarGroup ); + toolBar( "mainToolBar" )->setToolBarsLocked( group.readEntry( "Lock Toolbar", false ) );*/ } @@ -642,14 +693,28 @@ void KMessInterface::saveProperties(KConfigGroup &config) kDebug() << "Saving properties"; #endif - config.writeEntry("Size", size() ); - config.writeEntry("Position", pos() ); - config.writeEntry("Show Toolbar", showToolBar_->isChecked() ); - config.writeEntry("Show Statusbar", showStatusBar_->isChecked() ); + KConfigGroup group; + + // Choose the config group if it was not given + if( &config == 0 ) + { + group = KMessConfig::instance()->getGlobalConfig( "ContactListWindow" ); + } + else + { + group = config; + } + + group.writeEntry("Size", size() ); + group.writeEntry("Position", pos() ); +// group.writeEntry("Show Toolbar", showToolBar_->isChecked() ); + group.writeEntry("Show Menubar", showMenuBar_->isChecked()); + group.writeEntry("Show Statusbar", showStatusBar_->isChecked() ); // save the toolbar settings - KConfigGroup mainToolBarConfig = config.group( "mainToolBar" ); - toolBar( "mainToolBar" )->saveSettings( mainToolBarConfig ); + /* KConfigGroup mainToolBarGroup = group.group( "mainToolBar" ); + toolBar( "mainToolBar" )->saveSettings( mainToolBarGroup ); + group.writeEntry("Lock Toolbar", toolBar( "mainToolBar" )->toolBarsLocked());*/ #ifdef KMESSDEBUG_KMESSINTERFACE kDebug() << "Done saving properties"; @@ -661,8 +726,8 @@ void KMessInterface::saveProperties(KConfigGroup &config) // Open up the URL for MSN's contact search page. void KMessInterface::searchForContact() { - // KRun auto-deletes itself. - new KRun( KUrl( "http://members.msn.com/find.msnw?mkt=" + KGlobal::locale()->country() ), window() ); + // Launch the browser for the given URL + KMessShared::openBrowser( KUrl( "http://members.msn.com/find.msnw?mkt=" + KGlobal::locale()->country() ) ); } @@ -670,8 +735,34 @@ void KMessInterface::searchForContact() // Open up the URL to MSN's "search by interest" page. void KMessInterface::searchForContactByInterest() { - // KRun auto-deletes itself. - new KRun( KUrl( "http://members.msn.com/rootcat.msnw?mkt=" + KGlobal::locale()->country() ), window() ); + // Launch the browser for the given URL + KMessShared::openBrowser( KUrl( "http://members.msn.com/rootcat.msnw?mkt=" + KGlobal::locale()->country() ) ); +} + + + +// The "Show Global Settings" option was clicked. +void KMessInterface::showGlobalSettings() +{ + GlobalSettingsDialog *globalSettingsDialog = GlobalSettingsDialog::instance(); + + globalSettingsDialog->show(); + globalSettingsDialog->raise(); +} + + + +// "Show menu bar" was toggled. +void KMessInterface::showMenuBar() +{ + if( ! showMenuBar_->isChecked() ) + { + menuBar()->hide(); + } + else + { + menuBar()->show(); + } } @@ -692,7 +783,7 @@ void KMessInterface::showStatusBar() // "Show toolbar" was toggled. -void KMessInterface::showToolBar() +/*void KMessInterface::showToolBar() { if(!showToolBar_->isChecked()) { @@ -702,7 +793,7 @@ void KMessInterface::showToolBar() { toolBar("mainToolBar")->show(); } -} +}*/ @@ -715,40 +806,36 @@ void KMessInterface::showUserProfile() // Change the status bar message. -void KMessInterface::statusMessage( QString message, ConnectionStatus connectState ) +void KMessInterface::statusMessage( QString message, bool isError ) { -#ifdef KMESSDEBUG_KMESSINTERFACE - kDebug() << "Changed message to" << message; -#endif - - statusLabel_->setText( message ); - - if ( connectState != connectState_ ) + if( message != message_ ) { - switch ( connectState ) - { - case TYPE_MESSAGE: - onlineTime_ = 0; - onlineTimer_->start( 60000 ); - break; - case TYPE_WARNING: // No actions are needed for the warning messages - break; - case TYPE_ERROR: - onlineTimer_->stop(); - statusTimer_->setText( "00:00" ); - break; - } + statusLabel_->setText( message ); + message_ = message; - connectState_ = connectState; +#ifdef KMESSDEBUG_KMESSINTERFACE + kDebug() << "Changed message to" << message; +#endif } -} + // Do not alter the online timer when the status has not changed + if( isError == isErrorStatus_ ) + { + return; + } + if( isError ) + { + onlineTimer_->stop(); + statusTimer_->setText( "00:00" ); + } + else + { + onlineTime_ = 0; + onlineTimer_->start( 60000 ); + } -// The "show display pictures" menu item has been toggled. -void KMessInterface::toggleDisplayPictures(bool /*show*/) -{ - kDebug() << "not implemented"; + isErrorStatus_ = isError; } @@ -761,6 +848,22 @@ void KMessInterface::toggleShowAllowed(bool /*show*/) +// The "show empty groups" menu item has been toggled. +void KMessInterface::toggleShowEmpty(bool /*show*/) +{ + kDebug() << "not implemented"; +} + + + +// The "show search in contact list" menu item has been toggled. +void KMessInterface::toggleShowSearchFrame(bool /*show*/) +{ + kDebug() << "not implemented"; +} + + + // The "show offline contacts" menu item has been toggled. void KMessInterface::toggleShowOffline(bool /*show*/) { diff --git a/src/kmessinterface.h b/src/kmessinterface.h index 78db5e0..d246a54 100644 --- a/src/kmessinterface.h +++ b/src/kmessinterface.h @@ -21,11 +21,9 @@ #include "contact/msnstatus.h" #include "kmessdebug.h" -#include - #include -#include -#include +#include +#include // Forward declarations @@ -58,14 +56,6 @@ class KMessInterface : public KMainWindow public: // Public methods - // Message Types shown in the Status Bar - enum ConnectionStatus - { - TYPE_MESSAGE, - TYPE_WARNING, - TYPE_ERROR - }; - friend class KMessTest; // The constructor KMessInterface( QWidget *parent=0 ); @@ -82,15 +72,17 @@ class KMessInterface : public KMainWindow virtual bool initialize(); // Restore the window properties (called by KMainWindow) - virtual void readProperties(const KConfigGroup &config); + virtual void readProperties( const KConfigGroup &config = *((const KConfigGroup *)0) ); // Save the window properties (called by KMainWindow) - virtual void saveProperties(KConfigGroup &config); + virtual void saveProperties( KConfigGroup &config = *((KConfigGroup *)0) ); protected slots: // Protected slots // "Add a new contact" was selected from the menu. virtual void addNewContact(); // "Add a new group" was selected from the menu. virtual void addNewGroup(); + // A view pictures mode has been selected from the menu. + virtual void changedListPictureSize(int mode); // A status was selected from the menu. virtual void changeStatus( int index ); // A view mode has been selected from the menu. @@ -106,11 +98,13 @@ class KMessInterface : public KMainWindow // Show the user's MSN profile. virtual void showUserProfile(); // Change the status bar message. - virtual void statusMessage(QString message, KMessInterface::ConnectionStatus connectStatus = TYPE_ERROR ); - // The "show display pictures" menu item has been toggled. - virtual void toggleDisplayPictures(bool show); + virtual void statusMessage(QString message, bool isError ); // The "show allowed contacts" menu item has been toggled. virtual void toggleShowAllowed(bool show); + // The "show empty groups" menu item has been toggled. + virtual void toggleShowEmpty( bool show ); + // The "show search in contact list" menu item has been toggled. + virtual void toggleShowSearchFrame(bool show); // The "show offline contacts" menu item has been toggled. virtual void toggleShowOffline(bool show); // The "Show removed contacts" menu item has been toggled. @@ -123,15 +117,18 @@ class KMessInterface : public KMainWindow KActionMenu *connectActionMenu_; // The "disconnect" menu item KAction *disconnect_; - KAction *configureNotifications_; + // The menu for global settings + KAction *globalSettings_; + // View list pictures mode + KSelectAction *listPictureSize_; // The menu for "settings..." with a profile KActionMenu *settingsActionMenu_; - // Toggle actions for showing allowed, offline, and removed contacts. - KToggleAction *showAllowedAction_, *showOfflineAction_, *showRemovedAction_; + // Toggle actions for showing allowed, offline, and removed contacts, and empty groups. + KToggleAction *showAllowedAction_, *showOfflineAction_, *showRemovedAction_, *showEmptyAction_; // Show the network window KAction *showNetworkAction_; - // Toggle actions for showing display pictures in contact list. - KToggleAction *showPicturesAction_; + // Toggle actions for showing and hiding the menu bar + KToggleAction *showMenuBar_; // Toggle actions for showing and hiding the status bar KToggleAction *showStatusBar_; // Show the transfer manager @@ -142,6 +139,8 @@ class KMessInterface : public KMainWindow SystemTrayWidget *systemTrayWidget_; // The menu for selecting the view mode. KSelectAction *viewMode_; + // ActionCollection + KActionCollection *actionCollection_; private: // Private methods // Create the "Actions" menu @@ -166,8 +165,6 @@ class KMessInterface : public KMainWindow void aboutKMess(); // Show the "about KDE" message. void aboutKDE(); - // Show the notifications dialog - void configureNotifications(); // Show the user manual for KMess. void helpContents(); // Close has been selected from the menu. @@ -178,33 +175,39 @@ class KMessInterface : public KMainWindow void searchForContact(); // Open up the URL to MSN's "search by interest" page. void searchForContactByInterest(); + // The "Show Global Settings" option was clicked. + void showGlobalSettings(); + // "Show menu bar" was toggled. + void showMenuBar(); // "Show status bar" was toggled. void showStatusBar(); // "Show toolbar" was toggled. - void showToolBar(); + // void showToolBar(); private: // Private attributes - // The current connection state - ConnectionStatus connectState_; + // Whether the status is a warning or not + bool isErrorStatus_; // The help menu launcher - KHelpMenu *helpMenu_; + KHelpMenu *helpMenu_; // Whether or not the object was initialized - bool initialized_; + bool initialized_; + // Current message + QString message_; // Some action menus that the child doesn't need, but need to be // made visible/invisible - KAction *newContact_, *newGroup_, *showProfile_; + KAction *newContact_, *newGroup_, *showProfile_; // Minutes online - unsigned int onlineTime_; + unsigned int onlineTime_; // Online interval timer - QTimer *onlineTimer_; + QTimer *onlineTimer_; // Toggle actions for showing and hiding the toolbar - KToggleAction *showToolBar_; + // KToggleAction *showToolBar_; // Status messages - QLabel *statusLabel_; + KSqueezedTextLabel *statusLabel_; // Online timer - QLabel *statusTimer_; + QLabel *statusTimer_; // The view menu - stored here because it needs to be enabled/disabled - KMenu *viewMenu_; + KMenu *viewMenu_; }; #endif diff --git a/src/kmesstest.cpp b/src/kmesstest.cpp index 7e630a2..e4c9b3f 100644 --- a/src/kmesstest.cpp +++ b/src/kmesstest.cpp @@ -17,6 +17,9 @@ #include "kmesstest.h" +#include "chat/chat.h" +#include "chat/chatmaster.h" +#include "chat/chatview.h" #include "chat/chatwindow.h" #include "chat/contactsidebar.h" #include "chat/xsltransformation.h" @@ -37,8 +40,9 @@ #include "network/msnswitchboardconnection.h" #include "notification/contactstatusnotification.h" #include "notification/passivepopup.h" -#include "settings/settingsdialog.h" +#include "settings/accountsettingsdialog.h" #include "utils/nowlisteningclient.h" +#include "utils/richtextparser.h" #include "contactlistviewdelegate.h" #include "currentaccount.h" #include "emoticonmanager.h" @@ -49,17 +53,15 @@ #include #include -#include -#include #include -#include // The constructor KMessTest::KMessTest(KMess *kmess) : QObject() + , doNotDelete_(false) , kmess_(kmess) { setObjectName("KMessTest"); @@ -95,6 +97,7 @@ void KMessTest::runTest( const QString &testName ) TESTCASE( "crash", testCrash() ); TESTCASE( "addcontact", testAddContactDialog() ); TESTCASE( "contactaddeduser", testContactAddedUserDialog() ); + TESTCASE( "msnplus", testMsnPlus() ); TESTCASE( "ns", testNotificationConnection() ); TESTCASE( "contactlist", testContactList() ); TESTCASE( "connect", testConnect() ); @@ -109,6 +112,11 @@ void KMessTest::runTest( const QString &testName ) kDebug() << endl << "----------------------------------------"; kDebug() << "Use Ctrl+C to quit"; + + if( ! doNotDelete_ ) + { + delete this; + } } @@ -137,29 +145,28 @@ void KMessTest::testChatWindow() testGroupsAndContacts(); EmoticonManager::instance()->connected(); - chatWindow_ = new ChatWindow(); - chatWindow_->initialize("none"); - MsnSwitchboardConnection *sb = new MsnSwitchboardConnection(); - chatWindow_->setSwitchboardConnection( sb ); - chatWindow_->show(); + CurrentAccount::instance()->setTabbedChatMode( 0 ); + CurrentAccount::instance()->setFontColor( "#ff9900" ); - QTimer::singleShot( 0, this, SLOT(testChatWindowStep()) ); + MsnSwitchboardConnection *sb1 = new MsnSwitchboardConnection(); + ChatInformation chatInfo( kmess_->msnNotificationConnection_, "contact1@kmess.org", -1, ChatInformation::CONNECTION_OFFLINE ); + sb1->start( chatInfo ); + sb1->initialize( "contact1@kmess.org" ); - KMessageBox::error( 0, "Close this window to terminate the test." ); -} + MsnSwitchboardConnection *sb2 = new MsnSwitchboardConnection(); + sb2->initialize( "contact2@kmess.org" ); + sb2->contactJoined( "contact2@kmess.org", "Contact 2", 0 ); + sb2->contactJoined( "contact5@kmess.org", "Contact 5", 0 ); + MsnSwitchboardConnection *sb3 = new MsnSwitchboardConnection(); + sb3->initialize( "contact7@kmess.org" ); + sb3->contactJoined( "contact7@kmess.org", "Contact 7", 0 ); -void KMessTest::testChatWindowStep() -{ - if( ! chatWindow_ ) - return; + kmess_->chatMaster_->createChat( sb1 ); + kmess_->chatMaster_->createChat( sb2 ); + kmess_->chatMaster_->createChat( sb3 ); - static int val = 1; - - chatWindow_->contactSidebar_->contactJoined("contact" + QString::number(val) + "@kmess.org", QString() ); - - if( val++ < 6 ) - QTimer::singleShot( 4000, this, SLOT(testChatWindowStep()) ); + doNotDelete_ = true; } @@ -231,12 +238,12 @@ void KMessTest::testGroupsAndContacts() /*Group *group1 = */list->addGroup( "friends", "My Friends" ); /*Group *group2 = */list->addGroup( "work", "Work Mates" ); list->addGroup( "empty", "Empty Group"); - Contact *contact1 = list->addContact( "contact1@kmess.org", "Contact 1", 3, QStringList()<<"friends"<<"work", "c1" ); + Contact *contact1 = list->addContact( "contact1@kmess.org", "Contact 1 :)", 3, QStringList()<<"friends"<<"work", "c1" ); Contact *contact2 = list->addContact( "contact2@kmess.org", "Contact 2", 3, QStringList()<<"friends", "c2" ); Contact *contact3 = list->addContact( "contact3@kmess.org", "Contact 3", 3, QStringList()<<"work", "c3" ); Contact *contact4 = list->addContact( "contact4@kmess.org", "Contact 4", 3, QStringList()<<"friends", "c4" ); - Contact *contact5 = list->addContact( "contact5@kmess.org", "Contact 5", 3, QStringList()<<"friends", "c5" ); - Contact *contact6 = list->addContact( "contact6@kmess.org", "Contact 6", 3, QStringList()<<"work"<<"friends", "c6" ); + Contact *contact5 = list->addContact( "contact5@kmess.org", "Contact 5", 3, QStringList(), "c5" ); + Contact *contact6 = list->addContact( "contact6@kmess.org", "Contact 6 www.google.it", 3, QStringList()<<"work"<<"friends", "c6" ); Contact *contact7 = list->addContact( "contact7@kmess.org", " Contact 7 ", 3, QStringList()<<"friends", "c7" ); Contact *contact8 = list->addContact( "contact8@kmess.org", "Contact 8", 3, QStringList(), "c7" ); contact1->setPersonalStatus( "Contact Status" ); @@ -247,7 +254,7 @@ void KMessTest::testGroupsAndContacts() contact6->setPersonalStatus( "Contact Status" ); contact7->setPersonalStatus( "Contact Status" ); contact8->setPersonalStatus( "Contact Status" ); - contact5->setStatus( STATUS_ONLINE, false ); + list->changeContactStatus( "contact2@kmess.org", STATUS_ONLINE, "Contact 2", 3, QString(), false ); } @@ -256,9 +263,80 @@ void KMessTest::testContactList() { testGroupsAndContacts(); - kmess_->enableMenus( true ); - kmess_->switchViewToContactList(); + ContactList *list = kmess_->msnNotificationConnection_->contactList_; + list->dump(); + + // Disable all extra fields + Account *account = CurrentAccount::instance(); + account->setChatInformation( true, true, true, true, true, true, true, true, "Fresh" ); + account->setEmailSupported( false ); + account->setContactListDisplayMode( Account::VIEW_MIXED ); + account->setShowAllowedContacts( true ); + account->setShowEmptyGroups( true ); + account->setShowOfflineContacts( true ); + account->setShowRemovedContacts( true ); + + kmess_->connected(); kmess_->window()->show(); + + // Show the Now Listening field +// kmess_->view_->changedSong( "White Stripes, The", "Elephant", "Seven Nation Army", true ); + kmess_->view_->slotUpdateEmailDisplay(); + + QTimer *test = new QTimer(this); + connect(test, SIGNAL(timeout()), this, SLOT(testSlot())); + test->start( 1000 ); + + doNotDelete_ = true; +} + + +// A generic method to use as throwaway slot for delayed code +void KMessTest::testSlot() +{ + kDebug() << "TEST - Switching contact status"; + ContactList *list = kmess_->msnNotificationConnection_->contactList_; + + static bool statusSwitch = true; + Status first = STATUS_ONLINE, second = STATUS_BUSY; + + if( statusSwitch ) + { + qSwap( first, second ); + } + statusSwitch = ! statusSwitch; + + list->changeContactStatus( "contact5@kmess.org", first, "Contact 5", 3, QString(), false ); + list->changeContactStatus( "contact8@kmess.org", second, "Contact 8", 3, QString(), false ); +} + + + +void KMessTest::testMsnPlus() +{ + QStringList strings; + + strings << QString::fromUtf8( "[c=#0080FF][u][c=39][b](S) [c=29] Fede [/c](S)[/b][/c=39] forza azzurriiiiiii[/u][/c]" ); + strings << QString::fromUtf8( "[c=50][a=50]Opera[/a][/c][c=0][a=0]tore ec[/a][/c][c=4][a=4]ologico[/a][/c]" ); + strings << QString::fromUtf8( "[c=4]t[a=#0000]est[/c=44][/a]" ); + strings << QString::fromUtf8( "[c=3]te[a=2]st:)[/a=12]er[/c=4]" ); + strings << QString::fromUtf8( "[a=red]test[a=green]:DeroWithCo[/a=blue]lorssadfasd dfg sdfsdaf sdf [/a=yellow]"); + strings << QString::fromUtf8( "[c=#660000],.-~*'ĀØĀÆĀØ'*Ā·~-.Āø-).[i]Simo[/i].(-,.-~*'ĀØĀÆĀØ'*Ā·~-.Āø[/c=#00FFF]" ); + strings << QString::fromUtf8( "[b][a=1][c=4]- Emet -:) [/c][/a][/b]" ); + strings << QString::fromUtf8( "[b][a=1][c=10]- :) [T]ester boldExploit :P -[/c][/a][/b]" ); + strings << QString::fromUtf8( "[b][c=green]Vale - New kid on the block! :D[/c=blue][/b]" ); + // strings << QString::fromUtf8( "ļæ½$#F37AF0Vanitosa ļæ½$ ļæ½$#0A79F5Da strega cattiva a principessa..." ); + foreach( QString str, strings ) + { + QString original = str; + QString cleaned = str; + RichTextParser::getCleanString( cleaned ); + RichTextParser::parseMsnString( str, true, true, true, true ); + RichTextParser::getFormattedString( str ); + KMessageBox::information( kmess_, "" + original + "

" + cleaned + "

" + str + "" ); + } + + exit(0); } diff --git a/src/kmesstest.h b/src/kmesstest.h index d84a5bb..14fc30b 100644 --- a/src/kmesstest.h +++ b/src/kmesstest.h @@ -24,6 +24,7 @@ // forward declarations +class Chat; class KMess; class ChatWindow; @@ -39,7 +40,7 @@ class ChatWindow; * so they are not compiled in the release version. * * @author Mike K. Bennett - * @ingroup Root + * @ingroup Debug */ class KMessTest : public QObject { @@ -61,6 +62,7 @@ class KMessTest : public QObject void testCrash(); void testAddContactDialog(); void testContactAddedUserDialog(); + void testMsnPlus(); void testNotificationConnection(); void testContactList(); void testConnect(); @@ -73,16 +75,15 @@ class KMessTest : public QObject void testSystemTray(); void testUpnpConnection(); void testXslTransformation(); - private slots: - void testChatWindowStep(); + void testSlot(); #endif private: // Private attributes + // Control whether or not to auto-delete the instance after running a test + bool doNotDelete_; // A pointer to the main widget, also used to gain access to all its attributes KMess *kmess_; - // A pointer to the chat test window - ChatWindow *chatWindow_; }; #endif diff --git a/src/kmessview.cpp b/src/kmessview.cpp index 422df89..8f8bb5c 100644 --- a/src/kmessview.cpp +++ b/src/kmessview.cpp @@ -25,9 +25,12 @@ #include "contact/msnstatus.h" #include "dialogs/contactpropertiesdialog.h" #include "network/specialgroups.h" +#include "utils/kmessshared.h" +#include "utils/richtextparser.h" #include "contactlistviewdelegate.h" #include "currentaccount.h" #include "emoticonmanager.h" +#include "contactlistmodelfilter.h" #include "kmessdebug.h" #include @@ -59,12 +62,18 @@ #include #include +#ifdef KMESSDEBUG_CONTACTLISTMODELTEST + #include "../tests/modeltest/modeltest.h" +#endif + #ifdef KMESSDEBUG_KMESSVIEW #define KMESSDEBUG_KMESSVIEW_GENERAL -// #define KMESSDEBUG_KMESSVIEW_ITEM_VISIBILITY -#endif + #ifdef KMESSDEBUG_CONTACTLISTMODEL +// #define KMESSDEBUG_KMESSVIEW_ITEM_VISIBILITY + #endif +#endif // The constructor @@ -74,9 +83,11 @@ KMessView::KMessView( QWidget *parent ) contactCopyMapper_(0), contactMoveMapper_(0), currentAccount_(0), - initialized_(false) + initialized_(false), + viewModel_(0) { setupUi( this ); + searchFrame_->hide(); // Capture focus events without subclassing the widget from the .UI file personalMessageInput_->installEventFilter(this); @@ -146,23 +157,49 @@ ModelDataList KMessView::getItemData( const QModelIndex &index ) itemIndex = selection.first(); } - // Do nothing if the index is not valid + // The index or the selection aren't valid, abort if( ! itemIndex.isValid() ) { +#ifdef KMESSDEBUG_KMESSVIEW_ITEM_VISIBILITY + kDebug() << "Skipping an invalid item at index:" << index; +#endif return ModelDataList(); } - // Access the index's data - ContactListModelItem *item = static_cast( itemIndex.internalPointer() ); + // Get the item data + QVariant data( itemIndex.data() ); + + // If the data is not a variant map, abort + if( ! data.canConvert( QVariant::Map ) ) + { +#ifdef KMESSDEBUG_KMESSVIEW_ITEM_VISIBILITY + kDebug() << "Skipping an item with invalid data at index:" << index; +#endif + return ModelDataList(); + } + + // Convert the variant data to a normal map + ModelDataList itemData( data.toMap() ); + + // Do nothing if there's no data + if( itemData.isEmpty() ) + { +#ifdef KMESSDEBUG_KMESSVIEW_ITEM_VISIBILITY + kDebug() << "Skipping an empty item at index:" << index; +#endif + return ModelDataList(); + } + + int type = itemData[ "type" ].toInt(); // Do nothing if the item is not of a valid type - if( item->getType() != ContactListModelItem::ItemGroup - && item->getType() != ContactListModelItem::ItemContact ) + if( type != ContactListModelItem::ItemGroup + && type != ContactListModelItem::ItemContact ) { return ModelDataList(); } - return item->data( itemIndex.column() ).toMap(); + return itemData; } @@ -207,6 +244,7 @@ bool KMessView::initialize( QAbstractItemModel *viewModel ) // Using "knotify" icon because it's available everywhere. "multimedia" is SUSE-specific. emailPixmapLabel_->setPixmap( loader->loadIcon( "mail-mark-unread", KIconLoader::NoGroup ) ); nowListeningPixmapLabel_->setPixmap( loader->loadIcon( "speaker", KIconLoader::NoGroup ) ); + searchIcon_->setPixmap( loader->loadIcon( "edit-find-user", KIconLoader::Small ) ); // Run the update functions with the current user data slotUpdateEmailDisplay(); @@ -214,6 +252,44 @@ bool KMessView::initialize( QAbstractItemModel *viewModel ) slotUpdateNoEmails(); slotUpdateDisplayPicture(); + // Create the menu for status button + QMenu *menu = new QMenu(); + + QStringList states; + states << i18n("Online") + << i18n("Away") + << i18n("Away with auto-reply") + << i18n("Idle") + << i18n("Be Right Back") + << i18n("Busy") + << i18n("Out to Lunch") + << i18n("On the Phone") + << i18n("Invisible"); + + int i = 0; + QAction *action; + foreach( QString actionText, states ) + { + // Set the informations for actions + action = new QAction( this ); + action->setText( actionText ); + action->setData( i++ ); + menu ->addAction( action ); + } + + // Set the menu into button and connect the signals + statusButton_->setMenu( menu ); + connect( statusButton_, SIGNAL( clicked() ), + statusButton_, SLOT( showMenu() ) ); + +#if QT_VERSION >= 0x040400 + connect( statusButton_, SIGNAL( triggered(QAction*) ), + this, SLOT( slotForwardChangeStatus(QAction*) ) ); +#else + connect( menu, SIGNAL( triggered(QAction*) ), + this, SLOT( slotForwardChangeStatus(QAction*) ) ); +#endif + // Enable the labels onlineStatusLabel_->setEnabled(true); emailLabel_->setEnabled(true); @@ -236,8 +312,6 @@ bool KMessView::initialize( QAbstractItemModel *viewModel ) this, SLOT ( slotUpdateUserStatus() ) ); connect( currentAccount_, SIGNAL( changedEmailDisplaySettings() ), // Changed e-mail display settings this, SLOT ( slotUpdateEmailDisplay() ) ); - connect( currentAccount_, SIGNAL( changedDisplaySettings() ), // Changed group-display settings - this, SLOT ( slotUpdateDisplaySettings() ) ); connect( currentAccount_, SIGNAL( changedViewMode() ), // Changed the requested view mode this, SLOT ( slotUpdateViewMode() ) ); @@ -245,30 +319,57 @@ bool KMessView::initialize( QAbstractItemModel *viewModel ) const ContactList *contactList = currentAccount_->getContactList(); connect( contactList, SIGNAL( groupAdded(const Group*) ), // A group was added this, SLOT( rebuildContactActions() ) ); + connect( contactList, SIGNAL( groupChanged(const Group*) ), // A group was modified + this, SLOT( rebuildContactActions() ) ); connect( contactList, SIGNAL( groupRemoved(const Group*) ), // A group was removed this, SLOT( rebuildContactActions() ) ); + connect( contactList, SIGNAL( contactOnline(Contact*,bool) ), + this, SLOT( slotUpdateGroups() ) ); + connect( contactList, SIGNAL( contactOffline(Contact*,bool) ), + this, SLOT( slotUpdateGroups() ) ); // Connect signals for the history combobox and put the first string into it - connect( contactList, SIGNAL( contactOnline( Contact*, bool ) ), - this, SLOT( slotContactOnline( Contact *, bool ) ) ); - connect( contactList, SIGNAL( contactOffline( Contact*, bool) ), - this, SLOT( slotContactOffline( Contact *, bool )) ); + connect( contactList, SIGNAL( contactOnline( Contact*, bool ) ), + this, SLOT( slotContactChangedStatus( Contact *, bool ) ) ); + connect( contactList, SIGNAL( contactOffline( Contact*, bool ) ), + this, SLOT( slotContactChangedStatus( Contact *, bool ) ) ); + historyBox_->insertItem( 0, i18n( "[%1] Logged with %2", QTime::currentTime ().toString( "HH:mm:ss" ) , currentAccount_->getHandle() ) ); + // Connect the search edit line with slot for searching + connect( searchEdit_, SIGNAL( textChanged ( QString ) ), this, SLOT( slotSearchContact( QString ) ) ); return true; } -// Called when a contact is now online -void KMessView::slotContactOnline( Contact *contact, bool showNotify ) +// Called when a contact is now online/offline +void KMessView::slotContactChangedStatus( Contact *contact, bool showNotify ) { - // One contact is now online, put it in history combobox + // One contact is now online/offline, put it in history combobox if( showNotify ) { - QString item = i18n( "[%1] %2 goes online", QTime::currentTime ().toString( "HH:mm:ss" ) - , contact->getFriendlyName() ); + QString item; + QString friendlyname = contact->getFriendlyName(); + + if( contact->isOnline() ) + { + item = i18n( "[%1] %2 goes online", QTime::currentTime ().toString( "HH:mm:ss" ) + , Qt::escape( friendlyname ) ); + } + else + { + item = i18n( "[%1] %2 goes offline", QTime::currentTime ().toString( "HH:mm:ss" ) + ,Qt::escape( friendlyname ) ); + } + + // Remove oldest item if the count is >= 500 elements + if( historyBox_->count() >= 500 ) + { + historyBox_->removeItem( historyBox_->count() - 1 ); + } + historyBox_->insertItem( 0, item ); historyBox_->setCurrentIndex ( 0 ); } @@ -276,98 +377,23 @@ void KMessView::slotContactOnline( Contact *contact, bool showNotify ) -// Called when a contact is now offline -void KMessView::slotContactOffline( Contact *contact, bool showNotify ) +// The "show search in contact list" menu item has been toggled. +void KMessView::toggleShowSearchFrame(bool show) { - // One contact is now offline, put it in history combobox - if( showNotify ) + if( show ) { - QString item = i18n( "[%1] %2 goes offline", QTime::currentTime ().toString( "HH:mm:ss" ) - , contact->getFriendlyName() ); - historyBox_->insertItem( 0, item ); - historyBox_->setCurrentIndex ( 0 ); + searchFrame_->setShown( true ); + searchEdit_->setFocus(); } -} - - - -// Check whether an item will be hidden in the list -bool KMessView::isItemHidden( ModelDataList itemData ) -{ - bool isHidden = false; - - // Read the settings - bool showAllowed = currentAccount_->getShowAllowedContacts(); - bool showRemoved = currentAccount_->getShowRemovedContacts(); - bool showByGroup = currentAccount_->getShowContactsByGroup(); - bool showOffline = currentAccount_->getShowOfflineContacts(); - - if( itemData.isEmpty() ) + else { -#ifdef KMESSDEBUG_KMESSVIEW_ITEM_VISIBILITY - kDebug() << "Skipping empty item" << itemData; -#endif - return true; + // Remove the query when closing the search bar + searchEdit_->clearFocus(); + searchEdit_->setText( QString() ); + + searchFrame_->setShown( false ); + contactListView_->setFocus(); } - - switch( itemData[ "type" ].toInt() ) - { - case ContactListModelItem::ItemContact: - // Contacts in special groups are always visible. Their group may be not, though - if( ! itemData[ "isInSpecialGroup" ].toBool() ) - { - // Hide contacts without group when showing by online/offline - if( ( ! showByGroup ) && itemData[ "group" ].toString().isEmpty() ) - { - isHidden = true; - } - else - { - isHidden = ( ( (Status) itemData[ "status" ].toInt() ) == STATUS_OFFLINE && ! showOffline ); - } - } - -#ifdef KMESSDEBUG_KMESSVIEW_ITEM_VISIBILITY - kDebug() << "Visibility check: contact" << itemData[ "handle" ].toString() << "is" - << ( isHidden ? "hidden" : "visible" ); -#endif - break; - - case ContactListModelItem::ItemGroup: - - if( itemData[ "id" ] == SpecialGroups::ALLOWED ) - { - isHidden = ( ! showAllowed ); - } - else if( itemData[ "id" ] == SpecialGroups::REMOVED ) - { - isHidden = ( ! showRemoved ); - } - else if( itemData[ "id" ] == SpecialGroups::ONLINE ) - { - isHidden = ( showByGroup ); - } - else if( itemData[ "id" ] == SpecialGroups::OFFLINE ) - { - isHidden = ( showByGroup || ! showOffline ); - } - else - { - isHidden = ( ! showByGroup ); - } - -#ifdef KMESSDEBUG_KMESSVIEW_ITEM_VISIBILITY - kDebug() << "Visibility check: group" << itemData[ "name" ].toString() << "is" - << ( isHidden ? "hidden" : "visible" ); -#endif - break; - - default: - kWarning() << "Unknown item:" << itemData; - break; - } - - return isHidden; } @@ -389,15 +415,18 @@ bool KMessView::eventFilter(QObject *obj, QEvent *event) if( obj == currentAccountDisplayPic_ ) { - if( eventType == QEvent::MouseButtonPress ) + if( eventType == QEvent::Enter ) { - QImage glowingImage( currentAccount_->getImagePath() ); + QImage glowingImage( currentAccount_->getPicturePath() ); KIconEffect::toGamma( glowingImage, 0.8f ); currentAccountDisplayPic_->setPixmap( QPixmap::fromImage( glowingImage ) ); } + else if( eventType == QEvent::Leave ) + { + currentAccountDisplayPic_->setPixmap( QPixmap( currentAccount_->getPicturePath() ) ); + } else if( eventType == QEvent::MouseButtonRelease ) { - currentAccountDisplayPic_->setPixmap( QPixmap( currentAccount_->getImagePath() ) ); emit showSettings(); } } @@ -455,37 +484,51 @@ bool KMessView::eventFilter(QObject *obj, QEvent *event) // Initialize the contact list view bool KMessView::initContactListView( QAbstractItemModel *viewModel ) { +#ifdef KMESSDEBUG_KMESSVIEW_GENERAL + kDebug() << "Initializing the contact list view."; +#endif + KIconLoader *loader = KIconLoader::global(); - // Create a selection model to get data about the list selections - selectionModel_ = new QItemSelectionModel( viewModel ); + // Create a proxy model to filter and sort the raw contact list view + viewModel_ = new ContactListModelFilter( this ); + viewModel_->setSourceModel( viewModel ); - // Set contact list view's properties +#ifdef KMESSDEBUG_CONTACTLISTMODELTEST + // Start the Contact List model filter tests + new ModelTest( viewModel_ ); +#endif + + // Create a selection model to get data about the list selections + selectionModel_ = new QItemSelectionModel( viewModel_ ); + + // Connect the list to the models + contactListView_->setModel( viewModel_ ); + contactListView_->setSelectionModel( selectionModel_ ); + + // Activate the custom list item painter + contactListView_->setItemDelegate( new ContactListViewDelegate( contactListView_ ) ); + + // Set the contact list view's properties #if QT_VERSION >= 0x040400 contactListView_->setHeaderHidden( true ); #else contactListView_->header()->hide(); #endif - - contactListView_->setItemDelegate( new ContactListViewDelegate( contactListView_ ) ); + contactListView_->setAnimated( true ); contactListView_->setSelectionMode( QAbstractItemView::SingleSelection ); - - // Connect the list to the model and selection model - contactListView_->setModel( viewModel ); - contactListView_->setSelectionModel( selectionModel_ ); + contactListView_->setColumnHidden( 1, true ); // The model has 3 columns, but we display the first only + contactListView_->setColumnHidden( 2, true ); + contactListView_->setSortingEnabled( true ); + contactListView_->sortByColumn( 0, Qt::AscendingOrder ); // Set a background pixmap QString backgroundPicture = loader->iconPath( "background", KIconLoader::User ); - contactListView_->setStyleSheet( "QTreeView { background-image: url(" + backgroundPicture + ") }" + contactListView_->setStyleSheet( "QTreeView { background-image: url(" + backgroundPicture + "); " + " background-color: palette(alternate-base); }" "QTreeView::branch:has-siblings:adjoins-item { border-image: url(empty.png) 0; }" "QTreeView::branch:!has-children:!has-siblings:adjoins-item { border-image: url(empty.png) 0; }" ); - // Connect the model update signals - connect( viewModel, SIGNAL( dataChanged(const QModelIndex&,const QModelIndex&) ), - this, SLOT( slotUpdateItem(const QModelIndex&,const QModelIndex&) ) ); - connect( viewModel, SIGNAL( layoutChanged() ), - this, SLOT( slotUpdateDisplaySettings() ) ); - // Connect the list's signals connect( contactListView_, SIGNAL( clicked(const QModelIndex&) ), this, SLOT( slotItemSingleClicked(const QModelIndex&) ) ); @@ -501,14 +544,8 @@ bool KMessView::initContactListView( QAbstractItemModel *viewModel ) connect( contactListView_, SIGNAL( customContextMenuRequested(const QPoint&) ), this, SLOT( showContextMenu(const QPoint&) ) ); - // Enable list sorting - contactListView_->setColumnHidden( 1, true ); - contactListView_->setColumnHidden( 2, true ); - contactListView_->setSortingEnabled( true ); - contactListView_->sortByColumn( 1, Qt::AscendingOrder ); - // Update the list's visible groups - slotUpdateDisplaySettings(); + slotUpdateGroups(); return true; } @@ -534,6 +571,7 @@ bool KMessView::initContactPopup() popupCopyFriendlyName_ = new KAction( i18n("&Friendly Name"), this ); popupCopyPersonalMessage_ = new KAction( i18n("&Personal Message"), this ); popupCopyHandle_ = new KAction( i18n("&Email Address"), this ); + popupCopyMusic_ = new KAction( i18n("&Listening Music"), this ); // Connect the actions connect( chatWithContact_, SIGNAL(activated()), this, SLOT(slotForwardStartChat()) ); @@ -551,6 +589,7 @@ bool KMessView::initContactPopup() connect( popupCopyFriendlyName_, SIGNAL(triggered(bool)), this, SLOT( copyText() ) ); connect( popupCopyPersonalMessage_, SIGNAL(triggered(bool)), this, SLOT( copyText() ) ); connect( popupCopyHandle_, SIGNAL(triggered(bool)), this, SLOT( copyText() ) ); + connect( popupCopyMusic_, SIGNAL(triggered(bool)), this, SLOT( copyText() ) ); // Create the signal mappers needed to assign all actions to the move/copy contact slots contactCopyMapper_ = new QSignalMapper( this ); @@ -570,9 +609,11 @@ bool KMessView::initContactPopup() popupCopyMenu_ ->addAction( popupCopyFriendlyName_ ); popupCopyMenu_ ->addAction( popupCopyPersonalMessage_ ); popupCopyMenu_ ->addAction( popupCopyHandle_ ); + popupCopyMenu_ ->addAction( popupCopyMusic_ ); popupCopyMenu_->addSeparator(); // Initialize the popup menu + // If you re-organize the menu, also consider updating ContactFrame. contactActionPopup_ = new KMenu( "KMess", this ); contactActionPopup_->addAction( chatWithContact_ ); @@ -646,7 +687,8 @@ void KMessView::rebuildContactActions() } // Create the list of groups between which contacts can be moved & copied - foreach( Group *group, currentAccount_->getContactList()->getGroupList() ) + QListgroupsList( currentAccount_->getContactList()->getGroupList() ); + foreach( Group *group, groupsList ) { // Disallow copying and moving to special groups if( group->isSpecialGroup() ) @@ -690,6 +732,14 @@ void KMessView::slotEmailLabelClicked() +// Personal Status changed +void KMessView::slotForwardChangeStatus( QAction *action ) +{ + int index = action->data().toInt(); + emit changeStatus( index ); +} + + // A group was expanded or collapsed void KMessView::slotGroupChanged( const QModelIndex &index ) { @@ -742,48 +792,48 @@ void KMessView::showContextMenu( const QPoint &point ) QStringList contactGroups = contact->getGroupIds(); // Only chat if contact is friends list, and not blocked. - chatWithContact_ ->setEnabled( isFriend && ! isBlocked && isOnline ); + chatWithContact_ ->setVisible( isFriend && ! isBlocked && isOnline ); - moveContactToGroup_ ->setEnabled( isFriend ); + moveContactToGroup_ ->setVisible( isFriend ); // Only if the contact is not in the 'Implicit' group (group 0) or there is only one group; // (this means it will be the fifth ('Implicit', Online, Offline, Allowed, Removed); if( contactGroups.isEmpty() ) { - copyContactToGroup_ ->setEnabled( false ); + copyContactToGroup_ ->setVisible( false ); } else if( contactList->getGroupList().count() == 5 ) { - copyContactToGroup_ ->setEnabled( false ); - moveContactToGroup_ ->setEnabled( false ); + copyContactToGroup_ ->setVisible( false ); + moveContactToGroup_ ->setVisible( false ); } else { - copyContactToGroup_ ->setEnabled( isFriend ); + copyContactToGroup_ ->setVisible( isFriend ); } // Only if not added yet - addContact_ ->setEnabled( ! isFriend ); + addContact_ ->setVisible( ! isFriend ); // Only allow if contact is on the "removed" group. - allowContact_ ->setEnabled( ! isFriend && ! isAllowed && ! isBlocked ); + allowContact_ ->setVisible( ! isFriend && ! isAllowed && ! isBlocked ); // Only one of these is enabled: - blockContact_ ->setEnabled( ! isBlocked ); - unblockContact_ ->setEnabled( isBlocked ); + blockContact_ ->setVisible( ! isBlocked ); + unblockContact_ ->setVisible( isBlocked ); // Only if the contact is on the friends list, or no longer // added to reverse list (otherwise an "contact has added you" message appears) - removeContact_ ->setEnabled( isFriend || ! isReverse ); + removeContact_ ->setVisible( isFriend || ! isReverse ); // Only if the contact is in the 'Implicit' group if( contactGroups.isEmpty() ) { - removeFromGroup_ ->setEnabled(false); + removeFromGroup_ ->setVisible(false); } else { - removeFromGroup_ ->setEnabled(true); + removeFromGroup_ ->setVisible(true); } // Show all copy and move actions @@ -822,11 +872,11 @@ void KMessView::showContextMenu( const QPoint &point ) // If no actions have been enabled in a menu, disable it too if( enabledCopyActions <= 0 ) { - copyContactToGroup_ ->setEnabled( false ); + copyContactToGroup_ ->setVisible( false ); } if( enabledMoveActions <= 0 ) { - moveContactToGroup_ ->setEnabled( false ); + moveContactToGroup_ ->setVisible( false ); } // Clear the previous actions to avoid duplication of links @@ -864,9 +914,10 @@ void KMessView::showContextMenu( const QPoint &point ) } // Set tooltip ( informations ) of other copy actions - popupCopyFriendlyName_->setToolTip( contact->getFriendlyName() ); + popupCopyFriendlyName_ ->setToolTip( contact->getFriendlyName() ); popupCopyPersonalMessage_->setToolTip( contact->getPersonalMessage() ); - popupCopyHandle_->setToolTip( contact->getHandle() ); + popupCopyHandle_ ->setToolTip( contact->getHandle() ); + popupCopyMusic_ ->setToolTip( contact->getCurrentMediaString() ); // Show the popup contactActionPopup_->popup( QCursor::pos() ); @@ -883,8 +934,8 @@ void KMessView::showContextMenu( const QPoint &point ) int pos = group->getSortPosition(); - moveGroupUp_ ->setEnabled( contactList->getGroupBySortPosition( pos - 1 ) != 0 ); - moveGroupDown_ ->setEnabled( contactList->getGroupBySortPosition( pos + 1 ) != 0 ); + moveGroupUp_ ->setEnabled( contactList->getGroupBySortPosition( pos - 1, false ) != 0 ); + moveGroupDown_ ->setEnabled( contactList->getGroupBySortPosition( pos + 1, true ) != 0 ); // Show the popup groupActionPopup_->popup( QCursor::pos() ); @@ -911,24 +962,23 @@ void KMessView::copyText() void KMessView::showToolTip( const QPoint &point ) { QString tipText; - QModelIndex index = contactListView_->indexAt( contactListView_->mapFromGlobal( point ) ); + QModelIndex index( contactListView_->indexAt( contactListView_->mapFromGlobal( point ) ) ); - if( !index.isValid() ) + // Read the actual data off the model index + ModelDataList itemData( index.data().toMap() ); + + // Do nothing if the index is not valid + if( ! index.isValid() || itemData.isEmpty() ) { return; } - // Access the index's data - ContactListModelItem *item = static_cast( index.internalPointer() ); - - // Read the data off the model's index - ModelDataList itemData = item->data( index.column() ).toMap(); - // Fields used for the Contact tooltip - QString clientName, mediaType, mediaString, personalMessage; + QString clientName, mediaType, mediaString, friendlyName, personalMessage, lastSeenString, lastMessageString; + QDateTime lastSeen, lastMessage; // Paint the different types of list items - switch( item->getType() ) + switch( itemData[ "type" ].toInt() ) { case ContactListModelItem::ItemContact: tipText = "" @@ -941,7 +991,7 @@ void KMessView::showToolTip( const QPoint &point ) "" "" "" "" "
" - "%6%7" + "%6%7%8%9" "
"; @@ -951,13 +1001,14 @@ void KMessView::showToolTip( const QPoint &point ) // Add the contact's real name - the alias is not shown: // you can read it in the contact list, after all - tipText = tipText.arg( Qt::escape( itemData[ "trueFriendly" ].toString() ) ); + friendlyName = Qt::escape( itemData[ "trueFriendly" ].toString() ); + tipText = tipText.arg( friendlyName ); // Add status tipText = tipText.arg( MsnStatus::getName( (Status) itemData[ "status" ].toInt() ) ); // Add the personal message - personalMessage = itemData[ "personalMessage" ].toString(); + personalMessage = Qt::escape( itemData[ "personalMessage" ].toString() ); if( ! personalMessage.isEmpty() ) { tipText = tipText.arg( "" + personalMessage + "" ); @@ -1002,7 +1053,6 @@ void KMessView::showToolTip( const QPoint &point ) tipText = tipText.arg( i18nc( "Contact email in list tooltip", "Email: %1", Qt::escape( itemData[ "handle" ].toString() ) ) ); // Add client identifier - // NOTE If you want to add new client identifiers here's the right place clientName = itemData[ "clientName" ].toString(); if( ! clientName.isEmpty() ) { @@ -1012,6 +1062,19 @@ void KMessView::showToolTip( const QPoint &point ) { tipText = tipText.arg( "" ); } + + lastSeen = itemData[ "lastSeen" ].toDateTime(); + lastMessage = itemData[ "lastMessage" ].toDateTime(); + + lastSeenString = ( lastSeen.isNull() ) ? i18n( "Not seen yet" ) : lastSeen.toString(); + lastSeenString = ( ( (Status) itemData[ "status" ].toInt() ) != STATUS_OFFLINE ) + ? i18n( "Connected" ) : lastSeenString; + + lastMessageString = ( lastMessage.isNull() ) ? i18n( "No messages yet" ) : lastMessage.toString(); + + tipText = tipText.arg( "
" + i18nc( "Last time the contact was seen online", "Last seen: %1", lastSeenString ) ); + tipText = tipText.arg( "
" + i18nc( "Last time a message was received", "Last message: %1", lastMessageString ) ); + break; @@ -1022,7 +1085,17 @@ void KMessView::showToolTip( const QPoint &point ) tipText = tipText.arg( i18nc( "Group name in group tooltip", "Group %1", itemData[ "name" ].toString() ) ); // Add the number of contacts - tipText = tipText.arg( i18nc( "Contacts count in group tooltip", "%1 contacts", itemData[ "totalContacts" ].toString() ) ); + if( itemData[ "isSpecialGroup" ].toBool() ) + { + tipText = tipText.arg( i18nc( "Contacts count in special group tooltip", "%1 contacts", itemData[ "totalContacts" ].toString() ) ); + } + else + { + tipText = tipText.arg( i18nc( "Contacts counters in normal group tooltip", + "%1 contacts, %2 online", + itemData[ "totalContacts" ].toString(), + itemData[ "onlineContacts" ].toString() ) ); + } break; @@ -1109,9 +1182,9 @@ void KMessView::slotItemClicked( const QModelIndex &index, const bool accidental break; - // Request a chat with that contact if is online + // Request a chat with that contact case ContactListModelItem::ItemContact: - if( (Status)itemData[ "status" ].toInt() != STATUS_OFFLINE && ! accidental ) + if( ! accidental ) { // Tell the Chat Master we'd like to start a chat. emit requestChat( itemData[ "handle" ].toString() ); @@ -1143,7 +1216,7 @@ void KMessView::slotMoveGroupDown() } // Obtain the next listed group - Group *nextGroup = contactList->getGroupBySortPosition( group->getSortPosition() + 1 ); + Group *nextGroup = contactList->getGroupBySortPosition( group->getSortPosition() + 1, true ); if( ! nextGroup ) { return; @@ -1177,7 +1250,7 @@ void KMessView::slotMoveGroupUp() } // Obtain the previous listed group - Group *prevGroup = contactList->getGroupBySortPosition( group->getSortPosition() - 1 ); + Group *prevGroup = contactList->getGroupBySortPosition( group->getSortPosition() - 1, false ); if( ! prevGroup ) { return; @@ -1311,7 +1384,7 @@ void KMessView::slotForwardRemoveContact() // Get the data from the currently selected index ModelDataList itemData = getItemData(); - // The index was not empty + // The index was empty if( itemData.isEmpty() || itemData[ "type" ] != ContactListModelItem::ItemContact ) { return; @@ -1475,8 +1548,7 @@ void KMessView::slotPersonalMessageLostFocus( bool refreshOnly ) // Update message and save the changes currentAccount_->setPersonalMessage( message ); // Commit changes to disk, now - KConfigGroup group = KGlobal::config()->group(""); - currentAccount_->saveProperties( group ); + currentAccount_->saveProperties(); // Notify changes to the MSN server emit changePersonalMessage( message ); @@ -1491,6 +1563,75 @@ void KMessView::slotPersonalMessageLostFocus( bool refreshOnly ) +// Slot for searching contact +void KMessView::slotSearchContact( const QString& searchFor ) +{ + QString searchExpression; + const QString regexpMagic( "regexp:" ); + + // If the search string starts with "regexp:", allow searching with a regexp :) + if( searchFor.startsWith( regexpMagic ) ) + { + searchExpression = searchFor.mid( regexpMagic.length() ); + + // Colorize the search bar when using regexps, according to if they're valid or invalid + if( QRegExp( searchExpression ).isValid() ) + { + searchEdit_->setStyleSheet( "background-color: #bbffbb" ); + } + else + { + searchEdit_->setStyleSheet( "background-color: #ffbbbb" ); + } + } + else + { + searchExpression = QRegExp::escape( searchFor ); + searchEdit_->setStyleSheet( "" ); + } + + viewModel_->setFilterRegExp( searchExpression ); + + // Show or hide groups which do or do not contain results + + int rows = viewModel_->rowCount(); + for( int row = 0; row < rows; row++ ) + { + QModelIndex index( viewModel_->index( row, 0, QModelIndex() ) ); + + // Skip invalid items + if( ! index.isValid() ) + { + continue; + } + + // Access the index's data + ModelDataList itemData = getItemData( index ); + + // Skip items which have no children + if( itemData.isEmpty() || itemData[ "type" ].toInt() != ContactListModelItem::ItemGroup ) + { + continue; + } + + // Hide groups which don't contain results + if( ! searchFor.isEmpty() ) + { + bool isVisible = ( viewModel_->hasChildren( index ) ); + contactListView_->setRowHidden( row, QModelIndex(), ! isVisible ); + contactListView_->setExpanded( index, isVisible ); + } + // When the search terms are removed, enable back all groups + else + { + contactListView_->setRowHidden( row, QModelIndex(), false ); + contactListView_->setExpanded( index, itemData[ "isExpanded" ].toBool() ); + } + } +} + + + // Display the profile of the current contact void KMessView::slotShowContactProfile() { @@ -1503,11 +1644,7 @@ void KMessView::slotShowContactProfile() return; } - // Create a URL to the msn profile page, localized with our system's locale. - KUrl url = KUrl( "http://members.msn.com/default.msnw?mem=" + itemData[ "handle" ].toString() + "&mkt=" + KGlobal::locale()->country() ); - - // Launch the default html program for the given URL (and then auto-delete) - new KRun( url, window() ); + KMessShared::openProfile( itemData[ "handle" ].toString() ); } @@ -1534,6 +1671,10 @@ void KMessView::slotShowContactProperties() } ContactPropertiesDialog *dialog = new ContactPropertiesDialog( this ); + connect( dialog, SIGNAL( removeContactFromGroup(QString,QString) ), + this, SIGNAL( removeContactFromGroup(QString,QString) ) ); + connect( dialog, SIGNAL( addContactToGroup(QString,QString) ), + this, SIGNAL( copyContact(QString,QString) ) ); dialog->launch( contact ); delete dialog; } @@ -1544,10 +1685,10 @@ void KMessView::slotUpdateDisplayPicture() { QString image = ""; - if( currentAccount_->getShowImage() ) + if( currentAccount_->getShowPicture() ) { displayPicFrame_->show(); - image = currentAccount_->getImagePath(); + image = currentAccount_->getPicturePath(); currentAccountDisplayPic_->setPixmap( QPixmap( image ) ); } else // The user does not want to show a display pic, so just show an icon for their sign in status @@ -1557,47 +1698,6 @@ void KMessView::slotUpdateDisplayPicture() } -// Change whether the allowed,removed groups are displayed. -void KMessView::slotUpdateDisplaySettings( QModelIndex rootIndex ) -{ -#ifdef KMESSDEBUG_KMESSVIEW_ITEM_VISIBILITY - // Only show the debug message when the update is starting - if( ! rootIndex.isValid() ) - { - kDebug() << "Starting list items visibility update"; - } -#endif - - QAbstractItemModel *model = contactListView_->model(); - int rows = model->rowCount( rootIndex ); - - for( int row = 0; row < rows; row++ ) - { - QModelIndex index( model->index( row, 0, rootIndex ) ); - - if( ! index.isValid() ) - { -#ifdef KMESSDEBUG_KMESSVIEW_ITEM_VISIBILITY - kDebug() << "Skipping an invalid item at row" << row; -#endif - continue; - } - - // Access the index's data - ModelDataList itemData = getItemData( index ); - - contactListView_->setRowHidden( row, rootIndex, isItemHidden( itemData ) ); - - // If the item has children (groups) also update them - if( index.child( 0, 0 ).isValid() ) - { - slotUpdateDisplaySettings( index ); - contactListView_->setExpanded( index, itemData[ "isExpanded" ].toBool() ); - } - } -} - - // Change whether or not the email label is displayed based on account settings. void KMessView::slotUpdateEmailDisplay() @@ -1618,35 +1718,48 @@ void KMessView::slotUpdateEmailDisplay() -// Update a contact's visibility on the list -void KMessView::slotUpdateItem( const QModelIndex &topLeft,const QModelIndex &bottomRight ) +// Update the expanded status of the list groups +void KMessView::slotUpdateGroups() { - if( ! topLeft.isValid() || ! bottomRight.isValid() ) - { - return; - } - - QModelIndex index( topLeft ); - int itemsToUpdate = bottomRight.row() - topLeft.row(); + int rows = viewModel_->rowCount(); #ifdef KMESSDEBUG_KMESSVIEW_ITEM_VISIBILITY - kDebug() << "Updating list items: rows" << topLeft.row() << "-" << bottomRight.row() - << " of parent" << topLeft.parent(); + kDebug() << "Updating groups expanded status for" << rows << "rows"; #endif - do + for( int row = 0; row < rows; row++ ) { + QModelIndex index( viewModel_->index( row, 0, QModelIndex() ) ); + + // Skip invalid items + if( ! index.isValid() ) + { +#ifdef KMESSDEBUG_KMESSVIEW_ITEM_VISIBILITY + kDebug() << "Skipping an invalid item at row" << row << ":" << index; +#endif + continue; + } + // Access the index's data ModelDataList itemData = getItemData( index ); - contactListView_->setRowHidden( index.row(), index.parent(), isItemHidden( itemData ) ); + // Skip items which have no children + if( itemData.isEmpty() || itemData[ "type" ].toInt() != ContactListModelItem::ItemGroup ) + { +#ifdef KMESSDEBUG_KMESSVIEW_ITEM_VISIBILITY + kDebug() << "Skipping a non-group at row" << row << ":" << index; + kDebug() << "Skipped item's details:" << itemData; +#endif + continue; + } - index = contactListView_->indexBelow( index ); + // Set the expanded status + contactListView_->setExpanded( index, itemData[ "isExpanded" ].toBool() ); +#ifdef KMESSDEBUG_KMESSVIEW_ITEM_VISIBILITY + kDebug() << "Group" << itemData[ "name" ].toString() << "is" + << ( itemData[ "isExpanded" ].toBool() ? "expanded" : "contracted" ); +#endif } - while( index.isValid() && itemsToUpdate-- ); - - // Re-sort the list - contactListView_->sortByColumn( 1, Qt::AscendingOrder ); } @@ -1654,17 +1767,10 @@ void KMessView::slotUpdateItem( const QModelIndex &topLeft,const QModelIndex &bo // Update the email count. void KMessView::slotUpdateNoEmails() { - QString message; + QString message = i18np( "%1 new email message", "%1 new email messages", + currentAccount_->getNoEmails() ); // Update the label - if ( currentAccount_->getNoEmails() == 1 ) - { - message = i18n("You have 1 new e-mail in your inbox."); - } - else - { - message = i18n( "You have %1 new emails in your inbox.", currentAccount_->getNoEmails() ); - } emailLabel_->setText( message ); // Set the user's preferred email website. @@ -1677,29 +1783,29 @@ void KMessView::slotUpdateNoEmails() void KMessView::slotUpdateUserStatus() { QString friendlyName; - QString statusIdentifier; QString image; Status status; + FormattingMode mode = currentAccount_->getUseListFormatting() + ? STRING_FORMATTED : STRING_CLEANED; + // Avoid newlines, which cause problems to the layout. - friendlyName = currentAccount_->getFriendlyName().replace( "\n", " " ); + friendlyName = currentAccount_->getFriendlyName( mode ).replace( "\n", " " ); + + // Escape the friendly name if the mode is cleaned. + if( mode == STRING_CLEANED ) + { + friendlyName = Qt::escape( friendlyName ); + } status = currentAccount_->getStatus(); #ifdef KMESSDEBUG_KMESSVIEW_GENERAL kDebug() << "Updating user status to " << MsnStatus::getName( status ); #endif - // Update the onlineStatusLabel and pixmap - if( status == STATUS_ONLINE ) - { - statusIdentifier = QString(); - } - else - { - statusIdentifier = "(" + MsnStatus::getName( status ) + ")"; - } - - onlineStatusLabel_->setText( friendlyName + " " + statusIdentifier ); + // Update the widgets + statusButton_->setText( "(" + MsnStatus::getName( status ) + ")" ); + onlineStatusLabel_->setText( friendlyName ); onlineStatusPixmapLabel_->setPixmap( MsnStatus::getIcon( status ) ); } @@ -1711,7 +1817,13 @@ void KMessView::slotUpdateViewMode() // Make the groups visible, contacts are already added to the // online/offline groups to make this viewmode update // easier and faster. (no need to move the contacts) - slotUpdateDisplaySettings(); + slotUpdateGroups(); + + // If there's a search in progress, refresh the search view to avoid strange results + if( ! searchEdit_->text().isEmpty() ) + { + slotSearchContact( searchEdit_->text() ); + } } diff --git a/src/kmessview.h b/src/kmessview.h index 321cfc8..3d32b49 100644 --- a/src/kmessview.h +++ b/src/kmessview.h @@ -31,6 +31,7 @@ // Forward declarations class CurrentAccount; class Contact; +class ContactListModelFilter; class Group; class KMessView; @@ -54,10 +55,12 @@ class KMenu; * @author Mike K. Bennett * @ingroup Root */ -class KMessView : public QWidget, public Ui::KMessView +class KMessView : public QWidget, private Ui::KMessView { Q_OBJECT + friend class KMessTest; + public: // The constructor KMessView( QWidget *parent=0 ); @@ -67,6 +70,8 @@ class KMessView : public QWidget, public Ui::KMessView void changedSong( const QString &artist, const QString &album, const QString &track, bool playing ); // Initialize the class bool initialize( QAbstractItemModel *viewModel ); + // The "show search in contact list" menu item has been toggled. + void toggleShowSearchFrame(bool show); protected: // The personal status message received an event. @@ -81,15 +86,11 @@ class KMessView : public QWidget, public Ui::KMessView bool initContactPopup(); // Initialize the group popup bool initGroupPopup(); - // Check whether an item will be hidden in the list - bool isItemHidden( ModelDataList itemData ); private slots: // Private slots - // Called when a contact is now online - void slotContactOnline( Contact *contact, bool showNotify ); - // Called when a contact is now offline - void slotContactOffline( Contact *contact, bool showNotify ); + // Called when a contact is now online/offline + void slotContactChangedStatus( Contact *contact, bool showNotify ); // Show the context menu void showContextMenu( const QPoint &point ); // Show the contact & group tool tip @@ -98,6 +99,8 @@ class KMessView : public QWidget, public Ui::KMessView void slotEmailContact(); // The email label was clicked so open the user's preferred email url void slotEmailLabelClicked(); + // Personal Status changed + void slotForwardChangeStatus( QAction *action ); // A group was expanded or collapsed void slotGroupChanged( const QModelIndex &index ); // An item was clicked @@ -138,18 +141,18 @@ class KMessView : public QWidget, public Ui::KMessView void slotPersonalMessageLostFocus( bool refreshOnly = false ); // Generate the lists of actions for the "copy/move contact to group" menus void rebuildContactActions(); + // Slot for searching contact + void slotSearchContact( const QString& searchFor ); // Display the profile of the current contact void slotShowContactProfile(); // Display the properties of the current contact void slotShowContactProperties(); - // Update a contact's visibility on the list - void slotUpdateItem( const QModelIndex &topLeft,const QModelIndex &bottomRight ); // Update the users display pic void slotUpdateDisplayPicture(); - // Change whether the allowed,removed groups are displayed. - void slotUpdateDisplaySettings( QModelIndex rootIndex = QModelIndex() ); // Change whether the email label is displayed based on account settings. void slotUpdateEmailDisplay(); + // Update the expanded status of the list groups + void slotUpdateGroups(); // Update the email count. void slotUpdateNoEmails(); // Update the user's status. @@ -159,7 +162,6 @@ class KMessView : public QWidget, public Ui::KMessView // Copy some details of the contact to the clipboard void copyText(); - private: // Private attributes // KActions used in the contact popup menu KAction *addContact_; @@ -182,6 +184,7 @@ class KMessView : public QWidget, public Ui::KMessView KAction *popupCopyFriendlyName_; KAction *popupCopyPersonalMessage_; KAction *popupCopyHandle_; + KAction *popupCopyMusic_; QList groupCopyLinkActionsList_; KAction *popupCopyLink_; // The menu of actions possible to perform on a given contact @@ -207,6 +210,8 @@ class KMessView : public QWidget, public Ui::KMessView QPixmap backgroundPixmap_; // Selection model used to access selected items in the list QItemSelectionModel *selectionModel_; + // Quick ref to the tree view's filter model + ContactListModelFilter *viewModel_; @@ -234,6 +239,8 @@ class KMessView : public QWidget, public Ui::KMessView void blockContact(QString handle); // Request to change the personal message. void changePersonalMessage(QString personalMessage); + // Request to change the personal status + void changeStatus( int index ); // Request a private chat with a contact void requestChat( QString handle ); // Show the settings of the current account. diff --git a/src/kmessview.ui b/src/kmessview.ui index 0277cfe..53ece9f 100644 --- a/src/kmessview.ui +++ b/src/kmessview.ui @@ -5,8 +5,8 @@ 0 0 - 364 - 527 + 460 + 483 @@ -21,16 +21,23 @@ 100 - - - 5 + + + 2 - - 5 + + 2 - - + + + Qt::Horizontal + + + + + + @@ -44,7 +51,7 @@ QFrame::Plain - + 0 @@ -61,14 +68,14 @@ - 64 - 64 + 96 + 96 - 64 - 64 + 96 + 96 @@ -92,7 +99,7 @@ - + Qt::Vertical @@ -101,7 +108,7 @@ - 16 + 20 0 @@ -110,94 +117,119 @@ - - + + - - - - - - 9 - - - - PointingHandCursor - - - Qt::ClickFocus - - - false - - - Enter your personal message here - - - false - - - - - - 256 - - - false - - - false - - - true - - - 1 - - - true - - - - - - - - - - - - - - - 0 - 0 - - - - - 16 - 16 - - - - - 16 - 16 - - - - true - - - false - - - 1 - - - - + + + + 0 + 0 + + + + + 16 + 16 + + + + + 16 + 16 + + + + true + + + false + + + 1 + + + + + + + + 0 + 0 + + + + + + + Qt::RichText + + + + + + + + + + QToolButton::MenuButtonPopup + + + Qt::ToolButtonTextOnly + + + true + + + + + + + + + + + + 9 + + + + PointingHandCursor + + + Qt::ClickFocus + + + false + + + Enter your personal message here + + + false + + + + + + 256 + + + false + + + false + + + true + + + 1 + + + true + + @@ -257,6 +289,22 @@ + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 2 + 0 + + + + @@ -343,38 +391,91 @@ - + KSqueezedTextLabel - - - - Qt::Vertical - - - QSizePolicy::Minimum - - - - 50 - 0 - - - - + + + + Qt::Vertical + + + QSizePolicy::Preferred + + + + 20 + 0 + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 0 + + + 0 + + + + + + 16 + 16 + + + + + 16 + 32 + + + + + + + + + + + 50 + + + true + + + true + + + + + + QAbstractItemView::SelectRows + + QAbstractItemView::ScrollPerPixel + false @@ -417,22 +518,6 @@ - - emailLabel_ - leftClickedUrl() - KMessView - slotEmailLabelClicked() - - - 20 - 20 - - - 20 - 20 - - - personalMessageInput_ returnPressed() @@ -465,5 +550,21 @@ + + emailLabel_ + leftClickedUrl() + KMessView + slotEmailLabelClicked() + + + 20 + 20 + + + 20 + 20 + + + diff --git a/src/main.cpp b/src/main.cpp index 7e843e0..28c90d5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -25,12 +25,24 @@ #include +/** + * @brief Define to ignore translations + * + * This define is used for contributors names, which should never be translated. + * Without a known i18n call, the script will avoid to extract the names. + * This is all required since the contributors names are given as parameters to a method which requires + * KLocalizedString objects. + */ +#define IGNORE_I18N ki18n + + /** * @brief Main starting point of KMess. * @param argc Number of arguments entered at the command line. - * @param argc Array of command line arguments. + * @param argv Array of command line arguments. * @returns Exit code of the application. + * @ingroup Root */ int main(int argc, char *argv[]) { @@ -42,9 +54,10 @@ int main(int argc, char *argv[]) KMESS_VERSION, // app version from config-kmess.h ki18n("A MSN Messenger client for KDE"), // short description KAboutData::License_GPL, // license - ki18n("(c) 2002-2008, Mike K. Bennett\n" // copyright - "(c) 2005-2008, Diederik van der Boor\n" - "(c) 2007-2008, Valerio Pilo\n"), + IGNORE_I18N("(c) 2002-2008, Mike K. Bennett\n" // copyright + "(c) 2005-2008, Diederik van der Boor\n" + "(c) 2007-2008, Valerio Pilo\n" + "(c) 2008, Antonio Nastasi\n"), KLocalizedString(), "http://www.kmess.org/", // home page "bugs" "@" "kmess" "." "org" // address for bugs @@ -54,82 +67,93 @@ int main(int argc, char *argv[]) // Tab 2: Authors // TODO: escape the special characters to some Unicode format. (how?) - aboutData.addAuthor( ki18n("Mike K. Bennett"), ki18n("Developer and project founder"), "mkb137" "@" "users.sourceforge" "." "net" ); - aboutData.addAuthor( ki18n("Michael Curtis"), ki18n("Developer"), "mdcurtis" "@" "users.sourceforge" "." "net" ); - aboutData.addAuthor( ki18n("Jan Tƶnjes"), ki18n("Project support"), "jan" "@" "kmess" "." "org" ); - aboutData.addAuthor( ki18n("Diederik van der Boor"), ki18n("Current developer"), "diederik" "@" "kmess" "." "org" ); - aboutData.addAuthor( ki18n("Richard Conway"), ki18n("Current developer"), "richard" "@" "kmess" "." "org" ); - aboutData.addAuthor( ki18n("Valerio Pilo"), ki18n("Current developer"), "amroth" "@" "kmess" "." "org" ); + aboutData.addAuthor( IGNORE_I18N("Mike K. Bennett"), ki18n("Developer and project founder"), "mkb137" "@" "users.sourceforge" "." "net" ); + aboutData.addAuthor( IGNORE_I18N("Michael Curtis"), ki18n("Developer"), "mdcurtis" "@" "users.sourceforge" "." "net" ); + aboutData.addAuthor( IGNORE_I18N("Jan Tƶnjes"), ki18n("Project support"), "jan" "@" "kmess" "." "org" ); + aboutData.addAuthor( IGNORE_I18N("Diederik van der Boor"), ki18n("Current developer"), "diederik" "@" "kmess" "." "org" ); + aboutData.addAuthor( IGNORE_I18N("Valerio Pilo"), ki18n("Current developer"), "amroth" "@" "kmess" "." "org" ); + aboutData.addAuthor( IGNORE_I18N("Antonio Nastasi"), ki18n("Current developer"), "sifcenter" "@" "gmail" "." "com" ); // Tab 3: Credits - aboutData.addCredit( ki18n("Jan Tƶnjes"), ki18n("German translation, testing, documentation, web master, project management, etc..."), "jan" "." "toenjes" "@" "web" "." "de"); - aboutData.addCredit( ki18n("Dane Harnett"), ki18n("Web design"), "dynamitedane" "@" "hotmail" "." "com"); - aboutData.addCredit( ki18n("David Vignoni"), ki18n("The main and yellow/blue/violet emoticon sets and Italian translation"), "dvgn" "@" "libero" "." "it"); - aboutData.addCredit( ki18n("Julien Joubin"), ki18n("Cartoon emoticons"), "jujubinche" "@" "netscape" "." "net"); - aboutData.addCredit( ki18n("Christian Müller"), ki18n("Default sound theme"), "cmue81" "@" "gmx" "." "de"); - aboutData.addCredit( ki18n("Michael Anderton"), ki18n("KMess icon in Oxygen style"), "mike" "." "s" "." "anderton" "@" "gmail" "." "com"); + aboutData.addCredit( IGNORE_I18N("Jan Tƶnjes"), ki18n("German translation, testing, documentation, web master, project management, etc..."), "jan" "." "toenjes" "@" "web" "." "de"); + aboutData.addCredit( IGNORE_I18N("Dane Harnett"), ki18n("Web design"), "dynamitedane" "@" "hotmail" "." "com"); + aboutData.addCredit( IGNORE_I18N("David Vignoni"), ki18n("The main and yellow/blue/violet emoticon sets and Italian translation"), "dvgn" "@" "libero" "." "it"); + aboutData.addCredit( IGNORE_I18N("Julien Joubin"), ki18n("Cartoon emoticons"), "jujubinche" "@" "netscape" "." "net"); + aboutData.addCredit( IGNORE_I18N("Christian Müller"), ki18n("Default sound theme"), "cmue81" "@" "gmx" "." "de"); + aboutData.addCredit( IGNORE_I18N("Michael Anderton"), ki18n("KMess icon in Oxygen style"), "mike" "." "s" "." "anderton" "@" "gmail" "." "com"); // Translations // Sorted by Alphabetic order of language. - aboutData.addCredit( ki18n("Mohamed Aser"), ki18n("Arabic translation, internationalization of file saving fix" "." ""), "mohasr" "@" "link" "." "net"); - aboutData.addCredit( ki18n("Youssef Chahibi"), ki18n("More Arabic translation"), "chahibi" "@" "gmail" "." "com"); - aboutData.addCredit( ki18n("Mauricio Rother"), ki18n("Brazilian Portuguese translation"), "mauricio" "@" "digicomm" "." "com.br"); - aboutData.addCredit( ki18n("Jaume Cornadó"), ki18n("Catalan translation"), "jaumec" "@" "lleida" "." "net"); + aboutData.addCredit( IGNORE_I18N("Mohamed Aser"), ki18n("Arabic translation, internationalization of file saving fix" "." ""), "mohasr" "@" "link" "." "net"); + aboutData.addCredit( IGNORE_I18N("Youssef Chahibi"), ki18n("More Arabic translation"), "chahibi" "@" "gmail" "." "com"); + aboutData.addCredit( IGNORE_I18N("Mauricio Rother"), ki18n("Brazilian Portuguese translation"), "mauricio" "@" "digicomm" "." "com.br"); + aboutData.addCredit( IGNORE_I18N("Jaume Cornadó"), ki18n("Catalan translation"), "jaumec" "@" "lleida" "." "net"); - aboutData.addCredit( ki18n("Lin Haoxiang"), ki18n("Simplified Chinese translation, file send bug fix, proxy connect code"), "linhaoxiang" "@" "hotmail" "." "com"); - aboutData.addCredit( ki18n("Liu Sizhuang"), ki18n("More Simplified Chinese translation"), "chinatslsz" "@" "hotmail.com"); - aboutData.addCredit( ki18n("Yen-chou Chen"), ki18n("Traditional Chinese translation"), "yenchou" "." "mse90" "@" "nctu" "." "edu" "." "tw"); + aboutData.addCredit( IGNORE_I18N("Lin Haoxiang"), ki18n("Simplified Chinese translation, file send bug fix, proxy connect code"), "linhaoxiang" "@" "hotmail" "." "com"); + aboutData.addCredit( IGNORE_I18N("Liu Sizhuang"), ki18n("More Simplified Chinese translation"), "chinatslsz" "@" "hotmail.com"); + aboutData.addCredit( IGNORE_I18N("Yen-chou Chen"), ki18n("Traditional Chinese translation"), "yenchou" "." "mse90" "@" "nctu" "." "edu" "." "tw"); - aboutData.addCredit( ki18n("Lars Sommer"), ki18n("Danish translation"), "admin" "@" "lasg" "." "dk"); - aboutData.addCredit( ki18n("Pascal d'Hermilly"), ki18n("More Danish translation"), "pascal" "@" "tipisoft" "." "dk"); - aboutData.addCredit( ki18n("Arend van Beelen Jr."), ki18n("Dutch translation"), "arend" "@" "auton" "." "nl"); - aboutData.addCredit( ki18n("Jaap Woldringh"), ki18n("More Dutch translation"), "jjh" "." "woldringh" "@" "planet" "." "nl"); + aboutData.addCredit( IGNORE_I18N("Lars Sommer"), ki18n("Danish translation"), "admin" "@" "lasg" "." "dk"); + aboutData.addCredit( IGNORE_I18N("Pascal d'Hermilly"), ki18n("More Danish translation"), "pascal" "@" "tipisoft" "." "dk"); + aboutData.addCredit( IGNORE_I18N("Arend van Beelen Jr."), ki18n("Dutch translation"), "arend" "@" "auton" "." "nl"); + aboutData.addCredit( IGNORE_I18N("Diederik van der Boor"), ki18n("More Dutch translation"), "diederik" "@" "kmess" "." "org"); + aboutData.addCredit( IGNORE_I18N("Jaap Woldringh"), ki18n("More Dutch translation"), "jjh" "." "woldringh" "@" "planet" "." "nl"); - aboutData.addCredit( ki18n("Jyri Toomessoo"), ki18n("Estonian translation"), "nuubik" "@" "hotmail" "." "com"); - aboutData.addCredit( ki18n("Markus Vuori"), ki18n("Finnish translation"), "markus" "@" "vuoret" "." "net"); - aboutData.addCredit( ki18n("Joonas Niilola"), ki18n("More Finnish translation"), "juippis" "@" "roskakori" "." "org"); - aboutData.addCredit( ki18n("Jussi Timperi"), ki18n("More Finnish translation"), "jussi.timperi" "@" "gmail" "." "com"); + aboutData.addCredit( IGNORE_I18N("Jyri Toomessoo"), ki18n("Estonian translation"), "nuubik" "@" "hotmail" "." "com"); + aboutData.addCredit( IGNORE_I18N("Markus Vuori"), ki18n("Finnish translation"), "markus" "@" "vuoret" "." "net"); + aboutData.addCredit( IGNORE_I18N("Joonas Niilola"), ki18n("More Finnish translation"), "juippis" "@" "roskakori" "." "org"); + aboutData.addCredit( IGNORE_I18N("Jussi Timperi"), ki18n("More Finnish translation"), "jussi.timperi" "@" "gmail" "." "com"); - aboutData.addCredit( ki18n("Choplair"), ki18n("French translation"), "pachilor" "@" "yahoo" "." "co" "." "jp"); - aboutData.addCredit( ki18n("Vincent Fretin"), ki18n("More French translation, MSN6 emoticon definitions"), "fretinvincent" "@" "hotmail" "." "com"); - aboutData.addCredit( ki18n("Andrea Blankenstijn"), ki18n("More French translation"), "darkan9el" "@" "gmail" "." "com" ); // or "andrea" "@" "zenephiris" "." "ch" + aboutData.addCredit( IGNORE_I18N("Choplair"), ki18n("French translation"), "pachilor" "@" "yahoo" "." "co" "." "jp"); + aboutData.addCredit( IGNORE_I18N("Vincent Fretin"), ki18n("More French translation, MSN6 emoticon definitions"), "fretinvincent" "@" "hotmail" "." "com"); + aboutData.addCredit( IGNORE_I18N("Andrea Blankenstijn"), ki18n("More French translation"), "darkan9el" "@" "gmail" "." "com" ); // or "andrea" "@" "zenephiris" "." "ch" - aboutData.addCredit( ki18n("PĆ”der RezsƵ"), ki18n("Hungarian translation"), "rezso" "@" "rezso" "." "net"); - aboutData.addCredit( ki18n("Valerio Pilo"), ki18n("More Italian translation"), "amroth" "@" "coldshock" "." "net"); - aboutData.addCredit( ki18n("Vincenzo Reale"), ki18n("More Italian translation"), "smart2128" "@" "baslug" "." "org"); - aboutData.addCredit( ki18n("Park Dong Cheon"), ki18n("Korean translation"), "pdc" "@" "kaist" "." "ac.kr"); - aboutData.addCredit( ki18n("Ƙyvind SƦther"), ki18n("Norsk BokmĆ„l translation"), "oyvind" "@" "sather" "." "tk"); + aboutData.addCredit( IGNORE_I18N("PĆ”der RezsƵ"), ki18n("Hungarian translation"), "rezso" "@" "rezso" "." "net"); + aboutData.addCredit( IGNORE_I18N("Valerio Pilo"), ki18n("More Italian translation"), "amroth" "@" "coldshock" "." "net"); + aboutData.addCredit( IGNORE_I18N("Vincenzo Reale"), ki18n("More Italian translation"), "smart2128" "@" "baslug" "." "org"); + aboutData.addCredit( IGNORE_I18N("Park Dong Cheon"), ki18n("Korean translation"), "pdc" "@" "kaist" "." "ac.kr"); + aboutData.addCredit( IGNORE_I18N("Ƙyvind SƦther"), ki18n("Norsk BokmĆ„l translation"), "oyvind" "@" "sather" "." "tk"); - aboutData.addCredit( ki18n("Matjaž kaÅ”e"), ki18n("Slovenian translation"), "matjaz" "." "kase" "@" "g-kabel" "." "si"); - aboutData.addCredit( ki18n("Johanna Gersch"), ki18n("Spanish translation")); - aboutData.addCredit( ki18n("J.C.A. Javi"), ki18n("More Spanish translation"), "yovoya30ks" "@" "hotmail" "." "com"); - aboutData.addCredit( ki18n("Alejandro Araiza Alvarado"), ki18n("More Spanish translation"), "mebrelith" "@" "gmail" "." "com"); - aboutData.addCredit( ki18n("Jaume CorbĆ­"), ki18n("More Spanish translation"), "jaume4" "@" "gmail" "." "com"); - aboutData.addCredit( ki18n("Christian Kaiser"), ki18n("More Spanish translation"), "k39" "@" "users" "." "sourceforge" "." "net"); - aboutData.addCredit( ki18n("Christian Lundgren"), ki18n("Swedish translation"), "zeflunk" "@" "gmail" "." "com"); + aboutData.addCredit( IGNORE_I18N("Matjaž kaÅ”e"), ki18n("Slovenian translation"), "matjaz" "." "kase" "@" "g-kabel" "." "si"); + aboutData.addCredit( IGNORE_I18N("Johanna Gersch"), ki18n("Spanish translation")); + aboutData.addCredit( IGNORE_I18N("J.C.A. Javi"), ki18n("More Spanish translation"), "yovoya30ks" "@" "hotmail" "." "com"); + aboutData.addCredit( IGNORE_I18N("Alejandro Araiza Alvarado"), ki18n("More Spanish translation"), "mebrelith" "@" "gmail" "." "com"); + aboutData.addCredit( IGNORE_I18N("Jaume CorbĆ­"), ki18n("More Spanish translation"), "jaume4" "@" "gmail" "." "com"); + aboutData.addCredit( IGNORE_I18N("Christian Kaiser"), ki18n("More Spanish translation"), "k39" "@" "users" "." "sourceforge" "." "net"); + aboutData.addCredit( IGNORE_I18N("Christian Lundgren"), ki18n("Swedish translation"), "zeflunk" "@" "gmail" "." "com"); - aboutData.addCredit( ki18n("Rachan Hongpairote"), ki18n("Thai translation"), "rachanh" "@" "yahoo" "." "com"); - aboutData.addCredit( ki18n("Gorkem Cetin"), ki18n("Turkish translation"), "gorkem" "@" "gelecek" "." "com" "." "tr"); - aboutData.addCredit( ki18n("Barbaros Ulutas"), ki18n("More Turkish translation"), "ulutas" "@" "gmail" "." "com"); - aboutData.addCredit( ki18n("Uğur Ƈetin"), ki18n("More Turkish translation"), "ugur" "." "jnmbk" "@" "gmail" "." "com"); + aboutData.addCredit( IGNORE_I18N("Rachan Hongpairote"), ki18n("Thai translation"), "rachanh" "@" "yahoo" "." "com"); + aboutData.addCredit( IGNORE_I18N("Gorkem Cetin"), ki18n("Turkish translation"), "gorkem" "@" "gelecek" "." "com" "." "tr"); + aboutData.addCredit( IGNORE_I18N("Barbaros Ulutas"), ki18n("More Turkish translation"), "ulutas" "@" "gmail" "." "com"); + aboutData.addCredit( IGNORE_I18N("Uğur Ƈetin"), ki18n("More Turkish translation"), "ugur" "." "jnmbk" "@" "gmail" "." "com"); // Other contributors - aboutData.addCredit( ki18n("Guido Solinas"), ki18n("Pictures in contact list code, contact client info, chat font zoom"), "whereismwhite" "@" "gmail" "." "com"); - aboutData.addCredit( ki18n("Liu Sizhuang"), ki18n("P4-Context field support"), "chinatslsz" "@" "hotmail.com"); - aboutData.addCredit( ki18n("Scott Morgan"), ki18n("Xinerama fixes"), "blumf" "@" "blumf" "." "freeserve" "." "co" "." "uk"); - aboutData.addCredit( ki18n("Laurence Anderson"), ki18n("Original file receive code"), "l.d" "." "anderson" "@" "warwick" ".ac.uk"); - aboutData.addCredit( ki18n("Choe Hwanjin"), ki18n("Various internationalization fixes" "." ""), "hjchoe" "@" "hancom" "." "com"); - aboutData.addCredit( ki18n("Damien Sandras"), ki18n("GnomeMeeting developer"), "dsandras" "@" "seconix" "." "com"); - aboutData.addCredit( ki18n("Tobias Tƶnjes"), ki18n("Guy with a bag over his head"), ""); + aboutData.addCredit( IGNORE_I18N("Richard Conway"), ki18n("MSNP12 support, various patches."), "richardconway" "@" "users" "." "sourceforge.net"); + aboutData.addCredit( IGNORE_I18N("Guido Solinas"), ki18n("Pictures in contact list code, contact client info, chat font zoom"), "whereismwhite" "@" "gmail" "." "com"); + aboutData.addCredit( IGNORE_I18N("Pedro Ferreira"), ki18n("File transfer thumbnails"), "pedro." "ferreira" "@" "fe" "." "up.pt"); + aboutData.addCredit( IGNORE_I18N("Liu Sizhuang"), ki18n("P4-Context field support"), "chinatslsz" "@" "hotmail.com"); + aboutData.addCredit( IGNORE_I18N("Scott Morgan"), ki18n("Xinerama fixes"), "blumf" "@" "blumf" "." "freeserve" "." "co" "." "uk"); + aboutData.addCredit( IGNORE_I18N("Laurence Anderson"), ki18n("Original file receive code"), "l.d" "." "anderson" "@" "warwick" ".ac.uk"); + aboutData.addCredit( IGNORE_I18N("Ruben Vandamme"), ki18n("Basic DBus support,tab closing message,menu hiding shortcut,toolbars lock"), "vandammeru" "@" "gmail" "." "com"); + aboutData.addCredit( IGNORE_I18N("Matteo Nardi"), ki18n("KWallet support"), "91.matteo" "@" "gmail" "." "com"); + aboutData.addCredit( IGNORE_I18N("Adam Goossens"), ki18n("Notifications blocking option,winks disabling option,last message date feature"), "fontknocker" "@" "gmail" "." "com"); + // Lin Haoxiang (file send bug fix, proxy connect code) already above + // Mohamed Aser (internationalization of file saving fix) already above + aboutData.addCredit( IGNORE_I18N("Alexandre Peixoto Ferreira"), ki18n("Various internationalization fixes"), "alexandref" "@" "o2" ".net" ".br"); + aboutData.addCredit( IGNORE_I18N("Choe Hwanjin"), ki18n("Various internationalization fixes" "." ""), "hjchoe" "@" "hancom" "." "com"); + // Vincent Fretin (MSN6 emoticon definitions) already above + aboutData.addCredit( IGNORE_I18N("Damien Sandras"), ki18n("GnomeMeeting developer"), "dsandras" "@" "seconix" "." "com"); + aboutData.addCredit( IGNORE_I18N("Tobias Tƶnjes"), ki18n("Guy with a bag over his head"), ""); // Other apps - aboutData.addCredit( ki18n("KMerlin (kmerlin.olsd.de)"), ki18n("Inspiration and assorted code")); - aboutData.addCredit( ki18n("Kopete (kopete.kde.org)"), ki18n("Old popup balloons code, initial p2p code, msn challenge handler")); - aboutData.addCredit( ki18n("KScreensaver"), ki18n("Idle timer code")); - aboutData.addCredit( ki18n("BasKet"), ki18n("Close-to-tray icon screenshot code")); + aboutData.addCredit( IGNORE_I18N("KMerlin (kmerlin.olsd.de)"), ki18n("Inspiration and assorted code")); + aboutData.addCredit( IGNORE_I18N("Kopete (kopete.kde.org)"), ki18n("Old popup balloons code, initial p2p code, msn challenge handler")); + aboutData.addCredit( IGNORE_I18N("KScreensaver"), ki18n("Idle timer code")); + aboutData.addCredit( IGNORE_I18N("BasKet"), ki18n("Close-to-tray icon screenshot code")); + aboutData.addCredit( IGNORE_I18N("Amarok"), ki18n("Custom crash handler implementation")); // Nice community detail (very subtle at the bottom..) - aboutData.addCredit( ki18n("Your name here?"), ki18n("You are welcome to sent bugfixes and patches to the KMess help forums!\nIf you feel your name is missing here, please contact us too!"), "you@kmess.org"); + aboutData.addCredit( ki18n("Your name here?"), ki18n("You are welcome to send bugfixes and patches to the KMess help forums!\nIf you feel your name is missing here, please contact us too!"), "you@kmess.org"); // Add the translation names from the .po file: aboutData.setTranslator( ki18nc("NAME OF TRANSLATORS", "Your names"), @@ -143,7 +167,7 @@ int main(int argc, char *argv[]) // For the developer build, // make sure we can run tests fast. -#ifdef KMESSTEST +#ifdef KMESSTEST options.add( "runtest ", ki18n("Run a debug test (developer build only)") ); #endif diff --git a/src/network/applications/application.cpp b/src/network/applications/application.cpp index 0c30c44..259d8f8 100644 --- a/src/network/applications/application.cpp +++ b/src/network/applications/application.cpp @@ -32,13 +32,13 @@ */ Application::Application(const QString &contactHandle) : QObject(), - chatWindow_(0), + chat_(0), closing_(false), contactHandle_(contactHandle), doDelayDeletion_(false), mode_(APP_MODE_NORMAL), type_(ChatMessage::TYPE_APPLICATION), - userAccepted_(false), + userAnswered_(false), userStartedApp_(true), waitingForUser_(false) { @@ -81,6 +81,8 @@ void Application::contactAborted(const QString &message) kWarning() << "Attempted to close application twice (contact=" << contactHandle_ << ")"; } + // Remove the accept links + modifyOfferMessage(); if( message.isEmpty() ) { @@ -115,6 +117,9 @@ void Application::contactRejected(const QString &message) kWarning() << "Attempted to close application twice (contact=" << contactHandle_ << ")"; } + // Remove the accept links + modifyOfferMessage(); + if( message.isEmpty() ) { showEventMessage( getContactRejectMessage(), ChatMessage::CONTENT_APP_CANCELED, true ); @@ -206,14 +211,26 @@ void Application::delayDeletion( bool doDelay ) */ void Application::endApplication() { -#ifdef KMESSDEBUG_APPLICATION - kDebug() << "Requesting removal"; -#endif closing_ = true; // Signal that this instance should be deleted, if there are no ongoing tasks that would break if the class gets deleted. - if( ! doDelayDeletion_ ) + if( doDelayDeletion_ ) + { + // This happens when a KFileDialog or messagebox is dislayed. A sub event loop is started + // which could cause a delete signal to get through. In effect, KMess will crash because once + // the KFileDialog returns the code runs in that deleted part. +#ifdef KMESSDEBUG_APPLICATION + kDebug() << "delayDeletion is in effect, waiting for the derived class to call endApplication() again."; +#endif + } + else + { +#ifdef KMESSDEBUG_APPLICATION + kDebug() << "Requesting removal"; +#endif + emit deleteMe(this); + } } @@ -244,14 +261,14 @@ QString Application::generateCookie() const /** - * @brief Return the chat window the application was originally created for (may be null). + * @brief Return the chat the application was originally created for (may be null). * * This pointer is used by ChatMaster to display a MsnObject (display picture, wink or emoticon) - * in the correct chat window. + * in the correct chat. */ -ChatWindow * Application::getChatWindow() const +Chat* Application::getChat() const { - return chatWindow_; + return chat_; } @@ -392,16 +409,18 @@ void Application::gotCommand(QString command) waitingForUser_ = false; + if( userAnswered_ ) + { +#ifdef KMESSDEBUG_APPLICATION + kDebug() << "User has already answered this application before, ignoring."; +#endif + return; + } + + userAnswered_ = true; + if ( command == "accept" ) { - if(userAccepted_) - { -#ifdef KMESSDEBUG_APPLICATION - kDebug() << "User already accepted before, ignoring."; -#endif - return; - } - userAccepted_ = true; contactStarted2_UserAccepts(); } else if ( command == "cancel" ) @@ -414,7 +433,7 @@ void Application::gotCommand(QString command) } else { - kDebug() << "received unhandled command " << command << "."; + kWarning() << "Received unhandled command " << command << "."; } } @@ -474,6 +493,25 @@ bool Application::isWaitingForUser() const +/** + * @brief Replace an application's accept/reject/cancel links with another text + * + * Removes from the chat the confirmation links for the application, and replaces + * them with some other informative message. + * + * @param newMessage The new displayed message + */ +void Application::modifyOfferMessage( const QString& newMessage ) +{ +#ifdef KMESSDEBUG_APPLICATION + kDebug() << "Changing offer links in chat"; +#endif + + emit updateApplicationMessage( getCookie(), newMessage ); +} + + + /** * @brief Let the user accept or reject the application. * @@ -486,24 +524,27 @@ bool Application::isWaitingForUser() const void Application::offerAcceptOrReject(const QString& appHtml) { #ifdef KMESSDEBUG_APPLICATION - kDebug() << "Displaying accept/cancel message in ChatWindow"; + kDebug() << "Displaying accept/reject message in chat"; #endif QString html; + const QString cookie( getCookie() ); + const QString handle( getContactHandle() ); // Create the message, starting with the application's particulars html += ""; html += appHtml; - html += " "; - html += i18n( "Do you want to accept or cancel?", - "\"kmess://application/accept/" + getContactHandle() + "?" + getCookie() + "\"", - "\"kmess://application/reject/" + getContactHandle() + "?" + getCookie() + "\"" - ); + html += ""; + html += "
"; + html += ""; + html += i18n( "Do you want to accept or cancel?", + "kmess://application/accept/" + handle + "?" + cookie, + "kmess://application/reject/" + handle + "?" + cookie ); html += ""; // Send the message to the chat window. waitingForUser_ = true; - userAccepted_ = false; + userAnswered_ = false; showEventMessage( html, ChatMessage::CONTENT_APP_INVITE, true ); #ifdef KMESSDEBUG_APPLICATION @@ -525,16 +566,21 @@ void Application::offerAcceptOrReject(const QString& appHtml) void Application::offerCancel(const QString& appHtml) { #ifdef KMESSDEBUG_APPLICATION - kDebug() << "Displaying cancel link in ChatWindow"; + kDebug() << "Displaying cancel link in chat"; #endif QString html; + const QString cookie( getCookie() ); // Create the message, starting with the application's particulars - html += appHtml + " "; - html += i18n( "Click to cancel.", - "\"kmess://application/cancel/" + getContactHandle() + "?" + getCookie() + "\"" - ); + html += ""; + html += appHtml; + html += ""; + html += "
"; + html += ""; + html += i18n( "Click to cancel.", + "kmess://application/cancel/" + getContactHandle() + "?" + cookie ); + html += ""; // Send the message to the chat window. showEventMessage( html, ChatMessage::CONTENT_APP_INVITE, false ); @@ -567,14 +613,14 @@ void Application::setApplicationType( ChatMessage::MessageType type ) /** - * @brief Set the chat window the application was originally created for. + * @brief Set the chat the application was originally created for. * * This pointer is used by ChatMaster to display a MsnObject (display picture, wink or emoticon) - * in the correct chat window. + * in the correct chat. */ -void Application::setChatWindow( ChatWindow *chatWindow ) +void Application::setChat( Chat *chat ) { - chatWindow_ = chatWindow; + chat_ = chat; } @@ -619,7 +665,9 @@ void Application::setMode(ApplicationMode mode) * It emits the appMessage() signal * The chat themes display these messages as "notification" message. * - * @param message The message to display. + * @param message The message to display. + * @param contents A brief indication of the contents. This is used for notifications. + * @param isIncoming Whether the message is incoming (true), or outgoing (false). */ void Application::showEventMessage( const QString &message, const ChatMessage::ContentsClass contents, bool isIncoming ) { @@ -635,7 +683,9 @@ void Application::showEventMessage( const QString &message, const ChatMessage::C * - invitation type not supported. * - the contact is offline. * - * @param message The message to display. + * @param message The message to display. + * @param contents A brief indication of the contents. This is used for notifications. + * @param isIncoming Whether the message is incoming (true), or outgoing (false). */ void Application::showSystemMessage( const QString &message, const ChatMessage::ContentsClass contents, bool isIncoming ) { @@ -687,7 +737,7 @@ void Application::showTransferMessage(const QString &message) * * @param bytesTransferred The number of bytes transferred. */ -void Application::showTransferProgress(const uint bytesTransferred) +void Application::showTransferProgress( const ulong bytesTransferred ) { #ifdef KMESSDEBUG_APPLICATION kDebug() << "Transferred " << bytesTransferred << " bytes."; @@ -752,6 +802,9 @@ void Application::userAborted() } closing_ = true; + + // Remove the accept links + modifyOfferMessage(); showEventMessage( getUserAbortMessage(), ChatMessage::CONTENT_APP_CANCELED, false ); sendCancelMessage( CANCEL_ABORT ); // The application should terminate automatically.. diff --git a/src/network/applications/application.h b/src/network/applications/application.h index 35ab377..2400797 100644 --- a/src/network/applications/application.h +++ b/src/network/applications/application.h @@ -24,8 +24,8 @@ // Forward declarations +class Chat; class MimeMessage; -class ChatWindow; @@ -71,9 +71,9 @@ class Application : public QObject // The destructor virtual ~Application(); // The contact cancelled the session - virtual void contactAborted(const QString &message = 0); - // Return the chat window the application was originally created for (may be null). - ChatWindow * getChatWindow() const; + virtual void contactAborted(const QString &message = QString::null); + // Return the chat the application was originally created for (may be null). + Chat *getChat() const; // Return the handle of the other contact const QString& getContactHandle() const; // Return the application's identifying cookie @@ -86,8 +86,8 @@ class Application : public QObject bool isClosing() const; // Returns whether the application can operate in a multi-chat session, or requires a private chat. virtual bool isPrivateChatRequired() const; - // Set the chat window the application was originally created for. - void setChatWindow( ChatWindow *chatWindow ); + // Set the chat the application was originally created for. + void setChat( Chat *chat ); // Set the current mode of the application void setMode(ApplicationMode mode); // Start the application @@ -140,6 +140,8 @@ class Application : public QObject bool isUserStartedApp() const; // Return true if the user should press accept/cancel soon. bool isWaitingForUser() const; + // Replace an application's accept/reject/cancel links with another text + void modifyOfferMessage( const QString& newMessage = QString() ); // Let the user accept or reject the application void offerAcceptOrReject(const QString& appHtml); // Let the user cancel the application @@ -167,7 +169,7 @@ class Application : public QObject // Show a message to inform about a transfer event (shown in the transfer dialog, e.g. connecting to host) virtual void showTransferMessage(const QString &message); // Show the progress made during a transfer. - virtual void showTransferProgress(const uint bytesTransferred); + virtual void showTransferProgress( const ulong bytesTransferred ); // Set the cookie from an INVITE command void startByInvite(const QString &invitationCookie); // The user rejected the invitation @@ -180,8 +182,8 @@ class Application : public QObject virtual void userStarted3_UserPrepares(); private: // Private attributes - // The chat window the application was originally initiatialized in. - ChatWindow *chatWindow_; + // The chat the application was originally initiatialized in. + Chat *chat_; // The application is closing bool closing_; // The applications identifying cookie @@ -194,8 +196,8 @@ class Application : public QObject ApplicationMode mode_; // Current application type ChatMessage::MessageType type_; - // Whether or not the user accepted the invitation already - bool userAccepted_; + // Whether or not the user answered the invitation already + bool userAnswered_; // Whether or not the user started the app bool userStartedApp_; // True if waiting for the user to accept @@ -204,9 +206,14 @@ class Application : public QObject signals: // Signals /** * Signal that this application likes to display a message - * @param html The HTML message to display. + * @param message The message to display. */ void applicationMessage( const ChatMessage &message ); + /** + * Signal that this application needs to update its accept/cancel links with another text + * @param newMessage The new message to display. + */ + void updateApplicationMessage( const QString &messageId, const QString &newMessage ); /** * Signal that this application's activity has ended and that it should be deleted. diff --git a/src/network/applications/applicationlist.cpp b/src/network/applications/applicationlist.cpp index 73fbf99..30c30b3 100644 --- a/src/network/applications/applicationlist.cpp +++ b/src/network/applications/applicationlist.cpp @@ -85,34 +85,35 @@ ApplicationList::ApplicationList(const QString &contactHandle) ApplicationList::~ApplicationList() { #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL - kDebug(); + kDebug() << "Starting removal. [handle=" << contactHandle_ << "]"; #endif // See if there are remaining MIME applications if( ! mimeApplications_.isEmpty() ) { kWarning() << "still have " << mimeApplications_.count() << - " active MimeApplication objects for " << contactHandle_ << "!" << endl; + " active MimeApplication objects for " << contactHandle_ << "!"; + + // Remove all mime applications + qDeleteAll( mimeApplications_ ); + mimeApplications_.clear(); } // See if there are remaining P2P applications if( ! p2pApplications_.isEmpty() ) { kWarning() << "still have " << p2pApplications_.count() << - " active P2PApplication objects for " << contactHandle_ << "!" << endl; + " active P2PApplication objects for " << contactHandle_ << "!"; + + // Remove all p2p applications + qDeleteAll( p2pApplications_ ); + p2pApplications_.clear(); } - // Remove all mime applications - qDeleteAll( mimeApplications_ ); - mimeApplications_.clear(); - - // Remove all p2p applications - qDeleteAll( p2pApplications_ ); - p2pApplications_.clear(); - // Delete the connections directConnection_ = 0; // deleted by connection pool delete directConnectionPool_; + directConnectionPool_ = 0; #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "DESTROYED. [handle=" << contactHandle_ << "]"; @@ -315,7 +316,7 @@ void ApplicationList::addApplication(P2PApplication *application) * @return Whether the socket could be created or not. * Returns false if the socket could not be created. */ -bool ApplicationList::addConnection(const QString &ipAddress, const int port) +bool ApplicationList::addConnection(const QString &ipAddress, const quint16 port) { // Avoid overwriting the current directConnection_ variable. if( directConnection_ != 0 ) @@ -333,7 +334,7 @@ bool ApplicationList::addConnection(const QString &ipAddress, const int port) { // Already connected, don't allow second connection. kWarning() << "Refusing connection attempt, a connection has already been made " - "(contact=" << contactHandle_ << " action=return)." << endl; + "(contact=" << contactHandle_ << " action=return)."; return 0; } } @@ -346,7 +347,7 @@ bool ApplicationList::addConnection(const QString &ipAddress, const int port) if( directConnection_ != 0 ) { kWarning() << "Refusing connection attempt, a connection has already been made " - "(contact=" << contactHandle_ << " action=return)." << endl; + "(contact=" << contactHandle_ << " action=return)."; return 0; } @@ -394,7 +395,7 @@ int ApplicationList::addServerConnection() { // Already connected, don't allow second connection. kWarning() << "Refusing server connection attempt, a connection has already been made " - "(contact=" << contactHandle_ << " action=return)." << endl; + "(contact=" << contactHandle_ << " action=return)."; return 0; } } @@ -487,7 +488,7 @@ MimeApplication * ApplicationList::createApplication(const MimeMessage &message) { // Notify the user: kWarning() << "MIME message can't be handled, " - << "Application-GUID not found. (message dump follows)\n" << message.getFields() << endl; + << "Application-GUID not found. (message dump follows)\n" << message.getFields(); return 0; } @@ -539,7 +540,7 @@ P2PApplication * ApplicationList::createApplication(const P2PMessage &message) P2PApplication *app = 0; // Extract the SLP data message - QString slpMessage = QString::fromUtf8( message.getData(), message.getDataSize() ); + QString slpMessage = QString::fromUtf8( message.getData(), (int) message.getDataSize() ); if(! slpMessage.startsWith("INVITE")) { @@ -552,7 +553,7 @@ P2PApplication * ApplicationList::createApplication(const P2PMessage &message) "(slp-preamble=" << preamble << " contact=" << contactHandle_ << // TODO: get session ID from SLP body if available, it's not set in the headers. - ")." << endl; + ")."; return 0; } @@ -567,7 +568,7 @@ P2PApplication * ApplicationList::createApplication(const P2PMessage &message) { // Notify the user: kWarning() << "P2P message can't be handled, " - << "EUF-GUID not found. (message dump follows)\n" << slpMessage << endl; + << "EUF-GUID not found. (message dump follows)\n" << slpMessage; return 0; } @@ -690,7 +691,7 @@ P2PApplication * ApplicationList::getApplicationByAckData(const P2PMessage &ackM { // HACK: added for GAIM 1.5 (does not return UniqueID) kWarning() << "Got P2P message with matching ackSessionID and no ackUniqueID set " - << "(delivering anyway, contact=" << contactHandle_ << ")!" << endl; + << "(delivering anyway, contact=" << contactHandle_ << ")!"; } return app; @@ -713,7 +714,7 @@ P2PApplication * ApplicationList::getApplicationByCallId(const QString &callID) { #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "Demultiplexing P2P message" - << " (CallID " << app->getCallID() << " == " << callID << " ?)" << endl; + << " (CallID " << app->getCallID() << " == " << callID << " ?)"; #endif if( app->getCallID() == callID ) @@ -776,7 +777,7 @@ P2PApplication * ApplicationList::getApplicationByLastMessage(unsigned long mess #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL unsigned long debugMsgId = app->getLastContactMessageID(); kDebug() << "Demultiplexing P2P message" - << " (fragment MessageID " << debugMsgId << " == " << messageID << " ?)" << endl; + << " (fragment MessageID " << debugMsgId << " == " << messageID << " ?)"; #endif if( app->getLastContactMessageID() == messageID ) @@ -804,7 +805,7 @@ P2PApplication * ApplicationList::getApplicationByNonce(const QString &nonce) co { #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "Demultiplexing P2P message" - << " (Nonce " << app->getNonce() << " == " << nonce << " ?)" << endl; + << " (Nonce " << app->getNonce() << " == " << nonce << " ?)"; #endif if( app->getNonce() == nonce ) @@ -830,7 +831,7 @@ P2PApplication * ApplicationList::getApplicationBySessionId(unsigned long sessio { #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "Demultiplexing P2P message" - << " (SessionID " << app->getSessionID() << " == " << sessionID << " ?)" << endl; + << " (SessionID " << app->getSessionID() << " == " << sessionID << " ?)"; #endif if( app->getSessionID() == sessionID ) { @@ -903,7 +904,7 @@ void ApplicationList::gotMessage(const MimeMessage &message) if( app == 0 ) { kWarning() << "Unable to handle MIME message, " - << "Invitation-Cookie not found (contact=" << contactHandle_ << ")." << endl; + << "Invitation-Cookie not found (contact=" << contactHandle_ << ")."; return; } } @@ -945,7 +946,7 @@ void ApplicationList::gotMessage(const P2PMessage &message) << " size=" << message.getDataSize() << " offset=" << message.getDataOffset() // also useful for debugging! << " total=" << message.getTotalSize() - << " no.sessions=" << p2pApplications_.count() << endl; + << " no.sessions=" << p2pApplications_.count(); #endif P2PApplication *p2pApplication = 0; @@ -989,7 +990,7 @@ void ApplicationList::gotMessage(const P2PMessage &message) if( message.isConnectionHandshake() ) { kWarning() << "Received a direct connection handshake message at the switchboard " - "(contact=" << contactHandle_ << " action=return)." << endl; + "(contact=" << contactHandle_ << " action=return)."; return; } @@ -1004,7 +1005,7 @@ void ApplicationList::gotMessage(const P2PMessage &message) // NOTE: if flags==64 (0x40), it it's possible this is actually a bug from MSN7.0. kWarning() << "P2P message can't be handled," " no match for ackSessionID " << message.getAckSessionID() << - " or ackUniqueID " << message.getAckUniqueID() << " found." << endl; + " or ackUniqueID " << message.getAckUniqueID() << " found."; } } else if( message.getFlags() == 0 && message.getDataSize() == 0 && message.getAckUniqueID() == 0 ) @@ -1031,7 +1032,7 @@ void ApplicationList::gotMessage(const P2PMessage &message) // Find the call ID // Note this assumes that a Call-ID will be found in the first fragment. - slpMessage = QString::fromUtf8( message.getData(), message.getDataSize() ); + slpMessage = QString::fromUtf8( message.getData(), (int)message.getDataSize() ); int callPos = callRE.indexIn( slpMessage ); if( callPos == -1 ) @@ -1077,6 +1078,7 @@ void ApplicationList::gotMessage(const P2PMessage &message) // We already know what those look like. p2pApplication = new P2PApplication(this); p2pApplication->setMode( Application::APP_MODE_ERROR_HANDLER ); + addApplication( p2pApplication ); } } } @@ -1092,7 +1094,7 @@ void ApplicationList::gotMessage(const P2PMessage &message) { #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "No existing P2P session found for the MSNSLP message, " - << "must be a new session invitation." << endl; + << "must be a new session invitation."; #endif p2pApplication = createApplication( message ); @@ -1127,7 +1129,7 @@ void ApplicationList::gotMessage(const P2PMessage &message) " sid=" << message.getSessionID() << " flags=0x" << QString::number(message.getFlags(), 16) << " size=" << message.getDataSize() << - " contact=" << contactHandle_ << ")." << endl; + " contact=" << contactHandle_ << ")."; // Also dump the SLP message if it's there. if( ! slpMessage.isEmpty() && message.getSessionID() == 0 && message.getDataSize() > 0 ) @@ -1151,6 +1153,7 @@ void ApplicationList::gotMessage(const P2PMessage &message) // Application auto-deletes itself. p2pApplication = new P2PApplication(this); p2pApplication->setMode( Application::APP_MODE_ERROR_HANDLER ); + addApplication( p2pApplication ); p2pApplication->gotMessage( message ); } } @@ -1315,7 +1318,7 @@ void ApplicationList::pauseApplications() * This causes the application to receive requests to send new parts, * so the file transfer speed remains optimal for low and high speed network links. */ -void ApplicationList::registerDataSendingApplication( P2PApplication *application ) +void ApplicationList::registerDataSendingApplication( P2PApplicationBase *application ) { #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "adding application to the list of active outgoing transfers."; @@ -1360,7 +1363,7 @@ void ApplicationList::registerDataSendingApplication( P2PApplication *applicatio { #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "first application added, " - << "starting connection write handler." << endl; + << "starting connection write handler."; #endif } else @@ -1410,7 +1413,7 @@ void ApplicationList::resumeApplications(bool /*isPrivateChat*/) { #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "switchboard write handler is already active, " - << "no special action needed." << endl; + << "no special action needed."; #endif } else @@ -1431,14 +1434,14 @@ void ApplicationList::resumeApplications(bool /*isPrivateChat*/) { #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "direct connection is available with write handler, " - << "no special action needed." << endl; + << "no special action needed."; #endif } else { #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "direct connection is available, " - << "reconnecting write handler.." << endl; + << "reconnecting write handler.."; #endif // Connect the write handler to resume! @@ -1494,7 +1497,7 @@ void ApplicationList::sendMessage(const MimeApplication *source, const MimeMessa * @return Whether the message can be sent. If the socket would block, false is returned. * This only occurs for direct connections connections. */ -bool ApplicationList::sendMessage(const P2PApplication *source, const QByteArray &header, const QByteArray &messageData, uint footerCode) +bool ApplicationList::sendMessage(const P2PApplicationBase *source, const QByteArray &header, const QByteArray &messageData, uint footerCode) { // Verify whether a direct connection exists to send the message. // It needs to be connected and authorized. @@ -1502,7 +1505,7 @@ bool ApplicationList::sendMessage(const P2PApplication *source, const QByteArray { #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "there is a direct connection object, " - "test if the socket is still connected and not timed out." << endl; + "test if the socket is still connected and not timed out."; #endif if( ! KMESS_NULL(directConnectionPool_) ) @@ -1531,7 +1534,7 @@ bool ApplicationList::sendMessage(const P2PApplication *source, const QByteArray else if( directConnection_->hasTemporaryWriteError() ) { kWarning() << "message could not be fully sent, " - "but the remaining part is in the send buffer." << endl; + "but the remaining part is in the send buffer."; return true; } else @@ -1541,7 +1544,7 @@ bool ApplicationList::sendMessage(const P2PApplication *source, const QByteArray #endif kWarning() << "P2P message could not be sent over the direct connection, " - "using switchboard instead (contact=" << contactHandle_ << ")." << endl; + "using switchboard instead (contact=" << contactHandle_ << ")."; // NOTE: The direct connection will still appear as connected. // Next events are not processed yet. That's why there is a check for hasLastWriteFailed() below. @@ -1638,7 +1641,7 @@ void ApplicationList::setPendingConnectionInvitation(bool state) { #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "Pending connection invitation was aborted by P2PApplication, " - << "informing application no direct connection is possible." << endl; + << "informing application no direct connection is possible."; #endif emit connectionFailed(); @@ -1703,7 +1706,7 @@ void ApplicationList::slotActiveConnectionClosed() // It must be reset in slotGotDirectConnectionMessage() when the nonce was invalid. #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "The current connection was closed prematurely, " - << "signaling instead that the connection failed." << endl; + << "signaling instead that the connection failed."; #endif // Notify the connection failed. @@ -1720,7 +1723,7 @@ void ApplicationList::slotActiveConnectionClosed() { // Build a list of sessions for debugging QString activeSessions; - foreach( P2PApplication *app, dataSendingApplications_ ) + foreach( P2PApplicationBase *app, dataSendingApplications_ ) { if( ! activeSessions.isEmpty() ) { @@ -1734,11 +1737,11 @@ void ApplicationList::slotActiveConnectionClosed() "while there are active file transfers over the connection. " "Switching sessions to slow indirect transfer " "(sessions=" << activeSessions << - " contact=" << contactHandle_ << ")." << endl; + " contact=" << contactHandle_ << ")."; #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "direct connection closed, " - << "starting switchboard write handler to continue transfers." << endl; + << "starting switchboard write handler to continue transfers."; #endif // No direct connection (as expected), restart switchboard write handler. @@ -1846,7 +1849,7 @@ void ApplicationList::slotConnectionReadyWrite() #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "The direct connection is ready to send more data, " - << "notifying applications." << endl; + << "notifying applications."; #endif // Disconnect the event handler if there are no longer applications that need to transfer data. @@ -1854,7 +1857,7 @@ void ApplicationList::slotConnectionReadyWrite() { #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "no active outgoing transfers left, " - << "disconnecting write handler." << endl; + << "disconnecting write handler."; #endif directConnection_->disconnectWriteHandler( this, SLOT(slotConnectionReadyWrite()) ); @@ -1867,7 +1870,7 @@ void ApplicationList::slotConnectionReadyWrite() // Start notifying. bool writeSuccess = true; - foreach( P2PApplication *app, dataSendingApplications_ ) + foreach( P2PApplicationBase *app, dataSendingApplications_ ) { // Tell the application to send the next file parts. writeSuccess = app->sendNextDataParts( preferredFragments ); @@ -1902,7 +1905,7 @@ void ApplicationList::slotGotDirectConnectionMessage(const QByteArray &messageDa if(messageData.size() < 48) { kWarning() << "Received an unknown message from the " - << " direct-connection-link (message dump follows).\n" << messageData.data() << endl; + << " direct-connection-link (message dump follows).\n" << messageData.data(); return; } @@ -1910,7 +1913,7 @@ void ApplicationList::slotGotDirectConnectionMessage(const QByteArray &messageDa P2PMessage message(messageData); #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "Received data message from the direct connection link" - << " (flags=0x" << QString::number(message.getFlags(), 16) << ")." << endl; + << " (flags=0x" << QString::number(message.getFlags(), 16) << ")."; #endif @@ -1923,7 +1926,7 @@ void ApplicationList::slotGotDirectConnectionMessage(const QByteArray &messageDa { // Invalid nonce! Drop connection kWarning() << "Contact sent invalid nonce or session was already terminated, " - << "closing direct connection." << endl; + << "closing direct connection."; #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Closing connection, moving transfer to switchboard."; #endif @@ -1968,7 +1971,7 @@ void ApplicationList::slotSwitchboardTestReadyWrite() { #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "switchboard requested pause, " - << "postponing action." << endl; + << "postponing action."; #endif return; } @@ -1978,19 +1981,19 @@ void ApplicationList::slotSwitchboardTestReadyWrite() { #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "no active outgoing transfers left, " - << "disconnecting write handler." << endl; + << "disconnecting write handler."; #endif return; } #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "a switchboard is ready to send more data, " - << "notifying applications." << endl; + << "notifying applications."; #endif // Start notifying. bool writeSuccess = true; - foreach( P2PApplication *app, dataSendingApplications_ ) + foreach( P2PApplicationBase *app, dataSendingApplications_ ) { // Tell the application to send the next file parts. writeSuccess = app->sendNextDataParts( 1 ); @@ -2028,7 +2031,7 @@ void ApplicationList::slotSwitchboardTestReadyWrite() if( directConnection_->hasLastWriteFailed() ) { kDebug() << "A direct connection became available, " - "but had a error while writing. Will continue to use the switchboard." << endl; + "but had a error while writing. Will continue to use the switchboard."; } } #endif @@ -2054,7 +2057,7 @@ void ApplicationList::slotSwitchboardTestReadyWrite() { #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "switchboard requested to pause the transfer, " - << "postponing next action." << endl; + << "postponing next action."; #endif } } @@ -2071,7 +2074,7 @@ void ApplicationList::slotSwitchboardTestReadyWrite() { #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "no write handler connected yet, " - << "connecting write handler to direct connection." << endl; + << "connecting write handler to direct connection."; #endif directConnection_->connectWriteHandler( this, SLOT(slotConnectionReadyWrite()) ); } @@ -2086,8 +2089,8 @@ void ApplicationList::slotSwitchboardTestReadyWrite() */ void ApplicationList::slotTerminateApplication(Application *application) { - MimeApplication *mimeApp = qobject_cast( application ); - P2PApplication *p2pApp = qobject_cast( application ); + MimeApplication *mimeApp = qobject_cast( application ); + P2PApplicationBase *p2pApp = qobject_cast( application ); // Update the internal lists. if( mimeApp != 0 ) @@ -2096,7 +2099,7 @@ void ApplicationList::slotTerminateApplication(Application *application) if( mimeApplications_.removeAll( mimeApp ) == 0 ) { kWarning() << "Could not remove MimeApplication" - << " (type=" << mimeApp->metaObject()->className() << " contact=" << contactHandle_ << ")!" << endl; + << " (type=" << mimeApp->metaObject()->className() << " contact=" << contactHandle_ << ")!"; } } else if( p2pApp != 0 ) @@ -2113,17 +2116,17 @@ void ApplicationList::slotTerminateApplication(Application *application) } // Remove from collection - if( p2pApplications_.removeAll( p2pApp ) == 0 ) + if( p2pApplications_.removeAll( static_cast( p2pApp ) ) == 0 ) { kWarning() << "Could not remove P2PApplication" - " (type=" << p2pApp->metaObject()->className() << " contact=" << contactHandle_ << ")!" << endl; + " (type=" << p2pApp->metaObject()->className() << " contact=" << contactHandle_ << ")!"; } } else { // Warn when there is a problem deleting the object. kWarning() << "Can't determine type of application " - " (type=" << application->metaObject()->className() << " contact=" << contactHandle_ << ")!" << endl; + " (type=" << application->metaObject()->className() << " contact=" << contactHandle_ << ")!"; } @@ -2171,7 +2174,7 @@ void ApplicationList::slotTerminateApplication(Application *application) /** * @brief Remove the registration of an application which sends a file. */ -void ApplicationList::unregisterDataSendingApplication( P2PApplication *application ) +void ApplicationList::unregisterDataSendingApplication( P2PApplicationBase *application ) { #ifdef KMESSDEBUG_APPLICATIONLIST_GENERAL kDebug() << "removing application from the list of active outgoing transfers."; diff --git a/src/network/applications/applicationlist.h b/src/network/applications/applicationlist.h index e5c1c88..f41c2ba 100644 --- a/src/network/applications/applicationlist.h +++ b/src/network/applications/applicationlist.h @@ -25,6 +25,7 @@ class Application; class MimeApplication; class P2PApplication; +class P2PApplicationBase; class P2PMessage; class MimeMessage; class ChatMessage; @@ -116,7 +117,7 @@ class ApplicationList : public QObject // Add a new application to the list. void addApplication(P2PApplication *application); // Attempt to establish a direct connection at the given ipaddress/port. - bool addConnection(const QString &ipAddress, const int port); + bool addConnection(const QString &ipAddress, const quint16 port); // Attempt to establish a direct connection by listening at an random port. int addServerConnection(); // Abort all applications, the contact is leaving a chat. @@ -150,17 +151,17 @@ class ApplicationList : public QObject // Pause all applications, avoid flooding the switchboard message queue. void pauseApplications(); // Register an application which is sending a file. - void registerDataSendingApplication( P2PApplication *application ); + void registerDataSendingApplication( P2PApplicationBase *application ); // Resume all applications, allowing messages to be sent again. void resumeApplications(bool isPrivateChat = true); // Send a message for a P2P application over one of the available connections/bridges. - bool sendMessage(const P2PApplication *source, const QByteArray &header, const QByteArray &messageData = 0, uint footerCode = 0); + bool sendMessage(const P2PApplicationBase *source, const QByteArray &header, const QByteArray &messageData = 0, uint footerCode = 0); // Whether an application is adding connections, don't send "all failed" signal. void setAddingConnections(bool state); // Set whether the transfer invitation has been sent. void setPendingConnectionInvitation(bool state); // Remove the registration of an application which sends a file. - void unregisterDataSendingApplication( P2PApplication *application ); + void unregisterDataSendingApplication( P2PApplicationBase *application ); public slots: // Send a message for a Mime application. @@ -221,7 +222,7 @@ class ApplicationList : public QObject // The contact this class was initiated for. QString contactHandle_; // A list of pointers to all applications which are sending a file. - QList dataSendingApplications_; + QList dataSendingApplications_; // The direct connection established with the contact MsnDirectConnection *directConnection_; // The list of direct connection attempts diff --git a/src/network/applications/filetransfer.cpp b/src/network/applications/filetransfer.cpp index add9520..49e1a43 100644 --- a/src/network/applications/filetransfer.cpp +++ b/src/network/applications/filetransfer.cpp @@ -232,6 +232,10 @@ void FileTransfer::contactStarted2_UserAccepts() message.addField( "Request-Data", "IP-Address:" ); sendMessage( message ); + + // Notify the user + modifyOfferMessage(); + showEventMessage( i18n("Transfer accepted."), ChatMessage::CONTENT_APP_STARTED, false ); } @@ -251,7 +255,7 @@ void FileTransfer::contactStarted3_ContactConfirmsAccept(const MimeMessage& mess QString ip; QString ipInternal; - int port; + quint16 port; int portXInternal; int portX; QString authCookie; @@ -260,7 +264,7 @@ void FileTransfer::contactStarted3_ContactConfirmsAccept(const MimeMessage& mess ip = message.getValue( "IP-Address" ); ipInternal = message.getValue( "IP-Address-Internal" ); // As of MSN5 portXInternal = message.getValue( "PortX-Internal" ).toInt(); // As of MSN5 - port = message.getValue( "Port" ).toInt(); + port = (quint16)message.getValue( "Port" ).toUInt(); portX = message.getValue( "PortX" ).toInt(); // As of MSN5 authCookie = message.getValue( "AuthCookie" ); @@ -390,7 +394,7 @@ void FileTransfer::slotMsnFtpStatusMessage(QString message, int statusType) { #ifdef KMESSDEBUG_FILETRANSFER_GENERAL kDebug() << "Status message (type=" << statusType - << " message=" << message << ")." << endl; + << " message=" << message << ")."; #endif switch(statusType) @@ -497,7 +501,7 @@ void FileTransfer::slotMsnFtpTransferProgess(unsigned long bytesReceived) // Convert a string to some more readable form -QString FileTransfer::toReadableBytes(uint bytes) +QString FileTransfer::toReadableBytes( ulong bytes ) { QString format; if(bytes > 1048576) @@ -661,6 +665,9 @@ void FileTransfer::userStarted2_ContactAccepts(const MimeMessage& /*message*/) QString portString; QString authCookie; + // Remove the accept links + modifyOfferMessage(); + // Create a message showing that the transfer was accepted. showEventMessage( i18n("Transfer accepted."), ChatMessage::CONTENT_APP_STARTED, true ); diff --git a/src/network/applications/filetransfer.h b/src/network/applications/filetransfer.h index db889a6..9da35be 100644 --- a/src/network/applications/filetransfer.h +++ b/src/network/applications/filetransfer.h @@ -66,7 +66,7 @@ class FileTransfer : public MimeApplication // Create and initilize the progress dialog. void initializeProgressDialog(bool incoming = false); // Convert a string to some more readable form - QString toReadableBytes(uint bytes); + QString toReadableBytes( ulong bytes); // Step one of a user-started chat: the user invites the contact void userStarted1_UserInvitesContact(); // Step two of a user-started chat: the contact accepts diff --git a/src/network/applications/filetransferp2p.cpp b/src/network/applications/filetransferp2p.cpp index 8e79244..61c886e 100644 --- a/src/network/applications/filetransferp2p.cpp +++ b/src/network/applications/filetransferp2p.cpp @@ -18,6 +18,8 @@ #include "filetransferp2p.h" #include "../../utils/thumbnailprovider.h" +#include "../../utils/kmessshared.h" +#include "../../utils/kmessconfig.h" #include "../../contact/msnobject.h" #include "../../dialogs/transferwindow.h" #include "../../kmessdebug.h" @@ -63,7 +65,7 @@ FileTransferP2P::FileTransferP2P(ApplicationList *applicationList) FileTransferP2P::FileTransferP2P(ApplicationList *applicationList, const QString &filename) : P2PApplication(applicationList), file_(0), - fileName_(filename), + filePath_(filename), fileSize_(0), thumbnailProvider_(0), transferID_(-1) @@ -137,7 +139,7 @@ void FileTransferP2P::contactStarted1_ContactInvitesUser(const MimeMessage &mess if( context.length() <= 24 ) { kWarning() << "File transfer context field has bad formatting, " - "ignoring invite (context=" << context << ", contact=" << getContactHandle() << ")." << endl; + "ignoring invite (context=" << context << ", contact=" << getContactHandle() << ")."; showEventMessage( i18n("The file transfer invitation was cancelled. Bad data was received."), ChatMessage::CONTENT_APP_CANCELED, true ); sendCancelMessage( CANCEL_ABORT ); return; @@ -154,7 +156,7 @@ void FileTransferP2P::contactStarted1_ContactInvitesUser(const MimeMessage &mess if( fieldsLength > (uint) decodedContext.size() || fieldsLength < 24 ) { kWarning() << "File transfer context field has bad formatting, rejecting invite" - " (length=" << fieldsLength << ", contact=" << getContactHandle() << ")" << endl; + " (length=" << fieldsLength << ", contact=" << getContactHandle() << ")"; showEventMessage( i18n("The file transfer invitation was cancelled. Bad data was received."), ChatMessage::CONTENT_APP_CANCELED, true ); sendCancelMessage( CANCEL_ABORT ); return; @@ -172,7 +174,7 @@ void FileTransferP2P::contactStarted1_ContactInvitesUser(const MimeMessage &mess kWarning() << "File transfer context field has bad formatting " "(splitter not found at byte " << splitterPos << "," " found 0x" << QString::number( splitter, 16 ) << - " contact=" << getContactHandle() << ")." << endl; + " contact=" << getContactHandle() << ")."; // sendCancelMessage( CANCEL_ABORT ); // return; @@ -228,7 +230,7 @@ void FileTransferP2P::contactStarted1_ContactInvitesUser(const MimeMessage &mess // Everything seams OK, allow the user to accept the file. // Generate accept message - QString html = i18n( "Do you want to accept the file: %1 (%2)", + QString html = i18n( "The contact wants to send you a file: "%1" (%2).", "" + suggestedFileName_ + "", toReadableBytes( fileSize_ ) ); @@ -247,7 +249,7 @@ void FileTransferP2P::contactStarted1_ContactInvitesUser(const MimeMessage &mess // Display the accept message. #ifdef KMESSDEBUG_FILETRANSFER_P2P kDebug() << "File to transfer is " << suggestedFileName_ << ", " - << "waiting for user to accept." << endl; + << "waiting for user to accept."; #endif offerAcceptOrReject( html ); @@ -266,68 +268,97 @@ void FileTransferP2P::contactStarted2_UserAccepts() #ifdef KMESSTEST KMESS_ASSERT( file_ == 0 ); - KMESS_ASSERT( fileName_.isEmpty() ); + KMESS_ASSERT( filePath_.isEmpty() ); #endif - bool success; - QString startFolder; // QString::null by default - QString recentFolderTag = ":filedownload"; + QFileInfo fileInfo; - // Open a file dialog so that the user can save the file to a particular directory and name. - bool hasFile = false; - while( ! hasFile ) + // Open the options and get the default downloads directory + KConfigGroup group = KMessConfig::instance()->getGlobalConfig( "General" ); + QString startFolder( group.readEntry( "receivedFilesDir", QDir::homePath() ) ); + + if( group.readEntry( "useReceivedFilesDir", false ) && ! startFolder.isEmpty() ) { - // Set an initial path to the file - KUrl startDir = KFileDialog::getStartUrl( startFolder, recentFolderTag ); - startDir.addPath( suggestedFileName_ ); + int index = -1; - delayDeletion( true ); - - // Ask the user for a file. - fileName_ = KFileDialog::getSaveFileName( startDir.url() ); - - delayDeletion( false ); - if( isClosing() ) + do { - endApplication(); - return; + // The ++ ensures that at the next iteration a suffix is appended to the name + if( index++ < 0 ) + { + filePath_ = startFolder + "/" + suggestedFileName_; + } + else + { + fileInfo.setFile( suggestedFileName_ ); + filePath_ = startFolder + "/" + fileInfo.baseName() + "(" + QString::number( index ) + ")." + fileInfo.completeSuffix(); + } } + while( QFile::exists( filePath_ ) ); - if( fileName_.isNull() ) + fileInfo.setFile( filePath_ ); + fileName_ = fileInfo.fileName(); + } + else + { + // Ask the user to specify where to put the file + QString recentFolderTag = ":filedownload"; + + // Open a file dialog so that the user can save the file to a particular directory and name. + bool hasFile = false; + while( ! hasFile ) { + // Set an initial path to the file + KUrl startDir = KFileDialog::getStartUrl( startFolder, recentFolderTag ); + startDir.addPath( suggestedFileName_ ); + + delayDeletion( true ); + + // Ask the user for a file. + filePath_ = KFileDialog::getSaveFileName( startDir.url() ); + + delayDeletion( false ); + if( isClosing() ) + { + endApplication(); + return; + } + + if( filePath_.isNull() ) + { #ifdef KMESSDEBUG_FILETRANSFER_P2P - kDebug() << "User cancelled in file save dialog"; + kDebug() << "User cancelled in file save dialog"; #endif - // Dialog cancelled, cancel afterall - userRejected(); - return; - } + // Dialog cancelled, cancel afterall + userRejected(); + return; + } - hasFile = true; - QFileInfo fileinfo( fileName_ ); - QString shortName = fileinfo.fileName(); + hasFile = true; + fileInfo.setFile( filePath_ ); + fileName_ = fileInfo.fileName(); - // Check if the selected file exists and if the user wants to overwrite it. - // The while loop is for the prompt to keep appearing if the user - // chooses the same filename but does not want to overwrite the file. - if( QFile::exists(fileName_) ) - { - if( KMessageBox::warningContinueCancel( 0, - i18n("The file '%1' already exists.\ndo you want to overwrite it?", shortName), - i18n("Overwrite File"), KGuiItem( i18n("Over&write") ) ) == KMessageBox::Cancel ) + // Check if the selected file exists and if the user wants to overwrite it. + // The while loop is for the prompt to keep appearing if the user + // chooses the same filename but does not want to overwrite the file. + if( QFile::exists(filePath_) ) { - // User does not want to override - hasFile = false; - startFolder = fileinfo.path(); + if( KMessageBox::warningContinueCancel( 0, + i18n("The file "%1" already exists.\ndo you want to overwrite it?", fileName_ ), + i18n("Overwrite File"), KGuiItem( i18n("Over&write") ) ) == KMessageBox::Cancel ) + { + // User does not want to overwrite + hasFile = false; + startFolder = fileInfo.path(); + } } } } - // Now we try to open the file - file_ = new QFile(fileName_); - success = (file_ != 0) && file_->open(QIODevice::WriteOnly); + file_ = new QFile(filePath_); + bool success = (file_ != 0) && file_->open(QIODevice::WriteOnly); if( ! success ) { @@ -336,14 +367,15 @@ void FileTransferP2P::contactStarted2_UserAccepts() #endif // Notify the user, even if debug mode is not enabled. - kWarning() << "Unable to open file: " << fileName_ << "!"; + kWarning() << "Unable to open file: " << filePath_ << "!"; // Close the file (also causes gotData() to fail) delete file_; file_ = 0; // Tell the user about it - showEventMessage( i18n("The transfer of %1 failed. Couldn't open file", + modifyOfferMessage(); + showEventMessage( i18n("The transfer of file "%1" failed. Couldn't save the file.", "" + fileName_ + ""), ChatMessage::CONTENT_APP_FAILED, false ); @@ -368,6 +400,12 @@ void FileTransferP2P::contactStarted2_UserAccepts() // Send the ACCEPT message sendSlpOkMessage(message); + + // Notify the user + modifyOfferMessage(); + showEventMessage( i18n( "You have accepted the transfer of file "%1".", fileName_ ), + ChatMessage::CONTENT_APP_STARTED, + false ); } @@ -418,7 +456,7 @@ void FileTransferP2P::contactStarted4_ContactConfirmsPreparation() * @param fileData The handle to the opened file. * @param usePreview Whether to use the preview in thumbnailProvider_ */ -QString FileTransferP2P::createContextField( const QString &filename, const QFile *fileData, bool usePreview ) const +QString FileTransferP2P::createContextField( const QFile *fileData, bool usePreview ) const { // Get the thumbnail results. bool hasPreview = ( usePreview && thumbnailProvider_ != 0 && thumbnailProvider_->isSuccessful() ); @@ -432,16 +470,14 @@ QString FileTransferP2P::createContextField( const QString &filename, const QFil #ifdef KMESSDEBUG_FILETRANSFER_P2P kDebug() << "Creating context field " - << ( usePreview ? "with thumbnail." : "without thumbnail." ) << endl; + << ( usePreview ? "with thumbnail." : "without thumbnail." ); #endif // Create the short name - QFileInfo fileinfo( filename ); - QString shortName = fileinfo.fileName(); - uint shortNameLength = shortName.length(); + uint shortNameLength = fileName_.length(); // Get the file data (preview - int filesize = fileData->size(); + ulong filesize = fileData->size(); int flags = (hasPreview ? 0 : 1); // Determine the context length @@ -457,7 +493,7 @@ QString FileTransferP2P::createContextField( const QString &filename, const QFil P2PMessage::insertBytes( context, flags, 16 ); // Field 4: 1 if NO preview data // Field 5: the file name - const unsigned short * utf16Name = shortName.utf16(); + const unsigned short * utf16Name = fileName_.utf16(); int offset = 20; for(uint i = 0; i < shortNameLength; ++i) { @@ -522,7 +558,7 @@ QString FileTransferP2P::getAppId() QString FileTransferP2P::getContactAbortMessage() const { // Application::getUserAbortMessage() returns "The contact cancelled the session". - return i18n("The contact cancelled the transfer."); + return i18n("The contact has cancelled the transfer of file "%1".", ( fileName_.isEmpty() ? suggestedFileName_ : fileName_ ) ); } @@ -533,7 +569,7 @@ QString FileTransferP2P::getContactAbortMessage() const QString FileTransferP2P::getUserAbortMessage() const { // Application::getUserAbortMessage() returns "You have cancelled the session". - return i18n("The transfer was cancelled"); + return i18n( "You have cancelled the transfer of file "%1".", ( fileName_.isEmpty() ? suggestedFileName_ : fileName_ ) ); } @@ -551,7 +587,7 @@ void FileTransferP2P::gotData(const P2PMessage &message) kWarning() << "Unable to handle file data: no file open or already closed " << "(offset=" << message.getDataOffset() << " totalsize=" << message.getDataSize() - << " contact=" << getContactHandle() << ")!" << endl; + << " contact=" << getContactHandle() << ")!"; // Cancel if we can't receive it. // If this happens we're dealing with a very stubborn client, @@ -596,7 +632,7 @@ void FileTransferP2P::initializeProgressDialog(bool incoming, uint filesize) { // Create a new entry in the tranfer window TransferWindow *transferWindow = TransferWindow::getInstance(); - transferID_ = transferWindow->addEntry( fileName_, filesize, incoming, preview_ ); + transferID_ = transferWindow->addEntry( filePath_, filesize, incoming, preview_ ); // Connect the dialog so that if the user closes it, it's deleted. connect( transferWindow, SIGNAL( cancelTransfer(int) ) , @@ -628,14 +664,22 @@ void FileTransferP2P::showTransferComplete() // Displays the success in the transfer window TransferWindow::getInstance()->finishTransfer( transferID_ ); - // Send an event to the switchboard: - QFileInfo fileinfo( fileName_ ); - QString shortName = fileinfo.fileName(); - QString fileURL = "" + shortName + ""; + // Send an event to the switchboard + QString fileURL = "" + "" + fileName_ + "" + ""; - showEventMessage( i18n("Successfully transferred file: %1", - "" + fileURL + ""), - ChatMessage::CONTENT_APP_ENDED, ! isUserStartedApp() ); + // Show an appropriate message + QString message; + if( isUserStartedApp() ) + { + message = i18n( "Successfully sent file "%1".", fileURL ); + } + else + { + message = i18n( "Successfully received file "%1".", fileURL ); + } + showEventMessage( message, ChatMessage::CONTENT_APP_ENDED, ! isUserStartedApp() ); } @@ -656,7 +700,7 @@ void FileTransferP2P::showTransferMessage(const QString &message) * Show the progress made during a transfer. * This function is also called from the P2PApplication base class. */ -void FileTransferP2P::showTransferProgress(const uint bytesTransferred) +void FileTransferP2P::showTransferProgress(const ulong bytesTransferred) { // Display the progress update in the transfer window TransferWindow::getInstance()->updateProgress( transferID_, bytesTransferred ); @@ -746,7 +790,7 @@ void FileTransferP2P::userStarted1_UserInvitesContact() * http://siebe.bot2k3.net/docs/ */ - file_ = new QFile(fileName_); + file_ = new QFile(filePath_); bool success = (file_ != 0) && file_->open(QIODevice::ReadOnly); // Stop if the file can't be openend. @@ -757,34 +801,37 @@ void FileTransferP2P::userStarted1_UserInvitesContact() #endif // Notify the user, even if debug mode is not enabled. - kWarning() << "Unable to open file: " << fileName_ << "!"; + kWarning() << "Unable to open file: " << filePath_ << "!"; // Close the file delete file_; file_ = 0; // Tell the user about it - if( ! QFile::exists(fileName_) ) + if( ! QFile::exists(filePath_) ) { - showEventMessage( i18n( "The transfer of %1 failed. The file does not exist.", - "" + fileName_ + ""), ChatMessage::CONTENT_APP_CANCELED, false ); + showEventMessage( i18n( "The transfer of file "%1" failed. The file does not exist.", + "" + filePath_ + ""), ChatMessage::CONTENT_APP_CANCELED, false ); } else { - showEventMessage( i18n( "The transfer of %1 failed. The file could not be read.", - "" + fileName_ + ""), ChatMessage::CONTENT_APP_CANCELED, false ); + showEventMessage( i18n( "The transfer of file "%1" failed. The file could not be read.", + "" + filePath_ + ""), ChatMessage::CONTENT_APP_CANCELED, false ); } return; } + // Set the short file name + QFileInfo fileInfo( filePath_ ); + fileName_ = fileInfo.fileName(); // Read the filename parameters - fileSize_ = file_->size(); + fileSize_ = (uint)file_->size(); // Create a thumbnail, continue when it completes // Windows Live Messenger scales the received image down depending on the users settings. // The preview however, is always sent as 96x96 - thumbnailProvider_ = new ThumbnailProvider( fileName_, 96 ); + thumbnailProvider_ = new ThumbnailProvider( filePath_, 96 ); connect( thumbnailProvider_, SIGNAL(gotResult()), this, SLOT(userStarted1_gotThumbnailResult()) ); } @@ -797,17 +844,17 @@ void FileTransferP2P::userStarted1_gotThumbnailResult() bool hasPreview = thumbnailProvider_->isSuccessful(); // Create the session id and context field - QString context = createContextField( fileName_, file_, hasPreview ); - uint sessionID = P2PApplication::generateID(); + QString context = createContextField( file_, hasPreview ); + uint sessionID = (uint)KMessShared::generateID(); // Send the invitation sendSlpSessionInvitation(sessionID, getAppId(), 2, context); // Generate the HTML to cancel the transfer - QFileInfo fileinfo( fileName_ ); - QString shortName = fileinfo.fileName(); - QString html = i18n("Sending file %1 (%2)", "" + shortName + "", toReadableBytes( fileSize_ ) ); + QString html = i18n( "Sending file "%1" (%2).", + "" + fileName_ + "", + toReadableBytes( fileSize_ ) ); // Generate fallback image so there is always an icon in the chat window. @@ -820,7 +867,7 @@ void FileTransferP2P::userStarted1_gotThumbnailResult() // Insert the preview image if this is available. if( hasPreview ) { - html = thumbnailProvider_->getImageTag( shortName ) + "
" + html; + html = thumbnailProvider_->getImageTag( fileName_ ) + "
" + html; preview_ = thumbnailProvider_->getImage(); // Save for transfer dialog later. } @@ -842,7 +889,10 @@ void FileTransferP2P::userStarted2_ContactAccepts(const MimeMessage & /*message* #endif // Update the GUI - showEventMessage( i18n("Transfer accepted."), ChatMessage::CONTENT_APP_STARTED, true ); + modifyOfferMessage(); + showEventMessage( i18n( "The contact has accepted the transfer of file "%1".", fileName_ ), + ChatMessage::CONTENT_APP_STARTED, + true ); initializeProgressDialog(false, fileSize_); // Send the invite to negatiate the transfer mode. diff --git a/src/network/applications/filetransferp2p.h b/src/network/applications/filetransferp2p.h index 05b3f9e..54e04cb 100644 --- a/src/network/applications/filetransferp2p.h +++ b/src/network/applications/filetransferp2p.h @@ -57,7 +57,7 @@ class FileTransferP2P : public P2PApplication private: // The contact cancelled the session - void contactAborted(const QString &message = 0); + void contactAborted(const QString &message = QString::null); // Step one of a contact-started chat: the contact invites the user void contactStarted1_ContactInvitesUser(const MimeMessage& message); // Step two of a contact-started chat: the user accepts @@ -67,7 +67,7 @@ class FileTransferP2P : public P2PApplication // Step four of a contact-started chat: the contact confirms the data-preparation message. void contactStarted4_ContactConfirmsPreparation(); // Create the context field - QString createContextField(const QString &filename, const QFile *fileData, bool usePreview) const; + QString createContextField( const QFile *fileData, bool usePreview ) const; // End the application with another message in the file transfer dialog as well (The "failTransfer"-like method) void endApplication(); // Return an reject message to display. @@ -83,7 +83,7 @@ class FileTransferP2P : public P2PApplication // Show a message to inform about a transfer event (shown in the transfer dialog, e.g. connecting to host) void showTransferMessage(const QString &message); // Show the progress made during a transfer. - void showTransferProgress(const uint bytesTransferred); + void showTransferProgress(const ulong bytesTransferred); // Convert a string to some more readable form QString toReadableBytes(uint bytes); // The user cancelled the session @@ -106,8 +106,10 @@ class FileTransferP2P : public P2PApplication private: // Handle of the file. QFile *file_; - // Name of the file where the data should be stored. + // Name of the transferred file. QString fileName_; + // Full path of the file where the data should be stored. + QString filePath_; // The size of the file unsigned int fileSize_; // The file preview diff --git a/src/network/applications/gnomemeeting.cpp b/src/network/applications/gnomemeeting.cpp index 8b4495d..f16527b 100644 --- a/src/network/applications/gnomemeeting.cpp +++ b/src/network/applications/gnomemeeting.cpp @@ -111,6 +111,9 @@ void GnomeMeeting::startMeeting( bool connectToRemote ) kDebug() << "Start the meeting."; #endif + // Remove the accept links + modifyOfferMessage(); + // Show the user that the app is starting showEventMessage( i18n("Starting GnomeMeeting. Connecting to %1.", remoteIp_ ), ChatMessage::CONTENT_APP_INFO, ! isUserStartedApp() ); diff --git a/src/network/applications/inktransferp2p.cpp b/src/network/applications/inktransferp2p.cpp index a28299a..596001b 100644 --- a/src/network/applications/inktransferp2p.cpp +++ b/src/network/applications/inktransferp2p.cpp @@ -67,7 +67,7 @@ void InkTransferP2P::gotData(const P2PMessage &message) } // When all data is received, the parent class calls showTransferComplete(). - // That method will send the pictureReceived() signal. + // That method will send the msnObjectReceived() signal. } @@ -134,3 +134,5 @@ void InkTransferP2P::showTransferComplete() endApplication(); } + +#include "inktransferp2p.moc" diff --git a/src/network/applications/inktransferp2p.h b/src/network/applications/inktransferp2p.h index 98e1b5c..d3b4761 100644 --- a/src/network/applications/inktransferp2p.h +++ b/src/network/applications/inktransferp2p.h @@ -33,7 +33,8 @@ * It only uses/abuses the P2P protocol layer to transmit the message in multiple fragments. * MSN Messenger 7 introduced the "datacast" MIME message to end this madness. * - * @author The KMess Development Team + * @author Antonio Nastasi, Diederik van der Boor + * @ingroup Applications */ class InkTransferP2P : public P2PApplication { diff --git a/src/network/applications/msnobjecttransferp2p.cpp b/src/network/applications/msnobjecttransferp2p.cpp index 17dd947..237900f 100644 --- a/src/network/applications/msnobjecttransferp2p.cpp +++ b/src/network/applications/msnobjecttransferp2p.cpp @@ -20,18 +20,17 @@ #include "../../currentaccount.h" #include "../../emoticonmanager.h" #include "../../kmessdebug.h" +#include "../../utils/kmessconfig.h" +#include "../../utils/kmessshared.h" #include "../mimemessage.h" #include "../p2pmessage.h" -#include #include #include +#include #include -#include #include -#include - /** @@ -99,7 +98,7 @@ void MsnObjectTransferP2P::contactStarted1_ContactInvitesUser(const MimeMessage if( context.length() <= 24 ) { kWarning() << "MSNObject transfer context field has bad formatting, " - "ignoring invite (context=" << context << ", contact=" << getContactHandle() << ")." << endl; + "ignoring invite (context=" << context << ", contact=" << getContactHandle() << ")."; sendCancelMessage( CANCEL_FAILED ); return; } @@ -126,7 +125,7 @@ void MsnObjectTransferP2P::contactStarted1_ContactInvitesUser(const MimeMessage kDebug() << "Received a request for a display picture, but unexpected appID was set " "(appid=" << appID << " type=" << msnObject_.getType() << - " contact=" << getContactHandle() << " action=continue)." << endl; + " contact=" << getContactHandle() << " action=continue)."; } // Continue at separate function @@ -142,7 +141,7 @@ void MsnObjectTransferP2P::contactStarted1_ContactInvitesUser(const MimeMessage kDebug() << "Received a request for an emoticon, but unexpected appID was set " "(appid=" << appID << " type=" << msnObject_.getType() << - " contact=" << getContactHandle() << " action=continue)." << endl; + " contact=" << getContactHandle() << " action=continue)."; } // Continue at separate function @@ -164,7 +163,7 @@ void MsnObjectTransferP2P::contactStarted1_ContactInvitesUser(const MimeMessage kWarning() << "Received an invitation for an unexpected object type " "(appid=" << appID << " type=" << msnObject_.getType() << - " contact=" << getContactHandle() << ")." << endl; + " contact=" << getContactHandle() << ")."; // Abort the contact. sendCancelMessage( CANCEL_FAILED ); @@ -183,18 +182,18 @@ void MsnObjectTransferP2P::contactStarted1_gotDisplayPictureRequest() kWarning() << "Contact " << getContactHandle() << " wants a display picture we don't have!\n" "Requested object: " << msnObject_.objectString() << "\n" "Current object: " << CurrentAccount::instance()->getMsnObjectString() << "\n" - "Aborting invite." << endl; + "Aborting invite."; sendCancelMessage( CANCEL_FAILED ); return; } // The file to send is our picture - fileName_ = CurrentAccount::instance()->getImagePath(); + fileName_ = CurrentAccount::instance()->getPicturePath(); // Reject because there is no file to send if( fileName_.isEmpty() ) { - kWarning() << "Got an invitation, but we don't have a picture to send." << endl; + kWarning() << "Got an invitation, but we don't have a picture to send."; sendCancelMessage( CANCEL_FAILED ); return; } @@ -217,7 +216,7 @@ void MsnObjectTransferP2P::contactStarted1_gotEmoticonRequest() if( ! pictureFile.open( QIODevice::ReadOnly ) ) { #ifdef KMESSDEBUG_MSNOBJECTTRANSFER_P2P - kDebug() << "Couldn't open file: " << pictureFile.fileName() << endl; + kDebug() << "Couldn't open file: " << pictureFile.fileName(); #endif sendCancelMessage( CANCEL_FAILED ); return; @@ -238,9 +237,9 @@ void MsnObjectTransferP2P::contactStarted1_gotEmoticonRequest() if( msnObject_.hasChanged( testObject.objectString() ) ) { kWarning() << "Contact " << getContactHandle() - << " wants a custom emoticon we don't have!" << endl - << "Requested object: " << msnObject_.objectString() << endl - << "Aborting invite." << endl; + << " wants a custom emoticon we don't have!" + << "Requested object: " << msnObject_.objectString() + << "Aborting invite."; sendCancelMessage( CANCEL_FAILED ); return; } @@ -361,62 +360,6 @@ const MsnObject & MsnObjectTransferP2P::getMsnObject() const -/** - * Determinate the path for an contact picture. - * - * @param msnObject The MSNObject the other contact uses to identify his resource. - * - * @returns A file name string. - */ -QString MsnObjectTransferP2P::getPictureFileName(const MsnObject &msnObject) -{ - // Replace bad characters, in case someone intends to send a bad SHA1. - // The sha1 string is actually base64 encoded, meaning we could - // also expect a "/" character in the string. - QString sha1d = msnObject.getDataHash(); - const QString safeSha1 = sha1d.replace(QRegExp("[^a-zA-Z0-9+=]"), "_"); - - // Be friendly for file managers. - QString extension; - QString path; - switch( msnObject.getType() ) - { - case MsnObject::DISPLAYPIC: - extension = ".png"; - path = "displaypics"; - break; - - case MsnObject::BACKGROUND: - extension = ".png"; - path = "backgrounds"; - break; - - case MsnObject::EMOTICON: - extension = ".png"; - path = "useremoticons"; - break; - - case MsnObject::WINK: - extension = ".cab"; - path = "winks"; - break; - - case MsnObject::VOICECLIP: - extension = ".wav"; - path = "voiceclips"; - break; - - default: - extension = ".dat"; - path = QString::null; - } - - // Locate filename - return KStandardDirs::locateLocal( "data", QString("kmess/") + path + "/" + safeSha1 + extension); -} - - - /** * Called when data is received. * Writes the received data to the output file. @@ -430,7 +373,7 @@ void MsnObjectTransferP2P::gotData(const P2PMessage &message) kWarning() << "Unable to handle file data: no file open or already closed " << "(offset=" << message.getDataOffset() << " totalsize=" << message.getTotalSize() - << " contact=" << getContactHandle() << ")!" << endl; + << " contact=" << getContactHandle() << ")!"; // Cancel if we can't receive it. // If this happens we're dealing with a very stubborn client, @@ -451,7 +394,7 @@ void MsnObjectTransferP2P::gotData(const P2PMessage &message) } // When all data is received, the parent class calls showTransferComplete(). - // That method will test the file and send the pictureReceived() signal. + // That method will test the file and send the msnObjectReceived() signal. } @@ -514,26 +457,38 @@ void MsnObjectTransferP2P::showTransferComplete() file_->close(); // Check if the received image is valid. Will cost some CPU though. - if( file_->open( QIODevice::ReadOnly ) ) - { - // Get file contents - QByteArray fileData = file_->readAll(); - file_->close(); - - // Get hash and check - QString hash = QCryptographicHash::hash( fileData, QCryptographicHash::Sha1 ).toBase64(); - success = ( msnObject_.getDataHash() == hash ); - } + QString fileHash = KMessShared::generateFileHash( pictureFileName ).toBase64(); + success = ( msnObject_.getDataHash() == fileHash ); // Clean up delete file_; file_ = 0; + QFileInfo fileInfo; + QString ext; // Special checks for some types. switch( msnObject_.getType() ) { case MsnObject::DISPLAYPIC: + // Auto-assign the extension for the file + ext = QImageReader::imageFormat( pictureFileName ); + if( ext.isEmpty() || ! success ) + { + // If the type of image isn't support or the data is corrupted + // remove the file + QFile::remove ( pictureFileName ); + return; + } + + // Rename the file with the new extension if there is anyone + fileInfo.setFile( pictureFileName ); + if( fileInfo.suffix().isEmpty() ) + { + QFile::rename( pictureFileName, pictureFileName + "." + ext ); + } + break; + case MsnObject::BACKGROUND: case MsnObject::EMOTICON: // For pictures, see if it's broken. @@ -552,7 +507,7 @@ void MsnObjectTransferP2P::showTransferComplete() // Send an event to the switchboard: - emit pictureReceived( getContactHandle(), msnObject_ ); + emit msnObjectReceived( getContactHandle(), msnObject_ ); // The application should close automatically now, // and it sends the BYE message automatically too. @@ -587,7 +542,7 @@ void MsnObjectTransferP2P::userStarted1_UserInvitesContact() #endif // Set the filename - fileName_ = getPictureFileName(msnObject_); + fileName_ = KMessConfig::instance()->getMsnObjectFileName(msnObject_); // Encode the context // The \0 char is added on purpose, this fixes the msnobject transfers with Bot2k3. @@ -624,7 +579,7 @@ void MsnObjectTransferP2P::userStarted1_UserInvitesContact() } // Send the invitation - sendSlpSessionInvitation( generateID(), getAppId(), appId, context); + sendSlpSessionInvitation( KMessShared::generateID(), getAppId(), appId, context); } @@ -666,6 +621,9 @@ void MsnObjectTransferP2P::userStarted3_UserPrepares() { // TODO: Quick fix for WML8, this method is called twice because WLM8 // initializes a Direct connection while it sent the data preparation +#ifdef KMESSDEBUG_MSNOBJECTTRANSFER_P2P + kWarning() << "this method was already called before."; +#endif return; } diff --git a/src/network/applications/msnobjecttransferp2p.h b/src/network/applications/msnobjecttransferp2p.h index 6e819aa..6116777 100644 --- a/src/network/applications/msnobjecttransferp2p.h +++ b/src/network/applications/msnobjecttransferp2p.h @@ -55,9 +55,6 @@ class MsnObjectTransferP2P : public P2PApplication // Return the msn object of the picture we're transferring const MsnObject & getMsnObject() const; - // Static function to return a file name. - static QString getPictureFileName(const MsnObject& msnObject); - // Indicates a private chat is not required, overwritten from the base class. bool isPrivateChatRequired() const; @@ -102,7 +99,7 @@ class MsnObjectTransferP2P : public P2PApplication MsnObject msnObject_; signals: - void pictureReceived(const QString& contact, const MsnObject &msnObject); + void msnObjectReceived(const QString& contact, const MsnObject &msnObject); }; #endif diff --git a/src/network/applications/msnremotedesktop.cpp b/src/network/applications/msnremotedesktop.cpp index a34946f..23ad614 100644 --- a/src/network/applications/msnremotedesktop.cpp +++ b/src/network/applications/msnremotedesktop.cpp @@ -152,6 +152,9 @@ void MsnRemoteDesktop::startRemoteClient(QString /*login*/, QString /*password*/ kDebug() << "Start KDE's remote desktop client."; #endif + // Remove the accept links + modifyOfferMessage(); + // Show the user that the app is starting showEventMessage( i18n("Starting KRDC. Connecting to %1.", remoteIp_ ), ChatMessage::CONTENT_APP_INFO, ! isUserStartedApp() ); diff --git a/src/network/applications/p2papplication.cpp b/src/network/applications/p2papplication.cpp index 768bbfa..40ae140 100644 --- a/src/network/applications/p2papplication.cpp +++ b/src/network/applications/p2papplication.cpp @@ -20,16 +20,13 @@ #include "../../kmessdebug.h" #include "../../currentaccount.h" #include "../../contact/msnobject.h" +#include "../../utils/kmessshared.h" #include "../extra/msndirectconnection.h" #include "../mimemessage.h" #include "../p2pmessage.h" #include "applicationlist.h" -#include -#include -#include #include -#include #include @@ -62,40 +59,16 @@ * @param applicationList The application list object for the contact */ P2PApplication::P2PApplication(ApplicationList *applicationList) -: Application( applicationList->getContactHandle() ), - aborting_(false), - applicationList_(applicationList), - buffer_(0), - dataSource_(0), - dataType_(P2P_TYPE_NEGOTIATION), - fragmentMessageID_(0), - fragmentOffset_(0), - fragmentTotalSize_(0), +: P2PApplicationBase( applicationList ), + applicationList_( applicationList ), // local copy for now, don't want to expose it as protected. gotSlpMessage_(false), invitationCSeq_(0), invitationSessionID_(0), sessionID_(0), - nextMessageID_(0), - shouldSendAck_(false), - userShouldAcknowledge_(false), - waitingState_(P2P_WAIT_DEFAULT) + userShouldAcknowledge_(false) { // For debugging setObjectName( QLatin1String( metaObject()->className() ) + "[0/" + getContactHandle() + "]" ); - - // Reset other internal fields - lastIncomingMessage_.dataSize = 0; - lastIncomingMessage_.messageID = 0; - lastIncomingMessage_.messageType = P2P_MSG_UNKNOWN; - lastIncomingMessage_.sentTime = 0; - lastIncomingMessage_.sessionID = 0; - lastIncomingMessage_.totalSize = 0; - lastIncomingMessage_.ackSessionID = 0; - - // Initiaize the timer - waitingTimer_ = new QTimer(this); - waitingTimer_->setSingleShot( true ); - connect( waitingTimer_, SIGNAL(timeout()), this, SLOT(slotCleanup()) ); } @@ -108,45 +81,10 @@ P2PApplication::P2PApplication(ApplicationList *applicationList) P2PApplication::~P2PApplication() { #ifdef KMESSDEBUG_APPLICATION - kDebug() << " session=" << sessionID_ << - " closing=" << isClosing() << - " timer=" << waitingTimer_->isActive() << - " state=" << waitingState_ << - " unackedCount=" << outgoingMessages_.count() << "." << endl; -#endif -#ifdef KMESSTEST - KMESS_ASSERT( outgoingMessages_.isEmpty() ); + kDebug() << " session=" << getSessionID(); #endif - // Stop the timer - waitingTimer_->stop(); applicationList_ = 0; - dataSource_ = 0; - - // Delete pointers - qDeleteAll( outgoingMessages_ ); - delete waitingTimer_; - delete buffer_; -} - - - -/** - * @brief Make sure no more data will be sent. - */ -void P2PApplication::abortDataSending() -{ - // Abort sending. - if( dataSource_ != 0 ) - { -#ifdef KMESSDEBUG_APPLICATION - kDebug() << "application was still sending data, resetting."; -#endif - - dataSource_ = 0; - dataType_ = P2P_TYPE_NEGOTIATION; - applicationList_->unregisterDataSendingApplication( this ); - } } @@ -164,16 +102,16 @@ void P2PApplication::abortDataSending() void P2PApplication::contactAborted(const QString &message) { #ifdef KMESSDEBUG_APPLICATION - kDebug() << "state=" << waitingState_; + kDebug() << "state=" << (int) getWaitingState(); #endif // Make sure a second message is not displayed here. // The contact could be sending multiple error messages. - if( waitingState_ == P2P_WAIT_END_APPLICATION ) + if( isWaitingState( P2P_WAIT_END_APPLICATION ) ) { #ifdef KMESSDEBUG_APPLICATION kDebug() << "Abort the application again, " - "application was already awaiting termination." << endl; + "application was already awaiting termination."; #endif // Make sure the timer is started again. @@ -186,7 +124,7 @@ void P2PApplication::contactAborted(const QString &message) "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=endapplicationlater)" << endl; + " action=endapplicationlater)"; // Make sure the timer is started again. endApplicationLater(); @@ -194,8 +132,7 @@ void P2PApplication::contactAborted(const QString &message) } - bool isTransferComplete = fragmentTracker_.isComplete(); - if( isTransferComplete ) + if( isTransferComplete() ) { // Make sure the user won't get a "transfer complete" message // followed by a "contact aborted" message. @@ -214,14 +151,17 @@ void P2PApplication::contactAborted(const QString &message) // - kmess will ack it with a temporary p2p session. kWarning() << "not displaying message because data transfer is complete. " "The switchboard was likely closed after receiving all data. " - "(state=" << waitingState_ << + "(state=" << (int) getWaitingState() << " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=endapplicationlater)" << endl; + " action=endapplicationlater)"; } else { + // Remove the accept links + modifyOfferMessage(); + if( message.isEmpty() ) { showEventMessage( getContactAbortMessage(), ChatMessage::CONTENT_APP_CANCELED, true ); @@ -269,7 +209,7 @@ void P2PApplication::contactStarted1_ContactInvitesUser(const MimeMessage &messa kWarning() << "The contact sent an MSNSLP invitation type KMess can't handle yet " "(euf-guid=" << slpMimeBody.getValue("EUF-GUID") << " appid=" << slpMimeBody.getValue("AppID") << - " action=send500)." << endl; + " action=send500)."; // Display a warning to the user showSystemMessage( i18n("The contact initiated a MSN6 feature KMess can't handle yet."), ChatMessage::CONTENT_SYSTEM_NOTICE, true ); @@ -299,72 +239,6 @@ void P2PApplication::contactStarted4_ContactConfirmsPreparation() -/** - * @brief Scheduelle termination, but wait for last incoming packets - */ -void P2PApplication::endApplicationLater() -{ -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "setting timeout to destroy object, allow contact to send a final message."; -#endif - - // If a transfer was active, make sure it ends. - abortDataSending(); - - if( waitingState_ != P2P_WAIT_END_APPLICATION ) - { - // Test if there are still unacked messages (make sure it's only tested once). - // This is done explicitly before the data transfer ends. - testUnAckedMessages( false ); - } - - // Set timeout to destroy - waitingState_ = P2P_WAIT_END_APPLICATION; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_DESTROY ); - - // Set flag to avoid second attempts. - setClosing( true ); -} - - - -/** - * @brief Private utility function to generate an Session and message/sequence ID. - * @return A random value between 4 and 4294967295. - */ -unsigned long P2PApplication::generateID() -{ - return (rand() & 0x00FFFFFC); -} - - - -/** - * @brief Private utility function to generate a Call ID or Branch ID. - * @return A randomly generated GUID value. - */ -QString P2PApplication::generateGUID() -{ - // This code is based on Kopete, but much shorter. - QString guid = "{" - + QString::number((rand() & 0xAAFF) + 0x1111, 16) - + QString::number((rand() & 0xAAFF) + 0x1111, 16) - + "-" - + QString::number((rand() & 0xAAFF) + 0x1111, 16) - + "-" - + QString::number((rand() & 0xAAFF) + 0x1111, 16) - + "-" - + QString::number((rand() & 0xAAFF) + 0x1111, 16) - + "-" - + QString::number((rand() & 0xAAFF) + 0x1111, 16) - + QString::number((rand() & 0xAAFF) + 0x1111, 16) - + QString::number((rand() & 0xAAFF) + 0x1111, 16) - + "}"; - return guid.toUpper(); -} - - - /** * @brief Return the identifier the SLP INVITE message. * @return The Branch-ID value from the SLP INVITE message. @@ -416,35 +290,6 @@ unsigned long P2PApplication::getInvitationSessionID() const -/** - * @brief Return the message ID used in the previous message from the contact. - * - * This value is used to match fragmented messages. - * It's the second field of the binary P2P header. - * - * @return The message ID field used in the binary P2P header. - */ -unsigned long P2PApplication::getLastContactMessageID() const -{ - return lastIncomingMessage_.messageID; -} - - - -/** - * @brief Returns the nonce that's being expected. - * - * This value is used to authenticate the direct connection. - * - * @return The Nonce value; a randonly generated GUID. - */ -const QString & P2PApplication::getNonce() const -{ - return nonce_; -} - - - /** * @brief Return the session ID, this identifies the P2P session. * @@ -461,128 +306,6 @@ unsigned long P2PApplication::getSessionID() const -/** - * @brief Find the unacked message which corresponds with the received P2P ACK message. - * - * This method compares the binary P2P fields to find the original message which was sent. - * The returned 'messageType' field is used later in gotAck() to handle ACKs for some specific messages. - * - * @param ackMessage The ACK message to test for. - * @return The meta information about the original message ACKed by the contact. - */ -P2PApplication::UnAckedMessage * P2PApplication::getUnAckedMessage(const P2PMessage &ackMessage) const -{ -#ifdef KMESSTEST - KMESS_ASSERT( ackMessage.getFlags() != 0 && ackMessage.getDataSize() == 0 ); -#endif - - unsigned long ackSessionID = ackMessage.getAckSessionID(); // ackSid - unsigned long ackUniqueID = ackMessage.getAckUniqueID(); // ackUid - unsigned long ackFlag = ackMessage.getFlags(); - - foreach( UnAckedMessage *unAcked, outgoingMessages_ ) - { - // This works for normal ACKs (0x02) to P2P messages. - // Ack message | original message - // ----------------------------------------- - // ackSid = messageID - // ackUid = ackSid - // ackSize = size - if( ackUniqueID == unAcked->ackSessionID ) - { -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "message is matched, option 1: " - "ackUniqueID = original uniqueID " << ackUniqueID << "." << endl; -#endif -#ifdef KMESSTEST - KMESS_ASSERT( ackFlag == P2PMessage::MSN_FLAG_ACK ); -#endif - // Found it, save reference - return unAcked; - } - - - // This works for control messages (like 0x08): - // uniqueID is reffers to uniqueID of original message. - // Ack message | original message - // ----------------------------------------- - // total = total - // ackSid = ackSid - // ackUid = 0 - // ackSize = 0 - if( ackSessionID == unAcked->ackSessionID && ackUniqueID == 0 ) - { -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "message is matched, option 2: " - "ackSessionID = original uniqueID " << ackSessionID << "." << endl; -#endif -#ifdef KMESSTEST - KMESS_ASSERT( ackFlag == P2PMessage::MSN_FLAG_ERROR ); -#endif - // Found it, save reference - return unAcked; - } - - // Also attempt to match on the messageID alone if: - // - it's a 0x80 message. In this case sendP2PMessage() has overwritten the previous uniqueID. - // - the UniqueID is not set. (also happens with normal ack messages in GAIM 1.5). - // - // This happens with 0x01 control messages: - // Ack message | original message - // ----------------------------------------- - // ackSid = messageID - // ackUid = 0 - // ackSize = bytepos - // - // This happens with 0x80 messages: - // Ack message | original message - // ----------------------------------------- - // ackSid = messageID - // ackUid = new - // ackSize = size - if( ackSessionID == unAcked->messageID - && ( ackFlag == P2PMessage::MSN_FLAG_ABORTED_RECEIVING || ackUniqueID == 0 ) ) - { -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "message is matched, option 3: " - "ackMessageID = original messageID " << ackSessionID << "." << endl; -#endif -#ifdef KMESSTEST - KMESS_ASSERT( ackFlag == P2PMessage::MSN_FLAG_ABORTED_RECEIVING - || ackFlag == P2PMessage::MSN_FLAG_NEGATIVE_ACK ); -#endif - - // Found it, save reference - return unAcked; - } - } - - return 0; -} - - - -/** - * @brief Find the unacked message which corresponds with given message type. - * - * @param messageType The P2P message type. - * @return The message unacked message details. - */ -P2PApplication::UnAckedMessage * P2PApplication::getUnAckedMessage(const P2PMessageType messageType) const -{ - foreach( UnAckedMessage *unAcked, outgoingMessages_ ) - { - if( unAcked->messageType == messageType ) - { - return unAcked; - } - } - - return 0; -} - - - /** * @brief Parse the received ACK message. * @@ -601,8 +324,8 @@ P2PApplication::UnAckedMessage * P2PApplication::getUnAckedMessage(const P2PMess * - ACK of a SLP error message invokes gotAck_slpError(). * - all other ACKs are not treated specially. * - * @param message The ACK message. - * @param messageType The type of the original message this ACK corresponds with. + * @param message The ACK message. + * @param ackedMessageType The type of the original message this ACK corresponds with. */ void P2PApplication::gotAck(const P2PMessage &message, const P2PMessageType ackedMessageType) { @@ -724,27 +447,27 @@ void P2PApplication::gotAck(const P2PMessage &message, const P2PMessageType acke #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Got an ACK message. " - "waitingState=" << waitingState_ << " ackedMessageType=" << ackedMessageType << "." << endl; + "waitingState=" << (int) getWaitingState() << " ackedMessageType=" << ackedMessageType << "."; #endif // Avoid warnings when we're waiting for something else, and the ACK is not important. - if( waitingState_ == P2P_WAIT_FOR_CONNECTION ) + if( isWaitingState( P2P_WAIT_FOR_CONNECTION ) ) { #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "No special action taken (waiting for a connection)."; #endif } - else if( waitingState_ != P2P_WAIT_DEFAULT || ackedMessageType != P2P_MSG_UNKNOWN ) + else if( ackedMessageType != P2P_MSG_UNKNOWN || ! isWaitingState( P2P_WAIT_DEFAULT ) ) { // Unexpected, this should be a normal ACK message. #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kWarning() << "Unhandled state for ACK message:" - " waitingState=" << waitingState_ << " ackedMessageType=" << ackedMessageType << "!" << endl; + " waitingState=" << (int) getWaitingState() << " ackedMessageType=" << ackedMessageType << "!"; #endif // If we were waiting: the timer is stopped and // we forgot an if-block in this method. // So make sure the object will still be killed eventually. - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_DATA ); + setWaitingState( getWaitingState(), P2PAPPLICATION_TIMEOUT_DATA ); return; } } @@ -761,10 +484,12 @@ void P2PApplication::gotAck(const P2PMessage &message, const P2PMessageType acke void P2PApplication::gotAck_dataPreparation() { #ifdef KMESSTEST - KMESS_ASSERT( waitingState_ == P2P_WAIT_FOR_PREPARE_ACK || waitingState_ == P2P_WAIT_FOR_CONNECTION ); + KMESS_ASSERT( isWaitingState( P2P_WAIT_FOR_PREPARE_ACK ) || isWaitingState( P2P_WAIT_FOR_CONNECTION ) ); #endif - waitingState_ = P2P_WAIT_DEFAULT; + // Temporary switch state, if the derived class + // sends a message this state will be changed. + setWaitingState( P2P_WAIT_DEFAULT, 0 ); // This should happen after the data preparation message is sent. @@ -778,11 +503,10 @@ void P2PApplication::gotAck_dataPreparation() "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=send0x08)." << endl; + " action=send0x08)."; // Send error back. - shouldSendAck_ = true; // ASSERT in sendP2PAck would fail otherwise - sendP2PAck(P2PMessage::MSN_FLAG_ERROR); + sendP2PAbort(); showEventMessage( i18n("The invitation was cancelled. The contact sent bad data, or KMess doesn't support it."), ChatMessage::CONTENT_APP_CANCELED, false ); endApplicationLater(); @@ -791,15 +515,14 @@ void P2PApplication::gotAck_dataPreparation() // Keep waiting if a direct connection setup is about to be complete. - if( hasUnAckedMessage(P2P_MSG_TRANSFER_OK) ) + if( hasUnAckedMessage( P2P_MSG_TRANSFER_OK ) ) { #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Application is waiting for a 200 transfer OK ACK, " - "not initiating transfer yet." << endl; + "not initiating transfer yet."; #endif - waitingState_ = P2P_WAIT_FOR_TRANSFER_ACK; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_SLP ); + setWaitingState( P2P_WAIT_FOR_TRANSFER_ACK, P2PAPPLICATION_TIMEOUT_SLP ); return; } @@ -818,18 +541,17 @@ void P2PApplication::gotAck_dataPreparation() void P2PApplication::gotAck_dataReceived() { #ifdef KMESSTEST - KMESS_ASSERT( waitingState_ == P2P_WAIT_FOR_DATA_ACK ); + KMESS_ASSERT( isWaitingState( P2P_WAIT_FOR_DATA_ACK ) ); #endif if(isUserStartedApp()) { #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "All data sent and confirmed, " - "sending BYE message..." << endl; + "sending BYE message..."; #endif // We sent the INVITE, now we send the BYE. - waitingState_ = P2P_WAIT_DEFAULT; sendSlpBye(); // All data was acked @@ -842,7 +564,7 @@ void P2PApplication::gotAck_dataReceived() { #ifdef gotAck_dataReceived kDebug() << "All data sent and confirmed, " - "waiting for BYE message..." << endl; + "waiting for BYE message..."; #endif // All data was acked, this is good enough. @@ -851,9 +573,7 @@ void P2PApplication::gotAck_dataReceived() // The other contact sent the INVITE, so we also wait for the BYE message. // This happens for msnobject transfers for example. - - waitingState_ = P2P_WAIT_FOR_SLP_BYE; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_SLP ); + setWaitingState( P2P_WAIT_FOR_SLP_BYE, P2PAPPLICATION_TIMEOUT_SLP ); } } @@ -867,27 +587,11 @@ void P2PApplication::gotAck_dataReceived() void P2PApplication::gotAck_slpBye() { #ifdef KMESSTEST - KMESS_ASSERT( waitingState_ == P2P_WAIT_FOR_SLP_BYE_ACK ); + KMESS_ASSERT( isWaitingState( P2P_WAIT_FOR_SLP_BYE_ACK ) ); #endif - // See if the data was not acked. - UnAckedMessage *unAckedDataMessage = getUnAckedMessage( P2P_MSG_DATA ); - if( unAckedDataMessage != 0 ) - { -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Data was not acked, sending 0x40 to abort ack request."; -#endif - - // It's possible WLM also closed it's data stream at this point, - // so ignores the 0x40 and sends a 0x80 at the same time back. - sendP2PAck( P2PMessage::MSN_FLAG_ABORTED_SENDING, unAckedDataMessage ); - - // Remove from collection - outgoingMessages_.removeAll( unAckedDataMessage ); - delete unAckedDataMessage; - } - - waitingState_ = P2P_WAIT_DEFAULT; + // Test whether the data transfer to the contact was aborted. + testDataSendingAborted(); // Session complete. endApplicationLater(); @@ -904,9 +608,8 @@ void P2PApplication::gotAck_slpBye() void P2PApplication::gotAck_slpError() { #ifdef KMESSTEST - KMESS_ASSERT( waitingState_ == P2P_WAIT_FOR_SLP_ERR_ACK ); + KMESS_ASSERT( isWaitingState( P2P_WAIT_FOR_SLP_ERR_ACK ) ); #endif - waitingState_ = P2P_WAIT_DEFAULT; if(! isUserStartedApp()) { @@ -915,8 +618,7 @@ void P2PApplication::gotAck_slpError() #endif // We wait for the BYE - waitingState_ = P2P_WAIT_FOR_SLP_BYE; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_SLP ); + setWaitingState( P2P_WAIT_FOR_SLP_BYE, P2PAPPLICATION_TIMEOUT_SLP ); } else { @@ -943,8 +645,7 @@ void P2PApplication::gotAck_slpSessionInvitation() #endif // Continue to wait for the contact to send the accept message (SLP OK). - waitingState_ = P2P_WAIT_CONTACT_ACCEPT; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_ACCEPT ); + setWaitingState( P2P_WAIT_CONTACT_ACCEPT, P2PAPPLICATION_TIMEOUT_ACCEPT ); // note KMess uses a fixed time user to accept/decline here. // WLM8 has no timeout here for file transfer. @@ -959,11 +660,6 @@ void P2PApplication::gotAck_slpSessionInvitation() */ void P2PApplication::gotAck_slpSessionOk() { - // Reset, will be changed by initiateTransfer->contactStarted3..->sendDataPreparationAck. - // TODO: rewrite the sending of the data-preparation message using the incoming/outgoing queue. - waitingState_ = P2P_WAIT_DEFAULT; - - // This should happen after the "200 OK" message is sent. // If the user started the inviation, @@ -971,43 +667,46 @@ void P2PApplication::gotAck_slpSessionOk() if( isUserStartedApp() ) { // We received an 200 OK ACK but didn't expect it. + // This is very unlikely, but still prevent worse situations when contactStarted3_.. is invoked(). kWarning() << "P2P message can't be handled, " "this ack is not expected for applications started by the user " "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=send0x08)." << endl; - // TODO: cancel session in a different way, can't respond with ACKs on ACKs. - shouldSendAck_ = true; // ASSERT in sendP2PAck would fail otherwise - sendP2PAck(P2PMessage::MSN_FLAG_ERROR); - + " action=send0x08)."; + // Show message showEventMessage( i18n("The invitation was cancelled. The contact sent bad data, or KMess doesn't support it."), ChatMessage::CONTENT_APP_CANCELED, false ); - endApplicationLater(); + + // Abort + sendCancelMessage( CANCEL_ABORT ); return; } + // Reset, will be changed by initiateTransfer->contactStarted3..->sendDataPreparationAck. + // TODO: rewrite the sending of the data-preparation message using the incoming/outgoing queue. + setWaitingState( P2P_WAIT_DEFAULT, 0 ); + // SLP OK message ACKed // For P2P apps, we can't prove any mime fields here, so an empty constructor is what's left.. // This is where the data preparation ACK could be sent. - contactStarted3_ContactConfirmsAccept(MimeMessage()); + contactStarted3_ContactConfirmsAccept( MimeMessage() ); #ifdef KMESSTEST - KMESS_ASSERT( waitingState_ == P2P_WAIT_DEFAULT || waitingState_ == P2P_WAIT_FOR_PREPARE_ACK ); + KMESS_ASSERT( isWaitingState( P2P_WAIT_DEFAULT ) || isWaitingState( P2P_WAIT_FOR_PREPARE_ACK ) ); #endif // If the contactStarted3() didn't sent anything, we'll wait for incoming file data. - if(waitingState_ == P2P_WAIT_DEFAULT) + if( isWaitingState( P2P_WAIT_DEFAULT ) ) { #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Waiting state not changed, " - "waiting for file data..." << endl; + "waiting for file data..."; #endif // For Pictures, the contact must send the data preparation ACK at this point (P2P_WAIT_FOR_PREPARE_ACK) // For Files, the contact must initiate the data transfer now. (P2P_WAIT_DEFAULT) - waitingState_ = P2P_WAIT_FOR_FILE_DATA; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_DATA ); + setWaitingState( P2P_WAIT_FOR_FILE_DATA, P2PAPPLICATION_TIMEOUT_DATA ); } } @@ -1022,10 +721,10 @@ void P2PApplication::gotAck_slpSessionOk() void P2PApplication::gotAck_slpTransferDecline() { #ifdef KMESSTEST - KMESS_ASSERT( waitingState_ == P2P_WAIT_FOR_SLP_ERR_ACK || waitingState_ == P2P_WAIT_FOR_FILE_DATA ); + KMESS_ASSERT( isWaitingState( P2P_WAIT_FOR_SLP_ERR_ACK ) || isWaitingState( P2P_WAIT_FOR_FILE_DATA ) ); #endif - if( waitingState_ == P2P_WAIT_FOR_FILE_DATA || ! fragmentTracker_.isEmpty() ) + if( isTransferActive() || isWaitingState( P2P_WAIT_FOR_FILE_DATA ) ) { #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Got ack while data transfer is already active."; @@ -1038,8 +737,7 @@ void P2PApplication::gotAck_slpTransferDecline() #endif // Continue to wait for the contact to send the file data - waitingState_ = P2P_WAIT_FOR_FILE_DATA; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_DATA ); + setWaitingState( P2P_WAIT_FOR_FILE_DATA, P2PAPPLICATION_TIMEOUT_DATA ); } } @@ -1056,12 +754,11 @@ void P2PApplication::gotAck_slpTransferInvitation() kDebug() << "Waiting for 200 OK message..."; #endif #ifdef KMESSTEST - KMESS_ASSERT( waitingState_ == P2P_WAIT_FOR_INVITE_TR_ACK ); + KMESS_ASSERT( isWaitingState( P2P_WAIT_FOR_INVITE_TR_ACK ) ); #endif // Continue to wait for the contact to send the accept message (SLP OK). - waitingState_ = P2P_WAIT_FOR_TRANSFER_ACCEPT; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_ACCEPT ); + setWaitingState( P2P_WAIT_FOR_TRANSFER_ACCEPT, P2PAPPLICATION_TIMEOUT_ACCEPT ); // note KMess uses a fixed time user to accept/decline here. // WLM8 has no timeout here for file transfer. @@ -1079,22 +776,23 @@ void P2PApplication::gotAck_slpTransferOk() { // For some reason, our "MSNSLP/1.0 200 OK" message can be ACKed when we just ACKed all data is received. // Detect this, otherwise the chat window is filled with "File transfer complete.. Contact aborted" messages. - if( waitingState_ == P2P_WAIT_FOR_SLP_BYE || fragmentTracker_.isComplete() ) + if( isTransferComplete() || isWaitingState( P2P_WAIT_FOR_SLP_BYE ) ) { kWarning() << "Received ACK for 'transrespbody' message " "while closing the session " - "(state=" << waitingState_ << + "(state=" << (int) getWaitingState() << " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=return)." << endl; + " action=return)."; // Make sure the timer starts again. - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_SLP ); + setWaitingState( getWaitingState(), P2PAPPLICATION_TIMEOUT_SLP ); return; } - waitingState_ = P2P_WAIT_DEFAULT; + // Temporary switch the waiting state. + setWaitingState( P2P_WAIT_DEFAULT, 0 ); // This should happen after the "200 OK" message is sent. @@ -1104,7 +802,7 @@ void P2PApplication::gotAck_slpTransferOk() { #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "No connection attempts were made, " - "so starting transfer immediately." << endl; + "so starting transfer immediately."; #endif // TODO: the contact may actually send an INVITE back to become the server. initiateTransfer(); @@ -1113,36 +811,91 @@ void P2PApplication::gotAck_slpTransferOk() { #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "200 transfer OK ACK received, " - "but waiting for connection attempts to succeed or fail..." << endl; + "but waiting for connection attempts to succeed or fail..."; #endif } // If the contactStarted3() didn't sent anything, we'll wait for incoming file data. - if(waitingState_ == P2P_WAIT_DEFAULT) + if( isWaitingState( P2P_WAIT_DEFAULT ) ) { #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Waiting state not changed, " - "waiting for file data..." << endl; + "waiting for file data..."; #endif // At some slow systems, it seams WLM can already start // the data transfer before waiting for a connection. - if( ! fragmentTracker_.isEmpty() ) + if( isTransferActive() ) { - kWarning() << "already received " << - fragmentTracker_.getTransferredBytes() << " bytes before receiving the 200 transfer OK ACK " - "(state=" << waitingState_ << + kWarning() << "already received " << getTransferredBytes() << " bytes before receiving the 200 transfer OK ACK " + "(state=" << (int) getWaitingState() << " dc=" << applicationList_->hasDirectConnection() << " dcauth=" << applicationList_->hasAuthorizedDirectConnection() << " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=continue)." << endl; + " action=continue)."; } // For Files, the contact must initiate the data transfer now. (P2P_WAIT_DEFAULT) - waitingState_ = P2P_WAIT_FOR_FILE_DATA; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_DATA ); + setWaitingState( P2P_WAIT_FOR_FILE_DATA, P2PAPPLICATION_TIMEOUT_DATA ); + } +} + + + +/** + * @brief Called when data is received. + * + * This method should be overwritten in the derived class + * to store the data in a file, buffer, etc.. + * + * The order of the data fragments is not guaranteed by WLM, especially when it's switching to a direct connection. + * The writeP2PDataToFile() function can be used to cope with this behavour. + * Also don't rely on P2PMessage::isLastFragment() to determine when the transfer is complete. + * Overwrite showTransferComplete() instead. + * + * @param message The P2P message containing the data. + */ +void P2PApplication::gotData(const P2PMessage &/*message*/) +{ +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kWarning() << "Data not handeled by derived class."; +#endif +} + + + +/** + * @brief Called internally after all data is received. + * + * It determines how to continue the session. + */ +void P2PApplication::gotDataAckSent() +{ + // Determine what to send next + if(isUserStartedApp()) + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Application was started by the user, also send SLP BYE."; +#endif + + // Current state could be P2P_WAIT_FOR_FILE_DATA, but reset it here. + // Make the debugging clean. + setWaitingState( P2P_WAIT_DEFAULT, 0 ); + + // We sent the INVITE, now we send the BYE. + sendSlpBye(); + // Don't terminate yet, that message needs to be ACK-ed as well. + } + else + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Application was started by the contact, waiting for SLP BYE..."; +#endif + + // Otherwise we wait for the BYE + setWaitingState( P2P_WAIT_FOR_SLP_BYE, P2PAPPLICATION_TIMEOUT_SLP ); } } @@ -1171,7 +924,7 @@ void P2PApplication::gotDirectConnectionHandshake(const P2PMessage &message) "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=return)." << endl; + " action=return)."; return; } @@ -1193,7 +946,7 @@ void P2PApplication::gotDirectConnectionHandshake(const P2PMessage &message) " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=closeconnection)." << endl; + " action=closeconnection)."; #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Closing connection, moving transfer to switchboard."; @@ -1208,53 +961,53 @@ void P2PApplication::gotDirectConnectionHandshake(const P2PMessage &message) // If we're the server, we still need to send a handshake back #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Contact sent correct nonce, " - "sending direct connection handshake ACK." << endl; + "sending direct connection handshake ACK."; #endif #ifdef KMESSTEST - KMESS_ASSERT( waitingState_ == P2P_WAIT_FOR_HANDSHAKE || ! fragmentTracker_.isEmpty() ); + KMESS_ASSERT( isWaitingState( P2P_WAIT_FOR_HANDSHAKE ) || isTransferActive() ); #endif // KMess is the server, it should authenticate the handshake message. - sendDirectConnectionHandshake(); + sendDirectConnectionHandshake( nonce_ ); } else { // KMess is the client, it should verify the handshake response only. #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Contact sent correct nonce, " - "marking connection as authorized." << endl; + "marking connection as authorized."; #endif #ifdef KMESSTEST - KMESS_ASSERT( waitingState_ == P2P_WAIT_FOR_HANDSHAKE_OK || ! fragmentTracker_.isEmpty() ); + KMESS_ASSERT( isWaitingState( P2P_WAIT_FOR_HANDSHAKE_OK ) || isTransferActive() ); #endif // Detect when the contact sent a second INVITE, runs the direct connection server, but sends the nonce first. // This happened once with WLM8 after the data transfer because KMess didn't send the handshake. - if( waitingState_ == P2P_WAIT_FOR_HANDSHAKE ) + if( isWaitingState( P2P_WAIT_FOR_HANDSHAKE ) ) { kWarning() << "received nonce from contact first, " "but it's running the server" "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=send0x100)!" << endl; + " action=send0x100)!"; - sendDirectConnectionHandshake(); + sendDirectConnectionHandshake( nonce_ ); } } // See if the transfer was already started. - if( fragmentTracker_.isComplete() ) + if( isTransferComplete() ) { kWarning() << "connection is authorized " "but data transfer is already complete" - "(state=" << waitingState_ << + "(state=" << (int) getWaitingState() << " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=send0x100)!" << endl; + " action=send0x100)!"; } else { @@ -1262,7 +1015,9 @@ void P2PApplication::gotDirectConnectionHandshake(const P2PMessage &message) kDebug() << "marking connection as authorized, transfer should start."; #endif - waitingState_ = P2P_WAIT_FOR_FILE_DATA; + // Note this could be a reverse invitation. + + setWaitingState( P2P_WAIT_FOR_FILE_DATA, 0 ); // no timeout, happens by DirectConnectionPool. } // Mark connection as authorized @@ -1272,192 +1027,6 @@ void P2PApplication::gotDirectConnectionHandshake(const P2PMessage &message) -/** - * @brief Called when data is received. - * - * This method should be overwritten in the derived class - * to store the data in a file, buffer, etc.. - * - * The order of the data fragments is not guaranteed by WLM, especially when it's switching to a direct connection. - * The writeP2PDataToFile() function can be used to cope with this behavour. - * Also don't rely on P2PMessage::isLastFragment() to determine when the transfer is complete. - * Overwrite showTransferComplete() instead. - * - * @param message The P2P message containing the data. - */ -void P2PApplication::gotData(const P2PMessage &/*message*/) -{ -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kWarning() << "Data not handeled by derived class."; -#endif -} - - - -/** - * @brief Called internally when data is received, this eventually calls gotData() - * - * It validates the current state, calls showTransferProgress() and gotData(). - * After receiving the last message, it calls showTransferComplete() and sends the SLP BYE message if needed. - * - * @param message The received data message. - */ -void P2PApplication::gotDataFragment(const P2PMessage &message) -{ -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Received file data, calling gotData()."; -#endif -#ifdef KMESSDEBUG - KMESS_ASSERT( waitingState_ == P2P_WAIT_FOR_FILE_DATA ); -#endif - - unsigned long dataOffset = message.getDataOffset(); - - // See if the class is trying to abort. - // Avoid bothering the derived class with these issues. - if( waitingState_ == P2P_WAIT_FOR_SLP_BYE_ACK ) - { - kWarning() << "Still receiving data while BYE is sent " - "(contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=send0x08)." << endl; - sendP2PAck(P2PMessage::MSN_FLAG_ERROR); - return; - } - else if( waitingState_ == P2P_WAIT_FOR_SLP_BYE ) - { - // This actually happened when there were some delayed packets in the buffer with WLM. - // When switching bridges (SB/DC) it actually cannot guarantee the messages will be sent in order. - // This is visible at slow computers. - kWarning() << "Still receiving data while last fragment was received " - "(contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=send0x08)." << endl; - sendP2PAck(P2PMessage::MSN_FLAG_ERROR); - return; - } - - // See if data is already sent before establishing a connection. - // Happens with WLM, likely at slow computers. - if( dataOffset == 0 && ! applicationList_->hasDirectConnection() - && ( applicationList_->hasPendingConnections() || applicationList_->hasPendingConnectionInvitation() ) ) - { - kWarning() << "Contact is already sending data " - "while attempting to establish a direct connection " - "(state=" << waitingState_ << - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=continue)." << endl; - } - - // Initialize at the first message - if( dataOffset == 0 ) - { - fragmentTracker_.initialize( message.getMessageID(), message.getTotalSize() ); - } - else - { - // Check if the new data fragment belongs to the current one. - if( ! fragmentTracker_.isInitialized( message.getMessageID() ) ) - { - // Send negative ack message, like WLM does (0x01) - kWarning() << "Received unexpected offset for message " - "(offset=" << dataOffset << - " messageID=" << message.getMessageID() << - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=send0x01)." << endl; - sendP2PAck(P2PMessage::MSN_FLAG_NEGATIVE_ACK); - sendCancelMessage( CANCEL_FAILED ); // sends slp bye - return; - } - } - - // Update the tracker - fragmentTracker_.registerFragment( message.getDataOffset(), message.getDataSize() ); - - // Dispatch the message to the derived class - showTransferProgress( fragmentTracker_.getTransferredBytes() ); - gotData(message); - - // See if the transfer should be complete now. - bool isComplete = fragmentTracker_.isComplete(); - if( ! isComplete ) - { - // Wait for more data to arrive. - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_MOREDATA ); - - if( message.isLastFragment() ) - { -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Got the last fragment, " - "but some messages are not received yet." << endl; - kDebug() << "Current message is " << fragmentTracker_.getDebugMap(); -#endif - shouldSendAck_ = false; // could be true if received out of order. - } - } - else - { -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Got the last fragment. About to send ACK, but calling showTransferComplete() first so it can still abort."; -#endif - - // After all data is received, ACK it and send the BYE - shouldSendAck_ = true; // could be false if received out of order. - - // Signal derived class the transfer is complete - // By calling this first, the derived class can confirm the data transfer was successful. - showTransferComplete(); - - // If the derived class didn't send a message, send the ACK. - if( shouldSendAck_ ) - { - // TODO: if the messages were received out of order, should we ACK the final message instead? - sendP2PAck(); - } - - // For datacast applications (ink), request termination immediately. - if( getMode() == APP_MODE_DATACAST ) - { -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Application is a datacast handler, request termination immediately."; -#endif - endApplication(); - return; - } - - // Determine what to send next - if(isUserStartedApp()) - { -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Application was started by the user, also send SLP BYE."; -#endif - - // We sent the INVITE, now we send the BYE. - waitingState_ = P2P_WAIT_DEFAULT; - sendSlpBye(); - // Don't terminate yet, that message needs to be ACK-ed as well. - } - else - { -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Application was started by the contact, waiting for SLP BYE..."; -#endif - - // Otherwise we wait for the BYE - waitingState_ = P2P_WAIT_FOR_SLP_BYE; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_SLP ); - } - } -} - - - /** * @brief Called when the data preparation message is received. * @@ -1473,44 +1042,43 @@ void P2PApplication::gotDataPreparation(const P2PMessage &/*message*/) kDebug() << "Got the data preparation message"; #endif #ifdef KMESSTEST - KMESS_ASSERT( shouldSendAck_ ); + KMESS_ASSERT( ! isP2PAckSent() ); // WLM invites for a DC first before sending the data preparation. // Since KMess declines this with a 603, P2P_WAIT_FOR_SLP_ERR_ACK is also a valid state here. - KMESS_ASSERT( waitingState_ == P2P_WAIT_FOR_PREPARE || waitingState_ == P2P_WAIT_FOR_SLP_ERR_ACK ); + KMESS_ASSERT( isWaitingState( P2P_WAIT_FOR_PREPARE ) || isWaitingState( P2P_WAIT_FOR_SLP_ERR_ACK ) ); #endif // Tell the derived class it can send the data. // You typically want to call sendDataPreparation() or sendCancelMessage() here. // sendDataPreparationAck() only sets a boolean, so we're able to send the - // correct ack or error message here. - // The methods changes one the following variables: - shouldSendAck_ = true; + // correct ack or error message here. The methods changes one the following variable: userShouldAcknowledge_ = true; + // Let the derived class call the methods. initiateTransfer(); - - // sendDataPreparation() was not called, determine now what to send: - if(userShouldAcknowledge_) + // if sendDataPreparation() was not called, determine now what to send: + if( userShouldAcknowledge_ ) { kDebug() << "Handling of data preparation failed " - "(contact=" << getContactHandle() << " action=send0x08)" << endl; + "(contact=" << getContactHandle() << " action=send0x08)"; // Derived class still didn't acknowledge or cancel at all // (both disable userShouldAcknowledge_). This shouldn't occur! // Reject the data-preparation message - sendP2PAck(P2PMessage::MSN_FLAG_ERROR); showEventMessage( i18n("The transfer failed. Data preparation failed."), ChatMessage::CONTENT_APP_FAILED, false ); - endApplicationLater(); + + // Initiate abort. + sendP2PAbort(); return; } // If the user did acknowledge something, we no longer have to send an ack any more - // it must have been sendCancelMessage(CANCEL_ABORT) calling sendP2PAck(P2PMessage::MSN_FLAG_ERROR). - if(! shouldSendAck_) + // it must have been sendCancelMessage(CANCEL_ABORT) calling sendP2PAbort(). + if( isP2PAckSent() ) { // No error message here, assume your derived class already displayed something. // If sendP2PAck() was called, the app won't terminate, so end it now. @@ -1534,454 +1102,7 @@ void P2PApplication::gotDataPreparation(const P2PMessage &/*message*/) kDebug() << "Waiting for file data to arrive..."; #endif - waitingState_ = P2P_WAIT_FOR_FILE_DATA; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_DATA ); -} - - - -/** - * @brief Called when a P2P message was received with the error-flag set. - * - * This method aborts the application by calling contactAborted(). - * - * @param message The received error message. - */ -void P2PApplication::gotErrorAck(const P2PMessage &message) -{ -#ifdef KMESSTEST - KMESS_ASSERT( message.getDataSize() == 0 ); - - if( message.isNegativeAck() ) - { - KMESS_ASSERT( message.getTotalSize() == 0 ); - } - else if( message.isError() ) - { - KMESS_ASSERT( message.getTotalSize() != 0 ); - } - - KMESS_ASSERT( message.getAckSessionID() != 0 ); - KMESS_ASSERT( message.getAckUniqueID() == 0 ); - KMESS_ASSERT( message.getAckDataSize() == 0 ); -#endif - - // When the contact aborted, it could send some 0x08 messages back for the - // next fragments which were already sent (e.g. already in the DC at that time). - // Ignore these error messages. - if( isClosing() ) - { -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Got an P2P error-response while closing " - "(flag=0x" << QString::number( message.getFlags(), 16 ) << - ", ignoring message)." << endl; -#endif - - // Make sure the timer resumes. - endApplicationLater(); - return; - } - - if( message.isNegativeAck() ) - { - // Received when the transfer failed, e.g. write errors at the direct connection. - kWarning() << "Got an unexpected P2P error-response " - "(flag=nak" << - " byte=" << message.getDataSize() << - " state=" << waitingState_ << - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=continue)." << endl; - - abortDataSending(); - -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Waiting for contact to send a BYE message."; -#endif - - waitingState_ = P2P_WAIT_FOR_SLP_BYE; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_SLP ); - } - else - { - // Error in our headers? - kWarning() << "Got an unexpected P2P error-response " - "(flag=0x" << QString::number( message.getFlags(), 16 ) << - " state=" << waitingState_ << - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=contactaborted)." << endl; - - - if( dataType_ == P2P_TYPE_NEGOTIATION && ! P2P_WAIT_FOR_DATA_ACK ) - { - // We likely made an error in the invitation/bye reponse - contactAborted( i18n("The contact rejected the invitation. An internal error occured.") ); - } - else - { - // TODO: make this error custom. - // We were sending or receiving a file/picture - // Can also happen if the contact can't handle our data for a different reason. - contactAborted( i18n("The transfer failed.") ); - } - } -} - - - -/** - * @brief Main entry function for incoming incoming messages. - * - * This method receives the incoming P2P messages, analyses it's - * flags and delivers it to various handling methods: - * - ACK messages are delivered to gotAck(), gotDirectConnectionHandshake(), gotErrorAck() or gotTimeoutAck(). - * - SLP negotiation messages are delivered to gotNegotiationFragment(). - * - P2P data preparation messages are delivered to gotDataPreparation(). - * - P2P data messages are delivered to gotDataFragment(). - * - * Other P2P messages are rejected with an error message. - * - * @param p2pMessage A reference to a P2PMessage object. - */ -void P2PApplication::gotMessage(const P2PMessage &p2pMessage) -{ - // Reset session variables. - waitingTimer_->stop(); // stop timer - gotSlpMessage_ = false; // tell this is not a slp message until proven otherwise - -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - if( getMode() == APP_MODE_DATACAST ) - { - // Special case, abuse of P2P system - kDebug() << "P2P message from " << getContactHandle() << " is handled by a datacast session."; - } - else if( nextMessageID_ == 0 ) - { - // No messages sent, new application - kDebug() << "P2P message from " << getContactHandle() << " is handled by a newly created session."; - } - else - { - // s/found/received/ since ApplicationList::gotMessage() finds it, but this makes it easier to filter the logs. - kDebug() << "New P2P message from " << getContactHandle() << " is handled by session " << sessionID_ << "."; - } -#endif - - // Cancel termination if a new message is received - // while the application was already scheduelled to be closed. - // Ignore typical messages which are sent while a transfer is aborting. - if( waitingState_ == P2P_WAIT_END_APPLICATION - && ! p2pMessage.isError() - && ! p2pMessage.isAbortedReceivingAck() - && ! p2pMessage.isAbortedSendingAck() ) - { - kWarning() << "received another message while awaiting termination " - "(flags=0x" << QString::number( p2pMessage.getFlags(), 16 ) << - " size=" << p2pMessage.getDataSize() << - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=unsetclosing)." << endl; - - // Don't reset the waiting state. should happen by next method which responds to the message. - // It could be a SLP BYE for example or "481 No Such Call". - aborting_ = false; - setClosing( false ); - } - - - // If this object was initialized to handle a Bad packet. - if( getMode() == APP_MODE_ERROR_HANDLER ) - { - // Make an exception for SLP packets - bool isSlpMessage = (p2pMessage.getSessionID() == 0 && - p2pMessage.getDataSize() > 20 && // for cvs produced data-preparation messages without a session-id - p2pMessage.getFlags() == 0); - if(! isSlpMessage) - { - // We received an unknown control message, this object was initialized to send the correct response. - shouldSendAck_ = true; // ASSERT in sendP2PAck would fail otherwise - sendP2PAck(P2PMessage::MSN_FLAG_ERROR); - showEventMessage( i18n("The invitation was cancelled. The contact sent bad data, or KMess doesn't support it."), ChatMessage::CONTENT_APP_CANCELED, ! isUserStartedApp() ); - endApplication(); - return; - } - } - - - // Handle ACKs before everything else. - if( p2pMessage.getDataSize() == 0 ) // HACK: for Bot2K3 4.1: no testing for flags - { - UnAckedMessage *unAcked = getUnAckedMessage(p2pMessage); - P2PMessageType ackedMessageType = P2P_MSG_UNKNOWN; - if( unAcked == 0 ) - { - if( p2pMessage.isAck() ) // other messages can't relate have the control flags set. - { - kWarning() << "Unable to handle ACK message, " - "original message not found " - "(flags=0x" << QString::number(p2pMessage.getFlags(), 16) << - " size=0 state=" << waitingState_ << - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=return)." << endl; - return; - } - } - else - { - // Remove record - // Avoids that hasUnAckedMessage() returns the message we just received. - ackedMessageType = unAcked->messageType; - outgoingMessages_.removeAll( unAcked ); - delete unAcked; - } - - - if( p2pMessage.isAck() ) // 0x02 - { - gotAck( p2pMessage, ackedMessageType ); - } - else if(p2pMessage.isConnectionHandshake()) // 0x100 - { - gotDirectConnectionHandshake( p2pMessage ); - } - else if(p2pMessage.isNegativeAck()) // 0x01 - { - gotErrorAck( p2pMessage ); - } - else if(p2pMessage.isWaitingForReply()) // 0x04 - { - gotTimeoutAck( p2pMessage ); - } - else if(p2pMessage.isWaitingForAck()) // 0x06 - { - gotTimeoutAck( p2pMessage ); - } - else if(p2pMessage.isError()) // 0x08 - { - gotErrorAck( p2pMessage ); - } - else if(p2pMessage.isAbortedSendingAck()) // 0x40 - { - gotTransferAbortedAck( p2pMessage ); - } - else if(p2pMessage.isAbortedReceivingAck()) // 0x80 - { - gotTransferAbortedAck( p2pMessage ); - } - else - { - kWarning() << "Unable to handle ACK message, " - "unknown flag value encountered " - "(flags=0x" << QString::number(p2pMessage.getFlags(), 16) << - " size=0 state=" << waitingState_ << - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=assumerror)." << endl; - - // Make sure the application does abort somehow. - gotErrorAck( p2pMessage ); - } - - return; - } - - - // Send the ack if needed (also applies to INVITE messages) - shouldSendAck_ = p2pMessage.isLastFragment(); - - // Store some message parameters for Acknowledgement later, or to send an error message. - // This should not be inserted in a if(shouldSendAck_) line, this info is used to resolve fragmented messages. - lastIncomingMessage_.dataSize = p2pMessage.getDataSize(); - lastIncomingMessage_.messageID = p2pMessage.getMessageID(); - lastIncomingMessage_.messageType = P2P_MSG_UNKNOWN; - lastIncomingMessage_.sentTime = 0; - lastIncomingMessage_.sessionID = p2pMessage.getSessionID(); - lastIncomingMessage_.totalSize = p2pMessage.getTotalSize(); - lastIncomingMessage_.ackSessionID = p2pMessage.getAckSessionID(); - - - // Special cases (abuse of the P2P system) - if( getMode() == APP_MODE_DATACAST ) - { - // Ink data, etc.. - gotDataFragment(p2pMessage); - return; - } - - - // Session ID is 0? -> the clients negotiate for session. - if(p2pMessage.getSessionID() == 0) - { - if(p2pMessage.getFlags() == 0) - { - // Parse the fragment - gotNegotiationFragment(p2pMessage); - } - else - { - kWarning() << "P2PApplication:gotMessage() - P2P message can't be handled, " - "unknown negotiation message type " - "(flags=0x" << QString::number(p2pMessage.getFlags(), 16) << - " size=" << p2pMessage.getDataSize() << - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=send0x08)." << endl; - - // Don't know what to do with a negotiation message with flags set. - sendP2PAck(P2PMessage::MSN_FLAG_ERROR); - - // Abort the application - showEventMessage( i18n("The transfer failed. The contact sent bad data, or KMess doesn't support it."), ChatMessage::CONTENT_APP_CANCELED, true ); - endApplicationLater(); - return; - } - } - // Session ID not zero? -> clients exchange data in the session - else - { - // Check for data preparation messages - if( p2pMessage.getFlags() == 0 - && p2pMessage.getDataSize() == 4 - && p2pMessage.getTotalSize() == 4 ) - { - gotDataPreparation(p2pMessage); - } - else if( waitingState_ != P2P_WAIT_FOR_FILE_DATA - && p2pMessage.isMsnObjectData() - && p2pMessage.getDataSize() == 4 - && p2pMessage.getTotalSize() == 4 ) - { - // HACK: added for Encarta Instant Answers (has data flag set with preparation message). - kWarning() << "Expecting data-preparation message, " - "got message of 4 bytes with incorrect flags " - "(assuming data preparation," - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << ")!" << endl; - gotDataPreparation(p2pMessage); - } - // Check for data messages - else if(p2pMessage.isMsnObjectData() - || p2pMessage.isFileData()) - { - gotDataFragment(p2pMessage); - } - else if(waitingState_ == P2P_WAIT_FOR_FILE_DATA - && p2pMessage.getFlags() == 0 - && p2pMessage.isFragment()) - { - // HACK: added for Kopete 0.9.2 code (has no flag set with data messages). - kWarning() << "Expecting data message, " - "got fragmented message with no flags set " - "(assuming file data," - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << ")!" << endl; - gotDataFragment(p2pMessage); - } - else - { - // Unknown p2p message - kWarning() << "P2P message can't be handled, " - "unknown data message type " - "(flags=0x" << QString::number(p2pMessage.getFlags(), 16) << - " size=" << p2pMessage.getDataSize() << - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=send0x08)." << endl; - - // Got an P2P binary message we can't handle. (some new kind of flag..?) - shouldSendAck_ = true; // ASSERT in sendP2PAck would fail otherwise - sendP2PAck(P2PMessage::MSN_FLAG_ERROR); - - // Abort the application - showEventMessage( i18n("The transfer failed. The contact sent bad data, or KMess doesn't support it."), ChatMessage::CONTENT_APP_CANCELED, true ); - endApplicationLater(); - return; - } - } - -#ifdef KMESSTEST - // At the end of this method, we should have sent the ACK..! - KMESS_ASSERT( ! shouldSendAck_ ); -#endif -} - - - -/** - * @brief Called when a SLP message fragment was received. - * - * The fragments is buffered until all parts are received. - * The gotNegotiationMessage() will be called afterwards. - * - * @param p2pMessage The received P2P message with SLP payload. - */ -void P2PApplication::gotNegotiationFragment(const P2PMessage &p2pMessage) -{ - if(! p2pMessage.isLastFragment()) - { - // Not everything received yet, buffer it. -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Got an SLP fragment, buffering it."; -#endif - - if(buffer_ == 0) - { - buffer_ = new QBuffer(); - buffer_->open(QIODevice::ReadWrite); - } - - buffer_->write( p2pMessage.getData(), p2pMessage.getDataSize() ); - } - else - { - // Read the message or buffer - QString slpData; - QByteArray bufferData; - - if(buffer_ != 0) - { -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Got the last SLP fragment."; -#endif - - // Append the last MSNSLP fraqment and call the method. - buffer_->write( p2pMessage.getData(), p2pMessage.getDataSize() ); - buffer_->reset(); - - // Read the buffer - bufferData = buffer_->readAll(); - slpData = QString::fromUtf8( bufferData.data(), bufferData.size() ); - - delete buffer_; - buffer_ = 0; - } - else - { - // Read the data directly from the message - slpData = QString::fromUtf8( p2pMessage.getData(), p2pMessage.getDataSize() ); - } - - // Remove the first preamble line, because it's not in MIME format. - // Parse the remaining as MIME fields. - int preambleEnd = slpData.indexOf("\r\n"); - QString preamble = slpData.left( (preambleEnd == -1) ? 20 : preambleEnd ); - QString slpMimePart = slpData.mid( (preambleEnd == -1) ? 0 : preambleEnd + 2 ); - MimeMessage slpMessage( slpMimePart ); - - // Parse the negotiation message - gotNegotiationMessage( slpMessage, preamble ); - } + setWaitingState( P2P_WAIT_FOR_FILE_DATA, P2PAPPLICATION_TIMEOUT_DATA ); } @@ -2052,7 +1173,7 @@ void P2PApplication::gotNegotiationMessage(const MimeMessage &slpMessage, const " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=send404)." << endl; + " action=send404)."; showEventMessage( i18n("The invitation was cancelled. Message was not directed to us."), ChatMessage::CONTENT_APP_CANCELED, true ); @@ -2098,14 +1219,13 @@ void P2PApplication::gotNegotiationMessage(const MimeMessage &slpMessage, const " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=send0x08)." << endl; + " action=send0x08)."; // Got an unknown SLP preamble - sendP2PAck( P2PMessage::MSN_FLAG_ERROR ); + sendP2PAbort(); // Abort the application showEventMessage( i18n("The invitation was cancelled. The contact sent bad data, or KMess doesn't support it."), ChatMessage::CONTENT_APP_CANCELED, true ); - endApplicationLater(); return; } } @@ -2167,19 +1287,16 @@ void P2PApplication::gotSlpAck(const MimeMessage &slpMessage ) #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Got SLP ACK message, usage is unknown. Message dump follows.\n" << slpMessage.getFields() << "\n" - << slpMessage.getBody() << endl; + << slpMessage.getBody(); #else Q_UNUSED( slpMessage ); #endif - bool emptySession = ( nextMessageID_ == 0 || getMode() == APP_MODE_ERROR_HANDLER ); + bool emptySession = ( ! isFirstMessageSent() || getMode() == APP_MODE_ERROR_HANDLER ); // This is some internal message of WLM8. // Accept it for now. - if(shouldSendAck_) - { - sendP2PAck(); - } + sendP2PAck(); // Also terminate this instance if it was just created for this SLP ACK messasge. if( emptySession ) @@ -2236,25 +1353,22 @@ void P2PApplication::gotSlpBye( const MimeMessage &slpMessage ) // means that both clients have finished sending, so don't issue errors. This fixes the double message // "transfer completed" followed by "transfer canceled" when sending files to Mercury Messenger. - if(shouldSendAck_) - { - sendP2PAck(); - } + sendP2PAck(); - bool isComplete = fragmentTracker_.isComplete(); // TODO: this only works for incoming data. + bool isComplete = isTransferComplete(); // TODO: this only works for incoming data. #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Got SLP BYE message, closing application " - "(state=" << waitingState_ << ")." << endl; + "(state=" << (int) getWaitingState() << ")."; #endif // Make sure the data is not sent anymore abortDataSending(); - if( waitingState_ != P2P_WAIT_FOR_SLP_BYE - && waitingState_ != P2P_WAIT_FOR_SLP_BYE_ACK - && waitingState_ != P2P_WAIT_FOR_DATA_ACK ) // HACK: added for Messenger for the Mac 6.0.3 and MSN 7.0 + if( ! isWaitingState( P2P_WAIT_FOR_SLP_BYE ) + && ! isWaitingState( P2P_WAIT_FOR_SLP_BYE_ACK ) + && ! isWaitingState( P2P_WAIT_FOR_DATA_ACK ) ) // HACK: added for Messenger for the Mac 6.0.3 and MSN 7.0 { // Make a final check if our states have been messed up. Had the following situation once: // - WLM invites to send a file @@ -2268,23 +1382,23 @@ void P2PApplication::gotSlpBye( const MimeMessage &slpMessage ) if( isComplete ) { kWarning() << "Transfer seams complete buit state suggests otherwise " - "(state=" << waitingState_ << + "(state=" << (int) getWaitingState() << " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=continue)" << endl; + " action=continue)"; endApplicationLater(); } - else if( waitingState_ == P2P_WAIT_END_APPLICATION ) + else if( isWaitingState( P2P_WAIT_END_APPLICATION ) ) { // When WLM aborts at a very late stage, it actually processes our final data messages, // ack's those, handle our BYE, and send it's "aborting BYE" afterwards. kWarning() << "Received BYE to abort when all data is already transferred " - "(state=" << waitingState_ << + "(state=" << (int) getWaitingState() << " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=endapplicationlater)" << endl; + " action=endapplicationlater)"; // Resume timer endApplicationLater(); @@ -2292,7 +1406,7 @@ void P2PApplication::gotSlpBye( const MimeMessage &slpMessage ) #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "BYE message was unexpected; contact aborted " - << "(state=" << waitingState_ << " contact=" << getContactHandle() << ")" << endl; + << "(state=" << (int) getWaitingState() << " contact=" << getContactHandle() << ")"; #endif // End with failure, bye sent at a different moment. @@ -2329,18 +1443,18 @@ void P2PApplication::gotSlpInvite(const MimeMessage &slpMessage) kDebug() << "Got SLP INVITE message"; #endif #ifdef KMESSTEST - KMESS_ASSERT( waitingState_ == P2P_WAIT_DEFAULT // First invitation - || waitingState_ == P2P_WAIT_FOR_FILE_DATA // Second invitation for file transfers. - || waitingState_ == P2P_WAIT_FOR_PREPARE // WLM8: reverse invitation for msnobject transfer, holds back it's data-preparation message. - || waitingState_ == P2P_WAIT_FOR_PREPARE_ACK // WLM8: second invitation for msnobject transfer, we already sent data-preparation ack. - ); + KMESS_ASSERT( isWaitingState( P2P_WAIT_DEFAULT ) // First invitation + || isWaitingState( P2P_WAIT_FOR_FILE_DATA ) // Second invitation for file transfers. + || isWaitingState( P2P_WAIT_FOR_PREPARE ) // WLM8: reverse invitation for msnobject transfer, holds back it's data-preparation message. + || isWaitingState( P2P_WAIT_FOR_PREPARE_ACK ) // WLM8: second invitation for msnobject transfer, we already sent data-preparation ack. + ); #endif // Reset the waiting state if this is the second INVITE for a file transfer // TODO: test what to do for the new WLM8 feature (sending transfer invites before data preparation). - if(waitingState_ == P2P_WAIT_FOR_FILE_DATA) + if( isWaitingState( P2P_WAIT_FOR_FILE_DATA ) ) { - waitingState_ = P2P_WAIT_DEFAULT; + setWaitingState( P2P_WAIT_DEFAULT, 0 ); } // Indicate this is an SLP message (sendCancelMessage() uses this) @@ -2376,22 +1490,16 @@ void P2PApplication::gotSlpInvite(const MimeMessage &slpMessage) if( invitationContentType_ == "application/x-msnmsgr-sessionreqbody" ) { // Send the ACK message - if(shouldSendAck_) - { - sendP2PAck(); - } + sendP2PAck(); // Client invites us for a session - // Will set the waitingState_ to P2P_WAIT_USER_ACCEPT later. + // Will set the waitingState to P2P_WAIT_USER_ACCEPT later. gotSlpSessionInvitation( slpMimeBody ); } else if( invitationContentType_ == "application/x-msnmsgr-transreqbody" ) { // Send the ACK message - if(shouldSendAck_) - { - sendP2PAck(); - } + sendP2PAck(); // Client requested to transfer the session // Handle the invitation internally @@ -2400,10 +1508,7 @@ void P2PApplication::gotSlpInvite(const MimeMessage &slpMessage) else if( invitationContentType_ == "application/x-msnmsgr-transrespbody" ) { // Send the ACK message - if(shouldSendAck_) - { - sendP2PAck(); - } + sendP2PAck(); // Client sent a second invitation to become a direct-connection server because we can't be. gotSlpTransferResponse( slpMimeBody, true ); @@ -2411,10 +1516,7 @@ void P2PApplication::gotSlpInvite(const MimeMessage &slpMessage) else { // Send the ACK message - if(shouldSendAck_) - { - sendP2PAck(); - } + sendP2PAck(); // Client sent an unknown invitation type kWarning() << "Received unexpected Content-Type " @@ -2422,13 +1524,17 @@ void P2PApplication::gotSlpInvite(const MimeMessage &slpMessage) " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=send500)." << endl; + " action=send500)."; // Indicate we don't like that content-type: sendCancelMessage(CANCEL_INVALID_SLP_CONTENT_TYPE); // Don't QUIT, the error will be ACK-ed. - return; } + + // Reset state again. + // So if the base class calls sendCancelMessage() outside + // this method, it won't respond with a SLP message. + gotSlpMessage_ = false; } @@ -2464,7 +1570,7 @@ void P2PApplication::gotSlpOk(const MimeMessage &slpMessage) { // With a 200 code, we reset the waiting state for every situation, // to make the next check work. - waitingState_ = P2P_WAIT_DEFAULT; + setWaitingState( P2P_WAIT_DEFAULT, 0 ); // Parse the data of the message QString contentType = slpMessage.getValue("Content-Type"); @@ -2498,7 +1604,7 @@ void P2PApplication::gotSlpOk(const MimeMessage &slpMessage) " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=send500)!" << endl; + " action=send500)!"; showEventMessage( i18n("The invitation was cancelled. The contact sent bad data, or KMess doesn't support it."), ChatMessage::CONTENT_APP_CANCELED, true ); @@ -2511,19 +1617,19 @@ void P2PApplication::gotSlpOk(const MimeMessage &slpMessage) // Determine whether we should be waiting for the data-preparation message. // If we didn't send anything that changed the state and no transfer has started, // we're likely waiting for some kind of prepare message - if(waitingState_ == P2P_WAIT_DEFAULT && dataType_ == P2P_TYPE_NEGOTIATION) + if( isWaitingState( P2P_WAIT_DEFAULT ) && ! isTransferActive() ) { // Waiting for prepare message #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Waiting for contact to send some prepare message..."; #endif - waitingState_ = P2P_WAIT_FOR_PREPARE; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_ACK ); + setWaitingState( P2P_WAIT_FOR_PREPARE, P2PAPPLICATION_TIMEOUT_ACK ); } } + /** * @brief Called when a SLP session invitation was received. * @@ -2554,14 +1660,14 @@ void P2PApplication::gotSlpSessionInvitation( const MimeMessage &slpMimeBody ) invitationSessionID_ = slpMimeBody.getValue("SessionID").toULong(); // Don't accept invites if we sent one. - if( nextMessageID_ != 0 && isUserStartedApp() ) + if( ! isFirstMessageSent() && isUserStartedApp() ) { kWarning() << "Got an INVITE response for " "user-started application, rejecting " "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=send500)." << endl; + " action=send500)."; sendCancelMessage( CANCEL_INVALID_SLP_CONTENT_TYPE ); return; @@ -2571,8 +1677,11 @@ void P2PApplication::gotSlpSessionInvitation( const MimeMessage &slpMimeBody ) setObjectName( QLatin1String( metaObject()->className() ) + "[" + QString::number( invitationSessionID_ ) + "/" + getContactHandle() + "]" ); + // Mark waiting state for user. + // Don't set a timeout just as WLM. + setWaitingState( P2P_WAIT_USER_ACCEPT, 0 ); // state is used later to abort with 500 instead of BYE. + // Tell the derived class we've got an invitation - waitingState_ = P2P_WAIT_USER_ACCEPT; // also used later to abort with 500 instead of BYE. contactStarted1_ContactInvitesUser( slpMimeBody ); } @@ -2618,14 +1727,12 @@ void P2PApplication::gotSlpStatus(const MimeMessage &slpMessage, const QString & " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=send0x08)." << endl; + " action=send0x08)."; - sessionID_ = 0; - sendP2PAck(P2PMessage::MSN_FLAG_ERROR); + sendP2PAbort(); // Abort the application showEventMessage( i18n("The invitation was cancelled. The contact sent bad data, or KMess doesn't support it."), ChatMessage::CONTENT_APP_CANCELED, true ); - endApplicationLater(); return; } @@ -2638,9 +1745,9 @@ void P2PApplication::gotSlpStatus(const MimeMessage &slpMessage, const QString & // Reset the waiting state if we were waiting. - if( waitingState_ == P2P_WAIT_CONTACT_ACCEPT ) + if( isWaitingState( P2P_WAIT_CONTACT_ACCEPT ) ) { - waitingState_ = P2P_WAIT_DEFAULT; + setWaitingState( P2P_WAIT_DEFAULT, 0 ); } // Handle the status codes @@ -2653,10 +1760,7 @@ void P2PApplication::gotSlpStatus(const MimeMessage &slpMessage, const QString & // because that ID was given in the sendSlpInvitation() method. // This the first ACK to be sent with the SessionID set. - if( shouldSendAck_ ) - { - sendP2PAck(); - } + sendP2PAck(); // Parse in separate function gotSlpOk( slpMessage ); @@ -2665,17 +1769,14 @@ void P2PApplication::gotSlpStatus(const MimeMessage &slpMessage, const QString & // We sent a bad address in the to: header case 404: - if( shouldSendAck_ ) - { - sendP2PAck(); - } + sendP2PAck(); // Inform the user KMess has an error kWarning() << "KMess sent a bad address in the 'to:' header " "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=contactaborted)." << endl; + " action=contactaborted)."; contactAborted( i18n("The contact rejected the invitation. An internal error occured.") ); break; @@ -2683,10 +1784,7 @@ void P2PApplication::gotSlpStatus(const MimeMessage &slpMessage, const QString & // Somehow a message was sent twice (e.g. BYE) // or the contact aborts exactly when all data is being received + acked (so we sent the BYE). case 481: // No Such Call - if( shouldSendAck_ ) - { - sendP2PAck(); - } + sendP2PAck(); // Content-Type of this message is "application/x-msnmsgr-session-failure-respbody" @@ -2695,17 +1793,14 @@ void P2PApplication::gotSlpStatus(const MimeMessage &slpMessage, const QString & "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=contactaborted)." << endl; + " action=contactaborted)."; contactAborted( i18n("The contact rejected the invitation. An internal error occured.") ); break; // Something was not supported case 500: - if(shouldSendAck_) - { - sendP2PAck(); - } + sendP2PAck(); // Content-Type of this message is application/x-msnmsgr-session-failure-respbody @@ -2717,7 +1812,7 @@ void P2PApplication::gotSlpStatus(const MimeMessage &slpMessage, const QString & " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=contactaborted)!" << endl; + " action=contactaborted)!"; } else { @@ -2727,7 +1822,7 @@ void P2PApplication::gotSlpStatus(const MimeMessage &slpMessage, const QString & "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=contactaborted)" << endl; + " action=contactaborted)"; } contactAborted( i18n("The contact rejected the invitation. An internal error occured.") ); @@ -2736,10 +1831,7 @@ void P2PApplication::gotSlpStatus(const MimeMessage &slpMessage, const QString & // The invitation was declined case 603: - if(shouldSendAck_) - { - sendP2PAck(); - } + sendP2PAck(); // Contact Declined contactRejected(); @@ -2753,14 +1845,13 @@ void P2PApplication::gotSlpStatus(const MimeMessage &slpMessage, const QString & " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=send0x08)." << endl; + " action=send0x08)."; // Got an unknown SLP status code - sendP2PAck( P2PMessage::MSN_FLAG_ERROR ); + sendP2PAbort(); // Scheduelle the application to terminate showEventMessage( i18n("The invitation was cancelled. The contact sent bad data, or KMess doesn't support it."), ChatMessage::CONTENT_APP_CANCELED, true ); - endApplicationLater(); } } @@ -2828,18 +1919,38 @@ void P2PApplication::gotSlpTransferInvitation(const MimeMessage &slpMimeBody) kDebug() << "Invite message is a request to transfer the session."; #endif - // For some reason it's also possible to receive SLP transfer invitations + // For some reason it's also possible to receive SLP transfer invitations from WLM8 // with an entirely different callid while trying to setup a direct connection. - // Perhaps if some packet is stalled in the outgoing message channel? - if( sessionID_ == 0 ) + // Perhaps some packet is stalled in the outgoing message channel? + if( sessionID_ == 0 || getMode() == APP_MODE_ERROR_HANDLER ) { kWarning() << "Received an invitation for a direct connection," " but no session is set up " - "(maybe a msn7 feature, " + "(maybe an old session, " " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=continue)." << endl; + " action=send603)."; + + sendSlpError("603 Decline", invitationSessionID_, invitationContentType_, P2P_MSG_TRANSFER_DECLINE); + return; + } + + + // See if there is already a connection attempt pending. + // This really happened with WLM8.1, somehow it sent multiple connection invites + // the the contact, even for the same session ID. + if( applicationList_->hasPendingConnections() ) + { + kWarning() << "Received an invitation for a direct connection," + " while a connection attempt is already in progress " + "(contact=" << getContactHandle() << + " session=" << sessionID_ << + " class=" << metaObject()->className() << + " action=send603)."; + + sendSlpError("603 Decline", invitationSessionID_, invitationContentType_, P2P_MSG_TRANSFER_DECLINE); + return; } @@ -2852,7 +1963,7 @@ void P2PApplication::gotSlpTransferInvitation(const MimeMessage &slpMimeBody) " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=closeconnection)." << endl; + " action=closeconnection)."; // Drop the previous connection. HACK: added for amsn 0.97. // aMsn 0.97 does some interesting things: @@ -2868,7 +1979,7 @@ void P2PApplication::gotSlpTransferInvitation(const MimeMessage &slpMimeBody) // First cause some invites to fail (don't accept/cancel). // Then accept one but send an "transfer accept" with invalid IP/port. // Not sure it can always be reproduced this way though. - if( waitingState_ == P2P_WAIT_FOR_SLP_BYE ) + if( isWaitingState( P2P_WAIT_FOR_SLP_BYE ) ) { kWarning() << "Received an invitation for " "a direct connection, but expecting BYE instead " @@ -2876,30 +1987,24 @@ void P2PApplication::gotSlpTransferInvitation(const MimeMessage &slpMimeBody) " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=slpcancel)." << endl; + " action=slpcancel)."; sendCancelMessage( CANCEL_ABORT ); return; } - // Quick fix for WLM8: don't allow direct connection invite for msnobject transfer - if( isUserStartedApp() ) + // New in WLM8 reverse direct connection invites for msnobject transfer + bool isReverseInvite = isUserStartedApp(); + if( isReverseInvite ) { - // Receiving invitations for your own sessiononly happens for msnobject transfer at the moment. - // Supporting this *now* opens a whole new can of worms, so decline it. + // Receiving invitations for your own session only happens for msnobject transfer at the moment. // It means KMess needs: // - some way to delay the data preparation acks // - the ability to detect if a SLP error was sent for the transfer INVITE only. // - fixes for new issues with the state tracking. #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Received invitation to for a direct connection, this is currently not supported for user started applications."; + kDebug() << "Received a reverse invitation to for a direct connection, we started the session."; #endif - - // Decline the transfer invitation. - // This doesn't kill the session though. - waitingState_ = P2P_WAIT_DEFAULT; // avoid assertion. - sendSlpError("603 Decline", invitationSessionID_, invitationContentType_, P2P_MSG_TRANSFER_DECLINE); - return; } @@ -2939,11 +2044,11 @@ void P2PApplication::gotSlpTransferInvitation(const MimeMessage &slpMimeBody) if( listeningPort != 0 ) { // Get parameters for message - nonce_ = generateGUID(); // used for authentication + nonce_ = KMessShared::generateGUID(); // used for authentication #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Generating Nonce value " - << nonce_ << " for incoming connections." << endl; + << nonce_ << " for incoming connections."; #endif acceptMessage.addField( "Bridge", "TCPv1" ); @@ -2972,6 +2077,21 @@ void P2PApplication::gotSlpTransferInvitation(const MimeMessage &slpMimeBody) startListening = true; // avoids double-checking certain conditions. } + else if( isReverseInvite ) + { + // Could not listen at a local port, send reject instead. + kWarning() << "Could not listen at local port, " + "redirecting transfer to the switchboard " + "(contact=" << getContactHandle() << + " session=" << sessionID_ << + " class=" << metaObject()->className() << + " action=send603)."; + + // Note this doesn't kill the session. + setWaitingState( P2P_WAIT_DEFAULT, 0 ); // avoid assertion. + sendSlpError("603 Decline", invitationSessionID_, invitationContentType_, P2P_MSG_TRANSFER_DECLINE); + return; + } else { // Could not listen at a local port, use switchboard instead. @@ -2980,7 +2100,7 @@ void P2PApplication::gotSlpTransferInvitation(const MimeMessage &slpMimeBody) "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=continue)." << endl; + " action=continue)."; // This configuration sends each file over the switchboard: acceptMessage.addField( "Bridge", "TCPv1" ); @@ -2990,13 +2110,13 @@ void P2PApplication::gotSlpTransferInvitation(const MimeMessage &slpMimeBody) // Inform the user about the file transfer progress. showTransferMessage( i18n("Reverting to indirect file transfer (this could be slow).") ); // TODO: at this point, it's assumend the other client will initiate the transfer. - // perhaps set the waitingState_ to detect when the contact does not return a request? + // perhaps set the waitingState to detect when the contact does not return a request? // Windows Live Messenger is also capable of sending a new INVITE message so it becomes the server instead. } #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Sending 200 transfer OK message, " - << "listening=" << (listeningPort != 0) << "." << endl; + "listening=" << (listeningPort != 0) << "."; #endif // Confirm the session @@ -3005,21 +2125,22 @@ void P2PApplication::gotSlpTransferInvitation(const MimeMessage &slpMimeBody) // Wait for the contact to ACK the message.. if( startListening ) { - waitingState_ = P2P_WAIT_FOR_CONNECTION; #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Waiting for a connection to succeed or fail..."; #endif + + setWaitingState( P2P_WAIT_FOR_CONNECTION, P2PAPPLICATION_TIMEOUT_DATA ); } else { // Expecting file data now we've rejected the invite. // TODO: it's also possible another invite is sent, hoping for a second chance. - waitingState_ = P2P_WAIT_FOR_FILE_DATA; #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Waiting for contact to send file data..."; #endif + + setWaitingState( P2P_WAIT_FOR_FILE_DATA, P2PAPPLICATION_TIMEOUT_DATA ); } - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_DATA ); } @@ -3098,7 +2219,7 @@ void P2PApplication::gotSlpTransferResponse(const MimeMessage &slpMimeBody, bool else { kDebug() << "Parsing 2nd transfer INVITE message, " - << "contact offers to become the direct connection server." << endl; + << "contact offers to become the direct connection server."; } #endif @@ -3112,7 +2233,7 @@ void P2PApplication::gotSlpTransferResponse(const MimeMessage &slpMimeBody, bool { #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Connection already authorized " - << "before invitation response was received, starting transfer." << endl; + << "before invitation response was received, starting transfer."; #endif initiateTransfer(); } @@ -3120,7 +2241,7 @@ void P2PApplication::gotSlpTransferResponse(const MimeMessage &slpMimeBody, bool { #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Connection already established " - << "before invitation response was received, waiting for connection to authorize..." << endl; + << "before invitation response was received, waiting for connection to authorize..."; #endif // Slots already connected at this point. } @@ -3157,7 +2278,7 @@ void P2PApplication::gotSlpTransferResponse(const MimeMessage &slpMimeBody, bool #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "P2PApplication:gotSlpTransferResponse() - Storing contact nonce value " - << nonce_ << " to authenticate later." << endl; + << nonce_ << " to authenticate later."; #endif #if P2PAPPLICATION_AVOID_DC_CLIENT @@ -3174,25 +2295,25 @@ void P2PApplication::gotSlpTransferResponse(const MimeMessage &slpMimeBody, bool { #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Contact is listening, " - << "attempting to connect to the given IP-address." << endl; + << "attempting to connect to the given IP-address."; #endif // Get the IP addresses. QStringList externalIpAddresses; QStringList internalIpAddresses; - uint externalPort = 0; - uint internalPort = 0; + quint16 externalPort = 0; + quint16 internalPort = 0; if( listenInternal ) { internalIpAddresses = slpMimeBody.getValue("IPv4Internal-Addrs").split(" "); - internalPort = slpMimeBody.getValue("IPv4Internal-Port").toUInt(); + internalPort = (quint16)slpMimeBody.getValue("IPv4Internal-Port").toUInt(); } if( listenExternal ) { externalIpAddresses = slpMimeBody.getValue("IPv4External-Addrs").split(" "); - externalPort = slpMimeBody.getValue("IPv4External-Port").toUInt(); + externalPort = (quint16)slpMimeBody.getValue("IPv4External-Port").toUInt(); } // See if the clients are likely at the same lan. @@ -3263,15 +2384,14 @@ void P2PApplication::gotSlpTransferResponse(const MimeMessage &slpMimeBody, bool #endif // Wait for connection to establish - waitingState_ = P2P_WAIT_FOR_CONNECTION2; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_DATA ); + setWaitingState( P2P_WAIT_FOR_CONNECTION2, P2PAPPLICATION_TIMEOUT_DATA ); } else { // Nothing is pending, nothing is connected. #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "No connection possible, " - << "informing ApplicationList." << endl; + << "informing ApplicationList."; #endif // If no direct connection attempt will be made. @@ -3283,115 +2403,6 @@ void P2PApplication::gotSlpTransferResponse(const MimeMessage &slpMimeBody, bool -/** - * @brief Called when a P2P message with timeout-flag was received. - * - * This method aborts the application with contactAborted(). - * - * @param message The received P2P message. - */ -void P2PApplication::gotTimeoutAck(const P2PMessage &message) -{ - // Error in our headers? - if(isWaitingForUser()) - { - // Contact aborted this session because we didn't press "accept/cancel" within 120 secs. - contactAborted( i18n("The transfer failed. Timeout while waiting for user to accept.") ); - } - else - { - // Apparently the contact was waiting for something, likely some packet we had to send. - kWarning() << "Got an unexpected P2P timeout-error response " - "(flag=" << QString::number( message.getFlags(), 16 ) << - " state=" << waitingState_ << - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=contactaborted)." << endl; - - if( dataType_ == P2P_TYPE_NEGOTIATION ) - { - contactAborted( i18n("The contact rejected the invitation. An internal error occured.") ); - } - else - { - contactAborted( i18n("The transfer failed. An internal error occured.") ); - } - } -} - - - -/** - * @brief Got a transfer aborted ack. - * - * This message acknowledges the data transfer was aborted. - * The flag type indicates whether the sender aborted, or the receiver aborted the transfer. - * - * @param message The received error message. - */ -void P2PApplication::gotTransferAbortedAck(const P2PMessage &message) -{ - // Got some kind of confirmation when we indicated to abort. - // Accept it by closing directly - // Error in our headers? - - if( ! isClosing() ) - { - kWarning() << "Got an unexpected P2P transfer aborted-response " - "(flag=" << QString::number( message.getFlags(), 16 ) << - " state=" << waitingState_ << - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=endapplication)." << endl; - - // Make sure the app still quits. - abortDataSending(); - endApplicationLater(); - } - else - { -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Message confirms abort, requesting terination."; -#endif - - // Make sure the app will exist, but leave it half-open to receive the final 0x08 messages - // for all messages which were already being sent whle the BYE was underway. - abortDataSending(); - endApplicationLater(); - } -} - - - -/** - * @brief Returns whether the application can handle the given ACK message. - * - * It checks whether an unacked message exists for the given ACK message. - * - * @return Whether the application can handle the ACK message. - */ -bool P2PApplication::hasUnAckedMessage(const P2PMessage &p2pMessage) -{ - // Simply test using the internal function, don't expose the UnAckedMessage pointer to external classes. - return (getUnAckedMessage(p2pMessage) != 0); -} - - - -/** - * @brief Return whether a given message type is still unacked. - * - * @return Whether the given message is still unacked. - */ -bool P2PApplication::hasUnAckedMessage(const P2PMessageType messageType) -{ - return (getUnAckedMessage(messageType) != 0); -} - - - /** * @brief Notify the derived class it can initiate the file transfer. * @@ -3402,27 +2413,27 @@ void P2PApplication::initiateTransfer() { #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Signalling implementation class " - << "to start the file transfer." << endl; + << "to start the file transfer."; #endif - if( waitingState_ == P2P_WAIT_FOR_CONNECTION - || waitingState_ == P2P_WAIT_FOR_CONNECTION2 ) + // No longer waiting, we're sending. + if( isWaitingState( P2P_WAIT_FOR_CONNECTION ) + || isWaitingState( P2P_WAIT_FOR_CONNECTION2 ) ) { - waitingState_ = P2P_WAIT_DEFAULT; + setWaitingState( P2P_WAIT_DEFAULT, 0 ); } // When we start sending information, it could take a while before // the contact returns messages which disable the waiting timer. // Avoid this by disabling it now, before we kill our own transfer. - if( waitingTimer_->isActive() ) + if( stopWaitingTimer() ) { - waitingTimer_->stop(); kWarning() << "timeout detection timer was still running, stopped " - "(state=" << waitingState_ << + "(state=" << (int) getWaitingState() << " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=continue)." << endl; + " action=continue)."; } @@ -3488,28 +2499,27 @@ void P2PApplication::sendCancelMessage(const ApplicationCancelReason cancelReaso { #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "request to abort " - << "(reason=" << cancelReason << ", state=" << waitingState_ << ")." << endl; + << "(reason=" << cancelReason << ", state=" << (int) getWaitingState() << ")."; #endif // I don't care what the reason is if you had // to send the data-preparation ACK - if(userShouldAcknowledge_) + if( userShouldAcknowledge_ ) { #ifdef KMESSTEST KMESS_ASSERT( cancelReason == CANCEL_ABORT); #endif // Cancelled the data preparation message - sendP2PAck(P2PMessage::MSN_FLAG_ERROR); + sendP2PAbort(); userShouldAcknowledge_ = false; - shouldSendAck_ = false; // TODO: send bye here to? wait for bye? just terminate? kWarning() << "data-preparation stage failed " "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=endapplicationlater)." << endl; + " action=endapplicationlater)."; endApplicationLater(); return; } @@ -3534,13 +2544,14 @@ void P2PApplication::sendCancelMessage(const ApplicationCancelReason cancelReaso case CANCEL_TIMEOUT: // Timeout handling occurs via slotCleanup(), not here. kWarning() << "CANCEL_TIMEOUT is not supported here " - "(state=" << waitingState_ << + "(state=" << (int) getWaitingState() << " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=send0x04,endapplicationlater)" << endl; - sendP2PMessage(0, P2PMessage::MSN_FLAG_WAITING, 0); - shouldSendAck_ = false; + " action=send0x04,endapplicationlater)"; + + // Send the low-level error message that the session is waiting for something! + sendP2PWaitingError(); endApplicationLater(); return; @@ -3555,11 +2566,11 @@ void P2PApplication::sendCancelMessage(const ApplicationCancelReason cancelReaso else { kWarning() << "CANCEL_NOT_INSTALLED is not supported here " - "(state=" << waitingState_ << + "(state=" << (int) getWaitingState() << " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=return)" << endl; + " action=return)"; } return; @@ -3574,11 +2585,11 @@ void P2PApplication::sendCancelMessage(const ApplicationCancelReason cancelReaso if( gotSlpMessage_ ) { // A: Special case for SLP messages. - if( waitingState_ == P2P_WAIT_USER_ACCEPT && cancelReason == CANCEL_ABORT ) + if( isWaitingState( P2P_WAIT_USER_ACCEPT ) && cancelReason == CANCEL_ABORT ) { #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Cancelling after receiving an SLP INVITE, " - << "sending BYE back." << endl; + << "sending BYE back."; #endif #ifdef KMESSTEST KMESS_ASSERT( isUserStartedApp() ); @@ -3590,7 +2601,7 @@ void P2PApplication::sendCancelMessage(const ApplicationCancelReason cancelReaso { #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Aborting after receiving an SLP message, " - << "sending 500 Internal Error back." << endl; + << "sending 500 Internal Error back."; #endif // Cancelled while in SLP negotiate mode. // Include the original content-type to tell the other @@ -3603,7 +2614,7 @@ void P2PApplication::sendCancelMessage(const ApplicationCancelReason cancelReaso // B: User started application #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "P2PApplication::sendCancelMessage() Cancelling an application " - << "we've started ourselves, sending BYE early." << endl; + << "we've started ourselves, sending BYE early."; #endif // Mark the logs if there is something weird going on. // It's possible the contact doesn't receive the INVITE anymore @@ -3612,11 +2623,11 @@ void P2PApplication::sendCancelMessage(const ApplicationCancelReason cancelReaso if( hasUnAckedMessage( P2P_MSG_SESSION_INVITATION ) ) { kWarning() << "aborting while INVITE ack was not received " - "(state=" << waitingState_ << + "(state=" << (int) getWaitingState() << " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=continue,sendslpbye)." << endl; + " action=continue,sendslpbye)."; } // Send bye early, contact should detect this. @@ -3627,7 +2638,7 @@ void P2PApplication::sendCancelMessage(const ApplicationCancelReason cancelReaso // C: Contact started application #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "P2PApplication::sendCancelMessage() Cancelling an application " - << "started by the other contact, sending BYE early." << endl; + << "started by the other contact, sending BYE early."; #endif // Send bye early, contact should detect this. sendSlpBye(); @@ -3655,113 +2666,15 @@ void P2PApplication::sendCancelMessage(const ApplicationCancelReason cancelReaso "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=send0x08)." << endl; + " action=send0x08)."; - sendP2PAck(P2PMessage::MSN_FLAG_ERROR); + // Initiate primitive abort. + sendP2PAbort(); } } -/** - * @brief Send file data in P2P packets. - * - * A timer starts that transmits all data packets automatically. - * It uses the dataSource object to determine the total size of the data to send. - * - * @param dataSource Source of the data to send - * @param dataType Type of the data, used to set the correct flag in the P2P footer code. - */ -void P2PApplication::sendData(QIODevice *dataSource, P2PDataType dataType) -{ -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Begin of data transfer"; -#endif -#ifdef KMESSTEST - KMESS_ASSERT( sessionID_ != 0 ); - KMESS_ASSERT( dataSource != 0 ); - KMESS_ASSERT( nextMessageID_ != 0 ); -#endif - - // Make sure we don't activate a slot without a data source. - if(dataSource == 0) - { - kWarning() << "Couldn't send data, data source is null " - "(contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=send500)." << endl; - - showEventMessage( i18n("The transfer failed. Couldn't open data source."), ChatMessage::CONTENT_APP_FAILED, false ); - - // TODO: Official client sends BYE when data preparation failed. - sendCancelMessage(CANCEL_FAILED); // MSNSLP messages terminate the application eventually. - return; - } - - // Set the global data fields - dataSource_ = dataSource; - dataType_ = dataType; - - // Reserve the next message ID. - nextMessageID_++; - - // Set the total size field, this causes sendP2PMessage() - // to handle fragmented messages correctly. - // The 'fragmentMessageID_' is set so KMess sends all fragments with the same message ID. - // It could happen the client receives a SLP ACK meanwhile, and ACKs it with a new message ID. - // The current fragmented message should not be affected. - fragmentMessageID_ = nextMessageID_; - fragmentOffset_ = 0; - fragmentTotalSize_ = dataSource->size(); - - // Inform the application list this application wants to send a file. - // It will call sendNextDataParts() each time the connection or switchboard can accept new packets. - applicationList_->registerDataSendingApplication( this ); -} - - - -/** - * @brief Send the data preparation message. - * - * This is a consists of a P2P message with 0x00000000 as message body. - * The contact should return with a data-preparation ACK, which initiates the file transfer. - * Note that Windows Live Messenger (v8) will start a direct connection setup first - * before it sends the data preparation ACK. - */ -void P2PApplication::sendDataPreparation() -{ -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Sending data preparation message."; -#endif -#ifdef KMESSTEST - KMESS_ASSERT( sessionID_ != 0 ); - KMESS_ASSERT( waitingState_ == P2P_WAIT_DEFAULT || waitingState_ == P2P_WAIT_FOR_FILE_DATA ); -#endif - - // TODO: Check the various footer codes send for certain transfers. - QByteArray p2pMessage( 4, 0x00 ); - sendP2PMessage(p2pMessage, 0, 1, P2P_MSG_DATA_PREPARATION); - - // Wait until our preparation message is ACK-ed - waitingState_ = P2P_WAIT_FOR_PREPARE_ACK; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_ACK ); - - // TODO: after the data preparation is sent, WLM8 starts a direct connection setup: - // - it does not send an ACK yet - // - it sends the transreq message, - // - when the invitation finished (or the DC is up..??) it sends the data preparation ACK. - // - after that it sends the ACK of the last "SLP 200 OK" message. - // - at this point, the data preparation ACK triggers KMess to send the picture data. - -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Waiting for data preparation ACK..."; -#endif -} - - - /** * @brief Send the data preparation ACK. * @@ -3769,7 +2682,7 @@ void P2PApplication::sendDataPreparation() * to accept the data-preparation message. * * This method will actually set a flag only, - * which is inspected when userStarted3_UserPrepares() returns. + * which is inspected by gotDataPreparation() when userStarted3_UserPrepares() returns. */ void P2PApplication::sendDataPreparationAck() { @@ -3785,608 +2698,12 @@ void P2PApplication::sendDataPreparationAck() "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=continue)" << endl; + " action=continue)"; } } -/** - * @brief Send the direct connection handshake - * - * This message contains the Nonce field, - * used by the other contact to authenticate the direct connection. - * The confirmation message is identical to the handshake message. - */ -void P2PApplication::sendDirectConnectionHandshake() -{ -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Sending direct connection handshake " - << "(nonce=" << nonce_ << ")." << endl; -#endif -#ifdef KMESSTEST - KMESS_ASSERT( applicationList_->hasDirectConnection() ); -#endif -#ifdef KMESSTEST - // NOTE: the handshake could happen while the file transfer was in progress, or even completed already. - KMESS_ASSERT( waitingState_ == P2P_WAIT_FOR_CONNECTION2 // we just established connection, send the first handshake - || waitingState_ == P2P_WAIT_FOR_HANDSHAKE // contact established connection, waiting to receive first handshake - || waitingState_ == P2P_WAIT_FOR_HANDSHAKE_OK // we sent the first handshake, waiting for contact to return second. - ); -#endif - - // Message flag is 0x100 - const int handshakeFlag = P2PMessage::MSN_FLAG_DC_HANDSHAKE; - - // Prepare the header - QByteArray header( 48, 0x00 ); - nextMessageID_++; - - // Insert the bytes - P2PMessage::insertBytes(header, 0, 0); // 1: SessionID - P2PMessage::insertBytes(header, nextMessageID_, 4); // 2: MessageID - // offset and total size are 0 - P2PMessage::insertBytes(header, handshakeFlag, 28); // 6: Message type (flags) - - // Insert the nonce at fields 7-9 - P2PMessage::insertNonce(header, nonce_); - - -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - // Display binary data as hexadecimal string - const int nonceOffset = 32; - const char hexMap[] = "0123456789ABCDEF"; - QString hex; - for(int i = 0; i < 16; i++) - { - if( i == 4 || i == 6 || i == 8 || i == 10 ) - { - hex += "-"; - } - int upper = (header[nonceOffset + i] & 0xf0) >> 4; - int lower = (header[nonceOffset + i] & 0x0f); - hex += hexMap[upper]; - hex += hexMap[lower]; - } - kDebug() << "copied nonce '" << nonce_ << "' to p2p message header as '" << hex << "'."; -#endif - - // Forcefully Send the message over the direct connection - applicationList_->getDirectConnection()->sendMessage( header ); - - // Not updating the waiting state here. - // The handshake process could happen while the data transfer is already in progress -} - - - -/** - * @brief Called when the connection is ready to send more file data. - * @param preferredFragments The preferred number of fragments to send at once. - * - * The sendData() method calls ApplicationList::registerDataSendingApplication() - * to start this notification process. Each time the direct connection is - * ready to send more data, ApplicationList::slotConnectionReadyWrite() is called which - * calls this method. - * - * @returns Returns false if something failed, and this method should not be called again. - */ -bool P2PApplication::sendNextDataParts( int preferredFragments ) -{ - // Abort if the data sending was reset. - // Also fixes race conditions with signals. - if( dataType_ == P2P_TYPE_NEGOTIATION || isClosing() || KMESS_NULL(dataSource_) ) - { -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "called while aborting " - "(datatype=" << dataType_ << - " isclosing=" << isClosing() << - " aborting=" << aborting_ << // sort-of reserved for aborts from ApplicationList. - " datasource=" << dataSource_ << - " waitingState=" << waitingState_ << - " contact=" << getContactHandle() << ")." << endl; -#endif - - // Request caller not to call us again. - return false; - } - - - // Allow the caller to specify the number of loops, - // e.g. more for a direct connection, less for parallel transfers. - int loops = qMax( preferredFragments, 1 ); - while( --loops >= 0 && fragmentOffset_ < fragmentTotalSize_ && ! dataSource_->atEnd() ) - { - // Read the data from the file. - char buffer[1202]; // 1202 is the max P2P data size. - int bytesRead = dataSource_->read( buffer, 1202 ); - if( bytesRead < 0 ) - { - kWarning() << "Couldn't send more data, " - "read error at " << fragmentOffset_ << " of " << fragmentTotalSize_ << " bytes " - "(contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=slpcancel)." << endl; - sendCancelMessage( CANCEL_FAILED ); - return ( dataSource_ == 0 ); // return true if already aborted by sendCancelMessage(). - } - else if( bytesRead == 0 ) - { - break; - } - - // Wrap in buffer, without copying. - QByteArray data = QByteArray::fromRawData( buffer, bytesRead ); - -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Sending data:" - << " offset=" << fragmentOffset_ - << " buffer=" << bytesRead - << endl; -#endif - - // Determine the progress value now because mesageOffset_ it reset by the last sendP2PMessage() call. - unsigned long nextProgressValue = ( fragmentOffset_ + bytesRead ); - - // Determine the flags: - // Funny, MSN6 doesn't seam to care which flag was set - // while transferring the file. KMess however, does. - bool writeSuccess = false; - switch( dataType_ ) - { - case P2P_TYPE_PICTURE: - writeSuccess = sendP2PMessage( data, P2PMessage::MSN_FLAG_OBJECT_DATA, 1, P2P_MSG_DATA, fragmentMessageID_ ); - break; - - case P2P_TYPE_FILE: - writeSuccess = sendP2PMessage( data, P2PMessage::MSN_FLAG_FILE_DATA, 2, P2P_MSG_DATA, fragmentMessageID_ ); - break; - - default: - // Display error message for the first message only. - if( fragmentOffset_ == 0 ) - { - kWarning() << "Unknown data transfer mode " - "(mode=" << dataType_ << - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=tryflag)." << endl; - } - - writeSuccess = sendP2PMessage( data, 0, 1, P2P_MSG_DATA, fragmentMessageID_ ); // The best solution in this situation - } - - // Avoid next round if write was blocked already. - // This could happen if a direct connection can't write all data. - // The DirectConnectionBase class will automatically send the remaining parts, so don't worry about that here. - if( ! writeSuccess ) - { -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "message could not be written entirely, leaving loop early."; -#endif - break; - } - - // Dispatch the progress to the derived class - showTransferProgress( nextProgressValue ); - } - - - // Rounds completed, make final assertions. - // Be verbose if something internally goes wrong. - if( dataSource_->atEnd() && fragmentOffset_ < fragmentTotalSize_ ) - { - kWarning() << "data source is at the end, " - "but offset byte count is not " - "(fragmentoffset=" << fragmentOffset_ << - " fragmenttotalsize=" << fragmentTotalSize_ << - " sourceopen=" << dataSource_->isOpen() << - " sourcesize=" << dataSource_->size() << - " datatype=" << dataType_ << - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=resetstate)!" << endl; - - // Reset for next p2p message. - fragmentTotalSize_ = 0; - fragmentOffset_ = 0; - } - - // See if transfer completed, - // if so tell the application list to stop calling this method. - if( fragmentOffset_ == 0 || fragmentOffset_ >= fragmentTotalSize_ ) - { - dataSource_ = 0; - dataType_ = P2P_TYPE_NEGOTIATION; - applicationList_->unregisterDataSendingApplication( this ); - - // Now wait for the contact to ACK that it received all data. - waitingState_ = P2P_WAIT_FOR_DATA_ACK; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_ACK ); - -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Waiting for all data received ACK..."; -#endif - - // no return false, will unregister the app twice. - } - - return true; -} - - - -/** - * @brief Send a P2P ACK message. - * - * This is called after each received P2P message. - * The ACK system turns the P2P communication into a stop-and-wait protocol. - * The other client waits until it receives an ACK or error before it continues with the next step. - * - * @param ackType The ACK type (flag field) to use, defaults to MSN_FLAG_ACK. - * @param originalMessageData The meta data of the original message, used to fill some parts of the ACK message. - */ -void P2PApplication::sendP2PAck(int ackType, UnAckedMessage *originalMessageData) -{ -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - if(ackType == P2PMessage::MSN_FLAG_ACK) - { - if( nextMessageID_ == 0 && getMode() == APP_MODE_NORMAL ) - { - kDebug() << "Sending P2P ACK (INVITE-ACK)"; - } - else - { - kDebug() << "Sending P2P ACK"; - } - } - else if(ackType == P2PMessage::MSN_FLAG_ERROR) - { - kDebug() << "Sending P2P ACK (Error-response)"; - } - else if(ackType == P2PMessage::MSN_FLAG_WAITING) - { - kDebug() << "Sending P2P ACK (Timeout-response)"; - } - else if(ackType == P2PMessage::MSN_FLAG_WAITING_FOR_ACK) - { - kDebug() << "Sending P2P ACK (ACK-timeout-response)"; - } - else if(ackType == P2PMessage::MSN_FLAG_ABORTED_SENDING) - { - kDebug() << "Sending P2P ACK (Aborted-myself-ACK)"; - } - else if(ackType == P2PMessage::MSN_FLAG_ABORTED_RECEIVING) - { - kDebug() << "Sending P2P ACK (Aborted-you-ACK)"; - } - else - { - kDebug() << "Sending P2P ACK (Unknown-type)"; - } -#endif -#ifdef KMESSTEST - KMESS_ASSERT( shouldSendAck_ ); // TODO: test for control messages, which do not have to obey this rule. -#endif - - // Default to previous message if no argument is given - if( originalMessageData == 0 ) - { - originalMessageData = &lastIncomingMessage_; - } - - - // Fill the header: - // - // 0 4 8 16 24 28 32 36 40 48 - // |....|....|....|....|....|....|....|....|....|....|....|....| - // |sid |mid |offset |totalsize|size|flag|asid|auid|a-datasz | - // - - QByteArray header( 48, 0x00 ); - - // Determine the message ID - unsigned long messageID; - if( nextMessageID_ == 0 ) - { - // We don't have a message ID set yet, we're acknowledging - // the first INVITE message. Generate an ID - - nextMessageID_ = generateID(); - messageID = nextMessageID_; - - // Somehow, the next message we send (200 OK) should contain a messageID - 3: - // We decrement the messageID with 4 because it will be incremented in the next call. - nextMessageID_ -= 4; - } - else - { - nextMessageID_++; - messageID = nextMessageID_; - } - - // Determine the ack settings. - unsigned long ackTotalSize = 0; - unsigned long ackSessionID = 0; - unsigned long ackUniqueID = 0; - unsigned long ackDataSize = 0; - - // New ack field schema seen with Windows Live Messenger: - if( ackType == P2PMessage::MSN_FLAG_ERROR ) - { - // This ack tells the contact it should reset the session (TCP RST). - ackTotalSize = originalMessageData->totalSize; - ackSessionID = originalMessageData->ackSessionID; - } - else if( ackType == P2PMessage::MSN_FLAG_NEGATIVE_ACK ) - { -#ifdef KMESSTEST - KMESS_ASSERT( ! fragmentTracker_.isEmpty() ); - KMESS_ASSERT( fragmentTracker_.isInitialized( originalMessageData->messageID ) ); -#endif - // This ack tells the contact we haven't received the data properly (e.g. invalid offsets) - // TODO: guess the ackDataSize is the the last offset which was received. - ackSessionID = originalMessageData->messageID; - ackDataSize = fragmentTracker_.isInitialized( originalMessageData->messageID ) - ? fragmentTracker_.getTransferredBytes() : 0; - } - else if( ackType == P2PMessage::MSN_FLAG_ABORTED_RECEIVING ) - { - // This ack tells the contact we won't ack the data anymore, since it's aborted. - ackSessionID = originalMessageData->messageID; - ackUniqueID = generateID(); - ackDataSize = originalMessageData->totalSize; - } - else if( ackType == P2PMessage::MSN_FLAG_ABORTED_SENDING ) - { -#ifdef KMESSTEST - KMESS_ASSERT( fragmentMessageID_ != 0 ); - KMESS_ASSERT( originalMessageData->messageType == P2P_MSG_DATA ); - KMESS_ASSERT( hasUnAckedMessage( P2P_MSG_DATA) ); -#endif - // this ack tells the contact to terminate it's ack session. - ackSessionID = originalMessageData->messageID; // must reffer to our OWN message. - } - else if( ackType == P2PMessage::MSN_FLAG_WAITING ) - { - // The ackSid seams to be random if it was waiting for an ack. - ackSessionID = originalMessageData->ackSessionID; // we give it a more precise value. - } - else - { -#ifdef KMESSTEST - KMESS_ASSERT( ackType == P2PMessage::MSN_FLAG_ACK ); -#endif - // This is a normal ack which confirms the arrival. - ackSessionID = originalMessageData->messageID; - ackUniqueID = originalMessageData->ackSessionID; - ackDataSize = originalMessageData->totalSize; - } - - // Insert the bytes - P2PMessage::insertBytes(header, originalMessageData->sessionID, 0); // SessionID - P2PMessage::insertBytes(header, messageID, 4); // BaseIdentifier - // offset of 8 bytes is always 0 (position 8) - P2PMessage::insertBytes(header, ackTotalSize, 16); // Confirm total size set in previous message - // size of 4 bytes is always 0 (position 24) - P2PMessage::insertBytes(header, ackType, 28); // Set the ACK flag. - P2PMessage::insertBytes(header, ackSessionID, 32); // ID referring to a previous message. - P2PMessage::insertBytes(header, ackUniqueID, 36); // ID referring to a specific fragment. - P2PMessage::insertBytes(header, ackDataSize, 40); // reference to the Size of that message. - - // Deliver the message over the correct link (switchboard or direct connection) - applicationList_->sendMessage(this, header); - shouldSendAck_ = false; - -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "ACK Transmitted " - << "(flags=0x" << QString::number(ackType, 16) << ")." << endl; -#endif -} - - - -/** - * @brief Sends a P2P Message. - * - * This method constructs the P2P binary header fields. - * The constructed message is delivered to ApplicationList::sendMessage(). - * - * The following instance fields are updated automatically: - * - nextMessageID_ is generated for every new P2P message. - * - fragmentOffset_ is updated when a splitted message is sent. - * - fragmentTotalSize_ and messageOffse_ are reset when the last message fragment is sent. - * - outgoingMessages_ is updated to trace ACKs back later. - * - * The fragmentTotalSize_ should be set to the total size before sending message fragments. - * This is done automatically by sendSlpMessage(). - * - * @param messageData The message payload to send. This can be binary file data or a SLP MIME data. - * @param flagField The value for the flag field in the P2P header. - * @param footerCode The message footer, which is appended when the message is sent over the switchboard. - * @param messageType The type of the message. This value is stored with in the unacked message queue. - * This value is used later to respond to ACKs of certain special messages. - * @return Whether the message can be sent. If the socket would block, false is returned. - * This only occurs for direct connections connections. - */ -bool P2PApplication::sendP2PMessage(const QByteArray &messageData, int flagField, uint footerCode, P2PMessageType messageType, unsigned long messageID) -{ -#ifdef KMESSTEST - KMESS_ASSERT( messageData.size() <= 1202 ); -#endif - - // Initialize the header - QByteArray header( 48, 0x00 ); - - // Determine the message ID, if none is given. - if( messageID == 0 ) - { - if( nextMessageID_ == 0) - { - // This is the first P2P message we send, initialize message ID - nextMessageID_ = generateID(); - } - else if(fragmentOffset_ == 0) - { - // Only increments the ID for the first message. - // Don't increment it for the next fragments (if it's a splitted message). - // Better approach: pass the desired messageID to this function. - nextMessageID_++; - } - - messageID = nextMessageID_; - } - - - // Verify we're not configured to send a splitted message. - if( fragmentTotalSize_ > 0 - && flagField != 0 - && flagField != P2PMessage::MSN_FLAG_OBJECT_DATA - && flagField != P2PMessage::MSN_FLAG_FILE_DATA ) - { - kWarning() << "Attempting to send splitted ACK message " - "(flags=0x" << QString::number( flagField, 16 ) << - " state=" << waitingState_ << - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=continue)!" << endl; - } - - - // Determine the message size: - uint messageSize = messageData.size(); - uint totalSize; - uint offsetField; - - if( fragmentTotalSize_ == 0 ) - { - // Normal message - totalSize = messageData.size(); - offsetField = 0; - } - else - { - // Splited message: total size is set. - totalSize = fragmentTotalSize_; - offsetField = fragmentOffset_; - } - - - // Generate ack session identifier for this message - unsigned long ackSessionID = generateID(); - - // Set session ID to zero when SLP messages are sent. - unsigned long sessionID = sessionID_; - if( flagField == 0 - && messageType != P2P_MSG_DATA_PREPARATION ) - { - sessionID = 0; - } - - // Update the header - P2PMessage::insertBytes(header, sessionID, 0); // 1: Session ID (zero for SLP messages). - P2PMessage::insertBytes(header, messageID, 4); // 2: BaseIdentifier (starts random [4, 4294967295]) - P2PMessage::insertBytes(header, offsetField, 8); // 3: Offset (if more then 1202 bytes to send) - P2PMessage::insertBytes(header, totalSize, 16); // 4: Total size of the message - P2PMessage::insertBytes(header, messageSize, 24); // 5: This message size, size of previous if no data - P2PMessage::insertBytes(header, flagField, 28); // 6: Message type (flags) - P2PMessage::insertBytes(header, ackSessionID, 32); // 7: Used to link ack messages (ACK session ID) -//P2PMessage::insertBytes(header, 0, 36); // 8: Field7 of previous for ACK-messages (unique ID) -//P2PMessage::insertBytes(header, 0, 40); // 9: Field4 of previous for ACK-messages (size) - - - // Deliver the message over the correct link (switchboard or direct connection) - bool writeSuccess = applicationList_->sendMessage( this, header, messageData, footerCode ); - if( ! writeSuccess ) - { - // This only happens when a direct connection transfer is congested. - // The same message will be re-sent later. -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Message sending was blocked, should try again later."; -#endif - return false; - } - - - // Update unacked message queue to handle incoming ACKs - if( flagField == 0 || messageType != 0 ) - { - if( offsetField == 0 ) - { -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Storing message fields to track the ACK response."; -#endif - // First message, or single message, store new record for ACKs. - QDateTime currentTime; - UnAckedMessage *ackData = new UnAckedMessage; - ackData->sessionID = sessionID_; - ackData->messageID = messageID; - ackData->dataSize = messageSize; - ackData->totalSize = totalSize; - ackData->ackSessionID = ackSessionID; - ackData->messageType = messageType; // used later to handle certain ACKs. - ackData->sentTime = currentTime.toTime_t(); - outgoingMessages_.append(ackData); - } - else - { -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Updating message fields to track the ACK response."; -#endif - // Follow-up part of a splitted/fragmented message. - // Update the uniqueID aka ackSID field to handle new acks. - // TODO: it appears MSN7 uses the same ackSID for some messages, not sure - // whether that is a feature (to capture acks in a short time) or a problem in their random function. - foreach( UnAckedMessage *unAcked, outgoingMessages_ ) - { - if( unAcked->messageID == messageID ) - { - unAcked->ackSessionID = ackSessionID; - break; - } - } - } - } - - // Update the offset fields for splitted messages - if(fragmentTotalSize_ != 0) - { - // Update offset - fragmentOffset_ += messageSize; - - // If we transmitted all parts, reset the fields for the next normal message - if(fragmentOffset_ >= fragmentTotalSize_) - { -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "All message parts sent, resetting fragmentOffset_ and fragmentTotalSize_."; -#endif - - fragmentOffset_ = 0; - fragmentTotalSize_ = 0; - } - } - - -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Message transmitted " - << "(sid=" << sessionID_ - << " mid=" << messageID - << " ackSid=" << ackSessionID - << " flags=0x" << QString::number(flagField, 16) - << " size=" << messageSize - << " type=" << messageType - << ")" << endl; -#endif - - return true; -} - - - /** * @brief Send a SLP BYE message to close the session. * @@ -4437,13 +2754,12 @@ void P2PApplication::sendSlpBye() sendSlpMessage(slpMessage, P2P_MSG_SESSION_BYE); setClosing(true); - // Don't run endApplication() yet, there is one ACK we wait for... - waitingState_ = P2P_WAIT_FOR_SLP_BYE_ACK; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_ACK ); - #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Waiting for BYE ACK..."; #endif + + // Don't run endApplication() yet, there is one ACK we wait for... + setWaitingState( P2P_WAIT_FOR_SLP_BYE_ACK, P2PAPPLICATION_TIMEOUT_ACK ); } @@ -4462,8 +2778,8 @@ void P2PApplication::sendSlpBye() * @param messageContentType Contact type of the message which is in error (can be empty) * @param messageType The message type. This is used later when an ACK is received. */ -void P2PApplication::sendSlpError(const QString &statusLine, - const uint sessionID, const QString &messageContentType, P2PMessageType messageType) +void P2PApplication::sendSlpError( const QString &statusLine, + const ulong sessionID, const QString &messageContentType, P2PMessageType messageType ) { #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Sending SLP error response: " << statusLine; @@ -4473,7 +2789,7 @@ void P2PApplication::sendSlpError(const QString &statusLine, // Test, as other invocations likely result in undefined client behavour // ( KMESS_ASSERT( gotSlpMessage_ ); - KMESS_ASSERT( waitingState_ == P2P_WAIT_DEFAULT ); + KMESS_ASSERT( isWaitingState( P2P_WAIT_DEFAULT ) ); KMESS_ASSERT( ! callID_.isEmpty() ); KMESS_ASSERT( ! branch_.isEmpty() ); #endif @@ -4487,22 +2803,21 @@ void P2PApplication::sendSlpError(const QString &statusLine, if( callID_.isEmpty() || branch_.isEmpty() ) { -#ifdef KMWSSTEST - KMESS_ASSERT( ! shouldSendAck_ ); // if the caller already sent an ACK, the send sendP2PAck() call will be ignored by WLM8. -#endif kWarning() << "attempting to send SLP error back, " "but Call-ID or Branch is unknown! " "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=send0x08)" << endl; - sendP2PAck(P2PMessage::MSN_FLAG_ERROR); + " action=send0x08)"; + + sendP2PAbort(); return; } // It's safe now to send the normal ACK. // Send it if this was not done by the caller yet. - if( shouldSendAck_ ) + // The if(..) is not needed but avoids a NOTICE in the debug log. + if( ! isP2PAckSent() ) { sendP2PAck(); } @@ -4545,13 +2860,12 @@ void P2PApplication::sendSlpError(const QString &statusLine, sendSlpMessage(slpMessage, messageType); setClosing(true); - // Wait for the message to be ACK-ed. - waitingState_ = P2P_WAIT_FOR_SLP_ERR_ACK; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_ACK ); - #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Waiting for SLP ACK..."; #endif + + // Wait for the message to be ACK-ed. + setWaitingState( P2P_WAIT_FOR_SLP_ERR_ACK, P2PAPPLICATION_TIMEOUT_ACK ); } @@ -4574,7 +2888,7 @@ void P2PApplication::sendSlpInvitation(const MimeMessage &message, const QString { #ifdef KMESSTEST KMESS_ASSERT(! contentType.isEmpty() ); - KMESS_ASSERT( waitingState_ == P2P_WAIT_DEFAULT ); + KMESS_ASSERT( isWaitingState( P2P_WAIT_DEFAULT ) ); #endif #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL @@ -4592,11 +2906,11 @@ void P2PApplication::sendSlpInvitation(const MimeMessage &message, const QString { // The callID remains the same between multiple invites // It identifies the session. - callID_ = generateGUID(); + callID_ = KMessShared::generateGUID(); } // BranchID identifies this INVITE request - branch_ = generateGUID(); + branch_ = KMessShared::generateGUID(); // Create the message (space after CSeq is added to emulate msn exactly) QString slpMessage; @@ -4613,10 +2927,6 @@ void P2PApplication::sendSlpInvitation(const MimeMessage &message, const QString + mimeBody + "\r\n"; - // Send the message - fragmentOffset_ = 0; - fragmentTotalSize_ = 0; - sendSlpMessage(slpMessage, messageType); // Keep the used content type in the state variables. @@ -4624,67 +2934,13 @@ void P2PApplication::sendSlpInvitation(const MimeMessage &message, const QString // In this case, it can be used to store ours. invitationContentType_ = contentType; - // Wait for the contact to accept - waitingState_ = P2P_WAIT_FOR_INVITE_ACK; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_ACCEPT ); // MSN 6 had a timeout of 30 sec to accept, WLM seams to have no timeout. - #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Waiting for contact to send INVITE ACK, and accept later..."; #endif -} - - -/** - * @brief Utility function to send an SLP message. - * - * It splits the SLP message into chunks which fit in the P2P payload. - * Each part will be sent with sendP2PMessage(). - * The messages always have a Session ID of zero. - * - * @param slpMessage The whole SLP message to send, including SLP headers. - * @param messageType The type of the message, used to trace ACK messages back later. - */ -void P2PApplication::sendSlpMessage(const QString &slpMessage, P2PMessageType messageType) -{ -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "SLP message=" << slpMessage; -#endif - - // Get the raw utf8 encoded bytearray - QByteArray utf8Message = slpMessage.toUtf8(); - QByteArray messagePart; - - // Make sure the extra padded '\0' character is there. MSN 6-WLM rely on this. - utf8Message.append('\0'); - - // Make sure the message gets sent in chunks of 1202 bytes. - // Only set fragmentTotalSize_ if there are chunks, for useless debug messages. - int remainingBytes = utf8Message.size(); - fragmentOffset_ = 0; - fragmentTotalSize_ = ( remainingBytes <= 1202 ? 0 : remainingBytes ); - - do - { - // Let another QByteArray encapsulate a part of the utf8Message - char *dataPointer = utf8Message.data() + fragmentOffset_; - uint dataSize = qMin(remainingBytes, 1202); - messagePart = QByteArray::fromRawData( dataPointer, dataSize ); - - // Send the message with the generic sendP2PMessage() method - // fragmentOffset_ is updated automatically - sendP2PMessage(messagePart, 0, 0, messageType); - remainingBytes -= dataSize; - -#ifdef KMESSTEST - KMESS_ASSERT( (uint) remainingBytes == fragmentTotalSize_ - fragmentOffset_ ); -#endif - } - while(remainingBytes > 0); - - // Reset for normal operations - fragmentOffset_ = 0; - fragmentTotalSize_ = 0; + // Wait for the contact to accept + // MSN 6 had a timeout of 30 sec to accept, WLM seams to have no timeout. + setWaitingState( P2P_WAIT_FOR_INVITE_ACK, P2PAPPLICATION_TIMEOUT_ACCEPT ); } @@ -4714,10 +2970,9 @@ void P2PApplication::sendSlpOkMessage(const MimeMessage &message) KMESS_ASSERT(! invitationContentType_.isEmpty() ); // Waiting state is P2P_WAIT_USER_ACCEPT if contactStarted2_.. is called directly from contactStarted1_.. // TODO: handle WLM8 invitations sent before data preparation - KMESS_ASSERT( waitingState_ == P2P_WAIT_DEFAULT || waitingState_ == P2P_WAIT_USER_ACCEPT ); + KMESS_ASSERT( isWaitingState( P2P_WAIT_DEFAULT ) || isWaitingState( P2P_WAIT_USER_ACCEPT ) || isWaitingState( P2P_WAIT_FOR_CONNECTION ) ); #endif - // Get message content and Content-Type bool gotTransferInvitation = (invitationContentType_ == "application/x-msnmsgr-transreqbody"); QString content = message.getFields(); @@ -4742,11 +2997,12 @@ void P2PApplication::sendSlpOkMessage(const MimeMessage &message) sendSlpMessage(slpMessage, ( gotTransferInvitation ? P2P_MSG_TRANSFER_OK : P2P_MSG_SESSION_OK ) ); - // Make sure it's not overwritten when the other contact invites for a DC transfer. + // Initialize the session ID for the first OK message. + // Note this method can be called again later to handle the transfer OK message. if( sessionID_ == 0 ) { - // Now that we've confirmed the session, use the sessionID - // in the next messages: + // Now that we've confirmed the session, + // the sessionID will be used the next messages. sessionID_ = invitationSessionID_; } @@ -4754,23 +3010,21 @@ void P2PApplication::sendSlpOkMessage(const MimeMessage &message) if(gotTransferInvitation) { - // Wait until our transfer OK message is ACK-ed - waitingState_ = P2P_WAIT_FOR_TRANSFER_ACK; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_ACK ); - #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Waiting for contact to ACK the 200 transfer OK message..."; #endif + + // Wait until our transfer OK message is ACK-ed + setWaitingState( P2P_WAIT_FOR_TRANSFER_ACK, P2PAPPLICATION_TIMEOUT_ACK ); } else { - // Wait until our normal OK message is ACK-ed - waitingState_ = P2P_WAIT_FOR_SLP_OK_ACK; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_ACK ); - #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Waiting for contact to ACK the 200 OK message..."; #endif + + // Wait until our normal OK message is ACK-ed + setWaitingState( P2P_WAIT_FOR_SLP_OK_ACK, P2PAPPLICATION_TIMEOUT_ACK ); } } @@ -4794,7 +3048,7 @@ void P2PApplication::sendSlpOkMessage(const MimeMessage &message) * @param appId The numeric app-Id value, which also identifies the application type. * @param context The context field. */ -void P2PApplication::sendSlpSessionInvitation(uint sessionID, const QString &eufGuid, const int appId, const QString &context) +void P2PApplication::sendSlpSessionInvitation( ulong sessionID, const QString &eufGuid, const int appId, const QString &context ) { // Create the message MimeMessage invitation; @@ -4835,7 +3089,7 @@ void P2PApplication::sendSlpTransferInvitation() { #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Connection is already setup, " - << "re-using the current connection." << endl; + << "re-using the current connection."; #endif initiateTransfer(); return; @@ -4852,10 +3106,10 @@ void P2PApplication::sendSlpTransferInvitation() { #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL kDebug() << "Another application is already inviting " - << "for a direct connection, waiting for that attempt to succeed or fail..." << endl; + << "for a direct connection, waiting for that attempt to succeed or fail..."; #endif - waitingState_ = P2P_WAIT_FOR_CONNECTION2; + setWaitingState( P2P_WAIT_FOR_CONNECTION2, 0 ); showTransferMessage( i18n("Waiting for connection") ); return; } @@ -4870,18 +3124,21 @@ void P2PApplication::sendSlpTransferInvitation() // or the other client should initiate a direct connection server. MimeMessage invitation; invitation.addField("Bridges", "TCPv1"); - invitation.addField("NetID", QString::number(generateID())); + invitation.addField("NetID", QString::number( KMessShared::generateID() )); invitation.addField("Conn-Type", "IP-Restrict-NAT"); invitation.addField("UPnPNat", "false"); invitation.addField("ICF", "false"); // Send the invitation sendSlpInvitation( invitation, "application/x-msnmsgr-transreqbody", P2P_MSG_TRANSFER_INVITATION ); - waitingState_ = P2P_WAIT_FOR_INVITE_TR_ACK; + + // Wait for the ack, the application list should + // timeout if the connections can't be made. + setWaitingState( P2P_WAIT_FOR_INVITE_TR_ACK, 0 ); // Mark invitation as pending. // This will fire an event when it's manually reset to false. - applicationList_->setPendingConnectionInvitation(true); + applicationList_->setPendingConnectionInvitation( true ); // When we include a Hashed-Nonce field, the contact also @@ -4923,105 +3180,168 @@ void P2PApplication::setDataCastSessionID( unsigned long sessionID ) /** - * @brief Cleanup function, is used to handle timeout events. + * @brief Called when the direct connection is authorized by one of the P2P applications. * - * When a timeout occurs before the contact sent something we expect, - * this function terminates the application automatically. - * - * Depending on the internal "waiting state", an error message will be outputted with kWarning(). + * This initiates the transfer by calling initiateTransfer(). */ -void P2PApplication::slotCleanup() +void P2PApplication::slotConnectionAuthorized() { - // See if the waiting time for new packets is over (like TCP's TIME_WAIT state). - if( waitingState_ == P2P_WAIT_END_APPLICATION ) + // Avoid posibility that this method is invoked again if + // the direct connection is closed and re-connected later by another application. + disconnect( applicationList_, 0, this, SLOT(slotConnectionAuthorized())); + + // The user who sent the INVITE, but the other side asked us to be the server. + bool wasReverseInvite = ( isUserStartedApp() && applicationList_->getDirectConnection()->isServer() ); + + if( wasReverseInvite ) { #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "timer of endApplicationLater() fired, finally destroying object."; + kDebug() << "Direct connection authorized, " + "reverse invitation complete (state=" << (int) getWaitingState() << ")."; #endif - // Directly destroy ...finally. - testUnAckedMessages( true ); - endApplication(); - return; - } - - + // Since we don't actively start reverse invitations, + // assume for now that the contact should send something again. + // TODO: when we send reverse invites too, we need to track who's turn it is. + if( ! isTransferActive() ) + { + // Waiting for prepare message #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "timeout fired, cleaning up " - << "(session=" << sessionID_ << " waitingState=" << waitingState_ << ")." << endl; -#endif -#ifdef KMESSTEST - KMESS_ASSERT( waitingState_ != P2P_WAIT_DEFAULT ); + kDebug() << "Waiting for contact to send some prepare message..."; #endif + setWaitingState( P2P_WAIT_FOR_PREPARE, P2PAPPLICATION_TIMEOUT_ACK ); + } - // Not waiting for ourselves to connect. - // Not waiting for contact to accept. - // Not waiting for contact to send BYE ack. - if( waitingState_ == P2P_WAIT_FOR_CONNECTION2 - || waitingState_ == P2P_WAIT_CONTACT_ACCEPT - || waitingState_ == P2P_WAIT_FOR_SLP_BYE_ACK ) - { -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Not sending timeout message for current waiting state."; -#endif + // Do not call 'initiateTransfer()' here. For MsnObject transfers, + // this will fire userStarted3 to confirm the data preparation. } else { - if( aborting_ ) - { - // Don't send messages when aborting. This could potentially crash KMess, or cause new windows to appear. - // - suppose this is the last aborting application which requests removal. - // - ApplicationList informs the MsnSwitchboardConnection it can remove itself. - // - ChatMaster processes the putMsg() call, and attempts to deliver the message. #ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Not sending error message because application is aborting."; + kDebug() << "Direct connection authorized, " + "starting transfer (state=" << (int) getWaitingState() << ")."; #endif - testUnAckedMessages( false ); - } - else + // Protect against situations which could break our internal state. + if( isTransferActive() ) { - // Tell the other client we were waiting for a message to receive! - // TODO: this is still not as it should be, but a start. - uint waitFlag = P2PMessage::MSN_FLAG_WAITING; - switch(waitingState_) - { - /* - if waiting for ack, wlm sends 0x04. - - case P2P_WAIT_FOR_SLP_OK_ACK: - case P2P_WAIT_FOR_PREPARE_ACK: - case P2P_WAIT_FOR_TRANSFER_ACK: - case P2P_WAIT_FOR_DATA_ACK: - //not P2P_WAIT_FOR_SLP_BYE_ACK: - case P2P_WAIT_FOR_SLP_ERR_ACK: - // we guess 0x06 is used as waiting-for-ack error. - waitFlag = P2PMessage::MSN_FLAG_WAITING_FOR_ACK; - break; - */ - - case P2P_WAIT_FOR_FILE_DATA: - // Waiting for file data. Application is shutting down sender right now. - waitFlag = P2PMessage::MSN_FLAG_ABORTED_RECEIVING; // 0x80 - break; - - default: break; - } - - // Send the message - sendP2PMessage(0, waitFlag, 0); // TODO: pass the original message which is unacked!! - - testUnAckedMessages( true ); + kWarning() << "Direct connection authorized, " + "but data transfer was already started before. Won't notify derived classes " + "(state=" << (int) getWaitingState() << + " contact=" << getContactHandle() << + " session=" << sessionID_ << + " reverse=" << wasReverseInvite << + " class=" << metaObject()->className() << + " action=return)."; + return; } - } + // No longer wait for packets, got connection, so go for it. + stopWaitingTimer(); + initiateTransfer(); + } +} + + + +/** + * @brief Called when the direct connection is established. + * + * This sends the direct connection handshake with sendDirectConnectionHandshake(), + * or waits for the contact to send one. + */ +void P2PApplication::slotConnectionEstablished() +{ +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Direct connection established."; +#endif + + // Disconnect irrelevant signals. + // Connection can still fail if the nonce is invalid. + disconnect( applicationList_, 0, this, SLOT( slotConnectionEstablished() )); + + // Send the handshake if this is a new connection + bool isClient = ( ! applicationList_->getDirectConnection()->isServer() ); + if( isClient ) + { +#ifdef KMESSTEST + KMESS_ASSERT( isWaitingState( P2P_WAIT_FOR_CONNECTION2 ) ); +#endif + + // Send the handshake + sendDirectConnectionHandshake( nonce_ ); + +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Waiting for direct connection handshake response..."; +#endif + + // Start the timeout timer again. + setWaitingState( P2P_WAIT_FOR_HANDSHAKE_OK, P2PAPPLICATION_TIMEOUT_ACK ); + } + else + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Waiting for contact to send connection handshake..."; +#endif + + // Wait for the handshake + setWaitingState( P2P_WAIT_FOR_HANDSHAKE, P2PAPPLICATION_TIMEOUT_ACK ); + } +} + + + +/** + * @brief Called when a direct connection could not be made. + * + * It initiates the transfer with initiateTransfer(). + */ +void P2PApplication::slotConnectionFailed() +{ + // Make this a warning, so users can figure out stuff when running kmess from the console. + kWarning() << "A direct connection could not be made, " + "switching file transfer to slow indirect transfer " + "(state=" << (int) getWaitingState() << + " contact=" << getContactHandle() << + " session=" << sessionID_ << + " class=" << metaObject()->className() << + " action=continue)."; + +#ifdef KMESSTEST + KMESS_ASSERT( ! applicationList_->hasDirectConnection() ); + KMESS_ASSERT( ! applicationList_->hasPendingConnections() ); +#endif + + // Disconnect all signals as they are not relevant anymore + disconnect( applicationList_, 0, this, SLOT( slotConnectionAuthorized() )); + disconnect( applicationList_, 0, this, SLOT( slotConnectionEstablished() )); + disconnect( applicationList_, 0, this, SLOT( slotConnectionFailed() )); + + // Inform the user about the transfer progress + showTransferMessage( i18n("Reverting to indirect file transfer (this could be slow).") ); + + // start the transfer over the switchboard + stopWaitingTimer(); + initiateTransfer(); +} + + + +/** + * @brief Show a timeout message because an expected message was not received. + * + * The contact is already notified at this point about this problem. + * All this method needs to do, is displaying a reasonable message at the console or user interface. + */ +void P2PApplication::showTimeoutMessage( P2PWaitingState waitingState ) +{ // Important note: // Each case calling endApplication() contains a "return;" // All debug cases use "break;" so the final endApplication() is called. // Put a message at the console - switch(waitingState_) + switch( waitingState ) { case P2P_WAIT_FOR_INVITE_ACK: { @@ -5029,7 +3349,7 @@ void P2PApplication::slotCleanup() "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=endapplication)." << endl; + " action=endapplication)."; break; } @@ -5058,11 +3378,11 @@ void P2PApplication::slotCleanup() case P2P_WAIT_FOR_CONNECTION2: { // Still keep waiting, DirectConnectionBase should trigger a timeout. - kWarning() << "P2PApplication:slotCleanup() - Time-out waiting to connect to the remote system " + kWarning() << "Time-out waiting to connect to the remote system " "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=return)." << endl; + " action=return)."; return; } @@ -5072,7 +3392,7 @@ void P2PApplication::slotCleanup() "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=endapplication)." << endl; + " action=endapplication)."; break; } @@ -5082,7 +3402,7 @@ void P2PApplication::slotCleanup() "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=endapplication)." << endl; + " action=endapplication)."; break; } @@ -5092,7 +3412,7 @@ void P2PApplication::slotCleanup() "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=endapplication)." << endl; + " action=endapplication)."; break; } @@ -5102,7 +3422,7 @@ void P2PApplication::slotCleanup() "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=endapplication)." << endl; + " action=endapplication)."; break; } @@ -5112,7 +3432,7 @@ void P2PApplication::slotCleanup() "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=endapplication)." << endl; + " action=endapplication)."; // The 0x80 mesage should be sent now. @@ -5128,7 +3448,7 @@ void P2PApplication::slotCleanup() "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=endapplication)." << endl; + " action=endapplication)."; break; } @@ -5139,7 +3459,7 @@ void P2PApplication::slotCleanup() "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=endapplication)." << endl; + " action=endapplication)."; break; } @@ -5150,7 +3470,7 @@ void P2PApplication::slotCleanup() "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=endapplication)." << endl; + " action=endapplication)."; break; } @@ -5160,7 +3480,7 @@ void P2PApplication::slotCleanup() "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=endapplication)." << endl; + " action=endapplication)."; // No message required, already got what we wanted endApplication(); return; @@ -5172,7 +3492,7 @@ void P2PApplication::slotCleanup() "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=endapplication)." << endl; + " action=endapplication)."; // No message required, already got what we wanted endApplication(); return; @@ -5184,7 +3504,7 @@ void P2PApplication::slotCleanup() "(contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=endapplication)." << endl; + " action=endapplication)."; // No message required, already got what we wanted endApplication(); return; @@ -5193,10 +3513,10 @@ void P2PApplication::slotCleanup() default: { kWarning() << "Timeout waiting " - "(state=" << waitingState_ << + "(state=" << (int) getWaitingState() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " contact=" << getContactHandle() << ")" << endl; + " contact=" << getContactHandle() << ")"; } } @@ -5206,175 +3526,6 @@ void P2PApplication::slotCleanup() } - -/** - * @brief Called when the direct connection is authorized by one of the P2P applications. - * - * This initiates the transfer by calling initiateTransfer(). - */ -void P2PApplication::slotConnectionAuthorized() -{ -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Direct connection authorized, " - "starting transfer (state=" << waitingState_ << ")." << endl; -#endif - - // Avoid posibility that this method is invoked again if - // the direct connection is closed and re-connected later by another application. - disconnect( applicationList_, 0, this, SLOT(slotConnectionAuthorized())); - - // Protect against situations which could break our internal state. - if( ! fragmentTracker_.isEmpty() ) - { - kWarning() << "Direct connection authorized, " - "but data transfer was already started before. Won't notify derived classes " - "(state=" << waitingState_ << - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=return)." << endl; - return; - } - - // No longer wait for packets, got connection. - waitingTimer_->stop(); - - initiateTransfer(); -} - - - -/** - * @brief Called when the direct connection is established. - * - * This sends the direct connection handshake with sendDirectConnectionHandshake(), - * or waits for the contact to send one. - */ -void P2PApplication::slotConnectionEstablished() -{ -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Direct connection established."; -#endif - - // Disconnect irrelevant signals. - // Connection can still fail if the nonce is invalid. - disconnect( applicationList_, 0, this, SLOT( slotConnectionEstablished() )); - - // Send the handshake if this is a new connection - bool isClient = ( ! applicationList_->getDirectConnection()->isServer() ); - if( isClient ) - { -#ifdef KMESSTEST - KMESS_ASSERT( waitingState_ == P2P_WAIT_FOR_CONNECTION2 ); -#endif - - // Send the handshake - sendDirectConnectionHandshake(); - - // Start the timeout timer again. - waitingState_ = P2P_WAIT_FOR_HANDSHAKE_OK; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_ACK ); - -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Waiting for direct connection handshake response..."; -#endif - } - else - { -#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL - kDebug() << "Waiting for contact to send connection handshake..."; -#endif - - waitingState_ = P2P_WAIT_FOR_HANDSHAKE; - waitingTimer_->start( P2PAPPLICATION_TIMEOUT_ACK ); - } -} - - - -/** - * @brief Called when a direct connection could not be made. - * - * It initiates the transfer with initiateTransfer(). - */ -void P2PApplication::slotConnectionFailed() -{ - // Make this a warning, so users can figure out stuff when running kmess from the console. - kWarning() << "A direct connection could not be made, " - "switching file transfer to slow indirect transfer " - "(state=" << waitingState_ << - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=continue)." << endl; - -#ifdef KMESSTEST - KMESS_ASSERT( ! applicationList_->hasDirectConnection() ); - KMESS_ASSERT( ! applicationList_->hasPendingConnections() ); -#endif - - // Disconnect all signals as they are not relevant anymore - disconnect( applicationList_, 0, this, SLOT( slotConnectionAuthorized() )); - disconnect( applicationList_, 0, this, SLOT( slotConnectionEstablished() )); - disconnect( applicationList_, 0, this, SLOT( slotConnectionFailed() )); - - // Inform the user about the transfer progress - showTransferMessage( i18n("Reverting to indirect file transfer (this could be slow).") ); - - // start the transfer over the switchboard - waitingTimer_->stop(); - initiateTransfer(); -} - - - -/** - * @brief Test if there are still unacked messages. - * @param sendError Whether to send an error to the client back as well. - */ -void P2PApplication::testUnAckedMessages( bool /*sendError*/ ) -{ - // Check if there are still unacked messages. - if( ! outgoingMessages_.isEmpty() ) - { - uint unackedCount = outgoingMessages_.count(); - - if( unackedCount == 1 ) - { - UnAckedMessage *unAcked = outgoingMessages_.at(0); - - // More simple debug statement for most used case. - kWarning() << "there is still " << unackedCount << " unacked message " - "(type=" << unAcked->messageType << - " ackSid=" << unAcked->ackSessionID << - " totalsize=" << unAcked->totalSize << - " state=" << waitingState_ << - " contact=" << getContactHandle() << - " class=" << metaObject()->className() << - " session=" << sessionID_ << ")" << endl; - } - else - { - kWarning() << "there are still " << unackedCount << " unacked messages " - "(state=" << waitingState_ << - " contact=" << getContactHandle() << - " class=" << metaObject()->className() << - " session=" << sessionID_ << ")" << endl; - - foreach( UnAckedMessage *unAcked, outgoingMessages_ ) - { - kWarning() << "Message " << unAcked->messageID << " is unacked " - "(type=" << unAcked->messageType << - " ackSid=" << unAcked->ackSessionID << - " totalsize=" << unAcked->totalSize << ")." << endl; - - } - } - } -} - - - /** * @brief Called when the user aborted the application. * @@ -5386,24 +3537,24 @@ void P2PApplication::testUnAckedMessages( bool /*sendError*/ ) void P2PApplication::userAborted() { #ifdef KMESSDEBUG_APPLICATION - kDebug() << "user requests to abort the session. state=" << waitingState_; + kDebug() << "user requests to abort the session. state=" << (int) getWaitingState(); #endif // Make sure a second message is not displayed here. if( isClosing() ) { kWarning() << "P2PApplication::userAborted: Attempted to close application twice " - "(state=" << waitingState_ << + "(state=" << (int) getWaitingState() << " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=endapplicationlater)" << endl; + " action=endapplicationlater)"; // Make sure the timer is started again. endApplicationLater(); return; } - else if( waitingState_ == P2P_WAIT_FOR_SLP_BYE ) + else if( isWaitingState( P2P_WAIT_FOR_SLP_BYE ) ) { // This is a problem when a client does not send a SLP BYE (as seen with amsn 0.97). #ifdef KMESSDEBUG_APPLICATION @@ -5413,8 +3564,7 @@ void P2PApplication::userAborted() return; } - bool isTransferComplete = fragmentTracker_.isComplete(); - if( isTransferComplete ) + if( isTransferComplete() ) { // Make sure the user won't get a "transfer complete" message // followed by a "contact aborted" message. @@ -5425,15 +3575,16 @@ void P2PApplication::userAborted() kWarning() << "not displaying message because data transfer is complete. " "The switchboard was likely closed after receiving all data. " - "(state=" << waitingState_ << + "(state=" << (int) getWaitingState() << " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=continue)" << endl; + " action=continue)"; } else { // Display abort message + modifyOfferMessage(); showEventMessage( getUserAbortMessage(), ChatMessage::CONTENT_APP_CANCELED, false ); } @@ -5442,7 +3593,7 @@ void P2PApplication::userAborted() sendCancelMessage( CANCEL_ABORT ); // Set the state to avoid crashes. - aborting_ = true; + setUserAborted( true ); setClosing( true ); // Don't end the application, instead wait for contact's client to respond too @@ -5458,124 +3609,37 @@ void P2PApplication::userAborted() */ void P2PApplication::userRejected() { -#ifdef KMESSDEBUG_APPLICATION - kDebug() << "user requests to reject the invitation."; -#endif - - // Send abort messages - showEventMessage( getUserRejectMessage(), ChatMessage::CONTENT_APP_CANCELED, false ); - sendCancelMessage( CANCEL_INVITATION ); - - // Set the state to avoid crashes. - aborting_ = true; - setClosing( true ); - - // Don't end the application, instead wait for contact's client to respond too -} - - - -/** - * @brief Utility function to write P2P data to a file, also deals with message offsets. - * - * When an error occurs, the required error message - * will be sent back to the other client. - * - * While Windows Live Messenger does not allow messages to be out of order, - * this method explicitly allows it because WLM itself seams to send messages out of order - * in some cases when it's switching to the direct connection (likely error prone at slow systems). - * - * @param message The P2P message with a file part. - * @param file The file to output the data to. - * @returns True if the data could be written to the file, false on error. - */ -bool P2PApplication::writeP2PDataToFile( const P2PMessage &message, QIODevice *file ) -{ - unsigned long offset = message.getDataOffset(); - - // See if the offset should be changed, - // and if so, update it. - if( offset != file->pos() && ! file->seek( offset ) ) + if( isClosing() ) { #ifdef KMESSDEBUG_APPLICATION - kDebug() << "data is received out of order, updating file offset."; -#endif - - // File position was different and could not be changed.. - unsigned long fileSize = file->size(); - - // See if the offset is too far ahead.. (e.g. don't make us allocate 1GB) - if( offset > ( fileSize + 100000 ) ) // ~100 kB - { - kWarning() << "data offset is too far ahead of current end of file " - "(filepos=" << file->pos() << - " eofpos=" << file->size() << - " offset=" << offset << - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=send0x01)" << endl; - sendP2PAck( P2PMessage::MSN_FLAG_NEGATIVE_ACK ); - sendCancelMessage( CANCEL_FAILED ); // sends slp bye - return false; - } - else if( offset <= fileSize ) - { - // seek( offset ) should only fail if the offset is beyond the end of the file. - // If this is not the case, moving within the file failed so abort. - kWarning() << "file pointer could not be set to message offset " - "(filepos=" << file->pos() << - " eofpos=" << file->size() << - " offset=" << offset << - " contact=" << getContactHandle() << - " session=" << sessionID_ << - " class=" << metaObject()->className() << - " action=sendcancel)" << endl; - sendCancelMessage( CANCEL_FAILED ); - return false; - } - - // Create padding to write at the end - unsigned long remainingSize = offset - fileSize; - QByteArray padding( 4096, 0x00 ); - - // Add padding at the end of the file. - file->seek( fileSize ); - while( remainingSize > 0 ) - { - if( file->write( padding, qMin( (unsigned long) 4096, remainingSize ) ) <= 0 ) - { - break; - } - remainingSize -= 4096; - } - - // Make sure the file position is correct now. - if( offset != file->pos() ) - { - sendCancelMessage( CANCEL_FAILED ); - return false; - } - } - - - // Offsets are correct. - // Write the data to the file, - qint64 status = file->write( message.getData(), message.getDataSize() ); - if( status == -1 ) - { - kWarning() << "Failed to write the data to the file " - "(contact=" << getContactHandle() << + kWarning() << "P2PApplication::userAborted: Attempted to close application twice " + "(state=" << (int) getWaitingState() << + " contact=" << getContactHandle() << " session=" << sessionID_ << " class=" << metaObject()->className() << - " action=sendcancel)" << endl; + " action=endapplicationlater)"; +#endif - sendCancelMessage(CANCEL_FAILED); - return false; + // Make sure the timer is started again. + endApplicationLater(); + return; } + else + { - // Indicate success! - return true; + kDebug() << "user requests to reject the invitation."; + + // Send abort messages + modifyOfferMessage(); + showEventMessage( getUserRejectMessage(), ChatMessage::CONTENT_APP_CANCELED, false ); + sendCancelMessage( CANCEL_INVITATION ); + + // Set the state to avoid crashes. + setUserAborted( true ); + setClosing( true ); + + // Don't end the application, instead wait for contact's client to respond too + } } diff --git a/src/network/applications/p2papplication.h b/src/network/applications/p2papplication.h index e80cfb1..96b7073 100644 --- a/src/network/applications/p2papplication.h +++ b/src/network/applications/p2papplication.h @@ -18,38 +18,22 @@ #ifndef P2PAPPLICATION_H #define P2PAPPLICATION_H -#include "application.h" +#include "p2papplicationbase.h" #include "../extra/p2pfragmenttracker.h" #include "../p2pmessage.h" -#include - - -class QIODevice; class MimeMessage; -class QTimer; -class QBuffer; -class ApplicationList; /** - * @brief An Application subclass implementing MSN6 P2P-style conversations. + * @brief An Application subclass implementing MSNSLP on top of MSN6 P2P-style conversations. * - * This base class aims to hide all complex details of the P2P communication. + * This base class aims to hide all complex details of the P2P and MSNSLP communication. * To implement a P2P service, create a derived class which * implements the userStarted*, contactStarted* and getAppId() methods. * - * P2P messages can be received from switchboard or direct connections. - * The message flow looks like: - * - the MsnSwitchboardConnection receives the message. - * - the ChatMaster relays it to the correct contact. - * - an ApplicationList relays it to the correct P2P session. - * - an instance of P2PApplication processes it. - * The incoming message is received at the gotMessage() method. - * - * * User-started invitations are handled this way: * * - The start() method is called externally to start the application. @@ -76,7 +60,9 @@ class ApplicationList; * * Contacted-started invitations are handled this way: * - * - The gotMessage() method is called externally to handle an incoming P2P message. + * - The gotMessage() method of the base class is called externally + * (by the ApplicationList of a Contact) to handle an incoming P2P message. + * The base class will relay this message to gotNegotiationMessage(). * * - The contactStarted1_ContactInvitesUser() method is called when the invitation message is fully received. * This allows you to extract the details from the invitation message. @@ -105,120 +91,13 @@ class ApplicationList; * * --- internals ---- * - * Internally, this code ensures valid P2P messages are sent. + * This class extends the P2PApplicationBase class, to implement the MSNSLP communication. + * This is a session protocol which is transferred over the P2P payloads. + * New messages are delivered by the base class though the gotNegotiationMessage() method. * - * A P2P message consists of a a 48 byte binary header followed by an optional pyload. - * The payload which can be binary data or plain text MIME data (the MSNSLP messages). - * - * The messages can be sent over the switchboard, or direct connection. - * When the P2P messages are sent over the switchboard, they will be wrapped - * in a standard MIME message and a footer code will be appended. - * - * This is a P2P message with SLP payload sent over the switchboard: - * @code -MSG contact@kmessdemo.org Test%20user 465 -@endcode -@code -MIME-Version: 1.0 -Content-Type: application/x-msnmsgrp2p -P2P-Dest: user@kmessdemo.org - (blank line) -@endcode -@code -00000000 0d6ff300 00000000 00000000 -52010000 00000000 52010000 00000000 -c08d4900 00000000 00000000 00000000 -@endcode -@code -MSNSLP/1.0 200 OK -To: -From: -Via: MSNSLP/1.0/TLP ;branch={EA820F90-802C-48A3-AE53-F660111220FF} -CSeq: 1 -Call-ID: {44AAC3F3-30D7-49B7-9732-AF7D32BD36B3} -Max-Forwards: 0 -Content-Type: application/x-msnmsgr-sessionreqbody -Content-Length: 22 - -SessionID: 114164 -00 -@endcode -@code -00000000 -@endcode - * - * The message is built of the following parts: - * - The Switchboad payload command with total payload length - * - The MIME header, with a blank line as separator. - * - The 48 byte P2P header (written in hex notation here). - * - The P2P payload (SLP preamble, header and body). - * - A footer code, only appended when the message is sent over the switchboard. - * - * There is a limit of 1202 bytes for the P2P payload, longer payloads are splitted into multiple P2P messages. - * In practise, that only happens with the SLP INVITE and file data messages. - * - * The binary P2P header has the following layout: - * @code -0 4 8 16 24 28 32 36 40 48 -|....|....|....|....|....|....|....|....|....|....|....|....| -|sid |mid |offset |totalsize|size|flag|uid |auid|a-datasz | -@endcode - * The fields are: - * - sid: Session-ID, true identifier of the session. It will always be zero for SLP messages. - * - mid: Message-ID, identifier of a payload, used to match splitted payload parts. - * - offset: current byte position of the part. - * - totalsize: total size the payload. When the payload only needs one part, it's equal to 'size'. - * - size: size of this message part. - * - flag: the message type. - * - uid: unique ID of the message, is used to trace ACK responses back. - * - auid: zero for normal messages. - * - a-datasz: zero for normal messages. - * - * For ACK messages some the fields are used differently: - * - sid: contains the Session-ID of the previous message. - * - mid: has a new generated value. - * - totalsize: contains the total size of the ACKed message. - * - uid: contains the Message-ID of the ACKed message. - * - auid: contains the Unique-ID of the ACKed message. - * - a-datasz: ACK Data size, contains the 'size' field of the ACKed message. - * - * For direct connection handshake messages, the last 3 fields will be replaced with the Nonce value. - * - * The flag field can be one of these values: - * - 0x02: A normal ACK message. - * - 0x04 and 0x06: A timeout ACK message, the contact was waiting for something! - * - 0x08: An error message, aborts the session instantly (much like TCP RST). - * - 0x20: MsnObject data. - * - 0x40: some BYE error ack. - * - 0x80: some BYE error ack. - * - 0x100: Direct connection handshake. - * - 0x1000030: File data. - * - * These fields and flags appear to make it utterly complex. - * However, P2P messages can be divided into three groups: - * - Messages without flags but with payload. These messages have a plain text MIME payload (the MSNSLP message), - * used to negotiate the session parameters. The Session-ID field is always zero for these messages. - * - Messages with flags and payload. These messages are used to transfer the actual data. - * - Messages with flags but without payload. These messages are used as "control messages". - * - * Each message expects to get some ACK message back, clients actually wait to send more - * data until an ACK or error message is received. KMess uses timers to detect whether - * a contact did not sent a message back. The application will be aborted automatically - * to avoid stale application in the memory. - * - * To match a incoming P2P message with a P2PApplication instance, the following identifiers are used: - * - sid or session-id: this is the true Session-ID of the complete session. - * If the session-id is zero however and there is a payload, different rules apply. - * In that case, the payload contains an SLP message (header + body) with the following idenfiers in the SLP header: - * - Call-ID: a guid identifier of the "SLP call". It spans the entire session, so other SLP messages (like 200 OK, or BYE) can be linked to the session which got the INVITE in the first place. - * - branch: a guid identifier the the single SLP message, it's used by SLP responses to reffer to the specific INVITE message in the session. - * - mid or message-id: the identifier of a complete payload. If a payload is too large, it's splitted across multiple P2P messages. Each fragment has the same message-id. - * - uid or unique-id: a real unique id for a single P2P message. - * P2P responses (messages with flags but without payload) reffer to this ID to point out which message is in error. - * - * The ApplicationList::gotMessage() method uses these identifiers to find the correct P2PApplication - * instance for a message. Note that the session-id is also transferred in the body of an SLP INVITE message. - * The P2P packets are only routed by the ApplicationList using the binary header fields and SLP header. + * The exact contents of the P2P message is described in the P2PApplicationBase API documentation. + * This class calls typically calls the sendSlpMessage() and the other send..() methods + * to dispatch the messages. * * Some third party clients (including KMess 1.4.x) seam to send incorrect message fields. * This class is able to handle those not-entirely valid messages as well. @@ -227,7 +106,7 @@ SessionID: 114164 * @author Diederik van der Boor * @ingroup Applications */ -class P2PApplication : public Application +class P2PApplication : public P2PApplicationBase { Q_OBJECT @@ -240,52 +119,25 @@ class P2PApplication : public Application virtual ~P2PApplication(); // The contact cancelled the session - virtual void contactAborted(const QString &message = 0); - // Generate the strings for the BranchID and call-ID. - static QString generateGUID(); + virtual void contactAborted(const QString &message = QString::null); // Returns the branch. QString getBranch() const; // Returns the call ID (identifies the invitation). QString getCallID() const; - // Return the message ID used in the previous message received from the contact. - unsigned long getLastContactMessageID() const; // Returns the nonce that's being expected. const QString & getNonce() const; // Returns the session ID. unsigned long getSessionID() const; - // Parse a received message... (implements pure virtual method from base class) - void gotMessage(const P2PMessage &p2pMessage); - // Verify whether the application can handle the given ACK message. - bool hasUnAckedMessage(const P2PMessage &p2pMessage); - // Called when the connection is ready to send more file data. - bool sendNextDataParts( int preferredFragments ); // The user cancelled the session virtual void userAborted(); protected: // protected mehods - /** - * @brief The data type being sent. - * - * This value is used to set the footer code of P2P messages which are sent over the switchboard. - */ - enum P2PDataType - { - P2P_TYPE_NEGOTIATION = 0 ///< Default value, the session is negotiating. - , P2P_TYPE_PICTURE = 1 ///< Packet contains MsnObject data. - , P2P_TYPE_FILE = 2 ///< Packet contains file data. - , P2P_TYPE_INK = 3 ///< Packet contains an Ink message. - }; - - // Scheduelle termination, but wait for last incoming packets - void endApplicationLater(); // Step one of a contact-started chat: the contact invites the user virtual void contactStarted1_ContactInvitesUser(const MimeMessage& message); // Step four of a contact-started chat: the contact confirms the data-preparation message. virtual void contactStarted4_ContactConfirmsPreparation(); - // Generate the random numbers for the session-id and message-id. - static unsigned long generateID(); // Return the content type read from the invitation message const QString& getInvitationContentType() const; // Return the session id read from the invitation message @@ -294,14 +146,10 @@ class P2PApplication : public Application virtual void gotData(const P2PMessage &message); // Send a cancel message void sendCancelMessage(const ApplicationCancelReason cancelReason); - // Send the data - void sendData(QIODevice *dataSource, const P2PDataType dataType); - // Sends the data preparation message. - void sendDataPreparation(); - // Method to be called from userStarted3_UserPrepares(); + // Send the data preparation ACK. void sendDataPreparationAck(); // Send the invitation for a normal session - void sendSlpSessionInvitation(uint sessionID, const QString &eufGuid, const int appId, const QString &context); + void sendSlpSessionInvitation( ulong sessionID, const QString &eufGuid, const int appId, const QString &context ); // Send the invitation for a direct connection. void sendSlpTransferInvitation(); // Send an SLP 200/OK message @@ -310,53 +158,10 @@ class P2PApplication : public Application void setDataCastSessionID( unsigned long sessionID ); // The user rejected the invitation virtual void userRejected(); - // Utility function to write P2P data to a file, also deals with message offsets. - bool writeP2PDataToFile( const P2PMessage &message, QIODevice *file ); private: // private methods - /** - * @brief The meta type of a P2P message. - * - * These types are used by gotAck() to link the ACK message - * to the original the sent message, sent by sendP2PMessage(). - */ - enum P2PMessageType - { - P2P_MSG_UNKNOWN = 0, ///< Default value, message type is not relevant. - P2P_MSG_SESSION_INVITATION = 1, ///< The SLP INVITE message. - P2P_MSG_SESSION_OK = 2, ///< The SLP OK message. - P2P_MSG_TRANSFER_INVITATION = 9, ///< The SLP INVITE message for the transfer. - P2P_MSG_TRANSFER_OK = 3, ///< The SLP OK message for the transfer invitation. - P2P_MSG_DATA_PREPARATION = 4, ///< The data preparation message. - P2P_MSG_DATA = 5, ///< The actual data message. - P2P_MSG_SESSION_BYE = 6, ///< The SLP BYE message. - P2P_MSG_TRANSFER_DECLINE = 7, ///< The SLP 603 Decline message. - P2P_MSG_SLP_ERROR = 8 ///< One of the possible SLP error messages. - }; - - /** - * @brief Meta data on an unacked message. - */ - struct UnAckedMessage - { - // Data for ACK message: - unsigned long dataSize; ///< The sent data size. - unsigned long messageID; ///< The sent message ID. - unsigned long totalSize; ///< The sent total size. - unsigned long sessionID; ///< The sent session ID. - unsigned long ackSessionID; ///< The sent unique ID field. - uint sentTime; ///< The time the message was sent. - P2PMessageType messageType; ///< The meta type of the message. - }; - - // Make sure no more data will be sent - void abortDataSending(); - // Find the unacked message record associated with the received P2P message. - UnAckedMessage * getUnAckedMessage(const P2PMessage &ackMessage) const; - // Find the unacked message which corresponds with given message type. - UnAckedMessage * getUnAckedMessage(const P2PMessageType messageType) const; // Parse a ACK messsage (in certain situations we need to active some methods) void gotAck(const P2PMessage &message, const P2PMessageType messageType); // Called when the ACK for the data preparation was received. @@ -377,16 +182,14 @@ class P2PApplication : public Application void gotAck_slpTransferInvitation(); // Called when the ACK for the SLP transfer OK mesages was received. void gotAck_slpTransferOk(); - // Got an direct connection handshake. - void gotDirectConnectionHandshake(const P2PMessage &message); - // Called internally when data is received, this eventually calls gotData() - void gotDataFragment(const P2PMessage &message); + // Called when all data is received. + void gotDataAckSent(); + // Called when all data is received. + void gotDataComplete(); // Called when the data preparation message is received void gotDataPreparation(const P2PMessage &message); - // Received a P2P message with the error-flag set. This method aborts the application. - void gotErrorAck(const P2PMessage &message); - // Got a message fragment with SessionID 0 - void gotNegotiationFragment(const P2PMessage &message); + // Got an direct connection handshake. + void gotDirectConnectionHandshake(const P2PMessage &message); // Got a message with SessionID 0 void gotNegotiationMessage(const MimeMessage &slpMessage, const QString &preamble); // Got an MSNSLP ACK message @@ -405,37 +208,21 @@ class P2PApplication : public Application void gotSlpTransferInvitation(const MimeMessage &slpMimeBody); // Got an MSNSLP transfer invitation response void gotSlpTransferResponse(const MimeMessage &slpMimeBody, bool secondInvite = false); - // Received a message with the timeout-flag set. This method aborts the application. - void gotTimeoutAck(const P2PMessage &message); - // Received a P2P message with the aborted-flag set. This method aborts the application. - void gotTransferAbortedAck(const P2PMessage &message); - // Verify whether a given message is still unacked. - bool hasUnAckedMessage(const P2PMessageType messageType); // Signal the derived class it can initiate the file transfer void initiateTransfer(); - // Send the direct connection handshake - void sendDirectConnectionHandshake(); - // Send a P2P ACK message - void sendP2PAck(int ackType = P2PMessage::MSN_FLAG_ACK, UnAckedMessage *originalMessageData = 0); - // Send a P2P message - bool sendP2PMessage(const QByteArray &messageData, int flagField = 0, uint footerCode = 0, P2PMessageType messageType = P2P_MSG_UNKNOWN, unsigned long messageID = 0); // Send an SLP BYE message to close the session void sendSlpBye(); // Send an SLP invitation message void sendSlpInvitation(const MimeMessage &message, const QString &contentType, P2PMessageType messageType); // Send an SLP error message (to decline an invitation for example) - void sendSlpError(const QString &statusLine, const uint sessionID = 0, - const QString &messageContentType = 0, - P2PMessageType messageType = P2P_MSG_SLP_ERROR); - // Send a given string using sendP2PMessage() - void sendSlpMessage(const QString &slpMessage, P2PMessageType messageType); - // Test if there are still unacked messages. - void testUnAckedMessages(bool sendError); + void sendSlpError( const QString &statusLine, const ulong sessionID = 0, + const QString &messageContentType = 0, + P2PMessageType messageType = P2P_MSG_SLP_ERROR ); + // Show a timeout message because an expected message was not received. + void showTimeoutMessage( P2PWaitingState waitingState ); private slots: - // Cleanup function, called if the last ACK isn't received at all - void slotCleanup(); // The direct connection is authorized. void slotConnectionAuthorized(); // The direct connection is established. @@ -445,96 +232,26 @@ class P2PApplication : public Application private: // private fields - - /** - * @brief An indication which message is expected from the contact. - * - * This value is mostly used for debugging. - * Incoming acks are nowadays handled by gotAck() using a #P2PMessageType value. - * For some situations the waiting state is used to detect errors. - * - * The slotCleanup() method uses this value to output a descriptive error message. - */ - enum P2PWaitingState - { - // It's recommended to keep these values, as they're also printed by kWarning() statements! - - P2P_WAIT_DEFAULT = 0, ///< Not waiting at all. - P2P_WAIT_FOR_SLP_OK_ACK = 1, ///< Waiting for remote client to ack the the SLP OK message. - P2P_WAIT_FOR_FILE_DATA = 2, ///< Waiting for remote client to send file data. - P2P_WAIT_FOR_PREPARE = 3, ///< Waiting for remote client to send some prepare message. - P2P_WAIT_FOR_PREPARE_ACK = 4, ///< Waiting for remote client to ack the data preparation. - P2P_WAIT_FOR_SLP_BYE = 5, ///< Waiting for remote client to send the SLP BYE. - P2P_WAIT_FOR_SLP_BYE_ACK = 6, ///< Waiting for remote client to ack the SLP BYE message. - P2P_WAIT_FOR_SLP_ERR_ACK = 7, ///< Waiting for remote client to ack the SLP error message. - - P2P_WAIT_FOR_INVITE_ACK = 18, ///< Waiting for remote client to ack the SLP INVITE. - P2P_WAIT_CONTACT_ACCEPT = 8, ///< Waiting for the contact to accept out SLP INVITE. - P2P_WAIT_FOR_TRANSFER_ACCEPT = 9, ///< Waiting for the transfer message to be accepted. - P2P_WAIT_FOR_INVITE_TR_ACK = 19, ///< Waiting for the transfer INVITE message to be acked. - - P2P_WAIT_FOR_CONNECTION = 10, ///< Waiting until a direct connection is made or all failed - P2P_WAIT_FOR_DATA_ACK = 11, ///< Waiting for the ack message of the data we sent. - P2P_WAIT_FOR_TRANSFER_ACK = 12, ///< Waiting for contact to ack the SLP OK transfer message - - P2P_WAIT_FOR_HANDSHAKE = 13, ///< Direct connection is established, waiting for handshake. - P2P_WAIT_FOR_HANDSHAKE_OK = 14, ///< Direct connection handshake is sent, waiting for response. - - P2P_WAIT_FOR_CONNECTION2 = 15, ///< Waiting until a connection is made to the remote contact. - P2P_WAIT_USER_ACCEPT = 16, ///< Waiting for the user to accept out SLP INVITE. Complimentary to Application::isWaitingForUser(). - - P2P_WAIT_END_APPLICATION = 17 ///< Waiting for a short while before destroying this object (like TCP TIME_WAIT state) - }; - - - // The application is aborting - bool aborting_; // The application list, parent of all application objects. ApplicationList *applicationList_; - // Message buffer, required to deal with splitted MSNSLP messages - QBuffer *buffer_; // Branch ID, identifies the INVITE-message QString branch_; // Call ID, identifies the session at MSNSLP level. QString callID_; - // The data source - QIODevice *dataSource_; - // The type of data to send. - P2PDataType dataType_; - // Message ID, if we're sending "fragmented" content - unsigned long fragmentMessageID_; - // Message offset, if we're sending "fragmented" content - unsigned long fragmentOffset_; - // Size of the message, if we're sending "fragmented" content - unsigned long fragmentTotalSize_; - // Track the status of a fragmented message (incoming currently) - P2PFragmentTracker fragmentTracker_; // True if we got an SLP message (requires a different error handling) bool gotSlpMessage_; - // The last incoming message. - UnAckedMessage lastIncomingMessage_; // Content type from the invitation message QString invitationContentType_; // CSeq field from the invitation message int invitationCSeq_; // SessionID field from the invitaiton message unsigned long invitationSessionID_; - // Session ID, identifies the session at MSNP2P level. - unsigned long sessionID_; - // Message ID, updated each time a message has been sent - unsigned long nextMessageID_; // The nonce for direct connections QString nonce_; - // The list of outgoing messages to be acked - QList outgoingMessages_; - // True if an ACK was not sent yet. - bool shouldSendAck_; - // True if the user needs to acknowledge the message. (doesn't send an ACK automatically) + // Session ID, identifies the session at MSNP2P level. + unsigned long sessionID_; + // True if the user needs to acknowledge the data preparation message. (doesn't send an ACK automatically) bool userShouldAcknowledge_; - // The current waiting state - P2PWaitingState waitingState_; - // The waiting timer (for timeout events) - QTimer *waitingTimer_; }; #endif diff --git a/src/network/applications/p2papplicationbase.cpp b/src/network/applications/p2papplicationbase.cpp new file mode 100644 index 0000000..0ee8f78 --- /dev/null +++ b/src/network/applications/p2papplicationbase.cpp @@ -0,0 +1,2354 @@ +/*************************************************************************** + p2papplicationbase.cpp - description + ------------------- + begin : Mon Nov 22 2004 + copyright : (C) 2004 by Diederik van der Boor + email : vdboor --at-- codingdomain.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 License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "p2papplication.h" + +#include "../../kmessdebug.h" +#include "../../currentaccount.h" +#include "../../contact/msnobject.h" +#include "../../utils/kmessshared.h" +#include "../extra/msndirectconnection.h" +#include "../mimemessage.h" +#include "../p2pmessage.h" +#include "applicationlist.h" + +#include +#include +#include +#include + +#include + + +#ifdef KMESSDEBUG_P2PAPPLICATION +#define KMESSDEBUG_P2PAPPLICATION_GENERAL +#endif + +// Settings for debugging. +#define P2PAPPLICATION_AVOID_DC_CLIENT 0 +#define P2PAPPLICATION_AVOID_DC_SERVER 0 + +// Timeout settings, to prevent stale instances. +// Measured an ACK response time of 90 seconds once for an overloaded machine (Pentium 2 running Skype + WLM). +#define P2PAPPLICATION_TIMEOUT_ACCEPT 120000 +#define P2PAPPLICATION_TIMEOUT_ACK 120000 +#define P2PAPPLICATION_TIMEOUT_DATA 120000 +#define P2PAPPLICATION_TIMEOUT_MOREDATA 120000 +#define P2PAPPLICATION_TIMEOUT_SLP 120000 // 120 seconds +#define P2PAPPLICATION_TIMEOUT_DESTROY 10000 // 10 seconds + + + +/** + * @brief Constructor, initializes the P2PApplicationBase instance fields. + * + * The ApplicationList object contains the direct connection, which is shared between all P2P applications of one same contact. + * This object is also used to deliver messages back to the contact. + * + * @param applicationList The application list object for the contact + */ +P2PApplicationBase::P2PApplicationBase(ApplicationList *applicationList) +: Application( applicationList->getContactHandle() ), + applicationList_(applicationList), + buffer_(0), + dataSource_(0), + dataType_(P2P_TYPE_NEGOTIATION), + fragmentMessageID_(0), + fragmentOffset_(0), + fragmentTotalSize_(0), + nextMessageID_(0), + shouldSendAck_(false), + userAborted_(false), + waitingState_(P2P_WAIT_DEFAULT) +{ + // For debugging + setObjectName( QLatin1String( metaObject()->className() ) + "[0/" + getContactHandle() + "]" ); + + // Reset other internal fields + lastIncomingMessage_.dataSize = 0; + lastIncomingMessage_.messageID = 0; + lastIncomingMessage_.messageType = P2P_MSG_UNKNOWN; + lastIncomingMessage_.sentTime = 0; + lastIncomingMessage_.sessionID = 0; + lastIncomingMessage_.totalSize = 0; + lastIncomingMessage_.ackSessionID = 0; + + // Initiaize the timer + waitingTimer_ = new QTimer(this); + waitingTimer_->setSingleShot( true ); + connect( waitingTimer_, SIGNAL(timeout()), this, SLOT(slotCleanup()) ); + + // Crash prevention. + connect( applicationList_, SIGNAL(destroyed()), this, SLOT(slotApplicationListDeleted()) ); +} + + + +/** + * @brief Class destructor. + * + * Cleans up buffers and timers. + */ +P2PApplicationBase::~P2PApplicationBase() +{ +#ifdef KMESSDEBUG_APPLICATION + // Can't include getSessionID() here, is virtual method of destructed derived class. + kDebug() << " closing=" << isClosing() << + " timer=" << waitingTimer_->isActive() << + " state=" << waitingState_ << + " unackedCount=" << outgoingMessages_.count() << "."; +#endif +#ifdef KMESSTEST + KMESS_ASSERT( outgoingMessages_.isEmpty() ); +#endif + + // Stop the timer + waitingTimer_->stop(); + applicationList_ = 0; + dataSource_ = 0; + + // Delete pointers + qDeleteAll( outgoingMessages_ ); + delete waitingTimer_; + delete buffer_; +} + + + +/** + * @brief Make sure no more data will be sent. + * + * Note this method does nothing special, + * except for closing down the data source. + * Typically you want to call a high-level method + * instead which calls this method internally. + */ +void P2PApplicationBase::abortDataSending() +{ + // Abort sending. + if( dataSource_ != 0 ) + { +#ifdef KMESSDEBUG_APPLICATION + kDebug() << "application was still sending data, resetting."; +#endif + + dataSource_ = 0; + dataType_ = P2P_TYPE_NEGOTIATION; + applicationList_->unregisterDataSendingApplication( this ); + } +} + + + +/** + * @brief Scheduelle termination, but wait for last incoming packets + */ +void P2PApplicationBase::endApplicationLater() +{ +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "setting timeout to destroy object, allow contact to send a final message."; +#endif + + // If a transfer was active, make sure it ends. + abortDataSending(); + + if( waitingState_ != P2P_WAIT_END_APPLICATION ) + { + // Test if there are still unacked messages (make sure it's only tested once). + // This is done explicitly before the data transfer ends. + testUnAckedMessages( false ); + } + + // Set timeout to destroy + setWaitingState( P2P_WAIT_END_APPLICATION, P2PAPPLICATION_TIMEOUT_DESTROY ); + + // Set flag to avoid second attempts. + setClosing( true ); +} + + + +/** + * @brief Return the message ID used in the previous message from the contact. + * + * This value is used to match fragmented messages. + * It's the second field of the binary P2P header. + * + * @return The message ID field used in the binary P2P header. + */ +unsigned long P2PApplicationBase::getLastContactMessageID() const +{ + return lastIncomingMessage_.messageID; +} + + + +/** + * @brief Returns the nonce that's being expected. + * + * This value is used to authenticate the direct connection. + * + * @return The Nonce value; a randonly generated GUID. + */ +const QString & P2PApplication::getNonce() const +{ + return nonce_; +} + + + +/** + * @brief Return the number of transferred bytes. + */ +unsigned long P2PApplicationBase::getTransferredBytes() const +{ + return dataType_ != P2P_TYPE_NEGOTIATION + ? fragmentOffset_ // outgoing + : fragmentTracker_.getTransferredBytes(); // incoming +} + + + +/** + * @brief Find the unacked message which corresponds with the received P2P ACK message. + * + * This method compares the binary P2P fields to find the original message which was sent. + * The returned 'messageType' field is used later in gotAck() to handle ACKs for some specific messages. + * + * @param ackMessage The ACK message to test for. + * @return The meta information about the original message ACKed by the contact. + */ +P2PApplicationBase::UnAckedMessage * P2PApplicationBase::getUnAckedMessage(const P2PMessage &ackMessage) const +{ +#ifdef KMESSTEST + KMESS_ASSERT( ackMessage.getFlags() != 0 && ackMessage.getDataSize() == 0 ); +#endif + + unsigned long ackSessionID = ackMessage.getAckSessionID(); // ackSid + unsigned long ackUniqueID = ackMessage.getAckUniqueID(); // ackUid + unsigned long ackFlag = ackMessage.getFlags(); + + foreach( UnAckedMessage *unAcked, outgoingMessages_ ) + { + // This works for normal ACKs (0x02) to P2P messages. + // Ack message | original message + // ----------------------------------------- + // ackSid = messageID + // ackUid = ackSid + // ackSize = size + if( ackUniqueID == unAcked->ackSessionID ) + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "message is matched, option 1: " + "ackUniqueID = original uniqueID " << ackUniqueID << "."; +#endif +#ifdef KMESSTEST + KMESS_ASSERT( ackFlag == P2PMessage::MSN_FLAG_ACK ); +#endif + // Found it, save reference + return unAcked; + } + + + // This works for control messages (like 0x08): + // uniqueID is reffers to uniqueID of original message. + // Ack message | original message + // ----------------------------------------- + // total = total + // ackSid = ackSid + // ackUid = 0 + // ackSize = 0 + if( ackSessionID == unAcked->ackSessionID && ackUniqueID == 0 ) + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "message is matched, option 2: " + "ackSessionID = original uniqueID " << ackSessionID << "."; +#endif +#ifdef KMESSTEST + KMESS_ASSERT( ackFlag == P2PMessage::MSN_FLAG_ERROR ); +#endif + // Found it, save reference + return unAcked; + } + + // Also attempt to match on the messageID alone if: + // - it's a 0x80 message. In this case sendP2PMessage() has overwritten the previous uniqueID. + // - the UniqueID is not set. (also happens with normal ack messages in GAIM 1.5). + // + // This happens with 0x01 control messages: + // Ack message | original message + // ----------------------------------------- + // ackSid = messageID + // ackUid = 0 + // ackSize = bytepos + // + // This happens with 0x80 messages: + // Ack message | original message + // ----------------------------------------- + // ackSid = messageID + // ackUid = new + // ackSize = size + if( ackSessionID == unAcked->messageID + && ( ackFlag == P2PMessage::MSN_FLAG_ABORTED_RECEIVING || ackUniqueID == 0 ) ) + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "message is matched, option 3: " + "ackMessageID = original messageID " << ackSessionID << "."; +#endif +#ifdef KMESSTEST + KMESS_ASSERT( ackFlag == P2PMessage::MSN_FLAG_ABORTED_RECEIVING + || ackFlag == P2PMessage::MSN_FLAG_NEGATIVE_ACK ); +#endif + + // Found it, save reference + return unAcked; + } + } + + return 0; +} + + + +/** + * @brief Find the unacked message which corresponds with given message type. + * + * @param messageType The P2P message type. + * @return The message unacked message details. + */ +P2PApplicationBase::UnAckedMessage * P2PApplicationBase::getUnAckedMessage(const P2PMessageType messageType) const +{ + foreach( UnAckedMessage *unAcked, outgoingMessages_ ) + { + if( unAcked->messageType == messageType ) + { + return unAcked; + } + } + + return 0; +} + + + +/** + * @brief Return the current waiting state. + * + * This function is intended to be used for debugging. + * Use isWaitingState() to test for the current state. + * + * @return The current waiting state + */ +P2PApplicationBase::P2PWaitingState P2PApplicationBase::getWaitingState() const +{ + return waitingState_; +} + + + +/** + * @brief Called internally when data is received, this eventually calls gotData() + * + * It validates the current state, calls showTransferProgress() and gotData(). + * After receiving the last message, it calls showTransferComplete() and sends the SLP BYE message if needed. + * + * @param message The received data message. + */ +void P2PApplicationBase::gotDataFragment(const P2PMessage &message) +{ +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Received file data, calling gotData()."; +#endif +#ifdef KMESSDEBUG + KMESS_ASSERT( waitingState_ == P2P_WAIT_FOR_FILE_DATA ); +#endif + + unsigned long dataOffset = message.getDataOffset(); + + // See if the class is trying to abort. + // Avoid bothering the derived class with these issues. + if( waitingState_ == P2P_WAIT_FOR_SLP_BYE_ACK ) + { + kWarning() << "Still receiving data while BYE is sent " + "(contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=send0x08)."; + sendP2PAbort(); + return; + } + else if( waitingState_ == P2P_WAIT_FOR_SLP_BYE ) + { + // This actually happened when there were some delayed packets in the buffer with WLM. + // When switching bridges (SB/DC) it actually cannot guarantee the messages will be sent in order. + // This is visible at slow computers. + kWarning() << "Still receiving data while last fragment was received " + "(contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=send0x08)."; + sendP2PAbort(); + return; + } + else if( waitingState_ == P2P_WAIT_END_APPLICATION ) + { + // This happend when the data preparation was rejected, + // and the contact kept sending data. + kWarning() << "Still receiving data while the application wants to close " + "(contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=send0x08)."; + sendP2PAbort(); + return; + } + + + // See if data is already sent before establishing a connection. + // Happens with WLM, likely at slow computers. + if( dataOffset == 0 && ! applicationList_->hasDirectConnection() + && ( applicationList_->hasPendingConnections() || applicationList_->hasPendingConnectionInvitation() ) ) + { + kWarning() << "Contact is already sending data " + "while attempting to establish a direct connection " + "(state=" << waitingState_ << + " contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=continue)."; + } + + + // Initialize at the first message + if( dataOffset == 0 ) + { + fragmentTracker_.initialize( message.getMessageID(), message.getTotalSize() ); + } + else + { + // Check if the new data fragment belongs to the current one. + if( ! fragmentTracker_.isInitialized( message.getMessageID() ) ) + { + // Send negative ack message, like WLM does (0x01) + // TODO: provide last failed position, allow contact to resume + kWarning() << "Received unexpected offset for message " + "(offset=" << dataOffset << + " messageID=" << message.getMessageID() << + " contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=send0x01)."; + sendP2PAckImpl( P2PMessage::MSN_FLAG_NEGATIVE_ACK ); + sendCancelMessage( CANCEL_FAILED ); // sends slp bye + return; + } + } + + + // Update the tracker + fragmentTracker_.registerFragment( message.getDataOffset(), message.getDataSize() ); + + // Dispatch the message to the derived class + showTransferProgress( fragmentTracker_.getTransferredBytes() ); + gotData(message); + + + // See if the transfer should be complete now. + if( ! fragmentTracker_.isComplete() ) + { + // Wait for more data to arrive. + waitingTimer_->start( P2PAPPLICATION_TIMEOUT_MOREDATA ); + + if( message.isLastFragment() ) + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Got the last fragment, " + "but some messages are not received yet."; + kDebug() << "Current message is " << fragmentTracker_.getDebugMap(); +#endif + shouldSendAck_ = false; // could be true if received out of order. + } + } + else + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Got the last fragment. About to send ACK, but calling showTransferComplete() first so it can still abort."; +#endif + + // After all data is received, ACK it and send the BYE + shouldSendAck_ = true; // could be false if received out of order. + + // Signal derived class the transfer is complete + // By calling this first, the derived class can confirm the data transfer was successful. + showTransferComplete(); + + // If the derived class didn't send a message, send the ACK ourselves. + // TODO: if the messages were received out of order, should we ACK the final message instead? + if( shouldSendAck_ ) + { + sendP2PAckImpl(); + } + + // For datacast applications (ink), request termination immediately. + if( getMode() == APP_MODE_DATACAST ) + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Application is a datacast handler, request termination immediately."; +#endif + endApplication(); + return; + } + + // Determine what to send next + gotDataAckSent(); + } +} + + + +/** + * @brief Called when a P2P message was received with the error-flag set. + * + * This method aborts the application by calling contactAborted(). + * + * @param message The received error message. + */ +void P2PApplicationBase::gotErrorAck(const P2PMessage &message) +{ +#ifdef KMESSTEST + KMESS_ASSERT( message.getDataSize() == 0 ); + + if( message.isNegativeAck() ) + { + KMESS_ASSERT( message.getTotalSize() == 0 ); + } + else if( message.isError() ) + { + KMESS_ASSERT( message.getTotalSize() != 0 ); + } + + KMESS_ASSERT( message.getAckSessionID() != 0 ); + KMESS_ASSERT( message.getAckUniqueID() == 0 ); + KMESS_ASSERT( message.getAckDataSize() == 0 ); +#endif + + // When the contact aborted, it could send some 0x08 messages back for the + // next fragments which were already sent (e.g. already in the DC at that time). + // Ignore these error messages. + if( isClosing() ) + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Got an P2P error-response while closing " + "(flag=0x" << QString::number( message.getFlags(), 16 ) << + ", ignoring message)."; +#endif + + // Make sure the timer resumes. + endApplicationLater(); + return; + } + + if( message.isNegativeAck() ) + { + // Received when the transfer failed, e.g. write errors at the direct connection. + kWarning() << "Got an unexpected P2P error-response " + "(flag=nak" << + " byte=" << message.getDataSize() << + " state=" << waitingState_ << + " contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=continue)."; + + // TODO: resume transfer at the indicated byte position. + abortDataSending(); + +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Waiting for contact to send a BYE message."; +#endif + + // Wait for BYE at the moment. + setWaitingState( P2P_WAIT_FOR_SLP_BYE, P2PAPPLICATION_TIMEOUT_SLP ); + } + else + { + // Error in our headers? + kWarning() << "Got an unexpected P2P error-response " + "(flag=0x" << QString::number( message.getFlags(), 16 ) << + " state=" << waitingState_ << + " contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=contactaborted)."; + + + if( dataType_ == P2P_TYPE_NEGOTIATION && ! P2P_WAIT_FOR_DATA_ACK ) + { + // We likely made an error in the invitation/bye reponse + contactAborted( i18n("The contact rejected the invitation. An internal error occured.") ); + } + else + { + // TODO: make this error custom. + // We were sending or receiving a file/picture + // Can also happen if the contact can't handle our data for a different reason. + contactAborted( i18n("The transfer failed.") ); + } + } +} + + + +/** + * @brief Main entry function for incoming incoming messages. + * + * This method receives the incoming P2P messages, analyses it's + * flags and delivers it to various handling methods: + * - ACK messages are delivered to gotAck(), gotDirectConnectionHandshake(), gotErrorAck() or gotTimeoutAck(). + * - SLP negotiation messages are delivered to gotNegotiationFragment(). + * - P2P data preparation messages are delivered to gotDataPreparation(). + * - P2P data messages are delivered to gotDataFragment(). + * + * Other P2P messages are rejected with an error message. + * + * @param p2pMessage A reference to a P2PMessage object. + */ +void P2PApplicationBase::gotMessage(const P2PMessage &p2pMessage) +{ + // Reset session variables. + waitingTimer_->stop(); // stop timer + +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + if( getMode() == APP_MODE_DATACAST ) + { + // Special case, abuse of P2P system + kDebug() << "P2P message from " << getContactHandle() << " is handled by a datacast session."; + } + else if( nextMessageID_ == 0 ) + { + // No messages sent, new application + kDebug() << "P2P message from " << getContactHandle() << " is handled by a newly created session."; + } + else + { + // s/found/received/ since ApplicationList::gotMessage() finds it, but this makes it easier to filter the logs. + kDebug() << "New P2P message from " << getContactHandle() << " is handled by session " << getSessionID() << "."; + } +#endif + + // Cancel termination if a new message is received + // while the application was already scheduelled to be closed. + // Ignore typical messages which are sent while a transfer is aborting. + if( waitingState_ == P2P_WAIT_END_APPLICATION + && ! p2pMessage.isError() + && ! p2pMessage.isAbortedReceivingAck() + && ! p2pMessage.isAbortedSendingAck() ) + { + kWarning() << "received another message while awaiting termination " + "(flags=0x" << QString::number( p2pMessage.getFlags(), 16 ) << + " size=" << p2pMessage.getDataSize() << + " contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=unsetclosing)."; + + // Don't reset the waiting state. should happen by next method which responds to the message. + // It could be a SLP BYE for example or "481 No Such Call". + userAborted_ = false; + setClosing( false ); + } + + + // If this object was initialized to handle a Bad packet. + if( getMode() == APP_MODE_ERROR_HANDLER ) + { + // Make an exception for SLP packets + bool isSlpMessage = (p2pMessage.getSessionID() == 0 && + p2pMessage.getDataSize() > 20 && // for cvs produced data-preparation messages without a session-id + p2pMessage.getFlags() == 0); + if(! isSlpMessage) + { + // We received an unknown control message, this object was initialized to send the correct response. + // Inform the user + showEventMessage( i18n("The invitation was cancelled. The contact sent bad data, or KMess doesn't support it."), ChatMessage::CONTENT_APP_CANCELED, ! isUserStartedApp() ); + + // Abort + sendP2PAbort(); + endApplication(); + return; + } + } + + + // Handle ACKs before everything else. + if( p2pMessage.getDataSize() == 0 ) // HACK: for Bot2K3 4.1: no testing for flags + { + UnAckedMessage *unAcked = getUnAckedMessage(p2pMessage); + P2PMessageType ackedMessageType = P2P_MSG_UNKNOWN; + if( unAcked == 0 ) + { + if( p2pMessage.isAck() ) // other messages can't relate have the control flags set. + { + kWarning() << "Unable to handle ACK message, " + "original message not found " + "(flags=0x" << QString::number(p2pMessage.getFlags(), 16) << + " size=0 state=" << waitingState_ << + " contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=return)."; + return; + } + } + else + { + // Remove ack record + // Also avoids that hasUnAckedMessage() returns the message we just received. + ackedMessageType = unAcked->messageType; + outgoingMessages_.removeAll( unAcked ); + +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Removed ack slot for message " + << "(sid=" << unAcked->sessionID + << " mid=" << unAcked->messageID + << " ackSid=" << unAcked->ackSessionID + << " size=" << unAcked->dataSize + << " type=" << unAcked->messageType + << ")"; +#endif + + delete unAcked; + } + + + if( p2pMessage.isAck() ) // 0x02 + { + gotAck( p2pMessage, ackedMessageType ); + } + else if( p2pMessage.isConnectionHandshake() ) // 0x100 + { + gotDirectConnectionHandshake( p2pMessage ); + } + else if( p2pMessage.isNegativeAck() ) // 0x01 + { + gotErrorAck( p2pMessage ); + } + else if( p2pMessage.isWaitingForReply() ) // 0x04 + { + gotTimeoutAck( p2pMessage ); + } + else if( p2pMessage.isWaitingForAck() ) // 0x06 + { + gotTimeoutAck( p2pMessage ); + } + else if( p2pMessage.isError() ) // 0x08 + { + gotErrorAck( p2pMessage ); + } + else if( p2pMessage.isAbortedSendingAck() ) // 0x40 + { + gotTransferAbortedAck( p2pMessage ); + } + else if( p2pMessage.isAbortedReceivingAck() ) // 0x80 + { + gotTransferAbortedAck( p2pMessage ); + } + else + { + kWarning() << "Unable to handle ACK message, " + "unknown flag value encountered " + "(flags=0x" << QString::number(p2pMessage.getFlags(), 16) << + " size=0 state=" << waitingState_ << + " contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=assumerror)."; + + // Make sure the application does abort somehow. + gotErrorAck( p2pMessage ); + } + + return; + } + + + // Send the ack if needed (also applies to INVITE messages) + shouldSendAck_ = p2pMessage.isLastFragment(); + + // Store some message parameters for Acknowledgement later, or to send an error message. + // This should not be inserted in a if(shouldSendAck_) line, this info is used to resolve fragmented messages. + lastIncomingMessage_.dataSize = p2pMessage.getDataSize(); + lastIncomingMessage_.messageID = p2pMessage.getMessageID(); + lastIncomingMessage_.messageType = P2P_MSG_UNKNOWN; + lastIncomingMessage_.sentTime = 0; + lastIncomingMessage_.sessionID = p2pMessage.getSessionID(); + lastIncomingMessage_.totalSize = p2pMessage.getTotalSize(); + lastIncomingMessage_.ackSessionID = p2pMessage.getAckSessionID(); + + + // Special cases (abuse of the P2P system) + if( getMode() == APP_MODE_DATACAST ) + { + // Ink data, etc.. + gotDataFragment(p2pMessage); + return; + } + + + // Session ID is 0? -> the clients negotiate for session. + if(p2pMessage.getSessionID() == 0) + { + if(p2pMessage.getFlags() == 0) + { + // Parse the fragment + gotNegotiationFragment(p2pMessage); + } + else + { + kWarning() << "P2PApplicationBase:gotMessage() - P2P message can't be handled, " + "unknown negotiation message type " + "(flags=0x" << QString::number(p2pMessage.getFlags(), 16) << + " size=" << p2pMessage.getDataSize() << + " contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=send0x08)."; + + // Don't know what to do with a negotiation message with flags set. + sendP2PAbort(); + + // Abort the application + showEventMessage( i18n("The transfer failed. The contact sent bad data, or KMess doesn't support it."), ChatMessage::CONTENT_APP_CANCELED, true ); + endApplicationLater(); + return; + } + } + // Session ID not zero? -> clients exchange data in the session + else + { + // Check for data preparation messages + if( p2pMessage.getFlags() == 0 + && p2pMessage.getDataSize() == 4 + && p2pMessage.getTotalSize() == 4 ) + { + shouldSendAck_ = true; + gotDataPreparation(p2pMessage); + } + else if( waitingState_ != P2P_WAIT_FOR_FILE_DATA + && p2pMessage.isMsnObjectData() + && p2pMessage.getDataSize() == 4 + && p2pMessage.getTotalSize() == 4 ) + { + // HACK: added for Encarta Instant Answers (has data flag set with preparation message). + kWarning() << "Expecting data-preparation message, " + "got message of 4 bytes with incorrect flags " + "(assuming data preparation," + " contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << ")!"; + shouldSendAck_ = true; + gotDataPreparation(p2pMessage); + } + // Check for data messages + else if(p2pMessage.isMsnObjectData() + || p2pMessage.isFileData()) + { + gotDataFragment(p2pMessage); + } + else if(waitingState_ == P2P_WAIT_FOR_FILE_DATA + && p2pMessage.getFlags() == 0 + && p2pMessage.isFragment()) + { + // HACK: added for Kopete 0.9.2 code (has no flag set with data messages). + kWarning() << "Expecting data message, " + "got fragmented message with no flags set " + "(assuming file data," + " contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << ")!"; + gotDataFragment(p2pMessage); + } + else + { + // Unknown p2p message + kWarning() << "P2P message can't be handled, " + "unknown data message type " + "(flags=0x" << QString::number(p2pMessage.getFlags(), 16) << + " size=" << p2pMessage.getDataSize() << + " contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=send0x08)."; + + // Got an P2P binary message we can't handle. (some new kind of flag..?) + sendP2PAbort(); + + // Abort the application + showEventMessage( i18n("The transfer failed. The contact sent bad data, or KMess doesn't support it."), ChatMessage::CONTENT_APP_CANCELED, true ); + endApplicationLater(); + return; + } + } + +#ifdef KMESSTEST + // At the end of this method, we should have sent the ACK..! + KMESS_ASSERT( isP2PAckSent() ); +#endif +} + + + +/** + * @brief Called when a SLP message fragment was received. + * + * The fragments is buffered until all parts are received. + * The gotNegotiationMessage() will be called afterwards. + * + * @param p2pMessage The received P2P message with SLP payload. + */ +void P2PApplicationBase::gotNegotiationFragment(const P2PMessage &p2pMessage) +{ + if(! p2pMessage.isLastFragment()) + { + // Not everything received yet, buffer it. +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Got an SLP fragment, buffering it."; +#endif + + if(buffer_ == 0) + { + buffer_ = new QBuffer(); + buffer_->open(QIODevice::ReadWrite); + } + + buffer_->write( p2pMessage.getData(), p2pMessage.getDataSize() ); + } + else + { + // Read the message or buffer + QString slpData; + QByteArray bufferData; + + if(buffer_ != 0) + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Got the last SLP fragment."; +#endif + + // Append the last MSNSLP fraqment and call the method. + buffer_->write( p2pMessage.getData(), p2pMessage.getDataSize() ); + buffer_->reset(); + + // Read the buffer + bufferData = buffer_->readAll(); + slpData = QString::fromUtf8( bufferData.data(), bufferData.size() ); + + delete buffer_; + buffer_ = 0; + } + else + { + // Read the data directly from the message + slpData = QString::fromUtf8( p2pMessage.getData(), (int)p2pMessage.getDataSize() ); + } + + // Remove the first preamble line, because it's not in MIME format. + // Parse the remaining as MIME fields. + int preambleEnd = slpData.indexOf("\r\n"); + QString preamble = slpData.left( (preambleEnd == -1) ? 20 : preambleEnd ); + QString slpMimePart = slpData.mid( (preambleEnd == -1) ? 0 : preambleEnd + 2 ); + MimeMessage slpMessage( slpMimePart ); + + // Parse the negotiation message + gotNegotiationMessage( slpMessage, preamble ); + } +} + + + +/** + * @brief Called when a P2P message with timeout-flag was received. + * + * This method aborts the application with contactAborted(). + * + * @param message The received P2P message. + */ +void P2PApplicationBase::gotTimeoutAck(const P2PMessage &message) +{ + // Error in our headers? + if(isWaitingForUser()) + { + // Contact aborted this session because we didn't press "accept/cancel" within 120 secs. + contactAborted( i18n("The transfer failed. Timeout while waiting for user to accept.") ); + } + else + { + // Apparently the contact was waiting for something, likely some packet we had to send. + kWarning() << "Got an unexpected P2P timeout-error response " + "(flag=" << QString::number( message.getFlags(), 16 ) << + " state=" << waitingState_ << + " contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=contactaborted)."; + + if( dataType_ == P2P_TYPE_NEGOTIATION ) + { + contactAborted( i18n("The contact rejected the invitation. An internal error occured.") ); + } + else + { + contactAborted( i18n("The transfer failed. An internal error occured.") ); + } + } +} + + + +/** + * @brief Got a transfer aborted ack. + * + * This message acknowledges the data transfer was aborted. + * The flag type indicates whether the sender aborted, or the receiver aborted the transfer. + * + * @param message The received error message. + */ +void P2PApplicationBase::gotTransferAbortedAck(const P2PMessage &message) +{ + // Got some kind of confirmation when we indicated to abort. + // Accept it by closing directly + // Error in our headers? + + if( ! isClosing() ) + { + kWarning() << "Got an unexpected P2P transfer aborted-response " + "(flag=" << QString::number( message.getFlags(), 16 ) << + " state=" << waitingState_ << + " contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=endapplication)."; + + // Make sure the app still quits. + abortDataSending(); + endApplicationLater(); + } + else + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Message confirms abort, requesting terination."; +#endif + + // Make sure the app will exist, but leave it half-open to receive the final 0x08 messages + // for all messages which were already being sent whle the BYE was underway. + abortDataSending(); + endApplicationLater(); + } +} + + + +/** + * @brief Returns whether the application can handle the given ACK message. + * + * It checks whether an unacked message exists for the given ACK message. + * + * @return Whether the application can handle the ACK message. + */ +bool P2PApplicationBase::hasUnAckedMessage(const P2PMessage &p2pMessage) +{ + // Simply test using the internal function, don't expose the UnAckedMessage pointer to external classes. + return (getUnAckedMessage(p2pMessage) != 0); +} + + + +/** + * @brief Return whether a given message type is still unacked. + * + * @return Whether the given message is still unacked. + */ +bool P2PApplicationBase::hasUnAckedMessage(const P2PMessageType messageType) +{ + return (getUnAckedMessage(messageType) != 0); +} + + +/** + * @brief Test whether the first message has been sent. + */ +bool P2PApplicationBase::isFirstMessageSent() const +{ + return nextMessageID_ != 0; +} + + +/** + * @brief Test whether a P2P ack was sent for the current message. + * @return Whether a P2P ack was sent or the current message. + */ +bool P2PApplicationBase::isP2PAckSent() const +{ + return ! shouldSendAck_; +} + + +/** + * @brief Test whether the transfer is active. + * @return Whether the transfer is active. + */ +bool P2PApplicationBase::isTransferActive() const +{ + return dataType_ != P2P_TYPE_NEGOTIATION // sending data + || ! fragmentTracker_.isEmpty(); // receiving data +} + + + +/** + * @brief Verify whether the transfer was initiated and was completed. + * @return Whether the transfer is complete. + * @todo This only works for receiving data at the moment. + */ +bool P2PApplicationBase::isTransferComplete() const +{ + return fragmentTracker_.isComplete(); // TODO: sending data. +} + + + +/** + * @brief Test whether a given waiting state is set. + * @param waitingState The state to test for. + * @return Whether the waiting state is currently set. + */ +bool P2PApplicationBase::isWaitingState( P2PWaitingState waitingState ) const +{ + // TODO: later perhaps make it a flag instead (to wait for both the DC response and data preparation). + return waitingState_ == waitingState; +} + + + +/** + * @brief Send file data in P2P packets. + * + * A timer starts that transmits all data packets automatically. + * It uses the dataSource object to determine the total size of the data to send. + * + * @param dataSource Source of the data to send + * @param dataType Type of the data, used to set the correct flag in the P2P footer code. + */ +void P2PApplicationBase::sendData(QIODevice *dataSource, P2PDataType dataType) +{ +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Begin of data transfer"; +#endif +#ifdef KMESSTEST + KMESS_ASSERT( getSessionID() != 0 ); + KMESS_ASSERT( dataSource != 0 ); + KMESS_ASSERT( nextMessageID_ != 0 ); +#endif + + // Make sure we don't activate a slot without a data source. + if(dataSource == 0) + { + kWarning() << "Couldn't send data, data source is null " + "(contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=send500)."; + + showEventMessage( i18n("The transfer failed. Couldn't open data source."), ChatMessage::CONTENT_APP_FAILED, false ); + + // TODO: Official client sends BYE when data preparation failed. + sendCancelMessage(CANCEL_FAILED); // MSNSLP messages terminate the application eventually. + return; + } + + // Set the global data fields + dataSource_ = dataSource; + dataType_ = dataType; + + // Reserve the next message ID. + nextMessageID_++; + + // Set the total size field, this causes sendP2PMessage() + // to handle fragmented messages correctly. + // The 'fragmentMessageID_' is set so KMess sends all fragments with the same message ID. + // It could happen the client receives a SLP ACK meanwhile, and ACKs it with a new message ID. + // The current fragmented message should not be affected. + fragmentMessageID_ = nextMessageID_; + fragmentOffset_ = 0; + fragmentTotalSize_ = dataSource->size(); + + // Inform the application list this application wants to send a file. + // It will call sendNextDataParts() each time the connection or switchboard can accept new packets. + applicationList_->registerDataSendingApplication( this ); +} + + + +/** + * @brief Send the data preparation message. + * + * This is a consists of a P2P message with 0x00000000 as message body. + * The contact should return with a data-preparation ACK, which initiates the file transfer. + * Note that Windows Live Messenger (v8) will start a direct connection setup first + * before it sends the data preparation ACK. + */ +void P2PApplicationBase::sendDataPreparation() +{ +#ifdef KMESSTEST + KMESS_ASSERT( getSessionID() != 0 ); + KMESS_ASSERT( waitingState_ == P2P_WAIT_DEFAULT || waitingState_ == P2P_WAIT_FOR_FILE_DATA ); +#endif + + // TODO: Check the various footer codes send for certain transfers. + QByteArray p2pMessage( 4, 0x00 ); + sendP2PMessage(p2pMessage, 0, 1, P2P_MSG_DATA_PREPARATION); + + // TODO: after the data preparation is sent, WLM8 starts a direct connection setup: + // - it does not send an ACK yet + // - it sends the transreq message, + // - when the invitation finished (or the DC is up..??) it sends the data preparation ACK. + // - after that it sends the ACK of the last "SLP 200 OK" message. + // - at this point, the data preparation ACK triggers KMess to send the picture data. + +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Waiting for data preparation ACK..."; +#endif + + // Wait until our preparation message is ACK-ed + setWaitingState( P2P_WAIT_FOR_PREPARE_ACK, P2PAPPLICATION_TIMEOUT_ACK ); +} + + + +/** + * @brief Send the direct connection handshake + * + * This message contains the Nonce field, + * used by the other contact to authenticate the direct connection. + * The confirmation message is identical to the handshake message. + */ +void P2PApplicationBase::sendDirectConnectionHandshake( const QString &nonce ) +{ +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Sending direct connection handshake " + << "(nonce=" << nonce << ")."; +#endif +#ifdef KMESSTEST + KMESS_ASSERT( applicationList_->hasDirectConnection() ); +#endif +#ifdef KMESSTEST + // NOTE: the handshake could happen while the file transfer was in progress, or even completed already. + KMESS_ASSERT( waitingState_ == P2P_WAIT_FOR_CONNECTION2 // we just established connection, send the first handshake + || waitingState_ == P2P_WAIT_FOR_HANDSHAKE // contact established connection, waiting to receive first handshake + || waitingState_ == P2P_WAIT_FOR_HANDSHAKE_OK // we sent the first handshake, waiting for contact to return second. + ); +#endif + + // Message flag is 0x100 + const int handshakeFlag = P2PMessage::MSN_FLAG_DC_HANDSHAKE; + + // Prepare the header + QByteArray header( 48, 0x00 ); + nextMessageID_++; + + // Insert the bytes + P2PMessage::insertBytes(header, 0, 0); // 1: SessionID + P2PMessage::insertBytes(header, nextMessageID_, 4); // 2: MessageID + // offset and total size are 0 + P2PMessage::insertBytes(header, handshakeFlag, 28); // 6: Message type (flags) + + // Insert the nonce at fields 7-9 + P2PMessage::insertNonce(header, nonce); + + +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + // Display binary data as hexadecimal string + const int nonceOffset = 32; + const char hexMap[] = "0123456789ABCDEF"; + QString hex; + for(int i = 0; i < 16; i++) + { + if( i == 4 || i == 6 || i == 8 || i == 10 ) + { + hex += "-"; + } + int upper = (header[nonceOffset + i] & 0xf0) >> 4; + int lower = (header[nonceOffset + i] & 0x0f); + hex += hexMap[upper]; + hex += hexMap[lower]; + } + kDebug() << "copied nonce '" << nonce << "' to p2p message header as '" << hex << "'."; +#endif + + // Forcefully Send the message over the direct connection + applicationList_->getDirectConnection()->sendMessage( header ); + + // Not updating the waiting state here. + // The handshake process could happen while the data transfer is already in progress +} + + + +/** + * @brief Called when the connection is ready to send more file data. + * @param preferredFragments The preferred number of fragments to send at once. + * + * The sendData() method calls ApplicationList::registerDataSendingApplication() + * to start this notification process. Each time the direct connection is + * ready to send more data, ApplicationList::slotConnectionReadyWrite() is called which + * calls this method. + * + * @return Returns false if something failed, and this method should not be called again. + */ +bool P2PApplicationBase::sendNextDataParts( int preferredFragments ) +{ + // Abort if the data sending was reset. + // Also fixes race conditions with signals. + if( dataType_ == P2P_TYPE_NEGOTIATION || isClosing() || KMESS_NULL(dataSource_) ) + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "called while aborting " + "(datatype=" << dataType_ << + " isclosing=" << isClosing() << + " userAborted=" << userAborted_ << // sort-of reserved for aborts from ApplicationList. + " datasource=" << dataSource_ << + " waitingState=" << waitingState_ << + " contact=" << getContactHandle() << ")."; +#endif + + // Request caller not to call us again. + return false; + } + + + // Allow the caller to specify the number of loops, + // e.g. more for a direct connection, less for parallel transfers. + int loops = qMax( preferredFragments, 1 ); + while( --loops >= 0 && fragmentOffset_ < fragmentTotalSize_ && ! dataSource_->atEnd() ) + { + // Read the data from the file. + char buffer[1202]; // 1202 is the max P2P data size. + qint64 bytesRead = dataSource_->read( buffer, 1202 ); + if( bytesRead < 0 ) + { + kWarning() << "Couldn't send more data, " + "read error at " << fragmentOffset_ << " of " << fragmentTotalSize_ << " bytes " + "(contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=slpcancel)."; + sendCancelMessage( CANCEL_FAILED ); + return ( dataSource_ == 0 ); // return true if already aborted by sendCancelMessage(). + } + else if( bytesRead == 0 ) + { + break; + } + + // Wrap in buffer, without copying. + QByteArray data = QByteArray::fromRawData( buffer, (int)bytesRead ); + +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Sending data:" + << " offset=" << fragmentOffset_ + << " buffer=" << bytesRead; +#endif + + // Determine the progress value now because mesageOffset_ it reset by the last sendP2PMessage() call. + unsigned long nextProgressValue = ( fragmentOffset_ + bytesRead ); + + // Determine the flags: + // Funny, MSN6 doesn't seam to care which flag was set + // while transferring the file. KMess however, does. + bool writeSuccess = false; + switch( dataType_ ) + { + case P2P_TYPE_PICTURE: + writeSuccess = sendP2PMessage( data, P2PMessage::MSN_FLAG_OBJECT_DATA, 1, P2P_MSG_DATA, fragmentMessageID_ ); + break; + + case P2P_TYPE_FILE: + writeSuccess = sendP2PMessage( data, P2PMessage::MSN_FLAG_FILE_DATA, 2, P2P_MSG_DATA, fragmentMessageID_ ); + break; + + default: + // Display error message for the first message only. + if( fragmentOffset_ == 0 ) + { + kWarning() << "Unknown data transfer mode " + "(mode=" << dataType_ << + " contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=tryflag)."; + } + + writeSuccess = sendP2PMessage( data, 0, 1, P2P_MSG_DATA, fragmentMessageID_ ); // The best solution in this situation + } + + // Avoid next round if write was blocked already. + // This could happen if a direct connection can't write all data. + // The DirectConnectionBase class will automatically send the remaining parts, so don't worry about that here. + if( ! writeSuccess ) + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "message could not be written entirely, leaving loop early."; +#endif + break; + } + + // Dispatch the progress to the derived class + showTransferProgress( nextProgressValue ); + } + + + // Rounds completed, make final assertions. + // Be verbose if something internally goes wrong. + if( dataSource_->atEnd() && fragmentOffset_ < fragmentTotalSize_ ) + { + kWarning() << "data source is at the end, " + "but offset byte count is not " + "(fragmentoffset=" << fragmentOffset_ << + " fragmenttotalsize=" << fragmentTotalSize_ << + " sourceopen=" << dataSource_->isOpen() << + " sourcesize=" << dataSource_->size() << + " datatype=" << dataType_ << + " contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=resetstate)!"; + + // Reset for next p2p message. + fragmentTotalSize_ = 0; + fragmentOffset_ = 0; + } + + // See if transfer completed, + // if so tell the application list to stop calling this method. + if( fragmentOffset_ == 0 || fragmentOffset_ >= fragmentTotalSize_ ) + { + dataSource_ = 0; + dataType_ = P2P_TYPE_NEGOTIATION; + applicationList_->unregisterDataSendingApplication( this ); + +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Waiting for all data received ACK..."; +#endif + + // Now wait for the contact to ACK that it received all data. + setWaitingState( P2P_WAIT_FOR_DATA_ACK, P2PAPPLICATION_TIMEOUT_ACK ); + + // no return false, will unregister the app twice. + } + + return true; +} + + + +/** + * @brief Send a low-level control message to terminate the session. + * + * The session will automatically be scheduelled termination using a call to endApplicationLater(). + */ +void P2PApplicationBase::sendP2PAbort() +{ +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + if( ! shouldSendAck_ ) + { + kDebug() << "NOTICE: sending 0x08 control packet while the contact is not expecting an ack response."; + } +#endif + + // Inform the client we want to kill the session right away. + sendP2PAckImpl( P2PMessage::MSN_FLAG_ERROR ); + +#ifdef KMESSTEST + KMESS_ASSERT( isP2PAckSent() ); +#endif + + // Scheduelle termination of the session. + endApplicationLater(); +} + + + +/** + * @brief Send an ACK message if this is needed. + * + * This method called each time a P2P payload is fully received (such as an SLP message). + * The ACK system turns the P2P communication into a stop-and-wait protocol. + * The other client waits until it receives an ACK or error before it continues with the next step. + * + * This function is mostly used by the derived P2PApplication class. + * It calls sendP2PAck() when a SLP message is properly received. + * + * @return Whether an ack had to be sent. + */ +bool P2PApplicationBase::sendP2PAck() +{ + // Only send an ACK is this is really needed. + if( ! shouldSendAck_ ) + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "NOTICE: not sending 0x02 ack packet, something is already sent."; +#endif + + return false; + } + + // Send the ack + sendP2PAckImpl(); // type = P2PMessage::MSN_FLAG_ACK. + return true; +} + + + +/** + * @brief Send a P2P ACK message. + * + * This method is the internal implementation for sendP2PAck() and others. + * + * @param ackType The ACK type (flag field) to use, defaults to MSN_FLAG_ACK. + * @param originalMessageData The meta data of the original message, used to fill some parts of the ACK message. + * Defaults to the last received message. + */ +void P2PApplicationBase::sendP2PAckImpl(int ackType, UnAckedMessage *originalMessageData) +{ +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + if(ackType == P2PMessage::MSN_FLAG_ACK) + { + if( nextMessageID_ == 0 && getMode() == APP_MODE_NORMAL ) + { + kDebug() << "Sending P2P ACK (INVITE-ACK)"; + } + else + { + kDebug() << "Sending P2P ACK"; + } + } + else if(ackType == P2PMessage::MSN_FLAG_ERROR) + { + kDebug() << "Sending P2P ACK (Error-response)"; + } + else if(ackType == P2PMessage::MSN_FLAG_WAITING) + { + kDebug() << "Sending P2P ACK (Timeout-response)"; + } + else if(ackType == P2PMessage::MSN_FLAG_WAITING_FOR_ACK) + { + kDebug() << "Sending P2P ACK (ACK-timeout-response)"; + } + else if(ackType == P2PMessage::MSN_FLAG_ABORTED_SENDING) + { + kDebug() << "Sending P2P ACK (Aborted-myself-ACK)"; + } + else if(ackType == P2PMessage::MSN_FLAG_ABORTED_RECEIVING) + { + kDebug() << "Sending P2P ACK (Aborted-you-ACK)"; + } + else + { + kDebug() << "Sending P2P ACK (Unknown-type)"; + } +#endif +#ifdef KMESSTEST + KMESS_ASSERT( shouldSendAck_ ); // TODO: test for control messages, which do not have to obey this rule. +#endif + + // Default to previous message if no argument is given + if( originalMessageData == 0 ) + { + originalMessageData = &lastIncomingMessage_; + } + + + // Fill the header: + // + // 0 4 8 16 24 28 32 36 40 48 + // |....|....|....|....|....|....|....|....|....|....|....|....| + // |sid |mid |offset |totalsize|size|flag|asid|auid|a-datasz | + // + + QByteArray header( 48, 0x00 ); + + // Determine the message ID + unsigned long messageID; + if( nextMessageID_ == 0 ) + { + // We don't have a message ID set yet, we're acknowledging + // the first INVITE message. Generate an ID + + nextMessageID_ = KMessShared::generateID(); + messageID = nextMessageID_; + + // Somehow, the next message we send (200 OK) should contain a messageID - 3: + // We decrement the messageID with 4 because it will be incremented in the next call. + nextMessageID_ -= 4; + } + else + { + nextMessageID_++; + messageID = nextMessageID_; + } + + // Determine the ack settings. + unsigned long ackTotalSize = 0; + unsigned long ackSessionID = 0; + unsigned long ackUniqueID = 0; + unsigned long ackDataSize = 0; + + // New ack field schema seen with Windows Live Messenger: + if( ackType == P2PMessage::MSN_FLAG_ERROR ) + { + // This ack tells the contact it should reset the session (TCP RST). + ackTotalSize = originalMessageData->totalSize; + ackSessionID = originalMessageData->ackSessionID; + } + else if( ackType == P2PMessage::MSN_FLAG_NEGATIVE_ACK ) + { +#ifdef KMESSTEST + KMESS_ASSERT( ! fragmentTracker_.isEmpty() ); + KMESS_ASSERT( fragmentTracker_.isInitialized( originalMessageData->messageID ) ); +#endif + // This ack tells the contact we haven't received the data properly (e.g. invalid offsets) + // TODO: guess the ackDataSize is the the last offset which was received. + ackSessionID = originalMessageData->messageID; + ackDataSize = fragmentTracker_.isInitialized( originalMessageData->messageID ) + ? fragmentTracker_.getTransferredBytes() : 0; + } + else if( ackType == P2PMessage::MSN_FLAG_ABORTED_RECEIVING ) + { + // This ack tells the contact we won't ack the data anymore, since it's aborted. + ackSessionID = originalMessageData->messageID; + ackUniqueID = KMessShared::generateID(); + ackDataSize = originalMessageData->totalSize; + } + else if( ackType == P2PMessage::MSN_FLAG_ABORTED_SENDING ) + { +#ifdef KMESSTEST + KMESS_ASSERT( fragmentMessageID_ != 0 ); + KMESS_ASSERT( originalMessageData->messageType == P2P_MSG_DATA ); + KMESS_ASSERT( hasUnAckedMessage( P2P_MSG_DATA) ); +#endif + // this ack tells the contact to terminate it's ack session. + ackSessionID = originalMessageData->messageID; // must reffer to our OWN message. + } + else if( ackType == P2PMessage::MSN_FLAG_WAITING ) + { + // The ackSid seams to be random if it was waiting for an ack. + ackSessionID = originalMessageData->ackSessionID; // we give it a more precise value. + } + else + { +#ifdef KMESSTEST + KMESS_ASSERT( ackType == P2PMessage::MSN_FLAG_ACK ); +#endif + // This is a normal ack which confirms the arrival. + ackSessionID = originalMessageData->messageID; + ackUniqueID = originalMessageData->ackSessionID; + ackDataSize = originalMessageData->totalSize; + } + + // Insert the bytes + P2PMessage::insertBytes(header, originalMessageData->sessionID, 0); // SessionID + P2PMessage::insertBytes(header, messageID, 4); // BaseIdentifier + // offset of 8 bytes is always 0 (position 8) + P2PMessage::insertBytes(header, ackTotalSize, 16); // Confirm total size set in previous message + // size of 4 bytes is always 0 (position 24) + P2PMessage::insertBytes(header, ackType, 28); // Set the ACK flag. + P2PMessage::insertBytes(header, ackSessionID, 32); // ID referring to a previous message. + P2PMessage::insertBytes(header, ackUniqueID, 36); // ID referring to a specific fragment. + P2PMessage::insertBytes(header, ackDataSize, 40); // reference to the Size of that message. + + // Deliver the message over the correct link (switchboard or direct connection) + applicationList_->sendMessage(this, header); + shouldSendAck_ = false; + +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "ACK Transmitted " + << "(flags=0x" << QString::number(ackType, 16) << ")."; +#endif +} + + + +/** + * @brief Sends a P2P Message. + * + * This method constructs the P2P binary header fields. + * The constructed message is delivered to ApplicationList::sendMessage(). + * + * The following instance fields are updated automatically: + * - nextMessageID_ is generated for every new P2P message. + * - fragmentOffset_ is updated when a splitted message is sent. + * - fragmentTotalSize_ and messageOffse_ are reset when the last message fragment is sent. + * - outgoingMessages_ is updated to trace ACKs back later. + * + * The fragmentTotalSize_ should be set to the total size before sending message fragments. + * This is done automatically by sendSlpMessage(). + * + * @param messageData The message payload to send. This can be binary file data or a SLP MIME data. + * @param flagField The value for the flag field in the P2P header. + * @param footerCode The message footer, which is appended when the message is sent over the switchboard. + * @param messageType The type of the message. This value is stored with in the unacked message queue. + * This value is used later to respond to ACKs of certain special messages. + * @param messageID Optional message ID to enforce. If nothing is selected, the next available message ID will be used automatically. + * @return Whether the message can be sent. If the socket would block, false is returned. + * This only occurs for direct connections connections. + */ +bool P2PApplicationBase::sendP2PMessage(const QByteArray &messageData, int flagField, uint footerCode, P2PMessageType messageType, unsigned long messageID) +{ +#ifdef KMESSTEST + KMESS_ASSERT( messageData.size() <= 1202 ); +#endif + + // Initialize the header + QByteArray header( 48, 0x00 ); + + // Determine the message ID, if none is given. + if( messageID == 0 ) + { + if( nextMessageID_ == 0) + { + // This is the first P2P message we send, initialize message ID + nextMessageID_ = KMessShared::generateID(); + } + else if(fragmentOffset_ == 0) + { + // Only increments the ID for the first message. + // Don't increment it for the next fragments (if it's a splitted message). + // Better approach: pass the desired messageID to this function. + nextMessageID_++; + } + + messageID = nextMessageID_; + } + + + // Verify we're not configured to send a splitted message. + if( fragmentTotalSize_ > 0 + && flagField != 0 + && flagField != P2PMessage::MSN_FLAG_OBJECT_DATA + && flagField != P2PMessage::MSN_FLAG_FILE_DATA ) + { + kWarning() << "Attempting to send splitted ACK message " + "(flags=0x" << QString::number( flagField, 16 ) << + " state=" << waitingState_ << + " contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=continue)!"; + } + + + // Determine the message size: + uint messageSize = messageData.size(); + ulong totalSize; + ulong offsetField; + + if( fragmentTotalSize_ == 0 ) + { + // Normal message + totalSize = messageData.size(); + offsetField = 0; + } + else + { + // Splited message: total size is set. + totalSize = fragmentTotalSize_; + offsetField = fragmentOffset_; + } + + + // Generate ack session identifier for this message + unsigned long ackSessionID = KMessShared::generateID(); + + // Set session ID to zero when SLP messages are sent. + unsigned long sessionID = getSessionID(); + if( flagField == 0 + && messageType != P2P_MSG_DATA_PREPARATION ) + { + sessionID = 0; + } + + // Update the header + P2PMessage::insertBytes(header, sessionID, 0); // 1: Session ID (zero for SLP messages). + P2PMessage::insertBytes(header, messageID, 4); // 2: BaseIdentifier (starts random [4, 4294967295]) + P2PMessage::insertBytes(header, offsetField, 8); // 3: Offset (if more then 1202 bytes to send) + P2PMessage::insertBytes(header, totalSize, 16); // 4: Total size of the message + P2PMessage::insertBytes(header, messageSize, 24); // 5: This message size, size of previous if no data + P2PMessage::insertBytes(header, flagField, 28); // 6: Message type (flags) + P2PMessage::insertBytes(header, ackSessionID, 32); // 7: Used to link ack messages (ACK session ID) +//P2PMessage::insertBytes(header, 0, 36); // 8: Field7 of previous for ACK-messages (unique ID) +//P2PMessage::insertBytes(header, 0, 40); // 9: Field4 of previous for ACK-messages (size) + + + // Deliver the message over the correct link (switchboard or direct connection) + bool writeSuccess = applicationList_->sendMessage( this, header, messageData, footerCode ); + if( ! writeSuccess ) + { + // This only happens when a direct connection transfer is congested. + // The same message will be re-sent later. +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Message sending was blocked, should try again later."; +#endif + return false; + } + + + // Update unacked message queue to handle incoming ACKs + if( flagField == 0 || messageType != 0 ) + { + if( offsetField == 0 ) + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Storing message fields to track the ACK response."; +#endif + // First message, or single message, store new record for ACKs. + QDateTime currentTime; + UnAckedMessage *ackData = new UnAckedMessage; + ackData->sessionID = getSessionID(); + ackData->messageID = messageID; + ackData->dataSize = messageSize; + ackData->totalSize = totalSize; + ackData->ackSessionID = ackSessionID; + ackData->messageType = messageType; // used later to handle certain ACKs. + ackData->sentTime = currentTime.toTime_t(); + outgoingMessages_.append(ackData); + } + else + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Updating message fields to track the ACK response."; +#endif + // Follow-up part of a splitted/fragmented message. + // Update the uniqueID aka ackSID field to handle new acks. + // TODO: it appears MSN7 uses the same ackSID for some messages, not sure + // whether that is a feature (to capture acks in a short time) or a problem in their random function. + foreach( UnAckedMessage *unAcked, outgoingMessages_ ) + { + if( unAcked->messageID == messageID ) + { + unAcked->ackSessionID = ackSessionID; + break; + } + } + } + } + + // Update the offset fields for splitted messages + if(fragmentTotalSize_ != 0) + { + // Update offset + fragmentOffset_ += messageSize; + + // If we transmitted all parts, reset the fields for the next normal message + if(fragmentOffset_ >= fragmentTotalSize_) + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "All message parts sent, resetting fragmentOffset_ and fragmentTotalSize_."; +#endif + + fragmentOffset_ = 0; + fragmentTotalSize_ = 0; + } + } + + +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Message transmitted " + << "(sid=" << getSessionID() + << " mid=" << messageID + << " ackSid=" << ackSessionID + << " flags=0x" << QString::number(flagField, 16) + << " size=" << messageSize + << " type=" << messageType + << ")"; +#endif + + return true; +} + + + +/** + * @brief Send a low-level error message that the application is waiting for a certain message. + */ +void P2PApplicationBase::sendP2PWaitingError() +{ + sendP2PMessage(0, P2PMessage::MSN_FLAG_WAITING, 0); + shouldSendAck_ = false; +} + + + +/** + * @brief Send a complete SLP message in multiple P2P packets. + * + * It splits the SLP message into chunks which fit in the P2P payload. + * Each part will be sent with sendP2PMessage(). + * The messages always have a Session ID of zero. + * + * This is a low-level function which is primary used by + * P2PApplication::sendSlpInvitation(), P2PApplication::sendSlpBye(), etc.. + * + * @param slpMessage The whole SLP message to send, including SLP headers. + * @param messageType The type of the message, used to trace ACK messages back later. + */ +void P2PApplicationBase::sendSlpMessage(const QString &slpMessage, P2PMessageType messageType) +{ +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "SLP message=" << slpMessage; +#endif + + // Get the raw utf8 encoded bytearray + QByteArray utf8Message = slpMessage.toUtf8(); + QByteArray messagePart; + + // Make sure the extra padded '\0' character is there. MSN 6-WLM rely on this. + utf8Message.append('\0'); + + // Make sure the message gets sent in chunks of 1202 bytes. + // Only set fragmentTotalSize_ if there are chunks, for useless debug messages. + int remainingBytes = utf8Message.size(); + fragmentOffset_ = 0; + fragmentTotalSize_ = ( remainingBytes <= 1202 ? 0 : remainingBytes ); + + do + { + // Let another QByteArray encapsulate a part of the utf8Message + char *dataPointer = utf8Message.data() + fragmentOffset_; + uint dataSize = qMin(remainingBytes, 1202); + messagePart = QByteArray::fromRawData( dataPointer, dataSize ); + + // Send the message with the generic sendP2PMessage() method + // fragmentOffset_ is updated automatically + sendP2PMessage(messagePart, 0, 0, messageType); + remainingBytes -= dataSize; + +#ifdef KMESSTEST + KMESS_ASSERT( (uint) remainingBytes == fragmentTotalSize_ - fragmentOffset_ ); +#endif + } + while(remainingBytes > 0); + + // Reset for normal operations + fragmentOffset_ = 0; + fragmentTotalSize_ = 0; +} + + + +/** + * @brief Notify this base class the user is aborting the session. + * + * This method sets a flag to avoid sending certain error messages while the user is aborting + * (e.g. closing the chat window). It prevents crashes or spawning new chat sessions. + * + * @param userAborted Whether the user is aborting. + */ +void P2PApplicationBase::setUserAborted( bool userAborted ) +{ + userAborted_ = userAborted; +} + + + +/** + * @brief Indicate which packet is expected next. + * @param waitingState The new waiting state. + * @param timeout Number of milliseconds before a timer fires and showTimeoutMessage() is called. + * The contact's client will be informed automatically that it forgot to send some data. + * If this value is 0, it means the class temporary changes the state for debugging. + */ +void P2PApplicationBase::setWaitingState( P2PWaitingState waitingState, int timeout ) +{ + unsigned long sessionID = getSessionID(); + +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + if( timeout == 0 ) + { +#ifdef KMESSTEST + KMESS_ASSERT( ! waitingTimer_->isActive() ); +#endif + + if( waitingState_ != waitingState ) + { + kDebug() << "temporary switching waitingState of session" << sessionID << "from" << waitingState_ << "to" << waitingState; + } + } + else + { + if( waitingState_ != waitingState ) + { + kDebug() << "switching waitingState of session" << sessionID << "from" << waitingState_ << "to" << waitingState; + } + else + { + kDebug() << "resuming waitingState of session" << sessionID << "for" << waitingState_; + } + } +#endif + + // Update the state + waitingState_ = waitingState; + + // Restart the timer + if( timeout != 0 ) + { + waitingTimer_->start( timeout ); + } +} + + + +/** + * @brief Crash prevention method. + * + * While it should never happen that the ApplicationList is deleted before the P2PApplication class, + * this did happen in the past (see http://trac.kmess.org/ticket/263). This method is an extra + * safety guard to prevent crashes after many things do wrong. + */ +void P2PApplicationBase::slotApplicationListDeleted() +{ + kWarning() << "ApplicationList is deleted before the P2PApplication class! This should not happen!" + "(maybe an old session, " + " contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=endapplication)."; + + applicationList_ = 0; // ignores the derived P2PApplication class for now. + + // No one can or needs to receive the deleteMe() signal anymore. + // Forcefuly delete ourselves and hope for the best. + deleteLater(); +} + + + +/** + * @brief Cleanup function, is used to handle timeout events. + * + * When a timeout occurs before the contact sent something we expect, + * this function terminates the application automatically. + * + * Depending on the internal "waiting state", an error message will be outputted with kWarning(). + */ +void P2PApplicationBase::slotCleanup() +{ + // See if the waiting time for new packets is over (like TCP's TIME_WAIT state). + if( waitingState_ == P2P_WAIT_END_APPLICATION ) + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "timer of endApplicationLater() fired, finally destroying object."; +#endif + + // Directly destroy ...finally. + testUnAckedMessages( true ); + endApplication(); + return; + } + + +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "timeout fired, cleaning up " + "(contact=" << getContactHandle() << + " session=" << getSessionID() << + " waitingState=" << waitingState_ << ")."; +#endif +#ifdef KMESSTEST + KMESS_ASSERT( waitingState_ != P2P_WAIT_DEFAULT ); +#endif + + + // Not waiting for ourselves to connect. + // Not waiting for contact to accept. + // Not waiting for contact to send BYE ack. + if( waitingState_ == P2P_WAIT_FOR_CONNECTION2 + || waitingState_ == P2P_WAIT_CONTACT_ACCEPT + || waitingState_ == P2P_WAIT_FOR_SLP_BYE_ACK ) + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Not sending timeout message for current waiting state."; +#endif + } + else + { + if( userAborted_ ) + { + // Don't send messages when aborting. This could potentially crash KMess, or cause new windows to appear. + // - suppose this is the last aborting application which requests removal. + // - ApplicationList informs the MsnSwitchboardConnection it can remove itself. + // - ChatMaster processes the putMsg() call, and attempts to deliver the message. +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Not sending error message because application is aborting."; +#endif + + testUnAckedMessages( false ); + } + else + { + +/* + // Tell the other client we were waiting for a message to receive! + // TODO: this is still not as it should be, but a start. + uint waitFlag = P2PMessage::MSN_FLAG_WAITING; + switch(waitingState_) + { + case P2P_WAIT_FOR_FILE_DATA: + // Waiting for file data. Application is shutting down sender right now. + waitFlag = P2PMessage::MSN_FLAG_ABORTED_RECEIVING; // 0x80 + break; + + if waiting for ack, wlm also sends 0x04. + + case P2P_WAIT_FOR_SLP_OK_ACK: + case P2P_WAIT_FOR_PREPARE_ACK: + case P2P_WAIT_FOR_TRANSFER_ACK: + case P2P_WAIT_FOR_DATA_ACK: + //not P2P_WAIT_FOR_SLP_BYE_ACK: + case P2P_WAIT_FOR_SLP_ERR_ACK: + // we guess 0x06 is used as waiting-for-ack error. + waitFlag = P2PMessage::MSN_FLAG_WAITING_FOR_ACK; + break; + + default: break; + } + + // Send the message + sendP2PMessage(0, waitFlag, 0); // TODO: pass the original message which is unacked!! +*/ + testUnAckedMessages( true ); // TODO: argument is not used, and replaces sendP2PWaitingError(). + + sendP2PWaitingError(); + } + } + + + // Pass to delivered class + showTimeoutMessage( waitingState_ ); +} + + + +/** + * @brief Test if the contact aborted the sending of data. + * + * This method is intended to be used by the P2PApplication class. + * When a transfer to the contact is aborted, this method sends a 0x40 message. + * That control packet terminates the "ack slot" in the remote client. + */ +void P2PApplicationBase::testDataSendingAborted() +{ +#ifdef KMESSTEST + KMESS_ASSERT( waitingState_ == P2P_WAIT_FOR_SLP_BYE_ACK ); +#endif + + // See if the data was not acked. + UnAckedMessage *unAckedDataMessage = getUnAckedMessage( P2P_MSG_DATA ); + if( unAckedDataMessage != 0 ) + { +#ifdef KMESSDEBUG_P2PAPPLICATION_GENERAL + kDebug() << "Sent data was not acked, sending 0x40 to abort ack request."; +#endif + + // It's possible WLM also closed it's data stream at this point, + // so ignores the 0x40 and sends a 0x80 at the same time back. + sendP2PAckImpl( P2PMessage::MSN_FLAG_ABORTED_SENDING, unAckedDataMessage ); + + // Remove from collection + outgoingMessages_.removeAll( unAckedDataMessage ); + delete unAckedDataMessage; + } +} + + + +/** + * @brief Test if there are still unacked messages. + * @param sendError Whether to send an error to the client back as well. + */ +void P2PApplicationBase::testUnAckedMessages( bool /*sendError*/ ) +{ + // Check if there are still unacked messages. + if( ! outgoingMessages_.isEmpty() ) + { + uint unackedCount = outgoingMessages_.count(); + + if( unackedCount == 1 ) + { + UnAckedMessage *unAcked = outgoingMessages_.at(0); + + // More simple debug statement for most used case. + kWarning() << "there is still " << unackedCount << " unacked message " + "(type=" << unAcked->messageType << + " ackSid=" << unAcked->ackSessionID << + " totalsize=" << unAcked->totalSize << + " state=" << waitingState_ << + " contact=" << getContactHandle() << + " class=" << metaObject()->className() << + " session=" << getSessionID() << ")"; + } + else + { + kWarning() << "there are still " << unackedCount << " unacked messages " + "(state=" << waitingState_ << + " contact=" << getContactHandle() << + " class=" << metaObject()->className() << + " session=" << getSessionID() << ")"; + + foreach( UnAckedMessage *unAcked, outgoingMessages_ ) + { + kWarning() << "Message " << unAcked->messageID << " is unacked " + "(type=" << unAcked->messageType << + " ackSid=" << unAcked->ackSessionID << + " totalsize=" << unAcked->totalSize << ")."; + + } + } + } +} + + + +/** + * @brief Stop the waiting timer + * @return Whether the timer was still running, or not. + */ +bool P2PApplicationBase::stopWaitingTimer() +{ + bool wasActive = waitingTimer_->isActive(); + waitingTimer_->stop(); + return wasActive; +} + + + +/** + * @brief Utility function to write P2P data to a file, also deals with message offsets. + * + * When an error occurs, the required error message + * will be sent back to the other client. + * + * While Windows Live Messenger does not allow messages to be out of order, + * this method explicitly allows it because WLM itself seams to send messages out of order + * in some cases when it's switching to the direct connection (likely error prone at slow systems). + * + * @param message The P2P message with a file part. + * @param file The file to output the data to. + * @return True if the data could be written to the file, false on error. + */ +bool P2PApplicationBase::writeP2PDataToFile( const P2PMessage &message, QIODevice *file ) +{ + unsigned long offset = message.getDataOffset(); + + // See if the offset should be changed, + // and if so, update it. + if( offset != (ulong)file->pos() && ! file->seek( offset ) ) + { +#ifdef KMESSDEBUG_APPLICATION + kDebug() << "data is received out of order, updating file offset."; +#endif + + // File position was different and could not be changed.. + unsigned long fileSize = file->size(); + + // See if the offset is too far ahead.. (e.g. don't make us allocate 1GB) + if( offset > ( fileSize + 100000 ) ) // ~100 kB + { + // TODO: allow contacts to resume at the correct byte position. + kWarning() << "data offset is too far ahead of current end of file " + "(filepos=" << file->pos() << + " eofpos=" << file->size() << + " offset=" << offset << + " contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=send0x01)"; + sendP2PAckImpl( P2PMessage::MSN_FLAG_NEGATIVE_ACK ); + sendCancelMessage( CANCEL_FAILED ); // sends slp bye + return false; + } + else if( offset <= fileSize ) + { + // seek( offset ) should only fail if the offset is beyond the end of the file. + // If this is not the case, moving within the file failed so abort. + kWarning() << "file pointer could not be set to message offset " + "(filepos=" << file->pos() << + " eofpos=" << file->size() << + " offset=" << offset << + " contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=sendcancel)"; + sendCancelMessage( CANCEL_FAILED ); + return false; + } + + // Create padding to write at the end + unsigned long remainingSize = offset - fileSize; + QByteArray padding( 4096, 0x00 ); + + // Add padding at the end of the file. + file->seek( fileSize ); + while( remainingSize > 0 ) + { + if( file->write( padding, qMin( (unsigned long) 4096, remainingSize ) ) <= 0 ) + { + break; + } + remainingSize -= 4096; + } + + // Make sure the file position is correct now. + if( offset != (ulong)file->pos() ) + { + sendCancelMessage( CANCEL_FAILED ); + return false; + } + } + + + // Offsets are correct. + // Write the data to the file, + qint64 status = file->write( message.getData(), message.getDataSize() ); + if( status == -1 ) + { + kWarning() << "Failed to write the data to the file " + "(contact=" << getContactHandle() << + " session=" << getSessionID() << + " class=" << metaObject()->className() << + " action=sendcancel)"; + + sendCancelMessage(CANCEL_FAILED); + return false; + } + + // Indicate success! + return true; +} + + + +#include "p2papplicationbase.moc" diff --git a/src/network/applications/p2papplicationbase.h b/src/network/applications/p2papplicationbase.h new file mode 100644 index 0000000..8f10197 --- /dev/null +++ b/src/network/applications/p2papplicationbase.h @@ -0,0 +1,432 @@ +/*************************************************************************** + p2papplicationbase.h - description + ------------------- + begin : Mon Nov 22 2004 + copyright : (C) 2004 by Diederik van der Boor + email : vdboor --at-- codingdomain.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 License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef P2PAPPLICATIONBASE_H +#define P2PAPPLICATIONBASE_H + +#include "application.h" + +#include "../extra/p2pfragmenttracker.h" +#include "../p2pmessage.h" + +#include + + +class QIODevice; +class MimeMessage; +class QTimer; +class QBuffer; +class ApplicationList; + + + +/** + * @brief An Application subclass implementing MSN6 P2P-style conversations. + * + * This base class aims to hide all complex details of the P2P communication. + * The derived P2PApplication class adds handling of the MSNSLP protocol to this featureset. + * To implement a P2P service, create a derived class of P2PApplication which + * implements the userStarted*, contactStarted* and getAppId() methods. + * + * P2P messages can be received from switchboard or direct connections. + * The message flow looks like: + * - the MsnSwitchboardConnection receives the message. + * - the ChatMaster relays it to the correct contact. + * - an ApplicationList relays it to the correct P2P session. + * - an instance of P2PApplication processes it. + * The incoming message is received at the gotMessage() method. + * + * The data flow starts with the gotMessage() method, + * which is called by the ApplicationList class with the incoming P2P message. + * + * A user-started application is initiated with start(), + * which calls userStarted1_UserInvitesContact() to send the first message. + * + * When a data transfer is active, the methods showTransferMessage(), showTransferProgress(), showTransferComplete() + * are called to inform the derived class of the status. It can update the GUI from these methods. + * + * + * --- internals ---- + * + * Internally, this code ensures valid P2P messages are sent. + * + * A P2P message consists of a a 48 byte binary header followed by an optional pyload. + * The payload which can be binary data or plain text MIME data (the MSNSLP messages, + * which are handled by the derived P2PApplication class). + * + * The messages can be sent over the switchboard, or direct connection. + * When the P2P messages are sent over the switchboard, they will be wrapped + * in a standard MIME message and a footer code will be appended. + * + * This is a P2P message with SLP payload sent over the switchboard: + * @code +MSG contact@kmessdemo.org Test%20user 465 +@endcode +@code +MIME-Version: 1.0 +Content-Type: application/x-msnmsgrp2p +P2P-Dest: user@kmessdemo.org + (blank line) +@endcode +@code +00000000 0d6ff300 00000000 00000000 +52010000 00000000 52010000 00000000 +c08d4900 00000000 00000000 00000000 +@endcode +@code +MSNSLP/1.0 200 OK +To: +From: +Via: MSNSLP/1.0/TLP ;branch={EA820F90-802C-48A3-AE53-F660111220FF} +CSeq: 1 +Call-ID: {44AAC3F3-30D7-49B7-9732-AF7D32BD36B3} +Max-Forwards: 0 +Content-Type: application/x-msnmsgr-sessionreqbody +Content-Length: 22 + +SessionID: 114164 +00 +@endcode +@code +00000000 +@endcode + * + * The message is built of the following parts: + * - The Switchboad payload command with total payload length + * - The MIME header, with a blank line as separator. + * - The 48 byte P2P header (written in hex notation here). + * - The P2P payload (SLP preamble, header and body). + * - A footer code, only appended when the message is sent over the switchboard. + * + * There is a limit of 1202 bytes for the P2P payload, longer payloads are splitted into multiple P2P messages. + * In practise, that only happens with the SLP INVITE and file data messages. + * + * The binary P2P header has the following layout: + * @code +0 4 8 16 24 28 32 36 40 48 +|....|....|....|....|....|....|....|....|....|....|....|....| +|sid |mid |offset |totalsize|size|flag|uid |auid|a-datasz | +@endcode + * The fields are: + * - sid: Session-ID, true identifier of the session. It will always be zero for SLP messages. + * - mid: Message-ID, identifier of a payload, used to match splitted payload parts. + * - offset: current byte position of the part. + * - totalsize: total size the payload. When the payload only needs one part, it's equal to 'size'. + * - size: size of this message part. + * - flag: the message type. + * - uid: unique ID of the message, is used to trace ACK responses back. + * - auid: zero for normal messages. + * - a-datasz: zero for normal messages. + * + * For ACK messages some the fields are used differently: + * - sid: contains the Session-ID of the previous message. + * - mid: has a new generated value. + * - totalsize: contains the total size of the ACKed message. + * - uid: contains the Message-ID of the ACKed message. + * - auid: contains the Unique-ID of the ACKed message. + * - a-datasz: ACK Data size, contains the 'size' field of the ACKed message. + * + * For direct connection handshake messages, the last 3 fields will be replaced with the Nonce value. + * + * The flag field can be one of these values: + * - 0x02: A normal ACK message. + * - 0x04 and 0x06: A timeout ACK message, the contact was waiting for something! + * - 0x08: An error message, aborts the session instantly (much like TCP RST). + * - 0x20: MsnObject data. + * - 0x40: some BYE error ack. + * - 0x80: some BYE error ack. + * - 0x100: Direct connection handshake. + * - 0x1000030: File data. + * + * These fields and flags appear to make it utterly complex. + * However, P2P messages can be divided into three groups: + * - Messages without flags but with payload. These messages have a plain text MIME payload (the MSNSLP message), + * used to negotiate the session parameters. The Session-ID field is always zero for these messages. + * - Messages with flags and payload. These messages are used to transfer the actual data. + * - Messages with flags but without payload. These messages are used as "control messages". + * + * Each message expects to get some ACK message back, clients actually wait to send more + * data until an ACK or error message is received. KMess uses timers to detect whether + * a contact did not sent a message back. The application will be aborted automatically + * to avoid stale application in the memory. + * + * To match a incoming P2P message with a P2PApplication instance, the following identifiers are used: + * - sid or session-id: this is the true Session-ID of the complete session. + * If the session-id is zero however and there is a payload, different rules apply. + * In that case, the payload contains an SLP message (header + body) with the following idenfiers in the SLP header: + * - Call-ID: a guid identifier of the "SLP call". It spans the entire session, so other SLP messages (like 200 OK, or BYE) can be linked to the session which got the INVITE in the first place. + * - branch: a guid identifier the the single SLP message, it's used by SLP responses to reffer to the specific INVITE message in the session. + * - mid or message-id: the identifier of a complete payload. If a payload is too large, it's splitted across multiple P2P messages. Each fragment has the same message-id. + * - uid or unique-id: a real unique id for a single P2P message. + * P2P responses (messages with flags but without payload) reffer to this ID to point out which message is in error. + * + * The ApplicationList::gotMessage() method uses these identifiers to find the correct P2PApplication + * instance for a message. Note that the session-id is also transferred in the body of an SLP INVITE message. + * The P2P packets are only routed by the ApplicationList using the binary header fields and SLP header. + * + * Some third party clients (including KMess 1.4.x) seam to send incorrect message fields. + * This class is able to handle those not-entirely valid messages as well. + * The situations where this happens are marked as "HACK" in the code. + * + * @author Diederik van der Boor + * @ingroup Applications + */ +class P2PApplicationBase : public Application +{ + Q_OBJECT + + public: // public methods + + // The constructor + P2PApplicationBase(ApplicationList *applicationList); + + // The destructor + virtual ~P2PApplicationBase(); + + // Return the message ID used in the previous message received from the contact. + unsigned long getLastContactMessageID() const; + // Returns the session ID. + virtual unsigned long getSessionID() const = 0; + // Parse a received message... (implements pure virtual method from base class) + void gotMessage(const P2PMessage &p2pMessage); + // Verify whether the application can handle the given ACK message. + bool hasUnAckedMessage(const P2PMessage &p2pMessage); + // Called when the connection is ready to send more file data. + bool sendNextDataParts( int preferredFragments ); + + + protected: // protected mehods + + /** + * @brief The meta type of a P2P message. + * + * These types are used by gotAck() to link the ACK message + * to the original the sent message, sent by sendP2PMessage(). + */ + enum P2PMessageType + { + P2P_MSG_UNKNOWN = 0, ///< Default value, message type is not relevant. + P2P_MSG_SESSION_INVITATION = 1, ///< The SLP INVITE message. + P2P_MSG_SESSION_OK = 2, ///< The SLP OK message. + P2P_MSG_TRANSFER_INVITATION = 9, ///< The SLP INVITE message for the transfer. + P2P_MSG_TRANSFER_OK = 3, ///< The SLP OK message for the transfer invitation. + P2P_MSG_DATA_PREPARATION = 4, ///< The data preparation message. + P2P_MSG_DATA = 5, ///< The actual data message. + P2P_MSG_SESSION_BYE = 6, ///< The SLP BYE message. + P2P_MSG_TRANSFER_DECLINE = 7, ///< The SLP 603 Decline message. + P2P_MSG_SLP_ERROR = 8 ///< One of the possible SLP error messages. + }; + + /** + * @brief The data type being sent. + * + * This value is used to set the footer code of P2P messages which are sent over the switchboard. + */ + enum P2PDataType + { + P2P_TYPE_NEGOTIATION = 0 ///< Default value, the session is negotiating. + , P2P_TYPE_PICTURE = 1 ///< Packet contains MsnObject data. + , P2P_TYPE_FILE = 2 ///< Packet contains file data. + , P2P_TYPE_INK = 3 ///< Packet contains an Ink message. + }; + + /** + * @brief An indication which message is expected from the contact. + * + * This value is mostly used for debugging. + * Incoming acks are nowadays handled by gotAck() using a #P2PMessageType value. + * For some situations the waiting state is used to detect errors. + * + * The slotCleanup() method uses this value to output a descriptive error message. + */ + enum P2PWaitingState + { + // It's recommended to keep these values, as they're also printed by kWarning() statements! + + P2P_WAIT_DEFAULT = 0, ///< Not waiting at all. + P2P_WAIT_FOR_SLP_OK_ACK = 1, ///< Waiting for remote client to ack the the SLP OK message. + P2P_WAIT_FOR_FILE_DATA = 2, ///< Waiting for remote client to send file data. + P2P_WAIT_FOR_PREPARE = 3, ///< Waiting for remote client to send some prepare message. + P2P_WAIT_FOR_PREPARE_ACK = 4, ///< Waiting for remote client to ack the data preparation. + P2P_WAIT_FOR_SLP_BYE = 5, ///< Waiting for remote client to send the SLP BYE. + P2P_WAIT_FOR_SLP_BYE_ACK = 6, ///< Waiting for remote client to ack the SLP BYE message. + P2P_WAIT_FOR_SLP_ERR_ACK = 7, ///< Waiting for remote client to ack the SLP error message. + + P2P_WAIT_FOR_INVITE_ACK = 18, ///< Waiting for remote client to ack the SLP INVITE. + P2P_WAIT_CONTACT_ACCEPT = 8, ///< Waiting for the contact to accept out SLP INVITE. + P2P_WAIT_FOR_TRANSFER_ACCEPT = 9, ///< Waiting for the transfer message to be accepted. + P2P_WAIT_FOR_INVITE_TR_ACK = 19, ///< Waiting for the transfer INVITE message to be acked. + + P2P_WAIT_FOR_CONNECTION = 10, ///< Waiting until a direct connection is made or all failed + P2P_WAIT_FOR_DATA_ACK = 11, ///< Waiting for the ack message of the data we sent. + P2P_WAIT_FOR_TRANSFER_ACK = 12, ///< Waiting for contact to ack the SLP OK transfer message + + P2P_WAIT_FOR_HANDSHAKE = 13, ///< Direct connection is established, waiting for handshake. + P2P_WAIT_FOR_HANDSHAKE_OK = 14, ///< Direct connection handshake is sent, waiting for response. + + P2P_WAIT_FOR_CONNECTION2 = 15, ///< Waiting until a connection is made to the remote contact. + P2P_WAIT_USER_ACCEPT = 16, ///< Waiting for the user to accept out SLP INVITE. Complimentary to Application::isWaitingForUser(). + + P2P_WAIT_END_APPLICATION = 17 ///< Waiting for a short while before destroying this object (like TCP TIME_WAIT state) + }; + + // Make sure no more data will be sent + void abortDataSending(); + // Scheduelle termination, but wait for last incoming packets + void endApplicationLater(); +// // Step one of a contact-started chat: the contact invites the user +// virtual void contactStarted1_ContactInvitesUser(const MimeMessage& message); +// // Step four of a contact-started chat: the contact confirms the data-preparation message. +// virtual void contactStarted4_ContactConfirmsPreparation(); + // Return the number of transferred bytes. + unsigned long getTransferredBytes() const; + // Return the current waiting state. + P2PWaitingState getWaitingState() const; + // Parse a ACK messsage (in certain situations we need to active some methods) + virtual void gotAck(const P2PMessage &message, const P2PMessageType messageType) = 0; + // Called when data is received + virtual void gotData(const P2PMessage &message) = 0; + // Called when all data is received. + virtual void gotDataAckSent() = 0; + // Called when the data preparation message is received + virtual void gotDataPreparation(const P2PMessage &message) = 0; + // Got an direct connection handshake. + virtual void gotDirectConnectionHandshake(const P2PMessage &message) = 0; + // Got a message with SessionID 0 + virtual void gotNegotiationMessage(const MimeMessage &slpMessage, const QString &preamble) = 0; + // Verify whether a given message is still unacked. + bool hasUnAckedMessage(const P2PMessageType messageType); + // Test whether the first message has been sent. + bool isFirstMessageSent() const; + // Test whether a P2P ack was sent for the current message. + bool isP2PAckSent() const; + // Test whether the transfer is active. + bool isTransferActive() const; + // Verify whether the transfer was initiated and was completed. + bool isTransferComplete() const; + // Test whether a given waiting state is set. + bool isWaitingState( P2PWaitingState waitingState ) const; + // Send the data + void sendData(QIODevice *dataSource, const P2PDataType dataType); + // Sends the data preparation message. + void sendDataPreparation(); + // Method to be called from userStarted3_UserPrepares(); + void sendDataPreparationAck(); + // Send the direct connection handshake + void sendDirectConnectionHandshake( const QString &nonce ); + // Send a low-level control message to terminate the session. + void sendP2PAbort(); + // Send an low-level ACK message for a received message if this is needed. + bool sendP2PAck(); + // Send a low-level error message that the application is waiting for a certain message. + void sendP2PWaitingError(); + // Send a given string using sendP2PMessage() + void sendSlpMessage(const QString &slpMessage, P2PMessageType messageType); + // Notify this base class the user is aborting the session. + void setUserAborted( bool userAborted ); + // Indicate which packet is expected next. + void setWaitingState( P2PWaitingState waitingState, int timeout ); + // Show a timeout message because an expected message was not received. + virtual void showTimeoutMessage( P2PWaitingState waitingState ) = 0; + // Stop the waiting timer + bool stopWaitingTimer(); + // Test if the contact aborted the sending of data. + void testDataSendingAborted(); + // Utility function to write P2P data to a file, also deals with message offsets. + bool writeP2PDataToFile( const P2PMessage &message, QIODevice *file ); + + + private: // private methods + + /** + * @brief Meta data on an unacked message. + */ + struct UnAckedMessage + { + // Data for ACK message: + unsigned long dataSize; ///< The sent data size. + unsigned long messageID; ///< The sent message ID. + unsigned long totalSize; ///< The sent total size. + unsigned long sessionID; ///< The sent session ID. + unsigned long ackSessionID; ///< The sent unique ID field. + uint sentTime; ///< The time the message was sent. + P2PMessageType messageType; ///< The meta type of the message. + }; + + // Find the unacked message record associated with the received P2P message. + UnAckedMessage * getUnAckedMessage(const P2PMessage &ackMessage) const; + // Find the unacked message which corresponds with given message type. + UnAckedMessage * getUnAckedMessage(const P2PMessageType messageType) const; + // Called internally when data is received, this eventually calls gotData() + void gotDataFragment(const P2PMessage &message); + // Received a P2P message with the error-flag set. This method aborts the application. + void gotErrorAck(const P2PMessage &message); + // Got a message fragment with SessionID 0 + void gotNegotiationFragment(const P2PMessage &message); + // Received a message with the timeout-flag set. This method aborts the application. + void gotTimeoutAck(const P2PMessage &message); + // Received a P2P message with the aborted-flag set. This method aborts the application. + void gotTransferAbortedAck(const P2PMessage &message); + // Send a P2P ACK message + void sendP2PAckImpl(int ackType = P2PMessage::MSN_FLAG_ACK, UnAckedMessage *originalMessageData = 0); + // Send a P2P message + bool sendP2PMessage(const QByteArray &messageData, int flagField = 0, uint footerCode = 0, P2PMessageType messageType = P2P_MSG_UNKNOWN, unsigned long messageID = 0); + // Test if there are still unacked messages. + void testUnAckedMessages(bool sendError); + + + private slots: + // Crash prevention method + void slotApplicationListDeleted(); + // Cleanup function, called if the last ACK isn't received at all + void slotCleanup(); + + + private: // private fields + // The application list, parent of all application objects. + ApplicationList *applicationList_; + // Message buffer, required to deal with splitted MSNSLP messages + QBuffer *buffer_; + // The data source + QIODevice *dataSource_; + // The type of data to send. + P2PDataType dataType_; + // Message ID, if we're sending "fragmented" content + unsigned long fragmentMessageID_; + // Message offset, if we're sending "fragmented" content + unsigned long fragmentOffset_; + // Size of the message, if we're sending "fragmented" content + unsigned long fragmentTotalSize_; + // Track the status of a fragmented message (incoming currently) + P2PFragmentTracker fragmentTracker_; + // The last incoming message. + UnAckedMessage lastIncomingMessage_; + // Message ID, updated each time a message has been sent + unsigned long nextMessageID_; + // The list of outgoing messages to be acked + QList outgoingMessages_; + // True if an ACK was not sent yet. + bool shouldSendAck_; + // The user asked the application to start aborting + bool userAborted_; + // The current waiting state + P2PWaitingState waitingState_; + // The waiting timer (for timeout events) + QTimer *waitingTimer_; +}; + +#endif diff --git a/src/network/applications/voiceconversation.cpp b/src/network/applications/voiceconversation.cpp index ce97090..0d26146 100644 --- a/src/network/applications/voiceconversation.cpp +++ b/src/network/applications/voiceconversation.cpp @@ -207,6 +207,8 @@ void VoiceConversation::startConversation( bool connectToRemote ) return; } + // Remove the accept links + modifyOfferMessage(); if(connectToRemote) { diff --git a/src/network/applications/webapplicationp2p.cpp b/src/network/applications/webapplicationp2p.cpp index dc2f6c9..8b3d1e1 100644 --- a/src/network/applications/webapplicationp2p.cpp +++ b/src/network/applications/webapplicationp2p.cpp @@ -120,3 +120,5 @@ QString WebApplicationP2P::getAppId() { return "{6A13AF9C-5308-4F35-923A-67E8DDA40C2F}"; } + +#include "webapplicationp2p.moc" diff --git a/src/network/applications/webcamtransferp2p.cpp b/src/network/applications/webcamtransferp2p.cpp index 8930fdd..e418178 100644 --- a/src/network/applications/webcamtransferp2p.cpp +++ b/src/network/applications/webcamtransferp2p.cpp @@ -116,3 +116,5 @@ QString WebcamTransferP2P::getPullAppId() return "{1C9AA97E-9C05-4583-A3BD-908A196F1E92}"; } + +#include "webcamtransferp2p.moc" diff --git a/src/network/chatinformation.cpp b/src/network/chatinformation.cpp index 50566cb..22b02ab 100644 --- a/src/network/chatinformation.cpp +++ b/src/network/chatinformation.cpp @@ -38,7 +38,7 @@ ChatInformation::ChatInformation( MsnNotificationConnection *parent, const QStri // The constructor for a contact-started chat ChatInformation::ChatInformation( MsnNotificationConnection *parent, const QString& handle, - const QString &ip, int port, const QString &authorization, const QString &chatId, + const QString &ip, quint16 port, const QString &authorization, const QString &chatId, ConnectionType type ) : authorization_(authorization) , chatId_(chatId) @@ -103,7 +103,7 @@ MsnNotificationConnection * ChatInformation::getNotificationConnection() const // Return the switchboard server port -int ChatInformation::getPort() const +quint16 ChatInformation::getPort() const { return port_; } @@ -143,7 +143,7 @@ bool ChatInformation::getUserStartedChat() const // Set server information -void ChatInformation::setServerInformation( const QString& ip, const int& port, const QString& authorization ) +void ChatInformation::setServerInformation( const QString& ip, const quint16& port, const QString& authorization ) { ip_ = ip; port_ = port; diff --git a/src/network/chatinformation.h b/src/network/chatinformation.h index 133816f..da4c547 100644 --- a/src/network/chatinformation.h +++ b/src/network/chatinformation.h @@ -56,7 +56,7 @@ class ChatInformation int transactionId, ConnectionType type ); // The constructor for a contact-started chat ChatInformation( MsnNotificationConnection *parent, const QString& handle, - const QString &ip, int port, const QString &authorization, + const QString &ip, quint16 port, const QString &authorization, const QString &chatId, ConnectionType type ); // The destructor ~ChatInformation(); @@ -71,7 +71,7 @@ class ChatInformation // Return the notification connection that spawned this object MsnNotificationConnection *getNotificationConnection() const; // Return the switchboard server port - int getPort() const; + quint16 getPort() const; // Return the time of when the SB transfer request has been sent int getTime() const; // Return the transaction ID used in the "XFR" command. @@ -81,7 +81,7 @@ class ChatInformation // Return whether the user started the chat bool getUserStartedChat() const; // Set server information - void setServerInformation( const QString& ip, const int& port, const QString& authorization ); + void setServerInformation( const QString& ip, const quint16& port, const QString& authorization ); private: // Private attributes @@ -98,7 +98,7 @@ class ChatInformation // The notification connection that spawned this object MsnNotificationConnection *notificationConnection_; // The switchboard server's port - int port_; + quint16 port_; // The time when the SB transfer request was issued to the notification server uint requestTime_; // The transaction ID used in the "XFR" command. diff --git a/src/network/chatmessage.cpp b/src/network/chatmessage.cpp index 0ea399b..cdf3282 100644 --- a/src/network/chatmessage.cpp +++ b/src/network/chatmessage.cpp @@ -17,8 +17,6 @@ #include "chatmessage.h" -#include - // The constructor diff --git a/src/network/chatmessage.h b/src/network/chatmessage.h index 5e30abe..e564b6f 100644 --- a/src/network/chatmessage.h +++ b/src/network/chatmessage.h @@ -29,7 +29,9 @@ class ContactBase; /** * A class describing a chat message. + * * @author Diederik van der Boor + * @ingroup NetworkCore */ class ChatMessage { diff --git a/src/network/extra/directconnectionbase.cpp b/src/network/extra/directconnectionbase.cpp index 8c831f9..86f0f43 100644 --- a/src/network/extra/directconnectionbase.cpp +++ b/src/network/extra/directconnectionbase.cpp @@ -17,19 +17,22 @@ #include "directconnectionbase.h" +#include "../../utils/kmessconfig.h" #include "../../kmessdebug.h" #include #include #include +#include + #ifdef KMESSDEBUG_DIRECTCONNECTION #define KMESSDEBUG_DIRECTCONNECTION_GENERAL #endif -int DirectConnectionBase::nextServerPort_(6891); +quint16 DirectConnectionBase::nextServerPort_( 0 ); @@ -40,7 +43,7 @@ DirectConnectionBase::DirectConnectionBase( QObject *parent ) , isServer_(false) , lastWriteFailed_(false) , server_(0) - , serverPort_(-1) + , serverPort_(0) , socket_(0) , timeout_(false) , writeHandlerCount_(0) @@ -48,6 +51,14 @@ DirectConnectionBase::DirectConnectionBase( QObject *parent ) connect( &connectionTimer_, SIGNAL( timeout() ), this, SLOT ( slotConnectionTimeout() )); + // Read the interval of ports which we'll use to try establishing a connection + KConfigGroup group = KMessConfig::instance()->getGlobalConfig( "General" ); + lowestServerPortLimit_ = (quint16)group.readEntry( "lowestTransferPort", 6891 ); + highestServerPortLimit_ = (quint16)group.readEntry( "highestServerPort", 6900 ); +#ifdef KMESSDEBUG_DIRECTCONNECTION_GENERAL + kDebug() << "Using port interval" << lowestServerPortLimit_ << "-" << highestServerPortLimit_; +#endif + connectionTimer_.setSingleShot( true ); } @@ -56,6 +67,10 @@ DirectConnectionBase::DirectConnectionBase( QObject *parent ) // The destructor DirectConnectionBase::~DirectConnectionBase() { + bool connected = isConnected(); + bool server = isServer_; + bool authorized = authorized_; + // Close and clean up if(socket_ != 0 || server_ != 0) { @@ -63,7 +78,7 @@ DirectConnectionBase::~DirectConnectionBase() } #ifdef KMESSDEBUG_DIRECTCONNECTION_GENERAL - kDebug() << "DESTROYED. [connectTo=" << connectingTo_ << "]"; + kDebug() << "DESTROYED. [connectTo=" << connectingTo_ << " wasConnected=" << connected << " wasServer=" << server << " wasAuthorized=" << authorized << "]"; #endif } @@ -209,7 +224,7 @@ void DirectConnectionBase::disconnectWriteHandler(QObject *receiver, const char // Return the number of bytes which are already received in the local buffer -int DirectConnectionBase::getAvailableBytes() const +qint64 DirectConnectionBase::getAvailableBytes() const { if(KMESS_NULL(socket_)) return -2; // same as KExtendedSocket API, means "invalid state" return socket_->bytesAvailable(); @@ -218,10 +233,10 @@ int DirectConnectionBase::getAvailableBytes() const // Get the server port that will be used -int DirectConnectionBase::getLocalServerPort() +quint16 DirectConnectionBase::getLocalServerPort() { // Port not chosen yet - if( serverPort_ < 0 ) + if( serverPort_ == 0 ) { // It's possible to use a random port nowadays, // old clients with the "only port 6891" are no longer in use. @@ -231,9 +246,9 @@ int DirectConnectionBase::getLocalServerPort() // // TODO: verify whether we can use the port by calling openServerPort() earlier. - if(nextServerPort_ > 6900) + if( nextServerPort_ == 0 || nextServerPort_ > highestServerPortLimit_ ) { - nextServerPort_ = 6891; + nextServerPort_ = lowestServerPortLimit_; } serverPort_ = nextServerPort_; @@ -264,7 +279,7 @@ QString DirectConnectionBase::getRemoteIp() const // Get the remote port the socket is connected with. -int DirectConnectionBase::getRemotePort() const +quint16 DirectConnectionBase::getRemotePort() const { if(socket_ == 0) { @@ -272,7 +287,6 @@ int DirectConnectionBase::getRemotePort() const } else { -#warning localPort() returns quint16 in native byte order. return socket_->localPort(); } } @@ -365,7 +379,7 @@ bool DirectConnectionBase::isWriteHandlerConnected() const // Connect to a host -bool DirectConnectionBase::openConnection(const QString &ipAddress, const int port) +bool DirectConnectionBase::openConnection( const QString &ipAddress, const quint16 port ) { #ifdef KMESSDEBUG_DIRECTCONNECTION_GENERAL kDebug() << "Connecting to " << ipAddress << " port " << port << "."; @@ -417,7 +431,7 @@ bool DirectConnectionBase::openServerPort() KMESS_ASSERT( server_ == 0 ); #endif - int port; + quint16 port; // Get the port port = getLocalServerPort(); @@ -443,7 +457,7 @@ bool DirectConnectionBase::openServerPort() #ifdef KMESSDEBUG_DIRECTCONNECTION_GENERAL kDebug() << "Could not listen at port " << port << ", freeing for next one."; #endif - serverPort_ = -1; // reset, so getLocalServerPort() picks the next port with another openServerPort() call. + serverPort_ = 0; // reset, so getLocalServerPort() picks the next port with another openServerPort() call. delete server_; server_ = 0; return false; @@ -456,7 +470,7 @@ bool DirectConnectionBase::openServerPort() // Verify how many bytes the read buffer has. Note this actually reads the data to test it. -int DirectConnectionBase::peekBlock( const int size ) +qint64 DirectConnectionBase::peekBlock( const qint64 size ) { // Avoid crashes if(KMESS_NULL(socket_)) return -1; @@ -464,7 +478,7 @@ int DirectConnectionBase::peekBlock( const int size ) // Read the data and see how much got read. // This is the only reliable method, but expensive in terms of performance. QByteArray buffer; - buffer.resize( size ); + buffer.resize( (int)size ); #ifdef KMESSTEST KMESS_ASSERT( size > 0 ); KMESS_ASSERT( buffer.size() == size ); @@ -475,7 +489,7 @@ int DirectConnectionBase::peekBlock( const int size ) // Read data from the socket -int DirectConnectionBase::readBlock( char *buffer, int size ) +qint64 DirectConnectionBase::readBlock( char *buffer, qint64 size ) { // Avoid crashes if(KMESS_NULL(socket_)) return -1; @@ -507,7 +521,7 @@ int DirectConnectionBase::readBlock( char *buffer, int size ) // Read data from the socket (uses the QByteArray size() as block size) -int DirectConnectionBase::readBlock( QByteArray &buffer, const int maxSize, const int bufferOffset ) +qint64 DirectConnectionBase::readBlock( QByteArray &buffer, const qint64 maxSize, const qint64 bufferOffset ) { // Avoid crashes if(KMESS_NULL(socket_)) return -1; @@ -520,7 +534,7 @@ int DirectConnectionBase::readBlock( QByteArray &buffer, const int maxSize, cons } // Determine the maximum number of bytes we can write to the buffer - int bufferSpace = buffer.size() - bufferOffset; + qint64 bufferSpace = buffer.size() - bufferOffset; // API usage check. // Warn if certain sizes get a unusual value @@ -543,7 +557,7 @@ int DirectConnectionBase::readBlock( QByteArray &buffer, const int maxSize, cons // Fill the buffer from the give offset, // size argument is limited to what the buffer can/may sustain. char *bufferStart = buffer.data() + bufferOffset; - int size = qMin( bufferSpace, maxSize ); + qint64 size = qMin( bufferSpace, maxSize ); return readBlock( bufferStart, size ); } @@ -880,7 +894,7 @@ void DirectConnectionBase::slotSocketReadyWrite( qint64 bytesWritten ) * @param size Size of the block to read. * @returns Whether the has been a write error. */ -bool DirectConnectionBase::writeBlock( const char *block, const int size ) +bool DirectConnectionBase::writeBlock( const char *block, const qint64 size ) { lastWriteFailed_ = true; if(KMESS_NULL(socket_)) return false; @@ -916,7 +930,7 @@ bool DirectConnectionBase::writeBlock( const char *block, const int size ) #endif } - additionalWriteBuffer_.append( QByteArray::fromRawData( block, size ) ); + additionalWriteBuffer_.append( QByteArray::fromRawData( block, (int)size ) ); // Protect against consuming all system memory // 50 kB is more then enough if you're writing messages of 1300 bytes! @@ -941,7 +955,7 @@ bool DirectConnectionBase::writeBlock( const char *block, const int size ) // Log in network window. // Use actual size of written block. #ifdef KMESS_NETWORK_WINDOW - QByteArray wrapper = QByteArray::fromRawData( block, noBytesWritten ); + QByteArray wrapper = QByteArray::fromRawData( block, (int)noBytesWritten ); KMESS_NET_SENT(this, wrapper); #endif @@ -952,7 +966,7 @@ bool DirectConnectionBase::writeBlock( const char *block, const int size ) kWarning() << "only " << noBytesWritten << " of " << size << " bytes could be written!"; - additionalWriteBuffer_.append( QByteArray::fromRawData( block + noBytesWritten, size - noBytesWritten ) ); + additionalWriteBuffer_.append( QByteArray::fromRawData( block + noBytesWritten, (int)(size - noBytesWritten) ) ); } else { diff --git a/src/network/extra/directconnectionbase.h b/src/network/extra/directconnectionbase.h index e90de2f..f7676aa 100644 --- a/src/network/extra/directconnectionbase.h +++ b/src/network/extra/directconnectionbase.h @@ -19,8 +19,7 @@ #define DIRECTCONNECTIONBASE_H #include -#include -#include +#include #include @@ -68,15 +67,15 @@ class DirectConnectionBase : public QObject // Return true when a write handler is connnected. bool isWriteHandlerConnected() const; // Get the server port that will be used - int getLocalServerPort(); + quint16 getLocalServerPort(); // Get the remote ip the socket is connected with. QString getRemoteIp() const; // Get the remote port the socket is connected with. - int getRemotePort() const; + quint16 getRemotePort() const; // Return the error description QString getSocketError() const; // Connect to a host - bool openConnection(const QString &ipAddress, const int port); + bool openConnection( const QString &ipAddress, const quint16 port ); // Wait for an incoming connection bool openServerPort(); @@ -106,19 +105,19 @@ class DirectConnectionBase : public QObject // Close and delete the server socket bool closeServerSocket(); // Return the number of bytes which are already received in the local buffer - int getAvailableBytes() const; + qint64 getAvailableBytes() const; // Return the name of the locally opened port. QString getListeningServiceName() const; // Verify how many bytes the read buffer has. Note this actually reads the data to test it. - int peekBlock( const int size ); + qint64 peekBlock( const qint64 size ); // Read data from the socket - int readBlock( char *buffer, const int size ); + qint64 readBlock( char *buffer, const qint64 size ); // Read data from the socket (uses the QByteArray size() as block size) - int readBlock( QByteArray &buffer, const int maxSize = 0, const int offset = 0 ); + qint64 readBlock( QByteArray &buffer, const qint64 maxSize = 0, const qint64 offset = 0 ); // Mark the remote host as authorized (usually after the handshake was successful) void setAuthorized(bool authorized); // Write data to the socket - bool writeBlock( const char *block, const int size ); + bool writeBlock( const char *block, const qint64 size ); // Write data to the socket bool writeBlock( const QByteArray &block ); @@ -139,16 +138,20 @@ class DirectConnectionBase : public QObject QString connectingTo_; // The timeout handling for openConnection() QTimer connectionTimer_; + // The higher limit to the interval of server ports this class will use + quint16 highestServerPortLimit_; // Whether the class acts as server or client bool isServer_; // Whether the last write action failed. bool lastWriteFailed_; + // The lower limit to the interval of server ports this class will use + quint16 lowestServerPortLimit_; // The server socket which listens for incoming connections. QTcpServer *server_; // The server port this class will use - int serverPort_; + quint16 serverPort_; // The next server port used with a openServerPort() call. - static int nextServerPort_; + static quint16 nextServerPort_; // The socket over which data is sent or received. QTcpSocket *socket_; // Whether an timeout occured diff --git a/src/network/extra/directconnectionpool.cpp b/src/network/extra/directconnectionpool.cpp index 4892552..55c2c18 100644 --- a/src/network/extra/directconnectionpool.cpp +++ b/src/network/extra/directconnectionpool.cpp @@ -66,7 +66,7 @@ DirectConnectionPool::~DirectConnectionPool() * Add a connection to the list, tells the object to connect to the given ipaddress/port. * Returns true when the connection could be added to the pending list (e.g. it's openConnection() method didn't fail). */ -bool DirectConnectionPool::addConnection(DirectConnectionBase *connection, const QString &ipAddress, const int port) +bool DirectConnectionPool::addConnection(DirectConnectionBase *connection, const QString &ipAddress, const quint16 port) { // Refuse if there is already an active connection if( activeConnection_ != 0 ) @@ -141,6 +141,7 @@ int DirectConnectionPool::addServerConnection(DirectConnectionBase *connection) bool listening = false; // Attempt to listen at one of the 10 ports we use. + // FIXME: loop from start range to end. for(int i = 0; i < 10; i++) { // The openServerPort() automatically picks another port @@ -158,9 +159,7 @@ int DirectConnectionPool::addServerConnection(DirectConnectionBase *connection) pendingConnections_.removeAll( connection ); connection->deleteLater(); -#ifdef KMESSDEBUG_DIRECTCONNECTION_GENERAL - kDebug() << "Could not find a port to listen at."; -#endif + kWarning() << "No available free port could be found"; return 0; } diff --git a/src/network/extra/directconnectionpool.h b/src/network/extra/directconnectionpool.h index 19821f6..7d988c6 100644 --- a/src/network/extra/directconnectionpool.h +++ b/src/network/extra/directconnectionpool.h @@ -48,7 +48,7 @@ class DirectConnectionPool : public QObject virtual ~DirectConnectionPool(); // Add a connection to the list, tells the object to connect to the given ipaddress/port. - bool addConnection(DirectConnectionBase *connection, const QString &ipAddress, const int port); + bool addConnection(DirectConnectionBase *connection, const QString &ipAddress, const quint16 port); // Add a connection to the list, starts listening for incoming connections (returns zero if couldn't start listening). int addServerConnection(DirectConnectionBase *connection); // Remove all connections from the pending list diff --git a/src/network/extra/msndirectconnection.cpp b/src/network/extra/msndirectconnection.cpp index 7dff383..409c7e0 100644 --- a/src/network/extra/msndirectconnection.cpp +++ b/src/network/extra/msndirectconnection.cpp @@ -145,7 +145,7 @@ void MsnDirectConnection::slotSocketDataReceived() // start with a new data block if( remainingBlockBytes_ <= 0 ) { - int noBytesPeeked = peekBlock(4); + qint64 noBytesPeeked = peekBlock(4); if( preambleOffset_ == 0 ) { // First see if there are enough bytes. @@ -163,7 +163,7 @@ void MsnDirectConnection::slotSocketDataReceived() } // First 4 bytes indicate the message/block length. - int noBytesRead = readBlock( preambleBuffer_, 4 - preambleOffset_, preambleOffset_ ); + qint64 noBytesRead = readBlock( preambleBuffer_, 4 - preambleOffset_, preambleOffset_ ); if( noBytesRead == 0 ) { #ifdef KMESSDEBUG_DIRECTCONNECTION_GENERAL @@ -239,7 +239,7 @@ void MsnDirectConnection::slotSocketDataReceived() } // Allocate the buffer. - buffer_.resize(remainingBlockBytes_); + buffer_.resize( (int)remainingBlockBytes_ ); buffer_.fill('\0'); bufferOffset_ = 0; @@ -258,7 +258,7 @@ void MsnDirectConnection::slotSocketDataReceived() // Fill the next part of the buffer with the bytes received. // Read as many bytes as possible, test for errors. - int noBytesRead = readBlock( buffer_, remainingBlockBytes_, bufferOffset_ ); + qint64 noBytesRead = readBlock( buffer_, remainingBlockBytes_, bufferOffset_ ); if( noBytesRead < 0 ) { kWarning() << "read error " @@ -301,7 +301,7 @@ void MsnDirectConnection::slotSocketDataReceived() if( buffer_.size() == 4 ) { // This should be a preamble packet from the other client. - if( QByteArray(buffer_.data(), 4) == "foo" ) + if( QByteArray(buffer_.data(), 3) == "foo" ) { #ifdef KMESSDEBUG_DIRECTCONNECTION_GENERAL kDebug() << "received preamble packet, ignoring."; diff --git a/src/network/extra/msndirectconnection.h b/src/network/extra/msndirectconnection.h index d89cfcb..d880725 100644 --- a/src/network/extra/msndirectconnection.h +++ b/src/network/extra/msndirectconnection.h @@ -61,7 +61,7 @@ class MsnDirectConnection : public DirectConnectionBase // The buffer for the incoming p2p messages. QByteArray buffer_; // The offset of the currently received block - uint bufferOffset_; + quint64 bufferOffset_; // The other contact we're connected with QString contactHandle_; // Whether the first message is received @@ -69,9 +69,9 @@ class MsnDirectConnection : public DirectConnectionBase // The buffer for the next preamble message. QByteArray preambleBuffer_; // The offset in the preamble buffer - int preambleOffset_; + qint64 preambleOffset_; // Set when only partial data was received - uint remainingBlockBytes_; + quint64 remainingBlockBytes_; signals: // Signal that a full message block was received. diff --git a/src/network/extra/msnftpconnection.cpp b/src/network/extra/msnftpconnection.cpp index 3f57837..a0c8031 100644 --- a/src/network/extra/msnftpconnection.cpp +++ b/src/network/extra/msnftpconnection.cpp @@ -22,10 +22,8 @@ #include "../../kmessdebug.h" #include "../../currentaccount.h" -#include #include #include -#include #include @@ -250,8 +248,8 @@ void MsnFtpConnection::parseReceivedFileData() unsigned char code; unsigned char byte1; unsigned char byte2; - int blockSize; - int noBytesRead; + qint64 blockSize; + qint64 noBytesRead; // Make sure we read all available bytes from the socket before returning @@ -318,7 +316,7 @@ void MsnFtpConnection::parseReceivedFileData() noBytesRead = readBlock( rawBlock, blockSize ); #ifdef KMESS_NETWORK_WINDOW - QByteArray wrapper = QByteArray::fromRawData( rawBlock, noBytesRead ); + QByteArray wrapper = QByteArray::fromRawData( rawBlock, (int)noBytesRead ); KMESS_NET_RECEIVED( this, wrapper ); #endif @@ -419,7 +417,7 @@ bool MsnFtpConnection::sendFile(QFile *inputFile) // Retrieve a file -bool MsnFtpConnection::retrieveFile(QFile *outputFile, const QString &ipAddress, const int port) +bool MsnFtpConnection::retrieveFile(QFile *outputFile, const QString &ipAddress, const quint16 port) { #ifdef KMESSTEST KMESS_ASSERT( authHandle_.length() > 0 ); @@ -491,8 +489,8 @@ void MsnFtpConnection::slotSocketDataReceived() // to parseCommand() or parseReceivedFileData() char rawBlock[255]; - int blockSize; - int noBytesRead; + qint64 blockSize; + qint64 noBytesRead; QString commandLine; QStringList command; @@ -524,7 +522,7 @@ void MsnFtpConnection::slotSocketDataReceived() } // Convert data block to UTF8 string - commandLine = QString::fromUtf8( rawBlock, noBytesRead ); + commandLine = QString::fromUtf8( rawBlock, (int)noBytesRead ); #ifdef KMESS_NETWORK_WINDOW KMESS_NET_RECEIVED( this, commandLine.toUtf8() ); @@ -695,8 +693,8 @@ void MsnFtpConnection::writeFileData() KMESS_ASSERT( inputStream_ != 0 ); #endif - int noBytesRead; - char rawBlock[2048]; + qint64 noBytesRead; + char rawBlock[2048]; // Read a block from the file. noBytesRead = inputStream_->read( rawBlock + 3, sizeof(rawBlock) - 3 ); @@ -723,8 +721,8 @@ void MsnFtpConnection::writeFileData() // Set the header rawBlock[0] = 0; - rawBlock[1] = (noBytesRead & 0x00ff); - rawBlock[2] = (noBytesRead & 0xff00) >> 8; + rawBlock[1] = (char) ( noBytesRead & 0x00ff ); + rawBlock[2] = (char)( ( noBytesRead & 0xff00 ) >> 8 ); // Update the progress fileBytesRemaining_ -= noBytesRead; diff --git a/src/network/extra/msnftpconnection.h b/src/network/extra/msnftpconnection.h index 2fc6876..772e71c 100644 --- a/src/network/extra/msnftpconnection.h +++ b/src/network/extra/msnftpconnection.h @@ -59,7 +59,7 @@ class MsnFtpConnection : public DirectConnectionBase // Send a file bool sendFile(QFile *inputFile); // Retrieve a file - bool retrieveFile(QFile *outputFile, const QString &ipAddress, const int port); + bool retrieveFile(QFile *outputFile, const QString &ipAddress, const quint16 port); private slots: // This is called when a connection is established. @@ -134,7 +134,7 @@ class MsnFtpConnection : public DirectConnectionBase // The stream to write received data to QIODevice *outputStream_; // True when only partial file data was received - int remainingBlockBytes_; + qint64 remainingBlockBytes_; // True if the user cancelled the session bool userCancelled_; diff --git a/src/network/extra/p2pfragmenttracker.cpp b/src/network/extra/p2pfragmenttracker.cpp index 5b44210..e7cc781 100644 --- a/src/network/extra/p2pfragmenttracker.cpp +++ b/src/network/extra/p2pfragmenttracker.cpp @@ -142,7 +142,7 @@ void P2PFragmentTracker::initialize( unsigned long messageID, unsigned long tota * @brief Return whether the fragment tracker is complete. * @return Returns true if all fragments are transferred. */ -bool P2PFragmentTracker::isComplete() +bool P2PFragmentTracker::isComplete() const { // Check the preconditions, otherwise don't even check the ranges. if( totalSize_== 0 || ranges_.count() != 1 || getTransferredBytes() < totalSize_ ) diff --git a/src/network/extra/p2pfragmenttracker.h b/src/network/extra/p2pfragmenttracker.h index 1dff26c..d30c161 100644 --- a/src/network/extra/p2pfragmenttracker.h +++ b/src/network/extra/p2pfragmenttracker.h @@ -26,6 +26,7 @@ /** * @brief Utility class to track completed ranges of a transferred file. * @author Diederik van der Boor + * @ingroup NetworkExtra */ class P2PFragmentTracker { @@ -39,7 +40,7 @@ class P2PFragmentTracker QString getDebugMap() const; // Return the message ID unsigned long getMessageID() const; - // Return the number of received bytwws + // Return the number of received bytes unsigned long getTransferredBytes() const; // Return whether the tracker is empty, no data added yet. bool isEmpty() const; @@ -48,7 +49,7 @@ class P2PFragmentTracker // Initialize to receive a new message void initialize( unsigned long messageID, unsigned long totalSize ); // Return whether the fragment tracker is complete. - bool isComplete(); + bool isComplete() const; // Register the arrival of a new fragment. void registerFragment( unsigned long offset, unsigned long size ); diff --git a/src/network/mimemessage.cpp b/src/network/mimemessage.cpp index bfbe93d..ecc6dfc 100644 --- a/src/network/mimemessage.cpp +++ b/src/network/mimemessage.cpp @@ -174,6 +174,17 @@ void MimeMessage::setField(const QString& field, const QString& value) +// Clear all fields in MimeMessage for re-use the object +void MimeMessage::clearFields() +{ + body_ = ""; + fields_.clear(); + values_.clear(); + binaryBody_ = ""; +} + + + // decodes MIME strings like =?iso...=...?= ... QString MimeMessage::decodeRFC2047String(const QByteArray &aStr) const { diff --git a/src/network/mimemessage.h b/src/network/mimemessage.h index c764aba..ba60000 100644 --- a/src/network/mimemessage.h +++ b/src/network/mimemessage.h @@ -20,7 +20,6 @@ #include -#include #include @@ -51,6 +50,8 @@ class MimeMessage void addField(const QString& field, const QString& value); /** Sets the field in the message, or adds it if it doesn't exist. */ void setField(const QString& field, const QString& value); + // Clear all fields + void clearFields(); // decodes MIME strings like =?iso...=...?= ... QString decodeRFC2047String(const QByteArray &aStr) const; // Return the body of the message diff --git a/src/network/msnchallengehandler.h b/src/network/msnchallengehandler.h index c74b621..2b0f32a 100644 --- a/src/network/msnchallengehandler.h +++ b/src/network/msnchallengehandler.h @@ -29,6 +29,7 @@ * Provides a simple way to compute a msn challenge response hash key. * * @author Gregg Edghill + * @ingroup NetworkCore */ class MSNChallengeHandler { diff --git a/src/network/msnconnection.cpp b/src/network/msnconnection.cpp index 008b766..9abf07e 100644 --- a/src/network/msnconnection.cpp +++ b/src/network/msnconnection.cpp @@ -17,14 +17,12 @@ #include "msnconnection.h" -#include "../currentaccount.h" -#include "../kmessdebug.h" #include "mimemessage.h" +#include "msnsocketbase.h" +#include "msnsockettcp.h" +#include "msnsockethttp.h" #include "multipacketmessage.h" - -#include -#include -#include +#include "soap/httpsoapconnection.h" #include #include @@ -42,36 +40,15 @@ * * Initializes the sockets, buffers and ping timer. * - * @param name The Qt object name. + * @param serverType The type of server connection: TCP or HTTP. */ -MsnConnection::MsnConnection() -: QObject(0), - currentAccount_(0), - ack_(0), - disconnected_(false), - initialized_(false), - missedPings_(0), - nextPayloadSize_(0), - sendPings_(false) +MsnConnection::MsnConnection( MsnSocketBase::ServerType serverType ) +: QObject(0) +, ack_(0) +, initialized_(false) { - // Create the socket - socket_ = new QTcpSocket( this ); - - // TODO: socket timeout settings.. - - connect( socket_, SIGNAL( connected() ), - this, SLOT ( slotSocketConnected() )); - connect( socket_, SIGNAL( disconnected() ), - this, SLOT ( slotSocketDisconnected() )); - connect( socket_, SIGNAL( readyRead() ), - this, SLOT ( slotSocketDataReceived() )); - connect( socket_, SIGNAL( error(QAbstractSocket::SocketError) ), - this, SLOT ( slotSocketError(QAbstractSocket::SocketError) )); - - // Connect the ping timer to the sendPing slot - pingTimer_.stop(); - connect( &pingTimer_, SIGNAL( timeout() ), - this, SLOT ( slotSendPing() ) ); + // Create the socket needed for this connection: default to the TCP one + socket_ = new MsnSocketTcp( serverType ); #ifdef KMESSTEST KMESS_ASSERT( socket_ != 0 ); @@ -97,6 +74,9 @@ MsnConnection::~MsnConnection() qDeleteAll( multiPacketBuffer_ ); multiPacketBuffer_.clear(); + // Off course, delete the SOAP clients now here too. + deleteSoapClients(); + // Delete the socket delete socket_; @@ -107,6 +87,67 @@ MsnConnection::~MsnConnection() +/** + * @brief Internal function to track SOAP clients. + * + * This method connects the HttpSoapConnection::requestFailed() signal, + * and appends the client to the internal list. + * + * @param client The SOAP client class. + */ +void MsnConnection::addSoapClient( HttpSoapConnection *client ) +{ +#ifdef KMESSDEBUG_NOTIFICATION_GENERAL + kDebug() << "Adding SOAP client to list."; +#endif + + // Connect signals + connect(client, SIGNAL( requestFailed(HttpSoapConnection*, const QString&) ), + this, SLOT ( slotSoapError(HttpSoapConnection*, const QString&) )); + connect(client, SIGNAL( requestFailed(HttpSoapConnection*, const QString&, const QString&, QDomElement) ), + this, SLOT ( slotSoapFault(HttpSoapConnection*, const QString&, const QString&, QDomElement) )); + + // Add to list so it cleans up when the connection closes + soapClients_.append(client); +} + + + +/** + * @brief Connect a socket's signals to our slots + * + * Connects the signals of a new socket to this class' slots. + * This is needed to have one place only for socket connection; + * since socket connections are made in initialize() and in + * switchToHttpSocket(). + */ +void MsnConnection::attachToSocketSignals() +{ +#ifdef KMESSDEBUG_CONNECTION + kDebug() << objectName() << "- Connecting socket signals."; +#endif +#ifdef KMESSTEST + KMESS_ASSERT( socket_ != 0 ); +#endif + + // Connect our integrative methods to the raw socket's events signals + connect( socket_, SIGNAL( connected() ), + this, SLOT ( slotConnected() ) ); + connect( socket_, SIGNAL( disconnected() ), + this, SLOT ( slotDisconnected() ) ); + connect( socket_, SIGNAL( dataReceived(const QStringList&,const QByteArray&) ), + this, SLOT ( slotDataReceived(const QStringList&,const QByteArray&) ) ); + connect( socket_, SIGNAL( error(QString,MsnSocketBase::ErrorType) ), + this, SLOT ( slotError(QString,MsnSocketBase::ErrorType) ) ); + // Forward the socket's notification signals + connect( socket_, SIGNAL( statusMessage(QString,bool) ), + this, SIGNAL( statusMessage(QString,bool) ) ); + connect( socket_, SIGNAL( pingSent() ), + this, SIGNAL( pingSent() ) ); +} + + + /** * @brief Connect to the given server via the socket * @@ -118,35 +159,64 @@ MsnConnection::~MsnConnection() * @param server The server hostname or IP address. * @param port The port to connect to. */ -void MsnConnection::connectToServer(const QString& server, const quint16 port) +void MsnConnection::connectToServer( const QString& server, const quint16 port ) { -#ifdef KMESSTEST - KMESS_ASSERT( port < 32768 ); -#endif - #ifdef KMESSDEBUG_CONNECTION_SOCKET - kDebug() << objectName() << "- Connecting to server at " << server << ":" << port << "."; - kDebug() << objectName() << "- Socket state is " << socket_->state() << "."; + if( server.isEmpty() && port == 0 ) + { + kDebug() << objectName() << "- Connecting to the default server."; + } + else + { + kDebug() << objectName() << "- Connecting to server at" << server << ":" << port << "."; + } #endif - // Flush any pending data if the socket is closing a previous connection - socket_->flush(); + // Start connecting now + socket_->connectToServer( server, port ); +} - // Check that we are disconnected (the socket is null) - if( socket_->state() != QAbstractSocket::UnconnectedState ) + + +/** + * @brief Disconnect and delete a SOAP clients. + * + * @param client The client to delete. + * @see deleteSoapClients() + */ +void MsnConnection::deleteSoapClient( HttpSoapConnection *client ) +{ + soapClients_.removeAll( client ); + QTimer::singleShot( 10, client, SLOT(deleteLater()) ); // timeout needed for deleting passport login service. +} + + + +/** + * @brief Disconnect and delete all SOAP clients. + * + * This method is called by the derived class when all SOAP clients need to be deleted. + * This is not done automatically in disconnectFromServer() so the derived class + * is both responsable for creating and deleting the SOAP client objects. + */ +void MsnConnection::deleteSoapClients() +{ + // Disconnect other possibly active SOAP sessions. + // Use deleteLater() since this method may be called from loginIncorrect() + if( ! soapClients_.isEmpty() ) { - kWarning() << objectName() << "- Socket is not disconnected. Already connected? Socket state is " << socket_->state() << "."; +#ifdef KMESSDEBUG_NOTIFICATION_GENERAL + kDebug() << "Closing SOAP sessions."; +#endif + + foreach( HttpSoapConnection *soapClient, soapClients_ ) + { + soapClient->closeConnection(); + soapClient->deleteLater(); + } + + soapClients_.clear(); } - - // Prepare state vars for the new connection - disconnected_ = false; - nextPayloadSize_ = 0; - - // Call kept after porting (was previously needed with KExtendedSocket) - socket_->close(); - - // Start connecting - socket_->connectToHost( server, port ); } @@ -163,41 +233,24 @@ void MsnConnection::connectToServer(const QString& server, const quint16 port) */ void MsnConnection::disconnectFromServer( bool isTransfer ) { - disconnected_ = true; +#ifdef KMESSDEBUG_CONNECTION_SOCKET + kDebug() << objectName() << "- Closing the connection."; +#endif - // stop any more pings + // Gracefully disconnect + if( isConnected() ) + { + sendCommand( "OUT", "\r\n" ); + } + + // Stop pinging setSendPings( false ); // Clean up collections qDeleteAll( multiPacketBuffer_ ); multiPacketBuffer_.clear(); - // If the socket is connected... - if( socket_->isValid() && socket_->state() == QAbstractSocket::ConnectedState ) - { - // Send "OUT" - writeData("OUT\r\n"); - } - -#ifdef KMESSDEBUG_CONNECTION_SOCKET - kDebug() << objectName() << "- Close the socket."; -#endif - - socket_->disconnectFromHost(); - -#ifdef KMESS_NETWORK_WINDOW - KMESS_NET_CLOSE(this); -#endif - - // Always fire the event to update others. - if( ! isTransfer ) - { -#ifdef KMESSDEBUG_CONNECTION_SOCKET - kDebug() << objectName() << "- Emit 'disconnected'."; -#endif - - emit disconnected(); - } + socket_->disconnectFromServer( isTransfer ); } @@ -212,41 +265,11 @@ void MsnConnection::disconnectFromServer( bool isTransfer ) */ QString MsnConnection::getLocalIp() const { - QHostAddress address = socket_->localAddress(); - QString ip = address.toString(); - #ifdef KMESSDEBUG_SWITCHBOARD_FILETRANSFER - kDebug() << objectName() << "- IP is " << ip; + kDebug() << objectName() << "- Local IP is " << socket_->getLocalIp(); #endif - return ip; -} - - - -/** - * @brief Return whether or the socket is connected. - * @returns True when connected, false otherwise. - */ -bool MsnConnection::isConnected() const -{ - return socket_->isValid() && socket_->state() == QAbstractSocket::ConnectedState; -} - - - -/** - * @brief Return whether the given command is a payload command. - * - * This method should be re-implemented in the derived class - * to indicate which commands are payload commands. - * - * @returns True when it's a payload command, false otherwise. - */ -bool MsnConnection::isPayloadCommand(const QString &/*command*/) const -{ - // Return false by default, is overwritten in MsnNotificationConnection - return false; + return socket_->getLocalIp(); } @@ -256,7 +279,7 @@ bool MsnConnection::isPayloadCommand(const QString &/*command*/) const * * This method should be called before the class is used. * - * It sets the currentAccount_ reference. + * It initializes the socket * Subclasses may re-implement this method to connect * to signals which are not available at startup in the constructor. */ @@ -268,26 +291,36 @@ bool MsnConnection::initialize() return false; } -#ifdef KMESSTEST - KMESS_ASSERT( currentAccount_ == 0 ); -#endif - - // Get current account - currentAccount_ = CurrentAccount::instance(); - if( currentAccount_ == 0 ) - { - kWarning() << objectName() << "- Couldn't get an instance of the current account."; - return false; - } + // Attach the socket's signals to this class + attachToSocketSignals(); initialized_ = true; + return true; +} -#ifdef KMESSTEST - KMESS_ASSERT( currentAccount_ != 0 ); - KMESS_ASSERT( socket_ != 0 ); -#endif - return initialized_; + +/** + * @brief Return whether or the socket is connected. + * @returns True when connected, false otherwise. + */ +bool MsnConnection::isConnected() const +{ + return socket_->isConnected(); +} + + + +/** + * @brief Return whether the given command is a payload command. + * + * This method just passes the question to the socket class + * + * @returns True when it's a payload command, false otherwise. + */ +bool MsnConnection::isPayloadCommand( const QString &command ) const +{ + return socket_->isPayloadCommand( command ); } @@ -333,23 +366,6 @@ void MsnConnection::parseMultiPacketMimeMessage( const QStringList &command, con -/** - * Internal function to reset the ping timer. - * - * This stops the current timer, - * and restarts a timer to send the next PNG command. - */ -void MsnConnection::resetPingTimer() -{ - if( sendPings_ ) - { - pingTimer_.stop(); - pingTimer_.start( 30000 ); // 30s ping timer - } -} - - - /** * @brief Send a command to the server * @@ -373,10 +389,6 @@ int MsnConnection::sendCommand(const QString& prefix, const QString &text) int ack = ack_++; -//#ifdef KMESSDEBUG_CONNECTION_GENERAL -// kDebug() << objectName() << "- Sending " << prefix << " command (" << ack << ")."; -//#endif - // Send the data to the server QString command = prefix + " " + QString::number( ack ) + " " + text; writeData( command ); @@ -413,13 +425,8 @@ int MsnConnection::sendMimeMessage(AckType ackType, const MimeMessage &message) int ack = ack_++; command.sprintf("MSG %u %s %u\r\n", ack, ackTypeStr, rawMessage.size()); -//#ifdef KMESSDEBUG_CONNECTION_GENERAL -// kDebug() << objectName() << "- Sending MSG command (" << ack << ")."; -//#endif - // Write the data - writeData(command); - writeBinaryData(rawMessage); + writeBinaryData( command.toUtf8() + rawMessage ); // Return the ack used return ack; @@ -427,7 +434,6 @@ int MsnConnection::sendMimeMessage(AckType ackType, const MimeMessage &message) - // Send a payload command to the server, convenience function int MsnConnection::sendPayloadMessage(const QString &prefix, const QString &arguments, const QString &payload) { @@ -453,11 +459,13 @@ int MsnConnection::sendPayloadMessage(const QString &prefix, const QString &argu command += " " + QString::number(payload.size()) + "\r\n"; // Write the data - writeData(command); - if( payload.size() > 0 ) { - writeBinaryData(payload); + writeBinaryData( command.toUtf8() + payload ); + } + else + { + writeData( command ); } // Return the ack used @@ -466,44 +474,18 @@ int MsnConnection::sendPayloadMessage(const QString &prefix, const QString &argu -// Send a "ping" to the server -void MsnConnection::slotSendPing() +// Specify which accepted commands carry payload data for this connection +void MsnConnection::setAcceptedPayloadCommands( QStringList commandList ) { - QString message; + socket_->setAcceptedPayloadCommands( commandList ); +} - if ( pingReceived_ == false ) - { - missedPings_ ++; - if ( missedPings_ == 1 ) - { - message += i18n( "1 ping lost" ); - } - else - { - message += i18n( "%1 pings lost", missedPings_); - } - emit statusMessage( message, KMessInterface::TYPE_WARNING ); - } - else - { - emit statusMessage( i18n( "Connected" ), KMessInterface::TYPE_MESSAGE ); - } - - pingReceived_ = false; - - // Assume the connection was lost when 3 pings are missed. - if ( missedPings_ == 3 ) - { - KMessageBox::error( 0, i18n("The connection to the server was lost.") ); - closeConnection(); - disconnectFromServer(false); - } - - writeData( "PNG\r\n" ); - - emit pingSent(); +// Set whether we're sending pings or not +void MsnConnection::setSendPings( bool sendPings ) +{ + socket_->setSendPings( sendPings ); } @@ -512,234 +494,256 @@ void MsnConnection::slotSendPing() * @brief Called when data is received from the server. * * This method parses the incoming data for the syntax used by the MSN protocol. - * When a command is only partially received, it's buffered until the whole command is received by subsequent dataReceived() calls. * * A parsed message to handled to one of the following methods: * - one-line commands are delivered to parseCommand() - * - PNG commands are handled internally. * - MSG commands with MIME payloads are delivered to parseMimeMessage() * - other commands with payloads are delivered to parsePayloadMessage(). * This uses isPayloadCommand() to detect if a command has a payload. */ -void MsnConnection::slotSocketDataReceived() +void MsnConnection::slotDataReceived( const QStringList &commandLine, const QByteArray &payloadData ) { - bool gotPayloadCommand = false; - bool hasCompletePayload = false; - QByteArray rawCommandLine; - QByteArray payloadData; - QStringList command; - QString commandLine; - - - while( true ) - { - // Read the next command if we're not waiting for a payload. - if( nextPayloadSize_ == 0 ) - { - // Stop when socket didn't receive a full line yet (Qt does the buffering, thanks Qt4!) - if( ! socket_->canReadLine() ) - { - break; - } - - // Read the next line. - rawCommandLine = socket_->readLine(); - - // Parse the command, split in separate fields - commandLine = QString::fromUtf8( rawCommandLine.data(), rawCommandLine.size() ); - command = commandLine.trimmed().split(" "); - - // See if it's a payload command - gotPayloadCommand = ( command[0] == "MSG" || isPayloadCommand( command[0] ) ); - if( gotPayloadCommand ) - { - nextPayloadSize_ = command[ command.count() - 1 ].toInt(); // Last arg is payload length. - nextPayloadCommand_ = command; - } + // See if it's a payload command + bool gotPayloadCommand = ( isPayloadCommand( commandLine[0] ) ); #ifdef KMESSDEBUG_SERVERMESSAGES - // Display the received command line - kDebug() << objectName() << "- <<< " << commandLine.trimmed(); + // Display the received command line + kDebug() << objectName() << "- <<< " << commandLine; #endif -#ifdef KMESS_NETWORK_WINDOW - KMESS_NET_RECEIVED( this, rawCommandLine ); -#endif - } - - - // See if we can read the payload - if( nextPayloadSize_ > 0 ) - { - // Check if the full payload is received. - // Otherwise, just wait until "dataReceived" is called again. - hasCompletePayload = ( socket_->bytesAvailable() >= nextPayloadSize_ ); - if( ! hasCompletePayload ) - { - break; - } - - // Full payload received. - payloadData = socket_->read( nextPayloadSize_ ); - - // Copy state from previous loop if needed. - if( ! gotPayloadCommand ) - { - gotPayloadCommand = true; - command = nextPayloadCommand_; - } - - // Reset state for next loop. - nextPayloadSize_ = 0; #ifdef KMESS_NETWORK_WINDOW - KMESS_NET_RECEIVED( this, payloadData ); + KMESS_NET_RECEIVED( this, commandLine.join(" ").toUtf8() ); + // Also display the payload if present + if( ! payloadData.isEmpty() ) + { + KMESS_NET_RECEIVED( this, payloadData ); + } #endif - } - - // Parse the messages. - if( gotPayloadCommand ) + // Parse the messages. + if( gotPayloadCommand ) + { + // See if it's a Mime message. + if( commandLine[0] != "MSG" ) { - // See if it's a Mime message. - if( command[0] != "MSG" ) - { - // Other payload message types are parsed in the subclasses. - parsePayloadMessage(command, payloadData); - } - else - { - // It's a mime message - // Note we can't parse strings here, the message could contain binary p2p data. - // UTF-8 characters are translated in the MimeMessage constructor itself. - MimeMessage mimeMessage( payloadData ); - - // Detect Multi-packet messages - if( ! mimeMessage.hasField("Message-ID") ) - { - // It's a normal message, parse it. - parseMimeMessage( command, mimeMessage ); - } - else - { - // Handle multi-packet message parts. - parseMultiPacketMimeMessage( command, mimeMessage ); - } - } - } - else if( command[0] == "QNG" ) - { - // Response from the internal ping timer. - pingReceived_ = true; - missedPings_ = 0; + // Other payload message types are parsed in the subclasses. + parsePayloadMessage( commandLine, payloadData ); } else { - // It's a normal command, handle it in the subclass. - // Parse the command. - parseCommand( command ); + // It's a mime message + // Note we can't parse strings here, the message could contain binary p2p data. + // UTF-8 characters are translated in the MimeMessage constructor itself. + MimeMessage mimeMessage( payloadData ); + + // Detect Multi-packet messages + if( ! mimeMessage.hasField("Message-ID") ) + { + // It's a normal message, parse it. + parseMimeMessage( commandLine, mimeMessage ); + } + else + { + // Handle multi-packet message parts. + parseMultiPacketMimeMessage( commandLine, mimeMessage ); + } } } -} - - - -// Detect a socket error -void MsnConnection::slotSocketDisconnected() -{ -#ifdef KMESSDEBUG_CONNECTION_SOCKET - kDebug(); -#endif - -/* -// TODO: test for for KMess 1.6 - - // Notify - if( ! disconnected_ && ! ( state & KBufferedIO::closedNow ) ) + else { - // First disable pings, KMessageBox blocks here but it's private event loop would keep processing more ping timeouts. - setSendPings(false); - - if( state & KBufferedIO::involuntary ) - { - KMessageBox::error( 0, i18n("The remote server has closed the connection.") ); - } - - // Close connection, updates GUI. - closeConnection(); - disconnectFromServer(false); + // It's a normal command, handle it in the subclass. + parseCommand( commandLine ); } -*/ } /** - * @brief Called when the connection attempt failed. - * - * Closes the connection, and displays - * the "could not connect to the MSN Messenger service." message box. - * - * @param error The system error. + * @brief Called when the socket is disconnected. */ -void MsnConnection::slotSocketError( QAbstractSocket::SocketError error ) +void MsnConnection::slotDisconnected() { -#ifdef KMESSDEBUG_CONNECTION_SOCKET - kWarning() << objectName() << "- Received error " << error << " from the socket" - " (socket state=" << socket_->state() << ")."; +#ifdef KMESS_NETWORK_WINDOW + KMESS_NET_CLOSE(this); #endif - // TODO: test what the socket state is, so we can avoid displaying messages when the connection worked before. - QString reason = socket_->errorString(); - - switch( error ) - { - case QAbstractSocket::RemoteHostClosedError: - // KMESS_NET_CLOSE is called by disconnectFromServer(); - break; - - case QAbstractSocket::DatagramTooLargeError: - case QAbstractSocket::NetworkError: - case QAbstractSocket::UnknownSocketError: - // Filter errors that happen when you've connected already. - break; - - default: - KMessageBox::error( 0, i18n( "KMess could not connect to the MSN Messenger service.\n" - "Please, be sure to be connected to the internet.\n" - "reason: %1.", reason) ); - } - - - closeConnection(); - disconnectFromServer(); + emit disconnected(); } -// Set whether we're sending pings or not (also resets ping timer) -void MsnConnection::setSendPings( bool sendPings ) +/** + * @brief A SOAP request failed with an error message. + * + * This method can be overwritten in the derived class to produce more specific error messages. + * This default implemetentation is a fallback, it simply calls slotError() with a generic error message. + * + * @param client The SOAP client object. + * @param reason The reported error by the SOAP client object. + */ +void MsnConnection::slotSoapError(HttpSoapConnection *client, const QString &reason) { - sendPings_ = sendPings; - missedPings_ = 0; + if(KMESS_NULL(client)) return; - pingReceived_ = true; + // Default implementation just gives a standard warning. + slotError( i18n( "KMess could not access the remote webservice.
Details: %1", reason ), + MsnSocketBase::ERROR_INTERNAL ); +} - if ( sendPings_ ) + + +/** + * @brief A SOAP request failed with an SOAP fault. + * + * A SOAP fault is reported by the server in response to the request. + * For MSN SOAP services, some SOAP errors need to be acted on. + * + * This method could not be named slotSoapFault() as it causes a gcc " was hidden" warning. + * if the other slotSoapError() method is overwritten only. + * + * @param client The SOAP client object. + * @param faultCode The SOAP fault code reported by the SOAP server. + * @param faultString The SOAP fault string reported by the SOAP server. + * @param faultNode The complete fault node, to parse any custom tags. + */ +void MsnConnection::slotSoapFault(HttpSoapConnection *client, const QString &faultCode, + const QString &faultString, QDomElement /*faultNode*/) +{ + if(KMESS_NULL(client)) return; + + // Most of the times, the SOAP class itself also handles some errors, + // and translates it into a specific signal. + // If an error still gets through it's likely some server issue and it should be reported. + + slotSoapError(client, faultCode + ": " + faultString); +} + + + +/** + * @brief If it is possible, switch to the HTTP connection + * + * This method checks what connection is being established, and if is a TCP + * connection, will delete it and re-start connecting using the HTTP method. + * + * This is used when the TCP connection process fails. + */ +bool MsnConnection::switchToHttpSocket() +{ + // Check if we're already using HTTP + if( qobject_cast( socket_ ) ) { - slotSendPing(); +#ifdef KMESSDEBUG_CONNECTION_SOCKET + kDebug() << "Cannot switch to HTTP connection. Class is" << socket_->metaObject()->className(); +#endif + return false; + } - resetPingTimer(); - } - else +#ifdef KMESSDEBUG_CONNECTION_SOCKET + kDebug() << "Attempting switch to HTTP connection."; +#endif + + // Save the socket details to use the same ones for the new socket + MsnSocketBase::ServerType serverType = socket_->getServerType(); + QStringList acceptedPayloadCommands = socket_->getAcceptedPayloadCommands(); + + // Close and disable the old server + socket_->blockSignals( true ); + socket_->disconnectFromServer(); + socket_->deleteLater(); + + // Replace it with the new one + socket_ = new MsnSocketHttp( serverType ); + socket_->setAcceptedPayloadCommands( acceptedPayloadCommands ); + + // Attach its signals to this class + attachToSocketSignals(); + + // Start connecting + connectToServer(); + + return true; +} + + + +/** + * @brief Switch back to the TCP connection + * + * This method checks what connection is being established, and if is an HTTP + * connection, will delete it and start using again the TCP method. + * + * This is used after disconnecting from an HTTP session, to try again with TCP the next time. + */ +bool MsnConnection::switchToTcpSocket() +{ + // Check if we're already using TCP + if( qobject_cast( socket_ ) ) { - pingTimer_.stop(); +#ifdef KMESSDEBUG_CONNECTION_SOCKET + kDebug() << "Cannot switch to TCP connection. Class is" << socket_->metaObject()->className(); +#endif + return false; } + +#ifdef KMESSDEBUG_CONNECTION_SOCKET + kDebug() << "Attempting to switch back to TCP connection."; +#endif + + // Save the socket details to use the same ones for the new socket + MsnSocketBase::ServerType serverType = socket_->getServerType(); + QStringList acceptedPayloadCommands = socket_->getAcceptedPayloadCommands(); + + // Close and disable the old server + socket_->blockSignals( true ); + socket_->disconnectFromServer(); + socket_->deleteLater(); + + // Replace it with the new one + socket_ = new MsnSocketTcp( serverType ); + socket_->setAcceptedPayloadCommands( acceptedPayloadCommands ); + + // Attach its signals to this class + attachToSocketSignals(); + + return true; +} + + + +// Write data to the socket without conversions +void MsnConnection::writeBinaryData( const QByteArray& data ) +{ + if( ! isConnected() ) + { + kWarning() << objectName() << "- Attempting to write binary data while disconnected, aborting."; + return; + } + +#ifdef KMESSDEBUG_SERVERMESSAGES +// To display the entire contents: +/* + QByteArray debugData( data ); + for( int i = 0; i < debugData.size(); i++ ) { if( debugData[i] < 10 ) debugData[ i ] = '?'; } + kDebug() << objectName() << "- >>> " << QString::fromUtf8( debugData.data(), debugData.size() ); +*/ +// To display the first readable part: (removing the final \r\n) + kDebug() << objectName() << "- >>> " << QString( data ).trimmed(); +#endif + + // Write to the socket + socket_->writeBinaryData( data ); + + // Append the message to the network window +#ifdef KMESS_NETWORK_WINDOW + KMESS_NET_SENT( this, data ); +#endif } // Write data to the socket -void MsnConnection::writeData(const QString& data) +void MsnConnection::writeData( const QString& data ) { #ifdef KMESSTEST if ( ( data.left(3) != "QRY" ) && ( data.left(3) != "MSG" ) ) @@ -750,18 +754,7 @@ void MsnConnection::writeData(const QString& data) if( ! isConnected() ) { - if( ! disconnected_ ) - { - kWarning() << objectName() << "- Attempting to write data to a disconnected socket, closing socket."; - - // First disable pings, KMessageBox blocks here but it's private event loop would keep processing more ping timeouts. - setSendPings(false); - KMessageBox::error( 0, i18n("The remote server has closed the connection.") ); - - // Close connection, updates GUI. - closeConnection(); - disconnectFromServer(false); - } + kWarning() << objectName() << "- Attempting to write data while disconnected, aborting."; return; } @@ -771,7 +764,7 @@ void MsnConnection::writeData(const QString& data) #endif QByteArray binData = data.toUtf8(); - int noBytesWritten = socket_->write( binData.data(), (quint64) binData.length() ); + qint64 noBytesWritten = socket_->writeData( binData ); if( noBytesWritten != binData.length() ) // Note that the previous code used data.length instead of unicode.length(), but I { // changed this since that is the string we send to the socket... (could be wrong here) @@ -785,42 +778,4 @@ void MsnConnection::writeData(const QString& data) } - -// Write data to the socket without conversions -void MsnConnection::writeBinaryData(const QByteArray& data) -{ - int noBytesWritten; - - if( ! isConnected() ) - { - kWarning() << objectName() << "- Attempting to write data to a disconnected socket."; - return; - } - -#ifdef KMESSDEBUG_SERVERMESSAGES - -// To display the entire contents: -/* - QByteArray debugData = data; - for( int i = 0; i < debugData.size(); i++ ) { if( debugData[i] < 10 ) debugData[ i ] = '?'; } - kDebug() << objectName() << "- >>> " << QString::fromUtf8( debugData.data(), debugData.size() ); -*/ -// To display the first readable part: (removing the final \r\n) - kDebug() << objectName() << "- >>> " << QString( data ).trimmed(); -#endif - - // Write to the socket - noBytesWritten = socket_->write( data.data(), (quint64) data.size() ); - if ( noBytesWritten != data.size() ) - { - kWarning() << objectName() << "- Wanted to write " << data.size() << " bytes to the socket, wrote " << noBytesWritten << "."; - } - - // Append the message to the network window -#ifdef KMESS_NETWORK_WINDOW - KMESS_NET_SENT( this, data ); -#endif -} - - #include "msnconnection.moc" diff --git a/src/network/msnconnection.h b/src/network/msnconnection.h index cdfa0b3..5db8045 100644 --- a/src/network/msnconnection.h +++ b/src/network/msnconnection.h @@ -18,38 +18,35 @@ #ifndef MSNCONNECTION_H #define MSNCONNECTION_H -#include "../kmessinterface.h" // TODO: get rid of this one. +#include "../kmessdebug.h" +#include "msnsocketbase.h" -#include #include -#include -#include -#include +#include // Forward declarations -class CurrentAccount; +class HttpSoapConnection; class QByteArray; -class QTcpSocket; class MimeMessage; +class MsnSocketBase; class MultiPacketMessage; +class QStringList; + /** - * @brief The base functionality for the MSN server protocol handling. + * @brief MSN server protocol implementation. * * The class provides the following facilities: - * - asynchronous connection to the MSN servers. - * - parsing the network data into protocol commands. - * - sending protocol commands and payloads. - * - built-in handling of PNG commands, to keep the connection alive. + * - parsing the raw network data into protocol commands. + * - sending protocol commands and payloads to the actual connection implementations * - built-in handling of multi-packet MSG commands. * - * Data from the server is handled by the dataReceived() slot. - * This method buffers and processes the data, until a complete command or payload message is received. - * Then, it calls one of the following methods to deliver the message the a derived class: + * Data from the basic I/O implementation is received by the dataReceived() slot. + * This method identifies the data and calls one of the following methods to deliver the message the a derived class: * - parseCommand() * - parseMimeMessage() * - parsePayloadMessage() @@ -64,31 +61,41 @@ class MultiPacketMessage; * - sendPayloadMessage() * * @author Mike K. Bennett + * @author Valerio Pilo * @ingroup NetworkCore */ class MsnConnection : public QObject { Q_OBJECT - public: +#ifdef KMESS_NETWORK_WINDOW + friend class NetworkWindow; +#endif + + public: // Public methods // The destructor virtual ~MsnConnection(); // Whether or not the class is connected bool isConnected() const; - protected: // Protected methods - // If ordering is changed, update sendMimeMessage() + + protected: // Protected enumerations /// Ack type parameter for sendMimeMessage() enum AckType { - ACK_NONE, ///< Don't request any ACK message. - ACK_NAK_ONLY, ///< Send a NAK on failure, but nothing on success. - ACK_ALWAYS, ///< Send a NAK on failure, and ACK on success - ACK_ALWAYS_P2P ///< Special case for P2P data messsages ('D' type). + ACK_NONE, /// Don't request any ACK message. + ACK_NAK_ONLY, /// Send a NAK on failure, but nothing on success. + ACK_ALWAYS, /// Send a NAK on failure, and ACK on success + ACK_ALWAYS_P2P /// Special case for P2P data messsages ('D' type). }; + + protected: // Protected methods // The constructor - MsnConnection(); + MsnConnection( MsnSocketBase::ServerType serverType ); + // Register a SOAP client to the class. + void addSoapClient( HttpSoapConnection *client ); + /** * @brief Close the connection. * @@ -97,7 +104,11 @@ class MsnConnection : public QObject */ virtual void closeConnection() = 0; // Connect to the given server via the socket - void connectToServer( const QString& server, const quint16 port = 1863 ); + void connectToServer( const QString& server = QString(), const quint16 port = 0 ); + // Disconnect and delete the a SOAP client. + void deleteSoapClient( HttpSoapConnection *client ); + // Disconnect and delete all SOAP clients. + void deleteSoapClients(); // Disconnect from the server, if connected void disconnectFromServer( bool isTransfer = false ); // Get the IP address of this machine. @@ -106,6 +117,9 @@ class MsnConnection : public QObject bool initialize(); // Test whether the given command is a payload command virtual bool isPayloadCommand(const QString &command) const; + // Specify which accepted commands carry payload data for this connection + void setAcceptedPayloadCommands( QStringList commandList ); + /** * @brief Process a received command * @@ -141,6 +155,7 @@ ADC 27 AL N=someone@kmessdemo.org * @param command The command and arguments. */ virtual void parseCommand(const QStringList& command) = 0; + /** * @brief Process a received MIME message. * @@ -175,6 +190,9 @@ no prob. How is development doing? * @param message The MIME message which followed the command. */ virtual void parseMimeMessage(const QStringList& command, const MimeMessage &message) = 0; + // Internal processing of multi-packet messages. + void parseMultiPacketMimeMessage( const QStringList &command, const MimeMessage &mimeMessage ); + /** * @brief Process a received payload message * @@ -197,8 +215,8 @@ UBX someuser@kmessdemo.org 67 * The last argument of command can be ignored. * It indicates the size of the payload, in this case 67 bytes. * - * @param command The received command and it's arguments. - * @param payload The message payload which followed the command. + * @param command The received command and it's arguments. + * @param messageData The message payload which followed the command. */ virtual void parsePayloadMessage(const QStringList &command, const QByteArray &messageData) = 0; // Send a command to the server, returning the ack @@ -209,74 +227,77 @@ UBX someuser@kmessdemo.org 67 int sendPayloadMessage(const QString &prefix, const QString &arguments, const QString &payload); // Send a payload command to the server int sendPayloadMessage(const QString &prefix, const QString &arguments, const QByteArray &payload); - // Set whether we're sending pings or not (also resets ping timer) + // Set whether we're sending pings or not void setSendPings( bool sendPings ); + // If it is possible, switch to the HTTP connection + bool switchToHttpSocket(); + //Switch back to the TCP connection + bool switchToTcpSocket(); + // Write data to the socket without conversions + void writeBinaryData( const QByteArray& data ); + // Write data to the socket + void writeData( const QString& data ); - protected: // Protected attributes - /// The instance of the current account - CurrentAccount *currentAccount_; protected slots: // Protected slots + /** * @brief Called when the connection attempt is successful. * * This allows the first command to be sent. */ - virtual void slotSocketConnected() = 0; + virtual void slotConnected() = 0; - private: // Private methods - // Internal processing of multi-packet messages. - void parseMultiPacketMimeMessage( const QStringList &command, const MimeMessage &mimeMessage ); - // Resets the ping timer - void resetPingTimer(); - // Write data to the socket - void writeData(const QString& data); - // Write data to the socket without conversions - void writeBinaryData(const QByteArray& data); + /** + * @brief Shows error dialog boxes + * + * Closes the connection, and displays + * a suitable type of message box. + * + * @param error The error reason or explanation + * @param type The type of error + */ + virtual void slotError( QString error, MsnSocketBase::ErrorType type ) = 0; - private slots: // Private slots - // Send a "ping" to the server - void slotSendPing(); + // A SOAP request failed with an error message + virtual void slotSoapError(HttpSoapConnection *client, const QString &reason); + // A SOAP request failed with an SOAP fault. + virtual void slotSoapFault(HttpSoapConnection *client, const QString &faultCode, + const QString &faultString, QDomElement faultNode); + + private: // private methods + // Connect a new socket's signals to our slots + void attachToSocketSignals(); + + private slots: // Read data from the socket - void slotSocketDataReceived(); - // Detect a socket error - void slotSocketDisconnected(); - // Detect a socket error - void slotSocketError( QAbstractSocket::SocketError error ); - + void slotDataReceived( const QStringList &commandLine, const QByteArray &payloadData ); + // Called when the connection is lost. + void slotDisconnected(); private: // Private attributes // An acknowledgement number int ack_; - // State variable to detect whether the client or server disconnected - bool disconnected_; // Whether or not the object was initialized bool initialized_; - // Number of errant pings since last good one - int missedPings_; - // The next payload command - QStringList nextPayloadCommand_; - // The size of the next expected payload message - int nextPayloadSize_; - // Whether the last ping send got a reply - bool pingReceived_; - // A timer to regularly "ping" the server - QTimer pingTimer_; - // Are we sending pings? - bool sendPings_; + // The persistent soap clients. + QList soapClients_; // The socket - QTcpSocket *socket_; + MsnSocketBase *socket_; // A buffer for multi-packet messages QHash multiPacketBuffer_; - signals: // Public signals + + signals: // Signal that the server has disconnected void disconnected(); // Signal that a ping to the connection has been sent void pingSent(); // Signal to send information to the main window's status bar - void statusMessage( QString message, KMessInterface::ConnectionStatus connectStatus ); + void statusMessage( QString message, bool isError ); }; + + #endif diff --git a/src/network/msnnotificationconnection.cpp b/src/network/msnnotificationconnection.cpp index d84356b..ba50570 100644 --- a/src/network/msnnotificationconnection.cpp +++ b/src/network/msnnotificationconnection.cpp @@ -20,6 +20,7 @@ #include "../contact/contact.h" #include "../contact/contactlist.h" #include "../network/specialgroups.h" +#include "../utils/kmessshared.h" #include "../currentaccount.h" #include "../kmess.h" #include "../kmessapplication.h" @@ -27,18 +28,20 @@ #include "../kmessinterface.h" #include "soap/passportloginservice.h" #include "soap/offlineimservice.h" +#include "utils/kmessconfig.h" #include "chatmessage.h" #include "mimemessage.h" #include "msnchallengehandler.h" -#include #include // for Qt::escape() #include -#include #include #include -#include + +#ifdef KMESSDEBUG_CONTACTLISTMODELTEST + #include "../../tests/modeltest/modeltest.h" +#endif #ifdef KMESSDEBUG_NOTIFICATION #define KMESSDEBUG_NOTIFICATION_GENERAL @@ -46,6 +49,9 @@ // #define KMESSDEBUG_NOTIFICATION_MESSAGES #endif +// Settings for debugging. +#define NOTIFICATION_HIDE_P2P_SUPPORT 0 + /** @@ -54,7 +60,9 @@ * Initializes the default groups of the ContactList class. */ MsnNotificationConnection::MsnNotificationConnection() - : MsnConnection(), + : MsnConnection( MsnSocketBase::SERVER_NOTIFICATION ), + currentAccount_(0), + enableNotifications_(false), initialized_(false), noContacts_(0), offlineImService_(0), @@ -66,15 +74,20 @@ MsnNotificationConnection::MsnNotificationConnection() // We manage the contact list contactList_ = new ContactList(); - // Connect the login timer to the checkLogin slot - connect( &loginTimer_, SIGNAL( timeout() ), - this, SLOT ( checkLogin() ) ); - // Connect the login timer to the checkLogin slot - connect( this, SIGNAL( pingSent() ), - this, SLOT( checkSwitchboardsTimeout() ) ); +#ifdef KMESSDEBUG_CONTACTLISTMODELTEST + // Start the Contact List model tests + new ModelTest( contactList_ ); +#endif + // Periodically close expired switchboard requests + connect( this, SIGNAL( pingSent() ), + this, SLOT ( checkSwitchboardsTimeout() ) ); + + // Attach a timer to watch over the login process + loginTimer_.stop(); loginTimer_.setSingleShot( true ); - + connect( &loginTimer_, SIGNAL( timeout() ), + this, SLOT ( slotAuthenticationFailed() ) ); } @@ -112,7 +125,7 @@ MsnNotificationConnection::~MsnNotificationConnection() * It's possible to add a contact to multiple groups, * typically referred to as "copy contact to group..". * - * @param contact The contact. + * @param handle The contact handle. * @param groupId The group ID. */ void MsnNotificationConnection::addContactToGroup(QString handle, QString groupId) @@ -194,32 +207,6 @@ void MsnNotificationConnection::addNewContact( QString handle, QString groupId ) -/** - * @brief Internal function to track SOAP clients. - * - * This method connects the HttpSoapConnection::requestFailed() signal, - * and appends the client to the internal list. - * - * @param client The SOAP client class. - */ -void MsnNotificationConnection::addSoapClient( HttpSoapConnection *client ) -{ -#ifdef KMESSDEBUG_NOTIFICATION_GENERAL - kDebug() << "Adding SOAP client to list."; -#endif - - // Connect signals - connect(client, SIGNAL( requestFailed(HttpSoapConnection*, const QString&) ), - this, SLOT ( soapRequestFailed(HttpSoapConnection*, const QString&) )); - connect(client, SIGNAL( requestFailed(HttpSoapConnection*, const QString&, const QString&, QDomElement) ), - this, SLOT ( soapRequestFailed(HttpSoapConnection*, const QString&, const QString&, QDomElement) )); - - // Add to list so it cleans up when the connection closes - soapClients_.append(client); -} - - - /** * @brief Adds the given contact to the allow list only. * @@ -263,7 +250,7 @@ void MsnNotificationConnection::allowContact(QString handle) */ void MsnNotificationConnection::addGroup(QString name) { - name = QUrl::toPercentEncoding( name.toUtf8() ); + name = QUrl::toPercentEncoding( name ); sendCommand( "ADG", name + "\r\n" ); } @@ -437,6 +424,10 @@ void MsnNotificationConnection::changeProperty( QString type, QString value ) else { value = QUrl::toPercentEncoding( value ); + + // To avoid problem with a very long nick + value.truncate( 387 ); + sendCommand( "PRP", type + " " + value + "\r\n" ); } } @@ -474,6 +465,10 @@ void MsnNotificationConnection::changeProperty( QString handle, QString type, QS else { value = QUrl::toPercentEncoding( value ); + + // To avoid problem with a very long nick + value.truncate( 387 ); + sendCommand( "SBP", contact->getGuid() + " " + type + " " + value + "\r\n" ); } } @@ -495,9 +490,13 @@ void MsnNotificationConnection::changeProperty( QString handle, QString type, QS */ void MsnNotificationConnection::changeStatus( const Status newStatus ) { +#if NOTIFICATION_HIDE_P2P_SUPPORT + const uint capabilities = 0; +#else // NOTE: When changing this property, all MSNP2P code need to be retested again!! // The capabilities are like a contract. The other client assumes everything works that's promised here. const uint capabilities = ( Contact::MSN_CAP_MSN75 | Contact::MSN_CAP_WINKS | Contact::MSN_CAP_MULTI_PACKET | Contact::MSN_CAP_INK_GIF ); +#endif QString statusCode = MsnStatus::getCode( newStatus ); QString objStr = QUrl::toPercentEncoding( currentAccount_->getMsnObjectString() ); @@ -521,27 +520,6 @@ void MsnNotificationConnection::changeStatus( const Status newStatus ) -/** - * @brief Called when the login timeout exceeded. - * - * Checks whether login was successful within time limit. - * If not, the user is informed no connection could be made. - */ -void MsnNotificationConnection::checkLogin() -{ -#ifdef KMESSDEBUG_NOTIFICATION_GENERAL - kDebug() << "Login not successful within time limit."; -#endif - - closeConnection(); - - // Show a message to the user - QString message = i18n("KMess could not connect the the MSN Messenger servers. The MSN Messenger servers could be temporary unavailable or there is a problem with your Internet connection.") + "\r\n"; - dotNetMessage(message); -} - - - // Removes any expired switchboard requests, so new ones can be made void MsnNotificationConnection::checkSwitchboardsTimeout() { @@ -583,34 +561,21 @@ void MsnNotificationConnection::closeConnection() #ifdef KMESSDEBUG_NOTIFICATION_GENERAL kDebug() << "Close the connection."; #endif - // Stop the login timer in case the user closed the connection during login - loginTimer_.stop(); - noContacts_ = 0; - totalNoContacts_ = 0; // Disconnect from the server first. // emits the signals so other classes can clean up / save properties. disconnectFromServer(); - // Resetting variables, objects will be removed through soapClients_ + // Stop the login timer + loginTimer_.stop(); + + // Delete all SOAP clients, and unset local references here. + deleteSoapClients(); offlineImService_ = 0; passportLoginService_ = 0; + noContacts_ = 0; + totalNoContacts_ = 0; - // Disconnect other possibly active SOAP sessions. - // Use deleteLater() since this method may be called from loginIncorrect() - if( ! soapClients_.isEmpty() ) - { -#ifdef KMESSDEBUG_NOTIFICATION_GENERAL - kDebug() << "Closing SOAP sessions."; -#endif - - foreach( HttpSoapConnection *soapClient, soapClients_ ) - { - soapClient->closeConnection(); - soapClient->deleteLater(); - } - soapClients_.clear(); - } // Remove contacts and non-special groups from the contact list if ( contactList_ != 0 ) @@ -620,8 +585,7 @@ void MsnNotificationConnection::closeConnection() #endif // Save the contact list settings - KConfigGroup config = KGlobal::config()->group( "" ); - saveProperties( config ); + saveProperties(); // The contact list is not deleted, like this class it's being // shared through the entire application, and attached to slots. @@ -659,19 +623,43 @@ void MsnNotificationConnection::closeConnection() */ OfflineImService* MsnNotificationConnection::createOfflineImService() { + // Extract the 't' and 'p' values from the current authentication ticket string + // This is done beacuse sendMessage() could has requested one new ticket + QString authT, authP; + QStringList fields = currentAccount_->getAuthenticationTicket().split("&"); + foreach( QString field, fields ) + { + if( field.startsWith("t=") ) + { + authT = field.mid(2); + } + else if( field.startsWith("p=") ) + { + authP = field.mid(2); + } +#ifdef KMESSDEBUG_NOTIFICATION + else + { + kWarning() << "Could not parse authentication string!"; + } +#endif + } + // Request the first offline-im message - OfflineImService *client = new OfflineImService( authT_, authP_, this ); + OfflineImService *oimService = new OfflineImService( authT, authP, this ); + + // Add the soap client. + addSoapClient( oimService ); // Register signals - addSoapClient( client ); // auto deletes at closeConnection() call. - connect( client, SIGNAL( messageReceived( const QString&, const QString&, const QString&, - const QDateTime&, const QString&, const QString&, int ) ), - this, SLOT ( receivedOfflineIm( const QString&, const QString&, const QString&, - const QDateTime&, const QString&, const QString&, int ) )); - connect( client, SIGNAL( metaDataReceived( QDomElement ) ), - this, SLOT ( receivedMailData( QDomElement ) )); - - return client; + connect( oimService, SIGNAL( messageReceived( const QString&, const QString&, const QString&, + const QDateTime&, const QString&, const QString&, int ) ), + this, SLOT ( receivedOfflineIm( const QString&, const QString&, const QString&, + const QDateTime&, const QString&, const QString&, int ) )); + connect( oimService, SIGNAL( metaDataReceived( QDomElement ) ), + this, SLOT ( receivedMailData( QDomElement ) )); + + return oimService; } @@ -688,42 +676,20 @@ PassportLoginService* MsnNotificationConnection::createPassportLoginService() // Create the login handler. PassportLoginService *loginService = new PassportLoginService(); + // Add the soap client. + addSoapClient( loginService ); + // Connect all login notifications - connect( loginService, SIGNAL( loginIncorrect() ), - this, SLOT ( loginIncorrect() ) ); - connect( loginService, SIGNAL( loginSucceeded(QString) ), - this, SLOT ( loginSucceeded(QString) ) ); + connect( loginService, SIGNAL( loginIncorrect() ), + this, SLOT ( loginIncorrect() ) ); + connect( loginService, SIGNAL( loginSucceeded( QString, QString, QString ) ), + this, SLOT ( loginSucceeded( QString, QString, QString ) ) ); return loginService; } -/** - * @brief Internal function to show the .Net MSN Messenger service status - * - * This method displays a message box with the "Show MSN Messenger Service status?" prompt, - * and opens the MSN Messenger Service status webpage. - * - * @param message Message to show before the standard "show status" question. - */ -void MsnNotificationConnection::dotNetMessage(QString message) -{ - int result; - KUrl netUrl( "http://status.messenger.msn.com/Status.aspx" ); - - message += "\n" + i18n("Show MSN Messenger Service status?"); - result = KMessageBox::questionYesNo( 0, message, i18n("Server Error") ); - if ( result == KMessageBox::Yes ) - { - KMessApplication *kmessApp = static_cast( kapp ); - new KRun( netUrl, kmessApp->getContactListWindow()->window() ); - } - closeConnection(); -} - - - /** * @brief Return the contact list model * @@ -753,6 +719,12 @@ void MsnNotificationConnection::goOnline() if(KMESS_NULL(currentAccount_)) return; + // Stop the authentication timer, we're done + loginTimer_.stop(); + + // Load the contact list settings + readProperties(); + // Change to the initial status #ifdef KMESSDEBUG_NOTIFICATION_GENERAL kDebug() << "Changing initial status to" << MsnStatus::getCode( currentAccount_->getInitialStatus() ); @@ -787,12 +759,11 @@ void MsnNotificationConnection::goOnline() setSendPings( true ); // Notify observers that the server is connected - loginTimer_.stop(); emit connected(); - // Load the contact list settings - KConfigGroup config = KGlobal::config()->group( "" ); - readProperties( config ); + // Start a timer: for the first three seconds after connecting, do not display any notifications. + // See unlockNotifications() for more details + QTimer::singleShot( 3000, this, SLOT( unlockNotifications() ) ); } @@ -1067,7 +1038,7 @@ void MsnNotificationConnection::gotFln(const QStringList& command) kDebug() << command[1] << " went offline."; #endif - contactList_->setContactOffline( command[1].toLower() ); + contactList_->changeContactStatus( command[1].toLower(), STATUS_OFFLINE ); } @@ -1100,9 +1071,23 @@ void MsnNotificationConnection::gotIln(const QStringList& command) } #endif - Status status = MsnStatus::codeToStatus( command[2] ); - contactList_->changeContactStatus( handle, friendlyName, status, capabilities, msnObject, false ); + // If the contact's name has changed, we need to update our server-side list manually. + // Note that getTrueFriendlyName() is used, we don't want the aliases from the ContactExtension + // since we would no longer be able to see both true-name and alias names. + // Happens both in the ILN and NLN commands. + const Contact *contact = contactList_->getContactByHandle(handle); + if( contact != 0 && friendlyName != contact->getTrueFriendlyName( STRING_ORIGINAL ) && friendlyName != handle ) + { +#ifdef KMESSDEBUG_NOTIFICATION_GENERAL + kDebug() << "Contact " << contact->getHandle() << " - Current friendly name '" << contact->getTrueFriendlyName() << "'" + << " doesn't match ours: '" << friendlyName << "'." + << " Updating server-side friendlyname." << endl; +#endif + changeFriendlyName( handle, friendlyName ); + } + Status status = MsnStatus::codeToStatus( command[2] ); + contactList_->changeContactStatus( handle, status, friendlyName, capabilities, msnObject, false ); } @@ -1152,7 +1137,6 @@ void MsnNotificationConnection::gotLst(const QStringList& command) { if(KMESS_NULL(contactList_)) return; - //emit statusMessage( i18n("Getting lists"), KmessInterface::TYPE_WARNING ); #ifdef KMESSDEBUG_NOTIFICATION_GENERAL kDebug() << "Got LST : " << command.join( " " ); #endif @@ -1306,19 +1290,20 @@ void MsnNotificationConnection::gotNln(const QStringList& command) // If the contact's name has changed, we need to update our server-side list manually. // Note that getTrueFriendlyName() is used, we don't want the aliases from the ContactExtension // since we would no longer be able to see both true-name and alias names. + // Happens both in the ILN and NLN commands. const Contact *contact = contactList_->getContactByHandle(handle); - if( friendlyName != contact->getTrueFriendlyName() && friendlyName != handle ) + if( contact != 0 && friendlyName != contact->getTrueFriendlyName( STRING_ORIGINAL ) && friendlyName != handle ) { #ifdef KMESSDEBUG_NOTIFICATION_GENERAL kDebug() << "Contact " << contact->getHandle() << " - Current friendly name '" << contact->getTrueFriendlyName() << "'" - << " doesn't match ours: '" << friendlyName << "'." - << " Updating server-side friendlyname." << endl; + << " doesn't match ours: '" << friendlyName << "'." + << " Updating server-side friendlyname." << endl; #endif changeFriendlyName( handle, friendlyName ); } // Update contact status. - contactList_->changeContactStatus( handle, friendlyName, status, capabilities, msnObject ); + contactList_->changeContactStatus( handle, status, friendlyName, capabilities, msnObject, enableNotifications_ ); } @@ -1329,8 +1314,9 @@ void MsnNotificationConnection::gotOut(const QStringList& command) // If the first word is "OTH", it means that this user connected from elsewhere. if ( command[1] == "OTH" ) { - KMessageBox::error( 0, i18n("You have been disconnected because you \nconnected from another MSN Messenger client \nor from another location") ); + KMessageBox::error( 0, i18n("

You have been disconnected!

You connected with this account from another Messenger client, or from another location.

") ); } + closeConnection(); } @@ -1502,7 +1488,7 @@ void MsnNotificationConnection::gotRng(const QStringList& command) QString server = serverAndPort.section(':', 0, 0); QString portString = serverAndPort.section(':', 1, 1); bool goodPort; - int port = portString.toInt( &goodPort ); + quint16 port = (quint16) portString.toUInt( &goodPort ); if ( !goodPort ) { kWarning() << "Couldn't get port from string " << portString; @@ -1514,7 +1500,7 @@ void MsnNotificationConnection::gotRng(const QStringList& command) #endif // Send connection information object - emit startedSwitchboard( ChatInformation(this, handle, server, port, auth, chatId, ChatInformation::CONNECTION_BACKGROUND ) ); + emit startSwitchboard( ChatInformation(this, handle, server, port, auth, chatId, ChatInformation::CONNECTION_BACKGROUND ) ); } @@ -1546,10 +1532,6 @@ void MsnNotificationConnection::gotSyn(const QStringList& command) emit ( i18n("Got synchronization") ); totalNoContacts_ = command[4].toInt(); - // The login was successful, stop timer now already. - // When the authentication part was slow KMess could disconnect while the contactlist is being downloaded. - loginTimer_.stop(); - // Allow the contactlist to be downloaded within 2 minutes, should be more then enough. loginTimer_.start( 120000 ); @@ -1588,6 +1570,7 @@ void MsnNotificationConnection::gotUbx(const QStringList &command, const QByteAr if( ! xml.setContent(payload) ) { kWarning() << "Could not parse personal status message (invalid XML, contact=" << command[1] << ")!"; + kWarning() << "The invalid XML was:" << payload; } // Parse payload @@ -1684,7 +1667,7 @@ void MsnNotificationConnection::gotUsr(const QStringList& command) QString parameters = QUrl::fromPercentEncoding( command[4].toUtf8() ); // Change statusbar - emit statusMessage( i18n("Authenticating"), KMessInterface::TYPE_WARNING ); + emit statusMessage( i18n("Authenticating..."), false ); // Get the right password value QString password; @@ -1701,7 +1684,6 @@ void MsnNotificationConnection::gotUsr(const QStringList& command) // Start the passport based login passportLoginService_ = createPassportLoginService(); - addSoapClient( passportLoginService_ ); passportLoginService_->login( parameters, currentAccount_->getHandle(), password ); } else if( step == "OK" ) @@ -1725,9 +1707,6 @@ void MsnNotificationConnection::gotUsr(const QStringList& command) // The password may be overwritten now, because the login was succesful. currentAccount_->saveTemporaryPassword(); - // Update the status - emit statusMessage( i18n("Received user confirmation"), KMessInterface::TYPE_WARNING ); - // Synchronize with the server. // This will cause it to send the account data and contact lists) sendCommand("SYN", "0 0\r\n"); @@ -1737,7 +1716,7 @@ void MsnNotificationConnection::gotUsr(const QStringList& command) // QString currentTime_ = time_.toString(Qt::ISODate) + ".0000000-07:00"; // sendCommand( "SYN", currentTime_ + " " + currentTime_ + "\r\n"); - emit statusMessage( i18n("Waiting for contact list..."), KMessInterface::TYPE_WARNING ); + emit statusMessage( i18n("Waiting for contact list..."), false ); // Reset the connection timer now, to give some more time // to the MSN contact list server to send us our contacts. @@ -1787,7 +1766,7 @@ void MsnNotificationConnection::gotXfr(const QStringList& command) // Convert the port to an integer bool goodPort; - int port = portString.toInt( &goodPort ); + quint16 port = (quint16) portString.toUInt( &goodPort ); #ifdef KMESSDEBUG_NOTIFICATION_GENERAL kDebug() << "Got " << serverType << " transfer to " << server << ":" << port << "."; #endif @@ -1809,7 +1788,7 @@ void MsnNotificationConnection::gotXfr(const QStringList& command) kDebug() << "Connecting to new server."; #endif // This is a notification server transfer. Switch this socket to the given server. - emit statusMessage( i18n("Transfer to notification server"), KMessInterface::TYPE_WARNING ); + emit statusMessage( i18n("Switching to another server..."), false ); #ifdef KMESS_NETWORK_WINDOW KMESS_NET_INIT(this, "NS " + server); @@ -1847,11 +1826,11 @@ void MsnNotificationConnection::gotXfr(const QStringList& command) // Update the server information switchboardInfo->setServerInformation( server, port, command[5] ); #ifdef KMESSDEBUG_NOTIFICATION_GENERAL - kDebug() << "emitting startedSwitchboard() signal."; + kDebug() << "emitting startSwitchboard() signal."; #endif // Signal the new connection - emit startedSwitchboard( *switchboardInfo ); + emit startSwitchboard( *switchboardInfo ); // Remove the first item from the active requests list openRequests_.removeAll( switchboardInfo ); @@ -1873,15 +1852,26 @@ bool MsnNotificationConnection::initialize() kDebug() << "already initialized!"; return false; } - if ( !MsnConnection::initialize() ) + if ( ! MsnConnection::initialize() ) { - kDebug() << "Couldn't initialize parent."; + kDebug() << "Couldn't initialize base class."; return false; } - // currentAccount_ is initialized now. + // Determine which payload commands can be received by the Notification Connection + QStringList payloadCommands; + payloadCommands << "MSG" // Server message + << "UBX" // contact personal status message + << "GCF" // server config file + << "NOT" // msn alerts, msn calendar + << "IPG" // contact page + ; + + setAcceptedPayloadCommands( payloadCommands ); + // Pass the current contactlist reference to the currentaccount // so other classes can access contacts from a central point. + currentAccount_ = CurrentAccount::instance(); currentAccount_->setContactList( contactList_ ); initialized_ = true; @@ -1890,18 +1880,6 @@ bool MsnNotificationConnection::initialize() -// Test whether the given command is a payload command -bool MsnNotificationConnection::isPayloadCommand(const QString &command) const -{ - return (command == "UBX" // contact personal status message - || command == "GCF" // server config file - || command == "NOT" // msn alerts, msn calendar - || command == "IPG" // contact page - ); -} - - - // The passport login failed, username/password was incorrect void MsnNotificationConnection::loginIncorrect() { @@ -1913,7 +1891,7 @@ void MsnNotificationConnection::loginIncorrect() // but for fatal SOAP errors. // Show a message to the user, before deleting the object! - KMessageBox::error( 0, i18n("Authentication failed, please verify your account name and password") ); + KMessageBox::error( 0, i18n("Authentication failed, please verify your account name and password.") ); // Close the connection attempt. closeConnection(); @@ -1922,46 +1900,25 @@ void MsnNotificationConnection::loginIncorrect() // The passport login succeeded -void MsnNotificationConnection::loginSucceeded(QString authentication) +void MsnNotificationConnection::loginSucceeded( QString authentication, QString passportToken, + QString proofToken ) { #ifdef KMESSDEBUG_NOTIFICATION_AUTH kDebug() << "Authentication is " << authentication; #endif + // Store the passport tickets + currentAccount_->setAuthenticationTicket( authentication ); + currentAccount_->setPassportToken ( passportToken ); + currentAccount_->setProofToken ( proofToken ); + // Delete the login handler // Delay deletion so it can complete the method. - soapClients_.removeAll( passportLoginService_ ); - QTimer::singleShot( 10, passportLoginService_, SLOT(deleteLater()) ); + deleteSoapClient( passportLoginService_ ); passportLoginService_ = 0; // Send login command. sendCommand( "USR", "TWN S " + authentication + "\r\n" ); - - // Extract the 't' and 'p' values from the 'authentication' string, - // these are needed later for webservice calls (e.g. Offline-IM) - QStringList fields = authentication.split("&"); - foreach( QString field, fields ) - { - if( field.startsWith("t=") ) - { - authT_ = field.mid(2); - } - else if( field.startsWith("p=") ) - { - authP_ = field.mid(2); - } -#ifdef KMESSDEBUG_NOTIFICATION - else - { - kWarning() << "Could not parse authentication string!"; - } -#endif - } - - if( authP_.isEmpty() || authT_.isEmpty() ) - { - kWarning() << "Could not parse passport authentication response, 'p' and 't' fields not detected!"; - } } @@ -2023,6 +1980,9 @@ bool MsnNotificationConnection::openConnection() return false; } + // If the last connection was using HTTP, try again using TCP first. + switchToTcpSocket(); + // Initialize the contact list contactList_->reset( true ); @@ -2030,13 +1990,10 @@ bool MsnNotificationConnection::openConnection() KMESS_NET_INIT(this, "NS messenger.hotmail.com"); #endif - emit statusMessage( i18n( "Connecting..." ), KMessInterface::TYPE_WARNING ); + emit statusMessage( i18n( "Connecting..." ), false ); - // Attempt to connect to the main MSN server - connectToServer( "messenger.hotmail.com", 1863 ); - - // Start the login timer for the name resolution and socket connection - loginTimer_.start( 10000 ); // 10 seconds + // Attempt to connect to the default MSN server + connectToServer(); #ifdef KMESSDEBUG_NOTIFICATION_GENERAL kDebug() << "Socket started connecting to the server. Started timer."; @@ -2205,9 +2162,9 @@ void MsnNotificationConnection::parseCommand(const QStringList& command) else { // No need to bugger the normal users with strange error messages - kWarning() << "Unknown command '" << command[0] << "'! Full string: " << command.join( " " ); + kWarning() << "Unknown command" << command[0] << "received from the server! Full string:" << command.join( " " ); #ifdef KMESSDEBUG_NOTIFICATION_GENERAL - KMessageBox::error( 0, i18n("KMess received an unknown command from the server: %1", command[0]), i18n("Developer build warning") ); + slotError( i18n( "Unknown command received from the server: %1", command[0] ), MsnSocketBase::ERROR_INTERNAL ); #endif } @@ -2217,78 +2174,111 @@ void MsnNotificationConnection::parseCommand(const QStringList& command) // All possible commands have been trapped. At this point we can have only // received an error code. - // See: http://www.hypothetic.org/docs/msn/reference/error_list.php for details + // See: http://msnpiki.msnfanatic.com/index.php/Reference:Error_List for details - bool isWarning = false; // Not really errors, will be displayed on the status bar - bool isServerError = false; - QString errorMessage = QString::null; + // By default, blame the user :) + MsnSocketBase::ErrorType errorType = MsnSocketBase::ERROR_USER; + QString errorMessage; + bool isNotice = false; // Not really errors, will be displayed on the status bar + bool isWarning = false; // Will be displayed on a dialog box, but will not disconnect - // Client side errors. - // These errors are usually generated by misbehavior on kmess' or the user's side. switch( command[0].toInt() ) { + // Client side errors. + // These errors are usually generated by misbehavior on kmess' or the user's side. + case 200: - errorMessage = i18n("There was an internal error in KMess: %1", i18n("Invalid command syntax") ); + errorType = MsnSocketBase::ERROR_INTERNAL; + errorMessage = i18n("Invalid command syntax"); break; case 201: - errorMessage = i18n("There was an internal error in KMess: %1", i18n("Invalid command parameter") ); + errorType = MsnSocketBase::ERROR_INTERNAL; + errorMessage = i18n("Invalid command parameter"); break; case 205: errorMessage = i18n("The email you have tried to add is not a MSN Messenger account"); + isWarning = true; break; case 206: - errorMessage = i18n("There was an internal error in KMess: %1", i18n("Domain name missing") ); + errorType = MsnSocketBase::ERROR_INTERNAL; + errorMessage = i18n("Domain name missing"); break; case 207: - errorMessage = i18n("There was an internal error in KMess: %1", i18n("Already logged in") ); + errorType = MsnSocketBase::ERROR_INTERNAL; + errorMessage = i18n("Already logged in"); break; case 208: errorMessage = i18n("The account name given is invalid"); + isWarning = true; break; case 209: errorMessage = i18n("That account name is invalid, or your passport has not been confirmed yet"); break; case 210: errorMessage = i18n("Your contact list is full"); + isWarning = true; break; case 213: - errorMessage = i18n("There was an internal error in KMess: %1", i18n("Invalid SBP parameter") ); + errorType = MsnSocketBase::ERROR_INTERNAL; + errorMessage = i18n("Invalid SBP parameter"); break; case 215: errorMessage = i18n("This contact is already on your list"); + isWarning = true; break; case 216: errorMessage = i18n("This contact is not on your list"); + isWarning = true; break; case 217: errorMessage = i18n("This contact is not online"); + isWarning = true; break; case 218: - errorMessage = i18n("There was an internal error in KMess: %1", i18n("Already in this mode") ); + errorType = MsnSocketBase::ERROR_INTERNAL; + errorMessage = i18n("Already in this mode"); break; case 219: - errorMessage = i18n("There was an internal error in KMess: %1", i18n("Contact is in the opposite list") ); + errorType = MsnSocketBase::ERROR_INTERNAL; + errorMessage = i18n("Contact is in the opposite list"); + break; + case 222: + case 228: + errorMessage = i18n("The group name is already added to your Messenger or Hotmail contact list. Please use a different name."); + isWarning = true; break; case 223: errorMessage = i18n("Your contact list has too many groups"); + isWarning = true; break; case 224: errorMessage = i18n("This group can't be changed"); + isWarning = true; + break; + case 225: + errorType = MsnSocketBase::ERROR_INTERNAL; + errorMessage = i18n("Contact is not added to this group"); + isWarning = true; break; case 227: errorMessage = i18n("This group is not empty"); - break; - case 228: - errorMessage = i18n("The group name is already in use by your Messenger or Hotmail contact list"); + isWarning = true; break; case 229: errorMessage = i18n("The group name is too long"); + isWarning = true; break; case 230: + errorType = MsnSocketBase::ERROR_INTERNAL; errorMessage = i18n("There was an internal error in KMess: %1", i18n("Attempted to change group \"0\"") ); break; case 231: - errorMessage = i18n("There was an internal error in KMess: %1", i18n("Invalid Group") ); + errorType = MsnSocketBase::ERROR_INTERNAL; + errorMessage = i18n("Invalid Group"); + break; + case 240: + errorType = MsnSocketBase::ERROR_INTERNAL; + errorMessage = i18n("Empty domain"); break; case 280: errorMessage = i18n("Switchboard server failed"); @@ -2297,167 +2287,185 @@ void MsnNotificationConnection::parseCommand(const QStringList& command) errorMessage = i18n("Transfer to switchboard server failed"); break; case 282: + errorType = MsnSocketBase::ERROR_INTERNAL; errorMessage = i18n("Direct connection (MSNSLP) error, connection failed"); break; case 300: - errorMessage = i18n("There was an internal error in KMess: %1", i18n("Required field missing") ); + errorType = MsnSocketBase::ERROR_INTERNAL; + errorMessage = i18n("Required field missing"); break; case 302: - errorMessage = i18n("There was an internal error in KMess: %1", i18n("Not logged in") ); + errorType = MsnSocketBase::ERROR_INTERNAL; + errorMessage = i18n("Not logged in"); break; - case 402: - case 403: - errorMessage = i18n("Error accessing contact list, try again later"); + case 420: + errorMessage = i18n("No permissions given for this account"); // e.g. trying the beta service. break; + // For other 5xx errors, see below case 502: - errorMessage = i18n("There was an internal error in KMess: %1", i18n("Command is disabled") ); + errorType = MsnSocketBase::ERROR_INTERNAL; + errorMessage = i18n("Command is disabled"); break; case 511: errorMessage = i18n("Your account is banned."); - closeConnection(); break; case 540: - errorMessage = i18n("There was an internal error in KMess: %1", i18n("Challenge response failed") ); + errorType = MsnSocketBase::ERROR_INTERNAL; + errorMessage = i18n("Challenge response failed"); + break; + // For other 6xx errors, see below + case 710: + errorType = MsnSocketBase::ERROR_INTERNAL; + errorMessage = i18n("Bad command data"); // bad CVR or URL command break; case 713: // Too many CAL's - errorMessage = i18n("You're opening sessions too rapidly"); + errorMessage = i18n("You are opening chat sessions too fast"); + isWarning = true; break; case 714: - errorMessage = i18n("You have too many sessions opened"); + errorMessage = i18n("You have too many open chat sessions"); + isWarning = true; break; case 715: // Sent in response to a PRP setting an invalid phone type of three or less characters. // Also sent in response to a change of display name (PRP) on an unverified Passport account. - errorMessage = i18n("There was an internal error in KMess: %1", i18n("Unexpected command sequence") ); + errorType = MsnSocketBase::ERROR_INTERNAL; + errorMessage = i18n("Unexpected command sequence"); break; case 717: + errorType = MsnSocketBase::ERROR_INTERNAL; errorMessage = i18n("Bad friend name"); + isWarning = true; break; case 731: // Sent in response to a badly formatted CVR - errorMessage = i18n("There was an internal error in KMess: %1", i18n("Bad CVR data") ); + errorType = MsnSocketBase::ERROR_INTERNAL; + errorMessage = i18n("Bad CVR data"); break; case 800: // Happens when renaming too quickly, // but also when sending too many MSNP2P packets over the switchboard without waiting for ACKs. + errorType = MsnSocketBase::ERROR_INTERNAL; errorMessage = i18n("The server reports KMess is flooding it with too many data"); - isWarning = true; + isNotice = true; break; + // For other 9xx errors, see below case 911: // User/pass was probably correct, TWN ticket was incorrect - errorMessage = i18n("There was an internal error in KMess: %1", i18n("Authentication ticket was incorrect") ); - closeConnection(); + errorType = MsnSocketBase::ERROR_INTERNAL; + errorMessage = i18n("Authentication ticket was incorrect"); break; case 913: errorMessage = i18n("You can't start a chat with someone while you are invisible."); + isWarning = true; + break; + case 920: + errorMessage = i18n("Not accepting new contacts"); + isWarning = true; break; case 923: - errorMessage = i18n("You have a kids passport, you need parental consent to chat online."); - closeConnection(); + errorMessage = i18n("You have a kids passport account, you need parental consent to chat online."); break; case 924: - errorMessage = i18n("Your passport needs to be verified first."); - closeConnection(); + errorMessage = i18n("Your passport account needs to be verified first."); break; case 928: - errorMessage = i18n("There was an internal error in KMess: %1", i18n("Bad USR ticket") ); + errorType = MsnSocketBase::ERROR_INTERNAL; + errorMessage = i18n("Bad USR ticket"); break; - default: - // It wasn't an user error. So, probably, it's a server error. - isServerError = true; + + // Server side errors. + // These are generated without any intervention from us. + + case 402: + case 403: + errorType = MsnSocketBase::ERROR_SERVER; + errorMessage = i18n("Error accessing contact list, try again later"); + // If we're still logging in, the presence would be incomplete, so disconnect + if( ! loginTimer_.isActive() ) + { + isWarning = true; + } break; - } - - // We've received a warning message: don't interrupt the user for it, show it on the Status Bar instead. - if( isWarning ) - { - emit statusMessage( errorMessage, KMessInterface::TYPE_WARNING ); - return; - } - else if( !isServerError ) - { - // Display an User Error message. - KMessageBox::error( 0, errorMessage, i18n( "KMess - MSN error" ) ); - return; - } - - // Server side errors. - // These are generated without any intervention from us. - switch( command[0].toInt() ) - { case 500: // Generic server error case 501: // Database server error case 510: // File operation failed case 520: // Memory allocation failed - case 603: // Database connection failed - errorMessage = i18n("There was an internal server error"); - closeConnection(); + case 603: // Database connection failed, in response to SYN + case 605: // server unavailable + errorType = MsnSocketBase::ERROR_SERVER; + errorMessage = i18n("The MSN service is temporarily unavailable, there was an internal server error."); break; case 600: + case 601: // server is unavailable, in response to USR case 910: case 912: case 918: case 919: case 921: case 922: - errorMessage = i18n("The server is too busy"); - closeConnection(); - break; - case 601: - case 605: - errorMessage = i18n("The server is unavailable"); + errorType = MsnSocketBase::ERROR_SERVER; + errorMessage = i18n("The MSN service is temporarily unavailable, the server is too busy"); break; case 602: + errorType = MsnSocketBase::ERROR_SERVER; errorMessage = i18n("Peer notification server down"); - closeConnection(); break; case 604: + errorType = MsnSocketBase::ERROR_SERVER; errorMessage = i18n("The server is going down"); break; case 640: + errorType = MsnSocketBase::ERROR_SERVER; errorMessage = i18n("The server is going down soon"); isWarning = true; break; case 711: + errorType = MsnSocketBase::ERROR_SERVER; errorMessage = i18n("Write is blocking"); break; case 712: + errorType = MsnSocketBase::ERROR_SERVER; errorMessage = i18n("Session is overloaded"); + isWarning = true; break; case 914: case 915: case 916: + errorType = MsnSocketBase::ERROR_SERVER; errorMessage = i18n("The server is not available"); break; case 917: + errorType = MsnSocketBase::ERROR_SERVER; errorMessage = i18n("Authentication failed"); break; - case 920: - errorMessage = i18n("Not accepting new principals"); - break; default: - // It was not an user error, not a server error.. what was it then? - // No need to bugger the users with strange error messages - kWarning() << "Unknown error '" << command[0] << "'! Full string: " << command.join( " " ); + kWarning() << "Unknown error" << command[0] << "received from the server! Full string:" << command.join( " " ); #ifdef KMESSDEBUG_NOTIFICATION_GENERAL - KMessageBox::error( 0, i18n("KMess received an unknown error message from the server: %1", command[0]) ); + slotError( i18n( "Unknown error code received from the server: %1", command[0] ), MsnSocketBase::ERROR_INTERNAL ); #endif return; } - // We've received a server warning message: don't interrupt the user for it, show it on the Status Bar instead. - if( isWarning ) + // We've received a notice message: don't interrupt the user for it, show it on the Status Bar instead. + if( isNotice ) { - emit statusMessage( errorMessage, KMessInterface::TYPE_WARNING ); + emit statusMessage( errorMessage, false ); + return; + } + // We've received a warning message: show it in a dialog box, but do not disconnect + else if( isWarning ) + { + KMessageBox::error( 0, errorMessage, i18nc( "Error dialog box title", "MSN error" ) ); return; } - // Display the Server Error message. - dotNetMessage( errorMessage ); + // Call the unified error message display method + slotError( errorMessage, errorType ); } @@ -2490,6 +2498,7 @@ void MsnNotificationConnection::parseMimeMessage(const QStringList& /*command*/, currentAccount_->setAccountInformation( mainMessage.getValue("MSPAuth"), mainMessage.getValue("preferredEmail"), mainMessage.getValue("sid"), + mainMessage.getValue("lang_preference"), mainMessage.getValue("EmailEnabled") == "1", mainMessage.getValue("ClientIP"), externalPort, @@ -2583,17 +2592,18 @@ void MsnNotificationConnection::parseMimeMessage(const QStringList& /*command*/, if( message.getValue("Type") == "1" ) { - if( message.getValue("Arg1").toInt() < 2 ) + int timeLeft = message.getValue("Arg1").toInt(); + QString textTimeLeft = i18ncp( "Time left before server maintenance", "1 minute", "%1 minutes", timeLeft ); + if( timeLeft > 2 ) { - emit statusMessage( i18n( "Warning: Server closes for maintenance in 1 minute!" ), KMessInterface::TYPE_WARNING ); -#ifdef KMESSDEBUG_NOTIFICATION_GENERAL - KMessageBox::information( 0, i18n( "The MSN Server has reported it will be going down in one minute for maintenance." ) ); -#endif + emit statusMessage( i18n("Server closes for maintenance in %1!", textTimeLeft ), false ); } else { - emit statusMessage( i18n("Warning: Server closes for maintenance in %1 minutes!", message.getValue("Arg1") ), KMessInterface::TYPE_WARNING ); + slotError( i18nc( "Server maintenance dialog box text", + "The MSN Server will be going down in %1 for maintenance.", textTimeLeft ), MsnSocketBase::ERROR_SERVER ); } + } } else @@ -2887,9 +2897,10 @@ void MsnNotificationConnection::receivedOfflineIm( const QString &messageId, con // Find the SOAP client to send the next request if( KMESS_NULL(offlineImService_) ) { - KMessageBox::error(0, i18n( "KMess could not process Offline-IM messages.\n\nDetails: %1", - i18n("Lost reference to SOAP client") ) - ); + slotError( i18n( "KMess could not process Offline-IM messages.
Details: %1", + i18n("Lost reference to SOAP client") ), + MsnSocketBase::ERROR_INTERNAL ); + qDeleteAll( offlineImMessages_ ); offlineImMessages_.clear(); pendingOfflineImMessages_.clear(); @@ -3028,7 +3039,8 @@ void MsnNotificationConnection::removeContact(QString handle, bool block) if(contact->isFriend()) { // If contact was on the friends list, remove it there. To do this, first remove it from all the groups it is in. - foreach( QString groupId, contact->getGroupIds() ) + const QStringList groups( contact->getGroupIds() ); + foreach( QString groupId, groups ) { sendCommand("REM", "FL " + contact->getGuid() + " " + groupId + "\r\n"); } @@ -3095,6 +3107,14 @@ void MsnNotificationConnection::requestSwitchboard( QString handle, ChatInformat } } + // Open directly fake switchboards for offline contacts + if( type == ChatInformation::CONNECTION_OFFLINE ) + { + ChatInformation *offlineChatInfo = new ChatInformation( this, handle, -1, type ); + emit startSwitchboard( *offlineChatInfo ); + return; + } + // Send the command int transactionId = sendCommand( "XFR", "SB\r\n" ); @@ -3105,23 +3125,20 @@ void MsnNotificationConnection::requestSwitchboard( QString handle, ChatInformat // Load the contact list properties -void MsnNotificationConnection::readProperties( const KConfigGroup &config ) +void MsnNotificationConnection::readProperties() { #ifdef KMESSDEBUG_NOTIFICATION kDebug() << "Loading properties for the notification connection"; #endif - // Make a ref to this account's config group - KConfigGroup group = config.config()->group("Profiles").group( currentAccount_->getHandle() ); - // Load the contact list's settings - contactList_->readProperties( group ); + contactList_->readProperties(); } // Save the contact list properties -void MsnNotificationConnection::saveProperties( KConfigGroup &config ) +void MsnNotificationConnection::saveProperties() { #ifdef KMESSDEBUG_NOTIFICATION kDebug() << "Saving properties for the notification connection"; @@ -3134,37 +3151,131 @@ void MsnNotificationConnection::saveProperties( KConfigGroup &config ) return; } - // Make a ref to this account's config group - KConfigGroup group = config.config()->group("Profiles").group( currentAccount_->getHandle() ); - // Save the contact list's settings for this account - contactList_->saveProperties( group ); + contactList_->saveProperties(); } /** - * @brief Called when the socket connected. + * @brief The authentication process has timed out + * + * Called by the login timer, when the login timer has expired + */ +void MsnNotificationConnection::slotAuthenticationFailed() +{ +#ifdef KMESSDEBUG_CONNECTION_SOCKET_TCP + kDebug() << "Connection not successful within time limit."; +#endif + + // Bounce back to the unified error handler to give the user a message + slotError( i18n( "Authentication time limit exceeded" ), MsnSocketBase::ERROR_AUTH_TIME_LIMIT ); +} + + + +/** + * @brief Called when the connection has been established. * * This method calls putVer() to start the version exchange. */ -void MsnNotificationConnection::slotSocketConnected() +void MsnNotificationConnection::slotConnected() { #ifdef KMESSDEBUG_NOTIFICATION_GENERAL kDebug() << "Connected to server, sending VER."; #endif - // Restart the login timer for the actual MSN sign in + // Restart the login timer for the MSN sign in loginTimer_.stop(); - loginTimer_.start( 45000 ); // 45 seconds + loginTimer_.start( 45000 ); // 45 seconds to authenticate and get the list putVer(); } + +/** + * @brief Shows error dialog boxes + * + * Closes the connection, and displays + * a suitable type of message box. + * + * @param error The error reason or explanation + * @param type The type of error + */ +void MsnNotificationConnection::slotError( QString error, MsnSocketBase::ErrorType type ) +{ + // Always report errors to console + kWarning() << "KMess Error ( type" << type << "):" << error << "!"; + + int result; + QString additionalInfo; + QString dialogTitle = i18nc( "Error dialog box title", "MSN error" ); + +#ifdef KMESSDEBUG_NOTIFICATION_GENERAL + // Add more details about the error in developer builds. + additionalInfo = i18n( "
Internal error reason: %1", error ); +#endif + + // If the server can't be contacted, try again with HTTP before giving up + if( ( type == MsnSocketBase::ERROR_CONNECTING + || type == MsnSocketBase::ERROR_CONNECTION_TIME_LIMIT ) + && switchToHttpSocket() ) + { + return; + } + + // First disconnect + closeConnection(); + + // Then decide what kind of message to show + switch( type ) + { + case MsnSocketBase::ERROR_CONNECTION_TIME_LIMIT: + case MsnSocketBase::ERROR_CONNECTING: + // Continue as for authentication errors if the switch to HTTP had failed + case MsnSocketBase::ERROR_AUTH_TIME_LIMIT: + + // Show a message to the user if the connection has failed + result = KMessageBox::questionYesNo( 0, i18nc( "Login error message, with more details for developer versions", + "

KMess could not connect the the MSN Messenger servers.
There is a problem with your Internet connection, or the MSN Messenger servers may be temporarily unavailable.%1

Show the MSN Messenger Service status page?

", additionalInfo ), dialogTitle ); + if ( result == KMessageBox::Yes ) + { + // Launch the browser for the given URL + KMessShared::openBrowser( KUrl( "http://status.messenger.msn.com/Status.aspx" ) ); + } + break; + + // Report errors caused by the user + case MsnSocketBase::ERROR_USER: + KMessageBox::error( 0, i18nc( "Server-reported user error dialog box", "

MSN message

%1

", error ), dialogTitle ); + break; + + // Report internal server errors + case MsnSocketBase::ERROR_SERVER: + KMessageBox::error( 0, i18nc( "Server error dialog box", "

MSN server message

%1

", error ), dialogTitle ); + break; + + // Report internal KMess errors, usually after receiving an error by the MSN server + case MsnSocketBase::ERROR_INTERNAL: + KMessageBox::error( 0, i18nc( "Server-reported client error dialog box", "

Internal error in KMess

%1

", error ), dialogTitle ); + break; + + case MsnSocketBase::ERROR_DROP: + case MsnSocketBase::ERROR_DATA: + case MsnSocketBase::ERROR_UNKNOWN: + default: + KMessageBox::error(0, i18nc( "Connection error message, with more details for developer versions", + "

Connection to the MSN server has been lost.%1

", additionalInfo ), dialogTitle ); + break; + } +} + + + // A SOAP request failed with an error message -void MsnNotificationConnection::soapRequestFailed(HttpSoapConnection *client, const QString &reason) +void MsnNotificationConnection::slotSoapError(HttpSoapConnection *client, const QString &reason) { #ifdef KMESSDEBUG_NOTIFICATION_GENERAL kDebug() << "SOAP request failed: " << reason; @@ -3172,45 +3283,37 @@ void MsnNotificationConnection::soapRequestFailed(HttpSoapConnection *client, co if(KMESS_NULL(client)) return; // Display an error message - const QString &clientName = client->metaObject()->className(); //const QString &lastAction = client->getSoapAction(); - if( clientName == "OfflineImService" ) + if( qobject_cast( client ) != 0 ) { // No need to request more, it just failed. qDeleteAll( offlineImMessages_ ); offlineImMessages_.clear(); - KMessageBox::error(0, i18n( "KMess could not process Offline-IM messages.\n\nDetails: %1", reason )); + + slotError( i18n( "KMess could not process Offline-IM messages.
Details: %1", reason ), + MsnSocketBase::ERROR_INTERNAL ); } - else if( clientName == "PassportLoginService" ) + else if( qobject_cast( client ) != 0 ) { - // NOTE: a similar thing also happens in loginIncorrect(), - // but for fatal SOAP errors. + // NOTE: a similar thing also happens in loginIncorrect() // Show a message to the user, before deleting the object! - KMessageBox::error( 0, i18n( "Authentication failed, KMess could not process the passport login.\n\nDetails: %1", reason ) ); + slotError( i18n( "Authentication failed, KMess could not process the passport login.
Details: %1", reason ), + MsnSocketBase::ERROR_INTERNAL ); // Close the connection attempt. closeConnection(); } else { - KMessageBox::error(0, i18n( "KMess could not access the remote webservice.\n\nDetails: %1", reason )); + // Fall back to a generic error message. + MsnConnection::slotSoapError( client, reason ); } } -// A SOAP request failed with an SOAP fault -void MsnNotificationConnection::soapRequestFailed(HttpSoapConnection *client, const QString &faultCode, - const QString &faultString, QDomElement /*faultNode*/) -{ - if(KMESS_NULL(client)) return; - soapRequestFailed(client, faultCode + ": " + faultString); -} - - - // Unblock the given contact void MsnNotificationConnection::unblockContact(QString handle) { @@ -3220,4 +3323,17 @@ void MsnNotificationConnection::unblockContact(QString handle) putAdc( handle, "AL" ); } + + +/** + * @brief Unlock notifications after the first seconds of connections + * + * The first moments KMess is connected notifications are blocked, to avoid receiving popups before + * the user could even look at the contact list, possibly distracting him/her or covering screen space. + */ +void MsnNotificationConnection::unlockNotifications() +{ + enableNotifications_ = true; +} + #include "msnnotificationconnection.moc" diff --git a/src/network/msnnotificationconnection.h b/src/network/msnnotificationconnection.h index 7554fe0..24b75d6 100644 --- a/src/network/msnnotificationconnection.h +++ b/src/network/msnnotificationconnection.h @@ -18,25 +18,23 @@ #ifndef MSNNOTIFICATIONCONNECTION_H #define MSNNOTIFICATIONCONNECTION_H -#include -#include -#include -#include - #include "../contact/msnstatus.h" #include "chatinformation.h" #include "msnconnection.h" +#include +#include +#include + + // Forward declarations class ChatInformation; class ChatMessage; class Contact; class ContactList; -class KConfig; class KMessTest; class MimeMessage; -class HttpSoapConnection; class PassportLoginService; class QAbstractItemModel; class OfflineImService; @@ -116,6 +114,7 @@ class MsnNotificationConnection : public MsnConnection friend class KMessTest; + public: // The constructor MsnNotificationConnection(); @@ -132,11 +131,12 @@ class MsnNotificationConnection : public MsnConnection // Open a connection to the server bool openConnection(); // Load the contact list properties - void readProperties( const KConfigGroup &config ); + void readProperties(); // Save the contact list properties - void saveProperties( KConfigGroup &config ); + void saveProperties(); - public slots: // Public slots + + public slots: // Copy contact to another group. void addContactToGroup(QString handle, QString groupId); // Add an existing contact to the friends list @@ -181,21 +181,20 @@ class MsnNotificationConnection : public MsnConnection // Unblock the given contact void unblockContact(QString handle); - protected: // Protected methods - // Test whether the given command is a payload command - virtual bool isPayloadCommand(const QString &command) const; + protected slots: // The socket connected, so send the version command. - void slotSocketConnected(); + void slotConnected(); + // Shows error dialog boxes + void slotError( QString error, MsnSocketBase::ErrorType type ); + // A SOAP request failed with an error message + virtual void slotSoapError(HttpSoapConnection *client, const QString &reason); + private: // Private methods - // Register a SOAP client to the class. - void addSoapClient( HttpSoapConnection *client ); // Create the Offline-IM service OfflineImService *createOfflineImService(); // Create the passport login handler PassportLoginService *createPassportLoginService(); - // Show a .net status message. - void dotNetMessage(QString message); // Go online void goOnline(); // Received the addition of a contact to a list or list and group @@ -257,26 +256,25 @@ class MsnNotificationConnection : public MsnConnection // Parse a payload command virtual void parsePayloadMessage(const QStringList &command, const QByteArray &payload); - private slots: // Private slots - // Check whether login was successful within time limit - void checkLogin(); + + private slots: // Removes any expired switchboard requests, so new ones can be made void checkSwitchboardsTimeout(); // The passport login failed, username/password was incorrect void loginIncorrect(); // The passport login succeeded - void loginSucceeded(QString authentication); + void loginSucceeded( QString authentication, QString passportToken, QString proofToken ); // Received the Mail-Data field over SOAP or at the notification connection. void receivedMailData( QDomElement mailData ); // An Offline-IM message was downloaded void receivedOfflineIm( const QString &messageId, const QString &from, const QString &to, const QDateTime &date, const QString &body, const QString &runId, int sequenceNum ); - // A SOAP request failed with an error message - void soapRequestFailed(HttpSoapConnection *client, const QString &reason); - // A SOAP request failed with an SOAP fault - void soapRequestFailed(HttpSoapConnection *client, const QString &faultCode, - const QString &faultString, QDomElement faultNode); + // The authentication process has timed out + void slotAuthenticationFailed(); + // Unlock notifications after the first seconds of connections + void unlockNotifications(); + private: // Private attributes @@ -290,12 +288,12 @@ class MsnNotificationConnection : public MsnConnection int sequenceNum; }; - // The 'p' value for the login - QString authP_; - // The 't' value for the login - QString authT_; // A pointer to the list of contacts ContactList *contactList_; + // A pointer to the shared current account singleton. + CurrentAccount *currentAccount_; + // Whether or not to enable presence notifications + bool enableNotifications_; // Group where to initially place a newly added contact QString initialContactAddedGroup_; // Whether or not the object was initialized @@ -304,7 +302,7 @@ class MsnNotificationConnection : public MsnConnection QString lastCurrentMedia_; // The last Personal Status Message set. QString lastPsm_; - // A timer to timeout the user's logon + // A timer to watch over the login process QTimer loginTimer_; // The number of contact read in int noContacts_; @@ -318,12 +316,11 @@ class MsnNotificationConnection : public MsnConnection PassportLoginService *passportLoginService_; // The pending offline-im messages QStringList pendingOfflineImMessages_; - // The persistent soap clients. - QList soapClients_; // The total number of contacts in the contact list int totalNoContacts_; - signals: // Public signals + + signals: // Signal a chat message, used for offline-im messages void offlineMessage( const ChatMessage &message ); // Signal that the connection has been made sucessfully @@ -333,7 +330,10 @@ class MsnNotificationConnection : public MsnConnection // Signal that a new email has been received void newEmail(QString sender, QString subject, bool inInbox, QString command, QString folder, QString url); // A new switchboard with a contact has been opened - void startedSwitchboard( const ChatInformation &chatInfo ); + void startSwitchboard( const ChatInformation &chatInfo ); + }; + + #endif diff --git a/src/network/msnsocketbase.cpp b/src/network/msnsocketbase.cpp new file mode 100644 index 0000000..0493672 --- /dev/null +++ b/src/network/msnsocketbase.cpp @@ -0,0 +1,110 @@ +/*************************************************************************** + msnsocketbase.cpp - description + ------------------- + begin : Thu Apr 1 2008 + copyright : (C) 2008 by Valerio Pilo + email : valerio@kmess.org + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "msnsocketbase.h" + + + +/** + * @brief The constructor + */ +MsnSocketBase::MsnSocketBase( ServerType serverType ) +: connected_( false ) +{ + // Set the type of server the derived socket will connect to + serverType_ = serverType; +} + + + +/** + * @brief The destructor + * + * Does nothing. + */ +MsnSocketBase::~MsnSocketBase() +{ +} + + + +/** + * @brief Return which payload commands are accepted by this connection + * + * Returns the list of payload messages which this connection needs to accept. + * + * @return List of 3-letter commands which are recognized as carrying payload. + */ +QStringList MsnSocketBase::getAcceptedPayloadCommands() +{ + return acceptedPayloadCommands_; +} + + + +/** + * @brief Return the type of server connection managed by the socket + */ +MsnSocketBase::ServerType MsnSocketBase::getServerType() const +{ + return serverType_; +} + + + +/** + * @brief Whether or not the connection is active + * + * @returns True when connected, false otherwise. + */ +bool MsnSocketBase::isConnected() const +{ + return ( connected_ ); +} + + + +/** + * @brief Test whether the given command is a payload command. + * + * @param command Command to verify + * @returns True when it's a payload command, false otherwise. + */ +bool MsnSocketBase::isPayloadCommand( const QString &command ) const +{ + return acceptedPayloadCommands_.contains( command ); +} + + + +/** + * @brief Specify which accepted commands carry payload data for this connection. + * + * Within different kinds of connection, server messages can be different or + * have different meanings; this method ensures that every kind of connection + * is able to recognize its own payload commands only. + * + * @param commandList List of 3-letter commands which will be recognized as carrying payload. + */ +void MsnSocketBase::setAcceptedPayloadCommands( QStringList commandList ) +{ + acceptedPayloadCommands_ = commandList; +} + + + +#include "msnsocketbase.moc" diff --git a/src/network/msnsocketbase.h b/src/network/msnsocketbase.h new file mode 100644 index 0000000..0e9a83f --- /dev/null +++ b/src/network/msnsocketbase.h @@ -0,0 +1,120 @@ +/*************************************************************************** + msnsocketbase.h - description + ------------------- + begin : Thu Apr 1 2008 + copyright : (C) 2008 by Valerio Pilo + email : valerio@kmess.org + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef MSNSOCKETBASE_H +#define MSNSOCKETBASE_H + +#include + +// Forward declarations +class CurrentAccount; + + + +/** + * @brief Base class and interface for the MSN Socket classes. + * + * The class defines the interface expected by MsnConnection for all socket implementations. + * Currently there is a socket implementation for normal TCP-based connections (MsnSocketTcp) + * and a socket for MSN-over-HTTP (MsnSocketHttp). + * + * @author Mike K. Bennett + * @author Valerio Pilo + * @ingroup NetworkCore + */ +class MsnSocketBase : public QObject +{ + Q_OBJECT + + public: // Public enumerations + /// Type of server that will be connected from this socket + enum ServerType + { + SERVER_NOTIFICATION /// The connection is to a notification server + , SERVER_SWITCHBOARD /// The connection is to a switchboard server + }; + /// Types of errors with connection sockets + enum ErrorType + { + /// These are generic socket and connection errors + ERROR_UNKNOWN = 0 /// An unspecified error has occurred + , ERROR_CONNECTING /// There was an error while establishing the connection + , ERROR_DROP /// The connection was dropped + , ERROR_DATA /// An error within the data was received + , ERROR_CONNECTION_TIME_LIMIT /// The connection was not successful within the time limit + , ERROR_AUTH_TIME_LIMIT /// The authentication/login was not successful within the time limit + /// The next are server-reported errors + , ERROR_USER /// An error caused by the user + , ERROR_SERVER /// Server error + , ERROR_INTERNAL /// Internal KMess error (we did something the server didn't like) + }; + + + public: // Public methods + // The constructor + MsnSocketBase( ServerType serverType ); + // The destructor + ~MsnSocketBase(); + // Connect to the given server via the socket + virtual void connectToServer( const QString& server = QString(), const quint16 port = 0 ) = 0; + // Disconnect from the server, if connected + virtual void disconnectFromServer( bool isTransfer = false ) = 0; + // Get the IP address of this machine. + virtual QString getLocalIp() const = 0; + // Return which payload commands are accepted by this connection + QStringList getAcceptedPayloadCommands(); + // Return the type of server connection managed by the socket + virtual ServerType getServerType() const; + // Whether or not the connection is active + virtual bool isConnected() const; + // Test whether the given command is a payload command + virtual bool isPayloadCommand( const QString &command ) const; + // Specify which accepted commands carry payload data for this connection + virtual void setAcceptedPayloadCommands( QStringList commandList ); + // Set whether we're sending pings or not + virtual void setSendPings( bool sendPings ) = 0; + // Write data to the socket without conversions + virtual qint64 writeBinaryData( const QByteArray& data ) = 0; + // Write data to the socket + virtual qint64 writeData( const QString& data ) = 0; + + + protected: // Protected properties + // List of accepted commands which carry a data payload + QStringList acceptedPayloadCommands_; + // State variable to detect if the connection is active + bool connected_; + // The type of server which we will connect to (notification,switchboard,...) + ServerType serverType_; + + signals: // Public signals + // Signal that the server has connected + void connected(); + // Signal that incoming data is ready to be parsed + void dataReceived( const QStringList &commandLine, const QByteArray &payloadData ); + // Signal that the server has disconnected + void disconnected(); + // Signal that an error has occurred + void error( QString error, MsnSocketBase::ErrorType type ); + // Signal that a ping to the connection has been sent + void pingSent(); + // Signal to send information to the main window's status bar + void statusMessage( QString message, bool isError ); + +}; + +#endif diff --git a/src/network/msnsockethttp.cpp b/src/network/msnsockethttp.cpp new file mode 100644 index 0000000..b015b1d --- /dev/null +++ b/src/network/msnsockethttp.cpp @@ -0,0 +1,857 @@ +/*************************************************************************** + msnsockethttp.cpp - description + ------------------- + begin : Thu Apr 4 2008 + copyright : (C) 2008 by Valerio Pilo + email : valerio@kmess.org + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "msnsockethttp.h" + +#include +#include "../kmessdebug.h" + +#include +#include +#include + +#include + + +#ifdef KMESSDEBUG_CONNECTION // Area-specific debug statements + #define KMESSDEBUG_CONNECTION_SOCKET_HTTP + #define KMESSDEBUG_CONNECTION_SOCKET_HTTP_DUMPS +#endif + + +/** + * Default Gateway address/port + * + * This define holds the default address which KMess uses to send HTTP + * messages. The port is usually 80. + */ +#define DEFAULT_GATEWAY_ADDRESS "gateway.messenger.hotmail.com" +#define DEFAULT_GATEWAY_PORT 80 + + + +/** + * @brief The constructor + * + * Initializes the HTTP interface, prepares the default HTTP header we'll use + * throughout the connection, and sets up the request/ping timer. + */ +MsnSocketHttp::MsnSocketHttp( ServerType serverType ) +: MsnSocketBase( serverType ) +, canSendRequests_( true ) +, sendPings_( false ) +{ + setObjectName( "MsnSocketHttp" ); + + // Create the http interface + http_ = new QHttp( this ); + + // Connect the socket's signals for parsing + connect( http_, SIGNAL( requestFinished(int,bool) ), + this, SLOT ( slotDataReceived(int,bool) ) ); + connect( http_, SIGNAL( sslErrors(const QList&) ), + this, SLOT ( slotError(const QList&) ) ); + // Connect the server request timer + connect( &pollingTimer_, SIGNAL( timeout() ), + this, SLOT ( slotQueryServer() ) ); + + // We need the timer to only fire once + pollingTimer_.setSingleShot( true ); + + // Set the default header values + requestHeader_.setValue ( "Accept", "*" "/" "*" ); + requestHeader_.setValue ( "User-Agent", "KMess/" KMESS_VERSION ); + requestHeader_.setValue ( "Connection", "Keep-Alive" ); + requestHeader_.setValue ( "Cache-Control", "no-cache" ); + requestHeader_.setContentType( "text/xml; charset=utf-8" ); + baseServerPath_ = QString ( "/gateway/gateway.dll?" ); + +#ifdef KMESSTEST + KMESS_ASSERT( http_ != 0 ); +#endif +} + + + +/** + * @brief The destructor + * + * Closes the connection, cleans up request queues, and deletes the interface. + */ +MsnSocketHttp::~MsnSocketHttp() +{ + // Disconnect from the server on exit + if( connected_ ) + { + disconnectFromServer(); + } + + // Stop the polling timer + pollingTimer_.stop(); + + // Clean up and delete the http interface + cleanUp(); + delete http_; + +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + kDebug() << "DESTROYED"; +#endif +} + + + +/** + * @brief Clean up the connection + * + * This internal method empties all queues and removes any pending connection - + * including any in-progress ones. + */ +void MsnSocketHttp::cleanUp() +{ + // Clear the request queues + qDeleteAll( queuedRequests_ ); + qDeleteAll( unansweredRequests_ ); + queuedRequests_ .clear(); + unansweredRequests_.clear(); + + // Abort any pending requests + if( connected_ ) + { + http_->abort(); + } +} + + + +/** + * @brief Connect to the given server + * + * The initial connection is always made through the main Gateway. + * The first server response usually carries the new gateway IP + * which will be used for the rest of the connection. + * + * @param server The server hostname or IP address. + * @param port The port to connect to. Not used - all of our + * traffic goes through the default port. + */ +void MsnSocketHttp::connectToServer( const QString& server, const quint16 port ) +{ + // We use our default HTTP port only + Q_UNUSED( port ); + + // When no server is specified, use the default msn one + QString desiredAddress; + if( server.isEmpty() ) + { + desiredAddress = "messenger.hotmail.com"; + } + else + { + desiredAddress = server; + } + +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + kDebug() << "Connecting to server at " << desiredAddress << ":" << DEFAULT_GATEWAY_PORT << "."; +#endif + + // Set up the gateway where to send our messages + setGateway( DEFAULT_GATEWAY_ADDRESS ); + + // Translate the server type to a 2-letter string to send in our requests + QString serverType; + switch( serverType_ ) + { + case SERVER_NOTIFICATION: serverType = "NS"; break; + case SERVER_SWITCHBOARD: serverType = "SB"; break; + default: + kFatal() << "Unknown type of server" << serverType_ << "!"; + return; + } + + // Set the parameters for the next request + nextRequestParameters_ = "Action=open&Server=" + serverType + "&IP=" + desiredAddress; + + // Flush any active or pending request if the interface is closing a previous connection + cleanUp(); + + // Set our internal state variables + connected_ = true; + canSendRequests_ = true; + + // Signal we're ready + emit connected(); + emit statusMessage( i18n( "Connected" ), false ); +} + + + +/** + * @brief Disconnect from the server + * + * This method closes the connection to the server and does some cleaning up. + * It empties all buffers, and resets the internal state. + * To avoid losing data, all pending requests are merged into a single huge + * request and sent altogether, before closing the connection. We won't + * receive responses for them; but at least we lose no outgoing data. + * + * @param isTransfer When set, a disconnected() signal won't be fired. + * This is used to handle transfers to another server + * without noticing a disconnect. + */ +void MsnSocketHttp::disconnectFromServer( bool isTransfer ) +{ + // Stop pinging + setSendPings( false ); + pollingTimer_.stop(); + + // Just clean up if we are disconnected already + if( ! connected_ ) + { + return; + } + + connected_ = false; + + // Make sure all remaining requests get sent, so that we don't lose messages. + // Even if we're disconnecting because of an error, send them anyway: we'll ignore the + // responses anyway. + if( ! queuedRequests_.isEmpty() ) + { +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + kDebug() << "Sending" << queuedRequests_.count() << "remaining requests before closing."; +#endif + + // Get the oldest message + Request *request = queuedRequests_.takeFirst(); + QByteArray data( request->data ); + + // Fill up the header details + QHttpRequestHeader header( requestHeader_ ); + header.setRequest( "POST", baseServerPath_ + request->requestParameters ); + + // Force merging all remaining messages into one (not deleting anything, that will + // be done automatically below) + foreach( Request *req, queuedRequests_ ) + { + // Avoid sending polling and special requests, which are not useful at this time + if( req->isPollingRequest || req->isSpecialRequest ) + { + continue; + } + + // Merge the data + data.append( req->data ); + } + + // Set up the size of the data in the header + header.setContentLength( data.size() ); + if( data.size() == 0 ) + { + header.removeValue( "Content-Type" ); + } + + // Send it + http_->request( header, data ); + + // Wait until this request has been sent, using a local loop. + QEventLoop loop( this ); + + // Block the timer signals before starting, we're just using it to timeout the request + pollingTimer_.blockSignals( true ); + pollingTimer_.start( 1000 ); + + while( http_->currentId() != 0 && pollingTimer_.isActive() ) + { + loop.processEvents(); + } + + // Enable back its signals now + pollingTimer_.blockSignals( false ); + +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + if( http_->currentId() != 0 && ! pollingTimer_.isActive() ) + { + kDebug() << "Could not send the last request within timeout."; +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP_DUMPS + kDebug() << "Full dump:" << endl + << header.toString() + << QString::fromUtf8( data ); +#endif + } +#endif + } + + // Close the connection + http_->close(); + + // Clear the queues, so pending messages will be ignored + cleanUp(); + + // Do not signal a disconnection when we are transferring to another gateway + if( isTransfer ) + { + return; + } + +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + kDebug() << "Emitting disconnection signal."; +#endif + + emit disconnected(); +} + + + +/** + * @brief Return the local IP address + * + * Using HTTP, we don't really care about our address. Not just that, + * we're probably behind a firewall, so finding out our real IP wouldn't + * help either. + * This method just returns "127.0.0.1". + * + * @returns The IP address the socket uses at the system. + */ +QString MsnSocketHttp::getLocalIp() const +{ + // We don't care about our own IP, return a generic one + return QHostAddress( QHostAddress::LocalHost ).toString(); +} + + + +/** + * @brief Sends the next queued request + * + * Data to send is stored in a queue of requests. This method just takes the + * oldest message and sends it. + */ +void MsnSocketHttp::sendNextRequest() +{ + // Verify if we can send another message, if there is any + if( ! connected_ || ! canSendRequests_ || queuedRequests_.isEmpty() ) + { + return; + } + + QTime now( QTime::currentTime() ); + + // Do not send messages too fast, or the server will ignore them + int elapsedMsecs = lastRequestTime_.msecsTo( now ); + if( elapsedMsecs <= 1000 ) + { +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + kDebug() << "Not sending another message in" << elapsedMsecs << "more milliseconds."; +#endif + + // The polling method will call this method back + pollingTimer_.start( 1000 - elapsedMsecs ); + return; + } + + // Lock the sending process: only one message at most can be 'on air' in any given moment + canSendRequests_ = false; + + // Get the oldest message + Request *request = queuedRequests_.takeFirst(); + QByteArray data( request->data ); + + // Fill up the header details + QHttpRequestHeader header( requestHeader_ ); + header.setRequest( "POST", baseServerPath_ + request->requestParameters ); + + // Polling requests are small and are sent all by theirselves + if( request->isPollingRequest ) + { + header.setRequest( "POST", baseServerPath_ + "Action=poll&SessionID=" + nextRequestId_ ); + header.setContentLength( 0 ); + header.removeValue( "Content-Type" ); + } + else // Normal requests can be packed up with multiple messages + { +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + int mergedRequests = 0; +#endif + // Merge together all the queued data to save bandwidth + foreach( Request *queuedRequest, queuedRequests_ ) + { + // Delete polling requests eventually in the list + if( queuedRequest->isPollingRequest ) + { + queuedRequests_.removeAll( queuedRequest ); + delete queuedRequest; + continue; + } + + // Stop merging requests if we get a special one + if( queuedRequest->isSpecialRequest ) + { + break; + } + +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + mergedRequests++; +#endif + + // Merge the data + data.append( queuedRequest->data ); + + // Remove the request from the queue, since it is going to be sent now + queuedRequests_.removeAll( queuedRequest ); + delete queuedRequest; + } +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + kDebug() << "Merged" << mergedRequests << "requests out from the queue."; +#endif + + // Set up the size of the data in the header + header.setContentLength( data.size() ); + if( data.size() == 0 ) + { + header.removeValue( "Content-Type" ); + } + } + + // Send it + int requestId = http_->request( header, data ); + +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + kDebug() << "Sent request" << requestId << "."; +#endif +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP_DUMPS + kDebug() << "Full dump:" << endl + << header.toString() + << QString::fromUtf8( request->data ); +#endif + + // Add the message to the list of messages without response + unansweredRequests_[ requestId ] = request; + + // Set the last request type + lastRequestWasPolling_ = request->isPollingRequest; + + // Stop polling, the response to this message will carry new messages along + pollingTimer_.stop(); + lastRequestTime_ = now; +} + + + +/** + * @brief Change the server connection gateway + * + * Set the address of the gateway, from this point on, all queued data will + * be sent to the new gateway. + * + * @param host The new gateway hostname or IP address. + */ +void MsnSocketHttp::setGateway( QString host ) +{ +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + kDebug() << "Using server at" << host << ":" << DEFAULT_GATEWAY_PORT << "as gateway."; +#endif + + // Set the host + http_->setHost( host ); + + // Save the server address in our requests' fields + requestHeader_.setValue( "Host", host ); + + // The setHost() call starts establishing the connection with a request, so + // while it's on air we can't send any other message + canSendRequests_ = false; + + gatewayAddress_ = host; +} + + + +/** + * @brief Set whether to send pings or not + * + * When sending pings, the application receives a periodic signal + * which is used to perform timed updates (like receiving display pics). + * + * @param sendPings True to send pings. + */ +void MsnSocketHttp::setSendPings( bool sendPings ) +{ + sendPings_ = sendPings; +} + + + +/** + * @brief Send a polling message to the server, to retrieve pending commands + * + * This method gets called every two seconds: each time it checks if there still are + * messages queued to be sent, and if not, it polls the gateway for new messages. + */ +void MsnSocketHttp::slotQueryServer() +{ + QDateTime now( QDateTime::currentDateTime() ); + + // Emit a "ping" signal every about 30 seconds, to let the app perform scheduled tasks + if( sendPings_ && ( ! lastPing_.isValid() || lastPing_.secsTo( now ) > 30 ) ) + { + lastPing_ = now; + emit pingSent(); + } + + // Don't send polling messages when: 1) we are disconnected; 2) a message is still being + // responded at (we'll receive new messages along with the response); 3) there still are + // messages to send (same reason as point 2). + if( ! connected_ || ! canSendRequests_ ) + { + return; + } + + // If the queue isn't empty send the next message + if( ! queuedRequests_.isEmpty() ) + { + sendNextRequest(); + return; + } + + // Prepare the new request + Request *newRequest = new Request(); + newRequest->data = QByteArray(); + newRequest->isPollingRequest = true; + + // Queue it + queuedRequests_.append( newRequest ); + +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + kDebug() << "Queued a new polling request"; +#endif + + // The last response had data; maybe there's more so keep checking + if( ! lastResponseWasEmpty_ ) + { + sendNextRequest(); + } + else + { + // Send a poll five seconds after the last command and ten after the last polling request + pollingTimer_.start( lastRequestWasPolling_ ? 10000 : 5000 ); + } +} + + + +/** + * @brief Read received data and pass along the contained commands + * + * This method parses the incoming raw data for the syntax used by the MSN protocol. + * Data arrives here only when it's been received completely. This may make it appear + * slower than usual TCP. + * Incoming messages contain all new messages from the server, so we need to bounce + * them back individually to MsnConnection. + * + * @param requestId ID of the request for which we've received a response + * @param isError True if it's an error response + */ +void MsnSocketHttp::slotDataReceived( int requestId, bool isError ) +{ + // Get the message header and contents + QByteArray rawResponseData = http_->readAll(); + QHttpResponseHeader rawResponseHeader = http_->lastResponse(); + bool hasMsnHeader = rawResponseHeader.hasKey( "X-MSN-Messenger" ); + + // Discard unwanted messages (after you disconnect, all pending messages become unwanted) + // Also ignore the first response, which is not valid and just used to establish the connection. + if( ! unansweredRequests_.contains( requestId ) || ! rawResponseHeader.isValid() ) + { + return; + } + + // Catch errors. Also, catch responses without the "X-MSN-Messenger" header: + // responses without it aren't coming from an MSN server, so maybe there is + // some HTTP redirection happening, like an authentication web page + if( isError || rawResponseHeader.statusCode() != 200 || ! hasMsnHeader ) + { + kWarning() << "Received a type" << rawResponseHeader.statusCode() << "response for request" << requestId << ":" << http_->errorString(); + kWarning() << "Error number:" << http_->error() << "is error?" << isError; +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP_DUMPS + kDebug() << "Full dump:" << endl + << rawResponseHeader.toString() + << QString::fromUtf8( rawResponseData ); +#endif + + // Report the right type of error + ErrorType errorType; + switch( http_->error() ) + { + case QHttp::NoError: + // Invalid MSN responses (web authentication redirects often replace the + // original response contents). Treat like a connection error. + case QHttp::HostNotFound: + case QHttp::ConnectionRefused: + errorType = ERROR_CONNECTING; + break; + + case QHttp::UnexpectedClose: + errorType = ERROR_DROP; + break; + + default: + errorType = ERROR_DATA; + break; + } + + // Ignore errors when disconnected: avoids duplicate error dialogs when two + // following requests are answered with an error. + if( connected_ ) + { + emit error( http_->errorString(), errorType ); + } + + // Allow the connection to continue working: if the error is fatal, the + // connection will be disconnected so no more messages will be sent + canSendRequests_ = true; + sendNextRequest(); + return; + } + + // Extract the MSN informative header from the response + QStringList msnInfo = rawResponseHeader.value( "X-MSN-Messenger" ).split( ";" ); + + // Delete the responded request from the list + Request *doneRequest = unansweredRequests_.take( requestId ); +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + kDebug() << "Received response to request" << requestId << "(" << doneRequest->data.simplified() << ")"; +#endif +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP_DUMPS + kDebug() << "Full dump:" << endl + << rawResponseHeader.toString() + << QString::fromUtf8( rawResponseData ); +#endif + delete doneRequest; + + // Extract the MSN session information from the headers + foreach( QString item, msnInfo ) + { + item = item.trimmed(); + int keyEnd = item.indexOf( '=' ); + QString key = item.left( keyEnd ); + QString value = item.mid ( keyEnd + 1 ); + + if( key == "SessionID" ) + { + // Every message has a different session ID, which needs to be sent along + // with the next message. + nextRequestId_ = value; + } + else if( key == "GW-IP" ) + { + // Change the gateway, if we didn't do it already + if( value != gatewayAddress_ ) + { +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + kDebug() << "Received gateway change command"; +#endif + setGateway( value ); + } + } + else if( key == "Session" ) + { + // Session close request. We've been kicked or the connection was closed by us first. + // Do nothing if we are disconnected already. + // TODO Behavior when receiving this command needs to be tested. + if( value == "close" && connected_ ) + { +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + kDebug() << "Received disconnection command"; +#endif + + cleanUp(); + disconnectFromServer(); + } + } + else + { +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + kDebug() << "Unknown attribute received in the MSN Header:" << item; +#endif + } + } + + lastResponseWasEmpty_ = true; + + // Extract all new messages from the response data + if( ! rawResponseData.isEmpty() ) + { + int startingPos = 0; + QStringList command; + QString commandLine; + int commandLineSize; + QByteArray payloadData; + + // Loop until the entire response has been parsed + while( true ) + { + if( startingPos >= rawResponseData.size() ) + { + break; + } + + // Retrieve the first available command from the response body + commandLineSize = rawResponseData.indexOf( "\r\n", startingPos ) - startingPos + 2; // Add the newline characters to the command size + commandLine = QString::fromUtf8( rawResponseData.mid( startingPos, commandLineSize ) ); + command = commandLine.trimmed().split(" "); + + // Stop if there's nothing more to parse (unlikely, most times the first + // 'if' statement above ends the loop) + if( command[0].isEmpty() ) + { + break; + } + + // See if it's a payload command, and extract the payload from the response data + if( isPayloadCommand( command[0] ) ) + { + int payloadSize = command[ command.count() - 1 ].toInt(); // Last arg is payload length. + payloadData = rawResponseData.mid( startingPos + commandLineSize, payloadSize ); + + startingPos += commandLineSize + payloadSize; + } + else // Not a payload message, just go on from right after the command + { + payloadData.clear(); + + startingPos += commandLineSize; + } + + // We've received a message, hand it over to MsnConnection for interpretation + emit dataReceived( command, payloadData ); + lastResponseWasEmpty_ = false; + } + } + + // Allow sending new messages, now that this has been done + canSendRequests_ = true; + + // Keep querying for more + slotQueryServer(); +} + + + +/** + * @brief Called when an SSL error happens + * + * Reports the error to MsnConnection. + * + * @param errorList List of SSL errors received. + */ +void MsnSocketHttp::slotError( const QList &errorList ) +{ + kWarning() << "Received SSL errors:" << errorList; + + emit error( i18n( "SSL Error" ), ERROR_DATA ); +} + + + +/** + * @brief Write data to the gateway without any conversion + * + * This method creates a new request and queues it to be sent when possible. + * See sendNextRequest() for more info on sending. + * + * @param data Contents of the message which will be sent + * @return -1 on error, or else always the exact size of the sent data. + */ +qint64 MsnSocketHttp::writeBinaryData( const QByteArray &data ) +{ + if( ! connected_ ) + { + kWarning() << "Attempted to write data to a disconnected interface, aborting."; + return -1; + } + + // Remove any polling messages from the queue, because the response to this + // new message will carry new messages too. +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + int deletedPollingRequests = 0; +#endif + foreach( Request *req, queuedRequests_ ) + { + if( req->isPollingRequest ) + { + queuedRequests_.removeAll( req ); + delete req; + +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + deletedPollingRequests++; +#endif + } + } +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + kDebug() << "Deleted" << deletedPollingRequests << "polling requests from the queue."; +#endif + + // Create the new request with the data + Request *newRequest = new Request(); + newRequest->data = data; + newRequest->isPollingRequest = false; + + // If there's some special parameters to be sent, override the default ones + if( ! nextRequestParameters_.isEmpty() ) + { + newRequest->isSpecialRequest = true; + newRequest->requestParameters = nextRequestParameters_; + // Clear up the special parameters for the next request + nextRequestParameters_ = QString(); + } + else // Send the default parameters + { + newRequest->isSpecialRequest = false; + newRequest->requestParameters = "SessionID=" + nextRequestId_; + } + + // Queue the new request + queuedRequests_.append( newRequest ); + +#ifdef KMESSDEBUG_CONNECTION_SOCKET_HTTP + kDebug() << "Queued a new request"; +#endif + + // Try to immediately send the new message, if possible + sendNextRequest(); + + return data.size(); +} + + + +/** + * @brief Write a string to the gateway + * + * This is a convenience method for writeBinaryData, which can be used to directly send a QString. + * + * @param data The message which will be sent + * @return -1 on error, or else always the exact size of the sent data. + */ +qint64 MsnSocketHttp::writeData( const QString &data ) +{ + return writeBinaryData( data.toUtf8() ); +} + + + +#include "msnsockethttp.moc" diff --git a/src/network/msnsockethttp.h b/src/network/msnsockethttp.h new file mode 100644 index 0000000..3099cee --- /dev/null +++ b/src/network/msnsockethttp.h @@ -0,0 +1,166 @@ +/*************************************************************************** + msnsockethttp.h - description + ------------------- + begin : Thu Apr 4 2008 + copyright : (C) 2008 by Valerio Pilo + email : valerio@kmess.org + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef MSNSOCKETHTTP_H +#define MSNSOCKETHTTP_H + +#include "msnsocketbase.h" + +#include +#include +#include +#include +#include + +// Forward declarations +class CurrentAccount; +class QSslError; + + + +/** + * @brief Basic I/O functionality for the MSN server protocol over a HTTP connection. + * + * This is a low-level class used used by MsnConnection. + * The class provides the following facilities: + * - HTTP-only connection to the MSN servers, with exclusive usage of ports 80 and 443. + * - sending/receiving raw protocol data. + * + * With HTTP the server has no way of contacting the client by itself. Everytime we + * send a request to the server (the "MSN HTTP Gateway"), it will send along with the answer + * a full list of messages which we didn't receive yet. So if we've got nothing to send, + * we're forced to periodically send 'poll' requests. These are bogus calls which exist only + * to allow the gateway to send any new message back. + * + * In any given moment, there may only be one active message. This means that if we send two + * subsequent requests, we will be disconnected immediately with a '400 Bad Request' response. + * Therefore, this class implements a 1-item-wide sending window. It's not necessary to apply + * it to receiving also, since the server just responds in order. + * + * Data from the server (the "HTTP Gateway") is handled by the slotDataReceived() slot. + * This method receives responses to HTTP requests made by the class; they contain a list of + * new undelivered messages. The slotDataReceived() method splits it up to individual commands + * and forwards the received commands to MsnConnection individually. + * + * Simple scheme of requests/responses: + * - Got a request to send. Send it immediately. + * - Received a response with messages. Have queued requests? + * - Yes. Send the next now. + * - No. Send a polling request now. + * - Received an empty response (without messages). Have queued requests? + * - Yes. Send the next now. + * - No. What kind of message was last sent? + * - A command. Send a poll in 5 seconds. + * - A poll. Send another poll in 10 seconds. + * + * @author Valerio Pilo + * @ingroup NetworkCore + */ +class MsnSocketHttp : public MsnSocketBase +{ + Q_OBJECT + + + public: // Public methods + // The constructor + MsnSocketHttp( ServerType serverType ); + // The destructor + ~MsnSocketHttp(); + // Connect to the given server + void connectToServer( const QString& server = QString(), const quint16 port = 0 ); + // Disconnect from the server + void disconnectFromServer( bool isTransfer = false ); + // Return the local IP address + QString getLocalIp() const; + // Set whether to send pings or not + void setSendPings( bool sendPings ); + // Write data to the socket without conversions + qint64 writeBinaryData( const QByteArray& data ); + // Write data to the socket + qint64 writeData( const QString& data ); + + + private: // Private methods +// // Clean up the connection + void cleanUp(); + // Sends the next queued request + void sendNextRequest(); + // Change the server connection gateway + void setGateway( QString host ); + + + private slots: // Private slots + // Send a polling message to the server, to retrieve pending commands + void slotQueryServer(); + // Read received data and pass along the contained commands + void slotDataReceived( int requestId, bool isError ); + // Called when an SSL error happens + void slotError( const QList &errorList ); + + + private: // Private structures + // Structure to hold all the useful data about an HTTP request + struct Request + { + // Request parameters to be sent along with the data + QString requestParameters; + // The actual contents of the request + QByteArray data; + // Whether or not this is a polling request + bool isPollingRequest; + // Whether or not this is a special request (if it has special request parameters) + bool isSpecialRequest; + }; + + + private: // Private attributes + // URL to specify in the queries + QString baseServerPath_; + // State variable to detect whether it's possible or not to send another request + bool canSendRequests_; + // Time at which the last request has been sent + QTime lastRequestTime_; + // Saved gateway address + QString gatewayAddress_; + // The HTTP interface + QHttp *http_; + // true if the last sent request was a polling message + bool lastRequestWasPolling_; + // true if the last received response didn't carry any new commands + bool lastResponseWasEmpty_; + // Time counter to regularly report pings to the application + QDateTime lastPing_; + // Next request's ID + QString nextRequestId_; + // Next request's parameters + QString nextRequestParameters_; + // A timer to regularly query the server for new commands + QTimer pollingTimer_; + // List of requests waiting to be sent + QList queuedRequests_; + // Container for never-changing request information + QHttpRequestHeader requestHeader_; + // Are we sending pings? + bool sendPings_; + // Hashmap of non answered requests + QHash unansweredRequests_; + +}; + + + +#endif diff --git a/src/network/msnsockettcp.cpp b/src/network/msnsockettcp.cpp new file mode 100644 index 0000000..e954b51 --- /dev/null +++ b/src/network/msnsockettcp.cpp @@ -0,0 +1,581 @@ +/*************************************************************************** + msnsockettcp.cpp - description + ------------------- + begin : Thu Jan 23 2003 + copyright : (C) 2003 by Mike K. Bennett + email : mkb137b@hotmail.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 License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "msnsockettcp.h" + +#include +#include +#include + +#include +#include + +#include "../currentaccount.h" +#include "../kmessdebug.h" + +#ifdef KMESSDEBUG_CONNECTION // Area-specific debug statements + #define KMESSDEBUG_CONNECTION_SOCKET_TCP +#endif + +/** + * @brief Login timer for DNS name resolution + * + * In milliseconds, the time to wait for the msn server name resolution to complete. + */ +#define LOGIN_TIMER_DNS_RESOLVE 10000 +/** + * @brief Login timer for actual server connection + * + * In milliseconds, the time to wait for the connection to be established. + */ +#define LOGIN_TIMER_CONNECTION 5000 + + + +/** + * @brief The constructor + * + * Initializes the sockets, buffers and ping timer. + */ +MsnSocketTcp::MsnSocketTcp( ServerType serverType ) +: MsnSocketBase( serverType ) +, missedPings_( 0 ) +, nextPayloadSize_( 0 ) +, sendPings_( false ) +{ + setObjectName( "MsnSocketTcp" ); + + // Create the socket + socket_ = new QTcpSocket( this ); + + // TODO: socket timeout settings.. + + // Forward the socket's raw event signals for further interpretation + connect( socket_, SIGNAL( connected() ), + this, SLOT ( slotConnected() ) ); + connect( socket_, SIGNAL( disconnected() ), + this, SLOT ( slotDisconnected() ) ); + // Connect the socket's signals to parse them internally + connect( socket_, SIGNAL( hostFound() ), + this, SLOT ( slotHostFound() ) ); + connect( socket_, SIGNAL( readyRead() ), + this, SLOT ( slotSocketDataReceived() ) ); + connect( socket_, SIGNAL( error(QAbstractSocket::SocketError) ), + this, SLOT ( slotSocketError(QAbstractSocket::SocketError) ) ); + + // Connect the ping timer to the sendPing slot + pingTimer_.stop(); + connect( &pingTimer_, SIGNAL( timeout() ), + this, SLOT ( slotSendPing() ) ); + + // Attach a timer to watch over the connection process + connectionTimer_.stop(); + connectionTimer_.setSingleShot( true ); + connect( &connectionTimer_, SIGNAL( timeout() ), + this, SLOT ( slotLoginFailed() ) ); + +#ifdef KMESSTEST + KMESS_ASSERT( socket_ != 0 ); +#endif +} + + + +/** + * @brief The destructor + * + * Closes the connection, and deletes the sockets. + */ +MsnSocketTcp::~MsnSocketTcp() +{ + // Disconnect from the server on exit + if( isConnected() ) + { + disconnectFromServer(); + } + + // Delete the socket + delete socket_; + +#ifdef KMESSDEBUG_CONNECTION_SOCKET_TCP + kDebug() << "DESTROYED"; +#endif +} + + + +/** + * @brief Connect to the given server via the socket + * + * The connection attempt is asynchronous. + * When the connection is made, connectionSuccess() is called, + * on error connectionFailed() is called. + * Connection timeouts are not detected here yet. + * + * @param server The server hostname or IP address. + * @param port The port to connect to. + */ +void MsnSocketTcp::connectToServer( const QString& server, const quint16 port ) +{ + quint16 desiredPort; + QString desiredServer; + + if( server.isEmpty() && port == 0 ) + { + desiredServer = "messenger.hotmail.com"; + desiredPort = 1863; + } + else + { + desiredServer = server; + desiredPort = port; + } + +#ifdef KMESSTEST + KMESS_ASSERT( desiredPort < 32768 ); +#endif + +#ifdef KMESSDEBUG_CONNECTION_SOCKET_TCP + kDebug() << "Connecting to server at " << desiredServer << ":" << desiredPort << "."; + kDebug() << "Socket state is " << socket_->state() << "."; +#endif + + // Flush any pending data if the socket is closing a previous connection + socket_->blockSignals( true ); + socket_->flush(); + + // Check if we are disconnected (the socket is idle) + if( socket_->state() != QAbstractSocket::UnconnectedState ) + { + kWarning() << "Socket is not disconnected. Already connected? The socket is in state" << socket_->state() << "."; + } + + // Prepare state vars for the new connection + connected_ = true; + nextPayloadSize_ = 0; + + // Close any previous connection (without firing disconnection signals) + socket_->close(); + + socket_->blockSignals( false ); + + // Start connecting + socket_->connectToHost( desiredServer, desiredPort ); + + // Start the connection timer to watch over the server name resolution + connectionTimer_.start( LOGIN_TIMER_DNS_RESOLVE ); +} + + + +/** + * @brief Disconnect from the server + * + * This function is called after closeConnection() + * It empties all buffers, and resets the sockets. + * + * @param isTransfer When set, a disconnected() signal won't be fired. + * This is used to handle transfers to another server + * without noticing a disconnect. + */ +void MsnSocketTcp::disconnectFromServer( bool isTransfer ) +{ + // Stop pinging + setSendPings( false ); + + // Stop the connection timer in case the user closed the connection during login + connectionTimer_.stop(); + +#ifdef KMESSDEBUG_CONNECTION_SOCKET_TCP + kDebug() << "Close the socket."; +#endif + + // Disconnect the socket + socket_->blockSignals( true ); + socket_->disconnectFromHost(); + + // Just clean up if we are disconnected already + if( ! connected_ ) + { + return; + } + + connected_ = false; + + // Do not signal a disconnection when we are transferring to another gateway + if( isTransfer ) + { + return; + } + +#ifdef KMESSDEBUG_CONNECTION_SOCKET_TCP + kDebug() << "Emitting disconnection signal."; +#endif + + emit disconnected(); +} + + + +/** + * @brief Return the local IP address of the socket. + * + * This is typically a LAN address, unless the system + * is directly connected to the Internet. + * + * @returns The IP address the socket uses at the system. + */ +QString MsnSocketTcp::getLocalIp() const +{ + QHostAddress address = socket_->localAddress(); + + return address.toString(); +} + + + +/** + * @brief Return whether or the socket is connected. + * + * @returns True when connected, false otherwise. + */ +bool MsnSocketTcp::isConnected() const +{ + return socket_->isValid() && socket_->state() == QAbstractSocket::ConnectedState; +} + + + +// Set whether we're sending pings or not (also resets ping timer) +void MsnSocketTcp::setSendPings( bool sendPings ) +{ + sendPings_ = sendPings; + missedPings_ = 0; + + pingReceived_ = true; + + if ( sendPings_ ) + { + slotSendPing(); + + pingTimer_.stop(); + pingTimer_.start( 30000 ); // 30s ping timer + } + else + { + pingTimer_.stop(); + } +} + + + +/** + * @brief Called when the connection has been successfully opened + */ +void MsnSocketTcp::slotConnected() +{ + // Stop the connection timer, we're done + connectionTimer_.stop(); + + // Notify about the operation result + emit connected(); +} + + + +/** + * @brief Called when the connection has been closed + * + * This method is not called when using disconnectFromServer(), because + * its signals were blocked. + */ +void MsnSocketTcp::slotDisconnected() +{ + // Stop the connection timer, in case the user had stopped the connection process + connectionTimer_.stop(); + + // Notify about what's happening + if( connected_ ) + { + emit disconnected(); + } +} + + + +/** + * @brief Called when the server's IP address has been found + * + * This method is used to prolong the connection timer, when the DNS query for + * the MSN Server has been successfully completed. + */ +void MsnSocketTcp::slotHostFound() +{ +#ifdef KMESSDEBUG_CONNECTION_SOCKET_TCP + kDebug() << "Server host address found."; +#endif + + // Restart the connection timer, to watch over the actual connection establishment. + connectionTimer_.stop(); + connectionTimer_.start( LOGIN_TIMER_CONNECTION ); +} + + + +/** + * @brief Called when the connection did not complete within a time limit + * + * This method is used to prolong the connection timer, when the DNS query for + * the MSN Server has been successfully completed. + */ +void MsnSocketTcp::slotLoginFailed() +{ +#ifdef KMESSDEBUG_CONNECTION_SOCKET_TCP + kDebug() << "Connection not successful within time limit."; +#endif + + // Bounce back to the unified error handler to give the user a message + emit error( i18n( "Connection time limit exceeded" ), MsnSocketBase::ERROR_CONNECTION_TIME_LIMIT ); +} + + + +// Send a "ping" to the server +void MsnSocketTcp::slotSendPing() +{ + QString message; + + if ( pingReceived_ == false ) + { + missedPings_ ++; + + if ( missedPings_ == 1 ) + { + message += i18n( "1 ping lost" ); + } + else + { + message += i18n( "%1 pings lost", missedPings_); + } + + emit statusMessage( message, false ); + } + else + { + emit statusMessage( i18n( "Connected" ), false ); + } + + pingReceived_ = false; + + // Assume the connection was lost when 3 pings are missed. + if ( missedPings_ == 3 ) + { + KMessageBox::error( 0, i18n("The connection to the server was lost.") ); + disconnectFromServer( false ); + } + + writeData( "PNG\r\n" ); + + emit pingSent(); +} + + + +/** + * @brief Called when data is received from the server. + * + * This method parses the incoming raw data for the syntax used by the MSN protocol. + * When a command is only partially received, it's buffered until the whole command is received by subsequent dataReceived() calls. + * + * Messages are then signalled back to MsnConnection which perform the parsing. + * Only PNG commands are handled internally. + */ +void MsnSocketTcp::slotSocketDataReceived() +{ + bool gotPayloadCommand = false; + bool hasCompletePayload = false; + QByteArray rawCommandLine; + QByteArray payloadData; + QStringList command; + QString commandLine; + + while( true ) + { + // Read the next command if we're not waiting for a payload. + if( nextPayloadSize_ == 0 ) + { + // Stop when socket didn't receive a full line yet (Qt does the buffering, thanks Qt4!) + if( ! socket_->canReadLine() ) + { + break; + } + + // Read the next line. + rawCommandLine = socket_->readLine(); + + // Parse the command, split in separate fields + commandLine = QString::fromUtf8( rawCommandLine.data(), rawCommandLine.size() ); + command = commandLine.trimmed().split(" "); + + // See if it's a payload command + gotPayloadCommand = ( isPayloadCommand( command[0] ) ); + if( gotPayloadCommand ) + { + nextPayloadSize_ = command[ command.count() - 1 ].toInt(); // Last arg is payload length. + nextPayloadCommand_ = command; + } + } + + + // See if we can read the payload + if( nextPayloadSize_ > 0 ) + { + // Check if the full payload is received. + // Otherwise, just wait until "dataReceived" is called again. + hasCompletePayload = ( socket_->bytesAvailable() >= nextPayloadSize_ ); + if( ! hasCompletePayload ) + { + break; + } + + // Full payload received. + payloadData = socket_->read( nextPayloadSize_ ); + + // Copy state from previous loop if needed. + if( ! gotPayloadCommand ) + { + gotPayloadCommand = true; + command = nextPayloadCommand_; + } + + // Reset state for next loop. + nextPayloadSize_ = 0; + } + + + // Response from the internal ping timer. + if( command[0] == "QNG" ) + { + pingReceived_ = true; + missedPings_ = 0; + } + else // All other data + { + emit dataReceived( command, payloadData ); + } + } +} + + + +/** + * @brief Detect socket errors + * + * Closes the connection, and displays + * the "could not connect to the MSN Messenger service." message box. + * + * @param errorCode The system error. + */ +void MsnSocketTcp::slotSocketError( QAbstractSocket::SocketError errorCode ) +{ +#ifdef KMESSDEBUG_CONNECTION_SOCKET_TCP + kWarning() << "Received error" << errorCode << "from the socket" + "(socket state=" << socket_->state() << ")."; +#endif + + ErrorType type; + + // Find the most appropriate kind of error to report + switch( errorCode ) + { + case QAbstractSocket::ConnectionRefusedError: + case QAbstractSocket::HostNotFoundError: + type = ERROR_CONNECTING; + break; + + case QAbstractSocket::RemoteHostClosedError: + case QAbstractSocket::NetworkError: + type = ERROR_DROP; + break; + + case QAbstractSocket::DatagramTooLargeError: + case QAbstractSocket::UnknownSocketError: + type = ERROR_DATA; + break; + + default: + type = ERROR_UNKNOWN; + break; + } + + // Ignore errors when disconnected: avoids duplicate error dialogs + if( connected_ ) + { + emit error( socket_->errorString(), type ); + } +} + + + +// Write data to the socket without conversions +qint64 MsnSocketTcp::writeBinaryData( const QByteArray &data ) +{ + qint64 noBytesWritten; + + if( ! isConnected() ) + { + kWarning() << "Attempted to write data to a disconnected socket, aborting."; + return -1; + } + + // Write to the socket + noBytesWritten = socket_->write( data.data(), data.size() ); + if ( noBytesWritten != data.size() ) + { + kWarning() << "Wanted to write " << data.size() << " bytes to the socket, wrote " << noBytesWritten << "."; + } + + return noBytesWritten; +} + + + +// Write data to the socket +qint64 MsnSocketTcp::writeData( const QString &data ) +{ + qint64 noBytesWritten; + + if( ! isConnected() ) + { + kWarning() << "Attempted to write data to a disconnected socket, aborting."; + return -1; + } + + // Write to the socket + QByteArray binData = data.toUtf8(); + noBytesWritten = socket_->write( binData.data(), binData.length() ); + if( noBytesWritten != binData.size() ) + { + kWarning() << "Wanted to write " << binData.size() << " bytes to the socket, wrote " << noBytesWritten << "."; + } + + return noBytesWritten; +} + + + +#include "msnsockettcp.moc" diff --git a/src/network/msnsockettcp.h b/src/network/msnsockettcp.h new file mode 100644 index 0000000..2bff65b --- /dev/null +++ b/src/network/msnsockettcp.h @@ -0,0 +1,117 @@ +/*************************************************************************** + msnsockettcp.h - description + ------------------- + begin : Thu Jan 23 2003 + copyright : (C) 2003 by Mike K. Bennett + email : mkb137b@hotmail.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 License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef MSNSOCKETTCP_H +#define MSNSOCKETTCP_H + +#include "msnsocketbase.h" + +#include +#include +#include + +// Forward declarations +class QTcpSocket; + + + +/** + * @brief Basic I/O functionality for the MSN server protocol over a TCP connection. + * + * The class provides the following facilities: + * - asynchronous connection to the MSN servers. + * - sending/receiving raw protocol data. + * - transparent reconstruction of fragmented received payloads. + * + * Data from the server is handled by the slotSocketDataReceived() slot. + * This method buffers and processes the data, until a complete command or payload message is received. + * Then a signal with the full message contents is forwarded to MsnConnection, which manages it. + * This class only handles the parsing of socket input, the handling the commands + * happens in the MsnConnection class. + * + * @author Mike K. Bennett + * @author Valerio Pilo + * @ingroup NetworkCore + */ +class MsnSocketTcp : public MsnSocketBase +{ + Q_OBJECT + + + public: // Public methods + // The constructor + MsnSocketTcp( ServerType serverType ); + // The destructor + virtual ~MsnSocketTcp(); + // Connect to the given server via the socket + void connectToServer( const QString& server = QString(), const quint16 port = 0 ); + // Disconnect from the server, if connected + void disconnectFromServer( bool isTransfer = false ); + // Get the IP address of this machine. + QString getLocalIp() const; + // Whether or not the class is connected + bool isConnected() const; + // Set whether we're sending pings or not (also resets ping timer) + void setSendPings( bool sendPings ); + // Write data to the socket without conversions + qint64 writeBinaryData(const QByteArray& data); + // Write data to the socket + qint64 writeData(const QString& data); + + + private slots: // Private slots + // Called when the connection has been successfully opened + void slotConnected(); + // Called when the connection has been closed + void slotDisconnected(); + // Called when the connection did not complete within a time limit + void slotLoginFailed(); + // Called when the server's IP address has been found + void slotHostFound(); + // Send a "ping" to the server + void slotSendPing(); + // Read data from the socket + void slotSocketDataReceived(); + // Detect socket errors + void slotSocketError( QAbstractSocket::SocketError errorCode ); + + + private: // Private attributes + // A timer to watch over the connection process + QTimer connectionTimer_; + // Number of errant pings since last good one + int missedPings_; + // The next payload command + QStringList nextPayloadCommand_; + // The size of the next expected payload message + int nextPayloadSize_; + // Whether the last ping send got a reply + bool pingReceived_; + // A timer to regularly "ping" the server + QTimer pingTimer_; + // Are we sending pings? + bool sendPings_; + // The socket + QTcpSocket *socket_; + // List of accepted commands which carry a data payload + QStringList acceptedPayloadCommands_; + +}; + + + +#endif diff --git a/src/network/msnswitchboardconnection.cpp b/src/network/msnswitchboardconnection.cpp index 191474c..935eaf0 100644 --- a/src/network/msnswitchboardconnection.cpp +++ b/src/network/msnswitchboardconnection.cpp @@ -26,22 +26,25 @@ #include "../kmessapplication.h" #include "../kmessdebug.h" #include "applications/applicationlist.h" +#include "soap/offlineimservice.h" #include "chatinformation.h" #include "chatmessage.h" #include "mimemessage.h" #include "msnnotificationconnection.h" +#include "multipacketmessage.h" #include "p2pmessage.h" #include "config-kmess.h" #include #include -#include #include #include #include +#include + #ifdef KMESSDEBUG_SWITCHBOARD #define KMESSDEBUG_SWITCHBOARD_GENERAL #define KMESSDEBUG_SWITCHBOARD_P2P @@ -55,17 +58,19 @@ // The constructor MsnSwitchboardConnection::MsnSwitchboardConnection() - : MsnConnection(), + : MsnConnection( MsnSocketBase::SERVER_SWITCHBOARD ), abortingApplications_(false), acksPending_(0), autoDeleteLater_(false), backgroundConnection_(true), closingConnection_(false), connectionState_(SB_DISCONNECTED), + currentAccount_(0), initialized_(false), userStartedChat_(false), keepAliveTimer_(0), - keepAlivesRemaining_(0) + keepAlivesRemaining_(0), + offlineImService_(0) { setObjectName("MsnSwitchboardConnection"); } @@ -74,22 +79,28 @@ MsnSwitchboardConnection::MsnSwitchboardConnection() // The copy constructor MsnSwitchboardConnection::MsnSwitchboardConnection( const MsnSwitchboardConnection &other ) - : MsnConnection(), + : MsnConnection( MsnSocketBase::SERVER_SWITCHBOARD ), abortingApplications_(false), acksPending_(0), autoDeleteLater_( other.autoDeleteLater_ ), - chatId_( other.chatId_ ), backgroundConnection_( other.backgroundConnection_ ), + chatId_( other.chatId_ ), closingConnection_(false), connectionState_(SB_DISCONNECTED), + currentAccount_( other.currentAccount_ ), firstContact_( other.firstContact_ ), initialized_(false), lastContact_( other.lastContact_ ), pendingMessages_( other.pendingMessages_ ), userStartedChat_( other.userStartedChat_ ), keepAliveTimer_(0), - keepAlivesRemaining_(0) + keepAlivesRemaining_(0), + offlineImService_(0) { +#ifdef KMESSDEBUG_SWITCHBOARD_GENERAL + kDebug() << "entering copy constructor"; +#endif + setObjectName("MsnSwitchboardConnection"); } @@ -105,6 +116,9 @@ MsnSwitchboardConnection::~MsnSwitchboardConnection() // Close the connection closeConnection(); + // If present, destroy the offline message sending service + delete offlineImService_; + emit deleteMe( this ); #ifdef KMESSDEBUG_SWITCHBOARD_GENERAL @@ -254,10 +268,9 @@ void MsnSwitchboardConnection::closeConnection() if( isConnected() ) { #ifdef KMESSDEBUG_SWITCHBOARD_GENERAL - kDebug() << "Still connected, sending BYE."; + kDebug() << "Still connected, closing the connection."; #endif - // Send a "bye" - sendCommand( "BYE", "\r\n"); + disconnectFromServer(); } @@ -367,6 +380,17 @@ void MsnSwitchboardConnection::contactJoined(const QString& handle, const QStrin contactsInChat_.append( handle ); } + // Stop the keep-alive timer when initiating a group chat + if( keepAliveTimer_ && contactsInChat_.count() > 1 ) + { +#ifdef KMESSDEBUG_SWITCHBOARD_KEEPALIVE + kDebug() << "Starting group chat: stopping keepalive session." << endl; +#endif + keepAliveTimer_->stop(); + delete keepAliveTimer_; + keepAliveTimer_ = 0; + } + // Indicate the contact is active in this session. ContactBase *contact = currentAccount_->getContactByHandle(handle); if( contact == 0 ) @@ -410,6 +434,12 @@ void MsnSwitchboardConnection::contactLeft(const QString& handle) kDebug() << "emitting that '" << handle << "' left chat."; #endif + // Start the keep-alive timer again when ending a group chat + if( contactsInChat_.count() == 1 ) + { + activity(); + } + // Indicate the contact is not active anymore in this session. ContactBase *contact = currentAccount_->getContactByHandle(handle); if(! KMESS_NULL(contact)) @@ -464,6 +494,7 @@ QString MsnSwitchboardConnection::convertHtmlColorToMsnColor(const QString &colo #ifdef KMESSTEST KMESS_ASSERT( color.length() == 7 ); #endif + // Get the color components QString red = color.mid(1, 2); QString green = color.mid(3, 2); @@ -493,26 +524,30 @@ QString MsnSwitchboardConnection::convertHtmlColorToMsnColor(const QString &colo // Convert and msn format color (BBGGRR) to an html format (#RRGGBB) color QString MsnSwitchboardConnection::convertMsnColorToHtmlColor(QString color) const { + // If the color isn't present, use black if( color == "0" ) { return "#000000"; } - else + + // Remove any character apart from the last six (stripping any initial '#' character) + if( color.length() > 6 ) { - // Fill the color out to six characters - while ( color.length() < 6 ) - { - color = "0" + color; - } - - // Get the color components - QString blue = color.mid(0, 2); - QString green = color.mid(2, 2); - QString red = color.mid(4, 2); - - // Reassemble the components - return "#" + red + green + blue; + color = color.right( 6 ); } + // Fill the color out to six characters + else if( color.length() < 6 ) + { + color.rightJustified( 6, '0' ); + } + + // Get the color components + QString blue = color.mid( 0, 2 ); + QString green = color.mid( 2, 2 ); + QString red = color.mid( 4, 2 ); + + // Reassemble the components + return "#" + red + green + blue; } @@ -600,7 +635,7 @@ void MsnSwitchboardConnection::gotIro(const QStringList& command) QString friendlyName = QUrl::fromPercentEncoding( command[5].toUtf8() ); uint capabilities = command[6].toUInt(); - QString altFriendlyName = currentAccount_->getContactFriendlyNameByHandle( handle ); + QString altFriendlyName = currentAccount_->getContactFriendlyNameByHandle( handle, STRING_ORIGINAL ); if( ! altFriendlyName.isEmpty() ) { friendlyName = altFriendlyName; @@ -618,7 +653,7 @@ void MsnSwitchboardConnection::gotJoi(const QStringList& command) QString friendlyName = QUrl::fromPercentEncoding( command[2].toUtf8() ); uint capabilities = command[3].toUInt(); - QString altFriendlyName = currentAccount_->getContactFriendlyNameByHandle( handle ); + QString altFriendlyName = currentAccount_->getContactFriendlyNameByHandle( handle, STRING_ORIGINAL ); if( ! altFriendlyName.isEmpty() ) { friendlyName = altFriendlyName; @@ -756,15 +791,23 @@ bool MsnSwitchboardConnection::initialize( QString handle ) kDebug() << "already initialized!"; return false; } - if ( !MsnConnection::initialize() ) + if ( ! MsnConnection::initialize() ) { kDebug() << "Couldn't initialize base class."; return false; } - initialized_ = true; + currentAccount_ = CurrentAccount::instance(); + + // Determine which payload commands can be received by the Switchboard Connection + QStringList payloadCommands; + payloadCommands << "MSG" // Chat message + ; + setAcceptedPayloadCommands( payloadCommands ); + firstContact_ = lastContact_ = handle; + initialized_ = true; return true; } @@ -930,7 +973,7 @@ void MsnSwitchboardConnection::parseCommand(const QStringList& command) else if ( command[0] == "282" ) { // Got it once when I sent a bad P2P message or something. - kDebug() << "got unknown 282 error response."; + kWarning() << "got the mysterious 282 error response (contacts=" << contactsInChat_ << ")."; } else if ( command[0] == "911" ) { @@ -1173,7 +1216,7 @@ void MsnSwitchboardConnection::parseMimeMessage(const QStringList& command, cons else { // get name from contact - friendlyName = contact->getFriendlyName(); + friendlyName = contact->getFriendlyName( STRING_ORIGINAL ); contactPicture = contact->getContactPicturePath(); } @@ -1374,6 +1417,8 @@ void MsnSwitchboardConnection::sendApplicationMessage( const MimeMessage &messag */ void MsnSwitchboardConnection::sendChatMessage(QString text) { + int maxSendableSingleMessageLength = 1400; + if ( currentAccount_ == 0 ) { kWarning() << "currentAccount_ is null!"; @@ -1476,14 +1521,10 @@ void MsnSwitchboardConnection::sendChatMessage(QString text) // Then send the real text message - // Get parameters + // Get the formatting properties and convert them to MSN's IM format QFont font = currentAccount_->getFont(); - QString fontFamily = font.family(); - QString color = currentAccount_->getFontColor(); - - // Convert data - fontFamily = QUrl::toPercentEncoding( fontFamily ); - convertHtmlColorToMsnColor( color ); + QString fontFamily = QUrl::toPercentEncoding( font.family() ); + QString color = convertHtmlColorToMsnColor( currentAccount_->getFontColor() ); // Determine effects QString effects = ""; @@ -1502,7 +1543,69 @@ void MsnSwitchboardConnection::sendChatMessage(QString text) message.setBody(text); // Send the message - sendMimeMessageWhenReady(ACK_NAK_ONLY, message); + int bodyLength = text.toUtf8().length(); + if( bodyLength > maxSendableSingleMessageLength ) + { + // Check if the remote clients support the recieving of huge messages. + ContactBase *contact; + QString handle; + bool capable = true; + foreach( handle, contactsInChat_ ) + { + contact = currentAccount_->getContactByHandle( handle ); + if( ! contact->hasCapability( ContactBase::MSN_CAP_MULTI_PACKET ) ) + { + capable = false; + break; + } + } + + if( capable ) + { + // Create a multipacket message + MultiPacketMessage multiMessage( message ); + sendMimeMessageWhenReady( ACK_NAK_ONLY, multiMessage ); + } + else + { + // Split the huge message and send all parts + int pos = 0; + int prevPos = 0; + QString messagePart; + QString body = message.getBody(); + + int parts = (int) ceil( ( (float) bodyLength / (float) maxSendableSingleMessageLength ) ); + + for( int i = 0; i < parts - 1; i++ ) + { + prevPos = pos; + pos += maxSendableSingleMessageLength; + + // search backwards from the new split position. + int spacePos = body.lastIndexOf( " ", pos ); + + messagePart = body.mid( prevPos, pos - prevPos ); + + if( spacePos > prevPos ) + { + // use that one! + pos++; + } + + // send messagePart + sendMimeMessageWhenReady( ACK_NAK_ONLY, message ); + } + + messagePart = body.mid( pos, body.length() - pos ); + + sendMimeMessageWhenReady( ACK_NAK_ONLY, message ); + } + } + else + { + // Send the simple MimeMessage + sendMimeMessageWhenReady( ACK_NAK_ONLY, message ); + } // Signal the presence of activity on this switchboard activity(); @@ -1510,6 +1613,43 @@ void MsnSwitchboardConnection::sendChatMessage(QString text) +// Send a ink to the contact(s) +void MsnSwitchboardConnection::sendInk( const QByteArray& ink ) +{ + bool capable = true; + QString handle; + ContactBase *contact; + + foreach( handle, contactsInChat_ ) + { + contact = currentAccount_->getContactByHandle( handle ); + + if( ! contact->hasCapability( ContactBase::MSN_CAP_MULTI_PACKET ) || + ! contact->hasCapability( ContactBase::MSN_CAP_INK_GIF) ) + { + capable = false; + break; + } + } + + if( ! capable ) + { + return; + } + + // Create the message for ink + MimeMessage message; + message.addField("MIME-Version", "1.0"); + message.addField("Content-Type", "image/gif"); + message.setBody( "base64:" + QString( ink.toBase64() ) ); + MultiPacketMessage multiMessage( message ); + + // Send the ink packet + sendMimeMessageWhenReady( ACK_NAK_ONLY, multiMessage ); +} + + + // Send a client caps message to the contacts void MsnSwitchboardConnection::sendClientCaps() { @@ -1559,8 +1699,10 @@ void MsnSwitchboardConnection::sendKeepAlive() if( contactsInChat_.isEmpty() ) { #ifdef KMESSDEBUG_SWITCHBOARD_KEEPALIVE - kDebug() << "Not sending keep alive, no contacts in chat."; + kDebug() << "Stopping keep alive, no contacts in chat."; #endif + + keepAliveTimer_->stop(); return; } @@ -1578,6 +1720,16 @@ void MsnSwitchboardConnection::sendKeepAlive() +void MsnSwitchboardConnection::sendMimeMessageWhenReady( AckType ackType, MultiPacketMessage &message ) +{ + while( ! message.isComplete() ) + { + sendMimeMessageWhenReady( ackType, message.getNextPart() ); + } +} + + + // Send a message to the contact(s), or leave it pending until a connection is restored void MsnSwitchboardConnection::sendMimeMessageWhenReady(AckType ackType, const MimeMessage &message) { @@ -1653,6 +1805,53 @@ void MsnSwitchboardConnection::sendMimeMessageWhenReady(AckType ackType, const M } else { + // Send offline messages if the contact is not online (and the switchboard isn't open) + if( connectionState_ == SB_DISCONNECTED && ! lastContact_.isEmpty() ) + { + bool isPlainText = message.getValue( "Content-Type" ).startsWith( "text/plain" ); + ContactBase *contact = currentAccount_->getContactByHandle( lastContact_ ); + + // If the message contains text, and the user's status is invisible OR the contact is not connected, send an + // offline message. + if( ( contact && contact->isOffline() ) || currentAccount_->getStatus() == STATUS_INVISIBLE ) + { + // This is required to avoid trying to send notification messages (nudges) or other non-text messages + if( ! isPlainText ) + { +#ifdef KMESSDEBUG_SWITCHBOARD_GENERAL + kDebug() << "Ignoring message of type" << message.getValue( "Content-Type" ) << "within OIM chat."; +#endif + return; + } + +#ifdef KMESSDEBUG_SWITCHBOARD_GENERAL + kDebug() << "Sending offline message..."; +#endif + // Only load the OIM service on demand + if( offlineImService_ == 0 ) + { + offlineImService_ = new OfflineImService( this ); + + connect( offlineImService_, SIGNAL( sendMessageFailed( QString, QString ) ), + this , SLOT ( slotSendOfflineImFailed( QString, QString ))); + } + + // Send the message (only the text contained in the body) + offlineImService_->sendMessage( lastContact_, message.getBody() ); + return; + } + } + + // Return to avoid problems with requesting of one new switchboard + // and connection state change + if( currentAccount_->getStatus() == STATUS_INVISIBLE ) + { +#ifdef KMESSDEBUG_SWITCHBOARD_GENERAL + kDebug() << "Don't request new switchboard"; +#endif + return; + } + #ifdef KMESSDEBUG_SWITCHBOARD_GENERAL kDebug() << "Connection is closed, requesting a new chat from the notification server..."; #endif @@ -1723,6 +1922,18 @@ void MsnSwitchboardConnection::sendMimeMessageWhenReady(AckType ackType, const M +// There was a problem with sending of oims +void MsnSwitchboardConnection::slotSendOfflineImFailed( QString to, QString message ) +{ + emit chatMessage( ChatMessage( ChatMessage::TYPE_SYSTEM, + ChatMessage::CONTENT_SYSTEM_ERROR, + false, + i18n( "The message \"%1\" was not received!", message ), + to ) ); +} + + + // Send messages that weren't sent because a contact had to be re-called void MsnSwitchboardConnection::sendPendingMessages() { @@ -1862,8 +2073,8 @@ void MsnSwitchboardConnection::slotApplicationsAborted(const QString &handle) -// The socket connected, so send the version command. -void MsnSwitchboardConnection::slotSocketConnected() +// The connection was established, so send the version command. +void MsnSwitchboardConnection::slotConnected() { #ifdef KMESSDEBUG_SWITCHBOARD_GENERAL kDebug() << "Connected to server, sending authentication."; @@ -1888,6 +2099,25 @@ void MsnSwitchboardConnection::slotSocketConnected() +/** + * @brief Shows error dialog boxes + * + * All switchboard errors are annoying and mostly useless. So we ignore them. All of them. + * + * @param error The error reason or explanation. Ignored. + * @param type The type of error. Ignored. + */ +void MsnSwitchboardConnection::slotError( QString error, MsnSocketBase::ErrorType type ) +{ + Q_UNUSED( error ); + Q_UNUSED( type ); + + // Always report errors to console + kWarning() << "KMess Error (type=" << type << " contacts=" << contactsInChat_ << "):" << error << "!"; +} + + + // Send a nudge to a contact void MsnSwitchboardConnection::sendNudge() { @@ -1966,7 +2196,10 @@ void MsnSwitchboardConnection::start( const ChatInformation &chatInfo ) // lastContact_ gets set even when making offline connections, so isExclusiveChatWithContact() returns true; // otherwise a chat window would be spawned for every offline message. + userStartedChat_ = chatInfo.getUserStartedChat(); backgroundConnection_ = false; + + emit requestChatWindow( this ); return; } diff --git a/src/network/msnswitchboardconnection.h b/src/network/msnswitchboardconnection.h index 8bd2e55..f65ae61 100644 --- a/src/network/msnswitchboardconnection.h +++ b/src/network/msnswitchboardconnection.h @@ -21,9 +21,8 @@ #include "msnconnection.h" #include "mimemessage.h" -#include +#include #include -#include #include @@ -35,6 +34,7 @@ class MsnObject; class P2PMessage; class ContactBase; class ChatMessage; +class OfflineImService; class QFont; class QTimer; @@ -53,6 +53,7 @@ class MsnSwitchboardConnection : public MsnConnection friend class KMessTest; + public: // The supported applications enum ApplicationType { GNOMEMEETING, FILETRANSFER, MSNREMOTEDESKTOP, VOICECONVERSATION }; @@ -95,23 +96,33 @@ class MsnSwitchboardConnection : public MsnConnection // Deliver a message for an Application object. void sendApplicationMessage( const MimeMessage &message ); - public slots: // Public slots + + public slots: // Send a message to the contact(s) void sendChatMessage(QString text); + // Send a ink to the contact(s) + void sendInk( const QByteArray& ink ); // Send a "ping" to avoid MSN closing the connection void sendKeepAlive(); // The user is typing so send a typing message void sendTypingMessage(); - protected slots: // Protected slots + + protected slots: // The socket connected, so send the version command. - virtual void slotSocketConnected(); + virtual void slotConnected(); + // Shows error dialog boxes + void slotError( QString error, MsnSocketBase::ErrorType type ); + private slots: // An ApplicationList object indicated it aborted all it's applications. void slotApplicationsAborted(const QString &contact); // The connection has gone inactive, close it void timeoutConnection(); + // There was a problem with sending of oims + void slotSendOfflineImFailed( QString to, QString message ); + private: // private structs struct UnAckedMessage @@ -121,6 +132,7 @@ class MsnSwitchboardConnection : public MsnConnection MimeMessage message; }; + private: // Private methods // Initialize or restart the last activity timer, for keep alive messages void activity(); @@ -170,27 +182,16 @@ class MsnSwitchboardConnection : public MsnConnection void sendClientCaps(); // Send a message to the contact(s), or leave it pending until a connection is restored void sendMimeMessageWhenReady(AckType ackType, const MimeMessage &message); + // Send a multipacket message to contact(s), or leave it pending until a connection is restored + void sendMimeMessageWhenReady( AckType ackType, MultiPacketMessage &message ); // Send messages that weren't sent because a contact had to be re-called void sendPendingMessages(); // Store a message for later acknowledgement void storeMessageForAcknowledgement(int ack, AckType ackType, const MimeMessage& message); + private: // Private attributes - // Whether this object is aborting all it's applications - bool abortingApplications_; - // The number of ACK messages pending - int acksPending_; - // The authorization used to connect to the switchboard server - QString authorization_; - // Whether this object should be deleted after finishing closeConnectionLater() - bool autoDeleteLater_; - // The id of the chat, used for authenticating a contact-started chat - QString chatId_; - // Whether this switchboard is connected to a chatwindow or it's a background connection. - bool backgroundConnection_; - // Whether this object is closing it's connection using closeConnectionLater() - bool closingConnection_; - // Current status of connection to the switchboard server + enum ConnectionState { SB_DISCONNECTED, @@ -200,9 +201,28 @@ class MsnSwitchboardConnection : public MsnConnection SB_CHAT_STARTED, SB_CONTACTS_LEFT, SB_REQUESTING_CHAT - } connectionState_; + }; + + // Whether this object is aborting all it's applications + bool abortingApplications_; + // The number of ACK messages pending + int acksPending_; + // The authorization used to connect to the switchboard server + QString authorization_; + // Whether this object should be deleted after finishing closeConnectionLater() + bool autoDeleteLater_; + // Whether this switchboard is connected to a chatwindow or it's a background connection. + bool backgroundConnection_; + // The id of the chat, used for authenticating a contact-started chat + QString chatId_; + // Whether this object is closing it's connection using closeConnectionLater() + bool closingConnection_; + // Current status of connection to the switchboard server + ConnectionState connectionState_; // A list of the contacts in the chat QStringList contactsInChat_; + // A pointer to the shared current account singleton. + CurrentAccount *currentAccount_; // The last contact that was participating to the chat. QString firstContact_; // Whether or not the object has been initialized @@ -224,8 +244,11 @@ class MsnSwitchboardConnection : public MsnConnection QTimer *keepAliveTimer_; // Timer to keep track of last activities, to manage keep alive messages. int keepAlivesRemaining_; + // Service to send offline messages + OfflineImService *offlineImService_; - signals: // Public signals + + signals: // Signal that a contact joined (or was already in) the chat void contactJoinedChat( QString handle, QString friendlyName ); // Signal that a contact left the chat @@ -254,6 +277,9 @@ class MsnSwitchboardConnection : public MsnConnection void sendingFailed( QString handle ); // The switchboard is closing, remove it from the Chat Master references void deleteMe( MsnSwitchboardConnection *object ); + }; + + #endif diff --git a/src/network/multipacketmessage.cpp b/src/network/multipacketmessage.cpp index 0aa74c1..de856da 100644 --- a/src/network/multipacketmessage.cpp +++ b/src/network/multipacketmessage.cpp @@ -17,7 +17,9 @@ #include "multipacketmessage.h" +#include "../utils/kmessshared.h" #include "../kmessdebug.h" +#include // Many thanks to Siebe Tolsma for the following documentation: @@ -37,6 +39,27 @@ MultiPacketMessage::MultiPacketMessage() +// The constructor for sending huge messages +MultiPacketMessage::MultiPacketMessage( const MimeMessage& message ) + : lastChunk_(0) +{ + // Max single MimeMessage length + int maxSendableMessageLength = 1400; + + // Grep body of MimeMessage + messageText_ = message.getBody(); + + // Set the MimeMessage and the number of chunks ( round up ) + result_ = message; + float a = (float) messageText_.toUtf8().length() / (float) maxSendableMessageLength; + chunks_ = (int) ceil( a ); + + // Set message guid + messageId_ = KMessShared::generateGUID(); +} + + + // The destructor MultiPacketMessage::~MultiPacketMessage() { @@ -170,10 +193,52 @@ const MimeMessage &MultiPacketMessage::getMessage() const -// Return whether the full message is received +// Return whether the full message is received/sended bool MultiPacketMessage::isComplete() const { return (chunks_ > 0 && lastChunk_ == chunks_); } + +// Get the next part of one multipacket message +const MimeMessage& MultiPacketMessage::getNextPart() +{ + // Max single MimeMessage length + int maxSendableMessageLength = 1400; + + if( lastChunk_ == 0 ) + { + // If it's the first chunk add the chunks number on MimeMessage + result_.addField( "Chunks", QString::number( chunks_, 10 ) ); + } + else + { + // Else add only chunk field + result_.clearFields(); + result_.addField( "Chunk", QString::number( lastChunk_, 10 ) ); + } + + //Add the GUID + result_.addField( "Message-ID", messageId_ ); + + // Add the body + if( lastChunk_ == chunks_ - 1 ) + { + result_.setBody( messageText_.mid( lastChunk_ * maxSendableMessageLength, + messageText_.length() - lastChunk_ * maxSendableMessageLength ) ); + } + else + { + result_.setBody( messageText_.mid( lastChunk_ * maxSendableMessageLength, maxSendableMessageLength ) ); + } + + // Increment lastChunk + lastChunk_++; + +#ifdef KMESSDEBUG_MULTIPACKETMESSAGE + kDebug() << "Sending part: " << lastChunk_; +#endif + + return result_; +} diff --git a/src/network/multipacketmessage.h b/src/network/multipacketmessage.h index 3e0c404..bc64cbe 100644 --- a/src/network/multipacketmessage.h +++ b/src/network/multipacketmessage.h @@ -21,12 +21,11 @@ #include "mimemessage.h" #include -#include - /** * @author Diederik van der Boor + * @ingroup NetworkCore */ class MultiPacketMessage { @@ -34,6 +33,8 @@ class MultiPacketMessage // The constructor MultiPacketMessage(); + // The constructor for sending huge messages + MultiPacketMessage( const MimeMessage &message ); // The destructor virtual ~MultiPacketMessage(); @@ -42,20 +43,24 @@ class MultiPacketMessage void addChunk( const MimeMessage &message ); // Returh the complete message const MimeMessage & getMessage() const; - // Return whether the full message is received + // Return whether the full message is received/sended bool isComplete() const; + //Return the next part of multipacket message + const MimeMessage & getNextPart(); private: // The buffer for the data QBuffer buffer_; // The number of chunks the message consists of int chunks_; - // The last chunk received. + // The last chunk received/sended int lastChunk_; // The message ID QString messageId_; - // The result message + // The current/result message MimeMessage result_; + // The message + QString messageText_; }; diff --git a/src/network/p2pmessage.cpp b/src/network/p2pmessage.cpp index 92f8aa1..786dd3f 100644 --- a/src/network/p2pmessage.cpp +++ b/src/network/p2pmessage.cpp @@ -323,7 +323,7 @@ void P2PMessage::insertNonce(QByteArray &buffer, const QString &nonce, const int }; for(int i = 0; i < 16; i++) { - buffer[offset + i] = fixedNonce.mid(noncePos[i] * 2, 2).toUInt(0, 16); + buffer[offset + i] = (char)( fixedNonce.mid(noncePos[i] * 2, 2).toUInt(0, 16) ); } } diff --git a/src/network/soap/httpsoapconnection.cpp b/src/network/soap/httpsoapconnection.cpp index cdf3774..12b3dbc 100644 --- a/src/network/soap/httpsoapconnection.cpp +++ b/src/network/soap/httpsoapconnection.cpp @@ -17,19 +17,18 @@ #include "httpsoapconnection.h" +#include "../../utils/xmlfunctions.h" +#include "../../kmessdebug.h" +#include "../mimemessage.h" +#include "soapmessage.h" +#include "config-kmess.h" + #include #include #include #include -#include "../../utils/xmlfunctions.h" -#include "../../kmessdebug.h" -#include "../mimemessage.h" -#include "soapmessage.h" - -#include "config-kmess.h" - #ifdef KMESSDEBUG_HTTPSOAPCONNECTION #define KMESSDEBUG_HTTPSOAPCONNECTION_GENERAL @@ -37,6 +36,11 @@ #endif +#define XMLNS_XSD "http://www.w3.org/2001/XMLSchema" +#define XMLNS_XSI "http://www.w3.org/2001/XMLSchema-instance" +#define XMLNS_SOAP "http://schemas.xmlsoap.org/soap/envelope/" + + /** * @brief The constructor @@ -46,10 +50,10 @@ * * @param endpoint The endpoint of the webservice, should be a http:// or https:// URL. * @param parent The Qt parent object. The object is deleted when the parent is deleted. - * @param name The Qt object name, for debugging signals. */ HttpSoapConnection::HttpSoapConnection( const QString &endpoint, QObject *parent ) : QObject( parent ) + , currentRequestId_( 0 ) { #ifdef KMESSDEBUG_HTTPSOAPCONNECTION_GENERAL kDebug() << "CREATED. (endpoint=" << endpoint << ")"; @@ -93,6 +97,23 @@ HttpSoapConnection::~HttpSoapConnection() +/** + * @brief Delete any user data associated with the request. + * + * This method is called when a request is completely handled. + * Overwrite this method to delete any call-specific data stored for the request ID. + * + * @param requestId ID of the request, as returned by sendRequest(). + */ +void HttpSoapConnection::clearRequestData( int requestId ) +{ + Q_UNUSED( requestId ); + // Empty default. + // can be overwritten; +} + + + /** * @brief Close the connection. */ @@ -120,6 +141,25 @@ QString HttpSoapConnection::escapeString( QString value ) const +/** + * @brief Return the currently active request ID. + * + * This value is only valid inside the parseSoapFault() and parseSoapResult() slots. + * When this method is called outside these slots, the value is 0. + * + * @return The ID of the request which is currently being processed. + */ +int HttpSoapConnection::getCurrentRequestId() const +{ +#ifdef KMESSTEST + KMESS_ASSERT( currentRequestId_ == http_->currentId() ); +#endif + + return currentRequestId_; +} + + + /** * @brief Return the endpoint * @return Returns the endpoint given with the constructor. @@ -131,21 +171,6 @@ QString HttpSoapConnection::getEndpoint() const -/** - * @brief Return the last request ID - * - * This parameter is not used internally, but allows other classes to - * distinguish between requests, or pass user-data for callbacks. - * - * @return The last request ID. - */ -const QString & HttpSoapConnection::getRequestId() const -{ - return requestId_; -} - - - /** * @brief Return the last SOAP action * @return The last SOAP action sent. @@ -185,18 +210,11 @@ bool HttpSoapConnection::parseHttpBody( const QByteArray &responseBody ) kDebug() << "Request finished, pasing body."; #endif - // Avoid XML errors if there is no response - if( responseBody.isEmpty() ) - { - kWarning() << "Received an empty response " - "(endpoint=" << endpoint_ << ")" << endl; - return false; - } - // Attempt to convert to XML + // see http://doc.trolltech.com/4.3/qdomdocument.html#setContent QString xmlError; QDomDocument xml; - if( ! xml.setContent( responseBody, true, &xmlError ) ) + if( ! xml.setContent( responseBody, true, &xmlError ) ) // true for namespace processing. { kWarning() << "Unable to parse XML " "(error='" << xmlError << "' endpoint=" << endpoint_ << ")" << endl; @@ -227,8 +245,10 @@ bool HttpSoapConnection::parseHttpBody( const QByteArray &responseBody ) return false; } - // See if it's a soap error message - if( resultNode.nodeName() == "Fault" ) + // See if it's a soap error message, fault in the body. + // NOTE: the test is done with localName() instead of nodeName(), because the prefix may differ. + if( resultNode.localName() == "Fault" + && resultNode.namespaceURI() == XMLNS_SOAP ) { #ifdef KMESSDEBUG_HTTPSOAPCONNECTION_GENERAL kDebug() << "Found soap fault."; @@ -243,7 +263,7 @@ bool HttpSoapConnection::parseHttpBody( const QByteArray &responseBody ) // This object wrapper is stripped transparently in .Net, also do this here: QString resultNodeName = resultNode.nodeName(); if( resultNodeName.endsWith("Response") - && resultNode.childNodes().length() == 1 + && resultNode.childNodes().length() == 1 && resultNode.firstChild().nodeName() == resultNodeName.replace("Response", "Result") ) { resultNode = resultNode.firstChild().toElement(); @@ -251,8 +271,11 @@ bool HttpSoapConnection::parseHttpBody( const QByteArray &responseBody ) // Request completed, indicate derived class and listeners. #ifdef KMESSDEBUG_HTTPSOAPCONNECTION_GENERAL - kDebug() << "Request finished, signalling to start parsing " - "(main node=" << resultNodeName << ")" << endl; + kDebug() << "Request finished, signalling to start parsing of the result node " + "(name:" << resultNode.nodeName() << + " prefix:" << resultNode.prefix() << + " localName:" << resultNode.localName() << + " namespace:" << resultNode.namespaceURI() << ")" << endl; #endif // Notify listeners @@ -293,10 +316,17 @@ void HttpSoapConnection::parseSoapFault( const QDomElement &faultNode, const QDo * * @param content The POST data to send. * @param soapAction The SOAPAction header to send, may be QString::null to omit the header. - * @param requestId The ID of the request, allowing callbacks to distinguish between requests. + * @return The request ID. */ -void HttpSoapConnection::sendRawPostRequest( const QString &content, const QString &soapAction, const QString &requestId ) +int HttpSoapConnection::sendRawPostRequest( const QString &content, const QString &soapAction ) { +#ifdef KMESSTEST + if( ! isIdle() ) + { + kDebug() << "NOTICE: A new SOAP request started while the previous request is not finished yet."; + } +#endif + // Create HTTP request QHttpRequestHeader header( "POST", endpoint_.path() ); QByteArray rawPostData = content.toUtf8(); @@ -315,7 +345,6 @@ void HttpSoapConnection::sendRawPostRequest( const QString &content, const QStri // Initialize state vars soapAction_ = soapAction_; - requestId_ = requestId; #ifdef KMESS_NETWORK_WINDOW QUrl soapActionUrl( soapAction ); @@ -338,7 +367,7 @@ void HttpSoapConnection::sendRawPostRequest( const QString &content, const QStri // Send the request int httpRequestId = http_->request( header, rawPostData ); - Q_UNUSED(httpRequestId); + return httpRequestId; } @@ -351,11 +380,11 @@ void HttpSoapConnection::sendRawPostRequest( const QString &content, const QStri * * @param soapAction The SOAPAction header to send, may be QString::null to omit the header. * @param message The SOAP message to send. - * @param requestId The ID of the request, allowing callbacks to distinguish between requests. + * @return The request ID. */ -void HttpSoapConnection::sendRequest(const QString &soapAction, const SoapMessage &message, const QString &requestId ) +int HttpSoapConnection::sendRequest(const QString &soapAction, const SoapMessage &message ) { - sendRawPostRequest( message.getMessage(), soapAction, requestId ); + return sendRawPostRequest( message.getMessage(), soapAction ); } @@ -374,9 +403,9 @@ void HttpSoapConnection::sendRequest(const QString &soapAction, const SoapMessag * @param soapAction The SOAPAction header to send, may be QString::null to omit the header. * @param messageBody The raw XML body to send. For a readable formatting in the network window, use 4 spaces indent and no trailing newline. * @param messageHeader The raw XML header to send. - * @param requestId The ID of the request, allowing callbacks to distinguish between requests. + * @return The request ID. */ -void HttpSoapConnection::sendRequest(const QString &soapAction, const QString &messageBody, const QString &messageHeader, const QString &requestId) +int HttpSoapConnection::sendRequest( const QString &soapAction, const QString &messageBody, const QString &messageHeader ) { #ifdef KMESSDEBUG_HTTPSOAPCONNECTION_GENERAL kDebug() << "Connecting to endpoint for SOAP action '" << soapAction << "'."; @@ -385,9 +414,9 @@ void HttpSoapConnection::sendRequest(const QString &soapAction, const QString &m // Build the SOAP request QString postData = "\n" "\n"; + " xmlns:xsi=\"" XMLNS_XSI "\"" + " xmlns:xsd=\"" XMLNS_XSD "\"" + " xmlns:soap=\"" XMLNS_SOAP "\">\n"; // Append header if( ! messageHeader.isEmpty() ) @@ -398,7 +427,7 @@ void HttpSoapConnection::sendRequest(const QString &soapAction, const QString &m // Append body postData += " \n" + messageBody + "\n \n\n"; - sendRawPostRequest( postData, soapAction, requestId ); + return sendRawPostRequest( postData, soapAction ); } @@ -412,16 +441,19 @@ void HttpSoapConnection::sendRequest(const QString &soapAction, const QString &m void HttpSoapConnection::setEndpoint( const QString &endpoint ) { #ifdef KMESSDEBUG_HTTPSOAPCONNECTION_GENERAL - if( endpoint_.isValid() ) - { - kDebug() << "Changing HttpSoapConnection endpoint from " << endpoint_ << " to " << endpoint; - } + QString oldEndpoint = endpoint_.toString(); #endif #ifdef KMESSTEST KMESS_ASSERT( endpoint.startsWith("http://") || endpoint.startsWith("https://") ); KMESS_ASSERT( http_->state() == QHttp::Unconnected ); #endif + // Avoid a http host request if this is not needed. + if( endpoint_ == endpoint ) + { + return; + } + // Parse the endpoint endpoint_.setUrl( endpoint ); QString protocol = endpoint_.scheme(); @@ -434,6 +466,13 @@ void HttpSoapConnection::setEndpoint( const QString &endpoint ) // so appending the default 3rd argument so it's more difficult to break. int hostRequestId = http_->setHost( endpoint_.host(), mode, 0 ); hostRequestIds_.append( hostRequestId ); + +#ifdef KMESSDEBUG_HTTPSOAPCONNECTION_GENERAL + if( endpoint_.isValid() ) + { + kDebug() << "Changing HttpSoapConnection endpoint from " << oldEndpoint << " to " << endpoint << ", request ID" << hostRequestId; + } +#endif } @@ -445,44 +484,63 @@ void HttpSoapConnection::slotHttpAuthenticationRequired( const QString &hostname { Q_UNUSED(hostname); Q_UNUSED(port); - kWarning() << "Got http authentication request for '" << authenticator->realm() << "' while connecting to '" << endpoint_ << "'."; + + kWarning() << "Got http authentication request for" << authenticator->realm() << + "while connecting to" << endpoint_; } // The request to the remote server finished -void HttpSoapConnection::slotHttpRequestFinished( int id, bool error ) +void HttpSoapConnection::slotHttpRequestFinished( int requestId, bool error ) { - // Very annoying. QHttp also generates a request for the setHost() call. - if( hostRequestIds_.contains( id ) ) + // Get the error code + QHttp::Error errorCode = http_->error(); + + // Very annoying. QHttp also generates a request for the setHost() and close() calls. + if( hostRequestIds_.contains( requestId ) ) { #ifdef KMESSDEBUG_HTTPSOAPCONNECTION_GENERAL - kDebug() << "completed host request (id=" << id << "error=" << error << ")."; + kDebug() << "completed host request (id=" << requestId << "error=" << errorCode << ")."; #endif // Abort next requests if the host request failed. if( error ) { + kWarning() << "Failed to resolve host" << endpoint_; + // It turns out that calling abort() from a requestFinished() slot causes crashes later (Qt 4.3.3) // http_->abort(); http_->clearPendingRequests(); - } + return; } - else + + // Catch other QHttp requests we don't want to parse. + if( ! http_->currentRequest().isValid() ) { #ifdef KMESSDEBUG_HTTPSOAPCONNECTION_GENERAL - kDebug() << "completed http request (id=" << id << "error=" << error << ")."; + kDebug() << "completed close request (id=" << requestId << "error=" << errorCode << ")."; #endif + + return; } +#ifdef KMESSDEBUG_HTTPSOAPCONNECTION_GENERAL + QHttpResponseHeader header = http_->lastResponse(); + kDebug() << "start processing http response (id=" << requestId << "error=" << errorCode << "status=" << header.statusCode() << header.reasonPhrase() << ")."; +#endif + + // Set current request ID for all slots. + currentRequestId_ = requestId; + // See if an error occurred if( error ) { // Avoid double errors by our abort() calls. - if( http_->error() == QHttp::Aborted ) + if( errorCode == QHttp::Aborted ) { return; } @@ -493,23 +551,40 @@ void HttpSoapConnection::slotHttpRequestFinished( int id, bool error ) // Inform listeners the request failed. emit requestFailed( this, i18n( "Unable to make a connection: %1", httpError ) ); + + // Reset all data. + clearRequestData( currentRequestId_ ); + currentRequestId_ = 0; return; } // Read the body, make copy + bool responseOk = true; QByteArray body = http_->readAll(); + // Avoid XML errors if there is no response + if( body.isEmpty() ) + { + kWarning() << "Received an empty response " + "(state=" << http_->state() << + " error=" << http_->error() << + " endpoint=" << endpoint_ << ")"; + responseOk = false; + } + else + { + // Parse the body #ifdef KMESS_NETWORK_WINDOW - KMESS_NET_RECEIVED( this, body ); + KMESS_NET_RECEIVED( this, body ); #endif #ifdef KMESSDEBUG_HTTPSOAPCONNECTION_HTTPDUMP - kDebug() << "Received the HTTP response:\n" << body; + kDebug() << "Received the HTTP response:\n" << body; #endif - // Parse the body - bool responseOk = parseHttpBody( body ); + responseOk = parseHttpBody( body ); + } // emit later, so the caller can destroy this class if( ! responseOk ) @@ -519,16 +594,17 @@ void HttpSoapConnection::slotHttpRequestFinished( int id, bool error ) http_->clearPendingRequests(); emit requestFailed( this, i18n( "There was an internal error in KMess: %1", - i18n("Unable to parse SOAP response") - ) - ); + i18n("Unable to parse SOAP response") ) ); } else { #ifdef KMESSDEBUG_HTTPSOAPCONNECTION_GENERAL - kDebug() << "completed response handling."; + kDebug() << "completed response handling (id=" << requestId << ")"; #endif } + + // Reset + currentRequestId_ = 0; } @@ -538,6 +614,11 @@ void HttpSoapConnection::slotHttpRequestFinished( int id, bool error ) */ void HttpSoapConnection::slotHttpResponseHeaderReceived( const QHttpResponseHeader &header ) { + // Log it in the network window. +#ifdef KMESS_NETWORK_WINDOW + KMESS_NET_RECEIVED( this, header.toString().toLatin1() ); +#endif + // TODO: generate custom error message, and call http_->abort(). // Check the response header @@ -548,7 +629,8 @@ void HttpSoapConnection::slotHttpResponseHeaderReceived( const QHttpResponseHead } // Check response code - if( header.statusCode() != 200 ) + int statusCode = header.statusCode(); + if( statusCode != 200 && statusCode != 500 ) // 500 might happen with SOAP faults. { kWarning() << "received unexpected header code: " << header.statusCode() << " " << header.reasonPhrase() << "."; return; @@ -568,11 +650,6 @@ void HttpSoapConnection::slotHttpResponseHeaderReceived( const QHttpResponseHead return; } - // Log it in the network window. -#ifdef KMESS_NETWORK_WINDOW - KMESS_NET_RECEIVED( this, header.toString().toLatin1() ); -#endif - #ifdef KMESSDEBUG_HTTPSOAPCONNECTION_HTTPDUMP kDebug() << "Received the HTTP response header:\n" << header.toString().toLatin1(); #endif diff --git a/src/network/soap/httpsoapconnection.h b/src/network/soap/httpsoapconnection.h index ff97855..eecba54 100644 --- a/src/network/soap/httpsoapconnection.h +++ b/src/network/soap/httpsoapconnection.h @@ -75,26 +75,28 @@ class HttpSoapConnection : public QObject // Return the endpoint QString getEndpoint() const; - // Return the last request ID - const QString & getRequestId() const; // Return the last SOAP action const QString & getSoapAction() const; // Whether the connection is idle, not processing a SOAP request/response bool isIdle(); protected: + // The request is processed, delete any user data associated with the request. + virtual void clearRequestData( int requestId ); // Escape a string for inclusion in XML QString escapeString( QString value ) const; + // Return the currently active request ID. + int getCurrentRequestId() const; // The connection received the full response virtual void parseSoapResult( const QDomElement &resultNode, const QDomElement &headerNode ) = 0; // Parse the SOAP fault virtual void parseSoapFault( const QDomElement &faultNode, const QDomElement &headerNode ); // Send a SOAP request - void sendRawPostRequest( const QString &content, const QString &soapAction = QString::null, const QString &requestId = QString::null ); + int sendRawPostRequest( const QString &content, const QString &soapAction = QString::null ); // Send a SOAP request - void sendRequest( const QString &soapAction, const SoapMessage &message, const QString &requestId = QString::null ); + int sendRequest( const QString &soapAction, const SoapMessage &message ); // Send a SOAP request - void sendRequest( const QString &soapAction, const QString &messageBody, const QString &messageHeader = QString::null, const QString &requestId = QString::null ); + int sendRequest( const QString &soapAction, const QString &messageBody, const QString &messageHeader = QString::null ); // Change the SOAP endpoint. void setEndpoint( const QString &endpoint ); @@ -104,24 +106,24 @@ class HttpSoapConnection : public QObject private slots: // Called when the remote server requires authentication - void slotHttpAuthenticationRequired( const QString &hostname, quint16 port, QAuthenticator *authenticator ); + void slotHttpAuthenticationRequired( const QString &hostname, quint16 port, QAuthenticator *authenticator ); // Called when the request to the remote server finished - void slotHttpRequestFinished( int id, bool error ); + void slotHttpRequestFinished( int requestId, bool error ); // Called when the response header is received - void slotHttpResponseHeaderReceived( const QHttpResponseHeader &header ); + void slotHttpResponseHeaderReceived( const QHttpResponseHeader &header ); // Called when an ssl error occurred while setting up the connection - void slotSslErrors( const QList &sslErrors ); + void slotSslErrors( const QList &sslErrors ); private: // private attributes + /// The current request ID which the slots are processing. + int currentRequestId_; /// The endpoint for the request QUrl endpoint_; /// The http request ids for the setHost() call QList hostRequestIds_; /// The http connection helper QHttp *http_; - /// The remote ID of the request. - QString requestId_; /// The last SOAP action QString soapAction_; diff --git a/src/network/soap/offlineimservice.cpp b/src/network/soap/offlineimservice.cpp index f2565cc..867ab47 100644 --- a/src/network/soap/offlineimservice.cpp +++ b/src/network/soap/offlineimservice.cpp @@ -17,9 +17,16 @@ #include "offlineimservice.h" +#include "../../utils/xmlfunctions.h" +#include "../../utils/kmessshared.h" +#include "../../currentaccount.h" #include "../../kmessdebug.h" +#include "../applications/p2papplication.h" #include "../chatmessage.h" #include "../mimemessage.h" +#include "../msnchallengehandler.h" + +#include #include @@ -29,26 +36,33 @@ #endif +#define PRODUCT_KEY "ILTXC!4IXB5FB*PX" +#define PRODUCT_ID "PROD0119GSJUC$18" + + /** - * @brief The constructor. + * @brief The receiving mode constructor. * - * Initializes the client for the Offline-IM webservice. + * Initializes the client to receive offline messages using the Offline-IM webservice. * * @param authT The t value of the passport cookie. * @param authP The p value of the passport cookie. * @param parent The Qt parent object, when it's destroyed this class will be cleaned up automatically too. */ -OfflineImService::OfflineImService( const QString &authT, const QString &authP, QObject *parent ) +OfflineImService::OfflineImService( const QString &authT, const QString &authP, + QObject *parent ) : HttpSoapConnection( "https://rsi.hotmail.com/rsi/rsi.asmx", parent ) , authT_(authT) , authP_(authP) + , nextSequenceNum_(0) + , passportService_(0) { #ifdef KMESSDEBUG_OFFLINE_IM_GENERAL - kDebug() << "CREATED."; + kDebug() << "CREATED receiver service."; #endif - setObjectName( "OfflineImService" ); + setObjectName( "OfflineImService[receiver]" ); // Initialize the header once. passportCookieHeader_ = @@ -60,11 +74,38 @@ OfflineImService::OfflineImService( const QString &authT, const QString &authP, +/** + * @brief The sending mode constructor. + * + * Initializes the client to send offline messages using the Offline-IM webservice. + * + * @param parent The Qt parent object, when it's destroyed this class will be cleaned up automatically too. + */ +OfflineImService::OfflineImService( QObject *parent ) + : HttpSoapConnection( "https://ows.messenger.msn.com/OimWS/oim.asmx", parent ) + , nextSequenceNum_(0) + , passportService_(0) +{ +#ifdef KMESSDEBUG_OFFLINE_IM_GENERAL + kDebug() << "CREATED sender service."; +#endif + + setObjectName( "OfflineImService[sender]" ); +} + + + /** * @brief The destructor. */ OfflineImService::~OfflineImService() { + delete passportService_; + + // Delete stored request data + qDeleteAll( getMessageCallData_ ); + qDeleteAll( storeMessageCallData_ ); + #ifdef KMESSDEBUG_OFFLINE_IM_GENERAL kDebug() << "DESTROYED."; #endif @@ -72,6 +113,56 @@ OfflineImService::~OfflineImService() +/** + * @brief Delete the temporary data associated with the request id. + * + * This method is called by the base class when a request is completely processed. + * + * @param requestId ID of the request, as returned by sendRequest(). + */ +void OfflineImService::clearRequestData( int requestId ) +{ +#ifdef KMESSDEBUG_OFFLINE_IM_GENERAL + kDebug() << "deleting call data of request" << requestId; +#endif + + // Delete stored objects + delete getMessageCallData_.take( requestId ); + delete storeMessageCallData_.take( requestId ); + + // Reset other state tracking vars. + passportRequestIds_.removeAll( requestId ); +} + + + +/** + * @brief Create a passport login service on demand. + * + * This service is used to authenticate the client to send offline messages. + */ +PassportLoginService * OfflineImService::createPassportLoginService() +{ + // Create the new passport service + PassportLoginService *passportService = new PassportLoginService( this ); + + // Connect the signals to continue sending the offline message + connect( passportService, SIGNAL( loginIncorrect() ), + this, SLOT ( slotLoginRequestFailed() ) ); + connect( passportService, SIGNAL( loginSucceeded(QString, QString, QString) ), + this, SLOT ( slotLoginSucceeded(QString, QString, QString) ) ); + + // Also relay the standard signals. + connect( passportService, SIGNAL( requestFailed(HttpSoapConnection*, const QString&) ), + this, SLOT ( slotLoginRequestFailed(HttpSoapConnection*, const QString&) ) ); + connect( passportService, SIGNAL( requestFailed(HttpSoapConnection*, const QString&, const QString&, QDomElement) ), + this, SLOT ( slotLoginRequestFailed(HttpSoapConnection*, const QString&, const QString&, QDomElement) ) ); + + return passportService; +} + + + /** * @brief SOAP call to delete messages from the remote storage. * @param messageIds List of messages to delete. @@ -93,6 +184,8 @@ void OfflineImService::deleteMessages( const QStringList &messageIds ) " " + messageIds.join("\n ") + "\n" " \n" " "; + + // Make the request sendRequest( soapAction, soapBody, passportCookieHeader_ ); } @@ -142,14 +235,22 @@ void OfflineImService::getMessage( const QString &messageId, bool markAsRead ) kDebug() << "requesting message '" << messageId << "'"; #endif + // Initialize the call data. + // Will be used in the slots to know which session this was. + GetMessageCallData *callData = new GetMessageCallData; + callData->messageId = messageId; + // Initialize request QString soapAction = "http://www.hotmail.msn.com/ws/2004/09/oim/rsi/GetMessage"; QString soapBody = " \n" - " " + escapeString(messageId) + "\n" - " " + (markAsRead ? "true" : "false") + "\n" + " " + escapeString( messageId ) + "\n" + " " + ( markAsRead ? "true" : "false" ) + "\n" " "; - sendRequest( soapAction, soapBody, passportCookieHeader_, messageId ); + + // Send the request. + int requestId = sendRequest( soapAction, soapBody, passportCookieHeader_ ); + getMessageCallData_.insert( requestId, callData ); } @@ -176,6 +277,106 @@ void OfflineImService::getMetaData() +/** + * @brief Process the SOAP fault returned when sending an offline message. + */ +void OfflineImService::parseSoapFault( const QDomElement &faultNode, const QDomElement &headerNode ) +{ + // Get the type of the error + int currentRequestId = getCurrentRequestId(); + QString faultCode = XmlFunctions::getNodeValue( faultNode, "faultcode" ); + + // Get calling data. + StoreMessageCallData *callData = storeMessageCallData_[ currentRequestId ]; + + // See which fault we received + if( faultCode == "q0:AuthenticationFailed" ) + { + if( KMESS_NULL(callData) ) return; + + QString lockKeyChallenge = XmlFunctions::getNodeValue( faultNode, "detail/LockKeyChallenge" ); + QString twnChallenge = XmlFunctions::getNodeValue( faultNode, "detail/TweenerChallenge" ); + + // See if a lock key challenge was requested. + if( ! lockKeyChallenge.isEmpty() ) + { + // In the response from server there is a LockKeyChallenge that allows + // to calculate hash for LockKey (together the Product Key and Product id of MSN). + + // Compute hash with MSN product key/id for the identification + MSNChallengeHandler handler( PRODUCT_KEY, PRODUCT_ID ); + + // Compute the lock key using the MSNP11 Challenge algorithm + CurrentAccount::instance()->setOfflineImKey( handler.computeHash( lockKeyChallenge ) ); + +#ifdef KMESSDEBUG_OFFLINE_IM_GENERAL + kDebug() << "Lock key to compute:" << lockKeyChallenge; + kDebug() << "Computed lock key:" << CurrentAccount::instance()->getOfflineImKey(); +#endif + // Check if there is also TweenerChallenge + if( twnChallenge.isEmpty() ) + { + // Re-send the message with the new lock key + storeMessage( callData->to, callData->message, callData->sequenceNum ); + return; + } + } + + + // See if a tweaner challenge was requested. + if( ! twnChallenge.isEmpty() ) + { + // Initialize login service on demand. + if( passportService_ == 0 ) + { + passportService_ = createPassportLoginService(); + } + + // Start the login attempt. + CurrentAccount *currentAccount = CurrentAccount::instance(); + passportService_->login( twnChallenge, currentAccount->getHandle(), currentAccount->getPassword() ); + passportRequestIds_.append( currentRequestId ); + return; + } + + // Any other situation means something is wrong. + kWarning() << "Unknown challenge type received"; + emit sendMessageFailed( callData->to, callData->message ); + } + else if( faultCode == "q0:SystemUnavailable" + || faultCode == "q0:DeliveryFailed" // happens with unverified passport accounts + || faultCode == "q0:InvalidParameter" // seen with SOAP syntax error + || faultCode == "q0:SenderThrottleLimitExceeded" ) // TODO: what to for that one?? + { + if( KMESS_NULL(callData) ) return; + + // failed, can't send offline IM's + emit sendMessageFailed( callData->to, callData->message ); + + // Also report at the console. + kWarning() << "Received SOAP fault" << faultCode << "when sending an offline-im message to" << callData->to; + } + else + { + // Any other situation means something is wrong. + kWarning() << "Unknown response type received " + "(faultCode=" << faultCode << " endpoint=" << getEndpoint() << ")" << endl; + + // Notify the sender if this error was + // in response of a sent offline im. + if( callData != 0 ) + { + emit sendMessageFailed( callData->to, callData->message ); + } + + // Do standard SOAP error handling. + // (currently will relay to a kWarning() for the msn swichboard connection). + HttpSoapConnection::parseSoapFault( faultNode, headerNode ); + } +} + + + /** * @brief Internal function to process the response of the webservice. * @@ -187,6 +388,7 @@ void OfflineImService::getMetaData() * Other unrecognized response types result in a warning message at the console. * * @param resultRoot The result root of the SOAP response. + * @param headerNode The header node of the SOAP response. */ void OfflineImService::parseSoapResult( const QDomElement &resultRoot, const QDomElement &/*headerNode*/ ) { @@ -194,7 +396,9 @@ void OfflineImService::parseSoapResult( const QDomElement &resultRoot, const QDo kDebug() << "parsing SOAP response."; #endif - QString resultName = resultRoot.nodeName(); + int currentRequestId = getCurrentRequestId(); + + QString resultName = resultRoot.localName(); if( resultName == "GetMessageResult" ) { processGetMessageResult( resultRoot ); @@ -207,10 +411,23 @@ void OfflineImService::parseSoapResult( const QDomElement &resultRoot, const QDo { // do nothing } + else if( resultName == "StoreResponse" ) + { +#ifdef KMESSDEBUG_OFFLINE_IM_GENERAL + StoreMessageCallData *callData = storeMessageCallData_[ currentRequestId ]; + if( ! KMESS_NULL(callData) ) + { + kDebug().nospace() << "Stored offline message for " << callData->to << ": " << callData->message; + } +#endif + + // Reset the session ID + runID_ = QString(); + } else { - kWarning() << "Unknown response type received " - << "(rootnode=" << resultName << " endpoint=" << getEndpoint() << ")" << endl; + kWarning().nospace() << "Unknown response type received " + "(rootnode=" << resultName << " endpoint=" << getEndpoint() << ")" << endl; } } @@ -230,6 +447,11 @@ void OfflineImService::processGetMessageResult( const QDomElement &resultRoot ) kDebug() << "parsing downloaded Offline-IM message."; #endif + // Get the call data with original message ID. + int currentRequestId = getCurrentRequestId(); + GetMessageCallData *callData = getMessageCallData_[ currentRequestId ]; + if( KMESS_NULL(callData) ) return; + // Parse as MIME message. MimeMessage message( resultRoot.text() ); @@ -275,8 +497,191 @@ void OfflineImService::processGetMessageResult( const QDomElement &resultRoot ) // Return to caller // The MessageID was stored in the "RequestId" field of the sendRawRequest() method - emit messageReceived( getRequestId(), from, to, date, body, runId, sequenceNum ); + emit messageReceived( callData->messageId, from, to, date, body, runId, sequenceNum ); } + +/** + * @brief Send an offline message. + * + * Sends an Offline Message. With the message the lockKey is empty, so the server will respond with a SOAP fault. + * At parseSoapFault(), this error will be detected and the message is sent again with the proper lock key. + * + * @param to Handle of the message sender. + * @param message Message body. + */ +void OfflineImService::sendMessage( const QString &to, const QString &message ) +{ + // Increment sequence counter. + nextSequenceNum_++; + + // Call internal version with sequence number + storeMessage( to, message, nextSequenceNum_ ); +} + + + +/** + * @brief Internal method to store a message in the offline-im storage. + * + * This method is used internally by sendMessag() and others to send the message. + * It accepts a third sequenceNum parameter so retries are stored with the same sequence number. + * + * @param to Handle of the message sender. + * @param message Message body. + * @param sequenceNum The sequence number. + */ +void OfflineImService::storeMessage( const QString &to, const QString &message, int sequenceNum ) +{ + CurrentAccount *currentAccount = CurrentAccount::instance(); + + QString auth = Qt::escape( currentAccount->getAuthenticationTicket() ); + const QString &from = currentAccount->getHandle(); + const QString &friendlyName = currentAccount->getFriendlyName(); + const QString &offlineImKey = currentAccount->getOfflineImKey(); + + // Initialize the call data. + // Will be used in the slots to know which session this was. + StoreMessageCallData *callData = new StoreMessageCallData; + callData->to = to; + callData->message = message; + callData->sequenceNum = sequenceNum; + + // Store the GUID for this sending session + if( runID_.isEmpty() ) + { + runID_ = KMessShared::generateGUID(); + } + + // Build the request + QString soapAction = "http://messenger.msn.com/ws/2004/09/oim/Store"; + + QString soapHeader = + "\n" + "\n" + "" + "\n" + " http://messenger.msn.com\n" + " " + QString::number( sequenceNum ) + "\n" + ""; + + QString soapBody = + "text\n" + "MIME-Version: 1.0\r\n" + "Content-Type: text/plain; charset=UTF-8\r\n" + "Content-Transfer-Encoding: base64\r\n" + "X-OIM-Message-Type: OfflineMessage\r\n" + "X-OIM-Run-Id:" + runID_ + "\r\n" + "X-OIM-Sequence-Num: " + QString::number( sequenceNum ) + "\r\n" + "\r\n" + + callData->message.replace( "\n" ,"\r\n" ).toUtf8().toBase64() + + ""; + + // Send the request. + int requestId = sendRequest( soapAction, soapBody, soapHeader ); + storeMessageCallData_.insert( requestId, callData ); +} + + + +/** + * @brief Called when the passport login was succesful. + * + * Send the offline IM message again. + */ +void OfflineImService::slotLoginSucceeded( QString authenticationKey, QString passportToken, + QString proofToken ) +{ + // See which messages were waiting for passport authentication. + QList loginRequestIds = passportRequestIds_; // copy so clearRequestData() can also clear this list. + foreach( int loginRequestId, loginRequestIds ) + { + // Don't delete yet, might get another call. + StoreMessageCallData *callData = storeMessageCallData_[ loginRequestId ]; + if( ! KMESS_NULL(callData) ) // yes, warn for this! + { + // Update the authentication ticket + CurrentAccount *currentAccount = CurrentAccount::instance(); + currentAccount->setAuthenticationTicket( authenticationKey ); + currentAccount->setPassportToken ( passportToken ); + currentAccount->setProofToken ( proofToken ); + + // Send the OIM message again. + storeMessage( callData->to, callData->message, callData->sequenceNum ); + } + } +} + + + +/** + * @brief Called when the login of the passport login request failed. + * + * Notify the calling class that sending the offline IM message failed. + */ +void OfflineImService::slotLoginRequestFailed() +{ + // See which messages were waiting for passport authentication. + QList loginRequestIds = passportRequestIds_; // copy so clearRequestData() can also clear this list. + foreach( int loginRequestId, loginRequestIds ) + { + // Notify the sender this message can't be delivered. + // Delete call data manually here. + StoreMessageCallData *callData = storeMessageCallData_.take( loginRequestId ); + if( ! KMESS_NULL(callData) ) // yes, warn for this! + { + emit sendMessageFailed( callData->to, callData->message ); + delete callData; + } + } + + passportRequestIds_.clear(); +} + + + +/** + * @brief Called when the sub request of the passport login failed. + */ +void OfflineImService::slotLoginRequestFailed( HttpSoapConnection *passportService, const QString &reason ) +{ + // Display a standard "message could not be sent" notice. + slotLoginRequestFailed(); + + // Display the exact detailed reason at the console, as always. + kWarning() << "A offline message could not be sent. The passport login request failed with the following error message: " << reason; + + // TODO: Also relay to caller? + Q_UNUSED( passportService ); + Q_UNUSED( reason ); +// emit requestFailed( this, reason ); +} + + + +/** + * @brief Called when the sub request of the passport login failed. + */ +void OfflineImService::slotLoginRequestFailed( HttpSoapConnection *passportService, const QString &faultCode, + const QString &faultString, QDomElement faultNode ) +{ + Q_UNUSED( faultNode ); + + // Reform to standard message. + // Just like MsnConnection::slotSoapFault() does. + + slotLoginRequestFailed( passportService, faultCode + ": " + faultString ); +} + + + #include "offlineimservice.moc" diff --git a/src/network/soap/offlineimservice.h b/src/network/soap/offlineimservice.h index 0febb2d..3f77daf 100644 --- a/src/network/soap/offlineimservice.h +++ b/src/network/soap/offlineimservice.h @@ -19,6 +19,9 @@ #define OFFLINEIMSERVICE_H #include "httpsoapconnection.h" +#include "passportloginservice.h" + +#include class ChatMessage; @@ -50,8 +53,10 @@ class OfflineImService : public HttpSoapConnection Q_OBJECT public: // public methods - // The constructor + // The receiving mode constructor OfflineImService( const QString &authT, const QString &authP, QObject *parent = 0 ); + // The sending mode constructor + OfflineImService( QObject *parent ); // The destructor virtual ~OfflineImService(); @@ -61,22 +66,70 @@ class OfflineImService : public HttpSoapConnection void getMessage( const QString &messageId, bool markAsRead = false ); // Request the Mail-Data field over SOAP. void getMetaData(); + // Send an offline message + void sendMessage( const QString &to, const QString &message ); private: + // Delete the temporary data associated with the request id. + void clearRequestData( int requestId ); + // Create a passport login service on demand. + PassportLoginService *createPassportLoginService(); // Extract the e-mail address from an RFC822 formatted string. QString extractRFC822Address( const QString &address ); + // Process the SOAP fault returned when sending an offline message. + void parseSoapFault( const QDomElement &resultRoot, const QDomElement &headerNode ); // Process server responses void parseSoapResult( const QDomElement &resultRoot, const QDomElement &headerNode ); // Process the getMessage response void processGetMessageResult( const QDomElement &resultRoot ); + // Internal method to store a message in the offline-im storage. + void storeMessage( const QString &to, const QString &message, int sequenceNum ); + + private slots: + // Called when the passport login was succesful. + void slotLoginSucceeded( QString authenticationKey, QString passportToken, + QString proofToken ); + // Notify the calling class that sending the offline IM message failed. + void slotLoginRequestFailed(); + // Called when the sub request of the passport login failed. + void slotLoginRequestFailed( HttpSoapConnection *passportService, const QString &reason ); + // Called when the sub request of the passport login failed. + void slotLoginRequestFailed( HttpSoapConnection *passportService, const QString &faultCode, + const QString &faultString, QDomElement faultNode ); private: + struct GetMessageCallData + { + QString messageId; + }; + + struct StoreMessageCallData + { + QString to; + QString message; + int sequenceNum; + }; + /// The t value of the passport cookie. QString authT_; /// The p value of the passport cookie. QString authP_; + // Additional request data to track + QHash getMessageCallData_; + // Offline message sequence number + int nextSequenceNum_; /// The passport header to send with SOAP QString passportCookieHeader_; + // The request ID's which are waiting for passport authentication. + QList passportRequestIds_; + // The passport service for require the new ticket + PassportLoginService *passportService_; + // Server lock key used to authorize OIM sending + QString lockKey_; + // GuID for the OIM session + QString runID_; + // Additional request data to track + QHash storeMessageCallData_; signals: /** @@ -107,6 +160,8 @@ class OfflineImService : public HttpSoapConnection void messageReceived( const QString &messageId, const QString &from, const QString &to, const QDateTime &date, const QString &body, const QString &runId, int sequenceNum ); + + void sendMessageFailed( QString to, QString message ); }; #endif diff --git a/src/network/soap/passportloginservice.cpp b/src/network/soap/passportloginservice.cpp index 51acfe9..d4f0504 100644 --- a/src/network/soap/passportloginservice.cpp +++ b/src/network/soap/passportloginservice.cpp @@ -20,8 +20,11 @@ #include "../../utils/xmlfunctions.h" #include "../../kmessdebug.h" #include "../mimemessage.h" +#include "../../currentaccount.h" +#include "../../utils/kmessshared.h" #include +#include #include @@ -86,6 +89,49 @@ void PassportLoginService::login( const QString ¶meters, const QString &hand +// Compute the string for live hotmail access +QString PassportLoginService::createHotmailToken( const QString &passportToken, const QString &proofToken, + const QString &folder ) +{ + QString token; + + // Create the token + token = "ct=" + QString::number( QDateTime::currentDateTime().toTime_t(), 10 ) + + "&rru=" + QUrl::toPercentEncoding( folder ) + + "&sru=" + QUrl::toPercentEncoding( folder ) + + "&ru=" + QUrl::toPercentEncoding( folder ) + + "&bver=4&svc=mail&js=yes&id=2&pl=%3Fid%3D2&da="; + token += QUrl::toPercentEncoding( "http://Passport.NET/STS" + "" , "", ".-" ); + + token += QUrl::toPercentEncoding( passportToken + "" ); + + // Create and append the nonce + QByteArray nonce; + for( int i = 0; i < 24; i++ ) + { + nonce += (char)( ( rand() % 74 ) + 48 ); + } + token += "&nonce=" + QUrl::toPercentEncoding( nonce.toBase64() ); + + // Compute the keys with HMAC-Sha1 algorithm + QByteArray key1( QByteArray::fromBase64( proofToken.toLatin1() ) ); + + QByteArray magic = "WS-SecureConversation" + nonce; + + QByteArray key2( KMessShared::deriveKey( key1, magic ) ); + + QByteArray hash( KMessShared::createHMACSha1( key2, token.toLatin1() ) ); + + token += "&hash=" + QUrl::toPercentEncoding( hash.toBase64() ); + + return token; +} + + /** * @brief Internal function to parse the SOAP fault. * @@ -93,7 +139,7 @@ void PassportLoginService::login( const QString ¶meters, const QString &hand * to fire a loginIncorrect() signal instead of requestFailed(). * * It also traps SOAP fauls which are used to redirect the client. - * So far this has been observed with @msn.com passport accounts. + * So far this has been observed with \@msn.com passport accounts. * * The SOAP fault for an incorrect login looks like: * @code @@ -251,7 +297,7 @@ void PassportLoginService::parseSoapFault( const QDomElement &faultNode, const Q http://Passport.NET/STS - ...some kind of long key... + ...the token for live authentication... @@ -260,7 +306,7 @@ void PassportLoginService::parseSoapFault( const QDomElement &faultNode, const Q - ...some kind of key... + ...other token for live authentication... @@ -319,9 +365,15 @@ void PassportLoginService::parseSoapResult( const QDomElement &resultRoot, const kWarning() << "Multiple authentication tokens found, " << "using first one!" << endl; } + // Set the token and proof for hotmail live services ( mail, spaces etc.. ) + QDomNodeList passportToken = resultRoot.elementsByTagName( "CipherValue" ); + QDomNodeList proofToken = resultRoot.elementsByTagName( "BinarySecret" ); + // The 't=...&p=..." like should be in the "BinarySecurityToken" element. - emit loginSucceeded( authTokens.item(0).toElement().text() ); + emit loginSucceeded( authTokens .item(0).toElement().text(), + passportToken.item(0).toElement().text(), + proofToken .item(0).toElement().text() ); } } else @@ -347,8 +399,7 @@ void PassportLoginService::parseSoapResult( const QDomElement &resultRoot, const xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> - + {7108E71A-9926-4FCB-BCC9-9A9D3F32E423} 4 1 @@ -363,12 +414,13 @@ void PassportLoginService::parseSoapResult( const QDomElement &resultRoot, const - + xmlns:wsse="http://schemas.xmlsoap.org/ws/2003/06/secext" + Id="RSTS"> http://schemas.xmlsoap.org/ws/2004/04/security/trust/Issue @@ -400,8 +452,9 @@ void PassportLoginService::requestMultipleSecurityTokens() QString authParams =QUrl::fromPercentEncoding( authenticationParameters_.toUtf8() ) .replace(",", "&"); - QString header = "\n" + QString header = "\n" " {7108E71A-9926-4FCB-BCC9-9A9D3F32E423}\n" " 4\n" " 1\n" @@ -416,13 +469,13 @@ void PassportLoginService::requestMultipleSecurityTokens() " \n" ""; - QString body = "\n" - + " xmlns:wsse=\"http://schemas.xmlsoap.org/ws/2003/06/secext\"" + " Id=\"RSTS\">\n" " \n" " http://schemas.xmlsoap.org/ws/2004/04/security/trust/Issue\n" " \n" diff --git a/src/network/soap/passportloginservice.h b/src/network/soap/passportloginservice.h index 9ec2338..bea7aa2 100644 --- a/src/network/soap/passportloginservice.h +++ b/src/network/soap/passportloginservice.h @@ -52,6 +52,9 @@ class PassportLoginService : public HttpSoapConnection virtual ~PassportLoginService(); // Start the login process void login( const QString ¶meters, const QString &handle, const QString &password ); + // Compute the string for live hotmail access + static QString createHotmailToken( const QString &passportToken, const QString &proofToken, + const QString &folder ); private: // Parse the SOAP fault @@ -80,7 +83,7 @@ class PassportLoginService : public HttpSoapConnection /** * @brief Fired when the login succeeded. */ - void loginSucceeded( QString authentication ); + void loginSucceeded( QString authentication, QString passportToken, QString proofToken ); }; #endif diff --git a/src/network/specialgroups.h b/src/network/specialgroups.h index 44697bb..51657c8 100644 --- a/src/network/specialgroups.h +++ b/src/network/specialgroups.h @@ -23,7 +23,10 @@ -// Define the special groups here +/** + * Define the special groups here + * @ingroup NetworkCore + */ namespace SpecialGroups { const QString INDIVIDUALS = "individuals"; diff --git a/src/network/upnp/igdcontrolpoint.cpp b/src/network/upnp/igdcontrolpoint.cpp index 7e61512..c3de796 100644 --- a/src/network/upnp/igdcontrolpoint.cpp +++ b/src/network/upnp/igdcontrolpoint.cpp @@ -37,7 +37,7 @@ namespace UPnP // The constructor -IgdControlPoint::IgdControlPoint(const QString &hostname, int port, const QString &rootUrl) +IgdControlPoint::IgdControlPoint(const QString &hostname, quint16 port, const QString &rootUrl) : QObject() , forwardingService_(0) , gatewayAvailable_(false) diff --git a/src/network/upnp/igdcontrolpoint.h b/src/network/upnp/igdcontrolpoint.h index 73a4359..89e1211 100644 --- a/src/network/upnp/igdcontrolpoint.h +++ b/src/network/upnp/igdcontrolpoint.h @@ -47,7 +47,7 @@ class IgdControlPoint : public QObject public: // public methods // The constructor - IgdControlPoint(const QString &hostname, int port, const QString &rootUrl); + IgdControlPoint( const QString &hostname, quint16 port, const QString &rootUrl ); // The destructor virtual ~IgdControlPoint(); @@ -74,7 +74,7 @@ class IgdControlPoint : public QObject // The host of the gateway QString igdHostname_; // The port of the gateway - int igdPort_; + quint16 igdPort_; // The root service RootService *rootService_; // The wan connection service diff --git a/src/network/upnp/manager.cpp b/src/network/upnp/manager.cpp index 0b0d839..9a7037b 100644 --- a/src/network/upnp/manager.cpp +++ b/src/network/upnp/manager.cpp @@ -137,7 +137,7 @@ void Manager::slotBroadcastTimeout() // A device was discovered by the SSDP broadcast -void Manager::slotDeviceFound(const QString &hostname, int port, const QString &rootUrl) +void Manager::slotDeviceFound(const QString &hostname, quint16 port, const QString &rootUrl) { #ifdef KMESSDEBUG_UPNP_GENERAL kDebug() << "Device found, initializing IgdControlPoint to query it."; diff --git a/src/network/upnp/manager.h b/src/network/upnp/manager.h index dbfa250..dcde3ef 100644 --- a/src/network/upnp/manager.h +++ b/src/network/upnp/manager.h @@ -64,7 +64,7 @@ class Manager : public QObject // The broadcast failed void slotBroadcastTimeout(); // A device was discovered by the SSDP broadcast - void slotDeviceFound(const QString &hostname, int port, const QString &rootUrl); + void slotDeviceFound( const QString &hostname, quint16 port, const QString &rootUrl ); private: // private methods diff --git a/src/network/upnp/rootservice.cpp b/src/network/upnp/rootservice.cpp index d31350b..f0d04f8 100644 --- a/src/network/upnp/rootservice.cpp +++ b/src/network/upnp/rootservice.cpp @@ -126,7 +126,7 @@ namespace UPnP // The contructor -RootService::RootService(const QString &hostname, int port, +RootService::RootService(const QString &hostname, quint16 port, const QString &rootUrl) : Service(hostname, port, rootUrl) , hostname_(hostname) diff --git a/src/network/upnp/rootservice.h b/src/network/upnp/rootservice.h index 9f62ea9..7f88f35 100644 --- a/src/network/upnp/rootservice.h +++ b/src/network/upnp/rootservice.h @@ -38,7 +38,7 @@ class RootService : public Service public: // public methods // The constructor - RootService(const QString &hostname, int port, const QString &rootUrl); + RootService( const QString &hostname, quint16 port, const QString &rootUrl ); // The destructor virtual ~RootService(); @@ -76,7 +76,7 @@ class RootService : public Service // The hostname of the device QString hostname_; // The port of the device - int port_; + quint16 port_; // The udn of the root device QString rootUdn_; }; diff --git a/src/network/upnp/service.cpp b/src/network/upnp/service.cpp index 51462ca..70d9c03 100644 --- a/src/network/upnp/service.cpp +++ b/src/network/upnp/service.cpp @@ -42,7 +42,7 @@ namespace UPnP // The constructor for information services -Service::Service(const QString &hostname, int port, const QString &informationUrl) +Service::Service( const QString &hostname, quint16 port, const QString &informationUrl ) : informationUrl_(informationUrl) , pendingRequests_(0) { diff --git a/src/network/upnp/service.h b/src/network/upnp/service.h index c841a3d..725742e 100644 --- a/src/network/upnp/service.h +++ b/src/network/upnp/service.h @@ -36,7 +36,7 @@ namespace UPnP struct ServiceParameters { QString hostname; - int port; + quint16 port; QString scdpUrl; QString controlUrl; QString serviceId; @@ -60,7 +60,7 @@ class Service : public QObject public: // public methods // The constructor for the root service - Service(const QString &hostname, int port, + Service(const QString &hostname, quint16 port, const QString &informationUrl); // The constructor for action services Service(const ServiceParameters ¶ms); diff --git a/src/network/upnp/ssdpconnection.cpp b/src/network/upnp/ssdpconnection.cpp index 8349205..abf5fba 100644 --- a/src/network/upnp/ssdpconnection.cpp +++ b/src/network/upnp/ssdpconnection.cpp @@ -82,7 +82,7 @@ void SsdpConnection::slotDataReceived() while( socket_->hasPendingDatagrams() ) { datagram.clear(); - datagram.resize( socket_->pendingDatagramSize() ); + datagram.resize( (int)socket_->pendingDatagramSize() ); // Get the HTTP-like content socket_->readDatagram( datagram.data(), datagram.size() ); @@ -106,7 +106,7 @@ void SsdpConnection::slotDataReceived() // Send a broadcast to detect all devices -void SsdpConnection::queryDevices(int bindPort) +void SsdpConnection::queryDevices( quint16 bindPort ) { #ifdef KMESSDEBUG_UPNP_GENERAL kDebug() << "Sending broadcast packet."; @@ -118,10 +118,12 @@ void SsdpConnection::queryDevices(int bindPort) QString data = "M-SEARCH * HTTP/1.1\r\n" "Host:239.255.255.250:1900\r\n" - // "ST:upnp:rootdevice\r\n" - "ST:urn:schemas-upnp-org:device:InternetGatewayDevice:1\r\n" "Man:\"ssdp:discover\"\r\n" "MX:3\r\n" + "ST:urn:schemas-upnp-org:device:InternetGatewayDevice:1\r\n" +// "ST:urn:schemas-upnp-org:device:WANIPConnection:1\r\n" +// "ST:urn:schemas-upnp-org:device:WANPPPConnection:1\r\n" +// "ST:upnp:rootdevice\r\n" "\r\n"; // Bind the socket to a certain port @@ -132,7 +134,7 @@ void SsdpConnection::queryDevices(int bindPort) } // Send the data - int bytesWritten = socket_->writeDatagram( data.toAscii(), address, 1900 ); + qint64 bytesWritten = socket_->writeDatagram( data.toAscii(), address, 1900 ); if(bytesWritten == -1) { diff --git a/src/network/upnp/ssdpconnection.h b/src/network/upnp/ssdpconnection.h index bb83afe..1351bd4 100644 --- a/src/network/upnp/ssdpconnection.h +++ b/src/network/upnp/ssdpconnection.h @@ -52,7 +52,7 @@ class SsdpConnection : public QObject virtual ~SsdpConnection(); // Send a broadcast to detect all devices - void queryDevices(int bindPort = 1500); + void queryDevices( quint16 bindPort = 1500 ); private slots: // Data was received by the socket diff --git a/src/notification/chatnotification.cpp b/src/notification/chatnotification.cpp index 84f8a3f..e81276d 100644 --- a/src/notification/chatnotification.cpp +++ b/src/notification/chatnotification.cpp @@ -18,7 +18,7 @@ #include "chatnotification.h" -#include "../chat/chatwindow.h" +#include "../chat/chat.h" #include "../contact/contactbase.h" #include "../network/chatmessage.h" #include "../kmessdebug.h" @@ -26,11 +26,8 @@ #include "notificationmanager.h" #include "passivepopup.h" -#include #include -#include -#include #include @@ -51,7 +48,7 @@ ChatNotification::ChatNotification( NotificationManager* manager ) // Trigger this event's action (Raise the chat window for the calling contact) void ChatNotification::activate( QStringList /*stringList*/, QObject *object ) { - ChatWindow *chatWindow = static_cast( object ); + Chat *chatWindow = static_cast( object ); if ( chatWindow != 0 ) { // Force the window to be raised to front and focused @@ -68,7 +65,7 @@ void ChatNotification::activate( QStringList /*stringList*/, QObject *object ) // Notify the user about this event (a contact has contacted the user) -void ChatNotification::notify( const ChatMessage &message, ChatWindow *chatWindow ) +void ChatNotification::notify( const ChatMessage &message, Chat *chatWindow ) { // End if the event is coming from us instead of from a contact if( ! message.isIncoming() ) @@ -141,7 +138,8 @@ void ChatNotification::notify( const ChatMessage &message, ChatWindow *chatWindo if( contact ) { - friendlyName = Qt::escape( contact->getFriendlyName() ); + // Use rich text for friendlyname + friendlyName = contact->getFriendlyName( USE_LIST_SETTING ); status = contact->getStatus(); } else diff --git a/src/notification/chatnotification.h b/src/notification/chatnotification.h index 103c441..dc088ad 100644 --- a/src/notification/chatnotification.h +++ b/src/notification/chatnotification.h @@ -23,20 +23,21 @@ // Forward declarations +class Chat; class ChatMessage; -class ChatWindow; class PassivePopup; class NotificationManager; /** - * @brief Notifies the user when a contact has sent him/her a message. - * - * Notification is made via a popup balloon and a sound (which can be customized) - * - * @author Valerio Pilo - */ + * @brief Notifies the user when a contact has sent him/her a message. + * + * Notification is made via a popup balloon and a sound (which can be customized) + * + * @author Valerio Pilo + * @ingroup Notification + */ class ChatNotification : public QObject { Q_OBJECT @@ -51,11 +52,11 @@ class ChatNotification : public QObject // Start a chat with the contact who is calling us void startChat( QString contactHandle ); // Raise an existing chat which received a message - void raiseChat( ChatWindow *chatWindow, bool force ); + void raiseChat( Chat *chatWindow, bool force ); public slots: // Notify the user about this event (a contact has contacted the user) - void notify( const ChatMessage &message, ChatWindow *chatWindow ); + void notify( const ChatMessage &message, Chat *chatWindow ); private slots: // Trigger this event's action (Raise the chat window for the calling contact) diff --git a/src/notification/contactstatusnotification.cpp b/src/notification/contactstatusnotification.cpp index a5e8a64..1b1c957 100644 --- a/src/notification/contactstatusnotification.cpp +++ b/src/notification/contactstatusnotification.cpp @@ -20,13 +20,12 @@ #include "../contact/contact.h" #include "../contact/contactextension.h" +#include "../currentaccount.h" #include "../kmessdebug.h" #include "notificationmanager.h" #include "passivepopup.h" #include -#include -#include #include #include @@ -66,20 +65,17 @@ void ContactStatusNotification::activate( QStringList stringList, QObject */*obj // Obtains a status string like "contact has come online" for a MSN status code QString ContactStatusNotification::getStatusString( const Status status, const QString& friendlyName ) const { - // Encode the friendly name to avoid parsing HTML entities inside of it - QString name( Qt::escape( friendlyName ) ); - switch( status ) { - case STATUS_ONLINE: return i18n( "%1 is now online", name ); - case STATUS_AWAY: return i18n( "%1 has gone away", name ); - case STATUS_BE_RIGHT_BACK: return i18n( "%1 will be right back", name ); - case STATUS_BUSY: return i18n( "%1 is now busy", name ); - case STATUS_INVISIBLE: return i18n( "%1 has become invisible", name ); // Is this one even possible?! - case STATUS_IDLE: return i18n( "%1 has gone idle", name ); - case STATUS_OFFLINE: return i18n( "%1 has logged out", name ); - case STATUS_ON_THE_PHONE: return i18n( "%1 is on the phone", name ); - case STATUS_OUT_TO_LUNCH: return i18n( "%1 is out for lunch", name ); + case STATUS_ONLINE: return i18n( "%1 is now online", friendlyName ); + case STATUS_AWAY: return i18n( "%1 has gone away", friendlyName ); + case STATUS_BE_RIGHT_BACK: return i18n( "%1 will be right back", friendlyName ); + case STATUS_BUSY: return i18n( "%1 is now busy", friendlyName ); + case STATUS_INVISIBLE: return i18n( "%1 has become invisible", friendlyName ); // Is this one even possible?! + case STATUS_IDLE: return i18n( "%1 has gone idle", friendlyName ); + case STATUS_OFFLINE: return i18n( "%1 has logged out", friendlyName ); + case STATUS_ON_THE_PHONE: return i18n( "%1 is on the phone", friendlyName ); + case STATUS_OUT_TO_LUNCH: return i18n( "%1 is out for lunch", friendlyName ); default: kWarning() << "Invalid status" << status << "!"; return getStatusString( STATUS_ONLINE, friendlyName ); @@ -129,11 +125,11 @@ void ContactStatusNotification::notify( Contact *contact, bool isNeeded ) // When contacts go online, whichever may be their status, just show an 'is now online'. if( lastStatus == STATUS_OFFLINE && status != STATUS_OFFLINE && enableNotifyOnline_ ) { - text = getStatusString( STATUS_ONLINE, contact->getFriendlyName() ); + text = getStatusString( STATUS_ONLINE, contact->getFriendlyName( USE_LIST_SETTING ) ); } else { - text = getStatusString( status, contact->getFriendlyName() ); + text = getStatusString( status, contact->getFriendlyName( USE_LIST_SETTING ) ); } diff --git a/src/notification/contactstatusnotification.h b/src/notification/contactstatusnotification.h index df6110c..c873ebf 100644 --- a/src/notification/contactstatusnotification.h +++ b/src/notification/contactstatusnotification.h @@ -33,12 +33,13 @@ class PassivePopup; /** - * @brief Notifies the user when a contact has changed its MSN status - * - * Notification is made via a popup balloon and a sound (which can be customized) - * - * @author Valerio Pilo -*/ + * @brief Notifies the user when a contact has changed its MSN status + * + * Notification is made via a popup balloon and a sound (which can be customized) + * + * @author Valerio Pilo + * @ingroup Notification + */ class ContactStatusNotification : public QObject { Q_OBJECT diff --git a/src/notification/newemailnotification.cpp b/src/notification/newemailnotification.cpp index 2b6841b..173427e 100644 --- a/src/notification/newemailnotification.cpp +++ b/src/notification/newemailnotification.cpp @@ -23,8 +23,6 @@ #include "notificationmanager.h" #include "passivepopup.h" -#include -#include #include #include @@ -34,7 +32,8 @@ // Class constructor NewEmailNotification::NewEmailNotification( NotificationManager* manager ) - : isEnabled_(true) + : doNotifyInbox_(true) + , doNotifyOther_(false) , manager_(manager) { } @@ -44,13 +43,19 @@ NewEmailNotification::NewEmailNotification( NotificationManager* manager ) // Notify the user about this event (a new email has arrived) void NewEmailNotification::notify( QString sender, QString subject, bool inInbox, QString command, QString folder, QString url ) { - // If notifications are disabled, do nothing. - if( !isEnabled_ ) - return; + Q_UNUSED( url ); + Q_UNUSED( command ); currentAccount_ = CurrentAccount::instance(); - if( !inInbox && !currentAccount_->getShowOtherFolders() ) + if( inInbox && ! doNotifyInbox_ ) + { +#ifdef KMESSDEBUG_NEWEMAILNOTIFICATION + kDebug() << "New email notification disabled for inbox messages."; +#endif + return; + } + else if( ! inInbox && ! doNotifyOther_ ) { #ifdef KMESSDEBUG_NEWEMAILNOTIFICATION kDebug() << "New email notification disabled for non-inbox messages."; @@ -65,9 +70,10 @@ void NewEmailNotification::notify( QString sender, QString subject, bool inInbox QString text; QStringList stringList; - stringList.append( command ); + // Command and url are not used at the moment (jun 2008) +// stringList.append( command ); stringList.append( folder ); - stringList.append( url ); +// stringList.append( url ); text = i18n( "New email:
'%1'
by '%2'", Qt::escape( subject ), @@ -100,15 +106,16 @@ void NewEmailNotification::notify( QString sender, QString subject, bool inInbox void NewEmailNotification::activate( QStringList stringList, QObject */*object*/ ) { // Open hotmail at the given email - currentAccount_->openMail( stringList[0], stringList[1], stringList[2] ); + currentAccount_->openMail( stringList[0] ); } // Enable or disable the new email notifications -void NewEmailNotification::setEnabled( bool enable ) +void NewEmailNotification::setEnabled( bool doNotifyInbox, bool doNotifyOther ) { - isEnabled_ = enable; + doNotifyInbox_ = doNotifyInbox; + doNotifyOther_ = doNotifyOther; } diff --git a/src/notification/newemailnotification.h b/src/notification/newemailnotification.h index bc3606c..a81ef8a 100644 --- a/src/notification/newemailnotification.h +++ b/src/notification/newemailnotification.h @@ -30,12 +30,13 @@ class CurrentAccount; /** - * @brief Notifies the user when a new email is in the mailbox - * - * Notification is made via a popup balloon and a sound (which can be customized) - * - * @author Valerio Pilo - */ + * @brief Notifies the user when a new email is in the mailbox + * + * Notification is made via a popup balloon and a sound (which can be customized) + * + * @author Valerio Pilo + * @ingroup Notification + */ class NewEmailNotification : public QObject { Q_OBJECT @@ -44,7 +45,7 @@ class NewEmailNotification : public QObject // Class constructor NewEmailNotification( NotificationManager* manager ); // Enable or disable the new email notifications - void setEnabled( bool activate ); + void setEnabled( bool doNotifyInbox, bool doNotifyOther ); public slots: // Notify the user about this event (a new email has arrived) @@ -57,8 +58,10 @@ class NewEmailNotification : public QObject private: // Private properties // Current account reference CurrentAccount *currentAccount_; - // Notification status - bool isEnabled_; + // Enable the notification for incoming Inbox mail + bool doNotifyInbox_; + // Enable the notification for incoming mail in other folders + bool doNotifyOther_; // The notification manager instance NotificationManager *manager_; // The popup object which we'll be using until it disappears or gets clicked diff --git a/src/notification/notificationmanager.cpp b/src/notification/notificationmanager.cpp index 1c7db38..545582b 100644 --- a/src/notification/notificationmanager.cpp +++ b/src/notification/notificationmanager.cpp @@ -26,6 +26,10 @@ #include +#ifdef Q_WS_WIN +#include +#endif + // Initialize the instance to zero NotificationManager* NotificationManager::instance_(0); @@ -71,20 +75,50 @@ void NotificationManager::notify( QObject *caller, PassivePopup::PopupProperties return; } + CurrentAccount *currentAccount = CurrentAccount::instance(); + + // if we are busy and we're not supposed to show notifications, return. + if( ( currentAccount->getStatus() == STATUS_BUSY ) + && ( currentAccount->getHideNotificationsWhenBusy() ) ) + { + return; + } + + bool isFullscreen = false; + +#ifdef Q_WS_X11 // Check if a full screen application is running by querying the window manager and asking // the state of the currently active window KWindowInfo info = KWindowSystem::windowInfo( KWindowSystem::activeWindow(), NET::WMState | NET::FullScreen ); + isFullscreen = ( info.valid() && info.hasState( NET::FullScreen ) ); +#else + #ifdef Q_WS_WIN + // Windows version + HWND hwnd = GetForegroundWindow(); + RECT rcWindow; + GetWindowRect( hwnd, &rcWindow ); + int screenWidth = GetSystemMetrics( SM_CXSCREEN ); + int screenHeight = GetSystemMetrics( SM_CYSCREEN ); - if( info.valid() && info.hasState( NET::FullScreen ) ) + int windowWidth = ( rcWindow.right - rcWindow.left ); + int windowHeight = ( rcWindow.bottom - rcWindow.top ); + + isFullscreen = ( screenWidth == windowWidth && screenHeight == windowHeight ); + #else + #warning Fullscreen detection is not implemented for this platform. + #endif +#endif + + if( isFullscreen ) { kDebug() << "Active window is full screen, do not show the balloon."; return; } + #ifdef KMESSDEBUG_NOTIFICATIONMANAGER - else - { - kDebug() << "Active window was valid?" << info.valid() <<". If valid, it is not fullscreen: showing balloons."; - } + #ifdef Q_WS_X11 + kDebug() << "Active window was valid?" << info.valid() <<". If valid, it is not fullscreen: showing balloons."; + #endif #endif // We have to show a popup @@ -139,7 +173,7 @@ void NotificationManager::notify( QObject *caller, PassivePopup::PopupProperties props.position.ry() = minY; } - props.timeout = CurrentAccount::instance()->getNotificationDuration() * 1000; + props.timeout = currentAccount->getNotificationDuration() * 1000; popup = new PassivePopup( 0, props ); stack_.insert( props.source, popup ); diff --git a/src/notification/notificationmanager.h b/src/notification/notificationmanager.h index 7476a61..6bc6e05 100644 --- a/src/notification/notificationmanager.h +++ b/src/notification/notificationmanager.h @@ -36,6 +36,7 @@ class XAutoLock; * Notification balloons are handled as a vertical stack to avoid overlapping. * * @author Valerio Pilo + * @ingroup Notification */ class NotificationManager : public QObject { diff --git a/src/notification/passivepopup.cpp b/src/notification/passivepopup.cpp index 3dbb988..6494b26 100644 --- a/src/notification/passivepopup.cpp +++ b/src/notification/passivepopup.cpp @@ -29,6 +29,8 @@ PassivePopup::PassivePopup( QWidget *parent, PopupProperties props ) { popup_ = new PassivePopupWidget( parent ); viewWidget_ = new PassivePopupView( popup_, properties_.icon, properties_.message, properties_.status ); + // Connect the closeRequested signal to rightClicked to hide this popup + connect( viewWidget_, SIGNAL( closeRequested() ), this, SLOT( rightClicked() ) ); popup_->setTimeout( properties_.timeout ); popup_->setView( viewWidget_ ); diff --git a/src/notification/passivepopup.h b/src/notification/passivepopup.h index 3ecc76b..9368dd3 100644 --- a/src/notification/passivepopup.h +++ b/src/notification/passivepopup.h @@ -30,13 +30,14 @@ class PassivePopupWidget; /** - * @brief KMess' passive popup class for events notification - * - * Implements a customized popup balloon to be used with notifications. - * The actual layout is defined in the passivepopupinterface.ui file. - * - * @author Valerio Pilo - */ + * @brief KMess' passive popup class for events notification + * + * Implements a customized popup balloon to be used with notifications. + * The actual layout is defined in the passivepopupinterface.ui file. + * + * @author Valerio Pilo + * @ingroup Notification + */ class PassivePopup : public QObject { Q_OBJECT diff --git a/src/notification/passivepopupview.cpp b/src/notification/passivepopupview.cpp index c731f74..58c31b1 100644 --- a/src/notification/passivepopupview.cpp +++ b/src/notification/passivepopupview.cpp @@ -20,9 +20,6 @@ #include "contact/msnstatus.h" -#include -#include - // Class constructor @@ -42,6 +39,8 @@ PassivePopupView::PassivePopupView( QWidget *parent, QString icon, QString messa // Add a side image, the KMess Hummingbird, to make the popups identifiable // as belonging to KMess. kMessLogo_->setPixmap( iconLoader_->loadIcon( "kmess", KIconLoader::Desktop, KIconLoader::SizeHuge ) ); + closeButton_->setIcon( iconLoader_->loadIcon( "dialog-close", KIconLoader::Desktop, KIconLoader::SizeHuge ) ); + connect( closeButton_, SIGNAL( pressed() ), this, SIGNAL( closeRequested() ) ); } diff --git a/src/notification/passivepopupview.h b/src/notification/passivepopupview.h index 16e9582..1e48f54 100644 --- a/src/notification/passivepopupview.h +++ b/src/notification/passivepopupview.h @@ -22,21 +22,21 @@ #include "../contact/msnstatus.h" #include "ui_passivepopupview.h" -#include #include /** - * @brief Passive popups layout interface - * - * This class derives the passive popup's ui file to insert - * the layout into the actual popup balloon. - * The actual layout is defined in the passivepopupinterface.ui file. - * - * @author Valerio Pilo - */ -class PassivePopupView : public QWidget, public Ui::PassivePopupView + * @brief Passive popups layout interface + * + * This class derives the passive popup's ui file to insert + * the layout into the actual popup balloon. + * The actual layout is defined in the passivepopupinterface.ui file. + * + * @author Valerio Pilo + * @ingroup Notification + */ +class PassivePopupView : public QWidget, private Ui::PassivePopupView { Q_OBJECT @@ -53,6 +53,10 @@ class PassivePopupView : public QWidget, public Ui::PassivePopupView private: // Private properties // Icons loader KIconLoader *iconLoader_; + + signals: + // Close of popup was requested + void closeRequested(); }; #endif diff --git a/src/notification/passivepopupview.ui b/src/notification/passivepopupview.ui index 5139554..219442d 100644 --- a/src/notification/passivepopupview.ui +++ b/src/notification/passivepopupview.ui @@ -222,6 +222,32 @@ 0 + + + + + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 10 + + + + @@ -262,22 +288,6 @@ - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 10 - - - -
diff --git a/src/notification/passivepopupwidget.h b/src/notification/passivepopupwidget.h index 7ba8b25..c16cd63 100644 --- a/src/notification/passivepopupwidget.h +++ b/src/notification/passivepopupwidget.h @@ -24,13 +24,14 @@ /** - * @brief Passive popups widget - * - * This class inherits KPassivePopup to allow distinction between - * clicks of left and right mouse buttons in the popup. - * - * @author Valerio Pilo - */ + * @brief Passive popups widget + * + * This class inherits KPassivePopup to allow distinction between + * clicks of left and right mouse buttons in the popup. + * + * @author Valerio Pilo + * @ingroup Notification + */ class PassivePopupWidget : public KPassivePopup { Q_OBJECT diff --git a/src/settings/accountpage.cpp b/src/settings/accountpage.cpp index 48a9c2f..aa00c4c 100644 --- a/src/settings/accountpage.cpp +++ b/src/settings/accountpage.cpp @@ -18,31 +18,22 @@ #include "accountpage.h" +#include "../dialogs/userpicturesdialog.h" +#include "../utils/kmessconfig.h" +#include "../utils/kmessshared.h" #include "../kmessdebug.h" -#include -#include -#include #include -#include -#include -#include -#include -#include #include -#include + #include #include #include #include #include -#include #include -#include -#include #include -#include @@ -52,7 +43,8 @@ AccountPage::AccountPage( QWidget* parent ) : QWidget(parent) , Ui::AccountPage() -, hasTempImage_(false) +, hasTempPicture_(false) +, userPicturesDialog_(0) { // First setup the user interface setupUi( this ); @@ -60,28 +52,31 @@ AccountPage::AccountPage( QWidget* parent ) // Connect the UI signals connect( friendlyNameEdit_, SIGNAL( textChanged(const QString&)), this, SLOT(forwardSettingsUpdate() ) ); connect( handleEdit_, SIGNAL( textChanged(const QString&)), this, SLOT(forwardSettingsUpdate() ) ); - connect( noPictureCheckbox_, SIGNAL( toggled(bool) ), this, SLOT( showImageToggled(bool) ) ); + connect( noPictureCheckbox_, SIGNAL( toggled(bool) ), this, SLOT( showPictureToggled(bool) ) ); connect( registerButton_, SIGNAL(leftClickedUrl() ), this, SLOT( showRegisterPassport() ) ); connect( rememberCheckbox_, SIGNAL( toggled(bool) ), this, SLOT( rememberMeToggled(bool) ) ); - // Find the default image - KStandardDirs *dirs = KGlobal::dirs(); - QString defaultImage = dirs->findResource( "data", "kmess/pics/kmesspic.png" ); + // Find the default picture + KStandardDirs *dirs = KGlobal::dirs(); + QString defaultPicture = dirs->findResource( "data", "kmess/pics/kmesspic.png" ); - // Load the image in the X-Server: - defaultPixmap_ = QPixmap(defaultImage); + // Load the picture in the X-Server: + defaultPixmap_ = QPixmap(defaultPicture); customPixmap_ = defaultPixmap_; // Create the "Change..." button actions KMenu *browsePopup = new KMenu( this ); - KAction *browseSimple = new KAction( KIcon("folder-open"), i18n("Browse..."), this ); - KAction *browseResize = new KAction( KIcon("edit-cut"), i18n("Browse and crop image..."), this ); + KAction *browseSimple = new KAction( KIcon("folder-open"), i18n("Browse..."), this ); + KAction *browseResize = new KAction( KIcon("edit-cut"), i18n("Browse and crop picture..."), this ); + KAction *setPrevious = new KAction( KIcon("edit-redo"), i18n("Set previous image..."), this ); connect( browseSimple, SIGNAL(activated()), this, SLOT(pictureBrowseSimple() ) ); connect( browseResize, SIGNAL(activated()), this, SLOT(pictureBrowseResize() ) ); + connect( setPrevious, SIGNAL(activated()), this, SLOT( pictureSetPrevious() ) ); // Plug the items into the browse menu button browsePopup->addAction( browseSimple ); browsePopup->addAction( browseResize ); + browsePopup->addAction( setPrevious ); // Assign the new popup to the button and detach old connection browseButton_->setMenu( browsePopup ); @@ -106,10 +101,12 @@ AccountPage::AccountPage( QWidget* parent ) */ AccountPage::~AccountPage() { + delete userPicturesDialog_; + // Clean up the temp file. - if(hasTempImage_) + if( hasTempPicture_ ) { - QFile::remove(tempImageFile_); + QFile::remove( tempPictureFile_ ); } // no need to delete child widgets, Qt does it all for us @@ -120,21 +117,29 @@ AccountPage::~AccountPage() // Send a signal to the Chat Style page with the new account settings void AccountPage::forwardSettingsUpdate() { - emit settingsUpdated( handleEdit_->text(), friendlyNameEdit_->text(), tempImageFile_ ); + emit settingsUpdated( handleEdit_->text(), friendlyNameEdit_->text(), tempPictureFile_ ); } -// Return the filename of the currently selected image. -QString AccountPage::getPictureFileName() const +// Return the currently entered handle. +QString AccountPage::getEnteredHandle() const { - if( hasTempImage_ ) + return handleEdit_->text(); +} + + + +// Return the filename of the currently selected picture. +QString AccountPage::getEnteredPictureFileName() const +{ + if( hasTempPicture_ ) { - return tempImageFile_; + return tempPictureFile_; } else { - return imageFile_; + return pictureFile_; } } @@ -145,19 +150,20 @@ QString AccountPage::getPictureFileName() const */ void AccountPage::loadSettings(Account *account, bool isCurrentAccount) { - bool showImage; + bool showPicture; // Read settings - myHandle_ = account->getHandle(); - imageFile_ = account->getCustomImagePath(); - tempImageFile_ = account->getCustomImagePath() + ".tmp"; - showImage = account->getShowImage(); + myHandle_ = account->getHandle(); + pictureFile_ = account->getPicturePath(); + pictureDir_ = KMessConfig::instance()->getAccountDirectory( myHandle_ ) + "/displaypics/"; + tempPictureFile_ = pictureDir_ + "temporary-picture.png"; + showPicture = account->getShowPicture(); // Load default properties - friendlyNameEdit_ ->setText( account->getFriendlyName() ); + friendlyNameEdit_ ->setText( account->getFriendlyName( STRING_ORIGINAL ) ); handleEdit_ ->setText( myHandle_ ); rememberPasswordCheckBox_->setChecked( account->getSavePassword() ); - passwordEdit_ ->setText( QString::null ); + passwordEdit_ ->setText( account->getPassword() ); autologinCheckBox_ ->setChecked( account->getUseAutologin() ); @@ -177,36 +183,27 @@ void AccountPage::loadSettings(Account *account, bool isCurrentAccount) } initialStatus_->setCurrentIndex( item ); - - // The friendly name edit should only be enabled if this is the current account, and the passport account is verified; - // the "register" text and link make sense only if this is not the current account; - // the "verify" text and link should only be visible if the currently logged in account has not been verified. + // Show or hide the help links if( isCurrentAccount ) { - if( account->isVerified() ) - { - friendlyNameEdit_ ->setEnabled( true ); - registerLabel_ ->hide(); - registerButton_ ->hide(); - verifyLabel_ ->hide(); - verifyButton_ ->hide(); - } - else - { - friendlyNameEdit_ ->setEnabled( false ); - registerLabel_ ->hide(); - registerButton_ ->hide(); - verifyLabel_ ->show(); - verifyButton_ ->show(); - } + registerLabel_ ->hide(); + registerButton_ ->hide(); + friendlyNameEdit_->setEnabled( account->isVerified() ); + + // We can only know whether the account is verified when we're logged in + verifyLabel_ ->setVisible( ! account->isVerified() ); + verifyButton_ ->setVisible( ! account->isVerified() ); } else { - friendlyNameEdit_ ->setEnabled( false ); - registerLabel_ ->show(); - registerButton_ ->show(); - verifyLabel_ ->hide(); - verifyButton_ ->hide(); + verifyLabel_ ->hide(); + verifyButton_ ->hide(); + friendlyNameEdit_->setEnabled( false ); + + // Only show the Register link when creating new accounts + bool hasInvalidHandle = ( account->getHandle() == i18n("you@hotmail.com") ); + registerLabel_ ->setVisible( hasInvalidHandle ); + registerButton_ ->setVisible( hasInvalidHandle ); } // When the account is a guest account, offer a method to upgrade to a real account. @@ -222,22 +219,22 @@ void AccountPage::loadSettings(Account *account, bool isCurrentAccount) } // Load the custom pixmap if we have one. - customPixmap_ = QPixmap( imageFile_ ); + customPixmap_ = QPixmap( pictureFile_ ); - if(customPixmap_.isNull()) + if( customPixmap_.isNull() ) { // Failed to load customPixmap_ = defaultPixmap_; - imageFile_ = QString::null; + pictureFile_ = QString(); } // Load the pixmap pictureLabel_->setPixmap(customPixmap_); - // Set the "Show Image" checkbox + // Set the "Show Picture" checkbox // Run the event manually this time to update the GUI. - noPictureCheckbox_->setChecked( ! showImage ); - showImageToggled( ! showImage ); + noPictureCheckbox_->setChecked( ! showPicture ); + showPictureToggled( ! showPicture ); // Force update of the preview in the Chat Style settings page forwardSettingsUpdate(); @@ -248,7 +245,7 @@ void AccountPage::loadSettings(Account *account, bool isCurrentAccount) // Show the normal browse dialog to change display picture void AccountPage::pictureBrowseSimple() { - selectImage( false ); + selectPicture( false ); } @@ -256,7 +253,23 @@ void AccountPage::pictureBrowseSimple() // Show the browse dialog to change display picture and then allow the user to crop it void AccountPage::pictureBrowseResize() { - selectImage( true ); + selectPicture( true ); +} + + + +// Show the browse dialog to view the used user images +void AccountPage::pictureSetPrevious() +{ + if( userPicturesDialog_ == 0 ) + { + userPicturesDialog_ = new UserPicturesDialog(); + connect( userPicturesDialog_, SIGNAL( pictureUpdate( bool, QString ) ), + this, SLOT( selectPicture( bool, QString ) ) ); + } + + userPicturesDialog_->updateWidgets( myHandle_ ); + userPicturesDialog_->show(); } @@ -267,16 +280,55 @@ void AccountPage::pictureBrowseResize() void AccountPage::saveSettings( Account *account ) { QString password; - QString imageName = 0; - QString tempImageName = 0; + QString pictureName; Status initialStatus; QString newFriendlyName; - QDir imageFolder; - bool showImage; - bool success; + QDir pictureFolder; + bool showPicture; // Read settings - showImage = ! noPictureCheckbox_->isChecked(); + showPicture = ! noPictureCheckbox_->isChecked(); + + // Update the picture if we have one. This is done before changing the handle, so the new picture is saved at the old account dir + // and can be moved to the new one easily + if( hasTempPicture_ ) + { + if( ! showPicture ) + { + // The temporary file is no longer needed. + QFile::remove( tempPictureFile_ ); + hasTempPicture_ = false; + + // Leaving variable 'pictureName' empty, which means no image is selected + } + else + { + // Retrieve the picture's hash + QString msnObjectHash( KMessShared::generateFileHash( tempPictureFile_ ).toBase64() ); + const QString safeMsnObjectHash( msnObjectHash.replace( QRegExp("[^a-zA-Z0-9+=]"), "_" ) ); + + // Save the new display picture with its hash as name, to ensure correct caching + pictureName = msnObjectHash + ".png"; + pictureFolder = QDir( pictureDir_ ); + + // Do not overwrite identical pictures + if( ! pictureFolder.exists( pictureName ) ) + { + if( pictureFolder.rename( tempPictureFile_, pictureName ) ) + { + // The temp picture has now its final name, nothing is left to be removed + hasTempPicture_ = false; + } + else + { + kWarning() << "The display picture file could not be renamed from" << tempPictureFile_ << "to" << pictureName << "."; + } + } + } + + // Set the new picture + account->setPicturePath( pictureDir_ + pictureName ); + } // When the account is a guest account, see if the user wanted to "upgrade" it. if( account->isGuestAccount() ) @@ -290,7 +342,7 @@ void AccountPage::saveSettings( Account *account ) // If the account is not verified, don't change the nickname. if( ! account->isVerified() ) { - newFriendlyName = account->getFriendlyName(); + newFriendlyName = account->getFriendlyName( STRING_ORIGINAL ); } else { @@ -302,8 +354,8 @@ void AccountPage::saveSettings( Account *account ) // Switch option "remember password" to true only if also the password is not empty account->setSavePassword( rememberPasswordCheckBox_->isChecked() && ! account->getPassword().isEmpty() ); // Switch option "autologin" to true only if the option "save password" is true - account->setUseAutologin( autologinCheckBox_->isChecked() && account->getSavePassword() ); - account->setShowImage( showImage ); + account->setUseAutologin( autologinCheckBox_->isChecked() && account->getSavePassword() ); + account->setShowPicture( showPicture ); // Update the initial status switch( initialStatus_->currentIndex() ) @@ -318,34 +370,6 @@ void AccountPage::saveSettings( Account *account ) default: initialStatus = STATUS_ONLINE; break; } account->setInitialStatus( initialStatus ); - - // Update the picture if we have one. - if(hasTempImage_) - { - if( ! showImage) - { - // The temporary file is no longer needed. - QFile::remove(tempImageFile_); - hasTempImage_ = false; - } - else - { - imageName = account->getNewCustomImagePath(); - - // Rename the temp file, place it over the new file - imageFolder = QDir( QFileInfo(imageName).dir() ); - success = imageFolder.rename( tempImageFile_, imageName ); - hasTempImage_ = false; - - if( ! success ) - { - kWarning() << "The display picture file could not be renamed from \"" << tempImageFile_ << "\" to \"" << imageName << "\"."; - } - } - } - - // Create the MSN Object again. - account->updateMsnObject(); } @@ -362,24 +386,22 @@ void AccountPage::rememberMeToggled(bool noGuest) /* - * Allow the user to select an image, and convert it to 96x96, place it in a temp file. + * Allow the user to select a picture, and convert it to 96x96, then place it in a temp file. */ -void AccountPage::selectImage( bool resize ) +void AccountPage::selectPicture( bool resize, QString picturePath ) { // This code is partially borrowed from Kopete. KStandardDirs *dirs = KGlobal::dirs(); bool isRemoteFile = false; - QString safeHandle; KUrl filePath; QString localFilePath; - QString tempImageName; - QImage imageData; + QImage pictureData; - // all images: dirs->findAllResources("data", "kdm/pics/users/*.png") + // all pictures: dirs->findAllResources("data", "kdm/pics/users/*.png") // default dir: dirs->findResource("data", "kdm/pics/users/"); - // Get the resourcedir which contains the largest collection of images. + // Get the resourcedir which contains the largest collection of pictures. // This fixes a problem with SuSE, where /etc/opt/kde/share is returned instead of /opt/kde3/share QString startDir; QStringList kdmDirs = dirs->findDirs("data", "kdm/pics/users/"); @@ -397,7 +419,15 @@ void AccountPage::selectImage( bool resize ) } // Show the open file dialog - filePath = KFileDialog::getImageOpenUrl( startDir, this, i18n( "Display Picture" ) ); + if( picturePath.isEmpty() ) + { + filePath = KFileDialog::getImageOpenUrl( startDir, this, i18n( "Display Picture" ) ); + } + else + { + filePath = picturePath; + } + if(filePath.isEmpty()) { return; @@ -415,7 +445,7 @@ void AccountPage::selectImage( bool resize ) // KIO::NetAccess::download fills the localFilePath field. if( ! KIO::NetAccess::download(filePath, localFilePath, this ) ) { - KMessageBox::sorry(this, i18n("Downloading of display image failed"), i18n("KMess")); + KMessageBox::sorry( this, i18n("Downloading of display picture failed"), i18n("KMess") ); return; } @@ -423,50 +453,59 @@ void AccountPage::selectImage( bool resize ) } - // Convert the image to the correct format. + // Convert the picture to the correct format. // We use a temporary filename first and replace the original if you press OK. - imageData = QImage(localFilePath); // Load image data + pictureData = QImage( localFilePath ); // Load picture data // Remove any temporary files if(isRemoteFile) { - KIO::NetAccess::removeTempFile(localFilePath); + KIO::NetAccess::removeTempFile( localFilePath ); } - // Allow the user to select a region of the image + // Allow the user to select a region of the picture if( resize ) { - imageData = KPixmapRegionSelectorDialog::getSelectedImage( QPixmap::fromImage( imageData ), 96, 96, this ); + pictureData = KPixmapRegionSelectorDialog::getSelectedImage( QPixmap::fromImage( pictureData ), 96, 96, this ); } // Close the dialog if cancel was clicked - if( imageData.isNull() ) + if( pictureData.isNull() ) { return; } - imageData = imageData.scaled( 96, 96, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation ); // Makes smallest edge 96 pixels, preserving aspect ratio + pictureData = pictureData.scaled( 96, 96, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation ); // Makes smallest edge 96 pixels, preserving aspect ratio - if( imageData.width() != 96 || imageData.height() != 96 ) + if( pictureData.width() != 96 || pictureData.height() != 96 ) { - // Copy the middle part of the image. - imageData = imageData.copy( (imageData.width() - 96) / 2, // X - (imageData.height() - 96) / 2, // Y - 96, 96 ); + // Copy the middle part of the picture. + pictureData = pictureData.copy( (pictureData.width() - 96) / 2, // X + (pictureData.height() - 96) / 2, // Y + 96, 96 ); } - if( imageData.save(tempImageFile_, "PNG") ) + // Create any missing directories. + QDir dir; + QFileInfo file( tempPictureFile_ ); + + if( ! dir.mkpath( file.absolutePath() ) ) { - // Sucess! Update the preview image - customPixmap_ = QPixmap(tempImageFile_); - pictureLabel_->setPixmap(customPixmap_); - hasTempImage_ = true; + kWarning() << "Making the account folder failed! Path was" << file.absolutePath(); + } + + if( pictureData.save( tempPictureFile_, "PNG" ) ) + { + // Sucess! Update the preview picture + customPixmap_ = QPixmap( tempPictureFile_ ); + pictureLabel_->setPixmap( customPixmap_ ); + hasTempPicture_ = true; } else { KMessageBox::sorry( this, i18n( "An error occurred when trying to change the display picture.\n" - "Make sure that you have selected a correct image file" ), + "Make sure that you have selected an existing picture file." ), i18n( "KMess" ) ); } @@ -476,11 +515,11 @@ void AccountPage::selectImage( bool resize ) -// Slot running when the "Show image" checkbox was toggled. -void AccountPage::showImageToggled(bool noImage) +// Slot running when the "Show picture" checkbox was toggled. +void AccountPage::showPictureToggled( bool noPicture ) { - browseButton_ -> setEnabled( ! noImage ); - pictureLabel_ -> setEnabled( ! noImage ); + browseButton_->setEnabled( ! noPicture ); + pictureLabel_->setEnabled( ! noPicture ); } @@ -488,8 +527,8 @@ void AccountPage::showImageToggled(bool noImage) // The user pressed the "Create new account" button void AccountPage::showRegisterPassport() { - // KRun auto-deletes itself. - new KRun( KUrl("http://register.passport.com/"), window() ); + // Launch the browser for the given URL + KMessShared::openBrowser( KUrl( "http://register.passport.com/" ) ); } diff --git a/src/settings/accountpage.h b/src/settings/accountpage.h index 9f6d1eb..400ea53 100644 --- a/src/settings/accountpage.h +++ b/src/settings/accountpage.h @@ -26,9 +26,15 @@ #include #include +class UserPicturesDialog; - -class AccountPage : public QWidget, public Ui::AccountPage +/** + * The main account settings page. + * + * @author Mike K. Bennet, Diederik van der Boor + * @ingroup Settings + */ +class AccountPage : public QWidget, private Ui::AccountPage { Q_OBJECT @@ -37,8 +43,10 @@ class AccountPage : public QWidget, public Ui::AccountPage AccountPage( QWidget* parent = 0 ); // Destructor virtual ~AccountPage(); - // Return the filename of the currently selected image. - QString getPictureFileName() const; + // Return the handle which is currently entered. + QString getEnteredHandle() const; + // Return the filename of the currently selected picture. + QString getEnteredPictureFileName() const; // Request to load the settings void loadSettings( Account *account, bool isCurrentAccount ); // Request to save the settings @@ -49,28 +57,34 @@ class AccountPage : public QWidget, public Ui::AccountPage void pictureBrowseSimple(); // Show the browse dialog to change display picture and then allow the user to crop it void pictureBrowseResize(); + // Show the browse dialog to view the used user images + void pictureSetPrevious(); // The user toggled the remember me option void rememberMeToggled(bool noGuest); - // The user pressed the browse image button - void selectImage( bool resize ); - // The user togged the show image checkbox - void showImageToggled(bool noImage); + // The user pressed the browse picture button + void selectPicture( bool resize, QString picturePath = QString() ); + // The user togged the show picture checkbox + void showPictureToggled(bool noPicture); // The user pressed the "Create new account" button void showRegisterPassport(); private: // The handle of the account QString myHandle_; - // The image file of the account - QString imageFile_; - // The location for the custom image. - QString tempImageFile_; - // Do we have a custom image or not? - bool hasTempImage_; + // The picture file of the account + QString pictureFile_; + // The location where display pictures are saved + QString pictureDir_; + // The location for the custom display picture. + QString tempPictureFile_; + // Do we have a custom display picture or not? + bool hasTempPicture_; // The pixmap for the default kmess icon QPixmap defaultPixmap_; // The pixmap for the custom user icon QPixmap customPixmap_; + // User pictures dialog + UserPicturesDialog *userPicturesDialog_; private slots: // Send a signal to the Chat Style page with the new account settings diff --git a/src/settings/accountpage.ui b/src/settings/accountpage.ui index a23ad3a..b019bb1 100644 --- a/src/settings/accountpage.ui +++ b/src/settings/accountpage.ui @@ -5,210 +5,286 @@ 0 0 - 616 - 613 + 515 + 538 - + + + 0 + - - - Enter the name other contacts should see when you're online. - - - Your friendly name: - - - false - - - - - - - - - - Enter the e-mail address of your MSN Passport account. You can register a new account at http://register.passport.com/ - - - Your email address: - - - false - - - - - - - - - - Enter the password of your MSN Passport account. You can register a new account at http://register.passport.com/ - - - Your password: - - - false - - - - - - - false - - - - 0 - 0 - - - - - - - - Remember Password - - - - - - - - 0 - 0 - - - - - 75 - 0 - - - - Display picture: - - - false - - - - - + - + - + 0 0 - - - 96 - 96 - - - - - 96 - 96 - - - - QFrame::Raised - - - true - - - false + + Your Account Information + + + + + Enter the name other contacts should see when you're online. + + + &Friendly name: + + + false + + + friendlyNameEdit_ + + + + + + + + + + Enter the e-mail address of your MSN Passport account. You can register a new account at http://register.passport.com/ + + + &Email address: + + + false + + + handleEdit_ + + + + + + + + + + Enter the password of your MSN Passport account. You can register a new account at http://register.passport.com/ + + + &Password: + + + false + + + passwordEdit_ + + + + + + + false + + + + 0 + 0 + + + + QLineEdit::PasswordEchoOnEdit + + + + + + + &Remember Password + + + + - - - Qt::Horizontal - - - QSizePolicy::Minimum - - - - 16 - 20 - - - - - - + - - - Qt::Vertical - - - QSizePolicy::Minimum - - - - 20 - 62 - - - - - - + - + 0 0 - - C&hange... + + Display Picture - - Alt+H + + Qt::AlignCenter + + false + + + false + + + + + + + + Qt::Horizontal + + + + 10 + 10 + + + + + + + + + 0 + 0 + + + + + 96 + 96 + + + + + 96 + 96 + + + + QFrame::StyledPanel + + + QFrame::Sunken + + + true + + + false + + + + + + + Qt::Horizontal + + + + 10 + 10 + + + + + + + + + + + + Qt::Horizontal + + + + 10 + 10 + + + + + + + + + 0 + 0 + + + + C&hange... + + + Alt+H + + + + + + + Qt::Horizontal + + + + 10 + 10 + + + + + + + + + + &Do not use + + + Alt+Y + + + + + + + + Qt::Vertical + + + + 17 + 17 + + + + - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 349 - 20 - - - - - - - Don't show a displa&y picture + + + Qt::Vertical - - Alt+Y + + QSizePolicy::Fixed - + + + 20 + 13 + + + @@ -218,7 +294,7 @@ It's recommended to enable this option unless you're using KMess as guest or you're using a public system (e.g. Internet cafe). - Remember the settings of this account + Re&member the settings of this account @@ -231,25 +307,28 @@ It's recommended to enable this option unless you're using KMess as guest or you If enabled, KMess automatically logs in with this account. - Login &with this account automatically at start-up + Login &with this account automatically Alt+W - - - - Status to set at login: - - - false - - - + + + + Login &as + + + false + + + initialStatus_ + + + @@ -448,6 +527,11 @@ It's recommended to enable this option unless you're using KMess as guest or you friendlyNameEdit_ handleEdit_ passwordEdit_ + rememberPasswordCheckBox_ + browseButton_ + rememberCheckbox_ + autologinCheckBox_ + initialStatus_
KPasswordDialog @@ -463,12 +547,12 @@ It's recommended to enable this option unless you're using KMess as guest or you setEnabled(bool) - 37 - 192 + 51 + 209 - 118 - 169 + 132 + 182 @@ -479,12 +563,12 @@ It's recommended to enable this option unless you're using KMess as guest or you setEnabled(bool) - 35 - 195 + 49 + 209 - 66 - 401 + 70 + 278 diff --git a/src/settings/settingsdialog.cpp b/src/settings/accountsettingsdialog.cpp similarity index 55% rename from src/settings/settingsdialog.cpp rename to src/settings/accountsettingsdialog.cpp index 3f5a222..8fc79ac 100644 --- a/src/settings/settingsdialog.cpp +++ b/src/settings/accountsettingsdialog.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - settingsdialog.cpp - description + accountsettingsdialog.cpp - description ------------------- begin : Sat Jan 11 2003 copyright : (C) 2003 by Mike K. Bennett @@ -15,40 +15,41 @@ * * ***************************************************************************/ -#include "settingsdialog.h" - -#include -#include - -#include -#include -#include +#include "accountsettingsdialog.h" #include "../network/chatmessage.h" +#include "../utils/kmessconfig.h" +#include "../accountsmanager.h" #include "../account.h" #include "../currentaccount.h" #include "../emoticonmanager.h" #include "../kmessdebug.h" #include "accountpage.h" #include "alertspage.h" -#include "emailpage.h" #include "chatloggingpage.h" #include "chatstylepage.h" #include "emoticonspage.h" +#include +#include + +#include + + // Initialize the instance to zero -SettingsDialog* SettingsDialog::instance_(0); +AccountSettingsDialog* AccountSettingsDialog::instance_(0); // The constructor -SettingsDialog::SettingsDialog( QWidget *parent ) - : KPageDialog( parent ), - account_(0) +AccountSettingsDialog::AccountSettingsDialog( QWidget *parent ) +: KPageDialog( parent ) +, account_(0) +, initialPage_( PageAccount ) { // Open the config group we'll use throughout the class - config_ = KGlobal::config()->group("SettingsDialog"); + config_ = KMessConfig::instance()->getGlobalConfig( "AccountSettingsDialog" ); // Set up the dialog box setButtons( Help | Ok | Apply | Cancel | User1 ); @@ -58,68 +59,69 @@ SettingsDialog::SettingsDialog( QWidget *parent ) restoreDialogSize( config_ ); // Create the widgets that belong in the pages - accountsPage_ = new AccountPage(); + accountPage_ = new AccountPage(); alertsPage_ = new AlertsPage(); chattingPage_ = new ChatStylePage(); chatLoggingPage_ = new ChatLoggingPage(); - emailPage_ = new EmailPage(); emoticonPage_ = new EmoticonsPage(); // Connect the account page signal to update the chatting page preview - connect( accountsPage_, SIGNAL( settingsUpdated(const QString&,const QString&,const QString&) ), + connect( accountPage_, SIGNAL( settingsUpdated(const QString&,const QString&,const QString&) ), chattingPage_, SLOT( updatePreviewDetails(const QString&,const QString&,const QString&) ) ); // Add the pages to the dialog and set them up KPageWidgetItem *page; - page = addPage( accountsPage_, i18n("Account") ); + page = addPage( accountPage_, i18n("Account") ); page->setHeader( i18n( "My Account" ) ); page->setIcon( KIcon( "user-identity" ) ); - - // Preserve the pointer to the account settings page widget, to allow automatically switching there - // when the user picture over the contact list is clicked. - accountsPageWidget_ = page; + pageWidgets_.insert( PageAccount, page ); page = addPage( alertsPage_, i18n("Alerts") ); page->setHeader( i18n( "Alerts and Notifications" ) ); page->setIcon( KIcon( "text-speak" ) ); // rationale: the computer is telling you something in a popup balloon. + pageWidgets_.insert( PageAlerts, page ); + pageWidgets_.insert( PageAlertsTabOthers, page ); page = addPage( emoticonPage_, i18n("Emoticons") ); page->setHeader( i18n( "Emoticons" ) ); page->setIcon( KIcon( "emoticons" ) ); + pageWidgets_.insert( PageEmoticons, page ); + pageWidgets_.insert( PageEmoticonsTabCustom, page ); page = addPage( chattingPage_, i18n("Chatting") ); page->setHeader( i18n( "Chatting" ) ); page->setIcon( KIcon( "format-stroke-color" ) ); // preferences-desktop-color, insert-text? + pageWidgets_.insert( PageChatStyle, page ); + pageWidgets_.insert( PageChatStyleTabText, page ); page = addPage( chatLoggingPage_, i18n("Chat Logging") ); page->setHeader( i18n( "Chat Logging" ) ); page->setIcon( KIcon( "document-save-as" ) ); - - page = addPage( emailPage_, i18n("Email") ); - page->setHeader( i18n( "Email Notification" ) ); - page->setIcon( KIcon( "mail-message" ) ); // mail-message, mail-unread-new + pageWidgets_.insert( PageChatLogging, page ); } // The destructor -SettingsDialog::~SettingsDialog() +AccountSettingsDialog::~AccountSettingsDialog() { // Save the window size before deleting it saveDialogSize( config_ ); + pageWidgets_.clear(); + instance_ = 0; -#ifdef KMESSDEBUG_SETTINGSDIALOG +#ifdef KMESSDEBUG_ACCOUNTSETTINGSDIALOG kDebug() << "DESTROYED."; #endif } -// Show the settings dialog for the given account -void SettingsDialog::changeAccountSettings( Account *account, bool isCurrentAccount ) +// Load the settings for the given account +void AccountSettingsDialog::loadSettings( Account *account, bool isCurrentAccount, Page initialPage ) { account_ = account; @@ -130,24 +132,26 @@ void SettingsDialog::changeAccountSettings( Account *account, bool isCurrentAcco } // Load account information into the widgets - accountsPage_->loadSettings( account, isCurrentAccount ); - alertsPage_->loadSettings( account ); - chattingPage_->loadSettings( account ); + accountPage_ ->loadSettings( account, isCurrentAccount ); + alertsPage_ ->loadSettings( account ); + chattingPage_ ->loadSettings( account ); chatLoggingPage_->loadSettings( account ); - emailPage_->loadSettings( account ); - emoticonPage_->loadSettings( account ); + emoticonPage_ ->loadSettings( account ); // Disable the "remove account" button for guest accounts. if( account->isGuestAccount() ) { enableButton( KDialog::User1, false ); } + + // Save the initial page for later, when the dialog is actually shown + initialPage_ = initialPage; } // Save options before closing. -void SettingsDialog::closeEvent( QCloseEvent *event ) +void AccountSettingsDialog::closeEvent( QCloseEvent *event ) { saveDialogSize( config_ ); event->accept(); @@ -156,12 +160,12 @@ void SettingsDialog::closeEvent( QCloseEvent *event ) // Return a singleton instance of the settings dialog window -SettingsDialog* SettingsDialog::instance( QWidget *parent ) +AccountSettingsDialog* AccountSettingsDialog::instance( QWidget *parent ) { // If the instance is null, create a new dialog and return that. if ( instance_ == 0 ) { - instance_ = new SettingsDialog( parent ); + instance_ = new AccountSettingsDialog( parent ); } return instance_; @@ -170,66 +174,100 @@ SettingsDialog* SettingsDialog::instance( QWidget *parent ) // Save all widget settings -void SettingsDialog::saveAccountSettings() +bool AccountSettingsDialog::saveAccountSettings() { if( account_ == 0 ) { - return; + return false; } // Save the old handle and name to check if they were changed later - QString oldAccountHandle = account_->getHandle(); - QString oldFriendlyName = account_->getFriendlyName(); + QString oldHandle = account_->getHandle(); + QString newHandle = accountPage_->getEnteredHandle(); + QString oldFriendlyName = account_->getFriendlyName( STRING_ORIGINAL ); + + // Make sure the account handle was changed off the default + if( newHandle.isEmpty() || ! Account::isValidEmail( newHandle ) + || newHandle == i18n( "you@hotmail.com" ) ) + { + KMessageBox::error( 0, i18n( "The email address you have entered is not valid, and cannot be used as an account: '%1'", newHandle ) ); + return false; + } + + // Also verify that the account name is not already listed + if( oldHandle != newHandle + && AccountsManager::instance()->getAccountByHandle( newHandle ) != 0 ) + { + KMessageBox::error( 0, i18n( "The email address you have entered is already in use: '%1'", newHandle ) ); + return false; + } // Save information from the widgets - accountsPage_->saveSettings( account_ ); - alertsPage_->saveSettings( account_ ); - chattingPage_->saveSettings( account_ ); + accountPage_ ->saveSettings( account_ ); + alertsPage_ ->saveSettings( account_ ); + chattingPage_ ->saveSettings( account_ ); chatLoggingPage_->saveSettings( account_ ); - emailPage_->saveSettings( account_ ); - emoticonPage_->saveSettings( account_ ); + emoticonPage_ ->saveSettings( account_ ); - // Commit configuration changes to disk, now - // Makes sure the settings are not lost if KMess is terminated or crashes. - KConfigGroup group = KGlobal::config()->group( "" ); - account_->saveProperties( group ); + // Let the Accounts Manager know the settings have changed. It will also make sure + // that the updated settings get synced to disk. + emit changedSettings( account_, oldHandle, oldFriendlyName ); - emit changedSettings( account_, oldAccountHandle, oldFriendlyName ); + return true; } // Select the Account page when showing the settings dialog -void SettingsDialog::showEvent( QShowEvent */*event*/ ) +void AccountSettingsDialog::showEvent( QShowEvent */*event*/ ) { - setCurrentPage( accountsPageWidget_ ); + // Switch the dialog to the specified page + setCurrentPage( pageWidgets_.at( initialPage_ ) ); + + // Switch to the tabs other than the first if needed + if( initialPage_ == PageAlertsTabOthers ) + { + alertsPage_->switchToTab( 1 ); + } + else if( initialPage_ == PageEmoticonsTabCustom ) + { + emoticonPage_->switchToTab( 1 ); + } + else if( initialPage_ == PageChatStyleTabText ) + { + chattingPage_->switchToTab( 1 ); + } } // A button has been pressed, act accordingly -void SettingsDialog::slotButtonClicked( int button ) +void AccountSettingsDialog::slotButtonClicked( int button ) { switch( button ) { - case KDialog::Ok : - saveAccountSettings(); + case KDialog::Ok: + if( ! saveAccountSettings() ) + { + return; + } + accept(); break; - case KDialog::Apply : + case KDialog::Apply: saveAccountSettings(); // Do not delete the dialog, we still need it return; break; - case KDialog::Cancel : - case KDialog::Close : + case KDialog::Cancel: + case KDialog::Close: reject(); break; - case KDialog::User1 : + case KDialog::User1: // Delete the account, but first ask the user for confirmation if( KMessageBox::warningYesNo( this, i18n("Are you sure you want to delete this account?") ) == KMessageBox::Yes ) { @@ -253,4 +291,5 @@ void SettingsDialog::slotButtonClicked( int button ) } -#include "settingsdialog.moc" + +#include "accountsettingsdialog.moc" diff --git a/src/settings/settingsdialog.h b/src/settings/accountsettingsdialog.h similarity index 53% rename from src/settings/settingsdialog.h rename to src/settings/accountsettingsdialog.h index 0c2dc74..f7cb2af 100644 --- a/src/settings/settingsdialog.h +++ b/src/settings/accountsettingsdialog.h @@ -1,5 +1,5 @@ /*************************************************************************** - settingsdialog.h - description + accountsettingsdialog.h - description ------------------- begin : Sat Jan 11 2003 copyright : (C) 2003 by Mike K. Bennett @@ -15,10 +15,10 @@ * * ***************************************************************************/ -#ifndef SETTINGSDIALOG_H -#define SETTINGSDIALOG_H +#ifndef ACCOUNTSETTINGSDIALOG_H +#define ACCOUNTSETTINGSDIALOG_H -#include +//#include #include @@ -32,69 +32,83 @@ class ChatMessage; class ChatMessageStyle; class ChatMessageView; class ChatStylePage; -class EmailPage; class EmoticonsPage; -class KConfig; - /** + * The account settings dialog. + * * @author Mike K. Bennett + * @ingroup Settings */ -class SettingsDialog : public KPageDialog +class AccountSettingsDialog : public KPageDialog { Q_OBJECT + public: // Public enumerations + // A list of all the settings tabs, used to switch the dialog to a determined page and tab when needed + enum Page + { + PageAccount = 0 + , PageAlerts + , PageAlertsTabOthers + , PageEmoticons + , PageEmoticonsTabCustom + , PageChatStyle + , PageChatStyleTabText + , PageChatLogging + }; + public: // The constructor - SettingsDialog( QWidget *parent=0 ); + AccountSettingsDialog( QWidget *parent = 0 ); // The destructor - ~SettingsDialog(); + ~AccountSettingsDialog(); // Show the settings dialog for the given account - void changeAccountSettings(Account *account, bool isCurrentAccount); + void loadSettings( Account *account, bool isCurrentAccount, Page initialPage ); // Return a singleton instance of the settings dialog window - static SettingsDialog* instance( QWidget *parent = 0 ); + static AccountSettingsDialog *instance( QWidget *parent ); private: // Private methods // Save all widget settings - void saveAccountSettings(); + bool saveAccountSettings(); // Select the Account page when showing the settings dialog - void showEvent( QShowEvent *event ); + void showEvent( QShowEvent *event ); private slots: // Private slots // Save the window options before closing. - void closeEvent(QCloseEvent *event); + void closeEvent( QCloseEvent *event ); // A button has been pressed, act accordingly - void slotButtonClicked( int button ); + void slotButtonClicked( int button ); private: // Private attributes // The account being edited - Account *account_; + Account *account_; // The configuration group from which window size is loaded from and saved to - KConfigGroup config_; + KConfigGroup config_; // The widget for entering profile data (handle, name, password). - AccountPage *accountsPage_; - // Page widget of the account settings, saved to switch to it when clicking on the own picture over the contact list. [see showEvent()] - KPageWidgetItem *accountsPageWidget_; + AccountPage *accountPage_; + // Page widgets of the settings, saved to switch to a determined tab + QList pageWidgets_; // The widget for selecting idle timer and notification timer durations. - AlertsPage *alertsPage_; + AlertsPage *alertsPage_; // The widget for selecting the user's font. - ChatStylePage *chattingPage_; + ChatStylePage *chattingPage_; // A widget for chat logging settings - ChatLoggingPage *chatLoggingPage_; - // The widget for selecting information about email notifications - EmailPage *emailPage_; + ChatLoggingPage *chatLoggingPage_; // The widget for selecting emoticon styles - EmoticonsPage *emoticonPage_; + EmoticonsPage *emoticonPage_; + // The page where to open the settings dialog at + Page initialPage_; // The instance of the singleton settings dialog window - static SettingsDialog *instance_; + static AccountSettingsDialog *instance_; signals: // The settings have been changed - void changedSettings( Account *account, QString oldHandle, QString oldFriendlyName ); + void changedSettings( Account *account, QString oldHandle, QString oldFriendlyName ); // Request that the given account be deleted - void deleteAccount(Account *account); + void deleteAccount( Account *account ); }; #endif diff --git a/src/settings/accountsmanagerpage.cpp b/src/settings/accountsmanagerpage.cpp new file mode 100644 index 0000000..c0787ed --- /dev/null +++ b/src/settings/accountsmanagerpage.cpp @@ -0,0 +1,176 @@ +/*************************************************************************** + emoticonspage.cpp - description + ------------------- + begin : Sat May 3 2008 + copyright : (C) 2008 by Valerio Pilo + email : valerio@kmess.org + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "accountsmanagerpage.h" + +#include "../utils/kmessconfig.h" +#include "../account.h" +#include "../accountsmanager.h" +#include "../kmessdebug.h" + +#include + +#include + + + + +/** + * Constructor + * + * @param parent Parent widget + */ +AccountsManagerPage::AccountsManagerPage( QWidget *parent ) +: QWidget(parent) +, Ui::AccountsManagerPage() +{ + // First setup the user interface + setupUi( this ); + + // Connect the signals + connect( addAccountButton_, SIGNAL( clicked() ), + this, SLOT( showAddAccountDialog() ) ); + connect( configureAccountButton_, SIGNAL( clicked() ), + this, SLOT( configureAccount() ) ); + connect( removeAccountButton_, SIGNAL( clicked() ), + this, SLOT( deleteAccount() ) ); + connect( accountsList_, SIGNAL( itemActivated(QListWidgetItem*) ), + this, SLOT( configureAccount() ) ); + connect( accountsList_, SIGNAL( itemSelectionChanged() ), + this, SLOT( accountSelected() ) ); + + accountsManager_ = AccountsManager::instance(); + + connect( accountsManager_, SIGNAL( accountChanged(Account*,QString,QString) ), + this, SLOT ( readProperties() ) ); + + readProperties(); +} + + + +/** + * Destructor + */ +AccountsManagerPage::~AccountsManagerPage() +{ +} + + + +/** + * Update the buttons status when accounts get selected + */ +void AccountsManagerPage::accountSelected() +{ + bool hasSelection = ( ! accountsList_->selectedItems().isEmpty() ); + + configureAccountButton_->setEnabled( hasSelection ); + removeAccountButton_ ->setEnabled( hasSelection ); +} + + + +/** + * Open the currently selected account's settings + */ +void AccountsManagerPage::configureAccount() +{ + if( accountsList_->selectedItems().isEmpty() ) + { + return; + } + + QListWidgetItem * selection = accountsList_->selectedItems().first(); + QString accountHandle = selection->data( Qt::UserRole ).toString(); + +#ifdef KMESSDEBUG_SETTINGSDIALOG + kDebug() << "Opening Account Settings for account" << accountHandle << "."; +#endif + + Account *account = accountsManager_->getAccountByHandle( accountHandle ); + accountsManager_->showAccountSettings( account, window() ); +} + + + +/** + * Delete the currently selected account + */ +void AccountsManagerPage::deleteAccount() +{ + if( accountsList_->selectedItems().isEmpty() ) + { + kWarning() << "No account was selected for deletion!"; + return; + } + + QListWidgetItem *selection = accountsList_->selectedItems().first(); + + Account *account = accountsManager_->getAccountByHandle( selection->data( Qt::UserRole ).toString() ); + if( ! account ) + { + return; + } + + int result = KMessageBox::warningYesNo( + this, + i18n("Are you sure you want to delete the account '%1' ?
" + "All settings of this account will be lost.", + account->getHandle() ) ); + if( result != KMessageBox::Yes ) + { + return; + } + + accountsManager_->deleteAccount( account ); + readProperties(); +} + + + +/** + * Load the settings of the dialog + */ +void AccountsManagerPage::readProperties() +{ + accountsList_->clear(); + const QList accountsList = AccountsManager::instance()->getAccounts(); + foreach( Account *account, accountsList ) + { + QString text( account->getFriendlyName() + "\n" + account->getHandle() ); + QListWidgetItem *item = new QListWidgetItem( QIcon( account->getPicturePath() ), text, accountsList_ ); + item->setData( Qt::UserRole, account->getHandle() ); + } + + // Update the viewport and the buttons + accountSelected(); +} + + + +/** + * Show the Account Settings dialog for a new account + */ +void AccountsManagerPage::showAddAccountDialog() +{ + accountsManager_->showAccountSettings(); +} + + + +#include "accountsmanagerpage.moc" diff --git a/src/settings/accountsmanagerpage.h b/src/settings/accountsmanagerpage.h new file mode 100644 index 0000000..086b9ff --- /dev/null +++ b/src/settings/accountsmanagerpage.h @@ -0,0 +1,78 @@ +/*************************************************************************** + accountsmanagerpage.h - description + ------------------- + begin : Sat May 3 2008 + copyright : (C) 2008 by Valerio Pilo + email : valerio@kmess.org + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef ACCOUNTSMANAGERPAGE_H +#define ACCOUNTSMANAGERPAGE_H + +#include "ui_accountsmanagerpage.h" + +#include + + +// Forward declarations +class AccountsManager; + + + +/** + * Settings page for the various accounts. + * + * @author Valerio Pilo + * @ingroup Settings + */ +class AccountsManagerPage : public QWidget, private Ui::AccountsManagerPage +{ + Q_OBJECT + + + public: // public methods + + // The constructor + AccountsManagerPage( QWidget *parent = 0 ); + // The destructor + virtual ~AccountsManagerPage(); + + + + public slots: + + // Open the currently selected account's settings + void configureAccount(); + // Delete the given account + void deleteAccount(); + // Show the Account Settings dialog for a new account + void showAddAccountDialog(); + + + private slots: + + // Update the buttons status when accounts get selected + void accountSelected(); + // Load the settings of the dialog + void readProperties(); + + + private: // private properties + + AccountsManager *accountsManager_; + + + +}; + +#endif + diff --git a/src/settings/accountsmanagerpage.ui b/src/settings/accountsmanagerpage.ui new file mode 100644 index 0000000..48981eb --- /dev/null +++ b/src/settings/accountsmanagerpage.ui @@ -0,0 +1,135 @@ + + AccountsManagerPage + + + + 0 + 0 + 438 + 366 + + + + + 0 + + + + + + 0 + 0 + + + + Saved accounts: + + + false + + + + + + + true + + + QAbstractItemView::SelectRows + + + + 62 + 62 + + + + + 0 + 64 + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 170 + 21 + + + + + + + + Click + + + Click here to add a new customized emoticons to send to your contacts. + + + &Add account... + + + Alt+W + + + + + + + false + + + Select an emoticon and click here to delete it. + + + &Edit + + + Alt+V + + + + + + + false + + + Select an emoticon and click here to delete it. + + + &Remove + + + Alt+V + + + + + + + + + qPixmapFromMimeSource + + + KListWidget + QListWidget +
klistwidget.h
+
+
+ + +
diff --git a/src/settings/alertspage.cpp b/src/settings/alertspage.cpp index 7f44443..6408eeb 100644 --- a/src/settings/alertspage.cpp +++ b/src/settings/alertspage.cpp @@ -18,6 +18,8 @@ #include "alertspage.h" #include "../account.h" +#include "../kmessdebug.h" +#include @@ -47,12 +49,14 @@ AlertsPage::AlertsPage( QWidget *parent ) void AlertsPage::loadSettings( const Account *account ) { // Set the notifications widgets - showOnlineNotificationsCheckBox_->setChecked( account->getNotifyContactsOnline() ); - showChatStartNotificationsCheckBox_->setChecked( account->getNotifyContactsChatStart() ); + showOnlineNotificationsCheckBox_ ->setChecked( account->getNotifyContactsOnline() ); + showChatStartNotificationsCheckBox_ ->setChecked( account->getNotifyContactsChatStart() ); showChatMessagesNotificationsCheckBox_->setChecked( account->getNotifyContactsChatMessages() ); - showStatusNotificationsCheckBox_->setChecked( account->getNotifyContactsStatus() ); - showOfflineNotificationsCheckBox_->setChecked( account->getNotifyContactsOffline() ); - showEmailsNotificationsCheckBox_->setChecked( account->getNotifyEmails() ); + showStatusNotificationsCheckBox_ ->setChecked( account->getNotifyContactsStatus() ); + showOfflineNotificationsCheckBox_ ->setChecked( account->getNotifyContactsOffline() ); + showInboxEmailNotificationsCheckBox_ ->setChecked( account->getNotifyInboxEmails() ); + showOtherEmailNotificationsCheckBox_ ->setChecked( account->getNotifyOtherEmails() ); + hideNotificationsWhenBusyCheckBox_ ->setChecked( account->getHideNotificationsWhenBusy() ); // Set the notification popups duration notificationDurationSpinBox_->setValue( account->getNotificationDuration() ); @@ -61,10 +65,17 @@ void AlertsPage::loadSettings( const Account *account ) notificationsToggled(); // Set the other alerts widgets - useIdleTimerCheckBox_->setChecked( account->getUseIdleTimer() ); - idleTimeSpinBox_->setValue( account->getIdleTime() ); - shakeNudgeCheckBox_->setChecked( account->getShakeNudge() ); - nowListeningCheckBox_->setChecked( account->getShowNowListening() ); + idleTimeSpinBox_ ->setValue ( account->getIdleTime() ); + useIdleTimerCheckBox_ ->setChecked( account->getUseIdleTimer() ); + shakeNudgeCheckBox_ ->setChecked( account->getShakeNudge() ); + nowListeningCheckBox_ ->setChecked( account->getShowNowListening() ); + showEmailInfoCheckBox_->setChecked( account->getShowEmail() ); + showWinksCheckBox_ ->setChecked( account->getShowWinks() ); + +#ifndef HAVE_XSCREENSAVER + useIdleTimerCheckBox_ ->setEnabled( false ); + idleTimeSpinBox_ ->setEnabled( false ); +#endif } @@ -92,13 +103,34 @@ void AlertsPage::saveSettings( Account *account ) account->setAlertsInformation ( useIdleTimerCheckBox_->isChecked(), idleTimeSpinBox_->value(), shakeNudgeCheckBox_->isChecked(), - nowListeningCheckBox_->isChecked() ); + nowListeningCheckBox_->isChecked(), + showWinksCheckBox_->isChecked() ); account->setNotificationsInformation( showOnlineNotificationsCheckBox_->isChecked(), showStatusNotificationsCheckBox_->isChecked(), showChatStartNotificationsCheckBox_->isChecked(), showChatMessagesNotificationsCheckBox_->isChecked(), showOfflineNotificationsCheckBox_->isChecked(), - showEmailsNotificationsCheckBox_->isChecked(), - notificationDurationSpinBox_->value() ); + showInboxEmailNotificationsCheckBox_->isChecked(), + showOtherEmailNotificationsCheckBox_->isChecked(), + notificationDurationSpinBox_->value(), + hideNotificationsWhenBusyCheckBox_->isChecked() ); } + + + +// Force the page onto a specific tab +void AlertsPage::switchToTab( int tabIndex ) +{ + if( tabIndex < 0 || tabIndex > tabWidget_->count() ) + { + kWarning() << "Invalid tab index" << tabIndex << "selected!"; + return; + } + + tabWidget_->setCurrentIndex( tabIndex ); +} + + + +#include "alertspage.moc" diff --git a/src/settings/alertspage.h b/src/settings/alertspage.h index afdbbc1..83e4c7c 100644 --- a/src/settings/alertspage.h +++ b/src/settings/alertspage.h @@ -30,8 +30,10 @@ class Account; /** * Setttings page for the alerts settings page. + * + * @ingroup Settings */ -class AlertsPage : public QWidget, public Ui::AlertsPage +class AlertsPage : public QWidget, private Ui::AlertsPage { Q_OBJECT @@ -44,6 +46,8 @@ class AlertsPage : public QWidget, public Ui::AlertsPage void loadSettings( const Account *account ); // Save an account's information according to the widgets void saveSettings( Account *account ); + // Force the page onto a specific tab + void switchToTab( int tabIndex ); private slots: // Update status of dependent options for the notifications diff --git a/src/settings/alertspage.ui b/src/settings/alertspage.ui index 393cec7..724c1d1 100644 --- a/src/settings/alertspage.ui +++ b/src/settings/alertspage.ui @@ -5,320 +5,519 @@ 0 0 - 472 - 456 + 534 + 407 - + + + 0 + - - - Popup notifications + + + 0 - - - - - Show notifications when your contacts: - - - false - - - - - - - If enabled, a popup message is shown when one of your contacts connects to MSN. - - - &Go online - - - Alt+G - - - true - - - - - - - If enabled, a popup message is shown when one of your contacts starts a conversation with you. - - - Start a &chat with you - - - Alt+C - - - true - - - - - - - If enabled, a popup message is shown every time one of your contacts sends you a message. - - - S&end you a message - - - Alt+E - - - - - - - If enabled, a popup message is also shown when your contacts change their MSN status. - - - Change their &status - - - Alt+S - - - - - - - If enabled, a popup message is also shown when one of your contacts goes offline. - - - Go o&ffline - - - Alt+F - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 10 - 10 - - - - - - - - If enabled, a popup message is also shown when one of your contacts goes offline. - - - Show notifications when you recei&ve an email - - - Alt+V - - - true - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 10 - 10 - - - - - - - - - - Controls the number of seconds before popups are hidden. - - - Hide popups after - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - false - - - - - - - - - - seconds - - - false - - - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 51 - 20 - - - - - - - - - - - - - <qt><p>When contacts like to have your attention they can send a nudge. By default the chat window shakes when a nudge is received or sent. Disable this option if the shaking effect is too obtrusive.</p> + + + + 0 + 0 + 526 + 374 + + + + Popup Notifications + + + + + + Contact Events + + + + + + Show notifications when your contacts: + + + + + + + + + If enabled, a popup message is shown when one of your contacts connects to MSN. + + + &Go online + + + Alt+G + + + true + + + + + + + If enabled, a popup message is shown when one of your contacts starts a conversation with you. + + + Start a &chat with you + + + Alt+C + + + true + + + + + + + If enabled, a popup message is shown every time one of your contacts sends you a message. + + + S&end you a message + + + Alt+E + + + + + + + If enabled, a popup message is also shown when your contacts change their MSN status. + + + Change their &status + + + Alt+S + + + + + + + If enabled, a popup message is also shown when one of your contacts goes offline. + + + Go o&ffline + + + Alt+F + + + + + + + + + &Hide notifications when my status is set to Busy + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 10 + 10 + + + + + + + + Email Events + + + + + + Show notifications when email is received: + + + + + + + + + If enabled, a popup message is also shown when one of your contacts goes offline. + + + In the Inbox + + + Alt+V + + + true + + + + + + + If enabled, a popup message also appears when e-mail is received in other folders. This option is only available for Hotmail accounts. + + + In other folders + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 10 + 10 + + + + + + + + + + Controls the number of seconds before popups are hidden. + + + Hide popups after + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false + + + + + + + + + + seconds + + + false + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 51 + 20 + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 13 + 33 + + + + + + + + + + 0 + 0 + 526 + 374 + + + + Other Alerts + + + + + + &Show winks from contacts + + + + + + + <qt><p>When contacts like to have your attention they can send a nudge. By default the chat window shakes when a nudge is received or sent. Disable this option if the shaking effect is too obtrusive.</p> <p>When this option is enabled, KMess still limits the shaking effect. Contacts may send multiple nudges at once, but KMess only shakes the chat window with the first nudge.</p></qt> - - - Shake the chat &window when a nudge is received or sent - - - Alt+W - + + + Shake the chat &window when a nudge is received or sent + + + Alt+W + + + + + + + If enabled, a popup is shown when e-mail is received in your inbox. The number of unread e-mail messages is shown above the contact list. This option is only available for Hotmail accounts. + + + Display a count of unread mail + + + + + + + If enabled, KMess informs contacts what you're listening to. This information is retrieved from the currently active audio player applications. + + + Inform contacts w&hich song I am listening to + + + Alt+H + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 10 + 10 + + + + + + + + If enabled, your status will be changed automatically to "Away-Idle" when you're not using the computer for a few minutes. If this option is not available, KMess was built without support for this feature. + + + Change status to "Awa&y-Idle" when inactive + + + Alt+Y + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + Controls the number of minutes before KMess changes the status to "Away-Idle". + + + Become idle after + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false + + + + + + + Controls the number of minutes before KMess changes the status to "Away-Idle". + + + + + + + Controls the number of minutes before KMess changes the status to "Away-Idle". + + + minutes + + + false + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 71 + 20 + + + + + + + + + + Qt::Vertical + + + + 20 + 99 + + + + + + - - - - If enabled, KMess informs contacts what you're listening to. This information is retrieved from the currently active audio player applications. - - - Inform contacts w&hich song I am listening to. - - - Alt+H - - - - - - - If enabled, your status will be changed automatically to "Away-Idle" when you're not using the computer for a few minutes. - - - Change status to "Awa&y-Idle" when inactive - - - Alt+Y - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - Controls the number of minutes before KMess changes the status to "Away-Idle". - - - Become idle after - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - false - - - - - - - - - - minutes - - - false - - - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 71 - 20 - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - qPixmapFromMimeSource + + tabWidget_ + showOnlineNotificationsCheckBox_ + showChatStartNotificationsCheckBox_ + showOfflineNotificationsCheckBox_ + showChatMessagesNotificationsCheckBox_ + showStatusNotificationsCheckBox_ + showInboxEmailNotificationsCheckBox_ + showOtherEmailNotificationsCheckBox_ + notificationDurationSpinBox_ + shakeNudgeCheckBox_ + showEmailInfoCheckBox_ + nowListeningCheckBox_ + useIdleTimerCheckBox_ + idleTimeSpinBox_ + - + + + useIdleTimerCheckBox_ + toggled(bool) + idleTimeSpinBox_ + setEnabled(bool) + + + 161 + 143 + + + 192 + 171 + + + + + useIdleTimerCheckBox_ + toggled(bool) + textLabel3 + setEnabled(bool) + + + 123 + 139 + + + 114 + 169 + + + + + useIdleTimerCheckBox_ + toggled(bool) + textLabel4 + setEnabled(bool) + + + 255 + 143 + + + 254 + 177 + + + + diff --git a/src/settings/chatloggingpage.cpp b/src/settings/chatloggingpage.cpp index 6b08657..1ce89f7 100644 --- a/src/settings/chatloggingpage.cpp +++ b/src/settings/chatloggingpage.cpp @@ -128,3 +128,5 @@ void ChatLoggingPage::saveSettings( Account *account ) } + +#include "chatloggingpage.moc" diff --git a/src/settings/chatloggingpage.h b/src/settings/chatloggingpage.h index 3b0f201..0d28560 100644 --- a/src/settings/chatloggingpage.h +++ b/src/settings/chatloggingpage.h @@ -30,8 +30,10 @@ class Account; /** * Setttings page for the alerts settings page. + * + * @ingroup Settings */ -class ChatLoggingPage : public QWidget, public Ui::ChatLoggingPage +class ChatLoggingPage : public QWidget, private Ui::ChatLoggingPage { Q_OBJECT diff --git a/src/settings/chatloggingpage.ui b/src/settings/chatloggingpage.ui index 61a58e3..b7c8473 100644 --- a/src/settings/chatloggingpage.ui +++ b/src/settings/chatloggingpage.ui @@ -5,152 +5,191 @@ 0 0 - 600 - 480 + 404 + 339 - - - - - - - If enabled, chat conversations will be saved in a specified directory. - - - Log &all chats - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 16 - 20 - - - - - - - - 0 - - - 6 - - - - - Choose the directory on your system where you'd like to save the chat logs. - - - Save chat files in this parent directory: - - - false - - - - - - - - 22 - 0 - - - - ... - - - - - - - - - - - - - - KMess automatically creates subdirectories when you choose the organize the chat folder by year, month or day. - - - Organize chat folders by: - - - - - - Year - - - 1 - - - - - - - Month - - - - - - - Day - - - 1 - - - - - - - Save all chats in the parent directory - - - false - - - 1 - - - - - - + + + 0 + + + + + + 0 + 0 + + + + If enabled, chat conversations will be saved in a specified directory. + + + Log &all chats + + + + + - Qt::Vertical + Qt::Horizontal - QSizePolicy::Expanding + QSizePolicy::Fixed 16 - 196 + 20 + + + + 0 + + + 6 + + + + + Choose the directory on your system where you'd like to save the chat logs. + + + Save chat files in this directory: + + + false + + + chatSavePathEdit_ + + + + + + + + 22 + 0 + + + + ... + + + + + + + + + + + + KMess automatically creates subdirectories when you choose the organize the chat folder by year, month or day. + + + Log Structure + + + + + + Separate saved chats by: + + + + + + + + 0 + 0 + + + + Year + + + 1 + + + + + + + + 0 + 0 + + + + Month + + + + + + + + 0 + 0 + + + + Day + + + 1 + + + + + + + + 0 + 0 + + + + Save directly in the specified directory + + + false + + + 1 + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 32 + 57 + + + + @@ -158,7 +197,7 @@ logChatsCheckBox_ chatSavePathEdit_ - yearRadioButton_ + chatSavePathButton_ monthRadioButton_ dayRadioButton_ singleDirectoryRadioButton_ diff --git a/src/settings/chatstylepage.cpp b/src/settings/chatstylepage.cpp index 33e701b..aa5d37a 100644 --- a/src/settings/chatstylepage.cpp +++ b/src/settings/chatstylepage.cpp @@ -72,6 +72,8 @@ ChatStylePage::ChatStylePage( QWidget *parent ) this, SLOT ( updatePreview() ) ); connect( groupFollowupCheckbox_, SIGNAL( toggled(bool) ), this, SLOT ( updatePreview() ) ); + connect( enableChatFormattingCheckBox_, SIGNAL( toggled(bool) ), + this, SLOT ( updatePreview() ) ); // Configure the preview form of the "chatting" widget @@ -86,7 +88,8 @@ ChatStylePage::ChatStylePage( QWidget *parent ) QStringList styleNames; // Get all available chat styles for the "chatting" widget, avoiding duplicate entries - foreach( QString dir, dirs->findDirs( "data", "kmess/styles" ) ) + QStringList stylesDirectories( dirs->findDirs( "data", "kmess/styles" ) ); + foreach( QString dir, stylesDirectories ) { QDir styleDir( dir ); QStringList styles = styleDir.entryList( QDir::Dirs, QDir::Name | QDir::IgnoreCase ); @@ -225,6 +228,9 @@ void ChatStylePage::loadSettings( const Account *account ) showTimeCheckbox_->setChecked( account->getShowMessageTime() ); useFontEffectsCheckBox_->setChecked( account->getUseFontEffects() ); groupFollowupCheckbox_->setChecked( account->getGroupFollowupMessages() ); + enableListFormattingCheckBox_->setChecked( account->getUseListFormatting() ); + enableChatFormattingCheckBox_->setChecked( account->getUseChatFormatting() ); + tabbedChatMode_->setCurrentIndex( account->getTabbedChatMode() ); // Select the correct chat style, int item = chatStyle_->findText( account->getChatStyle(), Qt::MatchExactly | Qt::MatchCaseSensitive ); @@ -267,8 +273,11 @@ void ChatStylePage::saveSettings( Account *account ) account->setChatInformation( useContactFontCheckBox_->isChecked(), useEmoticonsCheckBox_->isChecked(), useFontEffectsCheckBox_->isChecked(), + enableListFormattingCheckBox_->isChecked(), + enableChatFormattingCheckBox_->isChecked(), showTimeCheckbox_->isChecked(), groupFollowupCheckbox_->isChecked(), + tabbedChatMode_->currentIndex(), chatStyle_->currentText() ); @@ -293,6 +302,20 @@ void ChatStylePage::slotChatStyleChanged(const QString &style) +// Force the page onto a specific tab +void ChatStylePage::switchToTab( int tabIndex ) +{ + if( tabIndex < 0 || tabIndex > tabWidget_->count() ) + { + kWarning() << "Invalid tab index" << tabIndex << "selected!"; + return; + } + + tabWidget_->setCurrentIndex( tabIndex ); +} + + + // Update the chat style preview void ChatStylePage::updatePreview() { @@ -305,11 +328,12 @@ void ChatStylePage::updatePreview() } // Update the boolean settings (other settings are updated in their slots) - chatStyleTransform_->setContactFontColor( contactFontColorButton_->color().name() ); - chatStyleTransform_->setShowTime ( showTimeCheckbox_->isChecked() ); - chatStyleTransform_->setUseContactFont ( useContactFontCheckBox_->isChecked() ); - chatStyleTransform_->setUseEmoticons ( useEmoticonsCheckBox_->isChecked() ); - chatStyleTransform_->setUseFontEffects ( useFontEffectsCheckBox_->isChecked() ); + chatStyleTransform_->setContactFontColor( contactFontColorButton_->color().name() ); + chatStyleTransform_->setShowTime ( showTimeCheckbox_->isChecked() ); + chatStyleTransform_->setUseContactFont ( useContactFontCheckBox_->isChecked() ); + chatStyleTransform_->setUseEmoticons ( useEmoticonsCheckBox_->isChecked() ); + chatStyleTransform_->setUseFontEffects ( useFontEffectsCheckBox_->isChecked() ); + chatStyleTransform_->setUseFormatting ( enableChatFormattingCheckBox_->isChecked() ); // Create three fake messages ChatMessage fake1( ChatMessage::TYPE_INCOMING, ChatMessage::CONTENT_MESSAGE, true, i18n("Hi, how are you doing? :)"), "test@kmess.org", @@ -380,3 +404,5 @@ void ChatStylePage::useContactFontToggled( bool checked ) updatePreview(); } + +#include "chatstylepage.moc" diff --git a/src/settings/chatstylepage.h b/src/settings/chatstylepage.h index e505ff6..f709444 100644 --- a/src/settings/chatstylepage.h +++ b/src/settings/chatstylepage.h @@ -32,8 +32,10 @@ class ChatMessageView; /** * Setttings page for the alerts settings page. + * + * @ingroup Settings */ -class ChatStylePage : public QWidget, public Ui::ChatStylePage +class ChatStylePage : public QWidget, private Ui::ChatStylePage { Q_OBJECT @@ -48,6 +50,8 @@ class ChatStylePage : public QWidget, public Ui::ChatStylePage void loadSettings( const Account *account ); // Save an account's information according to the widgets void saveSettings( Account *account ); + // Force the page onto a specific tab + void switchToTab( int tabIndex ); private: // Private methods // Get a font and cleaned-up font family from a dialog diff --git a/src/settings/chatstylepage.ui b/src/settings/chatstylepage.ui index 5581d15..f458b23 100644 --- a/src/settings/chatstylepage.ui +++ b/src/settings/chatstylepage.ui @@ -5,35 +5,347 @@ 0 0 - 557 - 466 + 460 + 467 - Form + 0 - + 0 + + + + 0 + 0 + 448 + 429 + + + + St&yle + + + + + + QLayout::SetMinimumSize + + + + + Allows you to change the theme KMess uses to display all chat messages. + + + &Chat style: + + + false + + + chatStyle_ + + + + + + + + 200 + 0 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 211 + 20 + + + + + + + + + + + 0 + 0 + + + + + 0 + 100 + + + + false + + + QFrame::NoFrame + + + QFrame::Plain + + + + + + + Chat Settings + + + + + + + + Enables the appearance of emoticons in the chat conversations. + + + &Show emoticons + + + Alt+S + + + + + + + + 0 + 0 + + + + + 20 + 20 + + + + + 20 + 20 + + + + true + + + false + + + + + + + + 0 + 0 + + + + + 20 + 20 + + + + + 20 + 20 + + + + true + + + false + + + + + + + + 0 + 0 + + + + + 20 + 20 + + + + + 20 + 20 + + + + true + + + false + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 310 + 16 + + + + + + + + + + Enables the appearance of a timestamp in each chat message. + + + S&how messages time + + + Alt+H + + + + + + + This option enables grouping of messages from the same contact. When the contact types uses multiple messages to explain something, KMess groups those messages as one single message. The exact appearance depends on the chosen chat style. + + + &Group follow-up messages from the same contact + + + Alt+G + + + + + + + + + Allows you to change the theme KMess uses to display all chat messages. + + + G&roup chats in the same window: + + + false + + + tabbedChatMode_ + + + + + + + + 200 + 0 + + + + + Always + + + + + For contacts in the same group + + + + + Never + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + 0 0 - 545 - 426 + 448 + 429 - Te&xt + &Text - + @@ -46,11 +358,14 @@ This is the font style and color used in your chat messages. - Your message font: + Your &message font: false + + fontButton_ + @@ -127,7 +442,7 @@ Allows to override the font style and color of your contacts' messages with a the chosen font style and color below. - Force contacts' messages to use this font: + &Force contacts' messages to use this font: @@ -205,7 +520,7 @@ Enables the use of font effects. Typing *bold*, /italic/, and _underline_ causes those words appear in a bold, italics or underlined font respectively. - Use font &effects in messages, i.e. *bold*, /italic/, and _underline_ + Use font &effects in messages, like *bold*, /italic/, and _underline_ Alt+E @@ -217,246 +532,52 @@ Qt::Vertical + + QSizePolicy::Fixed + 20 - 40 + 16 - - - - - - 0 - 0 - 545 - 426 - - - - St&yle - - - - - - - Allows you to change the theme KMess uses to display all chat messages. - - - Chat style: - - - false - - - - - - - - 200 - 0 - - - - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 211 - 20 - - - - - + + + MSN Plus formatting + + + + + + Enable in the contact list + + + + + + + Enable in the chat windows + + + + + - - - - 0 - 0 - + + + Qt::Vertical - + - 0 - 150 + 441 + 119 - - true - - - QFrame::NoFrame - - - QFrame::Plain - - - - - - - In chat messages: - - - - - - - - - Enables the appearance of emoticons in the chat conversations. - - - &Show graphics in chat messages - - - Alt+S - - - - - - - - 0 - 0 - - - - - 20 - 20 - - - - - 20 - 20 - - - - true - - - false - - - - - - - - 0 - 0 - - - - - 20 - 20 - - - - - 20 - 20 - - - - true - - - false - - - - - - - - 0 - 0 - - - - - 20 - 20 - - - - - 20 - 20 - - - - true - - - false - - - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 310 - 16 - - - - - - - - - - Enables the appearance of a timestamp in each chat message. - - - S&how time in chat messages - - - Alt+H - - - - - - - This option enables grouping of messages from the same contact. When the contact types uses multiple messages to explain something, KMess groups those messages as one single message. The exact appearance depends on the chosen chat style. - - - &Group follow-up messages from the same contact - - - Alt+G - - + @@ -471,6 +592,20 @@
kcolorbutton.h
+ + tabWidget_ + chatStyle_ + useEmoticonsCheckBox_ + showTimeCheckbox_ + groupFollowupCheckbox_ + tabbedChatMode_ + fontButton_ + fontColorButton_ + useContactFontCheckBox_ + contactFontButton_ + contactFontColorButton_ + useFontEffectsCheckBox_ + diff --git a/src/settings/emailpage.cpp b/src/settings/emailpage.cpp deleted file mode 100644 index 3f2317c..0000000 --- a/src/settings/emailpage.cpp +++ /dev/null @@ -1,83 +0,0 @@ -/*************************************************************************** - emailpage.cpp - description - ------------------- - begin : Thu Jan 30 2008 - copyright : (C) 2008 by Diederik van der Boor - email : "vdboor" --at-- "codingdomain.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 License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#include "emailpage.h" - -#include "../account.h" - - - -/** - * The constructor - */ -EmailPage::EmailPage( QWidget *parent ) -: QWidget( parent ) -, Ui::EmailPage() -{ - setupUi( this ); - connect( useCommandRadioButton_, SIGNAL( toggled( bool ) ), emailCommandEdit_, SLOT( setEnabled( bool ) ) ); -} - - - -/** - * @brief Load the widget state from an account - * - * Reads an Account's info and sets our internal widgets accordingly - * - * @param account The account where to pick settings from - */ -void EmailPage::loadSettings( const Account *account ) -{ - useHotmailRadioButton_ ->setChecked( account->getUseHotmail() ); - useCommandRadioButton_ ->setChecked( !account->getUseHotmail() ); - emailCommandEdit_ ->setText ( account->getEmailCommand() ); - showEmailInfoCheckBox_ ->setChecked( account->getShowEmail() ); - showOtherFoldersCheckBox_->setChecked( account->getShowOtherFolders() ); - emailCommandEdit_ ->setEnabled( useCommandRadioButton_->isChecked() ); - - // After an account logs in, the 'EmailSupported' line will tell if it supports e-mail. - // It's default to true by default in account.cpp until the msn server proves the opposite. - if( account->getEmailSupported() ) - { - notificationButtonGroup_->setEnabled( true ); - useHotmailRadioButton_ ->setEnabled( true ); - } - else - { - notificationButtonGroup_->setEnabled( false ); - useHotmailRadioButton_ ->setEnabled( false ); - useCommandRadioButton_ ->setChecked( true ); - } -} - - - -/** - * @brief Save account information from the email widget - * - * Calls the set-up methods from Account to change its properties, based on how - * the user has set the widgets of this page. - */ -void EmailPage::saveSettings( Account *account ) -{ - account->setEmailInformation( useHotmailRadioButton_->isChecked(), - emailCommandEdit_->text(), - showEmailInfoCheckBox_->isChecked(), - showOtherFoldersCheckBox_->isChecked() ); -} - diff --git a/src/settings/emailpage.h b/src/settings/emailpage.h deleted file mode 100644 index cbd2ca9..0000000 --- a/src/settings/emailpage.h +++ /dev/null @@ -1,51 +0,0 @@ -/*************************************************************************** - emailpage.h - description - ------------------- - begin : Thu Jan 30 2008 - copyright : (C) 2008 by Diederik van der Boor - email : "vdboor" --at-- "codingdomain.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 License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ - -#ifndef EMAILPAGE_H -#define EMAILPAGE_H - -#include "ui_emailpage.h" - -#include - - -// Forward class declarations -class Account; - - - -/** - * Setttings page for the alerts settings page. - */ -class EmailPage : public QWidget, public Ui::EmailPage -{ - Q_OBJECT - - public: - // Constructor - EmailPage( QWidget* parent = 0 ); - - public: // Public methods - // Load the widget state from an account - void loadSettings( const Account *account ); - // Save an account's information according to the widgets - void saveSettings( Account *account ); - -}; - - -#endif diff --git a/src/settings/emailpage.ui b/src/settings/emailpage.ui deleted file mode 100644 index 2e07304..0000000 --- a/src/settings/emailpage.ui +++ /dev/null @@ -1,136 +0,0 @@ - - EmailPage - - - - 0 - 0 - 600 - 480 - - - - - - - - - - 0 - 0 - - - - Allows you to choose which e-mail program KMess should open to view e-mail messages. - - - Mail Client - - - - - - Use Hotmail - - - - - - - Use a specified command: - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - - - - - - - - - - 0 - 0 - - - - Email Notification - - - - - - If enabled, a popup is shown when e-mail is received in your inbox. The number of unread e-mail messages is shown above the contact list. This option is only available for Hotmail accounts. - - - Show email information - - - - - - - If enabled, a popup message also appears when e-mail is received in other folders. This option is only available for Hotmail accounts. - - - Show a notification when email is received in "other folders" - - - - - - - - - - Qt::Vertical - - - QSizePolicy::MinimumExpanding - - - - 20 - 111 - - - - - - - - - - qPixmapFromMimeSource - - useHotmailRadioButton_ - useCommandRadioButton_ - emailCommandEdit_ - showEmailInfoCheckBox_ - showOtherFoldersCheckBox_ - - - - diff --git a/src/settings/emoticonspage.cpp b/src/settings/emoticonspage.cpp index 89db5bf..ed1209c 100644 --- a/src/settings/emoticonspage.cpp +++ b/src/settings/emoticonspage.cpp @@ -25,9 +25,7 @@ #include #include #include -#include -#include #include #include @@ -42,7 +40,6 @@ * Constructor * * @param parent Parent widget - * @param name Qt object name */ EmoticonsPage::EmoticonsPage( QWidget* parent ) : QWidget(parent) @@ -301,6 +298,20 @@ void EmoticonsPage::showAddEmoticonDialog() +// Force the page onto a specific tab +void EmoticonsPage::switchToTab( int tabIndex ) +{ + if( tabIndex < 0 || tabIndex > tabWidget_->count() ) + { + kWarning() << "Invalid tab index" << tabIndex << "selected!"; + return; + } + + tabWidget_->setCurrentIndex( tabIndex ); +} + + + /** * Fill the widget which contains all the user's custom emoticons */ diff --git a/src/settings/emoticonspage.h b/src/settings/emoticonspage.h index 7adcb19..5b9e536 100644 --- a/src/settings/emoticonspage.h +++ b/src/settings/emoticonspage.h @@ -38,8 +38,9 @@ class QListWidgetItem; * will overwrite the current set; otherwise it'll get destroyed. * * @author Diederik Van Der Boor, Valerio Pilo + * @ingroup Settings */ -class EmoticonsPage : public QWidget, public Ui::EmoticonsPage +class EmoticonsPage : public QWidget, private Ui::EmoticonsPage { Q_OBJECT @@ -53,6 +54,8 @@ class EmoticonsPage : public QWidget, public Ui::EmoticonsPage void loadSettings( Account *account ); // Save the settings to the account object void saveSettings( Account *account ); + // Force the page onto a specific tab + void switchToTab( int tabIndex ); private: // private methods // Initialize the standard emoticon theme chooser diff --git a/src/settings/emoticonspage.ui b/src/settings/emoticonspage.ui index 2c66087..f66d010 100644 --- a/src/settings/emoticonspage.ui +++ b/src/settings/emoticonspage.ui @@ -14,7 +14,7 @@ 0 - + 0 @@ -23,8 +23,8 @@ 0 0 - 566 - 487 + 501 + 407 @@ -80,8 +80,8 @@ 0 0 - 497 - 401 + 501 + 407 diff --git a/src/settings/globalsettingsdialog.cpp b/src/settings/globalsettingsdialog.cpp new file mode 100644 index 0000000..78a2888 --- /dev/null +++ b/src/settings/globalsettingsdialog.cpp @@ -0,0 +1,179 @@ +/*************************************************************************** + globalsettingsdialog.cpp - description + ------------------- + begin : Sat Apr 3 2008 + copyright : (C) 2008 by Valerio Pilo + email : valerio@kmess.org + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "globalsettingsdialog.h" + +#include "../utils/kmessconfig.h" +#include "../kmessdebug.h" +#include "accountsmanagerpage.h" +#include "miscellaneouspage.h" + +#include +#include + + + +// Initialize the instance to zero +GlobalSettingsDialog* GlobalSettingsDialog::instance_(0); + + + +// The constructor +GlobalSettingsDialog::GlobalSettingsDialog( QWidget *parent ) +: KPageDialog( parent ) +{ + // Open the config group we'll use throughout the class + config_ = KMessConfig::instance()->getGlobalConfig( "GlobalSettingsDialog" ); + + // Set up the dialog box + setButtons( Help | Ok | Apply | Cancel ); + setDefaultButton( Ok ); + setCaption( i18n("KMess Settings") ); + restoreDialogSize( config_ ); + + // Create the widgets that belong in the pages + accountsManagerPage_ = new AccountsManagerPage(); + notificationPage_ = new KNotifyConfigWidget( this ); + notificationPage_->setApplication( "kmess" ); + miscellaneousPage_ = new MiscellaneousPage(); + + // Add the pages to the dialog and set them up + KPageWidgetItem *page; + + page = addPage( accountsManagerPage_, i18n("Accounts") ); + page->setHeader( i18n( "Accounts" ) ); + page->setIcon( KIcon( "system-users" ) ); + + page = addPage( notificationPage_, i18n( "Notification" ) ); + page->setIcon( KIcon( "text-speak" ) ); + page->setHeader( i18n( "Notification" ) ); + + page = addPage( miscellaneousPage_, i18n("Settings") ); + page->setHeader( i18n( "Settings" ) ); + page->setIcon( KIcon( "configure" ) ); + + // Let all the tabs load their settings + loadSettings(); +} + + + +// The destructor +GlobalSettingsDialog::~GlobalSettingsDialog() +{ + // Save the window size before deleting it + saveDialogSize( config_ ); + + instance_ = 0; + +#ifdef KMESSDEBUG_SETTINGSDIALOG + kDebug() << "DESTROYED."; +#endif +} + + + +// Save options before closing. +void GlobalSettingsDialog::closeEvent( QCloseEvent *event ) +{ + saveDialogSize( config_ ); + event->accept(); +} + + + +// Return a singleton instance of the settings dialog window +GlobalSettingsDialog* GlobalSettingsDialog::instance( QWidget *parent ) +{ + // If the instance is null, create a new dialog and return that. + if ( instance_ == 0 ) + { + instance_ = new GlobalSettingsDialog( parent ); + } + + return instance_; +} + + + +// Load the settings to all tabs +void GlobalSettingsDialog::loadSettings() +{ + KConfigGroup group = KMessConfig::instance()->getGlobalConfig( "General" ); + + miscellaneousPage_->loadSettings( group ); +} + + + +// Save the settings from all tabs +bool GlobalSettingsDialog::saveSettings() +{ + KConfigGroup group = KMessConfig::instance()->getGlobalConfig( "General" ); + + if( ! miscellaneousPage_->saveSettings( group ) ) + { + return false; + } + + notificationPage_ ->save(); + + // Force the saving to be sure the KMessShared Class gets the correct options + group.sync(); + + return true; +} + + + +// A button has been pressed, act accordingly +void GlobalSettingsDialog::slotButtonClicked( int button ) +{ + switch( button ) + { + case KDialog::Ok: + if( ! saveSettings() ) + { + return; + } + + accept(); + break; + + case KDialog::Apply: + saveSettings(); + + // Do not delete the dialog, we still need it + return; + break; + + case KDialog::Cancel: + case KDialog::Close: + reject(); + break; + + default: + KDialog::slotButtonClicked( button ); + break; + } + + // Schedule the dialog for deletion, to save memory + deleteLater(); +} + + +#include "globalsettingsdialog.moc" diff --git a/src/settings/globalsettingsdialog.h b/src/settings/globalsettingsdialog.h new file mode 100644 index 0000000..b094928 --- /dev/null +++ b/src/settings/globalsettingsdialog.h @@ -0,0 +1,77 @@ +/*************************************************************************** + globalsettingsdialog.h - description + ------------------- + begin : Sat Apr 3 2008 + copyright : (C) 2008 by Valerio Pilo + email : valerio@kmess.org + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef GLOBALSETTINGSDIALOG_H +#define GLOBALSETTINGSDIALOG_H + +#include +#include + + +// Forward declarations +class AccountsManagerPage; +class MiscellaneousPage; + +class KConfigGroup; + + + +/** + * @author Valerio Pilo + * @ingroup Settings + */ +class GlobalSettingsDialog : public KPageDialog +{ + Q_OBJECT + + public: + // The constructor + GlobalSettingsDialog( QWidget *parent = 0 ); + // The destructor + ~GlobalSettingsDialog(); + // Return a singleton instance of the settings dialog window + static GlobalSettingsDialog *instance( QWidget *parent = 0 ); + + private slots: // Private slots + // Save the window options before closing. + void closeEvent( QCloseEvent *event ); + // Load the settings to all tabs + void loadSettings(); + // Save the settings from all tabs + bool saveSettings(); + // A button has been pressed, act accordingly + void slotButtonClicked( int button ); + + private: // Private attributes + // The configuration group from which window size is loaded from and saved to + KConfigGroup config_; + // The page where to manage the saved MSN accounts + AccountsManagerPage *accountsManagerPage_; + // The page where to manage the miscellaneous settings + MiscellaneousPage *miscellaneousPage_; + // The page where to manage the notification settings + KNotifyConfigWidget *notificationPage_; + // The instance of the singleton settings dialog window + static GlobalSettingsDialog *instance_; + + signals: + // The settings have been changed + void changedGlobalSettings(); + +}; + +#endif diff --git a/src/settings/miscellaneouspage.cpp b/src/settings/miscellaneouspage.cpp new file mode 100644 index 0000000..c49525f --- /dev/null +++ b/src/settings/miscellaneouspage.cpp @@ -0,0 +1,414 @@ +/*************************************************************************** + miscellaneouspage.h - description + ------------------- + begin : Sat May 3 2008 + copyright : (C) 2008 by Antonio Nastasi + email : sifcenter@gmail.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 License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "miscellaneouspage.h" +#include "kmessdebug.h" + +#include +#include +#include +#include + + + +/** + * Constructor + * + * @param parent Parent widget + */ +MiscellaneousPage::MiscellaneousPage( QWidget *parent ) +: QWidget(parent) +{ + // First setup the user interface + setupUi( this ); + + // Connect the radio buttons signals + connect( useListedBrowserRadio_, SIGNAL( toggled(bool) ), browsersCombo_, SLOT( setEnabled(bool) ) ); + connect( useCustomBrowserRadio_, SIGNAL( toggled(bool) ), customBrowserEdit_, SLOT( setEnabled(bool) ) ); + connect( useCustomBrowserRadio_, SIGNAL( toggled(bool) ), customBrowserInfo_, SLOT( setEnabled(bool) ) ); + connect( useListedMailClientRadio_, SIGNAL( toggled(bool) ), mailClientsCombo_, SLOT( setEnabled(bool) ) ); + connect( useCustomMailClientRadio_, SIGNAL( toggled(bool) ), customMailClientEdit_, SLOT( setEnabled(bool) ) ); + connect( useCustomMailClientRadio_, SIGNAL( toggled(bool) ), customMailClientInfo_, SLOT( setEnabled(bool) ) ); + connect( lowestTransferPort_, SIGNAL( valueChanged(int) ), this, SLOT( checkPortsInterval() ) ); + connect( highestTransferPort_, SIGNAL( valueChanged(int) ), this, SLOT( checkPortsInterval() ) ); + + // Prepare and browse the list of available browsers + const KService::List browserServices = KMimeTypeTrader::self()->query( "text/html", "Application" ); + for( KService::List::ConstIterator it = browserServices.begin() ; it != browserServices.end() ; ++it ) + { + KService::Ptr servicePointer = *it; + KService *service = servicePointer.data(); + + // This application isn't valid or is already listed + if( ! service || browsersCombo_->findData( QVariant( service->exec() ) ) != -1 ) + { + continue; + } + +#ifdef KMESSDEBUG_SETTINGSDIALOG + kDebug() << "Adding browser to list:" << service->name() << " -> " << service->exec(); +#endif + browsersCombo_->addItem( KIcon( service->icon() ), service->name(), QVariant( service->exec() ) ); + } + + if( browsersCombo_->count() == 0 ) + { + useCustomBrowserRadio_->setChecked( true ); + useListedBrowserRadio_->setEnabled( false ); + browsersCombo_->addItem( i18n("No selectable browsers detected.") ); + browsersCombo_->setEnabled( false ); + } + + // Prepare and browse the list of available email clients + const KService::List mailServices = KMimeTypeTrader::self()->query( "application/x-mimearchive", "Application" ); + for( KService::List::ConstIterator it = mailServices.begin() ; it != mailServices.end() ; ++it ) + { + KService::Ptr servicePointer = *it; + KService *service = servicePointer.data(); + + // This application isn't valid or is already listed + if( ! service || mailClientsCombo_->findData( QVariant( service->exec() ) ) != -1 ) + { + continue; + } + +#ifdef KMESSDEBUG_SETTINGSDIALOG + kDebug() << "Adding mail client to list:" << service->name() << " -> " << service->exec(); +#endif + mailClientsCombo_->addItem( KIcon( service->icon() ), service->name(), QVariant( service->exec() ) ); + } + + if( mailClientsCombo_->count() == 0 ) + { + useCustomMailClientRadio_->setChecked( true ); + useCustomMailClientRadio_->setEnabled( false ); + mailClientsCombo_->addItem( i18n("No selectable e-mail clients detected.") ); + mailClientsCombo_->setEnabled( false ); + } + + // Prepare and connect the directory selection button + chooseDirButton_->setIcon( KIcon( "folder-open" ) ); + connect( chooseDirButton_, SIGNAL( clicked() ), this, SLOT( slotChooseDirectory() ) ); + + // Make the directory selection friendlier + KUrlCompletion *dirCompletion = new KUrlCompletion( KUrlCompletion::DirCompletion ); + dirCompletion->setParent( this ); + receivedFilesDirEdit_->setCompletionObject( dirCompletion ); + receivedFilesDirEdit_->setClearButtonShown( true ); +} + + + +/** + * Destructor + */ +MiscellaneousPage::~MiscellaneousPage() +{ +} + + + +/** + * @brief Ensure that the specified P2P ports interval is valid + */ +void MiscellaneousPage::checkPortsInterval() +{ + int lowerPortValue = lowestTransferPort_->value(); + + // Allow a minimum of two ports in the interval + if( lowerPortValue >= highestTransferPort_->value() ) + { + highestTransferPort_->setValue( lowerPortValue + 1 ); + } +} + + + +/** + * @brief Load the widget state + */ +void MiscellaneousPage::loadSettings( const KConfigGroup &group ) +{ + // Read the settings into the widgets + customBrowserEdit_ ->setText ( group.readEntry( "customBrowser", QString() ) ); + customMailClientEdit_->setText ( group.readEntry( "customMailClient", QString() ) ); + receivedFilesDirEdit_->setText ( group.readEntry( "receivedFilesDir", QDir::homePath() ) ); + useLiveMailCheckbox_ ->setChecked( group.readEntry( "useLiveMail", true ) ); + useReceivedFilesDir_ ->setChecked( group.readEntry( "useReceivedFilesDir", false ) ); + lowestTransferPort_ ->setValue ( group.readEntry( "lowestTransferPort", 6891 ) ); + highestTransferPort_ ->setValue ( group.readEntry( "highestTransferPort", 6900 ) ); + + int pos; + QString userChoice; + KService::Ptr servicePointer; + KService *service; + + // Read the browser's radio buttons setting + userChoice = group.readEntry( "useBrowser", "KDE" ); + if( userChoice == "KDE" ) + { + useKDEBrowserRadio_->setChecked( true ); + } + else if( userChoice == "listed" ) + { + useListedBrowserRadio_->setChecked( true ); + } + else + { + useCustomBrowserRadio_->setChecked( true ); + } + + userChoice = group.readEntry( "useMailClient", "KDE" ); + if( userChoice == "KDE" ) + { + useKDEMailClientRadio_->setChecked( true ); + } + else if( userChoice == "listed" ) + { + useListedMailClientRadio_->setChecked( true ); + } + else + { + useCustomMailClientRadio_->setChecked( true ); + } + + // Find the browser and select it + pos = browsersCombo_->findData( group.readEntry( "listedBrowser", QString() ) ); + if( pos > -1 ) + { +#ifdef KMESSDEBUG_SETTINGSDIALOG + kDebug() << "Browser setting - Changing current index to" << pos; +#endif + browsersCombo_->setCurrentIndex( pos ); + } + else + { + // If there's no preference set, allow KDE to choose + servicePointer = KMimeTypeTrader::self()->preferredService( "text/html", "Application" ); + service = servicePointer.data(); + + if( service ) + { + pos = browsersCombo_->findData( service->exec() ); + + if( pos > -1 ) + { +#ifdef KMESSDEBUG_SETTINGSDIALOG + kDebug() << "Setting system preferred browser to" << pos; +#endif + browsersCombo_->setCurrentIndex( pos ); + } + else + { +#ifdef KMESSDEBUG_SETTINGSDIALOG + kDebug() << "Not setting any browser"; +#endif + } + } +#ifdef KMESSDEBUG_SETTINGSDIALOG + else + { + kDebug() << "No service found: not setting any browser"; + } +#endif + } + + // Find the mail client and select it + pos = mailClientsCombo_->findData( group.readEntry( "listedMailClient", QString() ) ); + if( pos > -1 ) + { +#ifdef KMESSDEBUG_SETTINGSDIALOG + kDebug() << "Mail Client setting - Changing current index to" << pos; +#endif + mailClientsCombo_->setCurrentIndex( pos ); + } + else + { + // If there's no preference set, allow KDE to choose + servicePointer = KMimeTypeTrader::self()->preferredService( "application/x-mimearchive", "Application" ); + service = servicePointer.data(); + + if( service ) + { + pos = mailClientsCombo_->findData( service->exec() ); + + if( pos > -1 ) + { +#ifdef KMESSDEBUG_SETTINGSDIALOG + kDebug() << "Setting system preferred mail client to" << pos; +#endif + mailClientsCombo_->setCurrentIndex( pos ); + } + else + { +#ifdef KMESSDEBUG_SETTINGSDIALOG + kDebug() << "Not setting any mail client"; +#endif + } + } +#ifdef KMESSDEBUG_SETTINGSDIALOG + else + { + kDebug() << "No service found: not setting any mail client"; + } +#endif + } +} + + + +/** + * @brief Save account information from the misc options widget + */ +bool MiscellaneousPage::saveSettings( KConfigGroup &group ) +{ + // Make sure there's a custom browser selected if the relevant option is set + if( useCustomBrowserRadio_->isChecked() ) + { + if( customBrowserEdit_->text().isEmpty() ) + { + KMessageBox::error( 0, i18n( "You have to select a command to run as custom browser!" ) ); + return false; + } + else if( ! customBrowserEdit_->text().contains( "%u" ) ) + { + int result = KMessageBox::warningYesNoCancel( 0, i18n( "The command you selected to run as custom browser " + "does not contain the '%u' parameter. Without this, opening Web " + "sites will not work.
Do you want KMess to add it for you?" ) ); + + // Only add the parameter if the user wants to + switch( result ) + { + case KMessageBox::Yes: + customBrowserEdit_->setText( customBrowserEdit_->text().append( " %u" ) ); + break; + + case KMessageBox::No: + break; + + default: + return false; + } + } + } + + // Make sure there's a custom mail client selected if the relevant option is set + if( useCustomMailClientRadio_->isChecked() ) + { + if( customMailClientEdit_->text().isEmpty() ) + { + KMessageBox::error( 0, i18n( "You have to select a command to run as custom email client!" ) ); + return false; + } + else if( ! customMailClientEdit_->text().contains( "%u" ) ) + { + int result = KMessageBox::warningYesNoCancel( 0, i18n( "The command you selected to run as custom email client " + "does not contain the '%u' parameter. Without this, composing " + "mail will not work.
Do you want KMess to add it for you?" ) ); + + // Only add the parameter if the user wants to + switch( result ) + { + case KMessageBox::Yes: + customMailClientEdit_->setText( customMailClientEdit_->text().append( " %u" ) ); + break; + + case KMessageBox::No: + break; + + default: + return false; + } + } + } + + // Make sure there's a selected directory if the Save files in a directory option is set + if( useReceivedFilesDir_->isChecked() && receivedFilesDirEdit_->text().isEmpty() ) + { + KMessageBox::error( 0, i18n( "You have to select a directory for the received files!" ) ); + return false; + } + + QString userChoice; + + // Save the checked browser option + if( useKDEBrowserRadio_->isChecked() ) + { + userChoice = "KDE"; + } + else if( useListedBrowserRadio_->isChecked() ) + { + userChoice = "listed"; + } + else + { + userChoice = "custom"; + } + group.writeEntry( "useBrowser", userChoice ); + + // Save the checked mail client option + if( useKDEMailClientRadio_->isChecked() ) + { + userChoice = "KDE"; + } + else if( useListedMailClientRadio_->isChecked() ) + { + userChoice = "listed"; + } + else + { + userChoice = "custom"; + } + group.writeEntry( "useMailClient", userChoice ); + + // Save the state of the other widgets + group.writeEntry( "customBrowser", customBrowserEdit_ ->text() ); + group.writeEntry( "customMailClient", customMailClientEdit_->text() ); + group.writeEntry( "receivedFilesDir", receivedFilesDirEdit_->text() ); + group.writeEntry( "useReceivedFilesDir", useReceivedFilesDir_ ->isChecked() ); + group.writeEntry( "useLiveMail", useLiveMailCheckbox_ ->isChecked() ); + group.writeEntry( "lowestTransferPort", lowestTransferPort_ ->value() ); + group.writeEntry( "highestTransferPort", highestTransferPort_ ->value() ); + + int index = browsersCombo_->currentIndex(); + group.writeEntry( "listedBrowser", browsersCombo_ ->itemData( index ) ); + index = mailClientsCombo_->currentIndex(); + group.writeEntry( "listedMailClient", mailClientsCombo_->itemData( index ) ); + + return true; +} + + + +/** + * Allow the user to navigate the filesystem and choose a directory + */ +void MiscellaneousPage::slotChooseDirectory() +{ + const KUrl url( KFileDialog::getExistingDirectoryUrl( receivedFilesDirEdit_->text(), + this, + i18n( "Select Files Directory") ) ); + + if( ! url.isEmpty() ) + { + receivedFilesDirEdit_->setText( url.path() ); + } +} + + + +#include "miscellaneouspage.moc" diff --git a/src/settings/miscellaneouspage.h b/src/settings/miscellaneouspage.h new file mode 100644 index 0000000..1df6eed --- /dev/null +++ b/src/settings/miscellaneouspage.h @@ -0,0 +1,63 @@ +/*************************************************************************** + miscellaneouspage.h - description + ------------------- + begin : Sat May 3 2008 + copyright : (C) 2008 by Antonio Nastasi + email : sifcenter@gmail.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 License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef MISCELLANEOUSPAGE_H +#define MISCELLANEOUSPAGE_H + +#include "ui_miscellaneouspage.h" + +#include + + + +/** + * @brief Allows to choose the miscellaneous settings + * + * @author Antonio Nastasi + * @ingroup Settings + */ +class MiscellaneousPage : public QWidget, private Ui::MiscellaneousPage +{ + Q_OBJECT + + + public: // public methods + + // The constructor + MiscellaneousPage( QWidget *parent = 0 ); + // The destructor + virtual ~MiscellaneousPage(); + // Load the widget state + void loadSettings( const KConfigGroup &group ); + // Save account information from the misc options widget + bool saveSettings( KConfigGroup &group ); + + + private slots: + // Ensure that the specified ports interval is valid + void checkPortsInterval(); + // Allow the user to navigate the filesystem and choose a directory + void slotChooseDirectory(); + + private: // Private properties + + // A list of browser executables, mapped by browser name + QMap browsersList_; +}; + +#endif + diff --git a/src/settings/miscellaneouspage.ui b/src/settings/miscellaneouspage.ui new file mode 100644 index 0000000..78c2bb3 --- /dev/null +++ b/src/settings/miscellaneouspage.ui @@ -0,0 +1,502 @@ + + MiscellaneousPage + + + + 0 + 0 + 515 + 354 + + + + + + + + 0 + + + + + 0 + + + + + 0 + 0 + 507 + 321 + + + + Web Browser + + + + + + Choose this option to use the browser used by the rest of KDE. + + + &Use the KDE default browser + + + + + + + Select this option to choose from a list of installed browsers. + + + &Use an installed browser: + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + false + + + + + + + + + Choose this option to enter the path to your favorite browser. + + + &Specify a custom command: + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + + false + + + Specify the path of a program to use to open links; a '%u' here will be replaced with the links' URL. + + + 32767 + + + + + + + false + + + Use '%u' to insert the URL in the command line. + + + + + + + + + + + Qt::Vertical + + + + 20 + 20 + + + + + + + + + + 0 + 0 + 507 + 321 + + + + Email Client + + + + + + Check this box to use the Live Mail webmail site when you connect with accounts compatible with Live Mail. + + + Use Live Mail if the account supports it + + + + + + + Choose this option to use the email client used by the rest of KDE. + + + &Use the KDE default email client + + + + + + + Select this option to choose from a list of installed browsers. + + + &Use an installed email client: + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + false + + + + + + + + + Choose this option to enter the path to your favorite browser. + + + &Specify a custom command: + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + + false + + + Specify the path of a program to use to open links; a '%u' here will be replaced with the links' URL. + + + 32767 + + + + + + + false + + + Use '%u' to insert the email address in the command line. + + + + + + + + + + + Qt::Vertical + + + + 20 + 27 + + + + + + + + + + 0 + 0 + 507 + 321 + + + + File Transfers + + + + + + true + + + &Save all received files in one directory: + + + false + + + + + + + + + false + + + + + + + false + + + ... + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 16 + 16 + + + + + + + + + + &Use ports between + + + lowestTransferPort_ + + + + + + + + 0 + 0 + + + + true + + + 32766 + + + + + + + and + + + highestTransferPort_ + + + + + + + + 0 + 0 + + + + true + + + 32767 + + + + + + + for file transfers + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + tabWidget_ + + + + KLineEdit + QLineEdit +
klineedit.h
+
+
+ + browsersCombo_ + + + + + useReceivedFilesDir_ + toggled(bool) + receivedFilesDirEdit_ + setEnabled(bool) + + + 73 + 58 + + + 78 + 89 + + + + + useReceivedFilesDir_ + toggled(bool) + chooseDirButton_ + setEnabled(bool) + + + 192 + 52 + + + 426 + 88 + + + + +
diff --git a/src/systemtraywidget.cpp b/src/systemtraywidget.cpp index e84c9f7..cc216e4 100644 --- a/src/systemtraywidget.cpp +++ b/src/systemtraywidget.cpp @@ -29,13 +29,12 @@ #include #include -#include #include -#include #include -#include - +#ifdef Q_WS_WIN +#include +#endif // The constructor SystemTrayWidget::SystemTrayWidget( QWidget *parent ) @@ -103,64 +102,80 @@ void SystemTrayWidget::displayCloseMessage( QString /*fileMenu*/ ) #endif // Grab an image of the screen which contains the tray icon - QPixmap shot = QPixmap::grabWindow( QX11Info::appRootWindow(), pictureArea.x(), pictureArea.y(), pictureArea.width(), pictureArea.height() ); + QPixmap shot; +#ifdef Q_WS_X11 + shot = QPixmap::grabWindow( QX11Info::appRootWindow(), pictureArea.x(), pictureArea.y(), pictureArea.width(), pictureArea.height() ); +#else + #warning Screen capture code not implemented for this platform. +#endif // Now we want to draw a circle around the icon + if( ! shot.isNull() ) + { + // Some properties about the circle we'll draw + const int CIRCLE_WIDTH = 3; + const int SHADOW_OFFSET = 2; + const int IMAGE_BORDER = 1; + const int CIRCLE_MARGINS = 6; - // Some properties about the circle we'll draw - const int CIRCLE_WIDTH = 3; - const int SHADOW_OFFSET = 2; - const int IMAGE_BORDER = 1; - const int CIRCLE_MARGINS = 6; - - QRect circleArea = pictureGeometry; - circleArea.adjust( -CIRCLE_MARGINS, -CIRCLE_MARGINS, CIRCLE_MARGINS, CIRCLE_MARGINS ); + QRect circleArea = pictureGeometry; + circleArea.adjust( -CIRCLE_MARGINS, -CIRCLE_MARGINS, CIRCLE_MARGINS, CIRCLE_MARGINS ); #ifdef KMESSDEBUG_SYSTEMTRAY - kDebug() << "Picture geometry is" << pictureGeometry << "and circle area is" << circleArea; + kDebug() << "Picture geometry is" << pictureGeometry << "and circle area is" << circleArea; #endif - // Draw the circle with a dark shadow - QPainter painter(&shot); - painter.setPen( QPen(KApplication::palette().dark(), CIRCLE_WIDTH) ); - painter.drawArc( circleArea.adjusted( SHADOW_OFFSET, SHADOW_OFFSET, 0, 0 ), 0, 16*360 ); - painter.setPen( QPen(Qt::red, CIRCLE_WIDTH) ); - painter.drawArc( circleArea, 0, 16*360); + // Draw the circle with a dark shadow + QPainter painter( &shot ); + painter.setPen( QPen(KApplication::palette().dark(), CIRCLE_WIDTH) ); + painter.drawArc( circleArea.adjusted( SHADOW_OFFSET, SHADOW_OFFSET, 0, 0 ), 0, 16*360 ); + painter.setPen( QPen(Qt::red, CIRCLE_WIDTH) ); + painter.drawArc( circleArea, 0, 16*360); - // Draw the tray icon over the screenshot again, in case a window is hiding the icon - icon().paint( &painter, geometry() ); - painter.end(); + // Draw the tray icon over the screenshot again, in case a window is hiding the icon + icon().paint( &painter, geometry() ); + painter.end(); - // Then, we add a border around the image, to make it more visible - QPixmap finalShot( pictureArea.size() ); - finalShot.fill( KApplication::palette().color( QPalette::Active, QPalette::Foreground ) ); - painter.begin( &finalShot ); - painter.drawPixmap( QRect( IMAGE_BORDER, IMAGE_BORDER, shot.width() - IMAGE_BORDER*2, shot.height() - IMAGE_BORDER*2 ), shot ); - painter.end(); + // Then, we add a border around the image, to make it more visible + QPixmap finalShot( pictureArea.size() ); + finalShot.fill( KApplication::palette().color( QPalette::Active, QPalette::Foreground ) ); + painter.begin( &finalShot ); + painter.drawPixmap( QRect( IMAGE_BORDER, IMAGE_BORDER, shot.width() - IMAGE_BORDER*2, shot.height() - IMAGE_BORDER*2 ), shot ); + painter.end(); - // Save the pixmap into a temporary file to allow using it in a dialog - QTemporaryFile tempFile( QDir::tempPath() + "/kmess_temp_XXXXXX.png" ); - tempFile.open(); - finalShot.save( tempFile.fileName() ); + // Save the pixmap into a temporary file to allow using it in a dialog + QTemporaryFile tempFile( QDir::tempPath() + "/kmess_temp_XXXXXX.png" ); + tempFile.open(); + finalShot.save( tempFile.fileName() ); #ifdef KMESSDEBUG_SYSTEMTRAY - kDebug() << "Temp file info" - << "- Name:" << tempFile.fileName() - << "- Exists?" << tempFile.exists(); + kDebug() << "Temp file info" + << "- Name:" << tempFile.fileName() + << "- Exists?" << tempFile.exists(); #endif - // Show the dialog + // Show the dialog + KMessageBox::information(kapp->activeWindow(), + "

" + message + "

", + i18n("Docking in System Tray"), "hideOnCloseInfo"); - KMessageBox::information(kapp->activeWindow(), - "

" + message + "

", - i18n("Docking in System Tray"), "hideOnCloseInfo"); + // Close the temporary file, it will be deleted when the function returns + tempFile.close(); + } + else + { + // Dialog without the shot. + KMessageBox::information(kapp->activeWindow(), + "

" + message + "

", + i18n("Docking in System Tray"), "hideOnCloseInfo"); + } #ifdef KMESSDEBUG_SYSTEMTRAY kDebug() << "Dialog closed."; #endif - - // Close the temporary file, it will be deleted when the function returns - tempFile.close(); } @@ -223,7 +238,12 @@ void SystemTrayWidget::statusChanged() if( status != STATUS_OFFLINE ) { +#if !defined(Q_WS_WIN) newTooltip += i18n( "
%1 (%2)", currentAccount->getFriendlyName(), MsnStatus::getName( status ) ); +#else + // Qt on Windows does not support html in the system tray widget. + newTooltip += i18n( "- %1 (%2)", currentAccount->getFriendlyName(), MsnStatus::getName( status ) ); +#endif } setToolTip( newTooltip ); } diff --git a/src/utils/crashhandler.cpp b/src/utils/crashhandler.cpp index d9ecf59..8804f4f 100644 --- a/src/utils/crashhandler.cpp +++ b/src/utils/crashhandler.cpp @@ -16,25 +16,31 @@ ***************************************************************************/ #include "crashhandler.h" -#include "kmessdebug.h" +#include "../kmessdebug.h" +#include "../config-kmess.h" #include // pid_t #include // waitpid() #include // getpid(), alarm() -#include - #include #include +#include + // Static vars need to be declared too +// appName_ contains the exact name of the binary. +// is overwritten by setAppName() with the full path or argv[0]. QLatin1String CrashHandler::appName_("kmess"); /** - * @brief Activate the handler + * @brief Activate the handler. + * + * If the platform supports it (currently only X11), the custom crash handler will be activated. + * This makes sure kmessCrashed() will be called when a crash (SIGSEGV, ABRT, etc..) occurs. */ void CrashHandler::activate() { @@ -55,9 +61,18 @@ void CrashHandler::activate() /** * @brief The crash handler C function. + * + * This function collects all relevant application data in a report to display. + * It also tries to run gdb to get a useful backtrace. + * Currently the backtrace is dumped at the console only. + * + * @param signal The received signal. */ -void CrashHandler::kmessCrashed( int /* signal */ ) +void CrashHandler::kmessCrashed( int signal ) { + Q_UNUSED( signal ); + +#ifdef Q_OS_UNIX /* * The main guts of this function are based * on the Amarok crash handler by Max Howell. @@ -65,7 +80,11 @@ void CrashHandler::kmessCrashed( int /* signal */ ) // Console message first. kWarning() << "KMess crashed! -- this should not happen.\n" - "Please submit a report at http://www.kmess.org/board/."; + "Please submit a report at http://www.kmess.org/board/.\n" + "\n" + "Application version: " KMESS_VERSION "\n" + "Compiled at: KDE " KDE_VERSION_STRING ", Qt " QT_VERSION_STR "\n" + "Running at: KDE " + QLatin1String( KDE::versionString() ) + ", Qt " + QLatin1String( qVersion() ) + "\n"; // Avoid loops KCrash::setCrashHandler(); @@ -122,7 +141,9 @@ void CrashHandler::kmessCrashed( int /* signal */ ) int returnCode = gdb.execute( 30000 ); if( returnCode == -2 ) { - kWarning() << "No backtrace could be generated, gdb not found."; + kWarning() << "No backtrace could be generated, gdb not found. Printing KDE backtrace."; + kWarning() << kBacktrace(); + return; // let the standard crash handler take over. } else if( returnCode == -1 ) @@ -133,6 +154,9 @@ void CrashHandler::kmessCrashed( int /* signal */ ) { kDebug() << "No backtrace could be generatd, gdb returned: " << returnCode; } +#else + #warning Crash handler code is not implemented for this platform. +#endif //_exit() exits immediately, otherwise this //function is called repeatedly ad finitum @@ -142,7 +166,13 @@ void CrashHandler::kmessCrashed( int /* signal */ ) /** - * @brief Assign the app name. + * @brief Assign the app binary name. + * + * This function is called from the main() method to make sure the exact binary + * (as passed to argv[0]) is known by the crash handler. This makes it possible + * to run gdb properly. By default the appname is set to "kmess". + * + * @param appName Filename of the application binary. */ void CrashHandler::setAppName( const QLatin1String &appName ) { diff --git a/src/utils/crashhandler.h b/src/utils/crashhandler.h index a2cebb5..5be29b2 100644 --- a/src/utils/crashhandler.h +++ b/src/utils/crashhandler.h @@ -20,7 +20,14 @@ /** - * Crash handler + * @brief Custom handling of crashes. + * + * The kmessCrashed() function in this class is called when a crash occurs. + * This allows us to produce custom reports with all information we need. + * + * @author Diederik van der Boor, based on Amarok code. + * @ingroup Utils + * @todo The GUI dialogs still need to be implemented. */ class CrashHandler { diff --git a/src/utils/idletimer.h b/src/utils/idletimer.h index 0c80054..e2af47b 100644 --- a/src/utils/idletimer.h +++ b/src/utils/idletimer.h @@ -35,7 +35,7 @@ class XAutoLock; * whether the idle detection should be active. * * @author Mike K. Bennett - * @ingroup Root + * @ingroup Utils */ class IdleTimer : public QObject { Q_OBJECT diff --git a/src/utils/kmessconfig.cpp b/src/utils/kmessconfig.cpp new file mode 100644 index 0000000..4f29640 --- /dev/null +++ b/src/utils/kmessconfig.cpp @@ -0,0 +1,334 @@ +/*************************************************************************** + kmessconfig.h - description + ------------------- + begin : Thu May 1 2008 + copyright : (C) 2008 by Antonio Nastasi + email : sifcenter@gmail.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 License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "kmessconfig.h" +#include "../contact/msnobject.h" +#include "../kmessdebug.h" + +#include + +#include + + +// Initialize the instance to zero +KMessConfig* KMessConfig::instance_(0); + + + +// Constructor +KMessConfig::KMessConfig() +{ +} + + + +// Destructor +KMessConfig::~KMessConfig() +{ + // Force the saving to be sure the config is write + KConfig *config; + foreach( config, accountsConfigs_ ) + { + config->sync(); + } + foreach( config, listsConfigs_ ) + { + config->sync(); + } + + // Unset the instance + qDeleteAll( accountsConfigs_ ); + qDeleteAll( listsConfigs_ ); + accountsConfigs_ .clear(); + listsConfigs_.clear(); + instance_ = 0; + kDebug() << "DESTROYED"; +} + + + +void KMessConfig::destroy() +{ + delete instance_; + instance_ = 0; +} + + + +// Recursively delete an account's configuration directory and all of its contents +bool KMessConfig::destroyConfigDir( const QString &fullDirPath ) +{ + QDir dir( fullDirPath ); + QList filesList = dir.entryInfoList( QDir::AllEntries | QDir::NoDotAndDotDot ); + foreach( QFileInfo entry, filesList ) + { + QString entryPath = entry.absoluteFilePath(); + + if( entry.isDir() ) + { + if( ! destroyConfigDir( entryPath ) ) + { + kWarning() << "Cannot remove directory entry" << entryPath << "!"; + } + } + else + { + dir.remove( entryPath ); + } + } + + dir.cdUp(); + if( ! dir.rmdir( fullDirPath ) ) + { + kWarning() << "Cannot remove processed directory" << fullDirPath << "!"; + return false; + } + + return true; +} + + + +KMessConfig* KMessConfig::instance() +{ + // If the instance is null, create a new current config and return that. + if ( instance_ == 0 ) + { + instance_ = new KMessConfig(); + } + return instance_; +} + + + +/** + * @brief Return an account's data directory + * + * This method returns the full path where an account's data are stored. + * + * @param accountHandle The account name + * @return QString + */ +const QString KMessConfig::getAccountDirectory( const QString &accountHandle ) +{ + KStandardDirs localKdeDir; + QDir appsDir, kmessDir; + + appsDir.setPath( localKdeDir.localkdedir() + "/share/apps" ); + kmessDir.setPath( appsDir.absolutePath() + "/kmess/" + accountHandle ); + + return kmessDir.absolutePath(); +} + + + +/** + * @brief Return the accounts directory + * + * This method returns the full path where all the accounts folders are stored. + * + * @return QString + */ +const QString KMessConfig::getAccountsDirectory() +{ + KStandardDirs localKdeDir; + QDir appsDir, kmessDir; + + appsDir.setPath( localKdeDir.localkdedir() + "/share/apps" ); + kmessDir.setPath( appsDir.absolutePath() + "/kmess" ); + + return kmessDir.absolutePath(); +} + + + +/** + * @brief Return a list of saved account handles + * + * This method returns a list of all saved accounts + * + * @return QStringList + */ +QStringList KMessConfig::getAccountsList() +{ + QDir dirs( getAccountsDirectory() ); + return dirs.entryList( QStringList( "*@*" ), QDir::Dirs | QDir::NoDotAndDotDot ); +} + + + +/** + * @brief Select a group from an account's general config + * + * This method returns a directly usable configuration group. It will be a config group named groupName in + * the config file of account accountHandle. + * + * @param accountHandle The account name + * @param groupName The name of the requested configuration group in the account's config file + */ +KConfigGroup KMessConfig::getAccountConfig( const QString &accountHandle, const QString &groupName ) +{ + // Search for config in QHash + if( accountsConfigs_.contains( accountHandle ) ) + { + return accountsConfigs_.value( accountHandle )->group( groupName ); + } + + QDir accountDir( getAccountsDirectory() + "/" + accountHandle ); + + KConfig *config = new KConfig( QString( accountDir.absolutePath() + "/settings" ) ); + + // insert current config into QHash for future search + accountsConfigs_.insert( accountHandle, config ); + + return config->group( groupName ); +} + + + +/** + * @brief Select a group from an account's contact list config + * + * This method returns a directly usable configuration group. It will be the config group named groupName, + * in the account directory which handle is accountHandle. + * + * @param accountHandle The account name + * @param groupName The name of the config group in the account's configuration, like "Contacts" or "Groups" + */ +KConfigGroup KMessConfig::getContactListConfig( const QString &accountHandle, const QString &groupName ) +{ + // Search for config in QHash + if( listsConfigs_.contains( accountHandle ) ) + { + return listsConfigs_.value( accountHandle )->group( groupName ); + } + + QDir accountDir( getAccountsDirectory() + "/" + accountHandle ); + KConfig *config = new KConfig( QString( accountDir.absolutePath() + "/contactlist" ) ); + + // insert current config into QHash for future search + listsConfigs_.insert( accountHandle, config ); + + return config->group( groupName ); +} + + + +/** + * @brief Select a group from the application-wide config + * + * This method returns a directly usable configuration group. It will be the config group named groupName + * contained in the KMess global configuration file. + * + * @param groupName The name of the config group + */ +KConfigGroup KMessConfig::getGlobalConfig( const QString &groupName ) +{ + QString generalGroup( "KMess" ); + + // Search for config in QHash + if( accountsConfigs_.contains( generalGroup ) ) + { + return accountsConfigs_.value( generalGroup )->group( groupName ); + } + + KConfig *config = new KConfig(); + + // insert current config into QHash for future search + accountsConfigs_.insert( generalGroup, config ); + + return config->group( groupName ); +} + + + +/** + * Return the path for an MsnObject in the cache. + * + * This is used to store display pictures, custom emoticons, winks, etc.. + * + * @param msnObject The MSNObject the other contact uses to identify his resource. + * + * @returns A file name string. + */ +QString KMessConfig::getMsnObjectFileName(const MsnObject &msnObject) +{ + // Replace bad characters, in case someone intends to send a bad SHA1. + // The sha1 string is actually base64 encoded, meaning we could + // also expect a "/" character in the string. + QString sha1d = msnObject.getDataHash(); + const QString safeSha1 = sha1d.replace(QRegExp("[^a-zA-Z0-9+=]"), "_"); + + // Be friendly for file managers. + QString extension; + QString path; + QDir dir; + QStringList files; + + switch( msnObject.getType() ) + { + case MsnObject::DISPLAYPIC: + path = "displaypics"; + + // Check if there is already the file + dir.setPath( KStandardDirs::locateLocal( "data", QString("kmess/") + path + "/" ) ); + files = dir.entryList( QStringList( safeSha1 + ".*" ), QDir::Files ); + + // If the list isn't empty check for image file + if( ! files.isEmpty() ) + { + foreach( QString file, files ) + { + if( ! file.contains( ".dat" ) ) + { + return dir.absolutePath() + "/" + file; + } + } + } + break; + + case MsnObject::BACKGROUND: + extension = ".png"; + path = "backgrounds"; + break; + + case MsnObject::EMOTICON: + extension = ".png"; + path = "customemoticons"; + break; + + case MsnObject::WINK: + extension = ".cab"; + path = "winks"; + break; + + case MsnObject::VOICECLIP: + extension = ".wav"; + path = "voiceclips"; + break; + + default: + extension = ".dat"; + path = QString::null; + } + + // Locate filename + return KStandardDirs::locateLocal( "data", QString("kmess/") + path + "/" + safeSha1 + extension ); +} + + + diff --git a/src/utils/kmessconfig.h b/src/utils/kmessconfig.h new file mode 100644 index 0000000..8cd6ecf --- /dev/null +++ b/src/utils/kmessconfig.h @@ -0,0 +1,72 @@ +/*************************************************************************** + kmessconfig.h - description + ------------------- + begin : Thu May 1 2008 + copyright : (C) 2008 by Antonio Nastasi + email : sifcenter@gmail.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 License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef KMESSCONFIG_H +#define KMESSCONFIG_H + +#include +#include + +#include +#include + +class MsnObject; + + +/** + * @brief Central query location for config paths. + * + * @author Antonio Nastasi + * @ingroup Utils + */ +class KMessConfig +{ + + public: // Public methods + // Return a singleton instance of the current config + static KMessConfig *instance(); + // Delete the instance of the contact config + static void destroy(); + + // Recursively delete an account's configuration directory and all of its contents + bool destroyConfigDir( const QString &fullDirPath ); + // Select a group from an account's general config + KConfigGroup getAccountConfig( const QString &accountHandle, const QString &groupName ); + // Return an account's data directory + const QString getAccountDirectory( const QString &accountHandle ); + // Return the accounts directory + const QString getAccountsDirectory(); + //Return a list of saved account handles + QStringList getAccountsList(); + // Select a group from an account's contact list config + KConfigGroup getContactListConfig( const QString &accountHandle, const QString &groupName ); + // Select a group from the application-wide config + KConfigGroup getGlobalConfig( const QString &groupName ); + // Return the path for an MsnObject in the cache. + QString getMsnObjectFileName(const MsnObject& msnObject); + + private: // Private methods + KMessConfig(); + ~KMessConfig(); + + private: // Private attributes + static KMessConfig *instance_; + QHash accountsConfigs_; + QHash listsConfigs_; +}; + +#endif diff --git a/src/utils/kmessdbus.cpp b/src/utils/kmessdbus.cpp new file mode 100644 index 0000000..46f4b1e --- /dev/null +++ b/src/utils/kmessdbus.cpp @@ -0,0 +1,112 @@ +/*************************************************************************** + kmessdbus.cpp - description + ------------------- + begin : Wed Jun 25 2008 + copyright : (C) 2008 by Ruben Vandamme + email : vandammeru gmail.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 License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "currentaccount.h" +#include "kmess.h" +#include "kmessdbus.h" +#include "kmessdbusadaptor.h" +#include "kmessdebug.h" + + + +KMessDBus::KMessDBus( KMess *parent ) + : QObject( (QObject*) parent ), + kmess_( parent ) +{ + new RemoteControlAdaptor( this ); + QDBusConnection dbus = QDBusConnection::sessionBus(); + dbus.registerObject( "/remoteControl", this ); +} + + + +// The destructor +KMessDBus::~KMessDBus() +{ +#ifdef KMESSDEBUG_KMESSDBUS + kDebug() << "DESTROYED."; +#endif +} + + + +// Connect +void KMessDBus::connect() +{ +#ifdef KMESSDEBUG_KMESSDBUS + kDebug() << "Connect() called"; +#endif + + if( ! kmess_->isConnected() ) + { + kmess_->checkAutologin( "" ); + } +} + + + +// Disconnect +void KMessDBus::disconnect() +{ +#ifdef KMESSDEBUG_KMESSDBUS + kDebug() << "Disconnect() called"; +#endif + + if( kmess_->isConnected() ) + { + kmess_->disconnectClicked(); + } +} + + + +// Check if KMess is connected +bool KMessDBus::isConnected() +{ +#ifdef KMESSDEBUG_KMESSDBUS + kDebug() << "isConnected() called"; +#endif + + return kmess_->isConnected(); +} + + + +// Set the status +void KMessDBus::setStatus( int status ) +{ +#ifdef KMESSDEBUG_KMESSDBUS + kDebug() << "setStatus( int ) called"; +#endif + + if( kmess_->isConnected() ) + { + kmess_->changeStatus( status ); + } +} + + + +// Get the status +int KMessDBus::getStatus() +{ +#ifdef KMESSDEBUG_KMESSDBUS + kDebug() << "getStatus() called"; +#endif + + return kmess_->currentAccount_->getStatus(); +} diff --git a/src/autologinview.h b/src/utils/kmessdbus.h similarity index 55% rename from src/autologinview.h rename to src/utils/kmessdbus.h index 7b6c5d6..c1d59cc 100644 --- a/src/autologinview.h +++ b/src/utils/kmessdbus.h @@ -1,9 +1,9 @@ /*************************************************************************** - autologinview.h - description + kmessdbus.cpp - description ------------------- - begin : Mon Feb 10 2003 - copyright : (C) 2003 by Mike K. Bennett - email : mkb137b@hotmail.com + begin : Wed Jun 25 2008 + copyright : (C) 2008 by Ruben Vandamme + email : vandammeru gmail.com ***************************************************************************/ /*************************************************************************** @@ -15,37 +15,36 @@ * * ***************************************************************************/ -#ifndef AUTOLOGINVIEW_H -#define AUTOLOGINVIEW_H +#ifndef KMESSDBUS_H +#define KMESSDBUS_H -#include "ui_autologinview.h" +#include -#include +class KMess; -/** - * @brief The login status message widget. - * - * This class displays the "Logging in..." status message - * in the main window, and displays the KMess icon. - * - * @author Mike K. Bennett - * @ingroup Root - */ -class AutologinView : public QWidget, public Ui::AutologinView +class KMessDBus: public QObject { Q_OBJECT + Q_CLASSINFO( "D-Bus Interface", "org.kmess.remoteControl" ) - public: + public: // Public methods // The constructor - AutologinView( QWidget *parent=0 ); + KMessDBus( KMess *parent ); // The destructor - ~AutologinView(); + virtual ~KMessDBus(); public slots: - // Change the connection status text - void statusMessage( QString text ); + void connect(); + void disconnect(); + bool isConnected(); + void setStatus( int status ); + int getStatus(); + + private: + KMess *kmess_; + }; #endif diff --git a/src/utils/kmessdbus.xml b/src/utils/kmessdbus.xml new file mode 100644 index 0000000..30c9ba0 --- /dev/null +++ b/src/utils/kmessdbus.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/utils/kmessshared.cpp b/src/utils/kmessshared.cpp new file mode 100644 index 0000000..503af50 --- /dev/null +++ b/src/utils/kmessshared.cpp @@ -0,0 +1,414 @@ +/*************************************************************************** + kmessshared.cpp - description + ------------------- + begin : Thu May 8 2008 + copyright : (C) 2008 by Valerio Pilo + email : valerio@kmess.org + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "kmessshared.h" + +#include "../kmess.h" +#include "../kmessapplication.h" +#include "../kmessdebug.h" +#include "../currentaccount.h" +#include "../network/soap/passportloginservice.h" +#include "kmessconfig.h" + +#include +#include + +#include +#include + +#ifdef KMESSDEBUG_SHAREDMETHODS + #define KMESSDEBUG_SHARED_OPENEXTERNAL +#endif + + + +// Create a HMACSha1 hash +QByteArray KMessShared::createHMACSha1 ( const QByteArray &keyForHash , const QByteArray &secret ) +{ + // The algorithm is definited into RFC 2104 + int blocksize = 64; + QByteArray key( keyForHash ); + QByteArray data( secret ); + QByteArray opad( blocksize, 0x5c ); + QByteArray ipad( blocksize, 0x36 ); + + // If key size is too larg, compute the hash + if( key.size() > blocksize ) + { + key = QCryptographicHash::hash( key, QCryptographicHash::Sha1 ); + } + + // If too small, pad with 0x00 + if( key.size() < blocksize ) + { + key += QByteArray( blocksize - key.size() , 0x00 ); + + } + + // Compute the XOR operations + for(int i=0; i < key.size() - 1; i++ ) + { + ipad[i] = (char) ( ipad[i] ^ key[i] ); + opad[i] = (char) ( opad[i] ^ key[i] ); + } + + // Append the data to ipad + ipad += data; + + // Compute result: hash sha1 of ipad + QByteArray result; + result = QCryptographicHash::hash( ipad, QCryptographicHash::Sha1 ); + + // Append the data to opad + opad += result; + + // Return array contains the result of HMACSha1 + return QCryptographicHash::hash( opad, QCryptographicHash::Sha1 ); +} + + + +// Create the html file to request the given service +QString KMessShared::createRequestFile( const QString &folder ) +{ + CurrentAccount *currentAccount = CurrentAccount::instance(); + + // Use the method into passport to compute the token + QString token = PassportLoginService::createHotmailToken( currentAccount->getPassportToken(), + currentAccount->getProofToken(), folder ); + + // Use one file for hml page with post method + QString filename = KMessConfig::instance()->getAccountDirectory( currentAccount-> getHandle() ) + + "/hotmail.htm"; + + QFile file( filename ); + if ( ! file.open( QIODevice::WriteOnly | QIODevice::Text ) ) + { + return ""; + } + + QTextStream outBuffer( &file ); + + QString pageHtml = "
getLanguageCode() + + "\" method=\"POST\">
"; + + // Write and close the file + outBuffer << pageHtml; + file.close(); + + return filename; +} + + + +// Return a derived key with HMACSha1 algorithm +QByteArray KMessShared::deriveKey ( const QByteArray &keyToDerive, const QByteArray &magic ) +{ + // create the four hashes needed for the implementation. + QByteArray hash1, hash2, hash3, hash4, temp; + QByteArray key(keyToDerive); + + // append the magic string. + temp.append ( magic ); + + // create the HMAC Sha1 hash and assign it. + hash1 = createHMACSha1 ( key, temp ); + temp.clear(); + + // append the first hash with the magic string. + temp.append ( hash1 + magic ); + + // create the HMAC Sha1 hash and assign it. + hash2 = createHMACSha1 ( key, temp ); + temp.clear(); + + // append the first hash. + temp.append ( hash1 ); + + // create the HMAC Sha1 hash and assign it. + hash3 = createHMACSha1 ( key, temp ); + temp.clear(); + + // assign the third hash with the magic string. + temp.append ( hash3 + magic ); + // create the HMAC Sha1 hash and assign it. + hash4 = createHMACSha1 ( key, temp ); + temp.clear(); + + // return the second hash with the first four bytes of the fourth hash. + return hash2 + hash4.left ( 4 ); +} + + + +/** + * @brief Generate a random GUID. + * + * This is used in MSNP2P for the Call ID and Branch ID. + * + * @return A randomly generated GUID value. + */ +QString KMessShared::generateGUID() +{ + // This code is based on Kopete, but much shorter. + QString guid = "{" + + QString::number((rand() & 0xAAFF) + 0x1111, 16) + + QString::number((rand() & 0xAAFF) + 0x1111, 16) + + "-" + + QString::number((rand() & 0xAAFF) + 0x1111, 16) + + "-" + + QString::number((rand() & 0xAAFF) + 0x1111, 16) + + "-" + + QString::number((rand() & 0xAAFF) + 0x1111, 16) + + "-" + + QString::number((rand() & 0xAAFF) + 0x1111, 16) + + QString::number((rand() & 0xAAFF) + 0x1111, 16) + + QString::number((rand() & 0xAAFF) + 0x1111, 16) + + "}"; + return guid.toUpper(); +} + + + +/** + * @brief Generate an random number to use as ID. + * + * For use in MSNP2P, the value will not be below 4 + * + * @return A random value between 4 and 4294967295. + */ +unsigned long KMessShared::generateID() +{ + return (rand() & 0x00FFFFFC); +} + + + +// Return the hash of a file name using the SHA1 algorithm +QByteArray KMessShared::generateFileHash( const QString &fileName ) +{ + // Read the file's contents into a byte array + QFile file( fileName ); + if( ! file.open( QIODevice::ReadOnly ) ) + { + return QByteArray(); + } + + QByteArray fileData( file.readAll() ); + + file.close(); + + // Retrieve and return the file's hash + return QCryptographicHash::hash( fileData, QCryptographicHash::Sha1 ); +} + + + + +/** + * @brief Open the given URL respecting the user's preference + * + * The program which will open the URL is the one selected in the Global Settings + * + * @param url The URL to open + */ +void KMessShared::openBrowser( const KUrl &url ) +{ + // Open the options + KConfigGroup group = KMessConfig::instance()->getGlobalConfig( "General" ); + + QString browser; + QString fallbackBrowser( group.readEntry( "customBrowser", "konqueror" ) ); + + // Obtain the widget of the main KMess window, to correctly link it to the opened browser + KMessApplication *kmessApp = static_cast( kapp ); + QWidget *mainWindow = kmessApp->getContactListWindow()->window(); + + // Read which browser has to be opened + QString browserChoice( group.readEntry( "useBrowser", "KDE" ) ); + +#ifdef KMESSDEBUG_SHARED_OPENEXTERNAL + kDebug() << "Opening URL" << url << "- The setting is" << browserChoice; +#endif + + // If the preference had an invalid choice, use the KDE default browser. + if( browserChoice != "custom" + && browserChoice != "listed" + && browserChoice != "KDE" ) + { + kWarning() << "Invalid browser choice:" << browserChoice << ", using KDE default."; + + browserChoice = "KDE"; + } + + // Launch the appropriate browser + if( browserChoice == "custom" ) + { + browser = group.readEntry( "customBrowser", fallbackBrowser ); +#ifdef KMESSDEBUG_SHARED_OPENEXTERNAL + kDebug() << "Custom browser selected:" << browser; +#endif + } + else if( browserChoice == "listed" ) + { + browser = group.readEntry( "listedBrowser", fallbackBrowser ); +#ifdef KMESSDEBUG_SHARED_OPENEXTERNAL + kDebug() << "Listed browser selected:" << browser; +#endif + } + + // If the option isn't valid use the KDE default + if( browser.isEmpty() ) + { +#ifdef KMESSDEBUG_SHARED_OPENEXTERNAL + kDebug() << "Invalid browser option, using KDE default."; +#endif + browserChoice = "KDE"; + } + + if( browserChoice == "KDE" ) + { +#ifdef KMESSDEBUG_SHARED_OPENEXTERNAL + kDebug() << "KDE default browser selected."; +#endif + new KRun( url, mainWindow ); + return; + } + + // Replace the %u in the command line with the actual URL, and launch the browser. + browser.replace( "%u", "\"" + url.url() + "\"", Qt::CaseInsensitive ); + KRun::run( browser, KUrl::List(), mainWindow ); +} + + + +/** + * @brief Open the given URL mail respecting the user's preference + * + * The program which will open the URL is the one selected in the Global Settings + * + * @param folder The folder to open. + * @param isHotmailAvailable Whether Hotmail can be used to access the e-mail for this account. + */ +void KMessShared::openEmailClient( const QString folder, bool isHotmailAvailable ) +{ + // Open the options + KConfigGroup group = KMessConfig::instance()->getGlobalConfig( "General" ); + + // When using Live! Mail accounts, the webmail can be used + if( isHotmailAvailable && group.readEntry( "useLiveMail", true ) ) + { + // Create the request file + QString filename( createRequestFile( folder ) ); + if( ! filename.isEmpty() ) + { + // Open the webmail in the browser + openBrowser( KUrl( "file://" + filename ) ); + } + + return; + } + + QString mailClient; + QString fallbackMailClient( group.readEntry( "customMailClient", "kmail" ) ); + + // Obtain the widget of the main KMess window, to correctly link it to the opened app + KMessApplication *kmessApp = static_cast( kapp ); + QWidget *mainWindow = kmessApp->getContactListWindow()->window(); + + // Read which mail client has to be opened + QString mailClientChoice( group.readEntry( "useMailClient", "KDE" ) ); + +#ifdef KMESSDEBUG_SHARED_OPENEXTERNAL + kDebug() << "Opening mail at" << folder << "- The setting is" << mailClientChoice; +#endif + + // If the preference had an invalid choice, use the KDE default mail client. + if( mailClientChoice != "custom" + && mailClientChoice != "listed" + && mailClientChoice != "KDE" ) + { + kWarning() << "Invalid mail client choice:" << mailClientChoice << ", using KDE default."; + + mailClientChoice = "KDE"; + } + + // Launch the appropriate mail client + if( mailClientChoice == "custom" ) + { + mailClient = group.readEntry( "customMailClient", fallbackMailClient ); +#ifdef KMESSDEBUG_SHARED_OPENEXTERNAL + kDebug() << "Custom mail client selected:" << mailClient; +#endif + } + else if( mailClientChoice == "listed" ) + { + mailClient = group.readEntry( "listedMailClient", fallbackMailClient ); +#ifdef KMESSDEBUG_SHARED_OPENEXTERNAL + kDebug() << "Listed mail client selected:" << mailClient; +#endif + } + + // If the option isn't valid use the KDE default + if( mailClient.isEmpty() ) + { +#ifdef KMESSDEBUG_SHARED_OPENEXTERNAL + kDebug() << "Invalid mail client option, using KDE default."; +#endif + mailClientChoice = "KDE"; + } + + // Retrieve the mail address to open + QString handleToSend; + if( folder.contains( "?mailto=1&to=" ) ) + { + handleToSend = folder.split( "?mailto=1&to=" )[1]; + } + + if( mailClientChoice == "KDE" ) + { +#ifdef KMESSDEBUG_SHARED_OPENEXTERNAL + kDebug() << "KDE default mail client selected."; +#endif + new KRun( "mailto:" + handleToSend, mainWindow ); + return; + } + + // Replace the %u in the command line with the contact address, and launch the application. + mailClient.replace( "%u", "\"" + handleToSend + "\"", Qt::CaseInsensitive ); + KRun::run( mailClient, KUrl::List(), mainWindow ); +} + + + +// Open the give Profile +void KMessShared::openProfile( const QString &handle ) +{ + QString folder = "http://members.msn.com/default.msnw?mem=" + handle + "&pgmarket"; + QString filename = createRequestFile( folder ); + if( filename.isEmpty() ) + { + return; + } + + // Open the profile in the browser + openBrowser( KUrl( "file://" + filename ) ); +} diff --git a/src/utils/kmessshared.h b/src/utils/kmessshared.h new file mode 100644 index 0000000..f47e592 --- /dev/null +++ b/src/utils/kmessshared.h @@ -0,0 +1,64 @@ +/*************************************************************************** + kmessshared.h - description + ------------------- + begin : Thu May 8 2008 + copyright : (C) 2008 by Valerio Pilo + email : valerio@kmess.org + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef KMESSSHARED_H +#define KMESSSHARED_H + +#include + + +// Forward declaration +class KUrl; + + + +/** + * @brief Shared globally useful methods for KMess + * + * This class is just a container for many methods which are useful throughout the entire + * application. + * + * @author Valerio Pilo + * @ingroup Utils + */ +class KMessShared +{ + + public: // Public static methods + // Create a HMACSha1 hash + static QByteArray createHMACSha1( const QByteArray &keyForHash, const QByteArray &secret ); + // Return a derived key with HMACSha1 algorithm + static QByteArray deriveKey( const QByteArray &keyToDerive, const QByteArray &magic ); + // Generate a random GUID. + static QString generateGUID(); + // Generate an random number to use as ID + static unsigned long generateID(); + // Return the hash of a file name using the SHA1 algorithm + static QByteArray generateFileHash( const QString &fileName ); + // Open the given URL respecting the user's preference + static void openBrowser( const KUrl &url ); + // Open the given URL mail respecting the user's preference + static void openEmailClient( const QString folder, bool isHotmailAvailable = true ); + // Open the give Profile + static void openProfile( const QString &handle ); + + private: + // Create the html file to request the given service + static QString createRequestFile( const QString &folder ); +}; + +#endif diff --git a/src/utils/nowlisteningclient.cpp b/src/utils/nowlisteningclient.cpp index 6eeec81..e99672f 100644 --- a/src/utils/nowlisteningclient.cpp +++ b/src/utils/nowlisteningclient.cpp @@ -22,7 +22,8 @@ #include #include -#include +#include +#include #ifdef KMESSDEBUG_NOWLISTENINGCLIENT @@ -34,6 +35,7 @@ // Therefore some parts are also // (c) 2002-2006 the by Kopete developers +bool NowListeningClient::alreadyQuery = false; /** * Constructor @@ -56,11 +58,18 @@ void NowListeningClient::setEnabled( bool enable ) { if( ! timer_.isActive() ) { + // Reset the fields to avoid problems when the "now listening information" is + // re-enabled. + artist_ = ""; + album_ = ""; + track_ = ""; + playing_ = false; + // Query directly so the GUI is up to date slotUpdate(); - // check every 5 seconds - timer_.start( 5000 ); + // check every 8 seconds + timer_.start( 8000 ); } } else @@ -92,7 +101,8 @@ void NowListeningClient::slotUpdate() playing_ = false; // Query all applications: the first found stops the search - if( queryAmarok() + if( queryAmarok1() + || queryAmarok2() || queryJuk() || queryKsCD() ) { @@ -103,10 +113,13 @@ void NowListeningClient::slotUpdate() #endif // App found and playing, detect change. - if( ( playing_ && prevArtist != artist_ ) - || prevAlbum != album_ - || prevTrack != track_ - || ! prevPlaying ) + // Check if player is playing ( and if the song was changed ) or if the player was stopped/paused + // and now play again. + if( ( playing_ && + ( prevArtist != artist_ + || prevAlbum != album_ + || prevTrack != track_ ) ) || ( ! prevPlaying && playing_ ) + ) { #ifdef KMESSDEBUG_NOWLISTENINGCLIENT_GENERAL kDebug() << "playing information changed, emitting changedSong()."; @@ -127,13 +140,67 @@ void NowListeningClient::slotUpdate() +/** + * Query Amarok 1.x for track information. + */ +bool NowListeningClient::queryAmarok1() +{ + // Check for executable to avoid problem of defunct fork + if( KStandardDirs::findExe( "dcop" ).isEmpty() ) + { + return false; + } + + QStringList defaultParams( QStringList() << "dcop" << "amarok" << "default" ); + + KProcess proc; + proc.setOutputChannelMode( KProcess::OnlyStdoutChannel ); + + // Read the 'is playing' answer. This will filter out the case of a missing "dcop" command, and of + // a "amarok is not playing/paused" answer + proc.setProgram( defaultParams + QStringList( "isPlaying" ) ); + proc.execute( 250 ); + if( ! proc.readAllStandardOutput().contains( "true" ) ) + { + proc.kill(); + return false; + } + + playing_ = true; + + // Run the DCOP client and selectively ask the artist, album and title + proc.setProgram( defaultParams + QStringList( "artist" ) ); + proc.execute( 250 ); + artist_ = QString::fromUtf8( proc.readAllStandardOutput() ).simplified(); + + proc.setProgram( defaultParams + QStringList( "album" ) ); + proc.execute( 250 ); + album_ = QString::fromUtf8( proc.readAllStandardOutput() ).simplified(); + + proc.setProgram( defaultParams + QStringList( "title" ) ); + proc.execute( 250 ); + track_ = QString::fromUtf8( proc.readAllStandardOutput() ).simplified(); + + proc.kill(); + return true; +} + + + /** * Query Amarok for track information. */ -bool NowListeningClient::queryAmarok() +bool NowListeningClient::queryAmarok2() { + if( alreadyQuery ) + { + return false; + } + + alreadyQuery = true; + // Start the d-bus interface, needed to check the application status and make calls to it - QDBusInterface dbusAmarok( "org.kde.amarok", "/Player", "org.kde.Amarok.Player" ); + QDBusInterface dbusAmarok( "org.mpris.amarok", "/Player", "org.freedesktop.MediaPlayer" ); // See if the application is registered. if( ! dbusAmarok.isValid() ) @@ -146,12 +213,10 @@ bool NowListeningClient::queryAmarok() #endif // Call Amarok to know whether it's playing, and what - QDBusReply album = dbusAmarok.call( "album" ); - QDBusReply track = dbusAmarok.call( "title" ); - QDBusReply artist = dbusAmarok.call( "artist" ); - QDBusReply isPlaying = dbusAmarok.call( "isPlaying" ); + QDBusReply metadata = dbusAmarok.call( QDBus::BlockWithGui, "GetMetadata" ); + QDBusReply isPlaying = dbusAmarok.call( QDBus::BlockWithGui, "GetStatus" ); - if( ! isPlaying.isValid() || ! album.isValid() || ! track.isValid() || ! artist.isValid() ) + if( ! isPlaying.isValid() || ! metadata.isValid() ) { #ifdef KMESSDEBUG_NOWLISTENINGCLIENT_GENERAL kDebug() << "Invalid response from Amarok!"; @@ -160,11 +225,16 @@ bool NowListeningClient::queryAmarok() return false; } + // Get the list of properties from the map + QVariantMap map( metadata.value() ); + // Save the returned values - album_ = album; - track_ = track; - artist_ = artist; - playing_ = isPlaying; + album_ = map[ "album" ].toString(); + track_ = map[ "title" ].toString(); + artist_ = map[ "artist" ].toString(); + playing_ = ( isPlaying == 0 ); // 0 playing, 1 paused, 2 stopped + + alreadyQuery = false; return true; } @@ -176,6 +246,13 @@ bool NowListeningClient::queryAmarok() */ bool NowListeningClient::queryKsCD() { + if( alreadyQuery ) + { + return false; + } + + alreadyQuery = true; + // Start the d-bus interface, needed to check the application status and make calls to it QDBusInterface dbusKsCD( "org.kde.kscd", "/CDPlayer", "org.kde.KSCD" ); @@ -190,10 +267,10 @@ bool NowListeningClient::queryKsCD() #endif // Call KsCD to know whether it's playing, and what - QDBusReply album = dbusKsCD.call( "currentAlbum" ); - QDBusReply track = dbusKsCD.call( "currentTrackTitle" ); - QDBusReply artist = dbusKsCD.call( "currentArtist" ); - QDBusReply isPlaying = dbusKsCD.call( "playing" ); + QDBusReply album = dbusKsCD.call( QDBus::BlockWithGui, "currentAlbum" ); + QDBusReply track = dbusKsCD.call( QDBus::BlockWithGui, "currentTrackTitle" ); + QDBusReply artist = dbusKsCD.call( QDBus::BlockWithGui, "currentArtist" ); + QDBusReply isPlaying = dbusKsCD.call( QDBus::BlockWithGui, "playing" ); if( ! isPlaying.isValid() || ! album.isValid() || ! track.isValid() || ! artist.isValid() ) { @@ -210,6 +287,8 @@ bool NowListeningClient::queryKsCD() artist_ = artist; playing_ = isPlaying; + alreadyQuery = false; + return true; } @@ -220,6 +299,13 @@ bool NowListeningClient::queryKsCD() */ bool NowListeningClient::queryJuk() { + if( alreadyQuery ) + { + return false; + } + + alreadyQuery = true; + // Start the d-bus interface, needed to check the application status and make calls to it QDBusInterface dbusJuk( "org.kde.juk", "/Player", "org.kde.juk.player" ); @@ -234,10 +320,10 @@ bool NowListeningClient::queryJuk() #endif // Call KsCD to know whether it's playing, and what - QDBusReply album = dbusJuk.call( "trackProperty", "Album" ); - QDBusReply track = dbusJuk.call( "trackProperty", "Title" ); - QDBusReply artist = dbusJuk.call( "trackProperty", "Artist" ); - QDBusReply isPlaying = dbusJuk.call( "playing" ); + QDBusReply album = dbusJuk.call( QDBus::BlockWithGui, "trackProperty", "Album" ); + QDBusReply track = dbusJuk.call( QDBus::BlockWithGui, "trackProperty", "Title" ); + QDBusReply artist = dbusJuk.call( QDBus::BlockWithGui, "trackProperty", "Artist" ); + QDBusReply isPlaying = dbusJuk.call( QDBus::BlockWithGui, "playing" ); if( ! isPlaying.isValid() || ! album.isValid() || ! track.isValid() || ! artist.isValid() ) { @@ -254,6 +340,8 @@ bool NowListeningClient::queryJuk() artist_ = artist; playing_ = isPlaying; + alreadyQuery = false; + return true; } diff --git a/src/utils/nowlisteningclient.h b/src/utils/nowlisteningclient.h index df25be1..bdd0b2d 100644 --- a/src/utils/nowlisteningclient.h +++ b/src/utils/nowlisteningclient.h @@ -37,7 +37,7 @@ class QDBusInterface; * When the current song changed, the changedSong() signal will be fired. * * @author Diederik van der Boor, Valerio Pilo - * @ingroup Root + * @ingroup Utils */ class NowListeningClient : public QObject { @@ -54,8 +54,10 @@ class NowListeningClient : public QObject public slots: // Update the current song void slotUpdate(); - // Query Amarok for track information - bool queryAmarok(); + // Query Amarok 1 for track information + bool queryAmarok1(); + // Query Amarok 2 for track information + bool queryAmarok2(); // Query KsCD for track information bool queryKsCD(); // Query Juk for track information @@ -72,6 +74,8 @@ class NowListeningClient : public QObject QTimer timer_; // The active track QString track_; + // The flag is used to avoid to calls new dbus request while there is one. + static bool alreadyQuery; signals: void changedSong( const QString &artist, const QString &album, const QString &track, bool playing ); diff --git a/src/utils/richtextparser.cpp b/src/utils/richtextparser.cpp new file mode 100644 index 0000000..0118c28 --- /dev/null +++ b/src/utils/richtextparser.cpp @@ -0,0 +1,883 @@ +/*************************************************************************** + msnplus.cpp - adds MSN Plus! codes/features + ------------------- + begin : April 30, 2008 + copyright : (C) 2008 by Valerio Pilo + email : valerio@kmess.org + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "richtextparser.h" + +#include "../contact/contactbase.h" +#include "../currentaccount.h" +#include "../emoticon.h" +#include "../emoticonmanager.h" +#include "../kmessdebug.h" + +#include + +#include +#include +#include +#include + +#include +#include + + + +// Initialize the list of MSN Plus colors +// Note that a whole lot of colors are still missing from the list +QStringList RichTextParser::predefinedColors_( + QStringList() << "FFFFFF" << "000000" << "00007F" << "009300" << "FF0000" + << "7F0000" << "9C009C" << "FC7F00" << "FFFF00" << "00FC00" + << "009393" << "00FFFF" << "2020FC" << "FF00FF" << "7F7F7F" + << "D2D2D2" << "E7E6E4" << "CFCDD0" << "FFDEA4" << "FFAEB9" + << "FFA8FF" << "B4B4FC" << "BAFBE5" << "C1FFA3" << "FAFDA2" + << "B6B4D7" << "A2A0A1" << "F9C152" << "FF6D66" << "FF62FF" + << "6C6CFF" << "68FFC3" << "8EFF67" << "F9FF57" << "858482" + << "6E6B7D" << "FFA01E" << "F92611" << "FF20FF" << "202BFF" + << "1EFFA5" << "60F913" << "FFF813" << "5E6464" << "4B494C" + << "D98812" << "EB0505" << "DE00DE" << "0000D3" << "03CC88" + << "59D80D" << "D4C804" << "000268" << "18171C" << "944E00" + << "9B0008" << "980299" << "01038C" << "01885F" << "389600" + << "9A9E15" << "473400" << "4D0000" << "5F0162" << "000047" + << "06502F" << "1C5300" << "544D05" ); +// Initialize the qhash maps +QHash RichTextParser::cleanedStringsCache_; +QHash RichTextParser::formattedStringsCache_; +// Initialize the MSN Plus tag matching regexp +QRegExp RichTextParser::colorMatch_( "\\[(c|a)=(#?[0-9a-z]+)\\](.*)\\[/\\1(?:=(#?[0-9a-z]+))?\\]", + Qt::CaseInsensitive ); +// Set the id counter for emoticons not yet received +int RichTextParser::lastPendingEmoticonId_ = 0; +// Set the pointer to the instance of the Emoticon Manager +EmoticonManager *RichTextParser::emoticonManager_ = 0; + + + +// Return the given string with MSN Plus! formatting stripped out +void RichTextParser::getCleanString( QString &string ) +{ + // First check if the string does not need modification + if( ! string.contains( "[" ) ) + { + return; + } + + // Check if the string is already in cache + if( cleanedStringsCache_.contains( string ) ) + { + string = cleanedStringsCache_.value( string ); + return; + } + + const QString originalString = string; + + string.replace( "[b]", "" ) + .replace( "[/b]", "" ) + .replace( "[i]", "" ) + .replace( "[/i]", "" ) + .replace( "[u]", "" ) + .replace( "[/u]", "" ) + .replace( "[s]", "" ) + .replace( "[/s]", "" ); + + string.replace( QRegExp( "\\[/?c=?#?[0-9a-z,]*\\]", Qt::CaseInsensitive ), "" ) + .replace( QRegExp( "\\[/?a=?#?[0-9a-z,]*\\]", Qt::CaseInsensitive ), "" ); + +#ifdef KMESSDEBUG_RICHTEXTPARSER + kDebug() << "Original:" << originalString; + kDebug() << "Parsed:" << string; +#endif + + // Add this to the cache + cleanedStringsCache_.insert( originalString, string ); + + // Keep the queue size to the maximum allowed length + if( cleanedStringsCache_.count() > MSN_PLUS_STRINGCACHESIZE ) + { + cleanedStringsCache_.remove( cleanedStringsCache_.constBegin().key() ); + } +} + + + +// Return the given string with MSN Plus! formatting parsed +void RichTextParser::getFormattedString( QString &string ) +{ + // First check if the string does not need modification + if( ! string.contains( "[" ) ) + { + return; + } + + // Check if the string is already in cache + if( formattedStringsCache_.contains( string ) ) + { + string = formattedStringsCache_.value( string ); + return; + } + + const QString originalString = string; + + string.replace( "[b]", "" ) + .replace( "[/b]", "" ) + .replace( "[i]", "" ) + .replace( "[/i]", "" ) + .replace( "[u]", "" ) + .replace( "[/u]", "" ) + .replace( "[s]", "" ) + .replace( "[/s]", "" ); + + while( colorMatch_.indexIn( string ) != -1 ) + { + bool isForeground = ( colorMatch_.cap( 1 ) == "c" ); + + // match a solid color + if( colorMatch_.cap( 4 ).isEmpty() ) + { + string.replace( colorMatch_.pos(), colorMatch_.matchedLength(), + "" + colorMatch_.cap( 3 ) + "" ); + } + // Match a foreground color gradient + else if( isForeground ) + { + string.replace( colorMatch_.pos(), colorMatch_.matchedLength(), + getHtmlGradient( colorMatch_.cap( 3 ), colorMatch_.cap( 2 ), colorMatch_.cap( 4 ) ) ); + + } + // Match a background color gradient + else + { + string.replace( colorMatch_.pos(), colorMatch_.matchedLength(), + "" + colorMatch_.cap( 3 ) + "" ); + } + } + + // Add the parsed string in a tag which is not usually used elsewhere: this drastically reduces parsing problems + // originated by, for example, missing closing tags + string = "" + string + ""; + +#ifdef KMESSDEBUG_RICHTEXTPARSER + kDebug() << "Original:" << originalString; + kDebug() << "Parsed:" << string; +#endif + + // Add this to the cache + formattedStringsCache_.insert( originalString, string ); + + // Keep the queue size to the maximum allowed length + if( formattedStringsCache_.count() > MSN_PLUS_STRINGCACHESIZE ) + { + formattedStringsCache_.remove( formattedStringsCache_.constBegin().key() ); + } +} + + + +// Turns color codes (english color names, RGB triplets, MSN Plus! palette colors) into an HTML RGB color code +QString RichTextParser::getHtmlColor( const QString& color ) +{ + bool convertedOk; + int colorNum = color.toInt( &convertedOk ); + + // Find colors in the MSN Plus! palette + if( convertedOk ) + { + if( colorNum < predefinedColors_.size() ) + { + return "#" + predefinedColors_[ colorNum ]; + } + else + { + return "#000000"; + } + } + + // Find HTML (#RRGGBB/#RGB) or CSS (red,blue) color codes + int colorLength = color.length(); + if( color[0] == '#' && colorLength != 4 && colorLength != 7 ) + { + // Pad with zeros incomplete RGB triplets + QString paddedColor( color ); + paddedColor.append( QString().fill( '0', 7 - colorLength ) ); + QColor cssOrHtmlColor( paddedColor ); + if( cssOrHtmlColor.isValid() ) + { + return cssOrHtmlColor.name(); + } + } + else + { + QColor cssOrHtmlColor( color ); + if( cssOrHtmlColor.isValid() ) + { + return cssOrHtmlColor.name(); + } + } + + return "#000000"; + +/* + // These are not used with MSN+ Live, though are still parsed for backwards compatibility + + // Find arbitrary RGB triplets + if( color.contains( "," ) ) + { + QStringList rgb = color.split( ",", QString::KeepEmptyParts ); + QColor rgbColor( rgb[0].toInt(), rgb[1].toInt(), rgb[2].toInt() ); + + if( rgbColor.isValid() ) + { + return rgbColor.name(); + } + } +*/ +} + + + +// Turns a string into a gradient colored one, using Qt HTML tags +QString RichTextParser::getHtmlGradient( const QString& text, const QString& startColor, const QString& endColor ) +{ + QColor start( getHtmlColor( startColor ) ); + QColor end ( getHtmlColor( endColor ) ); + + // Skip gradienting wrong colors or empty strings + if( ! start.isValid() || ! end.isValid() || text.isEmpty() ) + { + return text; + } + + QList tags; + QChar character; + QColor current = start; + QString outputText = ""; + unsigned int indexGradient = 0; + int indexFullString = 0; + unsigned int levels = text.length(); + int differenceRed, differenceGreen, differenceBlue, tempRed, tempGreen, tempBlue; + QRegExp looseTagsMatch( "<[^>]+>|&[a-z]+;|&#[0-9]+;|\\[/?[ca](=#?[0-9a-z]+)?\\]", Qt::CaseInsensitive ); + +#ifdef KMESSDEBUG_RICHTEXTPARSER + kDebug() << "Text to gradient:" << text; +#endif + + // Search in the text all the tags to skip, and store their positions for faster parsing + while( looseTagsMatch.indexIn( text, indexFullString, QRegExp::CaretAtOffset ) > -1 ) + { + int pos = looseTagsMatch.pos( 0 ); + int len = looseTagsMatch.matchedLength(); + +#ifdef KMESSDEBUG_RICHTEXTPARSER + kDebug() << "Adding tag to skip at pos" << pos << "(len" << len << "):" << looseTagsMatch.cap( 0 ); +#endif + + // Add position and length of the tag to allow skipping it later + tags << pos; + tags << len; + + // Continue searching after the tag + indexFullString = pos + len; + + // Subtract from the gradient size the tag length: it will be output as one single char + levels -= len; + } + + // Calculate the RGB difference between the starting and ending color + differenceRed = (int)floor( (float)( start.red () - end.red () ) / (float)levels ); + differenceGreen = (int)floor( (float)( start.green() - end.green() ) / (float)levels ); + differenceBlue = (int)floor( (float)( start.blue () - end.blue () ) / (float)levels ); + +#ifdef KMESSDEBUG_RICHTEXTPARSER + kDebug() << "Size is" << text.length() <<"(" << levels << "stripped) -" + << "Colored from" << start.name() << "to" << end.name() << ", difference: (" + << differenceRed << "," << differenceGreen << "," << differenceBlue << ")"; +#endif + + // When the start and end colors are the same, don't waste time creating a gradient with only one color + if( differenceRed == 0 && differenceGreen == 0 && differenceBlue == 0 ) + { +#ifdef KMESSDEBUG_RICHTEXTPARSER + kDebug() << "The gradient colors are equal, converting it to solid color."; +#endif + + return "" + text + ""; + } + + // Proceed through the entire original string + for( indexFullString = 0; indexFullString < text.length(); indexFullString++ ) + { + // Get the new values for the current gradient character + tempRed = start.red () - ( differenceRed * indexGradient ); + tempGreen = start.green() - ( differenceGreen * indexGradient ); + tempBlue = start.blue () - ( differenceBlue * indexGradient ); + + // The values may get out of the limits, and since setRgb() voids the whole RGB color if one of the values is + // out of range, we must assure them to be always in range + current.setRgb( tempRed < 0 ? 0 : ( tempRed > 255 ? 255 : tempRed ), + tempGreen < 0 ? 0 : ( tempGreen > 255 ? 255 : tempGreen ), + tempBlue < 0 ? 0 : ( tempBlue > 255 ? 255 : tempBlue ) ); + + // Match the formatting tags: they must be skipped + if( tags.count() > 0 && tags.first() == indexFullString ) + { + // Remove the tag position and size from the list + tags.takeFirst(); + int matchLength = tags.takeFirst(); + + // Output the whole tag as a single color + outputText += "" + text.mid( indexFullString, matchLength ) + ""; + +#ifdef KMESSDEBUG_RICHTEXTPARSER + kDebug() << "Outputting whole tag:" << text.mid( indexFullString, matchLength ); +#endif + + // Move the index on to the tag end + indexFullString += matchLength - 1; + continue; + } + + // Get the next character to colorize + character = text[ indexFullString ]; + + // Use the to save characters + outputText += "" + character + ""; + + indexGradient++; + } + + return outputText; +} + + + +/** + * @brief Initialize the class + */ +void RichTextParser::initialize() +{ + colorMatch_.setMinimal( true ); + emoticonManager_ = EmoticonManager::instance(); +} + + + +/** + * @brief Replace the very old Messenger Plus characters with HTML markup + * + * Replace the oldest MSN+ tags with HTML-compatible formatting. This kind of formatting + * method uses reserved characters - thing which may cause i18n problems - but many MSN+ + * commands (most notably, the predefined messages with sound) still use it. + * + * @param text The text to format. The original string will be lost. + */ +void RichTextParser::parseMsnPlusString( QString &text ) +{ + bool boldFlag = false; + bool italicFlag = false; + bool underlineFlag = false; + bool fontFlag = false; + QColor color; + + QRegExp htmlTest( "^\x04""&#?[a-z0-9]+;" ); + QRegExp fontCapture = QRegExp( "^\x03""([0-9]{1,2})(,([0-9]{1,2}))?" ); + + for( int index = 0; index < text.length(); index++ ) + { + switch( text.at( index ).unicode() ) + { + case 0x0002: // bold character + boldFlag = !boldFlag; + + text = text.replace( index, 1, ( boldFlag ) ? "" : "" ); + index += ( boldFlag ) ? 2 : 3; // Skip the characters we've just added + break; + + case 0x0003: // color character + fontFlag = !fontFlag; + + fontCapture.indexIn( text, index, QRegExp::CaretAtOffset ); + + color = getHtmlColor( fontCapture.cap(1) ); + + // Font background text is ignored, as it's impossible to render in Qt's HTML subset + if( fontCapture.matchedLength() == -1 ) + { + // No color found after the special character, close the html tag + text = text.replace( index, 1, "" ); + index += 6; // Skip the characters we've just added + } + else + { + // Font color open + text = text.replace( index, fontCapture.matchedLength(), "" ); + index += 21; // Skip the characters we've just added + } + break; + + case 0x0004: + // Sound tag: this character is followed by another which identifies the sound ID + htmlTest.indexIn( text, index, QRegExp::CaretAtOffset ); + if( htmlTest.matchedLength() != -1 ) + { + // Some sounds IDs are HTML entities: that has to be taken care of, too + text = text.replace( index, htmlTest.matchedLength(), "" ); + } + else + { + // we need to delete this character and the following one from the string + text = text.replace( index, 2, "" ); + } + + // Restart from where we encountered the starting character + index -= 1; + break; + + case 0x0005: // italic character + italicFlag = !italicFlag; + + text = text.replace( index, 1, ( italicFlag ) ? "" : "" ); + index += ( italicFlag ) ? 2 : 3; // Skip the characters we've just added + break; + + case 0x001f: // underline character + underlineFlag = !underlineFlag; + + text = text.replace( index, 1, ( underlineFlag ) ? "" : "" ); + index += ( underlineFlag ) ? 2 : 3; // Skip the characters we've just added + break; + } + + } + + // Close any tag still open. Hopefully, the parser will not complain too much if the closing order is wrong + if( boldFlag ) text.append( "" ); + if( italicFlag ) text.append( "" ); + if( underlineFlag ) text.append( "" ); + if( fontFlag ) text.append( "" ); +} + + + +/** + * Transform a string into its rich text form + * + * This is the one-stop shop for text parsing. This method is capable of single-pass conversion of + * many things in their rich text equivalents: + * - web links are made clickable, even geek-style "kmess.org" links and email addresses + * - emoticons shortcuts are transformed in HTML image tags, even custom ones, and not yet received ones + * - MSN Plus formatting is turned into HTML formatting + * + * @param text The string to parse + * @param showEmoticons Whether to show MSN emoticons in the parsed string + * @param showSmallEmoticons Whether the emoticons should be full-size or small + * @param showLinks Whether to enable clickable links and email addresses + * @param showFormatting Whether to show or strip away MSN+ formatting tags + * @param handle If not null or empty, custom emoticons of this contact will be parsed + * @param pendingEmoticonTags If the handle is specified, this must be too: this is a list of pending + * custom emoticons which the contact specified by handle has sent to us. + */ +void RichTextParser::parseMsnString( QString &text, bool showEmoticons, bool showSmallEmoticons, bool showLinks, bool showFormatting, const QString &handle, QStringList &pendingEmoticonTags ) +{ + Emoticon::htmlEscape( text ); + + // Links and emoticons are replaced in one loop cycle, traversing the message text + // Multiple search-replace cyles give unwanted side effects: + // - smileys can pop up in links like ftp://user:pass@host/ and https://host + // - emoticon replacements could be replaced by another cycle + + bool allowAddingEmoticons = false; + + // Build a collection of all emoticon data + const QRegExp &emoticonRegExp = emoticonManager_->getHtmlPattern(); + const QMap &emoticonReplacements = emoticonManager_->getHtmlReplacements( showSmallEmoticons ); + + + QString code; + QRegExp customRegExp; + QRegExp pendingRegExp; + QMap customReplacements; + QString customEmoticonsPattern; + + // Get theme of custom emoticons + if( &handle != 0 && ! handle.isEmpty() ) + { + // Avoid problems if no list of pending emoticons has been given + if( &pendingEmoticonTags == 0 ) + { + kWarning() << "The given pending emoticons list is not valid!"; + pendingEmoticonTags = QStringList(); + } + + if( handle == CurrentAccount::instance()->getHandle() ) + { + customRegExp = emoticonManager_->getHtmlPattern( true ); + customReplacements = emoticonManager_->getHtmlReplacements( showSmallEmoticons, true ); + // We already have all of our emoticons, there are no pending ones + } + else + { + const ContactBase *contact = CurrentAccount::instance()->getContactByHandle( handle ); + if( contact != 0 ) + { + customRegExp = contact->getEmoticonPattern(); + customReplacements = contact->getEmoticonReplacements(); + pendingRegExp = contact->getPendingEmoticonPattern(); + + allowAddingEmoticons = true; + customEmoticonsPattern = emoticonManager_->getHtmlPattern( true ).pattern(); + } + } + } + + + QRegExp linkRegExp; + linkRegExp.setPattern( "\\b(?:http://|https://|ftp://|sftp://|www\\.)" // match protocol string + "[^ \r\n]+" // followed by the host/path + ); + + QRegExp emailRegExp; + emailRegExp.setPattern( + "\\b(" // begin of word, start capture + "[a-z0-9_\\-\\.]+" // match e-mail username + "\\@" // match '@' + "[a-z0-9\\-\\.]+" // match domain hostname + "[a-z0-9]{2,3}" // match top-level-domain + ")" // end capture` + "(?:[^a-zA-Z0-9\\-]|$)" // not followed by more simple characters, or should find an end-of-line + ); + + QRegExp geekLinkRegExp; + geekLinkRegExp.setPattern( + "(^|\\b)" // look-before test, for start of capture or word delimiter + "(" // begin of word, start capture + "([a-z0-9\\-]+\\.)+" // match simple characters, but it should contain a dot between each part + "([a-z]{2,3})" // finally match domain part 2 or 3 characters + "(/[a-z0-9\\-_/\\.?=&]+)?" // match the path on the server and simple query requests + ")" // end capture + "(?:[^a-zA-Z0-9]|$)" // not followed by more simple characters, or should find an end-of-line + ); + + QRegExp punctuationChars( "(?:[.,;!?\"'])$" ); + QRegExp invalidCcTld( "^(js|hh|cc|ui|fo|so|ko|qt|pp|cf|am|in|gz|ps|ai|rv|rm|wm)$" ); // block typical files instead of listing the whole country code list + QRegExp topLevelDomain( "^(?:com|org|net|edu|gov)$" ); + +#ifdef KMESSTEST + KMESS_ASSERT( emoticonRegExp.isValid() ); + KMESS_ASSERT( emailRegExp.isValid() ); + KMESS_ASSERT( linkRegExp.isValid() ); + KMESS_ASSERT( geekLinkRegExp.isValid() ); +#endif + + // Set the filename of the placeholder image for pending emoticons + static QString pendingEmoticonPlaceholder( KGlobal::dirs()->findResource( "appdata", "pics/empty.png" ) ); + + static const int REGEXP_COUNT = 6; + const QRegExp* regexps[REGEXP_COUNT]; + regexps[0] = ( customRegExp.isEmpty() ? 0 : &customRegExp ); // is first, to allow overwriting normal emoticons + regexps[1] = ( pendingRegExp.isEmpty() ? 0 : &pendingRegExp ); + regexps[2] = ( showEmoticons && ! emoticonRegExp.isEmpty() ? &emoticonRegExp : 0 ); + regexps[3] = ( showLinks ? &linkRegExp : 0 ); + regexps[4] = ( showLinks ? &emailRegExp : 0 ); + regexps[5] = ( showLinks ? &geekLinkRegExp : 0 ); + + QString replacement; + int lastPos = 0; + int matches[ REGEXP_COUNT]; + memset( matches, -1, sizeof( matches ) ); + + while( true ) + { + // Find out which expression matches first + int matchedRegExp = -1; + int matchStart = -1; + int matchedLength = 0; + for(int i = 0; i < REGEXP_COUNT; i++) + { + if( regexps[ i ] == 0 ) + { + continue; + } + + matches[ i ] = regexps[ i ]->indexIn( text, lastPos ); + if( matches[ i ] == -1 || (int) text.length() < matches[ i ] ) + { + continue; + } + +/*#ifdef KMESSDEBUG_CHATVIEW + kDebug() << "regexp " << i << " matches at character " << matches[ i ]; +#endif*/ + + // See if it's before all other regexps + if( matches[ i ] < matchStart || matchStart == -1 ) + { + matchStart = matches[ i ]; + matchedRegExp = i; + matchedLength = regexps[ i ]->matchedLength(); + } + } + + + QString link; + QString linkBefore; + QString code; + QString altText; + QString placeholderId; + + // Determine the replacement for the matched expression + switch( matchedRegExp ) + { + + // Found a custom emoticon + case 0: + code = text.mid( matchStart, customRegExp.matchedLength() ); // cap(0) is not const + + // Avoid replacing invalid emoticons with nothing + if( ! customReplacements.contains( code ) ) + { +#ifdef KMESSDEBUG_CHATVIEW + kWarning() << "Emoticon replacement for '" << code << "' not found!"; +#endif + replacement = code; + break; + } + + replacement = customReplacements[ code ]; + + // This emoticon is unknown, allow the user to add it by adding an internal KMess link to it + if( allowAddingEmoticons && ! customEmoticonsPattern.contains( code ) ) + { + QString imagePath( replacement ); + QString urlCode = QUrl::toPercentEncoding( code ); + + // Retrieve the image name from the replacement + imagePath = imagePath.replace( "\"", "'" ); + imagePath = imagePath.mid( imagePath.indexOf( "src='" ) + 5 ); + imagePath = imagePath.mid( 0, imagePath.indexOf( "'" ) ); + + // The name attribute is required as, if the user adds the emoticon, we'll want to make all links like this unclickable + replacement = "" + + replacement + + ""; + } + break; + + + // Found a custom emoticon, but the image file is still being downloaded + // Generate a placeholder tag, , and update this tag later when the emoticon is received + case 1: + // Generate and store placeholder ID + placeholderId = "ce" + QString::number( ++lastPendingEmoticonId_ ); + pendingEmoticonTags.append( placeholderId ); + + // Insert placeholder + code = text.mid( matchStart, pendingRegExp.matchedLength() ); // cap(0) is not const + replacement = "" + code
+                    + ""; + break; + + + // Found an emoticon + case 2: + code = text.mid( matchStart, emoticonRegExp.matchedLength() ); // cap(0) is not const + if( emoticonReplacements.contains( code ) ) + { + replacement = emoticonReplacements[ code ]; + } + else + { + // HACK: Replace with the same string, to skip the entire code and continue parsing after it + // See EmoticonTheme::updateCache() + replacement = code; +#ifdef KMESSDEBUG_CHATVIEW + kDebug() << "Skipping unmatched code '" << code << "'"; +#endif + } + + break; + + + // Found a link + case 3: + // When www. is found, automatically add http:// to the href + // This doesn't clash, because http:// links are matched earlier + link = linkRegExp.cap(0); + if( ! link.isEmpty() ) + { + // filter out puntuation char + matchedLength = link.length(); + if( punctuationChars.exactMatch(link) // matches standard chars at end + || ( link.endsWith(")") && ! link.contains("(") ) ) // has ")" at end, unless it's a wikipedia disambiguation link + { + matchedLength--; + link.remove( matchedLength, 1 ); + } + + // Create link + replacement = ( link.startsWith("www.") ) + ? replacement = "" + link + "" + : replacement = "" + link + ""; + } + break; + + + // Found a e-mail address + case 4: + link = emailRegExp.cap(1); + if( ! link.isEmpty() ) + { + matchedLength = link.length(); // filter out puntuation char + replacement = "" + link + ""; + } + break; + + + // Found a geek-style link + case 5: + linkBefore = geekLinkRegExp.cap(1); // matched look-before character + link = geekLinkRegExp.cap(2); + if( ! link.isEmpty() ) + { + // Avoid matching "index.htm", "test.js" etc. + // The list can never be complete but filter out 99% of the cases + QString tld = geekLinkRegExp.cap(4); + if( ( tld.length() == 2 && ! invalidCcTld.exactMatch(tld) ) + || ( tld.length() == 3 && topLevelDomain.exactMatch(tld) ) ) + { + matchedLength = linkBefore.length() + link.length(); // filter out puntuation char + replacement = linkBefore + "" + link + ""; + } + } + break; + + // Nothing was found, stop + case -1: + break; + + default: +#ifdef KMESSTEST + kWarning() << "result of regular expression " << matchedRegExp << " is unhandled!"; +#endif + break; + } + + // Nothing was found, stop + if( matchedRegExp == -1 ) + { + // C doesn't allow us to break the while loop inside the switch statement, so break again + break; + } + + // Process the replacement + if( replacement.isEmpty() || text.mid(matchStart, matchedLength).isEmpty() ) + { + // No replacement found, move cursor to next char + lastPos = matchStart + 1; + } + else + { + // Replace the original text +/*#ifdef KMESSDEBUG_CHATVIEW + kDebug() << "replacing '" << text.mid( matchStart, matchedLength ) << "' with: " << replacement << " (matched regexp=" << matchedRegExp << ")"; +#endif*/ + text = text.replace( matchStart, matchedLength, replacement ); + lastPos = matchStart + replacement.length(); + replacement = QString::null; + } + } + + // Replace any "> "s in the message with "> " to avoid missing spaces after emoticons + text = text.replace( "> ", "> " ); + + // Replace double spaces with double  s so that they'll show properly + text = text.replace( " ", "  " ); + + // Replace the MSN Plus text formatting tags + if( showFormatting ) + { + parseMsnPlusString( text ); + getFormattedString( text ); + } + else + { + getCleanString( text ); + } +} + + + +// Constructor, can be told to not parse the initial string but just save it (during KMess initialization) +FormattedString::FormattedString( const QString &string, bool parseName ) +: showEmoticons_ ( true ) +, showLinks_ ( false ) +, showSmallEmoticons_( true ) +{ + if( ! string.isEmpty() ) + { + if( parseName ) + { + setString( string ); + } + else + { + original_ = + formatted_ = + cleaned_ = string; + } + } +} + + + +// Returns the specified version of the string +const QString &FormattedString::getString( FormattingMode mode ) const +{ + switch( mode ) + { + case STRING_CLEANED: return cleaned_; + case STRING_FORMATTED: return formatted_; + case USE_CHAT_SETTING: return CurrentAccount::instance()->getUseChatFormatting() ? formatted_ : cleaned_; + case USE_LIST_SETTING: return CurrentAccount::instance()->getUseListFormatting() ? formatted_ : cleaned_; + default: return original_; + } +} + + + +// Set a string, which will be formatted according to the given flags +void FormattedString::setString( const QString &string ) +{ + // Save the new string everywhere + original_ = + formatted_ = + cleaned_ = string; + + // Then parse the cleaned and formatted versions + if( ! string.isEmpty() ) + { + RichTextParser::getCleanString( cleaned_ ); + RichTextParser::parseMsnString( formatted_, showEmoticons_, showSmallEmoticons_, showLinks_, true ); + } +} diff --git a/src/utils/richtextparser.h b/src/utils/richtextparser.h new file mode 100644 index 0000000..cb2e4ce --- /dev/null +++ b/src/utils/richtextparser.h @@ -0,0 +1,161 @@ +/*************************************************************************** + msnplus.h - adds MSN Plus! codes/features + ------------------- + begin : April 30, 2008 + copyright : (C) 2008 by Valerio Pilo + email : valerio@kmess.org + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef RICHTEXTPARSER_H +#define RICHTEXTPARSER_H + +#include "../emoticon.h" + +#include +#include + + +#define MSN_PLUS_STRINGCACHESIZE 100 + + +// Forward declarations +class EmoticonManager; + + + +/** + * String types available when dealing with formatting + */ +enum FormattingMode +{ + STRING_ORIGINAL = 0 + , STRING_CLEANED + , STRING_FORMATTED + , USE_CHAT_SETTING + , USE_LIST_SETTING +}; + + + +/** + * @brief Implements features from the MSN Plus extension to KMess + * + * Implements features from the "MSN Plus! Live" extension for MSN Messenger + * and Windows Live Messenger. These features can be: custom formatting in + * nick names, personal messages and in chat text; sending/receiving of + * little sound clips; contact pinging; special colored phrases which trigger + * a sound; various IRC-style commands, like /me; et cetera. + * Some of them are worth adding in KMess, some others are kind of useless but + * someday they could be implemented. + * + * Currently the only implemented feature is text formatting, which is the + * most used and also the most annoying to not have; reading friendly names + * with all the tags and codes really IS annoying. + * + * @author Valerio Pilo + * @author Antonio Nastasi + */ +class RichTextParser +{ + friend class KMessTest; + + public: // Public static methods + + // Return the given string with MSN Plus! formatting stripped out + static void getCleanString( QString &string ); + // Initialize the class + static void initialize(); + // Return the given string with links and emoticons translated to HTML + static void parseMsnString( QString &text, bool showEmoticons = true, bool showSmallEmoticons = true, bool showLinks = true, bool showFormatting = false, const QString &handle = *((QString*)0), QStringList &pendingEmoticonTags = *((QStringList*)0) ); + + + private: // Private static methods + + // Return the given string with MSN Plus! formatting parsed + static void getFormattedString( QString &string ); + // Turns color codes (english color names, RGB triplets, MSN Plus! palette colors) into an HTML RGB color code + static QString getHtmlColor( const QString& color ); + // Turns a string into a gradient colored one, using Qt HTML tags + static QString getHtmlGradient( const QString& text, const QString& start, const QString& end ); + // Replace the Messenger Plus characters with HTML markup + static void parseMsnPlusString( QString &text ); + + + private: // Private properties + + // QHash maps for storing the string already parsed + static QHash cleanedStringsCache_; + static QHash formattedStringsCache_; + + // Regular expression to match colors + static QRegExp colorMatch_; + // The last assigned ID for pending emoticon placeholders + static int lastPendingEmoticonId_; + // An instance of the Emoticon Manager + static EmoticonManager *emoticonManager_; + // List of MSN Plus colors + static QStringList predefinedColors_; + +}; + + + +/** + * @brief A collection of strings to use with formatting + * + * A little class to hold together three strings: the original one, a formatted and a cleaned up version of it; + * it also allows for very easy manipulation. + * + * @author Valerio Pilo + */ +class FormattedString +{ + public: + // Constructor, can be told to not parse the initial string but just save it (during KMess initialization) + FormattedString( const QString &string = QString(), bool parseName = true ); + // Set a string, which will be formatted according to the given flags + void setString( const QString &string ); + // Returns the specified version of the string + const QString &getString( FormattingMode mode = STRING_CLEANED ) const; + + // Returns the cleaned up version of the set string + inline const QString & getCleaned() const { return cleaned_; } + // Returns the formatted version of the set string + inline const QString &getFormatted() const { return formatted_; } + // Returns the original string + inline const QString & getOriginal() const { return original_; } + // Changes the formatting options which will be used for the string + inline void setOptions( bool showEmoticons = true, bool showSmallEmoticons = true, bool showLinks = false ) + { + showEmoticons_ = showEmoticons; + showLinks_ = showLinks; + showSmallEmoticons_ = showSmallEmoticons; + } + + private: + // cleaned up version of the string + QString cleaned_; + // The formatted version of the string + QString formatted_; + // The original string + QString original_; + // Whether to show emoticons in the formatted string + bool showEmoticons_; + // Whether to make links clickable or not + bool showLinks_; + // Whether to display the emoticons big or small + bool showSmallEmoticons_; +}; + + + +#endif diff --git a/src/utils/thumbnailprovider.cpp b/src/utils/thumbnailprovider.cpp index ab960b3..97dad35 100644 --- a/src/utils/thumbnailprovider.cpp +++ b/src/utils/thumbnailprovider.cpp @@ -29,7 +29,6 @@ #include #include #include -#include @@ -42,7 +41,6 @@ * @param fileName Name of the file to request. * @param size Size of the thumbnails. Windows Live Messenger also uses 96x96 thumbnails for all files. * Depending on it's "file preview size" setting, it scales the received images down afterwards. - * @param fallback Whether to return a fallback icon instead. This is a generic file type icon also used in the Konqueror. */ ThumbnailProvider::ThumbnailProvider( const QString &fileName, int size ) : QObject( 0 ) diff --git a/src/utils/thumbnailprovider.h b/src/utils/thumbnailprovider.h index 2c1c9b9..1580a60 100644 --- a/src/utils/thumbnailprovider.h +++ b/src/utils/thumbnailprovider.h @@ -22,8 +22,7 @@ #include #include -#include -#include +#include #include @@ -38,8 +37,8 @@ class KFileItem; * * The generated thumbnails are used for file transfer invitations. * - * @author Pedro Ferreira - * @ingroup Root + * @author Pedro Ferreira, Diederik van der Boor + * @ingroup Utils */ class ThumbnailProvider : public QObject { diff --git a/src/utils/xautolock.cpp b/src/utils/xautolock.cpp index 37f007a..17563b7 100644 --- a/src/utils/xautolock.cpp +++ b/src/utils/xautolock.cpp @@ -1,4 +1,3 @@ - /*************************************************************************** xautolock.cpp - user inactivity timer ------------------- @@ -21,7 +20,6 @@ #include #include #include -#include #include @@ -35,14 +33,21 @@ #include #include +#ifdef Q_WS_X11 +#include #include #include #include /* The following include is to make --enable-final work */ #include +#endif + #ifdef HAVE_XSCREENSAVER #include +#else +// A special warning for all Gentoo users out there.. :-/ +#warning You are compiling KMess without support for the X11 screensaver extension. The auto-away feature will not work. #endif @@ -57,7 +62,7 @@ XAutoLock::XAutoLock() : active_( false ), idle_( false ), idleTime_( 0 ), - lastCheck_( time( 0 ) ), + lastCheck_( (uint)time( 0 ) ), mitAvailable_( false ), mitInfo_( 0 ), triggerTime_( 0 ) @@ -81,7 +86,10 @@ XAutoLock::~XAutoLock() emit activity(); timer_->stop(); +#ifdef HAVE_XSCREENSAVER delete mitInfo_; +#endif + delete timer_; } @@ -89,9 +97,10 @@ XAutoLock::~XAutoLock() // The main function which checks for idle status void XAutoLock::checkIdle() { - unsigned int now, timeIdle; + unsigned int now; + unsigned long timeIdle; - now = time( 0 ); + now = (uint)time( 0 ); if( abs( lastCheck_ - now ) > 120 ) { @@ -131,7 +140,7 @@ void XAutoLock::checkIdle() // Get idle time by asking the MIT-SCREEN-SAVER extension (if available) -unsigned int XAutoLock::getMitIdle() +unsigned long XAutoLock::getMitIdle() { #ifdef HAVE_XSCREENSAVER if ( !mitInfo_ ) mitInfo_ = XScreenSaverAllocInfo(); @@ -218,7 +227,7 @@ bool XAutoLock::isScreenSaverActive() void XAutoLock::resetTimer() { idle_ = false; - idleTime_ = time( 0 ); + idleTime_ = (uint)time( 0 ); emit activity(); } diff --git a/src/utils/xautolock.h b/src/utils/xautolock.h index 123f308..dc14c8e 100644 --- a/src/utils/xautolock.h +++ b/src/utils/xautolock.h @@ -38,7 +38,7 @@ * but heavily modified and rewritten since. * * @author Michael Curtis - * @ingroup Root + * @ingroup Utils */ class XAutoLock : public QObject { @@ -75,7 +75,7 @@ class XAutoLock : public QObject // Get idle time by detecting time since last mouse movement unsigned int getMouseIdle(); // Get idle time by asking the MIT-SCREEN-SAVER extension (if available) - unsigned int getMitIdle(); + unsigned long getMitIdle(); // Reset the timer (after we've just become active again, for example) void resetTimer(); diff --git a/src/utils/xmlfunctions.cpp b/src/utils/xmlfunctions.cpp index a0a3b5d..64c3f51 100644 --- a/src/utils/xmlfunctions.cpp +++ b/src/utils/xmlfunctions.cpp @@ -48,10 +48,9 @@ QDomNode XmlFunctions::getNode( const QDomNode &rootNode, const QString &path ) } #ifdef KMESSDEBUG_XMLFUNCTIONS - if( childNode.isNull() ) { - kDebug() << "node '" << pathItems[ i - 1 ] << "'" - << " does not exist (root=" << rootNode.nodeName() << " path=" << path << ")." << endl; - } + QString message = "reading node \"" + rootNode.nodeName() + "/" + pathItems.join("/") + "\": " + + ( ! childNode.isNull() ? "found" : "not found: " + pathItems[ i - 1 ] ); + kDebug() << message.toLatin1().data(); #endif return childNode; @@ -121,6 +120,7 @@ QString XmlFunctions::getNodeValue( const QDomNode &rootNode, const QString &pat } + // Helper function, get the source XML of a node. QString XmlFunctions::getSource( const QDomNode &node, int indent ) { diff --git a/src/utils/xmlfunctions.h b/src/utils/xmlfunctions.h index 00adaeb..c04e6ef 100644 --- a/src/utils/xmlfunctions.h +++ b/src/utils/xmlfunctions.h @@ -27,10 +27,10 @@ class QDomNodeList; /** - * Some helper functions to make the handling of QDom easier. + * @brief Helper functions to make the use of QDom easier. * * @author Diederik van der Boor - * @ingroup NetworkExtra + * @ingroup Utils */ class XmlFunctions { diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..8d23e89 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,2 @@ + +# ADD_SUBDIRECTORY( modeltest ) diff --git a/tests/modeltest/LICENSE.GPL b/tests/modeltest/LICENSE.GPL new file mode 100644 index 0000000..4ccd714 --- /dev/null +++ b/tests/modeltest/LICENSE.GPL @@ -0,0 +1,342 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +------------------------------------------------------------------------- diff --git a/tests/modeltest/README b/tests/modeltest/README new file mode 100644 index 0000000..f13e2af --- /dev/null +++ b/tests/modeltest/README @@ -0,0 +1,30 @@ +ModelTest provides a way to check for common errors in implementations of http://doc.trolltech.com/4/qabstractitemmodel.html. + + +ModelTest continuously checks a model as it changes, helping to verify the state and catching many common errors the moment they show up such as: +
    +
  • Verifing X number of rows have been inserted in the correct place after the signal rowsAboutToBeInserted() says X rows will be inserted.
  • +
  • The parent of the first index of the first row is a QModelIndex()
  • +
  • Calling index() twice in a row with the same values will return the same QModelIndex
  • +
  • If rowCount() says there are X number of rows, model test will verify that is true. +
  • Many possible off by one bugs
  • +
  • hasChildren() returns true if rowCount() is greater then zero.
  • +
  • and many more...
  • +
+ +--- + +To Use the model test do the following: + +1) Include the pri file at the end of your project pro file using the include() command like so: + +include(../path/to/dir/modeltest.pri) + +2) Then in your source include "modeltest.h" and instantiate ModelTest with your model so the test can live for the lifetime of your model. For example: + +#include + +QDirModel *model = new QDirModel(this); +new ModelTest(model, this); + +3) That is it. When the test finds a problem it will assert. modeltest.cpp contains some hints on how to fix problems that the test finds. diff --git a/tests/modeltest/README.kmess b/tests/modeltest/README.kmess new file mode 100644 index 0000000..c9e583d --- /dev/null +++ b/tests/modeltest/README.kmess @@ -0,0 +1,5 @@ +** KMess Developers info ** + +You can find the ModelTest repository at: +svn://labs.trolltech.com/svn/itemviews/modeltest +We didn't just export it because it's not so important to have it always updated. diff --git a/tests/modeltest/modeltest.cpp b/tests/modeltest/modeltest.cpp new file mode 100644 index 0000000..e8a4dff --- /dev/null +++ b/tests/modeltest/modeltest.cpp @@ -0,0 +1,524 @@ +/**************************************************************************** +** +** Copyright (C) 2007 Trolltech ASA. All rights reserved. +** +** This file is part of the Qt Concurrent project on Trolltech Labs. +** +** This file may be used under the terms of the GNU General Public +** License version 2.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of +** this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** http://www.trolltech.com/products/qt/opensource.html +** +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://www.trolltech.com/products/qt/licensing.html or contact the +** sales department at sales@trolltech.com. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + +#include + +#include "modeltest.h" + +Q_DECLARE_METATYPE(QModelIndex) + +/*! + Connect to all of the models signals. Whenever anything happens recheck everything. +*/ +ModelTest::ModelTest(QAbstractItemModel *_model, QObject *parent) : QObject(parent), model(_model), fetchingMore(false) +{ + Q_ASSERT(model); + + connect(model, SIGNAL(columnsAboutToBeInserted(const QModelIndex &, int, int)), + this, SLOT(runAllTests())); + connect(model, SIGNAL(columnsAboutToBeRemoved(const QModelIndex &, int, int)), + this, SLOT(runAllTests())); + connect(model, SIGNAL(columnsInserted(const QModelIndex &, int, int)), + this, SLOT(runAllTests())); + connect(model, SIGNAL(columnsRemoved(const QModelIndex &, int, int)), + this, SLOT(runAllTests())); + connect(model, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), + this, SLOT(runAllTests())); + connect(model, SIGNAL(headerDataChanged(Qt::Orientation, int, int)), + this, SLOT(runAllTests())); + connect(model, SIGNAL(layoutAboutToBeChanged ()), this, SLOT(runAllTests())); + connect(model, SIGNAL(layoutChanged ()), this, SLOT(runAllTests())); + connect(model, SIGNAL(modelReset ()), this, SLOT(runAllTests())); + connect(model, SIGNAL(rowsAboutToBeInserted(const QModelIndex &, int, int)), + this, SLOT(runAllTests())); + connect(model, SIGNAL(rowsAboutToBeRemoved(const QModelIndex &, int, int)), + this, SLOT(runAllTests())); + connect(model, SIGNAL(rowsInserted(const QModelIndex &, int, int)), + this, SLOT(runAllTests())); + connect(model, SIGNAL(rowsRemoved(const QModelIndex &, int, int)), + this, SLOT(runAllTests())); + + // Special checks for inserting/removing + connect(model, SIGNAL(layoutAboutToBeChanged()), + this, SLOT(layoutAboutToBeChanged())); + connect(model, SIGNAL(layoutChanged()), + this, SLOT(layoutChanged())); + + connect(model, SIGNAL(rowsAboutToBeInserted(const QModelIndex &, int, int)), + this, SLOT(rowsAboutToBeInserted(const QModelIndex &, int, int))); + connect(model, SIGNAL(rowsAboutToBeRemoved(const QModelIndex &, int, int)), + this, SLOT(rowsAboutToBeRemoved(const QModelIndex &, int, int))); + connect(model, SIGNAL(rowsInserted(const QModelIndex &, int, int)), + this, SLOT(rowsInserted(const QModelIndex &, int, int))); + connect(model, SIGNAL(rowsRemoved(const QModelIndex &, int, int)), + this, SLOT(rowsRemoved(const QModelIndex &, int, int))); + + runAllTests(); +} + +void ModelTest::runAllTests() +{ + if (fetchingMore) + return; + nonDestructiveBasicTest(); + rowCount(); + columnCount(); + hasIndex(); + index(); + parent(); + data(); +} + +/*! + nonDestructiveBasicTest tries to call a number of the basic functions (not all) + to make sure the model doesn't outright segfault, testing the functions that makes sense. +*/ +void ModelTest::nonDestructiveBasicTest() +{ + Q_ASSERT(model->buddy(QModelIndex()) == QModelIndex()); + model->canFetchMore(QModelIndex()); + Q_ASSERT(model->columnCount(QModelIndex()) >= 0); + Q_ASSERT(model->data(QModelIndex()) == QVariant()); + fetchingMore = true; + model->fetchMore(QModelIndex()); + fetchingMore = false; + Qt::ItemFlags flags = model->flags(QModelIndex()); + Q_ASSERT(flags == Qt::ItemIsDropEnabled || flags == 0); + model->hasChildren(QModelIndex()); + model->hasIndex(0, 0); + model->headerData(0, Qt::Horizontal); + model->index(0, 0); + model->itemData(QModelIndex()); + QVariant cache; + model->match(QModelIndex(), -1, cache); + model->mimeTypes(); + Q_ASSERT(model->parent(QModelIndex()) == QModelIndex()); + Q_ASSERT(model->rowCount() >= 0); + QVariant variant; + model->setData(QModelIndex(), variant, -1); + model->setHeaderData(-1, Qt::Horizontal, QVariant()); + model->setHeaderData(0, Qt::Horizontal, QVariant()); + model->setHeaderData(999999, Qt::Horizontal, QVariant()); + QMap roles; + model->sibling(0, 0, QModelIndex()); + model->span(QModelIndex()); + model->supportedDropActions(); +} + +/*! + Tests model's implementation of QAbstractItemModel::rowCount() and hasChildren() + + Models that are dynamically populated are not as fully tested here. + */ +void ModelTest::rowCount() +{ + // check top row + QModelIndex topIndex = model->index(0, 0, QModelIndex()); + int rows = model->rowCount(topIndex); + Q_ASSERT(rows >= 0); + if (rows > 0) + Q_ASSERT(model->hasChildren(topIndex) == true); + + QModelIndex secondLevelIndex = model->index(0, 0, topIndex); + if (secondLevelIndex.isValid()) { // not the top level + // check a row count where parent is valid + rows = model->rowCount(secondLevelIndex); + Q_ASSERT(rows >= 0); + if (rows > 0) + Q_ASSERT(model->hasChildren(secondLevelIndex) == true); + } + + // The models rowCount() is tested more extensively in checkChildren(), + // but this catches the big mistakes +} + +/*! + Tests model's implementation of QAbstractItemModel::columnCount() and hasChildren() + */ +void ModelTest::columnCount() +{ + // check top row + QModelIndex topIndex = model->index(0, 0, QModelIndex()); + Q_ASSERT(model->columnCount(topIndex) >= 0); + + // check a column count where parent is valid + QModelIndex childIndex = model->index(0, 0, topIndex); + if (childIndex.isValid()) + Q_ASSERT(model->columnCount(childIndex) >= 0); + + // columnCount() is tested more extensively in checkChildren(), + // but this catches the big mistakes +} + +/*! + Tests model's implementation of QAbstractItemModel::hasIndex() + */ +void ModelTest::hasIndex() +{ + // Make sure that invalid values returns an invalid index + Q_ASSERT(model->hasIndex(-2, -2) == false); + Q_ASSERT(model->hasIndex(-2, 0) == false); + Q_ASSERT(model->hasIndex(0, -2) == false); + + int rows = model->rowCount(); + int columns = model->columnCount(); + + // check out of bounds + Q_ASSERT(model->hasIndex(rows, columns) == false); + Q_ASSERT(model->hasIndex(rows + 1, columns + 1) == false); + + if (rows > 0) + Q_ASSERT(model->hasIndex(0, 0) == true); + + // hasIndex() is tested more extensively in checkChildren(), + // but this catches the big mistakes +} + +/*! + Tests model's implementation of QAbstractItemModel::index() + */ +void ModelTest::index() +{ + // Make sure that invalid values returns an invalid index + Q_ASSERT(model->index(-2, -2) == QModelIndex()); + Q_ASSERT(model->index(-2, 0) == QModelIndex()); + Q_ASSERT(model->index(0, -2) == QModelIndex()); + + int rows = model->rowCount(); + int columns = model->columnCount(); + + if (rows == 0) + return; + + // Catch off by one errors + Q_ASSERT(model->index(rows, columns) == QModelIndex()); + Q_ASSERT(model->index(0, 0).isValid() == true); + + // Make sure that the same index is *always* returned + QModelIndex a = model->index(0, 0); + QModelIndex b = model->index(0, 0); + Q_ASSERT(a == b); + + // index() is tested more extensively in checkChildren(), + // but this catches the big mistakes +} + +/*! + Tests model's implementation of QAbstractItemModel::parent() + */ +void ModelTest::parent() +{ + // Make sure the model wont crash and will return an invalid QModelIndex + // when asked for the parent of an invalid index. + Q_ASSERT(model->parent(QModelIndex()) == QModelIndex()); + + if (model->rowCount() == 0) + return; + + // Column 0 | Column 1 | + // QModelIndex() | | + // \- topIndex | topIndex1 | + // \- childIndex | childIndex1 | + + // Common error test #1, make sure that a top level index has a parent + // that is a invalid QModelIndex. + QModelIndex topIndex = model->index(0, 0, QModelIndex()); + Q_ASSERT(model->parent(topIndex) == QModelIndex()); + + // Common error test #2, make sure that a second level index has a parent + // that is the first level index. + if (model->rowCount(topIndex) > 0) { + QModelIndex childIndex = model->index(0, 0, topIndex); + Q_ASSERT(model->parent(childIndex) == topIndex); + } + + // Common error test #3, the second column should NOT have the same children + // as the first column in a row. + // Usually the second column shouldn't have children. + QModelIndex topIndex1 = model->index(0, 1, QModelIndex()); + if (model->rowCount(topIndex1) > 0) { + QModelIndex childIndex = model->index(0, 0, topIndex); + QModelIndex childIndex1 = model->index(0, 0, topIndex1); + Q_ASSERT(childIndex != childIndex1); + } + + // Full test, walk n levels deep through the model making sure that all + // parent's children correctly specify their parent. + checkChildren(QModelIndex()); +} + +/*! + Called from the parent() test. + + A model that returns an index of parent X should also return X when asking + for the parent of the index. + + This recursive function does pretty extensive testing on the whole model in an + effort to catch edge cases. + + This function assumes that rowCount(), columnCount() and index() already work. + If they have a bug it will point it out, but the above tests should have already + found the basic bugs because it is easier to figure out the problem in + those tests then this one. + */ +void ModelTest::checkChildren(const QModelIndex &parent, int currentDepth) +{ + // First just try walking back up the tree. + QModelIndex p = parent; + while (p.isValid()) + p = p.parent(); + + // For models that are dynamically populated + if (model->canFetchMore(parent)) { + fetchingMore = true; + model->fetchMore(parent); + fetchingMore = false; + } + + int rows = model->rowCount(parent); + int columns = model->columnCount(parent); + + if (rows > 0) + Q_ASSERT(model->hasChildren(parent)); + + // Some further testing against rows(), columns(), and hasChildren() + Q_ASSERT(rows >= 0); + Q_ASSERT(columns >= 0); + if (rows > 0) + Q_ASSERT(model->hasChildren(parent) == true); + + //qDebug() << "parent:" << model->data(parent).toString() << "rows:" << rows + // << "columns:" << columns << "parent column:" << parent.column(); + + Q_ASSERT(model->hasIndex(rows + 1, 0, parent) == false); + for (int r = 0; r < rows; ++r) { + if (model->canFetchMore(parent)) { + fetchingMore = true; + model->fetchMore(parent); + fetchingMore = false; + } + Q_ASSERT(model->hasIndex(r, columns + 1, parent) == false); + for (int c = 0; c < columns; ++c) { + Q_ASSERT(model->hasIndex(r, c, parent) == true); + QModelIndex index = model->index(r, c, parent); + // rowCount() and columnCount() said that it existed... + Q_ASSERT(index.isValid() == true); + + // index() should always return the same index when called twice in a row + QModelIndex modifiedIndex = model->index(r, c, parent); + Q_ASSERT(index == modifiedIndex); + + // Make sure we get the same index if we request it twice in a row + QModelIndex a = model->index(r, c, parent); + QModelIndex b = model->index(r, c, parent); + Q_ASSERT(a == b); + + // Some basic checking on the index that is returned + Q_ASSERT(index.model() == model); + Q_ASSERT(index.row() == r); + Q_ASSERT(index.column() == c); + // While you can technically return a QVariant usually this is a sign + // of an bug in data() Disable if this really is ok in your model. + Q_ASSERT(model->data(index, Qt::DisplayRole).isValid() == true); + + // If the next test fails here is some somewhat useful debug you play with. + /* + if (model->parent(index) != parent) { + qDebug() << r << c << currentDepth << model->data(index).toString() + << model->data(parent).toString(); + qDebug() << index << parent << model->parent(index); + // And a view that you can even use to show the model. + //QTreeView view; + //view.setModel(model); + //view.show(); + }*/ + + // Check that we can get back our real parent. + Q_ASSERT(model->parent(index) == parent); + + // recursively go down the children + if (model->hasChildren(index) && currentDepth < 10 ) { + //qDebug() << r << c << "has children" << model->rowCount(index); + checkChildren(index, ++currentDepth); + }/* else { if (currentDepth >= 10) qDebug() << "checked 10 deep"; };*/ + + // make sure that after testing the children that the index doesn't change. + QModelIndex newerIndex = model->index(r, c, parent); + Q_ASSERT(index == newerIndex); + } + } +} + +/*! + Tests model's implementation of QAbstractItemModel::data() + */ +void ModelTest::data() +{ + // Invalid index should return an invalid qvariant + Q_ASSERT(!model->data(QModelIndex()).isValid()); + + if (model->rowCount() == 0) + return; + + // A valid index should have a valid QVariant data + Q_ASSERT(model->index(0, 0).isValid()); + + // shouldn't be able to set data on an invalid index + Q_ASSERT(model->setData(QModelIndex(), QLatin1String("foo"), Qt::DisplayRole) == false); + + // General Purpose roles that should return a QString + QVariant variant = model->data(model->index(0, 0), Qt::ToolTipRole); + if (variant.isValid()) { + Q_ASSERT(qVariantCanConvert(variant)); + } + variant = model->data(model->index(0, 0), Qt::StatusTipRole); + if (variant.isValid()) { + Q_ASSERT(qVariantCanConvert(variant)); + } + variant = model->data(model->index(0, 0), Qt::WhatsThisRole); + if (variant.isValid()) { + Q_ASSERT(qVariantCanConvert(variant)); + } + + // General Purpose roles that should return a QSize + variant = model->data(model->index(0, 0), Qt::SizeHintRole); + if (variant.isValid()) { + Q_ASSERT(qVariantCanConvert(variant)); + } + + // General Purpose roles that should return a QFont + QVariant fontVariant = model->data(model->index(0, 0), Qt::FontRole); + if (fontVariant.isValid()) { + Q_ASSERT(qVariantCanConvert(fontVariant)); + } + + // Check that the alignment is one we know about + QVariant textAlignmentVariant = model->data(model->index(0, 0), Qt::TextAlignmentRole); + if (textAlignmentVariant.isValid()) { + int alignment = textAlignmentVariant.toInt(); + Q_ASSERT(alignment == (alignment & (Qt::AlignHorizontal_Mask | Qt::AlignVertical_Mask))); + } + + // General Purpose roles that should return a QColor + QVariant colorVariant = model->data(model->index(0, 0), Qt::BackgroundColorRole); + if (colorVariant.isValid()) { + Q_ASSERT(qVariantCanConvert(colorVariant)); + } + + colorVariant = model->data(model->index(0, 0), Qt::TextColorRole); + if (colorVariant.isValid()) { + Q_ASSERT(qVariantCanConvert(colorVariant)); + } + + // Check that the "check state" is one we know about. + QVariant checkStateVariant = model->data(model->index(0, 0), Qt::CheckStateRole); + if (checkStateVariant.isValid()) { + int state = checkStateVariant.toInt(); + Q_ASSERT(state == Qt::Unchecked || + state == Qt::PartiallyChecked || + state == Qt::Checked); + } +} + +/*! + Store what is about to be inserted to make sure it actually happens + + \sa rowsInserted() + */ +void ModelTest::rowsAboutToBeInserted(const QModelIndex &parent, int start, int end) +{ + Q_UNUSED(end); + Changing c; + c.parent = parent; + c.oldSize = model->rowCount(parent); + c.last = model->data(model->index(start - 1, 0, parent)); + c.next = model->data(model->index(start, 0, parent)); + insert.push(c); +} + +/*! + Confirm that what was said was going to happen actually did + + \sa rowsAboutToBeInserted() + */ +void ModelTest::rowsInserted(const QModelIndex & parent, int start, int end) +{ + Changing c = insert.pop(); + Q_ASSERT(c.parent == parent); + Q_ASSERT(c.oldSize + (end - start + 1) == model->rowCount(parent)); + Q_ASSERT(c.last == model->data(model->index(start - 1, 0, c.parent))); + /* + if (c.next != model->data(model->index(end + 1, 0, c.parent))) { + qDebug() << start << end; + for (int i=0; i < model->rowCount(); ++i) + qDebug() << model->index(i, 0).data().toString(); + qDebug() << c.next << model->data(model->index(end + 1, 0, c.parent)); + } + */ + Q_ASSERT(c.next == model->data(model->index(end + 1, 0, c.parent))); +} + +void ModelTest::layoutAboutToBeChanged() +{ + for (int i = 0; i < qBound(0, model->rowCount(), 100); ++i) + changing.append(QPersistentModelIndex(model->index(i, 0))); +} + +void ModelTest::layoutChanged() +{ + for (int i = 0; i < changing.count(); ++i) { + QPersistentModelIndex p = changing[i]; + Q_ASSERT(p == model->index(p.row(), p.column(), p.parent())); + } + changing.clear(); +} + +/*! + Store what is about to be inserted to make sure it actually happens + + \sa rowsRemoved() + */ +void ModelTest::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) +{ + Changing c; + c.parent = parent; + c.oldSize = model->rowCount(parent); + c.last = model->data(model->index(start - 1, 0, parent)); + c.next = model->data(model->index(end + 1, 0, parent)); + remove.push(c); +} + +/*! + Confirm that what was said was going to happen actually did + + \sa rowsAboutToBeRemoved() + */ +void ModelTest::rowsRemoved(const QModelIndex & parent, int start, int end) +{ + Changing c = remove.pop(); + Q_ASSERT(c.parent == parent); + Q_ASSERT(c.oldSize - (end - start + 1) == model->rowCount(parent)); + Q_ASSERT(c.last == model->data(model->index(start - 1, 0, c.parent))); + Q_ASSERT(c.next == model->data(model->index(start, 0, c.parent))); +} + diff --git a/tests/modeltest/modeltest.h b/tests/modeltest/modeltest.h new file mode 100644 index 0000000..38b6b2b --- /dev/null +++ b/tests/modeltest/modeltest.h @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2007 Trolltech ASA. All rights reserved. +** +** This file is part of the Qt Concurrent project on Trolltech Labs. +** +** This file may be used under the terms of the GNU General Public +** License version 2.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of +** this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** http://www.trolltech.com/products/qt/opensource.html +** +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://www.trolltech.com/products/qt/licensing.html or contact the +** sales department at sales@trolltech.com. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +****************************************************************************/ + +#ifndef MODELTEST_H +#define MODELTEST_H + +#include +#include +#include + +class ModelTest : public QObject +{ + Q_OBJECT + +public: + ModelTest(QAbstractItemModel *model, QObject *parent = 0); + +private Q_SLOTS: + void nonDestructiveBasicTest(); + void rowCount(); + void columnCount(); + void hasIndex(); + void index(); + void parent(); + void data(); + +protected Q_SLOTS: + void runAllTests(); + void layoutAboutToBeChanged(); + void layoutChanged(); + void rowsAboutToBeInserted(const QModelIndex &parent, int start, int end); + void rowsInserted(const QModelIndex & parent, int start, int end); + void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end); + void rowsRemoved(const QModelIndex & parent, int start, int end); + +private: + void checkChildren(const QModelIndex &parent, int currentDepth = 0); + + QAbstractItemModel *model; + + struct Changing + { + QModelIndex parent; + int oldSize; + QVariant last; + QVariant next; + }; + QStack insert; + QStack remove; + + bool fetchingMore; + + QList changing; +}; + +#endif