diff options
author | Yann Leboulanger <asterix@lagaule.org> | 2012-04-13 00:07:30 +0400 |
---|---|---|
committer | Yann Leboulanger <asterix@lagaule.org> | 2012-04-13 00:07:30 +0400 |
commit | 0c36f50196c2a0220fbe27f49b06425f576360e6 (patch) | |
tree | 3a40e855bbd72489e7e6c6ac3834f637837cd35e | |
parent | 66df7c30ca8a655a078708d3dbd0623e292a69dd (diff) | |
parent | 73899b95d3ac90ed094a2a9f7e70417c36b25d2b (diff) |
merge from trunk
118 files changed, 7749 insertions, 6823 deletions
@@ -1,4 +1,4 @@ -Gajim 0.15 (XX XX 2011) +Gajim 0.15 (18 March 2012) * Plugin system * Whiteboard (via a plugin) @@ -9,6 +9,7 @@ Gajim 0.15 (XX XX 2011) * Roster filtrering * UPower support * GPG support for windows + * Spell checking support for windows Gajim 0.14.4 (22 July 2011) diff --git a/README.html b/README.html index df3362337..7cb2f7aea 100644 --- a/README.html +++ b/README.html @@ -15,12 +15,13 @@ <h2>Runtime Requirements</h2> <ul> <li>python2.5 or higher</li> -<li>pygtk2.16 or higher</li> +<li>pygtk2.22 or higher</li> </ul> <h2>Optional Runtime Requirements</h2> <ul> -<li><a href="http://pyopenssl.sourceforge.net/">PyOpenSSL</a> (python-pyopenssl package in Debian) (>=0.9) for <em>secure</em> SSL/TLS. Python's default SSL is insecure, so this package is highly recommended!</li> +<li><a href="http://pyopenssl.sourceforge.net/">PyOpenSSL</a> (python-pyopenssl package in Debian) (>=0.12) for <em>secure</em> SSL/TLS. Python's default SSL is insecure, so this package is highly recommended!</li> +<li>python-pyasn1 to check SSL/TLS certificate</li> <li>python-crypto to enable End to end encryption</li> <li>For idle module, libxss library</li> <li>For zeroconf (bonjour), the "enable link-local messaging" checkbox, you need dbus-glib, python-avahi</li> @@ -111,7 +112,7 @@ Wiki can be found at <a href="http://trac.gajim.org/wiki">http://trac.gajim.org/ <br/> <br/> <br/> -(C) 2003-2011<br/> +(C) 2003-2012<br/> The Gajim Team<br/> http://gajim.org<br/> <br/> diff --git a/autogen.sh b/autogen.sh index b2e46611a..62aa7fe8b 100755 --- a/autogen.sh +++ b/autogen.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash - gajimversion="0.15-beta2" + gajimversion="0.15" if [ -d ".hg" ]; then node=$(hg tip --template "{node}") hgversion="-${node:0:12}" @@ -20,8 +20,12 @@ && for p in `ls data/gui/*.ui`; do echo "[type: gettext/glade]$p" >> \ po/POTFILES.in; done \ && ls -1 data/gajim.desktop.in.in \ - src/*py src/common/*py src/common/zeroconf/*.py src/plugins/*.py| grep -v ipython_view.py >> \ - po/POTFILES.in || exit 1 + src/*.py src/common/*.py src/command_system/implementation/*.py src/common/zeroconf/*.py src/plugins/*.py | grep -v ipython_view.py >> \ + po/POTFILES.in \ + && echo -e "data/gajim.desktop.in\nsrc/ipython_view.py" > po/POTFILES.skip || exit 1 + if [ $(find plugins/ -name '*.py' | wc -l) -gt 0 ];then + ls -1 plugins/*/*.py plugins/*/*.ui >> po/POTFILES.skip + fi if test -z `which pkg-config 2>/dev/null`;then echo "***Error: pkg-config not found***" echo "See README.html for build requirements." diff --git a/configure.ac b/configure.ac index d9ce3bf06..11f6c2771 100644 --- a/configure.ac +++ b/configure.ac @@ -47,12 +47,12 @@ AC_ARG_ENABLE(site-packages, instead of DATADIR/gajim/src.])] , AC_SUBST([gajim_srcdir], [\${pkgpythondir}]) -AC_SUBST([gajim_pluginsdir], [\${pkgpythondir}]) , AC_SUBST([gajim_srcdir], [\${datadir}/\${PACKAGE}/src]) -AC_SUBST([gajim_pluginsdir], [\${datadir}/\${PACKAGE}/plugins]) ) +AC_SUBST([gajim_pluginsdir], [\${datadir}/\${PACKAGE}/plugins]) + AS_AC_EXPAND(GAJIM_SRCDIR, "${gajim_srcdir}") AS_AC_EXPAND(PKGDATADIR, "${datadir}/${PACKAGE}") AS_AC_EXPAND(DOCDIR, "${docdir}") diff --git a/data/gui/accounts_window.ui b/data/gui/accounts_window.ui index de088497e..8eb28ff1b 100644 --- a/data/gui/accounts_window.ui +++ b/data/gui/accounts_window.ui @@ -308,7 +308,7 @@ <property name="homogeneous">True</property> <child> <object class="GtkButton" id="synchronise_contacts_button1"> - <property name="label" translatable="yes">Synchronise contacts</property> + <property name="label" translatable="yes">Synchronize contacts</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> diff --git a/data/gui/advanced_configuration_window.ui b/data/gui/advanced_configuration_window.ui index db5b1e9cb..52df66599 100644 --- a/data/gui/advanced_configuration_window.ui +++ b/data/gui/advanced_configuration_window.ui @@ -1,24 +1,25 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="UTF-8"?> <interface> <requires lib="gtk+" version="2.16"/> - <!-- interface-naming-policy toplevel-contextual --> <object class="GtkWindow" id="advanced_configuration_window"> + <property name="can_focus">False</property> <property name="border_width">6</property> <property name="title" translatable="yes">Advanced Configuration Editor</property> <property name="role">ace</property> <property name="default_width">650</property> <property name="default_height">540</property> <property name="type_hint">dialog</property> - <signal name="destroy" handler="on_advanced_configuration_window_destroy"/> + <signal name="destroy" handler="on_advanced_configuration_window_destroy" swapped="no"/> <child> <object class="GtkVBox" id="vbox70"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="border_width">6</property> - <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkTable" id="table26"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="n_rows">2</property> <property name="n_columns">2</property> <property name="column_spacing">12</property> @@ -26,6 +27,7 @@ <child> <object class="GtkLabel" id="label248"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes">Filter:</property> </object> @@ -38,7 +40,7 @@ <object class="GtkEntry" id="advanced_entry"> <property name="visible">True</property> <property name="can_focus">True</property> - <signal name="changed" handler="on_advanced_entry_changed"/> + <signal name="changed" handler="on_advanced_entry_changed" swapped="no"/> </object> <packing> <property name="left_attach">1</property> @@ -51,14 +53,16 @@ <property name="visible">True</property> <property name="can_focus">True</property> <property name="hscrollbar_policy">never</property> - <property name="vscrollbar_policy">automatic</property> <property name="shadow_type">in</property> <child> <object class="GtkTreeView" id="advanced_treeview"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="rules_hint">True</property> - <signal name="row_activated" handler="on_advanced_treeview_row_activated"/> + <signal name="row-activated" handler="on_advanced_treeview_row_activated" swapped="no"/> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection1"/> + </child> </object> </child> </object> @@ -71,23 +75,28 @@ </child> </object> <packing> + <property name="expand">True</property> + <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkFrame" id="frame36"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="border_width">3</property> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> <object class="GtkAlignment" id="alignment90"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="border_width">6</property> <property name="left_padding">12</property> <child> <object class="GtkLabel" id="advanced_desc_label"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="xalign">0</property> <property name="wrap">True</property> </object> @@ -97,6 +106,7 @@ <child type="label"> <object class="GtkLabel" id="label357"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="label" translatable="yes"><b>Description</b></property> <property name="use_markup">True</property> </object> @@ -104,11 +114,13 @@ </object> <packing> <property name="expand">False</property> + <property name="fill">True</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkLabel" id="restart_label"> + <property name="can_focus">False</property> <property name="xalign">0</property> <property name="label" translatable="yes"><b>NOTE:</b> You should restart Gajim for some settings to take effect</property> <property name="use_markup">True</property> @@ -123,27 +135,50 @@ <child> <object class="GtkHButtonBox" id="hbuttonbox18"> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="spacing">6</property> <property name="layout_style">end</property> <child> + <object class="GtkButton" id="reset_button"> + <property name="label" translatable="yes">_Reset to default</property> + <property name="use_action_appearance">False</property> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + <property name="image">image1</property> + <property name="use_underline">True</property> + <signal name="clicked" handler="on_reset_button_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> <object class="GtkButton" id="advanced_close_button"> <property name="label">gtk-close</property> + <property name="use_action_appearance">False</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="can_default">True</property> <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> <property name="use_stock">True</property> - <signal name="clicked" handler="on_advanced_close_button_clicked"/> + <signal name="clicked" handler="on_advanced_close_button_clicked" swapped="no"/> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> - <property name="position">0</property> + <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> + <property name="fill">True</property> <property name="padding">6</property> <property name="position">3</property> </packing> @@ -151,4 +186,9 @@ </object> </child> </object> + <object class="GtkImage" id="image1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stock">gtk-undo</property> + </object> </interface> diff --git a/data/gui/chat_control.ui b/data/gui/chat_control.ui index cd71b42e4..e1ea08927 100644 --- a/data/gui/chat_control.ui +++ b/data/gui/chat_control.ui @@ -60,7 +60,7 @@ <object class="GtkLabel" id="banner_label"> <property name="visible">True</property> <property name="xalign">0</property> - <property name="label" translatable="yes">label</property> + <property name="label">label</property> <property name="use_markup">True</property> <property name="selectable">True</property> <signal name="populate_popup" handler="on_banner_label_populate_popup"/> diff --git a/data/gui/groupchat_control.ui b/data/gui/groupchat_control.ui index 9ae689e69..4dd48771a 100644 --- a/data/gui/groupchat_control.ui +++ b/data/gui/groupchat_control.ui @@ -54,7 +54,7 @@ <object class="GtkLabel" id="banner_label"> <property name="visible">True</property> <property name="xalign">0</property> - <property name="label" translatable="yes">label</property> + <property name="label">label</property> <property name="use_markup">True</property> <property name="selectable">True</property> </object> diff --git a/data/gui/roster_window.ui b/data/gui/roster_window.ui index 1d222779a..3a4ced776 100644 --- a/data/gui/roster_window.ui +++ b/data/gui/roster_window.ui @@ -202,7 +202,7 @@ <child> <object class="GtkCheckMenuItem" id="show_transports_menuitem"> <property name="visible">True</property> - <property name="label" translatable="yes">Show T_rans_ports</property> + <property name="label" translatable="yes">Show T_ransports</property> <property name="use_underline">True</property> <signal name="activate" handler="on_show_transports_menuitem_activate"/> </object> diff --git a/data/sounds/attention.wav b/data/sounds/attention.wav Binary files differnew file mode 100644 index 000000000..16c221182 --- /dev/null +++ b/data/sounds/attention.wav diff --git a/debian/README.Debian b/debian/README.Debian index f94442643..ef6dcef69 100644 --- a/debian/README.Debian +++ b/debian/README.Debian @@ -1,7 +1,7 @@ gajim for Debian ---------------- -For video chat support, you have to install python-farsight. +For video chat support, you have to install python-farstream. -- Yann Le Boulanger <asterix@lagaule.org>, Mon, 20 Jun 2005 12:02:31 +0200 -- Julien Valroff <julien@debian.org> Sat, 07 May 2011 13:50:27 +0200 diff --git a/debian/changelog b/debian/changelog index fe9ca177c..34541378e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,11 +1,11 @@ -gajim (0.15~alpha1-1) unstable; urgency=low +gajim (0.15-1) unstable; urgency=low * New upstream release. * remove 00_debian-copying.diff because upstream doesn't install it anymore * remove 01_configure-ac.diff because upstream changed configure dependencies * remove python-gnupginterface from recommands list, it's no more used - -- Yann Leboulanger <asterix@lagaule.org> Fri, 26 Aug 2011 12:13:51 +0200 + -- Yann Leboulanger <asterix@lagaule.org> Sat, 18 Mar 2012 10:32:38 +0100 gajim (0.14.4-1) unstable; urgency=low diff --git a/debian/control b/debian/control index 0bd63d2fc..4aa683f0b 100644 --- a/debian/control +++ b/debian/control @@ -3,16 +3,16 @@ Section: net Priority: optional Maintainer: Yann Leboulanger <asterix@lagaule.org> Build-Depends: debhelper (>= 7.0.50~), python (>= 2.6.6-3~), gettext (>= 0.17-4), intltool (>= 0.40.1), imagemagick, libglib2.0-dev -Standards-Version: 3.9.2 +Standards-Version: 3.9.3 Homepage: http://www.gajim.org Vcs-Hg: http://hg.gajim.org/gajim/ Vcs-Browser: http://hg.gajim.org/gajim/file Package: gajim Architecture: all -Depends: ${misc:Depends}, ${python:Depends}, python-gtk2 (>= 2.16.0), dnsutils -Recommends: dbus, python-dbus, notification-daemon, python-openssl (>= 0.9), python-crypto -Suggests: python-gconf, python-gnome2, nautilus-sendto, avahi-daemon, python-avahi, network-manager, libgtkspell0, aspell-en, python-gnomekeyring, gnome-keyring, python-kerberos (>= 1.1), texlive-latex-base, dvipng, python-farsight, gstreamer0.10-plugins-ugly +Depends: ${misc:Depends}, ${python:Depends}, python-gtk2 (>= 2.22.0), dnsutils +Recommends: dbus, python-dbus, notification-daemon, python-openssl (>= 0.12), python-crypto, python-pyasn1 +Suggests: python-gconf, python-gnome2, nautilus-sendto, avahi-daemon, python-avahi, network-manager, libgtkspell0, aspell-en, python-gnomekeyring, gnome-keyring, python-kerberos (>= 1.1), texlive-latex-base, dvipng, python-farstream, gstreamer0.10-plugins-ugly, python-pycurl, python-gupnp-igd Description: Jabber client written in PyGTK Gajim is a Jabber client. It has a tabbed user interface with normal chats, group chats, and has many features such as, TLS, GPG, SSL, multiple accounts, diff --git a/debian/copyright b/debian/copyright index 09a3c30c7..5cd17083b 100644 --- a/debian/copyright +++ b/debian/copyright @@ -9,7 +9,7 @@ Upstream Authors: - Yann Leboulanger <asterix@lagaule.org> -Copyright: (c) 2003-2011 Gajim Team +Copyright: (c) 2003-2012 Gajim Team 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 @@ -224,18 +224,8 @@ Section "Gtk+ 2" SecGtk SetOutPath "$INSTDIR\bin\gtk"
File /r "bin\gtk\bin"
File /r "bin\gtk\etc"
- SetOutPath "$INSTDIR\bin\gtk\lib\gtk-2.0\2.10.0"
- File /r "bin\gtk\lib\gtk-2.0\2.10.0\loaders"
- SetOutPath "$INSTDIR\bin\gtk\lib\gtk-2.0\2.10.0\engines"
- File "bin\gtk\lib\gtk-2.0\2.10.0\engines\libclearlooks.dll"
- File "bin\gtk\lib\gtk-2.0\2.10.0\engines\libpixmap.dll"
- File "bin\gtk\lib\gtk-2.0\2.10.0\engines\libsvg.dll"
- SetOutPath "$INSTDIR\bin\gtk\lib\gtk-2.0\2.10.0"
- SetOutPath "$INSTDIR\bin\gtk\lib"
- File "bin\gtk\lib\charset.alias"
- SetOutPath "$INSTDIR\bin\gtk\share"
- File /r "bin\gtk\share\gtkthemeselector"
- File /r "bin\gtk\share\xml"
+ File /r "bin\gtk\lib"
+ File /r "bin\gtk\share"
SectionEnd
Section "Plugins" SecPlugins
@@ -527,128 +517,8 @@ SectionEnd Section "Uninstall"
RMDir /r "$INSTDIR\bin\gtk\bin"
RMDir /r "$INSTDIR\bin\gtk\etc"
- RMDir /r "$INSTDIR\bin\gtk\lib\gtk-2.0\2.10.0\loaders"
- Delete "$INSTDIR\bin\gtk\lib\gtk-2.0\2.10.0\engines\libclearlooks.dll"
- Delete "$INSTDIR\bin\gtk\lib\gtk-2.0\2.10.0\engines\libpixmap.dll"
- Delete "$INSTDIR\bin\gtk\lib\gtk-2.0\2.10.0\engines\libsvg.dll"
- Delete "$INSTDIR\bin\gtk\lib\gtk-2.0\2.10.0\engines\libwimp.dll"
- RMDir "$INSTDIR\bin\gtk\lib\gtk-2.0\2.10.0\engines"
- RMDir "$INSTDIR\bin\gtk\lib\gtk-2.0\2.10.0"
- RMDir "$INSTDIR\bin\gtk\lib\gtk-2.0"
- Delete "$INSTDIR\bin\gtk\lib\charset.alias"
- RMDir "$INSTDIR\bin\gtk\lib"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\de"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\en_GB"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\es"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\fr"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\it"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\ru"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\af"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\am"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\ang"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\ar"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\as"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\az"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\az_IR"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\be"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\be@latin"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\bg"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\bn"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\bn_IN"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\br"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\bs"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\ca"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\ca@valencia"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\cs"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\cy"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\da"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\dz"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\el"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\en_CA"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\eo"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\et"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\eu"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\fa"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\fi"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\ga"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\gl"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\gu"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\he"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\hi"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\hr"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\hu"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\hy"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\ia"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\id"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\io"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\is"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\ja"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\ka"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\kn"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\ko"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\ku"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\li"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\lt"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\lv"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\mai"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\mg"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\mi"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\mk"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\ml"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\mn"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\mr"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\ms"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\nb"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\ne"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\nl"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\nn"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\nso"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\oc"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\or"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\pa"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\pl"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\ps"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\pt"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\pt_BR"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\ro"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\rw"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\si"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\sk"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\sl"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\sq"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\sr"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\sr@ije"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\sr@latin"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\sv"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\ta"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\te"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\th"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\tk"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\tl"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\tr"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\tt"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\ug"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\uk"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\ur"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\uz"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\uz@cyrillic"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\vi"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\wa"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\xh"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\yi"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\zh_CN"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\zh_HK"
- RMDir /r "$INSTDIR\bin\gtk\share\locale\zh_TW"
- RMDir "$INSTDIR\bin\gtk\share\locale"
- RMDir /r "$INSTDIR\bin\gtk\share\themes\Clearlooks"
- RMDir /r "$INSTDIR\bin\gtk\share\themes\Default"
- RMDir /r "$INSTDIR\bin\gtk\share\themes\Glossy"
- RMDir /r "$INSTDIR\bin\gtk\share\themes\Glossy-js"
- RMDir /r "$INSTDIR\bin\gtk\share\themes\MS-Windows"
- RMDir "$INSTDIR\bin\gtk\share\themes"
- RMDir /r "$INSTDIR\bin\gtk\share\gtkthemeselector"
- RMDir /r "$INSTDIR\bin\gtk\share\xml"
- RMDir "$INSTDIR\bin\gtk\share"
+ RMDir /r "$INSTDIR\bin\gtk\lib"
+ RMDir /r "$INSTDIR\bin\gtk\share"
RMDir "$INSTDIR\bin\gtk"
Delete "$INSTDIR\bin\_bsddb.pyd"
Delete "$INSTDIR\bin\_ctypes.pyd"
diff --git a/plugins/dbus_plugin/plugin.py b/plugins/dbus_plugin/plugin.py index 3a583a7cf..95d3b1760 100644 --- a/plugins/dbus_plugin/plugin.py +++ b/plugins/dbus_plugin/plugin.py @@ -501,7 +501,7 @@ if dbus_support.supported: for node in path: key += node + '#' key += name - prefs_dict[DBUS_STRING(key)] = DBUS_STRING(value[1]) + prefs_dict[DBUS_STRING(key)] = DBUS_STRING(value) gajim.config.foreach(get_prefs) return prefs_dict diff --git a/plugins/snarl_notifications/PySnarl.py b/plugins/snarl_notifications/PySnarl.py deleted file mode 100755 index c3c657e56..000000000 --- a/plugins/snarl_notifications/PySnarl.py +++ /dev/null @@ -1,772 +0,0 @@ -""" -A python version of the main functions to use Snarl -(http://www.fullphat.net/snarl) - -Version 1.0 - -This module can be used in two ways. One is the normal way -the other snarl interfaces work. This means you can call snShowMessage -and get an ID back for manipulations. - -The other way is there is a class this module exposes called SnarlMessage. -This allows you to keep track of the message as a python object. If you -use the send without specifying False as the argument it will set the ID -to what the return of the last SendMessage was. This is of course only -useful for the SHOW message. - -Requires one of: - pywin32 extensions from http://pywin32.sourceforge.net - ctypes (included in Python 2.5, downloadable for earlier versions) - -Creator: Sam Listopad II (samlii@users.sourceforge.net) - -Copyright 2006-2008 Samuel Listopad II - -Licensed under the Apache License, Version 2.0 (the "License"); you may not -use this file except in compliance with the License. You may obtain a copy -of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required -by applicable law or agreed to in writing, software distributed under the -License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS -OF ANY KIND, either express or implied. See the License for the specific -language governing permissions and limitations under the License. -""" - -import array, struct - -def LOWORD(dword): - """Return the low WORD of the passed in integer""" - return dword & 0x0000ffff -#get the hi word -def HIWORD(dword): - """Return the high WORD of the passed in integer""" - return dword >> 16 - -class Win32FuncException(Exception): - def __init__(self, value): - self.value = value - - def __str__(self): - return repr(self.value) - -class Win32Funcs: - """Just a little class to hide the details of finding and using the -correct win32 functions. The functions may throw a UnicodeEncodeError if -there is not a unicode version and it is sent a unicode string that cannot -be converted to ASCII.""" - WM_USER = 0x400 - WM_COPYDATA = 0x4a - #Type of String the functions are expecting. - #Used like function(myWin32Funcs.strType(param)). - __strType = str - #FindWindow function to use - __FindWindow = None - #FindWindow function to use - __FindWindowEx = None - #SendMessage function to use - __SendMessage = None - #SendMessageTimeout function to use - __SendMessageTimeout = None - #IsWindow function to use - __IsWindow = None - #RegisterWindowMessage to use - __RegisterWindowMessage = None - #GetWindowText to use - __GetWindowText = None - - def FindWindow(self, lpClassName, lpWindowName): - """Wraps the windows API call of FindWindow""" - if lpClassName is not None: - lpClassName = self.__strType(lpClassName) - if lpWindowName is not None: - lpWindowName = self.__strType(lpWindowName) - return self.__FindWindow(lpClassName, lpWindowName) - - def FindWindowEx(self, hwndParent, hwndChildAfter, lpClassName, lpWindowName): - """Wraps the windows API call of FindWindow""" - if lpClassName is not None: - lpClassName = self.__strType(lpClassName) - if lpWindowName is not None: - lpWindowName = self.__strType(lpWindowName) - return self.__FindWindowEx(hwndParent, hwndChildAfter, lpClassName, lpWindowName) - - def SendMessage(self, hWnd, Msg, wParam, lParam): - """Wraps the windows API call of SendMessage""" - return self.__SendMessage(hWnd, Msg, wParam, lParam) - - def SendMessageTimeout(self, hWnd, Msg, - wParam, lParam, fuFlags, - uTimeout, lpdwResult = None): - """Wraps the windows API call of SendMessageTimeout""" - idToRet = None - try: - idFromMsg = array.array('I', [0]) - result = idFromMsg.buffer_info()[0] - response = self.__SendMessageTimeout(hWnd, Msg, wParam, - lParam, fuFlags, - uTimeout, result) - if response == 0: - raise Win32FuncException, "SendMessageTimeout TimedOut" - - idToRet = idFromMsg[0] - except TypeError: - idToRet = self.__SendMessageTimeout(hWnd, Msg, wParam, - lParam, fuFlags, - uTimeout) - - if lpdwResult is not None and lpdwResult.typecode == 'I': - lpdwResult[0] = idToRet - - return idToRet - - def IsWindow(self, hWnd): - """Wraps the windows API call of IsWindow""" - return self.__IsWindow(hWnd) - - def RegisterWindowMessage(self, lpString): - """Wraps the windows API call of RegisterWindowMessage""" - return self.__RegisterWindowMessage(self.__strType(lpString)) - - def GetWindowText(self, hWnd, lpString = None, nMaxCount = None): - """Wraps the windows API call of SendMessageTimeout""" - text = '' - if hWnd == 0: - return text - - if nMaxCount is None: - nMaxCount = 1025 - - try: - arrayType = 'c' - if self.__strType == unicode: - arrayType = 'u' - path_string = array.array(arrayType, self.__strType('\x00') * nMaxCount) - path_buffer = path_string.buffer_info()[0] - result = self.__GetWindowText(hWnd, - path_buffer, - nMaxCount) - if result > 0: - if self.__strType == unicode: - text = path_string[0:result].tounicode() - else: - text = path_string[0:result].tostring() - except TypeError: - text = self.__GetWindowText(hWnd) - - if lpString is not None and lpString.typecode == 'c': - lpdwResult[0:len(text)] = array.array('c', str(text)); - - if lpString is not None and lpString.typecode == 'u': - lpdwResult[0:len(text)] = array.array('u', unicode(text)); - - return text - - def __init__(self): - """Load up my needed functions""" - # First see if they already have win32gui imported. If so use it. - # This has to be checked first since the auto check looks for ctypes - # first. - try: - self.__FindWindow = win32gui.FindWindow - self.__FindWindowEx = win32gui.FindWindowEx - self.__GetWindowText = win32gui.GetWindowText - self.__IsWindow = win32gui.IsWindow - self.__SendMessage = win32gui.SendMessage - self.__SendMessageTimeout = win32gui.SendMessageTimeout - self.__RegisterWindowMessage = win32gui.RegisterWindowMessage - self.__strType = unicode - - #Something threw a NameError, most likely the win32gui lines - #so do auto check - except NameError: - try: - from ctypes import windll - self.__FindWindow = windll.user32.FindWindowW - self.__FindWindowEx = windll.user32.FindWindowExW - self.__GetWindowText = windll.user32.GetWindowTextW - self.__IsWindow = windll.user32.IsWindow - self.__SendMessage = windll.user32.SendMessageW - self.__SendMessageTimeout = windll.user32.SendMessageTimeoutW - self.__RegisterWindowMessage = windll.user32.RegisterWindowMessageW - self.__strType = unicode - - #FindWindowW wasn't found, look for FindWindowA - except AttributeError: - try: - self.__FindWindow = windll.user32.FindWindowA - self.__FindWindowEx = windll.user32.FindWindowExA - self.__GetWindowText = windll.user32.GetWindowTextA - self.__IsWindow = windll.user32.IsWindow - self.__SendMessage = windll.user32.SendMessageA - self.__SendMessageTimeout = windll.user32.SendMessageTimeoutA - self.__RegisterWindowMessage = windll.user32.RegisterWindowMessageA - # Couldn't find either so Die and tell user why. - except AttributeError: - import sys - sys.stderr.write("Your Windows TM setup seems to be corrupt."+ - " No FindWindow found in user32.\n") - sys.stderr.flush() - sys.exit(3) - - except ImportError: - try: - import win32gui - self.__FindWindow = win32gui.FindWindow - self.__FindWindowEx = win32gui.FindWindowEx - self.__GetWindowText = win32gui.GetWindowText - self.__IsWindow = win32gui.IsWindow - self.__SendMessage = win32gui.SendMessage - self.__SendMessageTimeout = win32gui.SendMessageTimeout - self.__RegisterWindowMessage = win32gui.RegisterWindowMessage - self.__strType = unicode - - except ImportError: - import sys - sys.stderr.write("You need to have either"+ - " ctypes or pywin32 installed.\n") - sys.stderr.flush() - #sys.exit(2) - - -myWin32Funcs = Win32Funcs() - - -SHOW = 1 -HIDE = 2 -UPDATE = 3 -IS_VISIBLE = 4 -GET_VERSION = 5 -REGISTER_CONFIG_WINDOW = 6 -REVOKE_CONFIG_WINDOW = 7 -REGISTER_ALERT = 8 -REVOKE_ALERT = 9 -REGISTER_CONFIG_WINDOW_2 = 10 -GET_VERSION_EX = 11 -SET_TIMEOUT = 12 - -EX_SHOW = 32 - -GLOBAL_MESSAGE = "SnarlGlobalMessage" -GLOBAL_MSG = "SnarlGlobalEvent" - -#Messages That may be received from Snarl -SNARL_LAUNCHED = 1 -SNARL_QUIT = 2 -SNARL_ASK_APPLET_VER = 3 -SNARL_SHOW_APP_UI = 4 - -SNARL_NOTIFICATION_CLICKED = 32 #notification was right-clicked by user -SNARL_NOTIFICATION_CANCELLED = SNARL_NOTIFICATION_CLICKED #Name clarified -SNARL_NOTIFICATION_TIMED_OUT = 33 -SNARL_NOTIFICATION_ACK = 34 #notification was left-clicked by user - -#Snarl Test Message -WM_SNARLTEST = myWin32Funcs.WM_USER + 237 - -M_ABORTED = 0x80000007L -M_ACCESS_DENIED = 0x80000009L -M_ALREADY_EXISTS = 0x8000000CL -M_BAD_HANDLE = 0x80000006L -M_BAD_POINTER = 0x80000005L -M_FAILED = 0x80000008L -M_INVALID_ARGS = 0x80000003L -M_NO_INTERFACE = 0x80000004L -M_NOT_FOUND = 0x8000000BL -M_NOT_IMPLEMENTED = 0x80000001L -M_OK = 0x00000000L -M_OUT_OF_MEMORY = 0x80000002L -M_TIMED_OUT = 0x8000000AL - -ErrorCodeRev = { - 0x80000007L : "M_ABORTED", - 0x80000009L : "M_ACCESS_DENIED", - 0x8000000CL : "M_ALREADY_EXISTS", - 0x80000006L : "M_BAD_HANDLE", - 0x80000005L : "M_BAD_POINTER", - 0x80000008L : "M_FAILED", - 0x80000003L : "M_INVALID_ARGS", - 0x80000004L : "M_NO_INTERFACE", - 0x8000000BL : "M_NOT_FOUND", - 0x80000001L : "M_NOT_IMPLEMENTED", - 0x00000000L : "M_OK", - 0x80000002L : "M_OUT_OF_MEMORY", - 0x8000000AL : "M_TIMED_OUT" - } - -class SnarlMessage(object): - """The main Snarl interface object. - - ID = Snarl Message ID for most operations. See SDK for more info - as to other values to put here. - type = Snarl Message Type. Valid values are : SHOW, HIDE, UPDATE, - IS_VISIBLE, GET_VERSION, REGISTER_CONFIG_WINDOW, REVOKE_CONFIG_WINDOW - all which are constants in the PySnarl module. - timeout = Timeout in seconds for the Snarl Message - data = Snarl Message data. This is dependant upon message type. See SDK - title = Snarl Message title. - text = Snarl Message text. - icon = Path to the icon to display in the Snarl Message. - """ - __msgType = 0 - __msgID = 0 - __msgTimeout = 0 - __msgData = 0 - __msgTitle = "" - __msgText = "" - __msgIcon = "" - __msgClass = "" - __msgExtra = "" - __msgExtra2 = "" - __msgRsvd1 = 0 - __msgRsvd2 = 0 - __msgHWnd = 0 - - lastKnownHWnd = 0 - - def getType(self): - """Type Attribute getter.""" - return self.__msgType - def setType(self, value): - """Type Attribute setter.""" - if( isinstance(value, (int, long)) ): - self.__msgType = value - type = property(getType, setType, doc="The Snarl Message Type") - - def getID(self): - """ID Attribute getter.""" - return self.__msgID - def setID(self, value): - """ID Attribute setter.""" - if( isinstance(value, (int, long)) ): - self.__msgID = value - ID = property(getID, setID, doc="The Snarl Message ID") - - def getTimeout(self): - """Timeout Attribute getter.""" - return self.__msgTimeout - def updateTimeout(self, value): - """Timeout Attribute setter.""" - if( isinstance(value, (int, long)) ): - self.__msgTimeout = value - timeout = property(getTimeout, updateTimeout, - doc="The Snarl Message Timeout") - - def getData(self): - """Data Attribute getter.""" - return self.__msgData - def setData(self, value): - """Data Attribute setter.""" - if( isinstance(value, (int, long)) ): - self.__msgData = value - data = property(getData, setData, doc="The Snarl Message Data") - - def getTitle(self): - """Title Attribute getter.""" - return self.__msgTitle - def setTitle(self, value): - """Title Attribute setter.""" - if( isinstance(value, basestring) ): - self.__msgTitle = value - title = property(getTitle, setTitle, doc="The Snarl Message Title") - - def getText(self): - """Text Attribute getter.""" - return self.__msgText - def setText(self, value): - """Text Attribute setter.""" - if( isinstance(value, basestring) ): - self.__msgText = value - text = property(getText, setText, doc="The Snarl Message Text") - - def getIcon(self): - """Icon Attribute getter.""" - return self.__msgIcon - def setIcon(self, value): - """Icon Attribute setter.""" - if( isinstance(value, basestring) ): - self.__msgIcon = value - icon = property(getIcon, setIcon, doc="The Snarl Message Icon") - - def getClass(self): - """Class Attribute getter.""" - return self.__msgClass - def setClass(self, value): - """Class Attribute setter.""" - if( isinstance(value, basestring) ): - self.__msgClass = value - msgclass = property(getClass, setClass, doc="The Snarl Message Class") - - def getExtra(self): - """Extra Attribute getter.""" - return self.__msgExtra - def setExtra(self, value): - """Extra Attribute setter.""" - if( isinstance(value, basestring) ): - self.__msgExtra = value - extra = property(getExtra, setExtra, doc="Extra Info for the Snarl Message") - - def getExtra2(self): - """Extra2 Attribute getter.""" - return self.__msgExtra2 - def setExtra2(self, value): - """Extra2 Attribute setter.""" - if( isinstance(value, basestring) ): - self.__msgExtra2 = value - extra2 = property(getExtra2, setExtra2, - doc="More Extra Info for the Snarl Message") - - def getRsvd1(self): - """Rsvd1 Attribute getter.""" - return self.__msgRsvd1 - def setRsvd1(self, value): - """Rsvd1 Attribute setter.""" - if( isinstance(value, (int, long)) ): - self.__msgRsvd1 = value - rsvd1 = property(getRsvd1, setRsvd1, doc="The Snarl Message Field Rsvd1") - - def getRsvd2(self): - """Rsvd2 Attribute getter.""" - return self.__msgRsvd2 - def setRsvd2(self, value): - """Rsvd2 Attribute setter.""" - if( isinstance(value, (int, long)) ): - self.__msgRsvd2 = value - rsvd2 = property(getRsvd2, setRsvd2, doc="The Snarl Message Field Rsvd2") - - def getHwnd(self): - """hWnd Attribute getter.""" - return self.__msgHWnd - def setHwnd(self, value): - """hWnd Attribute setter.""" - if( isinstance(value, (int, long)) ): - self.__msgHWnd = value - - hWnd = property(getHwnd, setHwnd, doc="The hWnd of the window this message is being sent from") - - - def __init__(self, title="", text="", icon="", msg_type=1, msg_id=0): - self.__msgTimeout = 0 - self.__msgData = 0 - self.__msgClass = "" - self.__msgExtra = "" - self.__msgExtra2 = "" - self.__msgRsvd1 = 0 - self.__msgRsvd2 = 0 - self.__msgType = msg_type - self.__msgText = text - self.__msgTitle = title - self.__msgIcon = icon - self.__msgID = msg_id - - def createCopyStruct(self): - """Creates the struct to send as the copyData in the message.""" - return struct.pack("ILLL1024s1024s1024s1024s1024s1024sLL", - self.__msgType, - self.__msgID, - self.__msgTimeout, - self.__msgData, - self.__msgTitle.encode('utf-8'), - self.__msgText.encode('utf-8'), - self.__msgIcon.encode('utf-8'), - self.__msgClass.encode('utf-8'), - self.__msgExtra.encode('utf-8'), - self.__msgExtra2.encode('utf-8'), - self.__msgRsvd1, - self.__msgRsvd2 - ) - __lpData = None - __cds = None - - def packData(self, dwData): - """This packs the data in the necessary format for a -WM_COPYDATA message.""" - self.__lpData = None - self.__cds = None - item = self.createCopyStruct() - self.__lpData = array.array('c', item) - lpData_ad = self.__lpData.buffer_info()[0] - cbData = self.__lpData.buffer_info()[1] - self.__cds = array.array('c', - struct.pack("IIP", - dwData, - cbData, - lpData_ad) - ) - cds_ad = self.__cds.buffer_info()[0] - return cds_ad - - def reset(self): - """Reset this SnarlMessage to the default state.""" - self.__msgType = 0 - self.__msgID = 0 - self.__msgTimeout = 0 - self.__msgData = 0 - self.__msgTitle = "" - self.__msgText = "" - self.__msgIcon = "" - self.__msgClass = "" - self.__msgExtra = "" - self.__msgExtra2 = "" - self.__msgRsvd1 = 0 - self.__msgRsvd2 = 0 - - - def send(self, setid=True): - """Send this SnarlMessage to the Snarl window. -Args: - setid - Boolean defining whether or not to set the ID - of this SnarlMessage to the return value of - the SendMessage call. Default is True to - make simple case of SHOW easy. - """ - hwnd = myWin32Funcs.FindWindow(None, "Snarl") - if myWin32Funcs.IsWindow(hwnd): - if self.type == REGISTER_CONFIG_WINDOW or self.type == REGISTER_CONFIG_WINDOW_2: - self.hWnd = self.data - try: - response = myWin32Funcs.SendMessageTimeout(hwnd, - myWin32Funcs.WM_COPYDATA, - self.hWnd, self.packData(2), - 2, 500) - except Win32FuncException: - return False - - idFromMsg = response - if setid: - self.ID = idFromMsg - return True - else: - return idFromMsg - print "No snarl window found" - return False - - def hide(self): - """Hide this message. Type will revert to type before calling hide -to allow for better reuse of object.""" - oldType = self.__msgType - self.__msgType = HIDE - retVal = bool(self.send(False)) - self.__msgType = oldType - return retVal - - def isVisible(self): - """Is this message visible. Type will revert to type before calling -hide to allow for better reuse of object.""" - oldType = self.__msgType - self.__msgType = IS_VISIBLE - retVal = bool(self.send(False)) - self.__msgType = oldType - return retVal - - def update(self, title=None, text=None, icon=None): - """Update this message with given title and text. Type will revert -to type before calling hide to allow for better reuse of object.""" - oldType = self.__msgType - self.__msgType = UPDATE - if text: - self.__msgText = text - if title: - self.__msgTitle = title - if icon: - self.__msgIcon = icon - retVal = self.send(False) - self.__msgType = oldType - return retVal - - def setTimeout(self, timeout): - """Set the timeout in seconds of the message""" - oldType = self.__msgType - oldData = self.__msgData - self.__msgType = SET_TIMEOUT - #self.timeout = timeout - #self.__msgData = self.__msgTimeout - self.__msgData = timeout - retVal = self.send(False) - self.__msgType = oldType - self.__msgData = oldData - return retVal - - def show(self, timeout=None, title=None, - text=None, icon=None, - replyWindow=None, replyMsg=None, msgclass=None, soundPath=None): - """Show a message""" - oldType = self.__msgType - oldTimeout = self.__msgTimeout - self.__msgType = SHOW - if text: - self.__msgText = text - if title: - self.__msgTitle = title - if timeout: - self.__msgTimeout = timeout - if icon: - self.__msgIcon = icon - if replyWindow: - self.__msgID = replyMsg - if replyMsg: - self.__msgData = replyWindow - if soundPath: - self.__msgExtra = soundPath - if msgclass: - self.__msgClass = msgclass - - if ((self.__msgClass and self.__msgClass != "") or - (self.__msgExtra and self.__msgExtra != "")): - self.__msgType = EX_SHOW - - - retVal = bool(self.send()) - self.__msgType = oldType - self.__msgTimeout = oldTimeout - return retVal - - -def snGetVersion(): - """ Get the version of Snarl that is running as a tuple. (Major, Minor) - -If Snarl is not running or there was an error it will -return False.""" - msg = SnarlMessage(msg_type=GET_VERSION) - version = msg.send(False) - if not version: - return False - return (HIWORD(version), LOWORD(version)) - -def snGetVersionEx(): - """ Get the internal version of Snarl that is running. - -If Snarl is not running or there was an error it will -return False.""" - sm = SnarlMessage(msg_type=GET_VERSION_EX) - verNum = sm.send(False) - if not verNum: - return False - return verNum - -def snGetGlobalMessage(): - """Get the Snarl global message id from windows.""" - return myWin32Funcs.RegisterWindowMessage(GLOBAL_MSG) - -def snShowMessage(title, text, timeout=0, iconPath="", - replyWindow=0, replyMsg=0): - """Show a message using Snarl and return its ID. See SDK for arguments.""" - sm = SnarlMessage( title, text, iconPath, msg_id=replyMsg) - sm.data = replyWindow - if sm.show(timeout): - return sm.ID - else: - return False - -def snShowMessageEx(msgClass, title, text, timeout=0, iconPath="", - replyWindow=0, replyMsg=0, soundFile=None, hWndFrom=None): - """Show a message using Snarl and return its ID. See SDK for arguments. - One added argument is hWndFrom that allows one to make the messages appear - to come from a specific window. This window should be the one you registered - earlier with RegisterConfig""" - sm = SnarlMessage( title, text, iconPath, msg_id=replyMsg) - sm.data = replyWindow - if hWndFrom is not None: - sm.hWnd = hWndFrom - else: - sm.hWnd = SnarlMessage.lastKnownHWnd - if sm.show(timeout, msgclass=msgClass, soundPath=soundFile): - return sm.ID - else: - return False - -def snUpdateMessage(msgId, msgTitle, msgText, icon=None): - """Update a message""" - sm = SnarlMessage(msg_id=msgId) - if icon: - sm.icon = icon - return sm.update(msgTitle, msgText) - -def snHideMessage(msgId): - """Hide a message""" - return SnarlMessage(msg_id=msgId).hide() - -def snSetTimeout(msgId, timeout): - """Update the timeout of a message already shown.""" - sm = SnarlMessage(msg_id=msgId) - return sm.setTimeout(timeout) - -def snIsMessageVisible(msgId): - """Returns True if the message is visible False otherwise.""" - return SnarlMessage(msg_id=msgId).isVisible() - -def snRegisterConfig(replyWnd, appName, replyMsg): - """Register a config window. See SDK for more info.""" - global lastRegisteredSnarlMsg - sm = SnarlMessage(msg_type=REGISTER_CONFIG_WINDOW, - title=appName, - msg_id=replyMsg) - sm.data = replyWnd - SnarlMessage.lastKnownHWnd = replyWnd - - return sm.send(False) - -def snRegisterConfig2(replyWnd, appName, replyMsg, icon): - """Register a config window. See SDK for more info.""" - global lastRegisteredSnarlMsg - sm = SnarlMessage(msg_type=REGISTER_CONFIG_WINDOW_2, - title=appName, - msg_id=replyMsg, - icon=icon) - sm.data = replyWnd - SnarlMessage.lastKnownHWnd = replyWnd - return sm.send(False) - -def snRegisterAlert(appName, classStr) : - """Register an alert for an already registered config. See SDK for more info.""" - sm = SnarlMessage(msg_type=REGISTER_ALERT, - title=appName, - text=classStr) - return sm.send(False) - -def snRevokeConfig(replyWnd): - """Revoke a config window""" - sm = SnarlMessage(msg_type=REVOKE_CONFIG_WINDOW) - sm.data = replyWnd - if replyWnd == SnarlMessage.lastKnownHWnd: - SnarlMessage.lastKnownHWnd = 0 - return sm.send(False) - -def snGetSnarlWindow(): - """Returns the hWnd of the snarl window""" - return myWin32Funcs.FindWindow(None, "Snarl") - -def snGetAppPath(): - """Returns the application path of the currently running snarl window""" - app_path = None - snarl_handle = snGetSnarlWindow() - if snarl_handle != 0: - pathwin_handle = myWin32Funcs.FindWindowEx(snarl_handle, - 0, - "static", - None) - if pathwin_handle != 0: - try: - result = myWin32Funcs.GetWindowText(pathwin_handle) - app_path = result - except Win32FuncException: - pass - - - return app_path - -def snGetIconsPath(): - """Returns the path to the icons of the program""" - s = snGetAppPath() - if s is None: - return "" - else: - return s + "etc\\icons\\" - -def snSendTestMessage(data=None): - """Sends a test message to Snarl. Used to make sure the -api is connecting""" - param = 0 - command = 0 - if data: - param = struct.pack("I", data) - command = 1 - myWin32Funcs.SendMessage(snGetSnarlWindow(), WM_SNARLTEST, command, param) diff --git a/plugins/snarl_notifications/__init__.py b/plugins/snarl_notifications/__init__.py deleted file mode 100644 index b504dfd50..000000000 --- a/plugins/snarl_notifications/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from plugin import SnarlNotificationsPlugin diff --git a/plugins/snarl_notifications/manifest.ini b/plugins/snarl_notifications/manifest.ini deleted file mode 100644 index 45597bfc0..000000000 --- a/plugins/snarl_notifications/manifest.ini +++ /dev/null @@ -1,11 +0,0 @@ -[info] -name: Snarl Notifications -short_name: snarl_notifications -version: 0.1 -description: Shows events notification using Snarl (http://www.fullphat.net/) under Windows. Snarl needs to be installed in system. - PySnarl bindings are used (http://code.google.com/p/pysnarl/). -authors = Mateusz Biliński <mateusz@bilinski.it> -homepage = http://blog.bilinski.it - - - diff --git a/plugins/snarl_notifications/plugin.py b/plugins/snarl_notifications/plugin.py deleted file mode 100644 index 82247c5e6..000000000 --- a/plugins/snarl_notifications/plugin.py +++ /dev/null @@ -1,71 +0,0 @@ -# -*- coding: utf-8 -*- -## -## This file is part of Gajim. -## -## Gajim 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; version 3 only. -## -## Gajim 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 Gajim. If not, see <http://www.gnu.org/licenses/>. -## -''' -Events notifications using Snarl - -Fancy events notifications under Windows using Snarl infrastructure. - -:note: plugin is at proof-of-concept state. - -:author: Mateusz Biliński <mateusz@bilinski.it> -:since: 15th August 2008 -:copyright: Copyright (2008) Mateusz Biliński <mateusz@bilinski.it> -:license: GPL -''' - -import new -from pprint import pformat - -#import PySnarl - -from common import gajim -from plugins import GajimPlugin -from plugins.helpers import log_calls, log -from common import ged - -class SnarlNotificationsPlugin(GajimPlugin): - - @log_calls('SnarlNotificationsPlugin') - def init(self): - self.description = _('Shows events notification using Snarl ' - '(http://www.fullphat.net/) under Windows. ' - 'Snarl needs to be installed in system.\n' - 'PySnarl bindings are used (http://code.google.com/p/pysnarl/).') - self.config_dialog = None - #self.gui_extension_points = {} - #self.config_default_values = {} - - self.events_handlers = {'notification' : (ged.POSTCORE, self.notif)} - - @log_calls('SnarlNotificationsPlugin') - def activate(self): - pass - - @log_calls('SnarlNotificationsPlugin') - def deactivate(self): - pass - - @log_calls('SnarlNotificationsPlugin') - def notif(self, obj): - print "Event '%s' occured.\n\n===\n" % obj.popup_event_type - - #if PySnarl.snGetVersion() != False: - #(major, minor) = PySnarl.snGetVersion() - #print "Found Snarl version",str(major)+"."+str(minor),"running." - #PySnarl.snShowMessage(obj.popup_title, obj.popup_text) - #else: - #print "Sorry Snarl does not appear to be running" diff --git a/po/POTFILES.skip b/po/POTFILES.skip deleted file mode 100644 index 26c1c02d1..000000000 --- a/po/POTFILES.skip +++ /dev/null @@ -1,3 +0,0 @@ -data/gajim.desktop.in -src/eggtrayicon.c -src/ipython_view.py @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gajim 0.12 svn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-07-19 00:05+0200\n" +"POT-Creation-Date: 2012-03-18 12:14+0100\n" "PO-Revision-Date: 2011-05-30 08:28+0100\n" "Last-Translator: Florent Le Coz <louizatakk@fedoraproject.org>\n" "Language-Team: <>\n" @@ -31,7 +31,7 @@ msgstr "_Rejoindre un _salon de discussion..." msgid "_Add Contact..." msgstr "_Ajouter un contact..." -#: ../data/gui/account_context_menu.ui.h:3 ../data/gui/roster_window.ui.h:20 +#: ../data/gui/account_context_menu.ui.h:3 ../data/gui/roster_window.ui.h:19 msgid "_Discover Services" msgstr "_Découvrir les services" @@ -51,7 +51,7 @@ msgstr "_Accéder au compte Gmail" msgid "_Personal Events" msgstr "Évènements P_ersonnels" -#: ../data/gui/account_context_menu.ui.h:8 ../data/gui/roster_window.ui.h:25 +#: ../data/gui/account_context_menu.ui.h:8 ../data/gui/roster_window.ui.h:24 msgid "_Start Chat..." msgstr "Commencer une _discussion..." @@ -111,7 +111,7 @@ msgid "I want to _register for a new account" msgstr "Je veux _créer un nouveau compte" #: ../data/gui/account_creation_wizard_window.ui.h:15 -#: ../data/gui/accounts_window.ui.h:28 +#: ../data/gui/accounts_window.ui.h:30 msgid "If checked, Gajim will remember the password for this account" msgstr "" "Si cette case est cochée, Gajim va retenir le mot de passe pour ce compte" @@ -121,13 +121,14 @@ msgid "Manage..." msgstr "Gérer..." #: ../data/gui/account_creation_wizard_window.ui.h:17 -#: ../data/gui/accounts_window.ui.h:39 ../data/gui/change_mood_dialog.ui.h:3 -#: ../src/config.py:1289 ../src/config.py:1392 ../src/config.py:1703 -#: ../src/config.py:1708 ../src/config.py:2274 ../src/config.py:2353 -#: ../src/config.py:2366 ../src/config.py:3644 ../src/config.py:3719 +#: ../data/gui/accounts_window.ui.h:41 ../data/gui/change_mood_dialog.ui.h:3 +#: ../src/config.py:1265 ../src/config.py:1279 ../src/config.py:1284 +#: ../src/config.py:1332 ../src/config.py:1435 ../src/config.py:1746 +#: ../src/config.py:1751 ../src/config.py:2327 ../src/config.py:2406 +#: ../src/config.py:2419 ../src/config.py:3703 ../src/config.py:3778 #: ../src/dialogs.py:311 ../src/dialogs.py:313 ../src/dialogs.py:519 -#: ../src/dialogs.py:532 ../src/roster_window.py:3096 -#: ../src/roster_window.py:3102 ../src/roster_window.py:3107 +#: ../src/dialogs.py:532 ../src/roster_window.py:3133 +#: ../src/roster_window.py:3139 ../src/roster_window.py:3144 msgid "None" msgstr "Aucun" @@ -136,7 +137,7 @@ msgid "Prox_y:" msgstr "Prox_y :" #: ../data/gui/account_creation_wizard_window.ui.h:19 -#: ../data/gui/accounts_window.ui.h:48 +#: ../data/gui/accounts_window.ui.h:50 msgid "Save pass_word" msgstr "Sauver le mot de _passe" @@ -157,7 +158,7 @@ msgstr "" "au réseau Jabber." #: ../data/gui/account_creation_wizard_window.ui.h:24 -#: ../data/gui/roster_window.ui.h:18 +#: ../data/gui/roster_window.ui.h:17 msgid "_Advanced" msgstr "_Avancées" @@ -170,12 +171,12 @@ msgid "_Hostname:" msgstr "Nom d'_Hôte :" #: ../data/gui/account_creation_wizard_window.ui.h:27 -#: ../data/gui/accounts_window.ui.h:62 +#: ../data/gui/accounts_window.ui.h:63 msgid "_Jabber ID:" msgstr "Identifiant _Jabber : " #: ../data/gui/account_creation_wizard_window.ui.h:28 -#: ../data/gui/accounts_window.ui.h:64 +#: ../data/gui/accounts_window.ui.h:65 #: ../data/gui/manage_bookmarks_window.ui.h:8 msgid "_Password:" msgstr "Mot de _passe : " @@ -217,31 +218,41 @@ msgstr "Compte" msgid "Accounts" msgstr "Comptes" -#: ../data/gui/accounts_window.ui.h:8 +#. Change label for accept_button to action name instead of 'OK'. +#: ../data/gui/accounts_window.ui.h:8 ../src/dialogs.py:3387 +#: ../src/dialogs.py:3433 +msgid "Add" +msgstr "Ajouter" + +#: ../data/gui/accounts_window.ui.h:9 msgid "Administration operations" msgstr "Opérations d'administration" -#: ../data/gui/accounts_window.ui.h:9 +#: ../data/gui/accounts_window.ui.h:10 msgid "Anonymous authentication" msgstr "Authentification anonyme" -#: ../data/gui/accounts_window.ui.h:10 +#: ../data/gui/accounts_window.ui.h:11 msgid "Auto-reconnect when connection is lost" msgstr "Reconnexion automatique quand la connexion est perdue" -#: ../data/gui/accounts_window.ui.h:11 +#: ../data/gui/accounts_window.ui.h:12 msgid "Browse..." msgstr "_Parcourir..." -#: ../data/gui/accounts_window.ui.h:12 +#: ../data/gui/accounts_window.ui.h:13 msgid "C_onnect on Gajim startup" msgstr "C_onnexion au démarrage" -#: ../data/gui/accounts_window.ui.h:13 +#: ../data/gui/accounts_window.ui.h:14 +msgid "Certificate is e_ncrypted" +msgstr "Le certificat est chiffré" + +#: ../data/gui/accounts_window.ui.h:15 msgid "Chan_ge Password" msgstr "Chan_ger le mot de passe" -#: ../data/gui/accounts_window.ui.h:14 +#: ../data/gui/accounts_window.ui.h:16 msgid "" "Check this so Gajim will ask you before sending your password over an " "insecure connection." @@ -249,50 +260,52 @@ msgstr "" "Cochez cette case pour que Gajim vous demande avant d'envoyer votre mot de " "passe via une connexion non-sécurisée" -#: ../data/gui/accounts_window.ui.h:15 -msgid "Choose Client Cert" -msgstr "Choisissez le certificat client" - -#: ../data/gui/accounts_window.ui.h:16 +#: ../data/gui/accounts_window.ui.h:17 msgid "Choose _Key..." msgstr "Choisissez une _clé..." -#: ../data/gui/accounts_window.ui.h:17 +#: ../data/gui/accounts_window.ui.h:18 msgid "Click to change account's password" msgstr "Cliquez pour changer le mot de passe du compte" -#: ../data/gui/accounts_window.ui.h:18 +#: ../data/gui/accounts_window.ui.h:19 msgid "Click to request authorization to all contacts of another account" msgstr "" "Cliquez pour demander l'autorisation à tous les contacts d'un autre compte" -#: ../data/gui/accounts_window.ui.h:19 +#: ../data/gui/accounts_window.ui.h:20 msgid "Client certificate" msgstr "Certificat client" -#: ../data/gui/accounts_window.ui.h:20 +#: ../data/gui/accounts_window.ui.h:21 msgid "Co_nnect on Gajim startup" msgstr "C_onnexion au démarrage de Gajim" -#: ../data/gui/accounts_window.ui.h:21 +#: ../data/gui/accounts_window.ui.h:22 msgid "Connection" msgstr "Connexion" -#: ../data/gui/accounts_window.ui.h:22 +#. Change label for accept_button to action name instead of 'OK'. +#: ../data/gui/accounts_window.ui.h:23 ../src/dialogs.py:3391 +#: ../src/dialogs.py:3488 +msgid "Delete" +msgstr "Supprimer" + +#: ../data/gui/accounts_window.ui.h:24 #: ../data/gui/zeroconf_information_window.ui.h:2 msgid "E-Mail:" msgstr "Courriel :" -#: ../data/gui/accounts_window.ui.h:23 +#: ../data/gui/accounts_window.ui.h:25 #: ../data/gui/zeroconf_information_window.ui.h:3 msgid "First Name:" msgstr "Prénom :" #. No configured account -#: ../data/gui/accounts_window.ui.h:24 ../data/gui/roster_window.ui.h:5 -#: ../src/common/helpers.py:1148 ../src/common/helpers.py:1160 -#: ../src/notify.py:474 ../src/notify.py:497 ../src/notify.py:546 -#: ../src/notify.py:562 +#: ../data/gui/accounts_window.ui.h:26 ../data/gui/roster_window.ui.h:5 +#: ../src/common/helpers.py:1168 ../src/common/helpers.py:1180 +#: ../src/notify.py:314 ../src/notify.py:337 ../src/notify.py:387 +#: ../src/notify.py:403 msgid "Gajim" msgstr "Gajim" @@ -300,13 +313,14 @@ msgstr "Gajim" #. FIXME: Ugly workaround. #. Maybe we haven't been in any group (defaults to General) #. General group cannot be changed -#: ../data/gui/accounts_window.ui.h:25 ../data/gui/preferences_window.ui.h:56 -#: ../src/common/contacts.py:141 ../src/dialogs.py:112 ../src/dialogs.py:124 -#: ../src/roster_window.py:3038 ../src/roster_window.py:5643 +#: ../data/gui/accounts_window.ui.h:27 ../data/gui/preferences_window.ui.h:57 +#: ../src/common/contacts.py:132 ../src/dialogs.py:112 ../src/dialogs.py:124 +#: ../src/roster_window.py:3075 ../src/roster_window.py:4142 +#: ../src/roster_window.py:5732 msgid "General" msgstr "Général" -#: ../data/gui/accounts_window.ui.h:26 +#: ../data/gui/accounts_window.ui.h:28 msgid "" "If checked, Gajim will also broadcast some more IPs except from just your " "IP, so file transfer has higher chances of working." @@ -314,13 +328,13 @@ msgstr "" "Si cette case est cochée, Gajim va diffuser des adresses IP en plus de la " "vôtre, les transferts de fichiers ont ainsi plus de chance de fonctionner." -#: ../data/gui/accounts_window.ui.h:27 +#: ../data/gui/accounts_window.ui.h:29 msgid "If checked, Gajim will get the password from a GPG agent like seahorse" msgstr "" "Si cette case est cochée, Gajim obtiendra le mot de passe depuis un agent " "GPG comme seahorse" -#: ../data/gui/accounts_window.ui.h:29 +#: ../data/gui/accounts_window.ui.h:31 msgid "" "If checked, Gajim will send keep-alive packets to prevent connection timeout " "which results in disconnection" @@ -328,7 +342,7 @@ msgstr "" "Si coché, Gajim enverra des paquets de maintien de connection pour prévenir " "des temps de latence pouvant entraîner des déconnexions" -#: ../data/gui/accounts_window.ui.h:30 +#: ../data/gui/accounts_window.ui.h:32 msgid "" "If checked, Gajim, when launched, will automatically connect to jabber using " "this account" @@ -336,7 +350,7 @@ msgstr "" "Si cette case est cochée, au démarrage, Gajim se connectera automatiquement " "à jabber en utilisant ce compte" -#: ../data/gui/accounts_window.ui.h:31 +#: ../data/gui/accounts_window.ui.h:33 msgid "" "If checked, any change to the global status (handled by the combobox at the " "bottom of the roster window) will change the status of this account " @@ -346,7 +360,7 @@ msgstr "" "l'aide du bouton en bas de la fenêtre principale) sera répercutée sur l'état " "de ce compte" -#: ../data/gui/accounts_window.ui.h:32 +#: ../data/gui/accounts_window.ui.h:34 msgid "" "If the default port that is used for incoming messages is unfitting for your " "setup you can select another one here.\n" @@ -357,39 +371,39 @@ msgstr "" "Vous devriez considérer modifier les paramètres de votre pare-feu si vous en " "avez un." -#: ../data/gui/accounts_window.ui.h:34 +#: ../data/gui/accounts_window.ui.h:36 msgid "Information about you, as stored in the server" msgstr "Les informations vous concernant, stockées sur le serveur" -#: ../data/gui/accounts_window.ui.h:35 -#: ../data/gui/zeroconf_information_window.ui.h:4 ../src/config.py:1826 +#: ../data/gui/accounts_window.ui.h:37 +#: ../data/gui/zeroconf_information_window.ui.h:4 ../src/config.py:1869 #: ../src/dialogs.py:837 msgid "Jabber ID:" msgstr "Identifiant Jabber :" -#: ../data/gui/accounts_window.ui.h:36 +#: ../data/gui/accounts_window.ui.h:38 #: ../data/gui/zeroconf_information_window.ui.h:5 msgid "Last Name:" msgstr "Nom :" -#: ../data/gui/accounts_window.ui.h:37 +#: ../data/gui/accounts_window.ui.h:39 msgid "Mer_ge accounts" msgstr "_Regrouper les comptes" -#: ../data/gui/accounts_window.ui.h:38 ../src/config.py:1799 -#: ../src/config.py:2367 +#: ../data/gui/accounts_window.ui.h:40 ../src/config.py:1842 +#: ../src/config.py:2420 msgid "No key selected" msgstr "Pas de clé sélectionnée" -#: ../data/gui/accounts_window.ui.h:40 ../data/gui/profile_window.ui.h:35 +#: ../data/gui/accounts_window.ui.h:42 ../data/gui/profile_window.ui.h:35 msgid "Personal Information" msgstr "Informations personnelles" -#: ../data/gui/accounts_window.ui.h:41 +#: ../data/gui/accounts_window.ui.h:43 msgid "Priori_ty:" msgstr "Priori_té :" -#: ../data/gui/accounts_window.ui.h:42 +#: ../data/gui/accounts_window.ui.h:44 msgid "" "Priority is used in Jabber to determine who gets the events from the jabber " "server when two or more clients are connected using the same account; The " @@ -399,20 +413,20 @@ msgstr "" "événements du serveur quand plusieurs clients sont connectés avec le même " "compte. Le client ayant la plus haute priorité recevra les messages" -#: ../data/gui/accounts_window.ui.h:43 +#: ../data/gui/accounts_window.ui.h:45 msgid "Priority will change automatically according to your status." msgstr "La priorité va changer automatiquement selon votre état." #. Rename -#: ../data/gui/accounts_window.ui.h:44 ../src/roster_window.py:5593 +#: ../data/gui/accounts_window.ui.h:46 ../src/roster_window.py:5682 msgid "Re_name" msgstr "Re_nommer" -#: ../data/gui/accounts_window.ui.h:45 +#: ../data/gui/accounts_window.ui.h:47 msgid "Resour_ce:" msgstr "Ressour_ce: " -#: ../data/gui/accounts_window.ui.h:46 +#: ../data/gui/accounts_window.ui.h:48 msgid "" "Resource is sent to the Jabber server in order to separate the same JID in " "two or more parts depending on the number of the clients connected in the " @@ -426,77 +440,72 @@ msgstr "" "en même temps. La ressource avec la plus haute priorité recevra les messages " "(voir plus bas)." -#: ../data/gui/accounts_window.ui.h:47 +#: ../data/gui/accounts_window.ui.h:49 msgid "Save conversation _logs for all contacts" msgstr "Garder l'_historique des conversations pour tous les contacts" -#: ../data/gui/accounts_window.ui.h:49 +#: ../data/gui/accounts_window.ui.h:51 msgid "Send _keep-alive packets" msgstr "Envoi des pa_quets de maintien de connexion" -#: ../data/gui/accounts_window.ui.h:50 +#: ../data/gui/accounts_window.ui.h:52 msgid "Synch_ronize account status with global status" msgstr "S_ynchroniser l'état du compte avec l'état global" -#: ../data/gui/accounts_window.ui.h:51 +#: ../data/gui/accounts_window.ui.h:53 msgid "Synchroni_ze account status with global status" msgstr "S_ynchroniser l'état du compte avec l'état global" -#: ../data/gui/accounts_window.ui.h:52 -#: ../data/gui/synchronise_select_account_dialog.ui.h:2 -msgid "Synchronise contacts" +#: ../data/gui/accounts_window.ui.h:54 +msgid "Synchronize contacts" msgstr "Synchroniser les contacts" -#: ../data/gui/accounts_window.ui.h:53 -msgid "The path to the client certificate and key in PKCS#12 format" -msgstr "Chemin vers le certificat client et la clé au format PKCS#12" - -#: ../data/gui/accounts_window.ui.h:54 +#: ../data/gui/accounts_window.ui.h:55 msgid "Use G_PG Agent" msgstr "Utiliser un Agent G_PG" -#: ../data/gui/accounts_window.ui.h:55 +#: ../data/gui/accounts_window.ui.h:56 msgid "Use cust_om hostname/port" msgstr "Utiliser un nom d'hôte/port personnalisé" -#: ../data/gui/accounts_window.ui.h:56 +#: ../data/gui/accounts_window.ui.h:57 msgid "Use cust_om port:" msgstr "Utiliser un port pers_onnalisé :" -#: ../data/gui/accounts_window.ui.h:57 +#: ../data/gui/accounts_window.ui.h:58 msgid "Use file transfer proxies" msgstr "Utiliser les proxies pour les transferts de fichiers" -#: ../data/gui/accounts_window.ui.h:58 +#: ../data/gui/accounts_window.ui.h:59 msgid "_Client Cert File:" msgstr "Fichier du _certificat client:" -#: ../data/gui/accounts_window.ui.h:59 +#: ../data/gui/accounts_window.ui.h:60 msgid "_Edit Personal Information..." msgstr "_Éditer les informations personnelles…" #. XML Console enable checkbutton -#: ../data/gui/accounts_window.ui.h:60 ../data/gui/xml_console_window.ui.h:11 +#: ../data/gui/accounts_window.ui.h:61 ../data/gui/xml_console_window.ui.h:11 msgid "_Enable" msgstr "Activ_er" -#: ../data/gui/accounts_window.ui.h:61 +#: ../data/gui/accounts_window.ui.h:62 msgid "_Hostname: " msgstr "Nom d'_Hôte :" -#: ../data/gui/accounts_window.ui.h:63 +#: ../data/gui/accounts_window.ui.h:64 ../data/gui/preferences_window.ui.h:133 msgid "_Manage..." msgstr "_Gérer..." -#: ../data/gui/accounts_window.ui.h:65 +#: ../data/gui/accounts_window.ui.h:66 msgid "_Port: " msgstr "_Port :" -#: ../data/gui/accounts_window.ui.h:66 +#: ../data/gui/accounts_window.ui.h:67 msgid "_Warn before using an insecure connection" msgstr "_Prévenir avant d'utiliser une connexion non sécurisée" -#: ../data/gui/accounts_window.ui.h:67 +#: ../data/gui/accounts_window.ui.h:68 msgid "_use HTTP__PROXY environment variable" msgstr "_utiliser la variable d'environnement HTTP__PROXY" @@ -512,7 +521,7 @@ msgstr "_Autoriser ce contact à voir mon état" msgid "Add New Contact" msgstr "Ajouter un nouveau contact" -#: ../data/gui/add_new_contact_window.ui.h:4 ../src/common/helpers.py:1339 +#: ../data/gui/add_new_contact_window.ui.h:4 ../src/common/helpers.py:1359 msgid "I would like to add you to my contact list." msgstr "Je souhaiterais vous ajouter à ma liste de contacts." @@ -569,7 +578,8 @@ msgstr "<b>Une erreur est survenue :</b>" msgid "<b>Choose command to execute:</b>" msgstr "<b>Commande à exécuter :</b>" -#: ../data/gui/adhoc_commands_window.ui.h:3 +#. displaying the window +#: ../data/gui/adhoc_commands_window.ui.h:3 ../src/adhoc_commands.py:102 msgid "Ad-hoc Commands - Gajim" msgstr "Commandes Ad-hoc - Gajim" @@ -682,9 +692,8 @@ msgid "<i>Method Manual</i>" msgstr "<i>Méthode manuelle</i>" #: ../data/gui/archiving_preferences_window.ui.h:4 -#, fuzzy msgid "Auto" -msgstr "Rejoindre automatiquement" +msgstr "Auto" #: ../data/gui/archiving_preferences_window.ui.h:5 msgid "Concede" @@ -699,9 +708,8 @@ msgid "No" msgstr "Non" #: ../data/gui/archiving_preferences_window.ui.h:8 -#, fuzzy msgid "Prefer" -msgstr "Préférences" +msgstr "Préfère" #: ../data/gui/archiving_preferences_window.ui.h:9 msgid "Yes" @@ -733,8 +741,8 @@ msgstr "Contacts Bloqués" #: ../data/gui/blocked_contacts_window.ui.h:2 #: ../data/gui/contact_context_menu.ui.h:25 -#: ../data/gui/gc_occupants_menu.ui.h:14 ../src/roster_window.py:5612 -#: ../src/roster_window.py:5739 ../src/roster_window.py:5872 +#: ../data/gui/gc_occupants_menu.ui.h:14 ../src/roster_window.py:5701 +#: ../src/roster_window.py:5828 ../src/roster_window.py:5961 msgid "_Unblock" msgstr "_Débloquer" @@ -795,7 +803,7 @@ msgid "Join _Group Chat" msgstr "Rejoindre un _salon de discussion" #: ../data/gui/chat_context_menu.ui.h:2 -#: ../data/gui/contact_context_menu.ui.h:16 +#: ../data/gui/contact_context_menu.ui.h:17 msgid "_Add to Roster..." msgstr "_Ajouter à la liste de contacts..." @@ -898,23 +906,21 @@ msgid "Show the contact's profile (Ctrl+I)" msgstr "Afficher le profil du contact (Ctrl+I)" #: ../data/gui/chat_control.ui.h:20 +#: ../src/command_system/implementation/standard.py:214 msgid "Toggle audio session" msgstr "Démarrer/arrêter une session audio" #: ../data/gui/chat_control.ui.h:21 +#: ../src/command_system/implementation/standard.py:224 msgid "Toggle video session" msgstr "Démarrer/arrêter une session vidéo" #. Make sure the character after "_" is not M/m (conflicts with Alt+M that is supposed to show the Emoticon Selector) #: ../data/gui/chat_control.ui.h:23 ../data/gui/groupchat_control.ui.h:9 -#: ../data/gui/xml_console_window.ui.h:16 ../src/filetransfers_window.py:275 +#: ../data/gui/xml_console_window.ui.h:16 ../src/filetransfers_window.py:277 msgid "_Send" msgstr "En_voyer" -#: ../data/gui/chat_control.ui.h:24 ../data/gui/groupchat_control.ui.h:10 -msgid "label" -msgstr "" - #: ../data/gui/chat_to_muc_window.ui.h:1 msgid "In_vite" msgstr "In_viter" @@ -962,8 +968,8 @@ msgstr "Éditer les _groupes..." #. Invite to #. Invite to Groupchat #: ../data/gui/contact_context_menu.ui.h:6 -#: ../data/gui/gc_occupants_menu.ui.h:1 ../src/roster_window.py:5548 -#: ../src/roster_window.py:5707 +#: ../data/gui/gc_occupants_menu.ui.h:1 ../src/roster_window.py:5637 +#: ../src/roster_window.py:5796 msgid "In_vite to" msgstr "In_viter à" @@ -972,67 +978,67 @@ msgid "Invite _Contacts" msgstr "Inviter des _Contacts" #: ../data/gui/contact_context_menu.ui.h:8 +msgid "M_anage Contact" +msgstr "_Gérer le Contact" + +#: ../data/gui/contact_context_menu.ui.h:9 msgid "Remo_ve" msgstr "Suppri_mer" -#: ../data/gui/contact_context_menu.ui.h:9 ../src/roster_window.py:5558 -#: ../src/roster_window.py:5796 +#: ../data/gui/contact_context_menu.ui.h:10 ../src/roster_window.py:5647 +#: ../src/roster_window.py:5885 msgid "Send Cus_tom Status" msgstr "Envoyer un Statut Personnalisé" -#: ../data/gui/contact_context_menu.ui.h:10 ../data/gui/roster_window.ui.h:10 +#: ../data/gui/contact_context_menu.ui.h:11 ../data/gui/roster_window.ui.h:10 msgid "Send Single _Message..." msgstr "Envoyer un _message simple..." -#: ../data/gui/contact_context_menu.ui.h:11 +#: ../data/gui/contact_context_menu.ui.h:12 msgid "Send _File..." msgstr "Envoyer un _fichier..." -#: ../data/gui/contact_context_menu.ui.h:12 +#: ../data/gui/contact_context_menu.ui.h:13 msgid "Set Custom _Avatar..." msgstr "Définir un _Avatar personnalisé..." -#: ../data/gui/contact_context_menu.ui.h:13 +#: ../data/gui/contact_context_menu.ui.h:14 msgid "Start _Chat" msgstr "Commencer une _discussion" -#: ../data/gui/contact_context_menu.ui.h:14 +#: ../data/gui/contact_context_menu.ui.h:15 msgid "Toggle End to End Encryption" msgstr "Activer le chiffrement de bout en bout" -#: ../data/gui/contact_context_menu.ui.h:15 +#: ../data/gui/contact_context_menu.ui.h:16 msgid "Toggle Open_PGP Encryption" msgstr "Activer le chiffrement _GPG" -#: ../data/gui/contact_context_menu.ui.h:17 +#: ../data/gui/contact_context_menu.ui.h:18 msgid "_Allow him/her to see my status" msgstr "L'autoriser à voir mon état" -#: ../data/gui/contact_context_menu.ui.h:18 -#: ../data/gui/gc_occupants_menu.ui.h:8 ../src/roster_window.py:5620 -#: ../src/roster_window.py:5745 ../src/roster_window.py:5875 +#: ../data/gui/contact_context_menu.ui.h:19 +#: ../data/gui/gc_occupants_menu.ui.h:8 ../src/roster_window.py:5709 +#: ../src/roster_window.py:5834 ../src/roster_window.py:5964 msgid "_Block" msgstr "_Bloquer" -#: ../data/gui/contact_context_menu.ui.h:19 +#: ../data/gui/contact_context_menu.ui.h:20 msgid "_Forbid him/her to see my status" msgstr "Interdire de voir mon état" -#: ../data/gui/contact_context_menu.ui.h:20 +#: ../data/gui/contact_context_menu.ui.h:21 #: ../data/gui/gc_control_popup_menu.ui.h:6 -#: ../data/gui/gc_occupants_menu.ui.h:9 ../data/gui/roster_window.ui.h:24 -#: ../src/roster_window.py:5946 +#: ../data/gui/gc_occupants_menu.ui.h:9 ../data/gui/roster_window.ui.h:23 +#: ../src/roster_window.py:6035 msgid "_History" msgstr "_Historique" -#: ../data/gui/contact_context_menu.ui.h:21 +#: ../data/gui/contact_context_menu.ui.h:22 msgid "_Ignore" msgstr "_Ignorer" -#: ../data/gui/contact_context_menu.ui.h:22 -msgid "_Manage Contact" -msgstr "_Gérer le Contact" - #: ../data/gui/contact_context_menu.ui.h:23 msgid "_Rename..." msgstr "_Renommer..." @@ -1129,7 +1135,7 @@ msgstr "" "Quand le transfert de fichier est terminé, montrer une fenêtre de " "notification" -#: ../data/gui/filetransfers.ui.h:13 ../src/filetransfers_window.py:798 +#: ../data/gui/filetransfers.ui.h:13 ../src/filetransfers_window.py:808 msgid "_Continue" msgstr "_Continuer" @@ -1137,7 +1143,8 @@ msgstr "_Continuer" msgid "_Notify me when a file transfer is complete" msgstr "Me _signaler quand un transfert de fichier est terminé" -#: ../data/gui/filetransfers.ui.h:15 ../src/filetransfers_window.py:205 +#: ../data/gui/filetransfers.ui.h:15 ../src/chat_control.py:3236 +#: ../src/filetransfers_window.py:206 msgid "_Open Containing Folder" msgstr "_Ouvrir le répertoire de destination" @@ -1157,13 +1164,13 @@ msgstr "<b>Couleurs des Onglets</b>" msgid "Account row" msgstr "Ligne de compte" -#: ../data/gui/gajim_themes_window.ui.h:3 ../src/chat_control.py:1029 +#: ../data/gui/gajim_themes_window.ui.h:3 ../src/chat_control.py:1040 msgid "Bold" msgstr "Gras" #: ../data/gui/gajim_themes_window.ui.h:4 msgid "Chat Banner" -msgstr "" +msgstr "Bannière" #: ../data/gui/gajim_themes_window.ui.h:5 msgid "Composing" @@ -1193,7 +1200,7 @@ msgstr "Ligne de groupe" msgid "Inactive" msgstr "Inactif" -#: ../data/gui/gajim_themes_window.ui.h:12 ../src/chat_control.py:1030 +#: ../data/gui/gajim_themes_window.ui.h:12 ../src/chat_control.py:1041 msgid "Italic" msgstr "Italique" @@ -1259,9 +1266,8 @@ msgid "_Minimize on close" msgstr "_Minimiser à la fermeture" #: ../data/gui/gc_control_popup_menu.ui.h:9 -#, fuzzy msgid "_Request Voice" -msgstr "_S'exprimer" +msgstr "_Demander la parole" #: ../data/gui/gc_occupants_menu.ui.h:2 msgid "Mo_derator" @@ -1380,7 +1386,7 @@ msgstr "_Rechercher dans la base de données" msgid "All Chat Histories" msgstr "Tous les historiques" -#: ../data/gui/history_window.ui.h:2 ../src/history_window.py:323 +#: ../data/gui/history_window.ui.h:2 ../src/history_window.py:324 msgid "Conversation History" msgstr "Historique de conversation" @@ -1397,13 +1403,21 @@ msgid "Search:" msgstr "Chercher :" #: ../data/gui/history_window.ui.h:6 +msgid "_In date search" +msgstr "Chercher à cette date" + +#: ../data/gui/history_window.ui.h:7 #: ../data/gui/zeroconf_information_window.ui.h:10 msgid "_Log conversation history" msgstr "_Historique de conversation" +#: ../data/gui/history_window.ui.h:8 +msgid "searching only in the selected day " +msgstr "cherche uniquement à la date sélectionnée " + #: ../data/gui/item_archiving_preferences_window.ui.h:1 msgid "approve" -msgstr "" +msgstr "approuver" #: ../data/gui/item_archiving_preferences_window.ui.h:2 msgid "body" @@ -1411,11 +1425,11 @@ msgstr "corps" #: ../data/gui/item_archiving_preferences_window.ui.h:3 msgid "concede" -msgstr "" +msgstr "concéder" #: ../data/gui/item_archiving_preferences_window.ui.h:4 msgid "expire" -msgstr "" +msgstr "expirer" #: ../data/gui/item_archiving_preferences_window.ui.h:5 msgid "false" @@ -1439,7 +1453,7 @@ msgstr "message" #: ../data/gui/item_archiving_preferences_window.ui.h:9 msgid "oppose" -msgstr "" +msgstr "opposer" #: ../data/gui/item_archiving_preferences_window.ui.h:10 msgid "otr" @@ -1447,11 +1461,11 @@ msgstr "otr" #: ../data/gui/item_archiving_preferences_window.ui.h:11 msgid "prefer" -msgstr "" +msgstr "préfère" #: ../data/gui/item_archiving_preferences_window.ui.h:12 msgid "require" -msgstr "" +msgstr "nécessite" #: ../data/gui/item_archiving_preferences_window.ui.h:13 msgid "save" @@ -1465,7 +1479,7 @@ msgstr "flux" msgid "Bro_wse Rooms" msgstr "_Parcourir les salons" -#: ../data/gui/join_groupchat_window.ui.h:3 ../src/dialogs.py:2298 +#: ../data/gui/join_groupchat_window.ui.h:3 ../src/dialogs.py:2337 msgid "Join Group Chat" msgstr "Rejoindre un salon de discussion" @@ -1489,7 +1503,7 @@ msgstr "Récemment :" msgid "Room:" msgstr "Salon de discussion :" -#: ../data/gui/join_groupchat_window.ui.h:9 ../src/config.py:1816 +#: ../data/gui/join_groupchat_window.ui.h:9 ../src/config.py:1859 msgid "Server:" msgstr "Serveur :" @@ -1515,21 +1529,20 @@ msgid "Manage Bookmarks" msgstr "Gérer les marque-pages" #: ../data/gui/manage_bookmarks_window.ui.h:4 -#, fuzzy msgid "Minimi_ze on Auto Join" -msgstr "Minimiser automatiquement" +msgstr "_Minimiser automatiquement" #: ../data/gui/manage_bookmarks_window.ui.h:5 msgid "Pr_int status:" -msgstr "Afficher l'état :" +msgstr "_Afficher l'état :" #: ../data/gui/manage_bookmarks_window.ui.h:6 msgid "Roo_m:" -msgstr "" +msgstr "_Salon:" #: ../data/gui/manage_bookmarks_window.ui.h:10 msgid "_Title:" -msgstr "Titre :" +msgstr "_Titre :" #: ../data/gui/manage_pep_services_window.ui.h:1 msgid "PEP Service Configuration" @@ -1616,34 +1629,26 @@ msgid "Authors:" msgstr "Auteurs :" #: ../data/gui/plugins_window.ui.h:4 -msgid "Available" -msgstr "Disponible" - -#: ../data/gui/plugins_window.ui.h:5 msgid "Configure" msgstr "Configurer" -#: ../data/gui/plugins_window.ui.h:6 +#: ../data/gui/plugins_window.ui.h:5 msgid "Description:" msgstr "Description :" -#: ../data/gui/plugins_window.ui.h:7 -msgid "Descrition:" -msgstr "Description :" - -#: ../data/gui/plugins_window.ui.h:8 +#: ../data/gui/plugins_window.ui.h:6 msgid "Homepage:" msgstr "Site perso :" -#: ../data/gui/plugins_window.ui.h:9 -msgid "Install" -msgstr "Installer" +#: ../data/gui/plugins_window.ui.h:7 +msgid "Install from zip" +msgstr "Installer d'un zip" -#: ../data/gui/plugins_window.ui.h:10 +#: ../data/gui/plugins_window.ui.h:8 msgid "Installed" msgstr "Installé" -#: ../data/gui/plugins_window.ui.h:11 +#: ../data/gui/plugins_window.ui.h:9 msgid "" "Plug-in decription should be displayed here. This text will be erased during " "PluginsWindow initialization." @@ -1651,32 +1656,27 @@ msgstr "" "La description du plugin doit se trouver ici. Ce teste sera effacé lors de " "l'initialisation de la fenêtre de plugins." -#: ../data/gui/plugins_window.ui.h:12 +#: ../data/gui/plugins_window.ui.h:10 msgid "Plugins" -msgstr "" +msgstr "Plugins" -#: ../data/gui/plugins_window.ui.h:13 +#: ../data/gui/plugins_window.ui.h:11 msgid "Uninstall" msgstr "Désintaller" -#: ../data/gui/plugins_window.ui.h:14 +#: ../data/gui/plugins_window.ui.h:12 msgid "Version:" msgstr "Version :" -#: ../data/gui/plugins_window.ui.h:15 -msgid "button" -msgstr "bouton" - -#: ../data/gui/plugins_window.ui.h:16 +#: ../data/gui/plugins_window.ui.h:13 msgid "homepage url" -msgstr "" +msgstr "url de la page d'accueil" #: ../data/gui/popup_notification_window.ui.h:1 msgid "Event Type" msgstr "Type d'événement" #: ../data/gui/popup_notification_window.ui.h:2 -#, fuzzy msgid "Event desc" msgstr "Événement" @@ -1759,133 +1759,137 @@ msgstr "<b>Notifications visuelles</b>" #: ../data/gui/preferences_window.ui.h:22 msgid "<i>(example: stunserver.org)</i>" -msgstr "<i>(exemple: stunserver.org)>/i>" +msgstr "<i>(exemple: stunserver.org)</i>" #: ../data/gui/preferences_window.ui.h:23 msgid "Advanced" msgstr "Avancées" #: ../data/gui/preferences_window.ui.h:24 -#, fuzzy msgid "All chat states" msgstr "Tous les états" #: ../data/gui/preferences_window.ui.h:25 -msgid "Allow _OS information to be sent" -msgstr "Envoyer des informations concernant votre _système d'exploitation" +msgid "Allow client / _OS information to be sent" +msgstr "" +"Envoyer des informations concernant votre client / _système d'exploitation" #: ../data/gui/preferences_window.ui.h:26 +msgid "Allow local system time information to be sent" +msgstr "Envoyer des informations concernant l'heure de votre système" + +#: ../data/gui/preferences_window.ui.h:27 msgid "Allow my _idle time to be sent" msgstr "Envoyer mon temps d'inactivité" -#: ../data/gui/preferences_window.ui.h:27 +#: ../data/gui/preferences_window.ui.h:28 msgid "Allow popup/notifications when I'm _away/na/busy/invisible" msgstr "" "Autoriser les _notifications lorsque je suis absent(e)/indisponible/occupé" "(e)/invisible" -#: ../data/gui/preferences_window.ui.h:28 +#: ../data/gui/preferences_window.ui.h:29 msgid "Allow sound when I'm _busy" msgstr "Autoriser les sons quand je suis _occupé(e)" -#: ../data/gui/preferences_window.ui.h:29 +#: ../data/gui/preferences_window.ui.h:30 msgid "Always" msgstr "Toujours" -#: ../data/gui/preferences_window.ui.h:30 +#: ../data/gui/preferences_window.ui.h:31 msgid "Ask status message when I:" msgstr "Demander le message d'état lorsque je me : " -#: ../data/gui/preferences_window.ui.h:31 ../src/features_window.py:106 +#: ../data/gui/preferences_window.ui.h:32 ../src/features_window.py:106 msgid "Audio / Video" msgstr "Audio / Vidéo" -#: ../data/gui/preferences_window.ui.h:32 +#: ../data/gui/preferences_window.ui.h:33 msgid "Audio input device" msgstr "Périphérique audio d'entrée" -#: ../data/gui/preferences_window.ui.h:33 +#: ../data/gui/preferences_window.ui.h:34 msgid "Audio output device" msgstr "Périphérique audio de sortie" -#: ../data/gui/preferences_window.ui.h:34 +#: ../data/gui/preferences_window.ui.h:35 msgid "Chat message:" msgstr "Message de conversation :" -#: ../data/gui/preferences_window.ui.h:35 +#: ../data/gui/preferences_window.ui.h:36 msgid "Check on startup if Gajim is the _default Jabber client" msgstr "Vérifier que Gajim est le client Jabber par _défaut au démarrage" -#: ../data/gui/preferences_window.ui.h:36 +#: ../data/gui/preferences_window.ui.h:37 msgid "Composing only" msgstr "Seulement en train d'écrire" -#: ../data/gui/preferences_window.ui.h:37 +#: ../data/gui/preferences_window.ui.h:38 msgid "Configure color and font of the interface" msgstr "Paramétrer la couleur et la police de texte de l'interface" -#: ../data/gui/preferences_window.ui.h:38 +#: ../data/gui/preferences_window.ui.h:39 msgid "Contact's message:" msgstr "Le message du contact :" -#: ../data/gui/preferences_window.ui.h:39 +#: ../data/gui/preferences_window.ui.h:40 msgid "Contact's nickname:" msgstr "Le pseudo du contact :" -#: ../data/gui/preferences_window.ui.h:40 +#: ../data/gui/preferences_window.ui.h:41 msgid "Custom" msgstr "Personnalisé" -#: ../data/gui/preferences_window.ui.h:41 +#: ../data/gui/preferences_window.ui.h:42 msgid "Detached roster with chat grouped by account" -msgstr "" +msgstr "Liste des contacts détachée avec conversations groupées par compte" -#: ../data/gui/preferences_window.ui.h:42 +#: ../data/gui/preferences_window.ui.h:43 msgid "Detached roster with chat grouped by type" -msgstr "" +msgstr "Liste des contacts détachée avec conversations groupées par type" -#: ../data/gui/preferences_window.ui.h:43 +#: ../data/gui/preferences_window.ui.h:44 msgid "Detached roster with detached chats" -msgstr "" +msgstr "Liste des contacts détachée avec conversations détachéee" -#: ../data/gui/preferences_window.ui.h:44 +#: ../data/gui/preferences_window.ui.h:45 msgid "Detached roster with single chat" -msgstr "" +msgstr "Liste des contacts détachée avec conversations groupées" -#: ../data/gui/preferences_window.ui.h:45 ../src/config.py:170 -#: ../src/config.py:672 +#: ../data/gui/preferences_window.ui.h:46 ../src/config.py:171 +#: ../src/config.py:683 msgid "Disabled" msgstr "Désactivé" -#: ../data/gui/preferences_window.ui.h:46 +#: ../data/gui/preferences_window.ui.h:47 msgid "Display _activity of contacts in roster" msgstr "Afficher l'_activité des contacts dans la liste des contacts" -#: ../data/gui/preferences_window.ui.h:47 +#: ../data/gui/preferences_window.ui.h:48 msgid "Display _extra email details" msgstr "Afficher des informations détaillées de courriels" -#: ../data/gui/preferences_window.ui.h:48 +#: ../data/gui/preferences_window.ui.h:49 msgid "Display _location of contacts in roster" msgstr "Afficher la localisation des contacts dans la liste" -#: ../data/gui/preferences_window.ui.h:49 +#: ../data/gui/preferences_window.ui.h:50 msgid "Display _tunes of contacts in roster" msgstr "Afficher ce que mes contacts écoutent" -#: ../data/gui/preferences_window.ui.h:50 +#: ../data/gui/preferences_window.ui.h:51 msgid "Display a_vatars of contacts in roster" msgstr "Afficher l'a_vatar des contacts dans la liste des contacts" -#: ../data/gui/preferences_window.ui.h:51 +#: ../data/gui/preferences_window.ui.h:52 msgid "Display m_ood of contacts in roster" msgstr "Afficher l'humeur des contacts dans la liste des contacts" -#: ../data/gui/preferences_window.ui.h:52 +#: ../data/gui/preferences_window.ui.h:53 msgid "Display status _messages of contacts in roster" msgstr "Afficher les _messages d'état des contacts dans la liste des contacts" -#: ../data/gui/preferences_window.ui.h:53 +#: ../data/gui/preferences_window.ui.h:54 msgid "" "Gajim can send and receive meta-information related to a conversation you " "may have with a contact. Here you can specify which chatstates you want to " @@ -1895,7 +1899,7 @@ msgstr "" "conversations que vous pouvez avoir avec un contact. Vous pouvez ici " "spécifier quels états de conversation vous voulez envoyer à vos contacts." -#: ../data/gui/preferences_window.ui.h:54 +#: ../data/gui/preferences_window.ui.h:55 msgid "" "Gajim can send and receive meta-information related to a conversation you " "may have with a contact. Here you can specify which chatstates you want to " @@ -1905,7 +1909,7 @@ msgstr "" "conversations que vous pouvez avoir avec un contact. Vous pouvez ici " "spécifier quel état de conversation vous voulez envoyer à vos contacts." -#: ../data/gui/preferences_window.ui.h:55 +#: ../data/gui/preferences_window.ui.h:56 msgid "" "Gajim will notify you via a popup window in the bottom right of the screen " "about contacts that just signed out" @@ -1913,11 +1917,15 @@ msgstr "" "Gajim vous signalera par une fenêtre de notification en bas à droite de " "l'écran qu'un contact s'est déconnecté" -#: ../data/gui/preferences_window.ui.h:57 +#: ../data/gui/preferences_window.ui.h:58 +msgid "Global proxy:" +msgstr "Proxy global :" + +#: ../data/gui/preferences_window.ui.h:59 msgid "Hide all buttons in chat windows" msgstr "Cacher tous les boutons dans les fenêtres de conversations" -#: ../data/gui/preferences_window.ui.h:58 +#: ../data/gui/preferences_window.ui.h:60 msgid "" "If checked, Gajim will allow others to detect the operation system you are " "using" @@ -1925,7 +1933,13 @@ msgstr "" "Si cette case est cochée, Gajim autorisera les autres à détecter le système " "d'exploitation que vous utilisez" -#: ../data/gui/preferences_window.ui.h:59 +#: ../data/gui/preferences_window.ui.h:61 +msgid "If checked, Gajim will allow others to detect the time on your system" +msgstr "" +"Si cette case est cochée, Gajim autorisera les autres à détecter l'heure de " +"votre système" + +#: ../data/gui/preferences_window.ui.h:62 msgid "" "If checked, Gajim will also include information about the sender of the new " "emails" @@ -1933,14 +1947,14 @@ msgstr "" "Si cette case est cochée, Gajim affichera également des informations à " "propos de l'expéditeur des nouveaux courriels" -#: ../data/gui/preferences_window.ui.h:60 +#: ../data/gui/preferences_window.ui.h:63 msgid "" "If checked, Gajim will change status to Away when the computer is unused." msgstr "" "Si cette case est cochée, Gajim changera votre statut en Absent(e) quand " "l'ordinateur est inutilisé." -#: ../data/gui/preferences_window.ui.h:61 +#: ../data/gui/preferences_window.ui.h:64 msgid "" "If checked, Gajim will change status to Not Available when the computer has " "not been used even longer" @@ -1948,7 +1962,7 @@ msgstr "" "Si cette case est cochée, Gajim changera votre statut en Non disponible " "quand l'ordinateur n'a pas été utilisé pendant une plus longue période" -#: ../data/gui/preferences_window.ui.h:62 +#: ../data/gui/preferences_window.ui.h:65 msgid "" "If checked, Gajim will display avatars of contacts in roster window and in " "group chats" @@ -1956,7 +1970,7 @@ msgstr "" "Si cette case est cochée, Gajim affichera l'avatar de chaque contact dans la " "fenêtre principale et les salons" -#: ../data/gui/preferences_window.ui.h:63 +#: ../data/gui/preferences_window.ui.h:66 msgid "" "If checked, Gajim will display status messages of contacts under the contact " "name in roster window and in group chats" @@ -1964,35 +1978,35 @@ msgstr "" "Si cette case est cochée, Gajim affichera le message d'état, sous le nom de " "chaque contact dans la fenêtre principale et les salons" -#: ../data/gui/preferences_window.ui.h:64 +#: ../data/gui/preferences_window.ui.h:67 msgid "" "If checked, Gajim will display the activity of contacts in the roster window" msgstr "" "Si cette case est cochée, Gajim affichera l'activité des contacts dans votre " "liste des contacts" -#: ../data/gui/preferences_window.ui.h:65 +#: ../data/gui/preferences_window.ui.h:68 msgid "" "If checked, Gajim will display the location of contacts in the roster window" msgstr "" "Si cette case est cochée, Gajim affichera la localisation de chaque contact " "dans votre liste de contacts" -#: ../data/gui/preferences_window.ui.h:66 +#: ../data/gui/preferences_window.ui.h:69 msgid "" "If checked, Gajim will display the mood of contacts in the roster window" msgstr "" "Si cette case est cochée, Gajim affichera l'humeur de chaque contact dans " "votre roster" -#: ../data/gui/preferences_window.ui.h:67 +#: ../data/gui/preferences_window.ui.h:70 msgid "" "If checked, Gajim will display the tunes of contacts in the roster window" msgstr "" "Si cette case est cochée, Gajim affichera ce que chaque contact écoute dans " "votre roster" -#: ../data/gui/preferences_window.ui.h:68 +#: ../data/gui/preferences_window.ui.h:71 msgid "" "If checked, Gajim will highlight spelling errors in input fields of chat " "windows. If no language is explicitly set via right click on the input " @@ -2003,7 +2017,7 @@ msgstr "" "définie explicitement par clique droit sur le champ de saisie, la langue par " "défaut sera utilisée pour ce contact ou ce salon." -#: ../data/gui/preferences_window.ui.h:69 +#: ../data/gui/preferences_window.ui.h:72 msgid "" "If checked, Gajim will ignore incoming events from unauthorized contacts. " "Use with caution, because it blocks all messages from any contact that is " @@ -2013,7 +2027,7 @@ msgstr "" "contacts non autorisés. Utilisez avec précaution car cela bloque tous les " "messages provenant des contacts qui ne sont pas dans votre liste" -#: ../data/gui/preferences_window.ui.h:70 +#: ../data/gui/preferences_window.ui.h:73 msgid "" "If checked, Gajim will keep logs for encrypted messages. Please note that " "when using E2E encryption the remote party has to agree on logging, else the " @@ -2023,7 +2037,7 @@ msgstr "" "Veuillez noter qu'en utilisant une encryption E2E, l'utilisateur distant " "doit l'accepter, sinon les messages ne seront pas archivés." -#: ../data/gui/preferences_window.ui.h:71 +#: ../data/gui/preferences_window.ui.h:74 msgid "" "If checked, Gajim will show a notification when a new e-mail is received via " "GMail" @@ -2031,7 +2045,7 @@ msgstr "" "Si cette case est cochée, Gajim affichera une notification quand un nouveau " "courriel GMail est reçu" -#: ../data/gui/preferences_window.ui.h:72 +#: ../data/gui/preferences_window.ui.h:75 msgid "" "If checked, Gajim will use protocol-specific status icons. (eg. A contact " "from MSN will have the equivalent msn icon for status online, away, busy, " @@ -2041,7 +2055,7 @@ msgstr "" "protocoles. (Par ex. un contact MSN aura les icônes de MSN pour les états " "disponible, absent(e), occupé(e), etc.)" -#: ../data/gui/preferences_window.ui.h:73 +#: ../data/gui/preferences_window.ui.h:76 msgid "" "If enabled, Gajim will not ask for a status message. The specified default " "message will be used instead." @@ -2049,7 +2063,7 @@ msgstr "" "Si cette case est cochée, Gajim ne demandera pas de message de statut. Le " "message par défaut sera utilisé à la place." -#: ../data/gui/preferences_window.ui.h:74 +#: ../data/gui/preferences_window.ui.h:77 msgid "" "If not disabled, Gajim will replace ascii smilies like ':)' with equivalent " "animated or static graphical emoticons" @@ -2057,67 +2071,67 @@ msgstr "" "Si cette case n'est pas décochée, Gajim va remplacer les émoticônes ASCII " "comme « :) » par un équivalent graphique statique ou dynamique" -#: ../data/gui/preferences_window.ui.h:75 +#: ../data/gui/preferences_window.ui.h:78 msgid "Last state" msgstr "Dernier état" -#: ../data/gui/preferences_window.ui.h:76 +#: ../data/gui/preferences_window.ui.h:79 msgid "Log _encrypted chat session" msgstr "Archiver les conversations _chiffrées" -#: ../data/gui/preferences_window.ui.h:77 +#: ../data/gui/preferences_window.ui.h:80 msgid "Ma_ke message windows compact" msgstr "Rendre les fenêtres de conversation _compactes" -#: ../data/gui/preferences_window.ui.h:78 +#: ../data/gui/preferences_window.ui.h:81 msgid "Ma_nage..." msgstr "_Gérer..." -#: ../data/gui/preferences_window.ui.h:79 +#: ../data/gui/preferences_window.ui.h:82 msgid "Never" msgstr "Jamais" -#: ../data/gui/preferences_window.ui.h:80 +#: ../data/gui/preferences_window.ui.h:83 msgid "Notifications" msgstr "Notifications" -#: ../data/gui/preferences_window.ui.h:81 +#: ../data/gui/preferences_window.ui.h:84 msgid "Notify me about contacts that sign _in" msgstr "Me signaler les contacts qui se _connectent" -#: ../data/gui/preferences_window.ui.h:82 +#: ../data/gui/preferences_window.ui.h:85 msgid "Notify me about contacts that sign _out" msgstr "Me signaler les contacts qui se _déconnectent" -#: ../data/gui/preferences_window.ui.h:83 +#: ../data/gui/preferences_window.ui.h:86 msgid "Notify me about it" msgstr "Me le signaler" -#: ../data/gui/preferences_window.ui.h:84 +#: ../data/gui/preferences_window.ui.h:87 msgid "Notify on new _GMail email" msgstr "M'avertir lors de l'arrivée d'un courrier électronique _Gmail" -#: ../data/gui/preferences_window.ui.h:85 +#: ../data/gui/preferences_window.ui.h:88 msgid "Only when pending events" msgstr "Seulement lorsqu'il y a des évènements en attente" -#: ../data/gui/preferences_window.ui.h:86 +#: ../data/gui/preferences_window.ui.h:89 msgid "Personal Events" msgstr "Événements Personnels" -#: ../data/gui/preferences_window.ui.h:87 +#: ../data/gui/preferences_window.ui.h:90 msgid "Play _sounds" msgstr "_Jouer les sons" -#: ../data/gui/preferences_window.ui.h:88 +#: ../data/gui/preferences_window.ui.h:91 msgid "Pop it up" msgstr "Faire surgir un pop up" -#: ../data/gui/preferences_window.ui.h:89 +#: ../data/gui/preferences_window.ui.h:92 msgid "Preferences" msgstr "Préférences" -#: ../data/gui/preferences_window.ui.h:90 +#: ../data/gui/preferences_window.ui.h:93 msgid "" "STUN server hostname. If none given, Gajim will try\n" "to discover one from server." @@ -2125,31 +2139,31 @@ msgstr "" "Nom d'hote du serveur STUN. Si rien n'est rempli, Gajim va tenter\n" " de le découvrir à partir du serveur." -#: ../data/gui/preferences_window.ui.h:92 +#: ../data/gui/preferences_window.ui.h:95 msgid "STUN server:" msgstr "Serveur STUN :" -#: ../data/gui/preferences_window.ui.h:93 +#: ../data/gui/preferences_window.ui.h:96 msgid "Show notification area icon:" msgstr "Montrer l'icone de la zone de notification :" -#: ../data/gui/preferences_window.ui.h:94 +#: ../data/gui/preferences_window.ui.h:97 msgid "Show only in roster" msgstr "Ne le montrer que dans la liste" -#: ../data/gui/preferences_window.ui.h:95 +#: ../data/gui/preferences_window.ui.h:98 msgid "Sign _in" msgstr "_connecte" -#: ../data/gui/preferences_window.ui.h:96 +#: ../data/gui/preferences_window.ui.h:99 msgid "Sign _out" msgstr "_déconnecte" -#: ../data/gui/preferences_window.ui.h:97 +#: ../data/gui/preferences_window.ui.h:100 msgid "Single window for everything" msgstr "Une seule fenêtre pour tout" -#: ../data/gui/preferences_window.ui.h:98 +#: ../data/gui/preferences_window.ui.h:101 msgid "" "Some messages may include rich content (formatting, colors etc). If checked, " "Gajim will just display the raw message text." @@ -2157,27 +2171,27 @@ msgstr "" "Certains messages peuvent contenir du texte complexe (formatage, couleurs, " "etc.). Si activé, Gajim l'affichera seulement en tant que texte non formaté. " -#: ../data/gui/preferences_window.ui.h:99 +#: ../data/gui/preferences_window.ui.h:102 msgid "Sort contacts by status" msgstr "Trier les contacts par état" -#: ../data/gui/preferences_window.ui.h:100 ../src/config.py:400 +#: ../data/gui/preferences_window.ui.h:103 ../src/config.py:401 msgid "Status" msgstr "État" -#: ../data/gui/preferences_window.ui.h:101 +#: ../data/gui/preferences_window.ui.h:104 msgid "Status _iconset:" msgstr "_Icônes d'état :" -#: ../data/gui/preferences_window.ui.h:102 +#: ../data/gui/preferences_window.ui.h:105 msgid "Style" msgstr "Style" -#: ../data/gui/preferences_window.ui.h:103 +#: ../data/gui/preferences_window.ui.h:106 msgid "T_heme:" msgstr "T_hème :" -#: ../data/gui/preferences_window.ui.h:104 +#: ../data/gui/preferences_window.ui.h:107 msgid "" "The auto away status message. If empty, Gajim will not change the current " "status message\n" @@ -2189,7 +2203,7 @@ msgstr "" "$S sera remplacé par l'ancien message de statut\n" "$T sera remplacé par le temps d'absence" -#: ../data/gui/preferences_window.ui.h:107 +#: ../data/gui/preferences_window.ui.h:110 msgid "" "The auto not available status message. If empty, Gajim will not change the " "current status message\n" @@ -2201,127 +2215,127 @@ msgstr "" "$S sera remplacé par l'ancien message de statut\n" "$T sera remplacé par le temps de non-activité" -#: ../data/gui/preferences_window.ui.h:110 +#: ../data/gui/preferences_window.ui.h:113 msgid "Use _transports icons" msgstr "Utiliser les icônes des passere_lles" -#: ../data/gui/preferences_window.ui.h:111 +#: ../data/gui/preferences_window.ui.h:114 msgid "Use default applications" msgstr "Toujours utiliser les applications par défaut." -#: ../data/gui/preferences_window.ui.h:112 +#: ../data/gui/preferences_window.ui.h:115 msgid "Use system _default" msgstr "Utiliser la valeur par _défaut" -#: ../data/gui/preferences_window.ui.h:113 +#: ../data/gui/preferences_window.ui.h:116 msgid "Video framerate" msgstr "Images par seconde" -#: ../data/gui/preferences_window.ui.h:114 +#: ../data/gui/preferences_window.ui.h:117 msgid "Video input device" msgstr "Périphérique d'entrée vidéo." -#: ../data/gui/preferences_window.ui.h:115 +#: ../data/gui/preferences_window.ui.h:118 msgid "Video output device" msgstr "Périphérique vidéo de sortie" -#: ../data/gui/preferences_window.ui.h:116 +#: ../data/gui/preferences_window.ui.h:119 msgid "Video size" msgstr "Taille de la vidéo" -#: ../data/gui/preferences_window.ui.h:117 +#: ../data/gui/preferences_window.ui.h:120 msgid "When new event is received:" msgstr "Quand un nouvel événement est reçu :" -#: ../data/gui/preferences_window.ui.h:118 +#: ../data/gui/preferences_window.ui.h:121 msgid "Your message:" msgstr "Votre message :" -#: ../data/gui/preferences_window.ui.h:119 +#: ../data/gui/preferences_window.ui.h:122 msgid "Your nickname:" msgstr "Votre pseudo :" -#: ../data/gui/preferences_window.ui.h:120 +#: ../data/gui/preferences_window.ui.h:123 msgid "_Away after:" msgstr "Passer _Absent(e) après :" -#: ../data/gui/preferences_window.ui.h:121 +#: ../data/gui/preferences_window.ui.h:124 msgid "_Browser:" msgstr "_Navigateur :" -#: ../data/gui/preferences_window.ui.h:122 +#: ../data/gui/preferences_window.ui.h:125 msgid "_Display chat state notifications:" msgstr "_Afficher les notifications d'état :" -#: ../data/gui/preferences_window.ui.h:123 +#: ../data/gui/preferences_window.ui.h:126 msgid "_Emoticons:" msgstr "É_moticônes :" -#: ../data/gui/preferences_window.ui.h:124 +#: ../data/gui/preferences_window.ui.h:127 msgid "_File manager:" msgstr "Gestionnaire de _fichiers :" -#: ../data/gui/preferences_window.ui.h:125 +#: ../data/gui/preferences_window.ui.h:128 msgid "_Highlight misspelled words" msgstr "_Souligner les fautes d'orthographe" -#: ../data/gui/preferences_window.ui.h:126 +#: ../data/gui/preferences_window.ui.h:129 msgid "_Ignore events from contacts not in the roster" msgstr "_Ignorer les messages des contacts qui ne sont pas dans votre liste" -#: ../data/gui/preferences_window.ui.h:127 +#: ../data/gui/preferences_window.ui.h:130 msgid "_Ignore rich content in incoming messages" msgstr "_Ignorer le formatage complexe du texte dans les messages entrants" -#: ../data/gui/preferences_window.ui.h:128 +#: ../data/gui/preferences_window.ui.h:131 msgid "_Log status changes of contacts" msgstr "Inscrire dans l'_historique les changements d'état des contacts" -#: ../data/gui/preferences_window.ui.h:129 +#: ../data/gui/preferences_window.ui.h:132 msgid "_Mail client:" msgstr "Logiciel de courriel :" -#: ../data/gui/preferences_window.ui.h:130 +#: ../data/gui/preferences_window.ui.h:134 msgid "_Not available after:" msgstr "Passer _indisponible après :" -#: ../data/gui/preferences_window.ui.h:131 +#: ../data/gui/preferences_window.ui.h:135 msgid "_Open..." msgstr "_Ouvrir..." -#: ../data/gui/preferences_window.ui.h:132 +#: ../data/gui/preferences_window.ui.h:136 msgid "_Reset to Default Colors" msgstr "Utilise_r les couleurs par défaut" -#: ../data/gui/preferences_window.ui.h:133 +#: ../data/gui/preferences_window.ui.h:137 msgid "_Send chat state notifications:" msgstr "_Envoyer les notifications d'état :" -#: ../data/gui/preferences_window.ui.h:134 +#: ../data/gui/preferences_window.ui.h:138 msgid "_Show roster on startup:" msgstr "Montrer la _liste au démarrage:" -#: ../data/gui/preferences_window.ui.h:135 +#: ../data/gui/preferences_window.ui.h:139 msgid "_Status message:" msgstr "Message d'état :" -#: ../data/gui/preferences_window.ui.h:136 +#: ../data/gui/preferences_window.ui.h:140 msgid "_URL highlight:" msgstr "Mise à valeur des _URL :" -#: ../data/gui/preferences_window.ui.h:137 +#: ../data/gui/preferences_window.ui.h:141 msgid "_Window behavior:" msgstr "Comportement de la _fenêtre :" -#: ../data/gui/preferences_window.ui.h:138 +#: ../data/gui/preferences_window.ui.h:142 msgid "in _group chats" msgstr "dans les _salons de discussion" -#: ../data/gui/preferences_window.ui.h:139 +#: ../data/gui/preferences_window.ui.h:143 msgid "in _roster" msgstr "dans le _roster" -#: ../data/gui/preferences_window.ui.h:140 +#: ../data/gui/preferences_window.ui.h:144 msgid "minutes" msgstr "minutes" @@ -2373,7 +2387,7 @@ msgstr "Identifiant Jabber :" msgid "Order:" msgstr "Ordre :" -#: ../data/gui/privacy_list_window.ui.h:12 ../src/dialogs.py:3936 +#: ../data/gui/privacy_list_window.ui.h:12 ../src/dialogs.py:3982 msgid "Privacy List" msgstr "Liste privée" @@ -2580,8 +2594,8 @@ msgstr "Supprimer le compte de Gajim et du _serveur" #. Remove group #. Remove -#: ../data/gui/remove_account_window.ui.h:4 ../src/roster_window.py:5630 -#: ../src/roster_window.py:5755 ../src/roster_window.py:5885 +#: ../data/gui/remove_account_window.ui.h:4 ../src/roster_window.py:5719 +#: ../src/roster_window.py:5844 ../src/roster_window.py:5974 msgid "_Remove" msgstr "_Supprimer" @@ -2628,7 +2642,7 @@ msgstr "Aide en ligne" #: ../data/gui/roster_window.ui.h:8 msgid "P_lugins" -msgstr "" +msgstr "P_lugins" #: ../data/gui/roster_window.ui.h:9 msgid "Profile, A_vatar" @@ -2639,49 +2653,44 @@ msgid "Show Only _Active Contacts" msgstr "Afficher seulement les contacts _Actifs" #: ../data/gui/roster_window.ui.h:12 -#, fuzzy -msgid "Show Roster Fi_lter" -msgstr "Montrer le filtre de _liste de contacts" +msgid "Show T_ransports" +msgstr "Afficher les _Passerelles" #: ../data/gui/roster_window.ui.h:13 -msgid "Show Trans_ports" -msgstr "Afficher les Passerelles" - -#: ../data/gui/roster_window.ui.h:14 msgid "Show _Offline Contacts" msgstr "Afficher les Contacts _déconnectés" -#: ../data/gui/roster_window.ui.h:15 ../src/statusicon.py:346 +#: ../data/gui/roster_window.ui.h:14 ../src/statusicon.py:346 msgid "Show _Roster" msgstr "Montrer la _liste de contacts" -#: ../data/gui/roster_window.ui.h:16 +#: ../data/gui/roster_window.ui.h:15 msgid "_Accounts" msgstr "_Comptes" #. Make sure the character after "_" is not M/m (conflicts with Alt+M that is supposed to show the Emoticon Selector) -#: ../data/gui/roster_window.ui.h:17 +#: ../data/gui/roster_window.ui.h:16 #: ../data/gui/subscription_request_window.ui.h:6 msgid "_Actions" msgstr "Act_ions" -#: ../data/gui/roster_window.ui.h:19 +#: ../data/gui/roster_window.ui.h:18 msgid "_Contents" msgstr "_Sommaire" -#: ../data/gui/roster_window.ui.h:21 ../src/disco.py:1520 +#: ../data/gui/roster_window.ui.h:20 ../src/disco.py:1520 msgid "_Edit" msgstr "É_dition" -#: ../data/gui/roster_window.ui.h:22 +#: ../data/gui/roster_window.ui.h:21 msgid "_FAQ" msgstr "_FAQ" -#: ../data/gui/roster_window.ui.h:23 +#: ../data/gui/roster_window.ui.h:22 msgid "_Help" msgstr "Aid_e" -#: ../data/gui/roster_window.ui.h:26 +#: ../data/gui/roster_window.ui.h:25 msgid "_View" msgstr "_Affichage" @@ -2698,7 +2707,7 @@ msgid "_Add contact" msgstr "_Ajouter un contact" #. Information -#: ../data/gui/search_window.ui.h:4 ../src/roster_window.py:5897 +#: ../data/gui/search_window.ui.h:4 ../src/roster_window.py:5986 msgid "_Information" msgstr "Information" @@ -2778,6 +2787,10 @@ msgstr "_Refuser" msgid "Select the account with which you want to synchronise" msgstr "Sélectionnez le compte avec lequel vous voulez vous synchroniser" +#: ../data/gui/synchronise_select_account_dialog.ui.h:2 +msgid "Synchronise contacts" +msgstr "Synchroniser les contacts" + #: ../data/gui/synchronise_select_contacts_dialog.ui.h:1 msgid "Select the contacts you want to synchronise" msgstr "Sélectionnez les contacts que vous voulez synchroniser" @@ -2879,23 +2892,23 @@ msgstr "<b>Entrée XML</b>" #: ../data/gui/xml_console_window.ui.h:4 msgid "Hide IN stanzas" -msgstr "" +msgstr "Cacher les stanzas entrantes" #: ../data/gui/xml_console_window.ui.h:5 msgid "Hide IQ stanzas" -msgstr "" +msgstr "Cacher les stanzas de type iq" #: ../data/gui/xml_console_window.ui.h:6 msgid "Hide Message stanzas" -msgstr "" +msgstr "Cacher les stanzas de type message" #: ../data/gui/xml_console_window.ui.h:7 msgid "Hide OUT stanzas" -msgstr "" +msgstr "Cacher les stanzas sortantes" #: ../data/gui/xml_console_window.ui.h:8 msgid "Hide Presence stanzas" -msgstr "" +msgstr "Cacher les stanzas de type presence" #: ../data/gui/xml_console_window.ui.h:9 msgid "Info/Query" @@ -2973,6 +2986,11 @@ msgstr "Le service a envoyé des données mal-formées" msgid "Service changed the session identifier." msgstr "Le service a modifié l'identifiant de la session." +#: ../src/adhoc_commands.py:418 +#, python-format +msgid "%s - Ad-hoc Commands - Gajim" +msgstr "%s - Commandes Ad-hoc - Gajim" + #. when stanza doesn't have error description #: ../src/adhoc_commands.py:513 msgid "Service returned an error." @@ -2999,7 +3017,7 @@ msgstr "Entier" msgid "Text" msgstr "Texte" -#: ../src/advanced_configuration_window.py:96 ../src/chat_control.py:1049 +#: ../src/advanced_configuration_window.py:96 ../src/chat_control.py:1060 msgid "Color" msgstr "Couleur" @@ -3036,205 +3054,205 @@ msgstr[1] "Vous avez reçu de nouvelles entrées (et %d non-affichées) :" #. #!/bin/sh #. LANG=$(for i in *.po; do j=${i/.po/}; echo -n "_('"$j"')":" '"$j"', " ; done) #. echo "{_('en'):'en'",$LANG"}" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "English" msgstr "Anglais" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Belarusian" msgstr "Biélorusse" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Bulgarian" msgstr "Bulgare" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Breton" msgstr "Breton" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Czech" msgstr "Tchèque" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "German" msgstr "Allemand" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Greek" msgstr "Grec" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "British" msgstr "Anglais (Britannique)" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Esperanto" msgstr "Esperanto" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Spanish" msgstr "Espagnol" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Basque" msgstr "Basque" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "French" msgstr "Français" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Croatian" msgstr "Croate" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Italian" msgstr "Italien" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Norwegian (b)" msgstr "Norvégien" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Dutch" msgstr "Hollandais" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Norwegian" msgstr "Norvégien" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Polish" msgstr "Polonais" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Portuguese" msgstr "Portugais" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Brazilian Portuguese" msgstr "Portugais brésilien" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Russian" msgstr "Russe" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Serbian" msgstr "Serbe" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Slovak" msgstr "Slovaque" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Swedish" msgstr "Suédois" -#: ../src/chat_control.py:83 +#: ../src/chat_control.py:85 msgid "Chinese (Ch)" msgstr "Chinois" -#: ../src/chat_control.py:226 +#: ../src/chat_control.py:228 msgid "Ping?" msgstr "Ping ?" -#: ../src/chat_control.py:231 +#: ../src/chat_control.py:233 #, python-format msgid "Pong! (%s s.)" msgstr "Pong ! (%s s.)" -#: ../src/chat_control.py:236 +#: ../src/chat_control.py:238 msgid "Error." msgstr "Erreur." -#: ../src/chat_control.py:561 +#: ../src/chat_control.py:573 msgid "Spelling language" msgstr "Langue du correcteur orthographique" #. we are not connected -#: ../src/chat_control.py:593 ../src/chat_control.py:809 +#: ../src/chat_control.py:605 ../src/chat_control.py:821 msgid "A connection is not available" msgstr "Aucune connexion disponible" -#: ../src/chat_control.py:594 ../src/chat_control.py:810 +#: ../src/chat_control.py:606 ../src/chat_control.py:822 msgid "Your message can not be sent until you are connected." msgstr "Votre message ne peut être envoyé tant que vous n'êtes pas connecté." -#: ../src/chat_control.py:1031 +#: ../src/chat_control.py:1042 msgid "Underline" msgstr "Souligné" -#: ../src/chat_control.py:1032 +#: ../src/chat_control.py:1043 msgid "Strike" msgstr "Barré" -#: ../src/chat_control.py:1055 +#: ../src/chat_control.py:1066 msgid "Font" msgstr "Police" -#: ../src/chat_control.py:1064 +#: ../src/chat_control.py:1075 msgid "Clear formating" msgstr "Style par défaut" -#: ../src/chat_control.py:1141 +#: ../src/chat_control.py:1152 msgid "Really send file?" msgstr "Êtes vous sûr de vouloir envoyer le fichier ?" -#: ../src/chat_control.py:1142 +#: ../src/chat_control.py:1153 #, python-format msgid "If you send a file to %s, he/she will know your real Jabber ID." msgstr "" "Si vous envoyez un fichier à %s, il/elle connaîtra votre véritable " "identifiant Jabber." -#: ../src/chat_control.py:1622 ../src/chat_control.py:2144 +#: ../src/chat_control.py:1636 ../src/chat_control.py:2170 msgid "GPG encryption enabled" msgstr "Chiffrement GPG activé" -#: ../src/chat_control.py:1643 ../src/chat_control.py:1646 +#: ../src/chat_control.py:1657 ../src/chat_control.py:1660 msgid "Requires python-farsight." msgstr "Nécessite python-farsight." #. Add to roster -#: ../src/chat_control.py:1672 ../src/common/contacts.py:158 -#: ../src/common/contacts.py:277 ../src/common/helpers.py:60 -#: ../src/common/helpers.py:254 ../src/dialogs.py:1099 ../src/dialogs.py:2192 -#: ../src/dialogs.py:2221 ../src/gui_interface.py:505 -#: ../src/gui_menu_builder.py:254 ../src/gui_menu_builder.py:404 -#: ../src/roster_window.py:1649 ../src/roster_window.py:1651 -#: ../src/roster_window.py:1984 ../src/roster_window.py:3507 -#: ../src/roster_window.py:3534 +#: ../src/chat_control.py:1700 ../src/common/contacts.py:149 +#: ../src/common/contacts.py:270 ../src/common/helpers.py:67 +#: ../src/common/helpers.py:261 ../src/dialogs.py:1099 ../src/dialogs.py:2231 +#: ../src/dialogs.py:2260 ../src/gui_interface.py:482 +#: ../src/gui_menu_builder.py:254 ../src/gui_menu_builder.py:405 +#: ../src/roster_window.py:767 ../src/roster_window.py:1664 +#: ../src/roster_window.py:1666 ../src/roster_window.py:2011 +#: ../src/roster_window.py:3551 ../src/roster_window.py:3578 msgid "Not in Roster" msgstr "Absent de la liste" -#: ../src/chat_control.py:1702 +#: ../src/chat_control.py:1732 msgid "This contact does not support file transfer." msgstr "Ce contact ne prend pas en charge les transferts de fichier." -#: ../src/chat_control.py:1705 +#: ../src/chat_control.py:1735 msgid "You need to know the real JID of the contact to send him or her a file." msgstr "" "Vous avez besoin de connaître le vrai JID du contact pour lui envoyer un " "fichier." -#: ../src/chat_control.py:1812 +#: ../src/chat_control.py:1849 #, python-format msgid "%(type)s state : %(state)s, reason: %(reason)s" msgstr "État %(type)s : %(state)s, raison : %(reason)s" -#: ../src/chat_control.py:2003 +#: ../src/chat_control.py:2040 #, python-format msgid "%(nickname)s from group chat %(room_name)s" msgstr "%(nickname)s du salon de discussion %(room_name)s" #. No key assigned nor a key is used by remote contact -#: ../src/chat_control.py:2124 ../src/dialogs.py:4997 +#: ../src/chat_control.py:2150 ../src/dialogs.py:5043 msgid "No GPG key assigned" msgstr "Aucune clef GPG assignée" -#: ../src/chat_control.py:2125 +#: ../src/chat_control.py:2151 msgid "" "No GPG key is assigned to this contact. So you cannot encrypt messages with " "GPG." @@ -3242,50 +3260,50 @@ msgstr "" "Aucune clef GPG n'est assignée à ce contact. Vous ne pouvez donc pas " "chiffrer les messages avec GPG." -#: ../src/chat_control.py:2134 +#: ../src/chat_control.py:2160 msgid "GPG encryption disabled" msgstr "Chiffrement GPG désactivé" -#: ../src/chat_control.py:2160 +#: ../src/chat_control.py:2186 msgid "Session WILL be logged" msgstr "La session SERA archivée" -#: ../src/chat_control.py:2162 +#: ../src/chat_control.py:2188 msgid "Session WILL NOT be logged" msgstr "La session ne sera PAS archivée" #. encryption %s active -#: ../src/chat_control.py:2179 +#: ../src/chat_control.py:2205 msgid "is" msgstr "est" -#: ../src/chat_control.py:2179 +#: ../src/chat_control.py:2205 msgid "is NOT" msgstr "N'est PAS" #. chat session %s be logged -#: ../src/chat_control.py:2181 +#: ../src/chat_control.py:2207 msgid "will" msgstr "sera" -#: ../src/chat_control.py:2181 +#: ../src/chat_control.py:2207 msgid "will NOT" msgstr "NE sera PAS" #. About encrypted chat session -#: ../src/chat_control.py:2185 +#: ../src/chat_control.py:2211 msgid "and authenticated" msgstr "et authentifiée" #. About encrypted chat session -#: ../src/chat_control.py:2189 +#: ../src/chat_control.py:2215 msgid "and NOT authenticated" msgstr "et NON authentifiée" #. status will become 'is' or 'is not', authentificaed will become #. 'and authentificated' or 'and not authentificated', logged will become #. 'will' or 'will not' -#: ../src/chat_control.py:2196 +#: ../src/chat_control.py:2222 #, python-format msgid "" "%(type)s encryption %(status)s active %(authenticated)s.\n" @@ -3294,31 +3312,31 @@ msgstr "" "Chiffrement %(type)s %(status)s actif %(authenticated)s.\n" "Votre discussion %(logged)s archivée." -#: ../src/chat_control.py:2357 +#: ../src/chat_control.py:2349 msgid "Session negotiation cancelled" msgstr "Négociation annulée" -#: ../src/chat_control.py:2367 +#: ../src/chat_control.py:2359 msgid "This session WILL be archived on server" msgstr "Cette session sera archivée sur le serveur" -#: ../src/chat_control.py:2369 +#: ../src/chat_control.py:2361 msgid "This session WILL NOT be archived on server" msgstr "La session ne sera PAS archivée sur le serveur" -#: ../src/chat_control.py:2378 +#: ../src/chat_control.py:2370 msgid "This session is encrypted" msgstr "Cette session est chiffrée" -#: ../src/chat_control.py:2381 +#: ../src/chat_control.py:2373 msgid " and WILL be logged" msgstr " et SERA archivée" -#: ../src/chat_control.py:2383 +#: ../src/chat_control.py:2375 msgid " and WILL NOT be logged" msgstr " et NE SERA PAS archivée" -#: ../src/chat_control.py:2388 +#: ../src/chat_control.py:2380 msgid "" "Remote contact's identity not verified. Click the shield button for more " "details." @@ -3326,25 +3344,25 @@ msgstr "" "Identité du contact non vérifiée. Cliquez sur le bouton bouclier pour plus " "de détails." -#: ../src/chat_control.py:2390 +#: ../src/chat_control.py:2382 msgid "E2E encryption disabled" msgstr "Chiffrement E2E désactivé" -#: ../src/chat_control.py:2434 ../src/chat_control.py:2447 +#: ../src/chat_control.py:2430 ../src/chat_control.py:2444 msgid "The following message was NOT encrypted" msgstr "Le message suivant n'a PAS été chiffré" -#: ../src/chat_control.py:2440 +#: ../src/chat_control.py:2436 msgid "The following message was encrypted" msgstr "Le message suivant n'a été chiffré" #. %s is being replaced in the code with JID -#: ../src/chat_control.py:2731 +#: ../src/chat_control.py:2707 #, python-format msgid "You just received a new message from \"%s\"" msgstr "Vous venez de recevoir un nouveau message de \"%s\"" -#: ../src/chat_control.py:2732 +#: ../src/chat_control.py:2708 msgid "" "If you close this tab and you have history disabled, this message will be " "lost." @@ -3352,15 +3370,14 @@ msgstr "" "Si vous fermez cette fenêtre et que l'historique n'est pas activé, ce " "message sera perdu." -#: ../src/chat_control.py:2899 ../src/common/connection_handlers_events.py:871 -#: ../src/common/connection_handlers.py:945 -#: ../src/common/connection_handlers.py:1046 -#: ../src/common/connection_handlers.py:1703 ../src/common/connection.py:462 -#: ../src/common/logger.py:1126 ../src/gajim.py:203 ../src/session.py:97 +#: ../src/chat_control.py:2875 ../src/common/connection_handlers_events.py:887 +#: ../src/common/connection_handlers.py:948 +#: ../src/common/connection_handlers.py:1060 ../src/common/connection.py:456 +#: ../src/common/logger.py:1144 ../src/gajim.py:210 ../src/session.py:100 msgid "Database Error" msgstr "Erreur de base de données" -#: ../src/chat_control.py:2900 +#: ../src/chat_control.py:2876 #, python-format msgid "" "The database file (%s) cannot be read. Try to repair it or remove it (all " @@ -3369,7 +3386,7 @@ msgstr "" "Le fichier de base de données (%s) ne peut être lu. Essayez de le réparer ou " "supprimez le (toutes les archives seront perdues)." -#: ../src/chat_control.py:3136 ../src/gui_interface.py:1057 +#: ../src/chat_control.py:3112 ../src/gui_interface.py:1071 #, python-format msgid "" "Unable to decrypt message from %s\n" @@ -3378,11 +3395,254 @@ msgstr "" "Impossible de déchiffrer le message de %s\n" "Il a peut-être été manipulé." -#: ../src/chat_control.py:3169 +#: ../src/chat_control.py:3145 #, python-format msgid "%(name)s is now %(status)s" msgstr "%(name)s est maintenant %(status)s" +#: ../src/chat_control.py:3204 +msgid "File transfer" +msgstr "Transfert de fichiers" + +#: ../src/chat_control.py:3207 +msgid "Size" +msgstr "Taille" + +#: ../src/chat_control.py:3209 +msgid "_Accept" +msgstr "_Accepter" + +#: ../src/chat_control.py:3232 ../src/filetransfers_window.py:204 +msgid "File transfer completed" +msgstr "Transfert de fichier terminé" + +#: ../src/chat_control.py:3260 ../src/gui_interface.py:942 +#: ../src/roster_window.py:1923 +msgid "Remote contact stopped transfer" +msgstr "Le contact distant à stoppé le transfert" + +#: ../src/chat_control.py:3262 ../src/gui_interface.py:945 +#: ../src/roster_window.py:1925 +msgid "Error opening file" +msgstr "Erreur à l'ouverture du fichier" + +#: ../src/chat_control.py:3264 ../src/filetransfers_window.py:240 +msgid "File transfer stopped" +msgstr "Transfert de fichier interrompu" + +#: ../src/chat_control.py:3267 ../src/filetransfers_window.py:219 +#: ../src/filetransfers_window.py:226 +msgid "File transfer cancelled" +msgstr "Transfert de fichier annulé" + +#: ../src/chat_control.py:3268 ../src/filetransfers_window.py:219 +#: ../src/filetransfers_window.py:227 +msgid "Connection with peer cannot be established." +msgstr "La connexion avec le contact ne peut être établie." + +#: ../src/command_system/implementation/custom.py:105 +msgid "The same as using a doc-string, except it supports translation" +msgstr "Pareil qu'utiliser une doc-string, mais supporte la traduction" + +#: ../src/command_system/implementation/execute.py:53 +msgid "Execute expression inside a shell, show output" +msgstr "Éxecute une expression dans un shell, montre la sortie" + +#: ../src/command_system/implementation/execute.py:109 +msgid "Execute expression inside a shell, send output" +msgstr "Éxecute une expression dans un shell, envoie la sortie" + +#: ../src/command_system/implementation/standard.py:50 +msgid "Hide the chat buttons" +msgstr "Cache les boutons de discussion." + +#: ../src/command_system/implementation/standard.py:56 +msgid "" +"Show help on a given command or a list of available commands if -a is given" +msgstr "" +"Montre l'aide sur une commande donnée ou une listre des commandes possibles " +"si -a est ajouté" + +#: ../src/command_system/implementation/standard.py:83 +msgid "Send a message to the contact" +msgstr "Envoie un message a un contact" + +#: ../src/command_system/implementation/standard.py:88 +msgid "Send action (in the third person) to the current chat" +msgstr "Envoie une action (à la troisième personne) à la conversation actuelle" + +#: ../src/command_system/implementation/standard.py:93 +msgid "Show logged messages which mention given text" +msgstr "Montre les messages enregistrés qui mentionnent le texte donné" + +#: ../src/command_system/implementation/standard.py:99 +#, python-format +msgid "%s: Nothing found" +msgstr "%s : rien de trouvé" + +#: ../src/command_system/implementation/standard.py:105 +msgid "Limit must be an integer" +msgstr "La limite doit être un entier" + +#: ../src/command_system/implementation/standard.py:129 +msgid "" +"\n" +" Set the current the status\n" +"\n" +" Status can be given as one of the following values: online, away,\n" +" chat, xa, dnd.\n" +" " +msgstr "" +"\n" +" Fixe l'état actuel\n" +"\n" +" L'état doit être l'une des valeurs suivates : online, away, chat, xa, " +"dnd.\n" +" " + +#: ../src/command_system/implementation/standard.py:147 +msgid "Set the current status to away" +msgstr "Fixe l'état actuel à away" + +#: ../src/command_system/implementation/standard.py:150 +#: ../src/common/commands.py:109 ../src/common/helpers.py:249 +#: ../src/tooltips.py:194 +msgid "Away" +msgstr "Absent(e)" + +#: ../src/command_system/implementation/standard.py:161 +msgid "Set the current status to online" +msgstr "Fixe l'état actuel à online" + +#: ../src/command_system/implementation/standard.py:164 +msgid "Available" +msgstr "Disponible" + +#: ../src/command_system/implementation/standard.py:184 +#: ../src/command_system/implementation/standard.py:261 +msgid "Clear the text window" +msgstr "Nettoie la fenêtre de conversation" + +#: ../src/command_system/implementation/standard.py:189 +msgid "Toggle the GPG encryption" +msgstr "Basculer le chiffrement GPG" + +#: ../src/command_system/implementation/standard.py:194 +msgid "Send a ping to the contact" +msgstr "Envoie un ping au contact" + +#: ../src/command_system/implementation/standard.py:197 +msgid "Command is not supported for zeroconf accounts" +msgstr "Commande non prise en charge pour les comptes zeroconf" + +#: ../src/command_system/implementation/standard.py:201 +msgid "Send DTMF sequence through an open audio session" +msgstr "Envoie une séquence DTMF dans une session audio ouverte" + +#: ../src/command_system/implementation/standard.py:204 +msgid "No open audio sessions with the contact" +msgstr "Pas de session audio ouverte avec le contact" + +#: ../src/command_system/implementation/standard.py:207 +#, python-format +msgid "%s is not a valid tone" +msgstr "%s n'est pas un ton valide" + +#: ../src/command_system/implementation/standard.py:217 +msgid "Audio sessions are not available" +msgstr "Les sessions audio ne sont pas disponibles" + +#: ../src/command_system/implementation/standard.py:227 +msgid "Video sessions are not available" +msgstr "Les sessions video ne sont pas disponibles" + +#: ../src/command_system/implementation/standard.py:268 +msgid "Change your nickname in a group chat" +msgstr "Changer votre surnom dans un salon de discussion" + +#. invalid char +#: ../src/command_system/implementation/standard.py:273 ../src/config.py:3392 +#: ../src/dialogs.py:2078 +msgid "Invalid nickname" +msgstr "Nom d'utilisateur invalide" + +#: ../src/command_system/implementation/standard.py:278 +msgid "Open a private chat window with a specified occupant" +msgstr "" +"Ouvre une fenêtre de conversation privée avec l'occupant(e) spécifié(e)" + +#: ../src/command_system/implementation/standard.py:284 +#: ../src/command_system/implementation/standard.py:293 +#: ../src/command_system/implementation/standard.py:347 +msgid "Nickname not found" +msgstr "Surnom introuvable : %s" + +#: ../src/command_system/implementation/standard.py:287 +msgid "" +"Open a private chat window with a specified occupant and send him a message" +msgstr "" +"Ouvre une fenêtre de conversation privée avec l'occupant(e) spécifié(e) et " +"lui envoyer un mesage" + +#: ../src/command_system/implementation/standard.py:296 +msgid "Display or change a group chat topic" +msgstr "Affiche ou modifie le sujet d'un salon de discussion" + +#: ../src/command_system/implementation/standard.py:304 +msgid "Invite a user to a room for a reason" +msgstr "Invite un contact à un salon de discussion pour une raison" + +#: ../src/command_system/implementation/standard.py:307 +#, python-format +msgid "Invited %s to %s" +msgstr "Invité %s à %s" + +#: ../src/command_system/implementation/standard.py:310 +msgid "Join a group chat given by a jid, optionally using given nickname" +msgstr "" +"Rejoindre un salon de discussion donné par son jid, éventuellement en " +"utilisant le surnom donné" + +#: ../src/command_system/implementation/standard.py:327 +msgid "" +"Leave the groupchat, optionally giving a reason, and close tab or window" +msgstr "" +"Quitte le salon de discussion, éventuellement en donnant une raison, et " +"ferme l'onglet ou la fneêtre" + +#: ../src/command_system/implementation/standard.py:332 +msgid "" +"\n" +" Ban user by a nick or a jid from a groupchat\n" +"\n" +" If given nickname is not found it will be treated as a jid.\n" +" " +msgstr "" +"\n" +" Bannir un utilisateur par son surnom ou son jid d'un salon de " +"discussion\n" +"\n" +" Si le surnom donné n'existe pas, il sera traité comme un jid.\n" +" " + +#: ../src/command_system/implementation/standard.py:344 +msgid "Kick user by a nick from a groupchat" +msgstr "Éjecter un utilisateur par son surnom d'un salon de discussion" + +#: ../src/command_system/implementation/standard.py:351 +msgid "Display names of all group chat occupants" +msgstr "Affiche les noms des occupants du salon" + +#: ../src/command_system/implementation/standard.py:373 +msgid "Forbid an occupant to send you public or private messages" +msgstr "" +"Interdir un(e) occupant(e) de vous envoyer des messages publics ou privés" + +#: ../src/command_system/implementation/standard.py:378 +msgid "Allow an occupant to send you public or private messages" +msgstr "" +"Autoriser un(e) occupant(e) de vous envoyer des messages publics ou privés" + #: ../src/common/check_paths.py:38 msgid "creating logs database" msgstr "création de la base de donnée de l'historique" @@ -3417,89 +3677,84 @@ msgstr "%s est un répertoire mais devrait être un fichier" msgid "creating %s directory" msgstr "crée le répertoire %s" -#: ../src/common/commands.py:82 +#: ../src/common/commands.py:85 msgid "Change status information" msgstr "Modifier les informations du statut" -#: ../src/common/commands.py:97 +#: ../src/common/commands.py:100 msgid "Change status" msgstr "Modifier le statut" -#: ../src/common/commands.py:98 +#: ../src/common/commands.py:101 msgid "Set the presence type and description" msgstr "Choisissez le type de présence et la description" -#: ../src/common/commands.py:104 +#: ../src/common/commands.py:107 msgid "Free for chat" msgstr "Disponible pour Discuter" -#: ../src/common/commands.py:105 +#: ../src/common/commands.py:108 msgid "Online" msgstr "Connecté" -#: ../src/common/commands.py:106 ../src/common/helpers.py:242 -#: ../src/tooltips.py:193 -msgid "Away" -msgstr "Absent(e)" - -#: ../src/common/commands.py:107 +#: ../src/common/commands.py:110 msgid "Extended away" msgstr "Longue absence" -#: ../src/common/commands.py:108 +#: ../src/common/commands.py:111 msgid "Do not disturb" msgstr "Ne pas déranger" -#: ../src/common/commands.py:109 +#: ../src/common/commands.py:112 msgid "Offline - disconnect" msgstr "Hors-ligne - Déconnecté(e)" -#: ../src/common/commands.py:114 +#: ../src/common/commands.py:117 msgid "Presence description:" msgstr "Description de la présence :" -#: ../src/common/commands.py:149 ../src/common/commands.py:317 +#: ../src/common/commands.py:152 ../src/common/commands.py:320 msgid "The status has been changed." msgstr "L'état a été changé." -#: ../src/common/commands.py:181 ../src/common/commands.py:207 +#: ../src/common/commands.py:184 ../src/common/commands.py:210 msgid "Leave Groupchats" msgstr "Quitter des Groupes de Discussion" -#: ../src/common/commands.py:197 +#: ../src/common/commands.py:200 #, python-format msgid "%(nickname)s on %(room_jid)s" msgstr "%(nickname)s dans %(room_jid)s" -#: ../src/common/commands.py:201 +#: ../src/common/commands.py:204 msgid "You have not joined a groupchat." msgstr "Vous n'avez pas joint de groupe de discussion." -#: ../src/common/commands.py:208 +#: ../src/common/commands.py:211 msgid "Choose the groupchats you want to leave" msgstr "Choisissez les groupes de discussion que vous voulez quitter" #. Make special context menu if group is Groupchats -#: ../src/common/commands.py:212 ../src/common/contacts.py:137 -#: ../src/common/helpers.py:60 ../src/roster_window.py:817 -#: ../src/roster_window.py:1653 ../src/roster_window.py:1655 -#: ../src/roster_window.py:2513 ../src/roster_window.py:5515 +#: ../src/common/commands.py:215 ../src/common/contacts.py:128 +#: ../src/common/helpers.py:67 ../src/roster_window.py:820 +#: ../src/roster_window.py:1668 ../src/roster_window.py:1670 +#: ../src/roster_window.py:2546 ../src/roster_window.py:5604 msgid "Groupchats" msgstr "Salons de discussion" -#: ../src/common/commands.py:253 +#: ../src/common/commands.py:256 msgid "You left the following groupchats:" msgstr "Vous avez quitté les groupes de discussion suivants :" -#: ../src/common/commands.py:265 +#: ../src/common/commands.py:268 msgid "Forward unread messages" msgstr "Transférer les messages non-lus" -#: ../src/common/commands.py:287 +#: ../src/common/commands.py:290 msgid "All unread messages have been forwarded." msgstr "Tous les messages non-lus ont été transmis." -#: ../src/common/commands.py:295 +#: ../src/common/commands.py:298 msgid "Forward unread message then disconnect" msgstr "Transférer les messages non-lus et se déconnecter" @@ -3551,47 +3806,53 @@ msgstr "" "\" (jamais), \"on_event\" (lorsqu'il y a un évènement en attente) ou \"always" "\" (toujours)" -#: ../src/common/config.py:94 +#: ../src/common/config.py:90 +msgid "Allow to hide the roster window even if the tray icon is not shown." +msgstr "" +"Autoriser à cacher la liste des contacts même si l'icône de notification " +"n'est pas affiché." + +#: ../src/common/config.py:95 msgid "Incoming nickname color." msgstr "Couleur des pseudos entrants" -#: ../src/common/config.py:95 +#: ../src/common/config.py:96 msgid "Outgoing nickname color." msgstr "Couleur du pseudo sortant." -#: ../src/common/config.py:96 +#: ../src/common/config.py:97 msgid "Incoming text color." msgstr "Couleur du texte entrant." -#: ../src/common/config.py:97 +#: ../src/common/config.py:98 msgid "Outgoing text color." msgstr "Couleur du texte sortant." -#: ../src/common/config.py:98 +#: ../src/common/config.py:99 msgid "Status message text color." msgstr "Colour des messages de statut" -#: ../src/common/config.py:101 +#: ../src/common/config.py:102 msgid "Incoming nickname font." msgstr "Police des pseudos entrants." -#: ../src/common/config.py:102 +#: ../src/common/config.py:103 msgid "Outgoing nickname font." msgstr "Police des pseudos sortants." -#: ../src/common/config.py:103 +#: ../src/common/config.py:104 msgid "Incoming text font." msgstr "Police du texte entrant." -#: ../src/common/config.py:104 +#: ../src/common/config.py:105 msgid "Outgoing text font." msgstr "Police du texte sortant." -#: ../src/common/config.py:105 +#: ../src/common/config.py:106 msgid "Status message text font." msgstr "Police du message de statut" -#: ../src/common/config.py:106 +#: ../src/common/config.py:107 msgid "" "List (space separated) of rows (accounts and groups) that are collapsed." msgstr "" @@ -3599,17 +3860,17 @@ msgstr "" "repliés." #. sorted alphanum -#: ../src/common/config.py:107 ../src/common/config.py:494 -#: ../src/common/optparser.py:294 ../src/common/optparser.py:490 -#: ../src/common/optparser.py:524 ../src/gui_interface.py:2657 +#: ../src/common/config.py:108 ../src/common/config.py:504 +#: ../src/common/optparser.py:296 ../src/common/optparser.py:492 +#: ../src/common/optparser.py:526 ../src/gui_interface.py:2679 msgid "default" msgstr "Par défaut" -#: ../src/common/config.py:113 +#: ../src/common/config.py:114 msgid "Language used by speller" msgstr "Langue utilisée par le vérificateur orthographique" -#: ../src/common/config.py:114 +#: ../src/common/config.py:115 msgid "" "'always' - print time for every message.\n" "'sometimes' - print time every print_ichat_every_foo_minutes minute.\n" @@ -3620,7 +3881,7 @@ msgstr "" "minute.\n" "'never' - ne jamais afficher l'heure." -#: ../src/common/config.py:115 +#: ../src/common/config.py:116 msgid "" "Print time in chats using Fuzzy Clock. Value of fuzziness from 1 to 4, or 0 " "to disable fuzzyclock. 1 is the most precise clock, 4 the least precise one. " @@ -3632,19 +3893,19 @@ msgstr "" "valeur 0. Ceci est utilisé seulement lorsque la valeur de print_time est " "'sometimes'." -#: ../src/common/config.py:118 +#: ../src/common/config.py:119 msgid "Treat * / _ pairs as possible formatting characters." msgstr "" "Traiter les paires de * / _ comme des éventuels caractères de formatage." -#: ../src/common/config.py:119 +#: ../src/common/config.py:120 msgid "" "If True, do not remove */_ . So *abc* will be bold but with * * not removed." msgstr "" "Si vrai ne supprime pas */_ . Donc *abc* sera en gras mais sans supprimer " "les * *" -#: ../src/common/config.py:122 +#: ../src/common/config.py:123 msgid "" "Uses ReStructured text markup to send HTML, plus ascii formatting if " "selected. For syntax, see http://docutils.sourceforge.net/docs/ref/rst/" @@ -3654,7 +3915,7 @@ msgstr "" "Pour la syntaxe voir http://docutils.sourceforge.net/docs/ref/rst/" "restructuredtext.html (si vous voulez utiliser cela, installez docutils)" -#: ../src/common/config.py:131 +#: ../src/common/config.py:132 msgid "" "Character to add after nickname when using nick completion (tab) in group " "chat." @@ -3662,7 +3923,7 @@ msgstr "" "Caractère à ajouter après un surnom en utilisant la complétion automatique " "(tab) dans un salon de discussion." -#: ../src/common/config.py:132 +#: ../src/common/config.py:133 msgid "" "Character to propose to add after desired nickname when desired nickname is " "used by someone else in group chat." @@ -3670,7 +3931,7 @@ msgstr "" "Caractère ajouté automatiquement après un surnom s'il est déjà utilisé dans " "un salon de discussion." -#: ../src/common/config.py:150 +#: ../src/common/config.py:151 msgid "" "If true, Gajim will save roster position when hiding roster, and restore it " "when showing roster." @@ -3678,7 +3939,7 @@ msgstr "" "Si vrai, Gajim sauvera la position de la liste de contacts avant de la " "cacher et la restaurera en la faisant réapparaître" -#: ../src/common/config.py:161 +#: ../src/common/config.py:162 msgid "" "This option let you customize timestamp that is printed in conversation. For " "exemple \"[%H:%M] \" will show \"[hour:minute] \". See python doc on " @@ -3689,26 +3950,26 @@ msgstr "" "documentation python de strftime pour une documentation complète : http://" "docs.python.org/lib/module-time.html" -#: ../src/common/config.py:162 +#: ../src/common/config.py:163 msgid "Characters that are printed before the nickname in conversations" msgstr "Caractères affichés avant le surnom dans les conversations" -#: ../src/common/config.py:163 +#: ../src/common/config.py:164 msgid "Characters that are printed after the nickname in conversations" msgstr "Caractères affichés après le surnom dans les conversations" -#: ../src/common/config.py:166 +#: ../src/common/config.py:167 msgid "" "Specify the command to run when new mail arrives, e.g.: /usr/bin/getmail -q" msgstr "" "Spécifie la commande a exécuter quand un nouveau courriel arrive, ex : /usr/" "bin/getmail -q" -#: ../src/common/config.py:168 +#: ../src/common/config.py:169 msgid "Add * and [n] in roster title?" msgstr "Ajouter * et [n] au titre de la liste des contacts ?" -#: ../src/common/config.py:169 +#: ../src/common/config.py:170 msgid "" "How many lines to remember from previous conversation when a chat tab/window " "is reopened." @@ -3716,20 +3977,20 @@ msgstr "" "Nombre de lignes de l'historique à afficher lorsque l'onglet ou la fenêtre " "de discussion est ouvert à nouveau." -#: ../src/common/config.py:170 +#: ../src/common/config.py:171 msgid "How many minutes should last lines from previous conversation last." msgstr "" "Durée de vie en minutes des dernières lignes des conversations précédentes." -#: ../src/common/config.py:171 +#: ../src/common/config.py:172 msgid "" -"How many lines to request to server when entering a groupchat. -1 means no " +"How many lines to request from server when entering a groupchat. -1 means no " "limit" msgstr "" "Le nombre de lignes d'archives qui seront demandées en entrant dans un " "salon. -1 signifie \"pas de limitation\"" -#: ../src/common/config.py:172 +#: ../src/common/config.py:173 msgid "" "How many minutes back to request logs when a entering a groupchat. -1 means " "no limit" @@ -3737,7 +3998,7 @@ msgstr "" "Le nombre de minutes d'archives qui seront demandées en entrant dans un " "salon. -1 signifie \"pas de limitation\"" -#: ../src/common/config.py:173 +#: ../src/common/config.py:174 msgid "" "How many seconds to wait before trying to autorejoin to a conference you are " "being disconnected from. Set to 0 to disable autorejoining." @@ -3746,12 +4007,14 @@ msgstr "" "automatiquement à un salon dont vous avez été déconnecté. Mettre à 0 pour " "désactiver." -#: ../src/common/config.py:174 +#: ../src/common/config.py:175 msgid "" "Should autorejoin be activated when we are being kicked from a conference?" msgstr "" +"La reconnexion automatique doit-elle être activée lorsque l'on est éjecté " +"d'un salon de discussion ?" -#: ../src/common/config.py:175 +#: ../src/common/config.py:176 msgid "" "Send message on Ctrl+Enter and with Enter make new line (Mirabilis ICQ " "Client default behaviour)." @@ -3759,13 +4022,13 @@ msgstr "" "Envoyer le message avec Ctrl+Entrée et aller à la ligne avec Entrée " "(comportement par défaut du client ICQ de Mirabilis)." -#: ../src/common/config.py:177 +#: ../src/common/config.py:178 msgid "How many lines to store for Ctrl+KeyUP." msgstr "" "Nombre de lignes à stocker pour le rappel des lignes précédentes (avec Ctrl" "+flèche vers le haut)." -#: ../src/common/config.py:180 +#: ../src/common/config.py:181 #, python-format msgid "" "Either custom url with %s in it where %s is the word/phrase or 'WIKTIONARY' " @@ -3774,13 +4037,13 @@ msgstr "" "Soit une url personnalisée contenant %s où %s est le mot/la phrase, soit " "\"WIKTIONARY\", ce qui signifie l'utilisation de wikitionary." -#: ../src/common/config.py:183 +#: ../src/common/config.py:184 msgid "If checked, Gajim can be controlled remotely using gajim-remote." msgstr "" "Si cette case est cochée, Gajim pourra être contrôlé à distance via gajim-" "remote." -#: ../src/common/config.py:184 +#: ../src/common/config.py:185 msgid "" "If True, listen to D-Bus signals from NetworkManager and change the status " "of accounts (provided they do not have listen_to_network_manager set to " @@ -3791,13 +4054,13 @@ msgstr "" "automatiquement l'état des comptes (en autant que listen_to_network_manager " "n'est pas désactivé et qu'ils soient synchronisés à l'état global)." -#: ../src/common/config.py:185 +#: ../src/common/config.py:186 msgid "" "Sent chat state notifications. Can be one of all, composing_only, disabled." msgstr "" "Notifications d'états envoyées. Peut être all, composing_only ou disabled." -#: ../src/common/config.py:186 +#: ../src/common/config.py:187 msgid "" "Displayed chat state notifications in chat windows. Can be one of all, " "composing_only, disabled." @@ -3805,7 +4068,7 @@ msgstr "" "Notifications d'états affichées dans les fenêtres de conversations. Peut " "être all, composing_only ou disabled." -#: ../src/common/config.py:188 +#: ../src/common/config.py:189 msgid "" "When not printing time for every message (print_time==sometimes), print it " "every x minutes." @@ -3813,12 +4076,12 @@ msgstr "" "Au lieu d'afficher l'heure à chaque message (print_time==sometimes), " "l'afficher toutes les x minutes." -#: ../src/common/config.py:189 +#: ../src/common/config.py:190 msgid "Ask before closing a group chat tab/window." msgstr "" "Demander avant de fermer un onglet ou une fenêtre de discussion de salon." -#: ../src/common/config.py:190 +#: ../src/common/config.py:191 msgid "" "Always ask before closing group chat tab/window in this space separated list " "of group chat jids." @@ -3826,7 +4089,7 @@ msgstr "" "Toujours demander avant de fermer les onglets/fenêtres de salons de cette " "liste séparés par des espaces." -#: ../src/common/config.py:191 +#: ../src/common/config.py:192 msgid "" "Never ask before closing group chat tab/window in this space separated list " "of group chat jids." @@ -3834,7 +4097,7 @@ msgstr "" "Ne jamais demander avant de fermer onglets/fenêtres des salons de cette " "liste séparées par des espaces." -#: ../src/common/config.py:192 +#: ../src/common/config.py:193 msgid "" "Ask before closing tabbed chat window if there are control that can loose " "data (chat, private chat, groupchat that will not be minimized)" @@ -3843,7 +4106,7 @@ msgstr "" "peuvent être perdues (conversations, conversations privées, salons qui se " "seront pas minimisés)" -#: ../src/common/config.py:195 +#: ../src/common/config.py:196 msgid "" "Comma separated list of hosts that we send, in addition of local interfaces, " "for File Transfer in case of address translation/port forwarding." @@ -3852,27 +4115,27 @@ msgstr "" "interfaces locales, pour les transferts de fichiers dans le cas de " "traduction d'adresse / redirection de port." -#: ../src/common/config.py:197 +#: ../src/common/config.py:198 msgid "IEC standard says KiB = 1024 bytes, KB = 1000 bytes." msgstr "D'après le standard IEC, KiB = 1024 bytes, KB = 1000 bytes." -#: ../src/common/config.py:199 +#: ../src/common/config.py:200 msgid "Notify of events in the notification area." msgstr "M'alerter à l'aide de l'icône dans la zone de notifications." -#: ../src/common/config.py:205 +#: ../src/common/config.py:206 msgid "Show tab when only one conversation?" msgstr "Montrer l'onglet quand il n'y a qu'une discussion ?" -#: ../src/common/config.py:206 +#: ../src/common/config.py:207 msgid "Show tabbed notebook border in chat windows?" msgstr "Afficher la bordure fenêtres de discussion à onglets ?" -#: ../src/common/config.py:207 +#: ../src/common/config.py:208 msgid "Show close button in tab?" msgstr "Afficher le bouton fermer sur l'onglet ?" -#: ../src/common/config.py:208 +#: ../src/common/config.py:209 msgid "" "A list of modp groups to use in a Diffie-Hellman, highest preference first, " "separated by commas. Valid groups are 1, 2, 5, 14, 15, 16, 17 and 18. Higher " @@ -3885,18 +4148,18 @@ msgstr "" "sécurisés, mais prennent plus de temps pour le calcul quand vous commencez " "une session." -#: ../src/common/config.py:217 +#: ../src/common/config.py:218 msgid "Preview new messages in notification popup?" msgstr "Aperçu des nouveaux messages dans un popup ?" -#: ../src/common/config.py:222 +#: ../src/common/config.py:223 msgid "" "A semicolon-separated list of words that will be highlighted in group chats." msgstr "" "Une liste de mots séparés par des points-virgules qui seront mis en " "surbrillance dans les salons." -#: ../src/common/config.py:223 +#: ../src/common/config.py:224 msgid "" "If True, quits Gajim when X button of Window Manager is clicked. This " "setting is taken into account only if notification icon is used." @@ -3905,14 +4168,14 @@ msgstr "" "fenêtre. Cette option n'est prise en compte que si l'icône dans la barre de " "notification est utilisée." -#: ../src/common/config.py:224 +#: ../src/common/config.py:225 msgid "" "If True, Gajim will check if it's the default jabber client on each startup." msgstr "" "Si vrai, Gajim vérifiera qu'il est le client Jabber par défaut à chaque " "démarrage." -#: ../src/common/config.py:225 +#: ../src/common/config.py:226 msgid "" "If True, Gajim will display an icon on each tab containing unread messages. " "Depending on the theme, this icon may be animated." @@ -3920,7 +4183,7 @@ msgstr "" "Si vrai, Gajim affichera dans chaque onglet une icône contenant les messages " "non lus. En fonction du thème, cette icône peut être animée." -#: ../src/common/config.py:226 +#: ../src/common/config.py:227 msgid "" "If True, Gajim will display the status message, if not empty, for every " "contact under the contact name in roster window." @@ -3928,13 +4191,13 @@ msgstr "" "Si Vrai, Gajim affichera le message d'état, s'il n'est pas vide, sous le nom " "de chaque contact dans la liste des contacts." -#: ../src/common/config.py:232 +#: ../src/common/config.py:233 msgid "Define the position of the avatar in roster. Can be left or right" msgstr "" "Définir la position de l'avatar dans le roster. Peut être à droite (right) " "ou à gauche (left)." -#: ../src/common/config.py:233 +#: ../src/common/config.py:234 msgid "" "If True, Gajim will ask for avatar each contact that did not have an avatar " "last time or has one cached that is too old." @@ -3942,7 +4205,7 @@ msgstr "" "Si Vrai demandera son avatar à chaque contact qui n'en avait pas la fois " "précédente ou dont la version en cache a expiré." -#: ../src/common/config.py:234 +#: ../src/common/config.py:235 msgid "" "If False, Gajim will no longer print status line in chats when a contact " "changes his or her status and/or his or her status message." @@ -3950,7 +4213,7 @@ msgstr "" "Si Faux, vous ne verrez plus les lignes d'état dans les conversations quand " "un contact modifie son état et/ou son message d'état." -#: ../src/common/config.py:235 +#: ../src/common/config.py:236 msgid "" "can be \"none\", \"all\" or \"in_and_out\". If \"none\", Gajim will no " "longer print status line in groupchats when a member changes his or her " @@ -3965,36 +4228,36 @@ msgstr "" "affichera seulement « TRUC vient de rejoindre/quitter le groupe de " "discussion »." -#: ../src/common/config.py:237 +#: ../src/common/config.py:238 msgid "Log XHTML messages instead of plain text messages." -msgstr "" +msgstr "Enregistrer les messages XHTML au lieu des messages en texte simple." -#: ../src/common/config.py:238 +#: ../src/common/config.py:239 msgid "Background color of contacts when they just signed in." msgstr "" "Couleur d'arrière-plan des contacts lorsqu'ils viennent de se connecter." -#: ../src/common/config.py:239 +#: ../src/common/config.py:240 msgid "Background color of contacts when they just signed out." msgstr "" "Couleur d'arrière-plan des contacts lorsqu'ils viennent de se déconnecter." -#: ../src/common/config.py:241 +#: ../src/common/config.py:242 msgid "" "If True, restored messages will use a smaller font than the default one." msgstr "" "Si Vrai, les messages restaurés utiliseront une police de texte plus petite " "que la normale." -#: ../src/common/config.py:242 +#: ../src/common/config.py:243 msgid "Don't show avatar for the transport itself." msgstr "Ne pas afficher d'avatars particuliers pour les passerelles." -#: ../src/common/config.py:243 +#: ../src/common/config.py:244 msgid "Don't show roster in the system taskbar." msgstr "Ne pas afficher d'icône dans la barre des tâches." -#: ../src/common/config.py:244 +#: ../src/common/config.py:245 msgid "" "If True and installed GTK+ and PyGTK versions are at least 2.8, make the " "window flash (the default behaviour in most Window Managers) when holding " @@ -4004,7 +4267,7 @@ msgstr "" "clignoter (comportement par défaut dans la plupart des gestionnaires de " "fenêtres) la fenêtre quand elle contient des événements non lus." -#: ../src/common/config.py:246 +#: ../src/common/config.py:247 msgid "" "Jabberd1.4 does not like sha info when one join a password protected group " "chat. Turn this option to False to stop sending sha info in group chat " @@ -4015,7 +4278,7 @@ msgstr "" "l'information sha dans les salons." #. always, never, peracct, pertype should not be translated -#: ../src/common/config.py:249 +#: ../src/common/config.py:250 msgid "" "Controls the window where new messages are placed.\n" "'always' - All messages are sent to a single window.\n" @@ -4034,7 +4297,7 @@ msgstr "" "'pertype' - Toutes les conversations d'un même type (discussion, salon) dans " "la même fenêtre." -#: ../src/common/config.py:250 +#: ../src/common/config.py:251 msgid "" "Show roster on startup.\n" "'always' - Always show roster.\n" @@ -4046,36 +4309,36 @@ msgstr "" "'never' - Jamais montrer.\n" "'last_state' - Restaurer le dernier état." -#: ../src/common/config.py:251 +#: ../src/common/config.py:252 msgid "If False, you will no longer see the avatar in the chat window." msgstr "" "Si Faux, vous ne verrez plus les avatars dans les fenêtres de conversation." -#: ../src/common/config.py:252 +#: ../src/common/config.py:253 msgid "If True, pressing the escape key closes a tab/window." msgstr "" "Si Vrai, appuyer sur la touche d'échappement fermera l'onglet ou la fenêtre " "de conversation." -#: ../src/common/config.py:253 +#: ../src/common/config.py:254 msgid "Hides the buttons in chat windows." msgstr "Cacher les boutons dans les fenêtres de conversations." -#: ../src/common/config.py:254 +#: ../src/common/config.py:255 msgid "Hides the banner in a group chat window" msgstr "Cacher les boutons dans la fenêtre de discussion" -#: ../src/common/config.py:255 +#: ../src/common/config.py:256 msgid "Hides the banner in two persons chat window" msgstr "Cache la bannière dans les fenêtres de discussions" -#: ../src/common/config.py:256 +#: ../src/common/config.py:257 msgid "Hides the group chat occupants list in group chat window." msgstr "" "Cache la liste des occupants du salon dans les fenêtres des salons de " "discussion." -#: ../src/common/config.py:257 +#: ../src/common/config.py:258 msgid "" "In a chat, show the nickname at the beginning of a line only when it's not " "the same person talking than in previous message." @@ -4083,15 +4346,15 @@ msgstr "" "Dans une conversation, affiche le surnom au début d'une ligne seulement " "lorsque ce n'est pas la même personne qui a écrit le dernier message." -#: ../src/common/config.py:258 +#: ../src/common/config.py:259 msgid "Indentation when using merge consecutive nickname." msgstr "Indentation lors du fusionnement d'un surnom répété." -#: ../src/common/config.py:259 +#: ../src/common/config.py:260 msgid "Smooth scroll message in conversation window" msgstr "Défilement doux dans la fenêtre de conversation" -#: ../src/common/config.py:260 +#: ../src/common/config.py:261 msgid "" "List of colors, separated by \":\", that will be used to color nicknames in " "group chats." @@ -4099,13 +4362,13 @@ msgstr "" "Liste des couleurs, séparées par « : », qui seront utilisées pour colorier " "les surnoms dans les salons de discussion." -#: ../src/common/config.py:261 +#: ../src/common/config.py:262 msgid "Ctrl-Tab go to next composing tab when none is unread." msgstr "" "Ctrl-Tab pour basculer au prochain onglet lorsqu'aucun d'entre eux n'a de " "nouveaux messages non lus." -#: ../src/common/config.py:262 +#: ../src/common/config.py:263 msgid "" "Should we show the confirm metacontacts creation dialog or not? Empty string " "means we never show the dialog." @@ -4114,7 +4377,7 @@ msgstr "" "métacontacts ? Une valeur vide fera en sorte que le dialogue ne soit jamais " "affiché." -#: ../src/common/config.py:263 +#: ../src/common/config.py:264 msgid "" "Should we show the confirm block contact dialog or not? Empty string means " "we never show the dialog." @@ -4122,7 +4385,7 @@ msgstr "" "Doit-on afficher le dialogue de confirmation de bloquage d'un contact ? Une " "valeur vide fera en sorte que le dialogue ne soit jamais affiché." -#: ../src/common/config.py:264 +#: ../src/common/config.py:265 msgid "" "Should we show the confirm custom status dialog or not? Empty string means " "we never show the dialog." @@ -4131,7 +4394,7 @@ msgstr "" "personnalisé ? Une valeur vide fera en sorte que le dialogue ne soit jamais " "affiché." -#: ../src/common/config.py:265 +#: ../src/common/config.py:266 msgid "" "If True, you will be able to set a negative priority to your account in " "account modification window. BE CAREFUL, when you are logged in with a " @@ -4142,7 +4405,7 @@ msgstr "" "connecté avec une priorité négative, vous ne recevrez AUCUN message en " "provenance de votre serveur." -#: ../src/common/config.py:266 +#: ../src/common/config.py:267 msgid "" "If True, Gajim will use Gnome Keyring (if available) to store account " "passwords." @@ -4150,7 +4413,7 @@ msgstr "" "Si vrai, Gajim va utiliser Gnome Keyring (s'il est disponible) pour stocker " "les mots de passe des comptes." -#: ../src/common/config.py:267 +#: ../src/common/config.py:268 msgid "" "If True, Gajim will use KDE Wallet (if kwalletcli is available) to store " "account passwords." @@ -4158,7 +4421,7 @@ msgstr "" "Si vrai, Gajim va utiliser KDE Wallet (si kwalletcli est disponible) pour " "stocker les mots de passe des comptes." -#: ../src/common/config.py:268 +#: ../src/common/config.py:269 msgid "" "If True, Gajim will show number of online and total contacts in account and " "group rows." @@ -4166,7 +4429,7 @@ msgstr "" "Si vrai, Gajim montrera le nombre de contacts connectés et totaux sur les " "lignes de groupe et de compte" -#: ../src/common/config.py:269 +#: ../src/common/config.py:270 msgid "" "Can be empty, 'chat' or 'normal'. If not empty, treat all incoming messages " "as if they were of this type" @@ -4174,7 +4437,7 @@ msgstr "" "Peut être vide, 'chat' ou 'normal'. Si non vide, traite tous les messages " "entrant comme des messages de ce type" -#: ../src/common/config.py:270 +#: ../src/common/config.py:271 msgid "" "If True, Gajim will scroll and select the contact who sent you the last " "message, if chat window is not already opened." @@ -4182,7 +4445,7 @@ msgstr "" "Si Activé, Gajim scrollera et sélectionnera le contact qui vous a envoyé le " "dernier message, si la fenêtre de conversation n'est pas déjà ouverte." -#: ../src/common/config.py:271 +#: ../src/common/config.py:272 msgid "" "If True, Gajim will convert string between $$ and $$ to an image using dvips " "and convert before insterting it in chat window." @@ -4191,13 +4454,13 @@ msgstr "" "image, en utilisant dvips et convert avant de l'insérer dans la fenêtre de " "conversation." -#: ../src/common/config.py:272 +#: ../src/common/config.py:273 msgid "Time of inactivity needed before the change status window closes down." msgstr "" "Temps d'inactivité nécessaire pour que la fenêtre de changement de statut se " "faire." -#: ../src/common/config.py:273 +#: ../src/common/config.py:274 msgid "" "Maximum number of lines that are printed in conversations. Oldest lines are " "cleared." @@ -4205,7 +4468,7 @@ msgstr "" "Nombre maximum de lignes affichées dans les conversations. Les lignes les " "plus vieilles sont effacées." -#: ../src/common/config.py:274 +#: ../src/common/config.py:275 msgid "" "If True, notification windows from notification-daemon will be attached to " "notification icon." @@ -4213,12 +4476,12 @@ msgstr "" "Si Activé, les fenêtres de notification du notification-daemon seront " "attachées à l'icône du Tray." -#: ../src/common/config.py:275 +#: ../src/common/config.py:276 msgid "Choose interval between 2 checks of idleness." msgstr "" "Choisissez l'intervalle en secondes entre deux vérifications de l'inactivité." -#: ../src/common/config.py:276 +#: ../src/common/config.py:277 msgid "" "Change the value to change the size of latex formulas displayed. The higher " "is larger." @@ -4226,7 +4489,7 @@ msgstr "" "Modifiez la valeur pour changer la taille des formules latex affichées. Plus " "la valeur est grande, plus la taille l'est." -#: ../src/common/config.py:277 +#: ../src/common/config.py:278 msgid "" "Valid uri schemes. Only schemes in this list will be accepted as \"real\" " "uri. (mailto and xmpp are handled separately)" @@ -4234,7 +4497,7 @@ msgstr "" "Schémas d'uri valides. Seuls les schémas dans cette liste seront acceptés " "comment « vraies » uri. (mailto et xmpp sont gérés séparément)" -#: ../src/common/config.py:278 +#: ../src/common/config.py:279 msgid "" "Ask offline status message to all offline contacts when connection to an " "accoutn is established. WARNING: This causes a lot of requests to be sent!" @@ -4243,12 +4506,12 @@ msgstr "" "connexion à un compte est établie. ATTENTION : cela provoque l'envoie de " "nombreuses requêtes !" -#: ../src/common/config.py:279 +#: ../src/common/config.py:280 msgid "If True, completion in groupchats will be like a shell auto-completion" msgstr "" "Si Vrai, la complétion dans les salons sera similaire à celle d'un shell" -#: ../src/common/config.py:280 +#: ../src/common/config.py:281 msgid "" "When is self contact row displayed. Can be \"always\", \"when_other_resource" "\" or \"never\"" @@ -4257,15 +4520,18 @@ msgstr "" "» (toujours), « when_other_resource » (quand d'autres ressources sont " "connectées) ou « never » (jamais)" -#: ../src/common/config.py:285 +#: ../src/common/config.py:286 msgid "Optionally fix jingle output video framerate. Example: 10/1 or 25/2" msgstr "" +"Fixe éventuellement le nombre d'image par seconde pour la sortie video " +"jingle. Exemple : 10/1 ou 25/2" -#: ../src/common/config.py:286 +#: ../src/common/config.py:287 msgid "Optionally resize jingle output video. Example: 320x240" msgstr "" +"Redimenssionne éventuellement la sortie video jingle. Exemple : 320x240" -#: ../src/common/config.py:289 +#: ../src/common/config.py:290 msgid "" "If True, Gajim will try to use a STUN server when using jingle. The one in " "\"stun_server\" option, or the one given by the jabber server." @@ -4274,17 +4540,27 @@ msgstr "" "jingle. Celui défini dans l'option \"stun_server\", ou celui donné par le " "serveur jabber." -#: ../src/common/config.py:290 +#: ../src/common/config.py:291 msgid "STUN server to use when using jingle" msgstr "Serveur STUN a utiliser avec jingle" -#: ../src/common/config.py:291 +#: ../src/common/config.py:292 msgid "" "If True, Gajim will show affiliation of groupchat occupants by adding a " "colored square to the status icon" msgstr "" +"si vrai, Gajim affichera l'affiliation des occupant(e)s des salons de " +"discussions en ajoutant un carré coloré a l'icône d'état" + +#: ../src/common/config.py:293 +msgid "" +"Proxy used for all outgoing connections if the account does not have a " +"specific proxy configured" +msgstr "" +"Proxy utilisé pour toutes les connexions sortantes si le compte n'a pas de " +"proxy spécifique configuré" -#: ../src/common/config.py:304 +#: ../src/common/config.py:307 msgid "" "Priority will change automatically according to your status. Priorities are " "defined in autopriority_* options." @@ -4292,7 +4568,7 @@ msgstr "" "La priorité va changer automatiquement selon votre état. Les priorités sont " "définies dans les options autopriority_*." -#: ../src/common/config.py:312 +#: ../src/common/config.py:315 msgid "" "Status used to autoconnect as. Can be online, chat, away, xa, dnd, " "invisible. NOTE: this option is used only if restore_last_status is disabled" @@ -4302,41 +4578,41 @@ msgstr "" "(indisponible), dnd (Occupé(e)) ou Invisible. NOTE : cette option n'est " "utilisée que si l'option restore_last_status est désactivée" -#: ../src/common/config.py:313 +#: ../src/common/config.py:316 msgid "If enabled, restore the last status that was used." msgstr "Si activé, restaure le dernier statut qui était utilisé." -#: ../src/common/config.py:315 +#: ../src/common/config.py:318 msgid "" "If True, Contacts requesting authorization will be automatically accepted." msgstr "" "Si Vrai, les demandes d'autorisation de contact seront automatiquement " "acceptées." -#: ../src/common/config.py:316 +#: ../src/common/config.py:319 msgid "" "If False, this account will be disabled and will not appear in roster window." msgstr "" "Si Faux, ce compte sera désactivé et n'apparaîtra plus dans votre roster." -#: ../src/common/config.py:319 +#: ../src/common/config.py:322 msgid "" "If disabled, don't sign presences with GPG key, even if GPG is configured." msgstr "" "Si désactivé, ne pas signaler les présences avec une clef GPG, même si GPG " "est configuré." -#: ../src/common/config.py:321 +#: ../src/common/config.py:324 msgid "Enable ESessions encryption for this account." msgstr "Activer le chiffrage ESessions pour ce compte." -#: ../src/common/config.py:322 +#: ../src/common/config.py:325 msgid "Should Gajim automatically start an encrypted session when possible?" msgstr "" "Gajim doit-il commencer automatiquement une discussion chiffrée quand cela " "est possible ?" -#: ../src/common/config.py:323 +#: ../src/common/config.py:326 msgid "" "Ordered list (space separated) of connection type to try. Can contain tls, " "ssl or plain" @@ -4344,40 +4620,58 @@ msgstr "" "Liste ordonnée de types de connexion, séparés par des virgules, à essayer. " "Peut contenir tls, ssl ou plain." -#: ../src/common/config.py:324 +#: ../src/common/config.py:327 msgid "" -"Show a warning dialog before sending password on an plaintext connection." +"Show a warning dialog before sending password on an plaintext connection. " +"Can be 'warn', 'connect', 'disconnect'" msgstr "" "Afficher un message d'avertissement avant d'envoyer un mot de passe via une " -"connexion non-chiffrée." +"connexion non-chiffrée. Peut prendre les valeurs 'warn', 'connect', " +"'disconnect'" -#: ../src/common/config.py:325 +#: ../src/common/config.py:328 msgid "Show a warning dialog before using standard SSL library." msgstr "" "Afficher un message d'avertissement avant d'utiliser la librairie SSL " "standard." -#: ../src/common/config.py:326 -#, fuzzy +#: ../src/common/config.py:329 msgid "" "Show a warning dialog before sending PLAIN password over a plain connection." msgstr "" -"Afficher un message d'avertissement avant d'envoyer un mot de passe via une " -"connexion non-chiffrée." +"Afficher un message d'avertissement avant d'envoyer un mot de passe non-" +"chiffré via une connexion non-chiffrée." -#: ../src/common/config.py:328 +#: ../src/common/config.py:331 msgid "Space separated list of ssl errors to ignore." msgstr "Liste d'erreurs ssl, séparées par une virgule, à ignorer." #: ../src/common/config.py:337 +msgid "" +"Space separated list of JIDs for which you do not want to store logs. You " +"can also add account name to log nothing for this account." +msgstr "" +"Liste de jid, séparée par un espace, pour lesquels vous ne voulez pas " +"enregistrer les conversations. Vous pouvez également ajouter le nom d'un " +"compte pour ne rien enregistrer pour ce compte." + +#: ../src/common/config.py:338 +msgid "" +"Space separated list of JIDs for which you accept to not log conversations " +"if he does not want to." +msgstr "" +"Liste de jid, séparée par un espace, pour lesquels vous accepter de ne pas " +"enregistrer les conversations s'il ne veut pas." + +#: ../src/common/config.py:341 msgid "Whitespace sent after inactivity" msgstr "Espace envoyée après inactivité" -#: ../src/common/config.py:338 +#: ../src/common/config.py:342 msgid "XMPP ping sent after inactivity" msgstr "ping XMPP envoyé après inactivité" -#: ../src/common/config.py:342 +#: ../src/common/config.py:346 msgid "" "How many seconds to wait for the answer of ping alive packet before we try " "to reconnect." @@ -4386,11 +4680,11 @@ msgstr "" "Connexion avant de tenter de se connecter." #. yes, no, ask -#: ../src/common/config.py:346 +#: ../src/common/config.py:350 msgid "Jabberd2 workaround" msgstr "Contournement de bug de jabberd2" -#: ../src/common/config.py:349 +#: ../src/common/config.py:353 msgid "" "If checked, Gajim will use your IP and proxies defined in " "file_transfer_proxies option for file transfer." @@ -4398,26 +4692,35 @@ msgstr "" "Si cette case est cochée, Gajim utilisera votre IP et les proxies définis " "dans l'option file_transfer_proxies pour les transferts de fichiers." -#: ../src/common/config.py:363 +#: ../src/common/config.py:354 +msgid "" +"If True, Gajim will test file transfer proxies on startup to be sure it " +"works. Openfire's proxies are known to fail this test even if they work." +msgstr "" +"Si vrai, Gajim testera les proxys de transfert de fichiers au démarrage pour " +"être sûr qu'ils fonctionnent. Les proxys de Openfire sont connus pour " +"échouer à ce test, même s'ils fonctionnent" + +#: ../src/common/config.py:368 msgid "Answer to receipt requests" msgstr "Répondre aux demandes d'accusés de réception" -#: ../src/common/config.py:364 +#: ../src/common/config.py:369 msgid "Sent receipt requests" msgstr "Envoyer des demandes d'accusés de réception" -#: ../src/common/config.py:373 +#: ../src/common/config.py:378 msgid "" "Allow Gajim to send information about the operating system you are running." msgstr "" "Si cette case est cochée, Gajim autorisera les autres à détecter le système " "d'exploitation que vous utilisez" -#: ../src/common/config.py:374 +#: ../src/common/config.py:379 msgid "Allow Gajim to send your local time." msgstr "Autorise Gajim à envoyer votre heure." -#: ../src/common/config.py:375 +#: ../src/common/config.py:380 msgid "" "When negotiating an encrypted session, should Gajim assume you want your " "messages to be logged?" @@ -4425,19 +4728,47 @@ msgstr "" "Durant la négociation d'une session chiffrée, Gajim doit-il partir du " "principe que vous voulez archiver vos conversations ?" -#: ../src/common/config.py:378 +#: ../src/common/config.py:383 msgid "Message that is sent to contacts you want to add" msgstr "Message à envoyer aux contacts que vous souhaitez ajouter" -#: ../src/common/config.py:379 +#: ../src/common/config.py:384 msgid "Last time we syncronized with logs from server." msgstr "Date de la dernière synchronisation des logs avec le serveur." -#: ../src/common/config.py:441 +#: ../src/common/config.py:385 +msgid "" +"If enabled and if server supports this feature, Gajim will receive messages " +"sent and received by other resources." +msgstr "" +"Si activé et si le serveur supporte cette fonctionnalité, Gajim recevra les " +"messages envoyés et reçus par les autres resources." + +#: ../src/common/config.py:386 +msgid "" +"If enabled, Gajim will send your local IPs so your contact can connect to " +"your machine to transfer files." +msgstr "" +"Si activé, Gajim enverra vos IPs publiques pour que vos contacts puissent se " +"connecter à votre machine pour les transfert de fichiers." + +#: ../src/common/config.py:387 +msgid "Latest token for Oauth2 authentication." +msgstr "Dernier jeton pour l'authentification Oauth2." + +#: ../src/common/config.py:388 +msgid "client_id for Oauth2 authentication." +msgstr "client_id pour l'authentification Oauth2." + +#: ../src/common/config.py:389 +msgid "redirect_url for Oauth2 authentication." +msgstr "redirect_url pour l'authentification Oauth2." + +#: ../src/common/config.py:451 msgid "Is OpenPGP enabled for this contact?" msgstr "Est-ce que OpenPGP est activé pour ce contact ?" -#: ../src/common/config.py:442 +#: ../src/common/config.py:452 msgid "" "Should Gajim automatically start an encrypted session with this contact when " "possible?" @@ -4445,94 +4776,97 @@ msgstr "" "Gajim doit-il commencer automatiquement une discussion chiffrée avec ce " "contact quand cela est possible ?" -#: ../src/common/config.py:443 ../src/common/config.py:446 +#: ../src/common/config.py:453 ../src/common/config.py:456 msgid "Language for which we want to check misspelled words" msgstr "Langue dans laquelle faire la vérification orthographique" -#: ../src/common/config.py:449 +#: ../src/common/config.py:459 msgid "" -"State whether plugins should be activated on exit (this is saved on Gajim " +"State whether plugins should be activated on startup (this is saved on Gajim " "exit). This option SHOULD NOT be used to (de)activate plug-ins. Use GUI " "instead." msgstr "" +"Statue si le plugin doit être activée au démarrage (sauvegardé quand Gajim " +"s'eteint). Cette option NE DEVRAIT PAS être utilisée pour (dés)activer un " +"plugin. Utiliser l'interface graphique pour cela." -#: ../src/common/config.py:454 ../src/common/pep.py:157 +#: ../src/common/config.py:464 ../src/common/pep.py:157 msgid "Sleeping" msgstr "Dort" -#: ../src/common/config.py:455 +#: ../src/common/config.py:465 msgid "Back soon" msgstr "Bientôt de retour" -#: ../src/common/config.py:455 +#: ../src/common/config.py:465 msgid "Back in some minutes." msgstr "De retour dans quelques minutes." -#: ../src/common/config.py:456 ../src/common/pep.py:127 +#: ../src/common/config.py:466 ../src/common/pep.py:127 msgid "Eating" msgstr "Mange" -#: ../src/common/config.py:456 +#: ../src/common/config.py:466 msgid "I'm eating, so leave me a message." msgstr "Je mange, donc laissez moi un message." -#: ../src/common/config.py:457 +#: ../src/common/config.py:467 msgid "Movie" msgstr "Film" -#: ../src/common/config.py:457 +#: ../src/common/config.py:467 msgid "I'm watching a movie." msgstr "Je regarde un film." -#: ../src/common/config.py:458 ../src/common/pep.py:186 +#: ../src/common/config.py:468 ../src/common/pep.py:186 msgid "Working" msgstr "Travaille" -#: ../src/common/config.py:458 +#: ../src/common/config.py:468 msgid "I'm working." msgstr "Je travaille." -#: ../src/common/config.py:459 +#: ../src/common/config.py:469 msgid "Phone" msgstr "Téléphone" -#: ../src/common/config.py:459 +#: ../src/common/config.py:469 msgid "I'm on the phone." msgstr "Je suis au téléphone." -#: ../src/common/config.py:460 +#: ../src/common/config.py:470 msgid "Out" msgstr "Dehors" -#: ../src/common/config.py:460 +#: ../src/common/config.py:470 msgid "I'm out enjoying life." msgstr "Je suis sorti profiter de la vie." -#: ../src/common/config.py:471 +#: ../src/common/config.py:481 msgid "I'm available." msgstr "Disponible" -#: ../src/common/config.py:472 +#: ../src/common/config.py:482 msgid "I'm free for chat." msgstr "Disponible pour discuter" -#: ../src/common/config.py:473 ../src/config.py:1609 +#: ../src/common/config.py:483 ../src/config.py:1652 msgid "Be right back." msgstr "Revient de suite." -#: ../src/common/config.py:474 +#: ../src/common/config.py:484 msgid "I'm not available." msgstr "Non disponible" -#: ../src/common/config.py:475 +#: ../src/common/config.py:485 msgid "Do not disturb." msgstr "Ne pas déranger." -#: ../src/common/config.py:476 ../src/common/config.py:477 +#: ../src/common/config.py:486 ../src/common/config.py:487 msgid "Bye!" msgstr "Au revoir !" -#: ../src/common/config.py:487 +#: ../src/common/config.py:497 msgid "" "Sound to play when a group chat message contains one of the words in " "muc_highlight_words, or when a group chat message contains your nickname." @@ -4540,27 +4874,31 @@ msgstr "" "Son à jouer lorsqu'un message de salon contient un des mots de " "muc_highlight_words, ou lorsqu'un message de salon contient votre surnom." -#: ../src/common/config.py:488 +#: ../src/common/config.py:498 msgid "Sound to play when any MUC message arrives." msgstr "Son émis lors de l'arrivée d'un message de salon de discussion." -#: ../src/common/config.py:497 ../src/common/optparser.py:308 +#: ../src/common/config.py:507 ../src/common/optparser.py:310 msgid "green" msgstr "vert" -#: ../src/common/config.py:501 ../src/common/optparser.py:294 +#: ../src/common/config.py:511 ../src/common/optparser.py:296 msgid "grocery" msgstr "épicerie" -#: ../src/common/config.py:505 +#: ../src/common/config.py:515 msgid "human" msgstr "Humain" -#: ../src/common/config.py:509 +#: ../src/common/config.py:519 msgid "marine" msgstr "Marine" -#: ../src/common/connection_handlers_events.py:355 +#: ../src/common/config.py:526 +msgid "Tor" +msgstr "Tor" + +#: ../src/common/connection_handlers_events.py:367 #, python-format msgid "" "JID %s is not RFC compliant. It will not be added to your roster. Use roster " @@ -4570,25 +4908,23 @@ msgstr "" "à votre liste de contacts. Utilisez un outil de gestion de liste de contact " "tel que http://jru.jabberstudio.org pour le supprimer" -#: ../src/common/connection_handlers_events.py:784 +#: ../src/common/connection_handlers_events.py:799 #, python-format msgid "unsubscribe request from %s" msgstr "Requête de désinscription de la part de %s" -#: ../src/common/connection_handlers_events.py:868 -#: ../src/common/connection_handlers.py:339 -#: ../src/common/connection_handlers.py:943 -#: ../src/common/connection_handlers.py:1044 -#: ../src/common/connection_handlers.py:1701 ../src/common/connection.py:459 -#: ../src/common/logger.py:1124 ../src/gajim.py:385 +#: ../src/common/connection_handlers_events.py:884 +#: ../src/common/connection_handlers.py:334 +#: ../src/common/connection_handlers.py:946 +#: ../src/common/connection_handlers.py:1058 ../src/common/connection.py:453 +#: ../src/common/logger.py:1142 ../src/gajim.py:392 ../src/session.py:97 msgid "Disk Write Error" msgstr "Erreur d'Écriture du disque" -#: ../src/common/connection_handlers_events.py:872 -#: ../src/common/connection_handlers.py:946 -#: ../src/common/connection_handlers.py:1047 -#: ../src/common/connection_handlers.py:1704 ../src/common/connection.py:463 -#: ../src/common/logger.py:1127 ../src/gajim.py:204 ../src/session.py:98 +#: ../src/common/connection_handlers_events.py:888 +#: ../src/common/connection_handlers.py:949 +#: ../src/common/connection_handlers.py:1061 ../src/common/connection.py:457 +#: ../src/common/logger.py:1145 ../src/gajim.py:211 ../src/session.py:101 #, python-format msgid "" "The database file (%s) cannot be read. Try to repair it (see http://trac." @@ -4600,100 +4936,144 @@ msgstr "" #. Room has been destroyed. see #. http://www.xmpp.org/extensions/xep-0045.html#destroyroom -#: ../src/common/connection_handlers_events.py:893 +#: ../src/common/connection_handlers_events.py:909 msgid "Room has been destroyed" msgstr "Le salon de discussion a été détruit" -#: ../src/common/connection_handlers_events.py:901 +#: ../src/common/connection_handlers_events.py:917 #, python-format msgid "You can join this room instead: %s" msgstr "Vous pouvez rejoindre le salon %s à la place" -#: ../src/common/connection_handlers_events.py:974 -#: ../src/common/connection.py:258 ../src/config.py:2102 ../src/config.py:2111 -#: ../src/config.py:2179 ../src/config.py:3608 ../src/dataforms_widget.py:623 -#: ../src/dialogs.py:3049 +#: ../src/common/connection_handlers_events.py:1001 +#: ../src/common/connection_handlers_events.py:1038 +#: ../src/common/connection.py:263 ../src/config.py:2149 ../src/config.py:2158 +#: ../src/config.py:2226 ../src/config.py:3667 ../src/dataforms_widget.py:623 +#: ../src/dialogs.py:3095 msgid "Invalid Jabber ID" msgstr "Identifiant Jabber invalide" -#: ../src/common/connection_handlers_events.py:975 +#: ../src/common/connection_handlers_events.py:1002 +#: ../src/common/connection_handlers_events.py:1039 msgid "A message from a non-valid JID arrived, it has been ignored." msgstr "Un message d'un JID invalide a été reçu, il a été ignoré." -#: ../src/common/connection_handlers_events.py:1423 +#. ('MSGNOTSENT', account, (jid, ierror_msg, msg, time, session)) +#: ../src/common/connection_handlers_events.py:1064 +#: ../src/gui_interface.py:430 ../src/gui_interface.py:444 +#, python-format +msgid "error while sending %(message)s ( %(error)s )" +msgstr "erreur en envoyant %(message)s ( %(error)s )" + +#: ../src/common/connection_handlers_events.py:1498 #, python-format msgid "Unknown SSL error: %d" msgstr "Erreur SSL inconnue : %d" -#. single message -#: ../src/common/connection_handlers_events.py:1947 ../src/dialogs.py:2741 -#: ../src/notify.py:194 ../src/notify.py:423 +#: ../src/common/connection_handlers_events.py:2030 ../src/dialogs.py:2782 +#: ../src/notify.py:263 msgid "New Single Message" msgstr "Nouveau message simple" -#: ../src/common/connection_handlers_events.py:1949 ../src/notify.py:196 +#: ../src/common/connection_handlers_events.py:2032 #, python-format msgid "New Single Message from %(nickname)s" msgstr "Nouveau message simple de %(nickname)s" -#. private message -#: ../src/common/connection_handlers_events.py:1952 ../src/dialogs.py:2742 -#: ../src/notify.py:200 ../src/notify.py:424 +#: ../src/common/connection_handlers_events.py:2036 ../src/dialogs.py:2783 +#: ../src/notify.py:264 msgid "New Private Message" msgstr "Nouveau message privé" -#: ../src/common/connection_handlers_events.py:1954 ../src/notify.py:203 +#: ../src/common/connection_handlers_events.py:2038 #, python-format msgid "New Private Message from group chat %s" msgstr "Nouveau message privé dans le salon %s" -#: ../src/common/connection_handlers_events.py:1957 ../src/notify.py:205 +#: ../src/common/connection_handlers_events.py:2041 #, python-format msgid "%(nickname)s: %(message)s" msgstr "%(nickname)s : %(message)s" -#: ../src/common/connection_handlers_events.py:1960 ../src/notify.py:208 +#: ../src/common/connection_handlers_events.py:2044 #, python-format msgid "Messaged by %(nickname)s" msgstr "Message de %(nickname)s" -#. chat message -#: ../src/common/connection_handlers_events.py:1963 ../src/dialogs.py:2741 -#: ../src/notify.py:212 ../src/notify.py:423 +#: ../src/common/connection_handlers_events.py:2048 ../src/dialogs.py:2782 +#: ../src/notify.py:263 msgid "New Message" msgstr "Nouveau message" -#: ../src/common/connection_handlers_events.py:1965 ../src/notify.py:214 +#: ../src/common/connection_handlers_events.py:2050 #, python-format msgid "New Message from %(nickname)s" msgstr "Nouveau message de %(nickname)s" -#: ../src/common/connection_handlers.py:95 +#: ../src/common/connection_handlers_events.py:2179 +#, python-format +msgid "%(nick)s Changed Status" +msgstr "%(nick)s a changé d'état" + +#: ../src/common/connection_handlers_events.py:2181 +#: ../src/groupchat_control.py:205 ../src/groupchat_control.py:1765 +#: ../src/history_window.py:448 +#, python-format +msgid "%(nick)s is now %(status)s" +msgstr "%(nick)s est maintenant %(status)s" + +#: ../src/common/connection_handlers_events.py:2186 ../src/dialogs.py:2794 +#: ../src/notify.py:277 +msgid "Contact Changed Status" +msgstr "Le contact a changé d'état" + +#: ../src/common/connection_handlers_events.py:2188 +#, python-format +msgid "%(nickname)s Signed In" +msgstr "%(nickname)s s'est connecté(e)" + +#. default value +#: ../src/common/connection_handlers_events.py:2193 ../src/dialogs.py:2778 +#: ../src/notify.py:259 +msgid "Contact Signed In" +msgstr "Contact connecté" + +#: ../src/common/connection_handlers_events.py:2195 +#, python-format +msgid "%(nickname)s Signed Out" +msgstr "%(nickname)s s'est déconnecté(e)" + +#: ../src/common/connection_handlers_events.py:2200 ../src/dialogs.py:2780 +#: ../src/notify.py:261 +msgid "Contact Signed Out" +msgstr "Contact déconnecté" + +#: ../src/common/connection_handlers.py:88 #: ../src/common/zeroconf/connection_handlers_zeroconf.py:54 msgid "Unable to load idle module" msgstr "Impossible de charger le module d'inactivité" -#: ../src/common/connection_handlers.py:128 +#: ../src/common/connection_handlers.py:121 #, python-format msgid "Registration information for transport %s has not arrived in time" msgstr "" "L'information d'enregistrement pour la passerelle %s n'est pas arrivée à " "temps" -#: ../src/common/connection_handlers.py:135 +#: ../src/common/connection_handlers.py:129 msgid "Registration succeeded" msgstr "L'inscription a réussi" -#: ../src/common/connection_handlers.py:136 +#: ../src/common/connection_handlers.py:130 #, python-format msgid "Registration with agent %s succeeded" msgstr "Enregistrement avec l'agent %s réussi" -#: ../src/common/connection_handlers.py:144 +#: ../src/common/connection_handlers.py:139 msgid "Registration failed" msgstr "L'inscription a échoué" -#: ../src/common/connection_handlers.py:144 +#: ../src/common/connection_handlers.py:140 #, python-format msgid "" "Registration with agent %(agent)s failed with error %(error)s: %(error_msg)s" @@ -4701,170 +5081,169 @@ msgstr "" "L'enregistrement avec l'agent %(agent)s a échoué avec l'erreur %(error)s : " "%(error_msg)s" -#: ../src/common/connection_handlers.py:564 ../src/common/connection.py:1520 +#: ../src/common/connection_handlers.py:571 ../src/common/connection.py:1547 msgid "Invisibility not supported" msgstr "Invisibilité non-supportée" -#: ../src/common/connection_handlers.py:565 ../src/common/connection.py:1521 +#: ../src/common/connection_handlers.py:572 ../src/common/connection.py:1548 #, python-format msgid "Account %s doesn't support invisibility." msgstr "Le compte %s ne supporte pas l'invisibilité." -#: ../src/common/connection_handlers.py:1746 +#: ../src/common/connection_handlers.py:1720 msgid "I would like to add you to my roster." msgstr "Je souhaiterais vous ajouter à ma liste de contacts." -#: ../src/common/connection.py:68 +#: ../src/common/connection.py:70 msgid "Unable to get issuer certificate" msgstr "Impossible d'obtenir le certificat de l'émetteur " -#: ../src/common/connection.py:69 +#: ../src/common/connection.py:71 msgid "Unable to get certificate CRL" msgstr "Impossible d'obtenir un certificat CRL" -#: ../src/common/connection.py:70 +#: ../src/common/connection.py:72 msgid "Unable to decrypt certificate's signature" msgstr "Impossible de déchiffrer la signature du certificat" -#: ../src/common/connection.py:71 +#: ../src/common/connection.py:73 msgid "Unable to decrypt CRL's signature" msgstr "Impossible de déchiffrer la signature du CRL" -#: ../src/common/connection.py:72 +#: ../src/common/connection.py:74 msgid "Unable to decode issuer public key" msgstr "Impossible de déchiffrer la clef public de l'émetteur" -#: ../src/common/connection.py:73 +#: ../src/common/connection.py:75 msgid "Certificate signature failure" msgstr "Échec de la signature du certificat" -#: ../src/common/connection.py:74 +#: ../src/common/connection.py:76 msgid "CRL signature failure" msgstr "Échec de la signature CRL" -#: ../src/common/connection.py:75 +#: ../src/common/connection.py:77 msgid "Certificate is not yet valid" msgstr "Le certificat n'est pas encore valide" -#: ../src/common/connection.py:76 +#: ../src/common/connection.py:78 msgid "Certificate has expired" msgstr "Le certificat a expiré" -#: ../src/common/connection.py:77 +#: ../src/common/connection.py:79 msgid "CRL is not yet valid" msgstr "CRL n'est pas encore valide" -#: ../src/common/connection.py:78 +#: ../src/common/connection.py:80 msgid "CRL has expired" msgstr "CRL a expiré" -#: ../src/common/connection.py:79 +#: ../src/common/connection.py:81 msgid "Format error in certificate's notBefore field" msgstr "Erreur de format dans le champ notBefore du certificat" -#: ../src/common/connection.py:80 +#: ../src/common/connection.py:82 msgid "Format error in certificate's notAfter field" msgstr "Erreur de format dans le champ notAfter du certificat" -#: ../src/common/connection.py:81 +#: ../src/common/connection.py:83 msgid "Format error in CRL's lastUpdate field" msgstr "Erreur de format dans le champ lastUpdate du CRL" -#: ../src/common/connection.py:82 +#: ../src/common/connection.py:84 msgid "Format error in CRL's nextUpdate field" msgstr "Erreur de format dans le champ nextUpdate du CRL" -#: ../src/common/connection.py:83 +#: ../src/common/connection.py:85 msgid "Out of memory" msgstr "Mémoire insuffisante" -#: ../src/common/connection.py:84 +#: ../src/common/connection.py:86 msgid "Self signed certificate" msgstr "Certificat auto-signé" -#: ../src/common/connection.py:85 +#: ../src/common/connection.py:87 msgid "Self signed certificate in certificate chain" msgstr "Certificat auto-signé dans la chaîne de certificat" -#: ../src/common/connection.py:86 +#: ../src/common/connection.py:88 msgid "Unable to get local issuer certificate" msgstr "Impossible de récupérer le certificat de l'émeteur local" -#: ../src/common/connection.py:87 +#: ../src/common/connection.py:89 msgid "Unable to verify the first certificate" msgstr "Impossible de vérifier le premier certificat" -#: ../src/common/connection.py:88 +#: ../src/common/connection.py:90 msgid "Certificate chain too long" msgstr "Chaîne du certificat trop longue" -#: ../src/common/connection.py:89 +#: ../src/common/connection.py:91 msgid "Certificate revoked" msgstr "Certificat révoqué" -#: ../src/common/connection.py:90 +#: ../src/common/connection.py:92 msgid "Invalid CA certificate" msgstr "Certificat CA invalide" -#: ../src/common/connection.py:91 +#: ../src/common/connection.py:93 msgid "Path length constraint exceeded" msgstr "Longueur du chemin dépassée" -#: ../src/common/connection.py:92 +#: ../src/common/connection.py:94 msgid "Unsupported certificate purpose" msgstr "Objet du certificat non-supporté" -#: ../src/common/connection.py:93 +#: ../src/common/connection.py:95 msgid "Certificate not trusted" msgstr "Certificat non approuvé" -#: ../src/common/connection.py:94 +#: ../src/common/connection.py:96 msgid "Certificate rejected" msgstr "Certificat refusé" -#: ../src/common/connection.py:95 +#: ../src/common/connection.py:97 msgid "Subject issuer mismatch" msgstr "Décalage du sujet de l'émetteur" -#: ../src/common/connection.py:96 +#: ../src/common/connection.py:98 msgid "Authority and subject key identifier mismatch" msgstr "Décalage dans les clés d'identification de l'authorité et du sujet" -#: ../src/common/connection.py:97 +#: ../src/common/connection.py:99 msgid "Authority and issuer serial number mismatch" msgstr "Décalage dans les numéros de série de l'authorité et du sujet" -#: ../src/common/connection.py:98 +#: ../src/common/connection.py:100 msgid "Key usage does not include certificate signing" msgstr "L'utilisation de la clé n'inclut pas la signature d'un certificat" -#: ../src/common/connection.py:99 +#: ../src/common/connection.py:101 msgid "Application verification failure" msgstr "Echec de la vérification de l'application" -#: ../src/common/connection.py:259 ../src/dialogs.py:3050 +#: ../src/common/connection.py:264 ../src/dialogs.py:3096 #, python-format msgid "It is not possible to send a message to %s, this JID is not valid." msgstr "" "Il n'est pas possible d'envoyer un message à %s, ce JID n'est pas valide." -#: ../src/common/connection.py:281 +#: ../src/common/connection.py:286 msgid "Neither the remote presence is signed, nor a key was assigned." msgstr "Le présence distante n'est pas signée et aucune clef n'a été assignée." -#: ../src/common/connection.py:284 +#: ../src/common/connection.py:289 #, python-format msgid "The contact's key (%s) does not match the key assigned in Gajim." msgstr "" "La clef du contact (%s) ne correspond pas à la clef assignée dans Gajim." -#. we're not english -#. one in locale and one en -#: ../src/common/connection.py:337 +#. we're not english: one in locale and one en +#: ../src/common/connection.py:342 msgid "[This message is *encrypted* (See :XEP:`27`]" msgstr "[Ce message est *chiffré* (Voir : XEP:`27`]" -#: ../src/common/connection.py:446 +#: ../src/common/connection.py:440 #, python-format msgid "" "Subject: %(subject)s\n" @@ -4873,79 +5252,78 @@ msgstr "" "Sujet : %(subject)s\n" "%(message)s" -#: ../src/common/connection.py:839 +#: ../src/common/connection.py:854 #, python-format msgid "Connection with account \"%s\" has been lost" msgstr "La connexion du compte \"%s\" a été perdue" -#: ../src/common/connection.py:840 +#: ../src/common/connection.py:855 msgid "Reconnect manually." msgstr "Reconnecter manuellement." #. it's a new account #. wrong answer -#: ../src/common/connection.py:851 +#: ../src/common/connection.py:866 #, python-format msgid "Server %(name)s answered wrongly to register request: %(error)s" msgstr "" "Le serveur %(name)s a mal répondu à la requête d'enregistrement : %(error)s" #. requested config has changed since first connection -#: ../src/common/connection.py:893 +#: ../src/common/connection.py:908 #, python-format msgid "Server %s provided a different registration form" msgstr "Le serveur %s a fourni une forme d'inscription différente" -#. wrong answer -#: ../src/common/connection.py:909 +#: ../src/common/connection.py:925 msgid "Invalid answer" msgstr "Réponse non valide" -#: ../src/common/connection.py:910 +#: ../src/common/connection.py:926 #, python-format msgid "Transport %(name)s answered wrongly to register request: %(error)s" msgstr "" "La passerelle %(name)s a mal répondu à la requête d'enregistrement : " "%(error)s" -#: ../src/common/connection.py:1198 ../src/common/connection.py:1332 -#: ../src/common/connection.py:1941 -#: ../src/common/zeroconf/connection_zeroconf.py:203 +#: ../src/common/connection.py:1201 ../src/common/connection.py:1356 +#: ../src/common/connection.py:1983 +#: ../src/common/zeroconf/connection_zeroconf.py:205 #, python-format msgid "Could not connect to \"%s\"" msgstr "Impossible de se connecter à \"%s\"" -#: ../src/common/connection.py:1199 ../src/gui_interface.py:562 +#: ../src/common/connection.py:1202 ../src/gui_interface.py:539 msgid "Check your connection or try again later." msgstr "Vérifiez votre connexion ou réessayez plus tard." -#: ../src/common/connection.py:1204 +#: ../src/common/connection.py:1207 #, python-format msgid "Server replied: %s" msgstr "le serveur a répondu : %s" -#: ../src/common/connection.py:1217 +#: ../src/common/connection.py:1222 msgid "Connection to proxy failed" msgstr "La connexion au proxy a échoué" -#: ../src/common/connection.py:1249 ../src/common/connection.py:1311 +#: ../src/common/connection.py:1260 ../src/common/connection.py:1332 #, python-format msgid "Could not connect to account %s" msgstr "Impossible de se connecter au compte %s" -#: ../src/common/connection.py:1250 ../src/common/connection.py:1312 +#: ../src/common/connection.py:1261 ../src/common/connection.py:1333 #, python-format msgid "Connection with account %s has been lost. Retry connecting." msgstr "" "La connexion avec le compte %s a été perdue. Essayez de vous connecter à " "nouveau." -#: ../src/common/connection.py:1275 +#: ../src/common/connection.py:1286 #, python-format msgid "The authenticity of the %s certificate could be invalid." msgstr "L'authentification du certificat %s peut être invalide." -#: ../src/common/connection.py:1278 +#: ../src/common/connection.py:1289 #, python-format msgid "" "\n" @@ -4954,7 +5332,7 @@ msgstr "" "\n" "Erreur SSL : <b>%s</b>" -#: ../src/common/connection.py:1280 +#: ../src/common/connection.py:1291 #, python-format msgid "" "\n" @@ -4963,24 +5341,33 @@ msgstr "" "\n" "Erreur SSL inconnue : %d" -#: ../src/common/connection.py:1333 +#: ../src/common/connection.py:1314 +#, python-format +msgid "" +"The authenticity of the %s certificate could be invalid.\n" +"The certificate does not cover this domain." +msgstr "" +"L'authentification du certificat %s peut être invalide.\n" +"Le certificat ne couvre pas ce domaine." + +#: ../src/common/connection.py:1357 msgid "Check your connection or try again later" msgstr "Vérifiez votre connexion ou réessayer plus tard" -#: ../src/common/connection.py:1367 +#: ../src/common/connection.py:1392 #, python-format msgid "Authentication failed with \"%s\"" msgstr "Echec de l'authentification avec \"%s\"" -#: ../src/common/connection.py:1369 +#: ../src/common/connection.py:1393 msgid "Please check your login and password for correctness." msgstr "Vérifiez si votre identifiant et votre mot de passe sont corrects." -#: ../src/common/connection.py:1442 +#: ../src/common/connection.py:1468 msgid "Error while removing privacy list" msgstr "Une erreur s'est produite pendant la suppression de la liste privée" -#: ../src/common/connection.py:1443 +#: ../src/common/connection.py:1469 #, python-format msgid "" "Privacy list %s has not been removed. It is maybe active in one of your " @@ -4989,43 +5376,43 @@ msgstr "" "La liste privée %s n'a pas été supprimée. Elle est peut-être active dans une " "des ressources connectées. Désactivez la et réessayez." -#: ../src/common/connection.py:1808 +#: ../src/common/connection.py:1850 #, python-format msgid "Sent contact: \"%s\" (%s)" msgstr "Contact envoyé : « %s » (%s)" -#: ../src/common/connection.py:1811 +#: ../src/common/connection.py:1853 msgid "Sent contacts:" msgstr "Contacts envoyés :" -#: ../src/common/connection.py:1958 ../src/common/connection.py:1981 +#: ../src/common/connection.py:2000 ../src/common/connection.py:2023 msgid "Not fetched because of invisible status" msgstr "Non récupéré à cause du statut invisible" -#: ../src/common/connection.py:2511 +#: ../src/common/connection.py:2583 msgid "Unregister failed" msgstr "La désinscription a échoué" -#: ../src/common/connection.py:2512 +#: ../src/common/connection.py:2584 #, python-format msgid "Unregistration with server %(server)s failed: %(error)s" msgstr "Le désabonnement du server %(server)s a échoué : %(error)s" -#: ../src/common/contacts.py:135 ../src/common/helpers.py:60 -#: ../src/gui_interface.py:505 +#: ../src/common/contacts.py:126 ../src/common/helpers.py:67 +#: ../src/gui_interface.py:482 msgid "Observers" msgstr "Observateurs" -#: ../src/common/contacts.py:139 ../src/common/contacts.py:366 -#: ../src/common/helpers.py:60 ../src/disco.py:120 ../src/disco.py:121 -#: ../src/disco.py:1517 ../src/roster_window.py:856 -#: ../src/roster_window.py:1557 ../src/roster_window.py:1645 -#: ../src/roster_window.py:1647 ../src/roster_window.py:1809 -#: ../src/roster_window.py:2490 +#: ../src/common/contacts.py:130 ../src/common/contacts.py:358 +#: ../src/common/helpers.py:67 ../src/disco.py:120 ../src/disco.py:121 +#: ../src/disco.py:1517 ../src/roster_window.py:859 +#: ../src/roster_window.py:1556 ../src/roster_window.py:1660 +#: ../src/roster_window.py:1662 ../src/roster_window.py:1824 +#: ../src/roster_window.py:2514 msgid "Transports" msgstr "Passerelles" -#: ../src/common/contacts.py:374 +#: ../src/common/contacts.py:366 msgid "Not in roster" msgstr "Pas dans la liste" @@ -5250,273 +5637,290 @@ msgstr "Fin de la semaine" msgid "Weekend!" msgstr "Fin de semaine !" -#: ../src/common/helpers.py:151 +#: ../src/common/helpers.py:158 msgid "Username must be between 1 and 1023 chars" msgstr "Le nom d'utilisateur doit comprendre entre 1 et 1023 caractères" -#: ../src/common/helpers.py:156 +#: ../src/common/helpers.py:163 msgid "Invalid character in username." msgstr "Caractère non valide dans le nom d'utilisateur." -#: ../src/common/helpers.py:162 +#: ../src/common/helpers.py:169 msgid "Server must be between 1 and 1023 chars" msgstr "Le nom de serveur doit comprendre entre 1 et 1023 caractères" -#: ../src/common/helpers.py:167 +#: ../src/common/helpers.py:174 msgid "Invalid character in hostname." msgstr "Caractère non valide dans le nom d'hôte." -#: ../src/common/helpers.py:169 +#: ../src/common/helpers.py:176 msgid "Server address required." msgstr "Adresse du serveur requise." -#: ../src/common/helpers.py:173 +#: ../src/common/helpers.py:180 msgid "Resource must be between 1 and 1023 chars" msgstr "La ressource doit comprendre entre 1 et 1023 caractères" -#: ../src/common/helpers.py:178 +#: ../src/common/helpers.py:185 msgid "Invalid character in resource." msgstr "Caractère non valide dans la ressource." -#: ../src/common/helpers.py:218 +#: ../src/common/helpers.py:225 msgid "_Busy" msgstr "O_ccupé(e)" -#: ../src/common/helpers.py:220 ../src/tooltips.py:195 +#: ../src/common/helpers.py:227 ../src/tooltips.py:196 msgid "Busy" msgstr "Occupé(e)" -#: ../src/common/helpers.py:223 +#: ../src/common/helpers.py:230 msgid "_Not Available" msgstr "_Non disponible" -#: ../src/common/helpers.py:225 ../src/tooltips.py:197 +#: ../src/common/helpers.py:232 ../src/tooltips.py:198 msgid "Not Available" msgstr "Non disponible" -#: ../src/common/helpers.py:228 +#: ../src/common/helpers.py:235 msgid "_Free for Chat" msgstr "Dis_ponible pour discuter" -#: ../src/common/helpers.py:230 ../src/tooltips.py:191 +#: ../src/common/helpers.py:237 ../src/tooltips.py:192 msgid "Free for Chat" msgstr "Disponible pour discuter" -#: ../src/common/helpers.py:233 +#: ../src/common/helpers.py:240 msgid "?user status:_Available" msgstr "?user status:_Disponible" -#: ../src/common/helpers.py:235 ../src/tooltips.py:189 +#: ../src/common/helpers.py:242 ../src/tooltips.py:190 msgid "?user status:Available" msgstr "?user status:Disponible" -#: ../src/common/helpers.py:237 +#: ../src/common/helpers.py:244 msgid "Connecting" msgstr "Connexion" -#: ../src/common/helpers.py:240 +#: ../src/common/helpers.py:247 msgid "A_way" msgstr "_Absent(e)" -#: ../src/common/helpers.py:245 +#: ../src/common/helpers.py:252 msgid "_Offline" msgstr "Déc_onnecté(e)" -#: ../src/common/helpers.py:247 ../src/tooltips.py:199 +#: ../src/common/helpers.py:254 ../src/tooltips.py:200 msgid "Offline" msgstr "Déconnecté(e)" -#: ../src/common/helpers.py:250 +#: ../src/common/helpers.py:257 msgid "_Invisible" msgstr "_Invisible" -#: ../src/common/helpers.py:252 +#: ../src/common/helpers.py:259 msgid "Invisible" msgstr "Invisible" -#: ../src/common/helpers.py:256 +#: ../src/common/helpers.py:263 msgid "?contact has status:Unknown" msgstr "Inconnu" -#: ../src/common/helpers.py:258 +#: ../src/common/helpers.py:265 msgid "?contact has status:Has errors" msgstr "en erreur" -#: ../src/common/helpers.py:263 +#: ../src/common/helpers.py:270 msgid "?Subscription we already have:None" msgstr "Aucune" -#: ../src/common/helpers.py:265 +#: ../src/common/helpers.py:272 msgid "To" msgstr "À" -#: ../src/common/helpers.py:267 +#: ../src/common/helpers.py:274 msgid "From" msgstr "De" -#: ../src/common/helpers.py:269 +#: ../src/common/helpers.py:276 msgid "Both" msgstr "Les deux" -#: ../src/common/helpers.py:277 +#: ../src/common/helpers.py:284 msgid "?Ask (for Subscription):None" msgstr "Aucune" -#: ../src/common/helpers.py:279 +#: ../src/common/helpers.py:286 msgid "Subscribe" msgstr "S'inscrire" -#: ../src/common/helpers.py:288 +#: ../src/common/helpers.py:295 msgid "?Group Chat Contact Role:None" msgstr "Aucun" -#: ../src/common/helpers.py:291 +#: ../src/common/helpers.py:298 msgid "Moderators" msgstr "Modérateurs" -#: ../src/common/helpers.py:293 +#: ../src/common/helpers.py:300 msgid "Moderator" msgstr "Modérateur" -#: ../src/common/helpers.py:296 +#: ../src/common/helpers.py:303 msgid "Participants" msgstr "Participants" -#: ../src/common/helpers.py:298 +#: ../src/common/helpers.py:305 msgid "Participant" msgstr "Participant" -#: ../src/common/helpers.py:301 +#: ../src/common/helpers.py:308 msgid "Visitors" msgstr "Visiteurs" -#: ../src/common/helpers.py:303 +#: ../src/common/helpers.py:310 msgid "Visitor" msgstr "Visiteur" -#: ../src/common/helpers.py:309 ../src/tooltips.py:210 +#: ../src/common/helpers.py:316 ../src/tooltips.py:211 msgid "?Group Chat Contact Affiliation:None" msgstr "?Group Chat Contact Affiliation:Aucune" -#: ../src/common/helpers.py:311 ../src/tooltips.py:216 +#: ../src/common/helpers.py:318 ../src/tooltips.py:217 msgid "Owner" msgstr "Propriétaire" -#: ../src/common/helpers.py:313 ../src/tooltips.py:214 +#: ../src/common/helpers.py:320 ../src/tooltips.py:215 msgid "Administrator" msgstr "Administrateur" -#: ../src/common/helpers.py:315 ../src/tooltips.py:212 +#: ../src/common/helpers.py:322 ../src/tooltips.py:213 msgid "Member" msgstr "Membre" -#: ../src/common/helpers.py:354 +#: ../src/common/helpers.py:361 msgid "is paying attention to the conversation" msgstr "prête attention à la conversation" -#: ../src/common/helpers.py:356 +#: ../src/common/helpers.py:363 msgid "is doing something else" msgstr "fait quelque chose d'autre" -#: ../src/common/helpers.py:358 +#: ../src/common/helpers.py:365 msgid "is composing a message..." msgstr "écrit un message..." #. paused means he or she was composing but has stopped for a while -#: ../src/common/helpers.py:361 +#: ../src/common/helpers.py:368 msgid "paused composing a message" msgstr "a arrêté d'écrire un message" -#: ../src/common/helpers.py:363 +#: ../src/common/helpers.py:370 msgid "has closed the chat window or tab" msgstr "a fermé la fenêtre ou l'onglet de discussion" #. GiB means gibibyte -#: ../src/common/helpers.py:628 +#: ../src/common/helpers.py:648 #, python-format msgid "%s GiB" msgstr "%s Gio" #. GB means gigabyte -#: ../src/common/helpers.py:631 +#: ../src/common/helpers.py:651 #, python-format msgid "%s GB" msgstr "%s Go" #. MiB means mibibyte -#: ../src/common/helpers.py:635 +#: ../src/common/helpers.py:655 #, python-format msgid "%s MiB" msgstr "%s Mio" #. MB means megabyte -#: ../src/common/helpers.py:638 +#: ../src/common/helpers.py:658 #, python-format msgid "%s MB" msgstr "%s Mo" #. KiB means kibibyte -#: ../src/common/helpers.py:642 +#: ../src/common/helpers.py:662 #, python-format msgid "%s KiB" msgstr "%s Kio" #. KB means kilo bytes -#: ../src/common/helpers.py:645 +#: ../src/common/helpers.py:665 #, python-format msgid "%s KB" msgstr "%s Ko" #. B means bytes -#: ../src/common/helpers.py:648 +#: ../src/common/helpers.py:668 #, python-format msgid "%s B" msgstr "%s o" -#: ../src/common/helpers.py:1099 ../src/common/helpers.py:1106 +#: ../src/common/helpers.py:1119 ../src/common/helpers.py:1126 #, python-format msgid "%d message pending" msgid_plural "%d messages pending" msgstr[0] "%d message en attente" msgstr[1] "%d messages en attente" -#: ../src/common/helpers.py:1112 +#: ../src/common/helpers.py:1132 #, python-format msgid " from room %s" msgstr " du salon %s" -#: ../src/common/helpers.py:1115 ../src/common/helpers.py:1132 +#: ../src/common/helpers.py:1135 ../src/common/helpers.py:1152 #, python-format msgid " from user %s" msgstr "de l'utilisateur %s" -#: ../src/common/helpers.py:1117 +#: ../src/common/helpers.py:1137 #, python-format msgid " from %s" msgstr "de %s" -#: ../src/common/helpers.py:1124 ../src/common/helpers.py:1130 +#: ../src/common/helpers.py:1144 ../src/common/helpers.py:1150 #, python-format msgid "%d event pending" msgid_plural "%d events pending" msgstr[0] "%d évènement en attente" msgstr[1] "%d événements en attente" -#: ../src/common/helpers.py:1162 +#: ../src/common/helpers.py:1182 #, python-format msgid "Gajim - %s" msgstr "Gajim - %s" -#: ../src/common/helpers.py:1341 +#: ../src/common/helpers.py:1361 msgid "Hello, I am $name." msgstr "Bonjour, je m'appelle $name." -#: ../src/common/jingle_rtp.py:107 +#: ../src/common/helpers.py:1471 ../src/common/helpers.py:1480 +#: ../src/common/helpers.py:1534 +msgid "Timeout loading image" +msgstr "Délai du chargement de l'image dépassé" + +#: ../src/common/helpers.py:1490 ../src/common/helpers.py:1532 +msgid "Image is too big" +msgstr "L'image est trop grande" + +#: ../src/common/helpers.py:1500 +msgid "PyCURL is not installed" +msgstr "PyCURL n'est pas installé" + +#: ../src/common/helpers.py:1536 +msgid "Error loading image" +msgstr "Erreur lors du chargement de l'image" + +#: ../src/common/jingle_rtp.py:109 #, python-format msgid "%s configuration error" msgstr "%s erreur de configuration" -#: ../src/common/jingle_rtp.py:108 +#: ../src/common/jingle_rtp.py:110 #, python-format msgid "" "Couldn't setup %s. Check your configuration.\n" @@ -5535,11 +5939,11 @@ msgstr "" "L'error était :\n" "%s" -#: ../src/common/jingle_rtp.py:205 +#: ../src/common/jingle_rtp.py:208 msgid "GStreamer error" msgstr "Erreur GStreamer" -#: ../src/common/jingle_rtp.py:206 +#: ../src/common/jingle_rtp.py:208 #, python-format msgid "" "Error: %s\n" @@ -5548,19 +5952,19 @@ msgstr "" "Message d'erreur : %s\n" "Debug : %s" -#: ../src/common/jingle_rtp.py:335 +#: ../src/common/jingle_rtp.py:338 msgid "audio input" msgstr "Entrée audio" -#: ../src/common/jingle_rtp.py:338 +#: ../src/common/jingle_rtp.py:341 msgid "audio output" msgstr "Sortie audio" -#: ../src/common/jingle_rtp.py:381 +#: ../src/common/jingle_rtp.py:384 msgid "video input" msgstr "Entrée vidéo" -#: ../src/common/jingle_rtp.py:390 +#: ../src/common/jingle_rtp.py:393 msgid "video output" msgstr "Sortie audio" @@ -5614,7 +6018,7 @@ msgstr "Pulse : %s" #: ../src/common/multimedia_helpers.py:77 #: ../src/common/multimedia_helpers.py:105 msgid "Fake audio output" -msgstr "" +msgstr "Sortie audio feinte" #. Test src #: ../src/common/multimedia_helpers.py:90 @@ -5638,16 +6042,18 @@ msgid "X Window System (without Xv)" msgstr "X Window System (without Xv)" #. we talk about a file -#: ../src/common/optparser.py:53 +#. we talk about file +#: ../src/common/optparser.py:53 ../src/gtkgui_helpers.py:203 +#: ../src/gtkgui_helpers.py:219 #, python-format -msgid "error: cannot open %s for reading" -msgstr "erreur : impossible d'ouvrir %s en lecture" +msgid "Error: cannot open %s for reading" +msgstr "Erreur : impossible d'ouvrir %s en lecture" -#: ../src/common/optparser.py:303 ../src/common/optparser.py:304 +#: ../src/common/optparser.py:305 ../src/common/optparser.py:306 msgid "cyan" msgstr "cyan" -#: ../src/common/optparser.py:383 +#: ../src/common/optparser.py:385 msgid "migrating logs database to indices" msgstr "migration de la base de données de l'historique vers des index" @@ -6328,11 +6734,11 @@ msgstr "" "[Ceci fait partie d'une session chiffrée. Si vous voyez ce message, un " "problème a eu lieu.]" -#: ../src/common/zeroconf/connection_zeroconf.py:191 +#: ../src/common/zeroconf/connection_zeroconf.py:193 msgid "Avahi error" msgstr "Erreur d'Avahi" -#: ../src/common/zeroconf/connection_zeroconf.py:192 +#: ../src/common/zeroconf/connection_zeroconf.py:193 #, python-format msgid "" "%s\n" @@ -6341,43 +6747,45 @@ msgstr "" "%s\n" "La messagerie en « link-local » pourrait ne pas fonctionner correctement." -#: ../src/common/zeroconf/connection_zeroconf.py:204 +#: ../src/common/zeroconf/connection_zeroconf.py:206 msgid "Please check if Avahi or Bonjour is installed." msgstr "Veuillez vérifier si Avahi ou Bonjour sont installés." -#: ../src/common/zeroconf/connection_zeroconf.py:214 -#: ../src/common/zeroconf/connection_zeroconf.py:218 +#: ../src/common/zeroconf/connection_zeroconf.py:216 +#: ../src/common/zeroconf/connection_zeroconf.py:220 msgid "Could not start local service" msgstr "Impossible de lancer le service local" -#: ../src/common/zeroconf/connection_zeroconf.py:215 +#: ../src/common/zeroconf/connection_zeroconf.py:217 #, python-format msgid "Unable to bind to port %d." msgstr "Impossible de débloquer le port %d." -#: ../src/common/zeroconf/connection_zeroconf.py:219 -#: ../src/common/zeroconf/connection_zeroconf.py:303 -#: ../src/common/zeroconf/connection_zeroconf.py:316 -#: ../src/common/zeroconf/connection_zeroconf.py:332 +#: ../src/common/zeroconf/connection_zeroconf.py:221 +#: ../src/common/zeroconf/connection_zeroconf.py:305 +#: ../src/common/zeroconf/connection_zeroconf.py:318 +#: ../src/common/zeroconf/connection_zeroconf.py:334 msgid "Please check if avahi-daemon is running." msgstr "Vérifiez si avahi-daemon est actif." -#: ../src/common/zeroconf/connection_zeroconf.py:302 -#: ../src/common/zeroconf/connection_zeroconf.py:315 -#: ../src/common/zeroconf/connection_zeroconf.py:331 +#: ../src/common/zeroconf/connection_zeroconf.py:304 +#: ../src/common/zeroconf/connection_zeroconf.py:317 +#: ../src/common/zeroconf/connection_zeroconf.py:333 #, python-format msgid "Could not change status of account \"%s\"" msgstr "Impossible de changer l'état du compte « %s »" -#: ../src/common/zeroconf/connection_zeroconf.py:353 +#: ../src/common/zeroconf/connection_zeroconf.py:352 +#: ../src/common/zeroconf/connection_zeroconf.py:392 msgid "Your message could not be sent." msgstr "Votre message n'a pas pu être envoyé." -#: ../src/common/zeroconf/connection_zeroconf.py:367 +#: ../src/common/zeroconf/connection_zeroconf.py:366 +#: ../src/common/zeroconf/connection_zeroconf.py:406 msgid "Contact is offline. Your message could not be sent." msgstr "Le destinataire est déconnecté. Votre message n'a pas pu être envoyé." -#: ../src/common/zeroconf/connection_zeroconf.py:395 +#: ../src/common/zeroconf/connection_zeroconf.py:433 msgid "" "Connection to host could not be established: Timeout while sending data." msgstr "" @@ -6390,24 +6798,24 @@ msgstr "" msgid "Error while adding service. %s" msgstr "Erreur en ajoutant le service. %s" -#: ../src/config.py:406 +#: ../src/config.py:407 msgid "Default Message" msgstr "Message par défaut" -#: ../src/config.py:415 +#: ../src/config.py:416 msgid "Enabled" msgstr "Activé" -#: ../src/config.py:468 ../src/config.py:472 ../src/config.py:3105 +#: ../src/config.py:469 ../src/config.py:473 ../src/config.py:3159 msgid "Default" msgstr "Par défaut" -#: ../src/config.py:746 ../src/dialogs.py:1493 +#: ../src/config.py:757 ../src/dialogs.py:1493 #, python-format msgid "Dictionary for lang %s not available" msgstr "Le dictionnaire pour la langue %s est indisponible" -#: ../src/config.py:747 +#: ../src/config.py:758 #, python-format msgid "" "You have to install %s dictionary to use spellchecking, or choose another " @@ -6416,215 +6824,215 @@ msgstr "" "Vous devez installer le dictionnaire %s pour la vérification orthographique, " "ou choisir un autre langage en paramétrant l'option speller_language." -#: ../src/config.py:1223 +#: ../src/config.py:1238 msgid "status message title" msgstr "titre du message d'état" -#: ../src/config.py:1223 +#: ../src/config.py:1238 msgid "status message text" msgstr "texte du message d'état :" #. Name column -#: ../src/config.py:1523 ../src/dialogs.py:2498 ../src/dialogs.py:2565 -#: ../src/dialogs.py:3352 ../src/disco.py:886 ../src/disco.py:1744 -#: ../src/disco.py:2046 ../src/history_window.py:90 +#: ../src/config.py:1566 ../src/dialogs.py:2539 ../src/dialogs.py:2606 +#: ../src/dialogs.py:3398 ../src/disco.py:886 ../src/disco.py:1744 +#: ../src/disco.py:2046 ../src/history_window.py:91 msgid "Name" msgstr "Nom" -#: ../src/config.py:1618 +#: ../src/config.py:1661 msgid "Relogin now?" msgstr "Reconnecter maintenant ?" -#: ../src/config.py:1619 +#: ../src/config.py:1662 msgid "If you want all the changes to apply instantly, you must relogin." msgstr "" "Si vous voulez que vos changements soit appliqués immédiatement, vous devez " "vous reconnecter." -#: ../src/config.py:1773 ../src/config.py:1902 +#: ../src/config.py:1816 ../src/config.py:1949 msgid "OpenPGP is not usable on this computer" msgstr "OpenPGP n'est pas utilisable sur cet ordinateur" -#: ../src/config.py:1942 ../src/config.py:1989 +#: ../src/config.py:1989 ../src/config.py:2036 msgid "Unread events" msgstr "Événements non lus" -#: ../src/config.py:1943 +#: ../src/config.py:1990 msgid "Read all pending events before removing this account." msgstr "Lisez tous les événements avant de supprimer ce compte." -#: ../src/config.py:1972 +#: ../src/config.py:2019 #, python-format msgid "You have opened chat in account %s" msgstr "Vous avez une conversation ouverte dans le compte %s" -#: ../src/config.py:1973 +#: ../src/config.py:2020 msgid "All chat and groupchat windows will be closed. Do you want to continue?" msgstr "" "Toutes les fenêtres de conversation et de salons de discussion seront " "fermées. Voulez-vous continuer ?" -#: ../src/config.py:1985 ../src/config.py:2521 ../src/config.py:2557 +#: ../src/config.py:2032 ../src/config.py:2574 ../src/config.py:2611 msgid "You are currently connected to the server" msgstr "Vous êtes actuellement connecté au serveur" -#: ../src/config.py:1986 +#: ../src/config.py:2033 msgid "To change the account name, you must be disconnected." msgstr "Pour changer le nom du compte, vous devez être déconnecté." -#: ../src/config.py:1990 +#: ../src/config.py:2037 msgid "To change the account name, you must read all pending events." msgstr "Pour changer le nom du compte, vous devez lire tous ses événements." -#: ../src/config.py:1996 +#: ../src/config.py:2043 msgid "Account Name Already Used" msgstr "Nom de Compte déjà utilisé" -#: ../src/config.py:1997 +#: ../src/config.py:2044 msgid "" "This name is already used by another of your accounts. Please choose another " "name." msgstr "" "Ce nom est déjà utilisé par un autre de vos comptes. Choisissez un autre nom." -#: ../src/config.py:2001 ../src/config.py:2005 +#: ../src/config.py:2048 ../src/config.py:2052 msgid "Invalid account name" msgstr "Nom de compte invalide" -#: ../src/config.py:2002 +#: ../src/config.py:2049 msgid "Account name cannot be empty." msgstr "Le nom du compte ne peut pas être vide." -#: ../src/config.py:2006 +#: ../src/config.py:2053 msgid "Account name cannot contain spaces." msgstr "Le nom du compte ne peut pas contenir d'espaces." -#: ../src/config.py:2083 +#: ../src/config.py:2130 msgid "Rename Account" msgstr "Renommer le compte" -#: ../src/config.py:2084 +#: ../src/config.py:2131 #, python-format msgid "Enter a new name for account %s" msgstr "Entrez un nouveau nom pour le compte %s" -#: ../src/config.py:2112 +#: ../src/config.py:2159 msgid "A Jabber ID must be in the form \"user@servername\"." msgstr "Un Identifiant Jabber doit être de la forme \"user@servername\"." -#: ../src/config.py:2329 ../src/config.py:3654 +#: ../src/config.py:2382 ../src/config.py:3713 msgid "Invalid entry" msgstr "Entrée invalide" -#: ../src/config.py:2330 ../src/config.py:3655 +#: ../src/config.py:2383 ../src/config.py:3714 msgid "Custom port must be a port number." msgstr "Le port personnalisé doit être un numéro de port" -#: ../src/config.py:2351 +#: ../src/config.py:2404 msgid "Failed to get secret keys" msgstr "Erreur en récupérant les clés secrètes" -#: ../src/config.py:2352 +#: ../src/config.py:2405 msgid "There is no OpenPGP secret key available." msgstr "Aucune clef OpenPGP disponible." -#: ../src/config.py:2386 +#: ../src/config.py:2439 msgid "OpenPGP Key Selection" msgstr "Sélection d'une clé OpenPGP" -#: ../src/config.py:2387 +#: ../src/config.py:2440 msgid "Choose your OpenPGP key" msgstr "Choisissez votre clé OpenPGP" -#: ../src/config.py:2394 +#: ../src/config.py:2447 msgid "No such account available" msgstr "Compte non disponible" -#: ../src/config.py:2395 +#: ../src/config.py:2448 msgid "You must create your account before editing your personal information." msgstr "Vous devez d'abord créer votre compte avant d'éditer vos informations." -#: ../src/config.py:2402 ../src/dialogs.py:2251 ../src/dialogs.py:2487 -#: ../src/dialogs.py:2675 ../src/disco.py:515 ../src/profile_window.py:361 +#: ../src/config.py:2455 ../src/dialogs.py:2290 ../src/dialogs.py:2528 +#: ../src/dialogs.py:2716 ../src/disco.py:515 ../src/profile_window.py:361 msgid "You are not connected to the server" msgstr "Vous n'êtes pas connecté au serveur" -#: ../src/config.py:2403 +#: ../src/config.py:2456 msgid "Without a connection, you can not edit your personal information." msgstr "Vous devez être connecté pour éditer vos informations." -#: ../src/config.py:2407 +#: ../src/config.py:2460 msgid "Your server doesn't support Vcard" msgstr "Votre serveur ne supporte pas les Vcard" -#: ../src/config.py:2408 +#: ../src/config.py:2461 msgid "Your server can't save your personal information." msgstr "Votre serveur ne peut enregistrer d'informations personnelles." -#: ../src/config.py:2522 ../src/config.py:2558 +#: ../src/config.py:2575 ../src/config.py:2612 msgid "To disable the account, you must be disconnected." msgstr "Afin de désactiver un compte vous devez être déconnecté." -#: ../src/config.py:2527 +#: ../src/config.py:2581 msgid "Account Local already exists." msgstr "Ce compte existe déjà localement." -#: ../src/config.py:2528 +#: ../src/config.py:2582 msgid "Please rename or remove it before enabling link-local messaging." msgstr "" "Veuillez le renommer et l'enlever avant d'activer la messagerie link-local." -#: ../src/config.py:2685 +#: ../src/config.py:2739 #, python-format msgid "Edit %s" msgstr "_Éditer %s" -#: ../src/config.py:2687 +#: ../src/config.py:2741 #, python-format msgid "Register to %s" msgstr "S'enregistrer à %s" #. list at the beginning -#: ../src/config.py:2723 +#: ../src/config.py:2777 msgid "Ban List" msgstr "Liste des bannis" -#: ../src/config.py:2724 +#: ../src/config.py:2778 msgid "Member List" msgstr "Liste des membres" -#: ../src/config.py:2724 +#: ../src/config.py:2778 msgid "Owner List" msgstr "Liste des propriétaires" -#: ../src/config.py:2725 +#: ../src/config.py:2779 msgid "Administrator List" msgstr "Liste des administrateurs" #. Address column #. holds JID (who said this) -#: ../src/config.py:2789 ../src/disco.py:893 ../src/history_manager.py:207 +#: ../src/config.py:2843 ../src/disco.py:893 ../src/history_manager.py:207 msgid "JID" msgstr "Identifiant Jabber" -#: ../src/config.py:2799 +#: ../src/config.py:2853 msgid "Reason" msgstr "Raison" -#: ../src/config.py:2806 +#: ../src/config.py:2860 msgid "Nick" msgstr "Pseudonyme" -#: ../src/config.py:2812 +#: ../src/config.py:2866 msgid "Role" msgstr "Rôle" -#: ../src/config.py:2839 +#: ../src/config.py:2893 msgid "Banning..." msgstr "Bannissement de ..." #. You can move '\n' before user@domain if that line is TOO BIG -#: ../src/config.py:2841 +#: ../src/config.py:2895 msgid "" "<b>Whom do you want to ban?</b>\n" "\n" @@ -6632,11 +7040,11 @@ msgstr "" "<b>Qui voulez-vous bannir ?</b>\n" "\n" -#: ../src/config.py:2843 +#: ../src/config.py:2897 msgid "Adding Member..." msgstr "Ajout d'un Membre ..." -#: ../src/config.py:2844 +#: ../src/config.py:2898 msgid "" "<b>Whom do you want to make a member?</b>\n" "\n" @@ -6644,11 +7052,11 @@ msgstr "" "<b>De qui voulez-vous faire un membre ?</b>\n" "\n" -#: ../src/config.py:2846 +#: ../src/config.py:2900 msgid "Adding Owner..." msgstr "Ajout d'un Propriétaire ..." -#: ../src/config.py:2847 +#: ../src/config.py:2901 msgid "" "<b>Whom do you want to make an owner?</b>\n" "\n" @@ -6656,11 +7064,11 @@ msgstr "" "<b>De qui voulez-vous faire un possesseur ?</b>\n" "\n" -#: ../src/config.py:2849 +#: ../src/config.py:2903 msgid "Adding Administrator..." msgstr "Ajout d'un Administrateur ..." -#: ../src/config.py:2850 +#: ../src/config.py:2904 msgid "" "<b>Whom do you want to make an administrator?</b>\n" "\n" @@ -6668,7 +7076,7 @@ msgstr "" "<b>De qui voulez-vous faire un administrateur ?</b>\n" "\n" -#: ../src/config.py:2851 +#: ../src/config.py:2905 msgid "" "Can be one of the following:\n" "1. user@domain/resource (only that resource matches).\n" @@ -6685,109 +7093,104 @@ msgstr "" "pseudo@domaine,\n" "domaine/ressource, ou les adresses comprenant un sous-domaine)." -#: ../src/config.py:2952 +#: ../src/config.py:3006 #, python-format msgid "Removing %s account" msgstr "Supprimer le compte %s" -#: ../src/config.py:2967 +#: ../src/config.py:3021 msgid "Account is disabled" msgstr "Compte désactivé" -#: ../src/config.py:2968 +#: ../src/config.py:3022 msgid "To unregister from a server, account must be enabled." msgstr "Pour se désinscrire d'un serveur, le compte doit être activé." -#: ../src/config.py:2981 ../src/gui_interface.py:269 -#: ../src/gui_interface.py:721 +#: ../src/config.py:3035 ../src/gui_interface.py:283 +#: ../src/gui_interface.py:711 msgid "Password Required" msgstr "Mot de passe requis" -#: ../src/config.py:2982 ../src/gui_interface.py:701 +#: ../src/config.py:3036 ../src/gui_interface.py:691 #, python-format msgid "Enter your password for account %s" msgstr "Entrez votre mot de passe pour le compte %s" -#: ../src/config.py:2983 ../src/gui_interface.py:721 +#: ../src/config.py:3037 ../src/gui_interface.py:711 msgid "Save password" msgstr "Enregistrer le mot de passe" -#: ../src/config.py:2993 +#: ../src/config.py:3047 #, python-format msgid "Account \"%s\" is connected to the server" msgstr "Le compte \"%s\" est connecté au serveur" -#: ../src/config.py:2994 +#: ../src/config.py:3048 msgid "If you remove it, the connection will be lost." msgstr "Si vous l'enlevez, la connection sera perdue." -#: ../src/config.py:3008 +#: ../src/config.py:3062 #, python-format msgid "Connection to server %s failed" msgstr "La connexion au serveur %s a échoué" -#: ../src/config.py:3009 +#: ../src/config.py:3063 msgid "What would you like to do?" msgstr "Que voulez vous faire ?" -#: ../src/config.py:3010 +#: ../src/config.py:3064 msgid "Remove only from Gajim" msgstr "Supprimer le compte de Gajim _uniquement" -#: ../src/config.py:3011 +#: ../src/config.py:3065 msgid "Don't remove anything. I'll try again later" msgstr "Ne rien supprimer. Je réessaierai plus tard." -#: ../src/config.py:3105 +#: ../src/config.py:3159 msgid "?print_status:All" msgstr "?print_status:Tout" -#: ../src/config.py:3106 +#: ../src/config.py:3160 msgid "Enter and leave only" msgstr "Entrées et sorties seulement" -#: ../src/config.py:3107 +#: ../src/config.py:3161 msgid "?print_status:None" msgstr "Aucun" -#: ../src/config.py:3179 +#: ../src/config.py:3233 msgid "New Group Chat" msgstr "Créer un salon de discussion" -#: ../src/config.py:3212 +#: ../src/config.py:3266 msgid "This bookmark has invalid data" msgstr "Ce marque-page contient des données invalides" -#: ../src/config.py:3213 +#: ../src/config.py:3267 msgid "" "Please be sure to fill out server and room fields or remove this bookmark." msgstr "" "Assurez-vous de remplir les champs serveur et salon ou enlevez ce marque-page" -#. invalid char -#: ../src/config.py:3338 ../src/dialogs.py:2040 -msgid "Invalid nickname" -msgstr "Nom d'utilisateur invalide" - -#: ../src/config.py:3339 ../src/config.py:3350 ../src/config.py:3359 -#: ../src/config.py:3370 ../src/config.py:3378 +#: ../src/config.py:3393 ../src/config.py:3404 ../src/config.py:3413 +#: ../src/config.py:3424 ../src/config.py:3432 msgid "Character not allowed" msgstr "Caractère non-autorisé" -#: ../src/config.py:3350 ../src/config.py:3358 ../src/config.py:3370 -#: ../src/config.py:3630 +#: ../src/config.py:3404 ../src/config.py:3412 ../src/config.py:3424 +#: ../src/config.py:3689 msgid "Invalid server" msgstr "Serveur invalide" -#: ../src/config.py:3377 +#: ../src/config.py:3431 msgid "Invalid room" msgstr "Salon invalide" -#: ../src/config.py:3546 +#: ../src/config.py:3601 msgid "Account has been added successfully" msgstr "Compte ajouté avec succès" -#: ../src/config.py:3547 ../src/config.py:3553 +#: ../src/config.py:3602 ../src/config.py:3608 msgid "" "You can set advanced account options by pressing the Advanced button, or " "later by choosing the Accounts menu item under the Edit menu from the main " @@ -6797,32 +7200,32 @@ msgstr "" "Avancé, ou plus tard en cliquant sur Comptes dans le menu Éditer de la " "fenêtre principale." -#: ../src/config.py:3552 +#: ../src/config.py:3607 msgid "Your new account has been created successfully" msgstr "Votre nouveau compte a été créé avec succès" -#: ../src/config.py:3591 +#: ../src/config.py:3646 msgid "Invalid username" msgstr "Nom d'utilisateur non valide" -#: ../src/config.py:3593 +#: ../src/config.py:3648 msgid "You must provide a username to configure this account." msgstr "Vous devez entrer un nom d'utilisateur pour configurer ce compte." -#: ../src/config.py:3631 +#: ../src/config.py:3690 msgid "Please provide a server on which you want to register." msgstr "Saisissez un serveur sur lequel vous voulez vous enregistrer." -#: ../src/config.py:3687 ../src/gui_interface.py:1199 +#: ../src/config.py:3746 ../src/gui_interface.py:1213 msgid "Certificate Already in File" msgstr "Certificat déjà dans un Fichier" -#: ../src/config.py:3688 ../src/gui_interface.py:1200 +#: ../src/config.py:3747 ../src/gui_interface.py:1214 #, python-format msgid "This certificate is already in file %s, so it's not added again." msgstr "Ce certificat est déjà dans le fichier %s, il n'a donc pas été ajouté." -#: ../src/config.py:3765 +#: ../src/config.py:3835 #, python-format msgid "" "<b>Security Warning</b>\n" @@ -6837,7 +7240,7 @@ msgstr "" "Erreur SSL %(error)s\n" "Voulez vous toujours vous connecter au serveur ?" -#: ../src/config.py:3771 ../src/gui_interface.py:1228 +#: ../src/config.py:3841 ../src/gui_interface.py:1242 #, python-format msgid "" "Add this certificate to the list of trusted certificates.\n" @@ -6848,73 +7251,73 @@ msgstr "" "Empreinte digitale SHA1 du certificat :\n" "%s" -#: ../src/config.py:3803 ../src/config.py:3837 +#: ../src/config.py:3873 ../src/config.py:3907 msgid "An error occurred during account creation" msgstr "Une erreur est survenue lors de la création du compte" -#: ../src/config.py:3902 +#: ../src/config.py:3972 msgid "Account name is in use" msgstr "Le nom du compte est utilisé" -#: ../src/config.py:3903 +#: ../src/config.py:3973 msgid "You already have an account using this name." msgstr "Vous avez déjà un compte avec ce nom." -#: ../src/config.py:4033 +#: ../src/config.py:4103 msgid "PEP node was not removed" msgstr "Le nœud PEP n'a pas été supprimé" -#: ../src/config.py:4034 +#: ../src/config.py:4104 #, python-format msgid "PEP node %(node)s was not removed: %(message)s" msgstr "Le nœud PEP %(node)s n'a pas été supprimé : %(message)s" -#: ../src/config.py:4062 +#: ../src/config.py:4132 #, python-format msgid "Configure %s" msgstr "Configurer %s" -#: ../src/config.py:4078 ../src/plugins/gui.py:73 +#: ../src/config.py:4148 ../src/plugins/gui.py:74 msgid "Active" msgstr "Actif" -#: ../src/config.py:4086 +#: ../src/config.py:4156 msgid "Event" msgstr "Événement" -#: ../src/config.py:4121 +#: ../src/config.py:4191 msgid "First Message Received" msgstr "Premier message reçu" -#: ../src/config.py:4122 +#: ../src/config.py:4192 msgid "Next Message Received Focused" msgstr "Message Reçu Suivant Avec le Focus." -#: ../src/config.py:4124 +#: ../src/config.py:4194 msgid "Next Message Received Unfocused" msgstr "Message Reçu Suivant Sans le Focus" -#: ../src/config.py:4125 +#: ../src/config.py:4195 msgid "Contact Connected" msgstr "Contact connecté" -#: ../src/config.py:4126 +#: ../src/config.py:4196 msgid "Contact Disconnected" msgstr "Contact déconnecté" -#: ../src/config.py:4127 +#: ../src/config.py:4197 msgid "Message Sent" msgstr "Message envoyé" -#: ../src/config.py:4128 +#: ../src/config.py:4198 msgid "Group Chat Message Highlight" msgstr "Message d'un salon mis en surbrillance" -#: ../src/config.py:4129 +#: ../src/config.py:4199 msgid "Group Chat Message Received" msgstr "Message reçu dans un salon" -#: ../src/config.py:4130 +#: ../src/config.py:4200 msgid "GMail Email Received" msgstr "Courriel Gmail reçu" @@ -6974,15 +7377,15 @@ msgid "Open as _Link" msgstr "Ouvrir en tant que _lien" #. %i is day in year (1-365) -#: ../src/conversation_textview.py:1309 +#: ../src/conversation_textview.py:1323 #, python-format msgid "Yesterday" msgid_plural "%(nb_days)i days ago" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Hier" +msgstr[1] "il y a %(nb_days)i jours" #. if we have subject, show it too! -#: ../src/conversation_textview.py:1358 ../src/history_window.py:480 +#: ../src/conversation_textview.py:1372 ../src/history_window.py:481 #, python-format msgid "Subject: %s\n" msgstr "Sujet : %s\n" @@ -7106,7 +7509,7 @@ msgid "Please fill in the data of the contact you want to add" msgstr "Remplissez les informations sur le contact à ajouter" #: ../src/dialogs.py:1074 ../src/dialogs.py:1080 ../src/dialogs.py:1085 -#: ../src/dialogs.py:3585 +#: ../src/dialogs.py:3631 msgid "Invalid User ID" msgstr "Identifiant utilisateur non valide" @@ -7131,8 +7534,8 @@ msgid "User ID:" msgstr "Identifiant :" #: ../src/dialogs.py:1273 -msgid "A GTK+ jabber client" -msgstr "Un client Jabber en GTK+" +msgid "A GTK+ Jabber/XMPP client" +msgstr "Un client Jabber/XMPP en GTK+" #: ../src/dialogs.py:1274 msgid "GTK+ Version:" @@ -7181,114 +7584,114 @@ msgstr "" "\n" "Le soulignement des fautes d'orthographe ne sera pas utilisé" -#: ../src/dialogs.py:1842 +#: ../src/dialogs.py:1877 msgid "_Resume" msgstr "Reprendre" -#: ../src/dialogs.py:1850 +#: ../src/dialogs.py:1885 msgid "Re_place" msgstr "Remplacer" -#: ../src/dialogs.py:2041 ../src/dialogs.py:2440 +#: ../src/dialogs.py:2079 ../src/dialogs.py:2480 msgid "The nickname has not allowed characters." msgstr "Le pseudonyme contient des caractères non autorisés." -#: ../src/dialogs.py:2159 +#: ../src/dialogs.py:2198 #, python-format msgid "Subscription request for account %(account)s from %(jid)s" msgstr "Requête d'inscription pour le compte %(account)s de la part de %(jid)s" -#: ../src/dialogs.py:2162 +#: ../src/dialogs.py:2201 #, python-format msgid "Subscription request from %s" msgstr "Requête d'inscription de la part de %s" -#: ../src/dialogs.py:2246 ../src/gui_interface.py:1948 +#: ../src/dialogs.py:2285 ../src/gui_interface.py:1970 #, python-format msgid "You are already in group chat %s" msgstr "Vous êtes déjà dans le salon %s" -#: ../src/dialogs.py:2252 +#: ../src/dialogs.py:2291 msgid "You can not join a group chat unless you are connected." msgstr "" "Vous ne pouvez joindre un salon de discussion tant que vous n'êtes pas " "connecté." -#: ../src/dialogs.py:2296 +#: ../src/dialogs.py:2335 #, python-format msgid "Join Group Chat with account %s" msgstr "Rejoindre un salon de discussion en tant que %s" -#: ../src/dialogs.py:2427 +#: ../src/dialogs.py:2466 msgid "Invalid Account" msgstr "Compte invalide" -#: ../src/dialogs.py:2428 +#: ../src/dialogs.py:2467 msgid "" "You have to choose an account from which you want to join the groupchat." msgstr "" "Vous devez choisir un compte depuis lequel vous souhaitez rejoindre le salon " "de discussion." -#: ../src/dialogs.py:2439 +#: ../src/dialogs.py:2479 msgid "Invalid Nickname" msgstr "Nom d'utilisateur invalide" -#: ../src/dialogs.py:2444 ../src/dialogs.py:2450 -#: ../src/groupchat_control.py:2087 +#: ../src/dialogs.py:2484 ../src/dialogs.py:2490 +#: ../src/groupchat_control.py:2091 msgid "Invalid group chat Jabber ID" msgstr "Identifiant Jabber de salon invalide" -#: ../src/dialogs.py:2445 +#: ../src/dialogs.py:2485 msgid "Please enter the group chat Jabber ID as room@server." msgstr "Veuillez entrer l'identifiant Jabber du salon, comme salon@serveur" -#: ../src/dialogs.py:2451 ../src/groupchat_control.py:2088 +#: ../src/dialogs.py:2491 ../src/groupchat_control.py:2092 msgid "The group chat Jabber ID has not allowed characters." msgstr "" "L'identifiant jabber du salon de discussion contient des caractères " "interdits." -#: ../src/dialogs.py:2455 ../src/gui_interface.py:1930 +#: ../src/dialogs.py:2496 ../src/gui_interface.py:1952 msgid "This is not a group chat" msgstr "Ceci n'est pas une conversation multi-utilisateurs" -#: ../src/dialogs.py:2456 ../src/gui_interface.py:1931 +#: ../src/dialogs.py:2497 ../src/gui_interface.py:1953 #, python-format msgid "%s is not the name of a group chat." msgstr "%s n'est pas un nom de salon de discussion valide" -#: ../src/dialogs.py:2488 +#: ../src/dialogs.py:2529 msgid "Without a connection, you can not synchronise your contacts." msgstr "Sans connexion, vous ne pouvez pas synchroniser vos contacts." -#: ../src/dialogs.py:2501 +#: ../src/dialogs.py:2542 msgid "Server" msgstr "Serveur" -#: ../src/dialogs.py:2537 +#: ../src/dialogs.py:2578 msgid "This account is not connected to the server" msgstr "Ce compte est connecté au serveur" -#: ../src/dialogs.py:2538 +#: ../src/dialogs.py:2579 msgid "You cannot synchronize with an account unless it is connected." msgstr "" "Vous ne pouvez pas vous synchroniser avec un compte sauf s'il est connecté." -#: ../src/dialogs.py:2563 +#: ../src/dialogs.py:2604 msgid "Synchronise" msgstr "Synchroniser" -#: ../src/dialogs.py:2624 +#: ../src/dialogs.py:2665 #, python-format msgid "Start Chat with account %s" msgstr "Commencer une discussion avec le compte %s" -#: ../src/dialogs.py:2626 +#: ../src/dialogs.py:2667 msgid "Start Chat" msgstr "Commencer une discussion" -#: ../src/dialogs.py:2627 +#: ../src/dialogs.py:2668 msgid "" "Fill in the nickname or the Jabber ID of the contact you would like\n" "to send a chat message to:" @@ -7297,150 +7700,137 @@ msgstr "" "envoyer un message :" #. if offline or connecting -#: ../src/dialogs.py:2654 ../src/dialogs.py:3035 ../src/dialogs.py:3265 +#: ../src/dialogs.py:2695 ../src/dialogs.py:3076 ../src/dialogs.py:3311 msgid "Connection not available" msgstr "Connexion non disponible" -#: ../src/dialogs.py:2655 ../src/dialogs.py:3036 ../src/dialogs.py:3266 +#: ../src/dialogs.py:2696 ../src/dialogs.py:3077 ../src/dialogs.py:3312 #, python-format msgid "Please make sure you are connected with \"%s\"." msgstr "Vérifiez que vous êtes connecté avec \"%s\"." -#: ../src/dialogs.py:2664 ../src/dialogs.py:2667 +#: ../src/dialogs.py:2705 ../src/dialogs.py:2708 msgid "Invalid JID" msgstr "Identifiant Jabber invalide" -#: ../src/dialogs.py:2667 +#: ../src/dialogs.py:2708 #, python-format msgid "Unable to parse \"%s\"." msgstr "Impossible d'interpréter \"%s\"." -#: ../src/dialogs.py:2676 +#: ../src/dialogs.py:2717 msgid "Without a connection, you can not change your password." msgstr "Vous devez être connecté pour changer votre mot de passe." -#: ../src/dialogs.py:2695 +#: ../src/dialogs.py:2736 msgid "Invalid password" msgstr "Mot de passe invalide" -#: ../src/dialogs.py:2695 +#: ../src/dialogs.py:2736 msgid "You must enter a password." msgstr "Vous devez entrer un mot de passe." -#: ../src/dialogs.py:2699 +#: ../src/dialogs.py:2740 msgid "Passwords do not match" msgstr "Les mots de passe ne correspondent pas" -#: ../src/dialogs.py:2700 +#: ../src/dialogs.py:2741 msgid "The passwords typed in both fields must be identical." msgstr "Les mots de passe tapés dans chaque champs doivent être identiques." -#. default value -#: ../src/dialogs.py:2737 ../src/notify.py:182 ../src/notify.py:419 -msgid "Contact Signed In" -msgstr "Contact connecté" - -#: ../src/dialogs.py:2739 ../src/notify.py:190 ../src/notify.py:421 -msgid "Contact Signed Out" -msgstr "Contact déconnecté" - -#: ../src/dialogs.py:2742 ../src/gui_interface.py:838 ../src/notify.py:433 +#: ../src/dialogs.py:2783 ../src/gui_interface.py:852 ../src/notify.py:273 msgid "New E-mail" msgstr "Nouveau courrier électronique" -#: ../src/dialogs.py:2744 ../src/gui_interface.py:893 ../src/notify.py:426 +#: ../src/dialogs.py:2785 ../src/gui_interface.py:907 ../src/notify.py:266 msgid "File Transfer Request" msgstr "Requête de transfert de fichier" -#: ../src/dialogs.py:2746 ../src/gui_interface.py:800 -#: ../src/gui_interface.py:864 ../src/notify.py:428 +#: ../src/dialogs.py:2787 ../src/gui_interface.py:814 +#: ../src/gui_interface.py:878 ../src/notify.py:268 msgid "File Transfer Error" msgstr "Erreur de Transfert de fichier" -#: ../src/dialogs.py:2748 ../src/gui_interface.py:939 -#: ../src/gui_interface.py:962 ../src/gui_interface.py:979 -#: ../src/notify.py:430 +#: ../src/dialogs.py:2789 ../src/gui_interface.py:953 +#: ../src/gui_interface.py:976 ../src/gui_interface.py:993 +#: ../src/notify.py:270 msgid "File Transfer Completed" msgstr "Transfert de fichier terminé" -#: ../src/dialogs.py:2749 ../src/gui_interface.py:942 ../src/notify.py:431 +#: ../src/dialogs.py:2790 ../src/gui_interface.py:956 ../src/notify.py:271 msgid "File Transfer Stopped" msgstr "Transfert de fichier interrompu" -#: ../src/dialogs.py:2751 ../src/gui_interface.py:647 ../src/notify.py:435 +#: ../src/dialogs.py:2792 ../src/gui_interface.py:624 ../src/notify.py:275 msgid "Groupchat Invitation" msgstr "Invitation à un salon" -#: ../src/dialogs.py:2753 ../src/notify.py:174 ../src/notify.py:437 -msgid "Contact Changed Status" -msgstr "Le contact a changé d'état" - -#: ../src/dialogs.py:2954 +#: ../src/dialogs.py:2995 #, python-format msgid "Single Message using account %s" msgstr "Message simple en tant que %s" -#: ../src/dialogs.py:2956 +#: ../src/dialogs.py:2997 #, python-format msgid "Single Message in account %s" msgstr "Message simple dans le compte %s" -#: ../src/dialogs.py:2958 +#: ../src/dialogs.py:2999 msgid "Single Message" msgstr "Message simple" #. prepare UI for Sending -#: ../src/dialogs.py:2961 +#: ../src/dialogs.py:3002 #, python-format msgid "Send %s" msgstr "Envoyer %s" #. prepare UI for Receiving -#: ../src/dialogs.py:2984 +#: ../src/dialogs.py:3025 #, python-format msgid "Received %s" msgstr "%s Reçu" #. prepare UI for Receiving -#: ../src/dialogs.py:3007 +#: ../src/dialogs.py:3048 #, python-format msgid "Form %s" msgstr "De %s" #. we create a new blank window to send and we preset RE: and to jid -#: ../src/dialogs.py:3086 +#: ../src/dialogs.py:3132 #, python-format msgid "RE: %s" msgstr "RE: %s" -#: ../src/dialogs.py:3087 +#: ../src/dialogs.py:3133 #, python-format msgid "%s wrote:\n" msgstr "%s a écrit :\n" -#: ../src/dialogs.py:3146 +#: ../src/dialogs.py:3192 #, python-format msgid "XML Console for %s" msgstr "Console XML pour %s" -#: ../src/dialogs.py:3148 +#: ../src/dialogs.py:3194 msgid "XML Console" msgstr "Console XML" #. Action that can be done with an incoming list of contacts -#: ../src/dialogs.py:3295 +#: ../src/dialogs.py:3341 msgid "add" msgstr "Ajouter" -#: ../src/dialogs.py:3295 +#: ../src/dialogs.py:3341 msgid "modify" msgstr "Modifier" -#: ../src/dialogs.py:3296 +#: ../src/dialogs.py:3342 msgid "remove" msgstr "Supprimer" -#: ../src/dialogs.py:3325 +#: ../src/dialogs.py:3371 #, python-format msgid "" "<b>%(jid)s</b> would like you to <b>%(action)s</b> some contacts in your " @@ -7450,184 +7840,172 @@ msgstr "" "votre liste." #. Change label for accept_button to action name instead of 'OK'. -#: ../src/dialogs.py:3341 ../src/dialogs.py:3387 -msgid "Add" -msgstr "Ajouter" - -#. Change label for accept_button to action name instead of 'OK'. -#: ../src/dialogs.py:3343 ../src/dialogs.py:3418 +#: ../src/dialogs.py:3389 ../src/dialogs.py:3464 msgid "Modify" msgstr "Modifier" -#. Change label for accept_button to action name instead of 'OK'. -#: ../src/dialogs.py:3345 ../src/dialogs.py:3442 -msgid "Delete" -msgstr "Supprimer" - -#: ../src/dialogs.py:3349 +#: ../src/dialogs.py:3395 msgid "Jabber ID" msgstr "Identifiant Jabber" -#: ../src/dialogs.py:3355 +#: ../src/dialogs.py:3401 msgid "Groups" msgstr "Groupes" #. it is selected #. remote_jid = model[iter_][1].decode('utf-8') -#: ../src/dialogs.py:3463 +#: ../src/dialogs.py:3509 #, python-format msgid "%s suggested me to add you in my roster." msgstr "%s m'a conseillé de vous ajouter à mes contacts." -#: ../src/dialogs.py:3477 +#: ../src/dialogs.py:3523 #, python-format msgid "Added %s contacts" msgstr "%s contacts ajoutés" -#: ../src/dialogs.py:3514 +#: ../src/dialogs.py:3560 #, python-format msgid "Removed %s contacts" msgstr "Enlever %s contacts" -#: ../src/dialogs.py:3554 ../src/dialogs.py:3731 +#: ../src/dialogs.py:3600 ../src/dialogs.py:3777 #, python-format msgid "Archiving Preferences for %s" msgstr "Sauvegarde des préférences pour %s" -#: ../src/dialogs.py:3594 +#: ../src/dialogs.py:3640 msgid "Invalid expire value" -msgstr "" +msgstr "Valeur d'expiration non valide" -#: ../src/dialogs.py:3595 +#: ../src/dialogs.py:3641 msgid "Expire must be a valid positive integer." -msgstr "" +msgstr "La valeur d'expiration doit être un nombre positif." -#: ../src/dialogs.py:3642 +#: ../src/dialogs.py:3688 msgid "There is an error with the form" -msgstr "" +msgstr "Il y a une erreur dans le formulaire" -#: ../src/dialogs.py:3862 +#: ../src/dialogs.py:3908 msgid "There is an error" msgstr "Le service a renvoyé une erreur." -#: ../src/dialogs.py:3930 +#: ../src/dialogs.py:3976 #, python-format msgid "Privacy List <b><i>%s</i></b>" msgstr "Liste privée <b><i>%s</i></b>" -#: ../src/dialogs.py:3934 +#: ../src/dialogs.py:3980 #, python-format msgid "Privacy List for %s" msgstr "Liste privée pour %s" -#: ../src/dialogs.py:4001 +#: ../src/dialogs.py:4047 #, python-format msgid "Order: %(order)s, action: %(action)s, type: %(type)s, value: %(value)s" msgstr "" "Ordre : %(order)s, action : %(action)s, type : %(type)s, valeur : %(value)s" -#: ../src/dialogs.py:4006 +#: ../src/dialogs.py:4052 #, python-format msgid "Order: %(order)s, action: %(action)s" msgstr "Ordre : %(order)s, action: %(action)s" -#: ../src/dialogs.py:4057 +#: ../src/dialogs.py:4103 msgid "<b>Edit a rule</b>" msgstr "<b>Modifier une règle</b>" -#: ../src/dialogs.py:4168 +#: ../src/dialogs.py:4214 msgid "<b>Add a rule</b>" msgstr "<b>Ajouter une règle</b>" -#: ../src/dialogs.py:4267 +#: ../src/dialogs.py:4313 #, python-format msgid "Privacy Lists for %s" msgstr "Listes privées pour %s" -#: ../src/dialogs.py:4269 +#: ../src/dialogs.py:4315 msgid "Privacy Lists" msgstr "Listes privées" -#: ../src/dialogs.py:4358 +#: ../src/dialogs.py:4404 msgid "Invalid List Name" msgstr "Nom de liste invalide" -#: ../src/dialogs.py:4359 +#: ../src/dialogs.py:4405 msgid "You must enter a name to create a privacy list." msgstr "Vous devez entrer un nom pour créer une liste privée." -#: ../src/dialogs.py:4391 +#: ../src/dialogs.py:4437 msgid "You are invited to a groupchat" msgstr "Vous êtes invité(e) dans un groupe de discussion" -#: ../src/dialogs.py:4394 +#: ../src/dialogs.py:4440 msgid "$Contact has invited you to join a discussion" msgstr "$Contact vous a invité dans un salon de discussion" -#: ../src/dialogs.py:4396 +#: ../src/dialogs.py:4442 #, python-format msgid "$Contact has invited you to group chat %(room_jid)s" msgstr "$Contact vous a invité dans le salon de discussion %(room_jid)s" -#: ../src/dialogs.py:4404 +#: ../src/dialogs.py:4450 #, python-format msgid "Comment: %s" msgstr "Commentaire : %s" -#: ../src/dialogs.py:4406 +#: ../src/dialogs.py:4452 msgid "Do you want to accept the invitation?" msgstr "Voulez-vous accepter l'invitation ?" -#: ../src/dialogs.py:4468 +#: ../src/dialogs.py:4514 msgid "Choose Client Cert #PCKS12" -msgstr "" +msgstr "Choisissez le certificat client #PCKS12" -#: ../src/dialogs.py:4478 ../src/dialogs.py:4520 ../src/dialogs.py:4576 -#: ../src/dialogs.py:4664 +#: ../src/dialogs.py:4524 ../src/dialogs.py:4566 ../src/dialogs.py:4622 +#: ../src/dialogs.py:4710 msgid "All files" msgstr "Tous les fichiers" -#: ../src/dialogs.py:4483 +#: ../src/dialogs.py:4529 msgid "PKCS12 Files" msgstr "Fichier PKCS12" -#: ../src/dialogs.py:4510 +#: ../src/dialogs.py:4556 msgid "Choose Sound" msgstr "Choisissez un son" -#: ../src/dialogs.py:4525 +#: ../src/dialogs.py:4571 msgid "Wav Sounds" msgstr "Sons wav" -#: ../src/dialogs.py:4563 +#: ../src/dialogs.py:4609 msgid "Choose Image" msgstr "Choisissez une Image" -#: ../src/dialogs.py:4581 +#: ../src/dialogs.py:4627 msgid "Images" msgstr "Images" -#: ../src/dialogs.py:4651 -#, fuzzy +#: ../src/dialogs.py:4697 msgid "Choose Archive" -msgstr "Choisissez une Image" +msgstr "Choisissez une Archive" -#: ../src/dialogs.py:4669 -#, fuzzy +#: ../src/dialogs.py:4715 msgid "Zip files" -msgstr "Tous les fichiers" +msgstr "fichiers Zip" -#: ../src/dialogs.py:4695 +#: ../src/dialogs.py:4741 #, python-format msgid "When %s becomes:" msgstr "Quand %s devient :" -#: ../src/dialogs.py:4697 +#: ../src/dialogs.py:4743 #, python-format msgid "Adding Special Notification for %s" msgstr "Ajout de notifications spéciales pour %s" -#: ../src/dialogs.py:4917 +#: ../src/dialogs.py:4963 #, python-format msgid "" "Your chat session with <b>%(jid)s</b> is encrypted.\n" @@ -7638,19 +8016,19 @@ msgstr "" "\n" "La Short Authentication String cette session est <b>%(sas)s</b>." -#: ../src/dialogs.py:4920 +#: ../src/dialogs.py:4966 msgid "You have already verified this contact's identity." msgstr "Vous avez déjà vérifié l'identité de ce contact." -#: ../src/dialogs.py:4926 ../src/dialogs.py:5010 +#: ../src/dialogs.py:4972 ../src/dialogs.py:5056 msgid "Contact's identity verified" msgstr "Identité du contact vérifiée" -#: ../src/dialogs.py:4932 +#: ../src/dialogs.py:4978 msgid "Verify again..." msgstr "Vérifier à nouveau..." -#: ../src/dialogs.py:4937 +#: ../src/dialogs.py:4983 msgid "" "To be certain that <b>only</b> the expected person can read your messages or " "send you messages, you need to verify their identity by clicking the button " @@ -7660,19 +8038,19 @@ msgstr "" "messages et vous en envoyer, vous devez vérifier son identité en cliquant " "sur le bouton en-dessous." -#: ../src/dialogs.py:4940 ../src/dialogs.py:4991 ../src/dialogs.py:5004 +#: ../src/dialogs.py:4986 ../src/dialogs.py:5037 ../src/dialogs.py:5050 msgid "Contact's identity NOT verified" msgstr "Identité du contact NON vérifiée" -#: ../src/dialogs.py:4945 +#: ../src/dialogs.py:4991 msgid "Verify..." msgstr "Vérifier..." -#: ../src/dialogs.py:4956 +#: ../src/dialogs.py:5002 msgid "Have you verified the contact's identity?" msgstr "Avez-vous vérifié l'identité du contact ?" -#: ../src/dialogs.py:4957 +#: ../src/dialogs.py:5003 #, python-format msgid "" "To prevent talking to an unknown person, you should speak to <b>%(jid)s</b> " @@ -7687,24 +8065,24 @@ msgstr "" "\n" "La Short Authentication String de cette session est : <b>%(sas)s</b>." -#: ../src/dialogs.py:4958 +#: ../src/dialogs.py:5004 msgid "Did you talk to the remote contact and verify the SAS?" msgstr "Avec vous parlé au contact et vérifié la SAS ?" -#: ../src/dialogs.py:4992 +#: ../src/dialogs.py:5038 #, python-format msgid "The contact's key (%s) <b>does not match</b> the key assigned in Gajim." msgstr "" "La clef du contact (%s) <b>ne correspond pas</b> à la clef assignée dans " "Gajim." -#: ../src/dialogs.py:4998 +#: ../src/dialogs.py:5044 msgid "No GPG key is assigned to this contact. So you cannot encrypt messages." msgstr "" "Aucune clef GPG n'est assignée à ce contact. Vous ne pouvez donc pas " "chiffrer les messages." -#: ../src/dialogs.py:5005 +#: ../src/dialogs.py:5051 msgid "" "GPG key is assigned to this contact, but <b>you do not trust his key</b>, so " "message <b>cannot</b> be encrypted. Use your GPG client to trust this key." @@ -7713,7 +8091,7 @@ msgstr "" "sa clef</b>, les messages <b>ne peuvent</b> donc <b>pas</b> être chiffrés. " "Utilisez votre client GPG pour avoir confiance en cette clef." -#: ../src/dialogs.py:5011 +#: ../src/dialogs.py:5057 msgid "" "GPG Key is assigned to this contact, and you trust his key, so messages will " "be encrypted." @@ -7721,19 +8099,19 @@ msgstr "" "Une clef GPG est assignée à ce contact, et vous avez confiance en sa clef, " "les messages seront donc chiffrés." -#: ../src/dialogs.py:5076 +#: ../src/dialogs.py:5122 msgid "an audio and video" msgstr "audio et vidéo" -#: ../src/dialogs.py:5078 +#: ../src/dialogs.py:5124 msgid "an audio" msgstr "audio" -#: ../src/dialogs.py:5080 +#: ../src/dialogs.py:5126 msgid "a video" msgstr "vidéo" -#: ../src/dialogs.py:5084 +#: ../src/dialogs.py:5130 #, python-format msgid "" "%(contact)s wants to start %(type)s session with you. Do you want to answer " @@ -7742,12 +8120,12 @@ msgstr "" "%(contact)s veut démarrer un session %(type)s avec vous. Voulez-vous " "répondre à son appel ?" -#: ../src/dialogs.py:5152 +#: ../src/dialogs.py:5199 #, python-format msgid "Certificate for account %s" msgstr "Certificat pour le compte %s" -#: ../src/dialogs.py:5152 +#: ../src/dialogs.py:5199 #, python-format msgid "" "<b>Issued to:</b>\n" @@ -7768,8 +8146,25 @@ msgid "" "<b>Fingerprint</b>\n" "SHA1 Fingerprint: %(sha1)s" msgstr "" +"<b>Délivré à :</b>\n" +"Nom commun (CN) : %(scn)s\n" +"Organisation (O) : %(sorg)s\n" +"Unité de l'organisation (OU) : %(sou)s\n" +"Numéro de série : %(sn)s\n" +"\n" +"<b>Délivré par :</b>\n" +"Nom commun (CN) : %(icn)s\n" +"Organisation (O) : %(iorg)s\n" +"Unité de l'organisation (OU): %(iou)s\n" +"\n" +"<b>Validité :</b>\n" +"Délivré le : %(io)s\n" +"Éxpire le : %(eo)s\n" +"\n" +"<b>Empreinte</b>\n" +"Empreinte SHA1 : %(sha1)s" -#: ../src/dialogs.py:5186 ../src/dialogs.py:5203 +#: ../src/dialogs.py:5233 ../src/dialogs.py:5250 msgid "View cert..." msgstr "Voir cert..." @@ -7861,20 +8256,20 @@ msgstr "Description" msgid "Id" msgstr "Id" -#: ../src/disco.py:1835 ../src/gui_interface.py:2466 +#: ../src/disco.py:1835 ../src/gui_interface.py:2488 msgid "Bookmark already set" msgstr "Marque-page déjà spécifié" -#: ../src/disco.py:1836 ../src/gui_interface.py:2467 +#: ../src/disco.py:1836 ../src/gui_interface.py:2489 #, python-format msgid "Group Chat \"%s\" is already in your bookmarks." msgstr "Le salon \"%s\" est déjà dans vos marque-pages." -#: ../src/disco.py:1845 ../src/gui_interface.py:2481 +#: ../src/disco.py:1845 ../src/gui_interface.py:2503 msgid "Bookmark has been added successfully" msgstr "Marque-page ajouté avec succès" -#: ../src/disco.py:1846 ../src/gui_interface.py:2482 +#: ../src/disco.py:1846 ../src/gui_interface.py:2504 msgid "You can manage your bookmarks via Actions menu in your roster." msgstr "" "Vous pouvez gérer vos marque-pages par le menu Actions de votre liste de " @@ -7912,8 +8307,8 @@ msgstr "" "d'assurer une connexion sécurisée." #: ../src/features_window.py:52 ../src/features_window.py:53 -msgid "Requires python-pyopenssl." -msgstr "Nécessite python-pyopenssl." +msgid "Requires python-pyopenssl > 0.12 and pyasn1." +msgstr "Nécessite python-pyopenssl > 0.12 et pyasn1." #: ../src/features_window.py:54 msgid "Bonjour / Zeroconf" @@ -7930,8 +8325,12 @@ msgid "Requires python-avahi." msgstr "Nécessite python-avahi" #: ../src/features_window.py:57 -msgid "Requires pybonjour (http://o2s.csail.mit.edu/o2s-wiki/pybonjour)." -msgstr "Nécessite pybonjour (http://o2s.csail.mit.edu/o2s-wiki/pybonjour)." +msgid "" +"Requires pybonjour and bonjour SDK running (http://developer.apple.com/" +"opensource/)." +msgstr "" +"Nécessite pybonjour et le SDK de bonjour lancé (http://developer.apple.com/" +"opensource/)." #: ../src/features_window.py:58 msgid "Command line" @@ -7947,8 +8346,8 @@ msgstr "Nécessite python-dbus." #: ../src/features_window.py:61 ../src/features_window.py:69 #: ../src/features_window.py:73 ../src/features_window.py:77 -#: ../src/features_window.py:85 ../src/features_window.py:89 -#: ../src/features_window.py:109 +#: ../src/features_window.py:89 ../src/features_window.py:109 +#: ../src/features_window.py:113 ../src/features_window.py:117 msgid "Feature not available under Windows." msgstr "Fonctionnalité indisponible sous Windows." @@ -7963,6 +8362,7 @@ msgstr "Chiffrement des messages avec des clefs GPG." #: ../src/features_window.py:64 msgid "Requires gpg and python-gnupg (http://code.google.com/p/python-gnupg/)." msgstr "" +"Nécessite gpg et python-gnupg (http://code.google.com/p/python-gnupg/)." #: ../src/features_window.py:65 msgid "Requires gpg.exe in PATH." @@ -8037,6 +8437,10 @@ msgstr "Vérification ortohgraphique des messages composés." msgid "Requires libgtkspell." msgstr "Nécessite libgtkspell" +#: ../src/features_window.py:85 +msgid "Requires libgtkspell and libenchant." +msgstr "Nécessite libgtkspell et libenchant." + #: ../src/features_window.py:86 msgid "Notification" msgstr "Notification" @@ -8132,11 +8536,39 @@ msgstr "Possibilité de démarrer une conversation audio et vidéo." msgid "Requires python-farsight and gstreamer-plugins-bad." msgstr "Nécessite python-farsight et gstreamer-plugins-bad." +#: ../src/features_window.py:110 +msgid "UPnP-IGD" +msgstr "UPnP-IGD" + +#: ../src/features_window.py:111 +msgid "Ability to request your router to forward port for file transfer." +msgstr "" +"Possibilité de demander à votre routeur de transférer le port pour le " +"transfert de fichiers." + +#: ../src/features_window.py:112 +msgid "Requires python-gupnp-igd." +msgstr "Nécessite python-gupnp-igd." + +#: ../src/features_window.py:114 +msgid "UPower" +msgstr "UPower" + +#: ../src/features_window.py:115 +msgid "Ability to disconnect properly just before suspending the machine." +msgstr "" +"Possibilité de se déconnecter proprement juste avant de mettre votre machine " +"en veille." + #: ../src/features_window.py:116 +msgid "Requires upower and python-dbus." +msgstr "Nécessite upower et python-dbus." + +#: ../src/features_window.py:124 msgid "?features:Available" msgstr "?features:Disponible" -#: ../src/features_window.py:123 +#: ../src/features_window.py:131 msgid "Feature" msgstr "Fonctionnalité" @@ -8152,106 +8584,70 @@ msgstr "Durée" msgid "Progress" msgstr "Progression" -#: ../src/filetransfers_window.py:178 ../src/filetransfers_window.py:234 +#: ../src/filetransfers_window.py:178 ../src/filetransfers_window.py:235 #, python-format msgid "Filename: %s" msgstr "Nom du Fichier : %s" -#: ../src/filetransfers_window.py:179 ../src/filetransfers_window.py:333 +#: ../src/filetransfers_window.py:180 ../src/filetransfers_window.py:400 #, python-format msgid "Size: %s" msgstr "Taille : %s" #. You is a reply of who sent a file #. You is a reply of who received a file -#: ../src/filetransfers_window.py:188 ../src/filetransfers_window.py:198 +#: ../src/filetransfers_window.py:189 ../src/filetransfers_window.py:199 #: ../src/history_manager.py:541 msgid "You" msgstr "Vous" -#: ../src/filetransfers_window.py:189 +#: ../src/filetransfers_window.py:190 #, python-format msgid "Sender: %s" msgstr "Expéditeur : %s" -#: ../src/filetransfers_window.py:190 ../src/filetransfers_window.py:627 -#: ../src/tooltips.py:742 +#: ../src/filetransfers_window.py:191 ../src/filetransfers_window.py:637 +#: ../src/tooltips.py:748 msgid "Recipient: " msgstr "Destinataire : " -#: ../src/filetransfers_window.py:201 +#: ../src/filetransfers_window.py:202 #, python-format msgid "Saved in: %s" msgstr "Enregistré dans : %s" -#: ../src/filetransfers_window.py:203 -msgid "File transfer completed" -msgstr "Transfert de fichier terminé" - -#: ../src/filetransfers_window.py:218 ../src/filetransfers_window.py:225 -msgid "File transfer cancelled" -msgstr "Transfert de fichier annulé" - -#: ../src/filetransfers_window.py:218 ../src/filetransfers_window.py:226 -msgid "Connection with peer cannot be established." -msgstr "La connexion avec le contact ne peut être établie." - -#: ../src/filetransfers_window.py:235 +#: ../src/filetransfers_window.py:237 #, python-format msgid "Recipient: %s" msgstr "Destinataire : %s" -#: ../src/filetransfers_window.py:237 +#: ../src/filetransfers_window.py:239 #, python-format msgid "Error message: %s" msgstr "Message d'erreur : %s" -#: ../src/filetransfers_window.py:238 -msgid "File transfer stopped" -msgstr "Transfert de fichier interrompu" - -#: ../src/filetransfers_window.py:266 +#: ../src/filetransfers_window.py:268 msgid "Choose File to Send..." msgstr "Choisissez un fichier à envoyer..." -#: ../src/filetransfers_window.py:282 ../src/tooltips.py:780 +#: ../src/filetransfers_window.py:284 ../src/tooltips.py:786 msgid "Description: " msgstr "Description :" -#: ../src/filetransfers_window.py:295 +#: ../src/filetransfers_window.py:297 msgid "Gajim cannot access this file" msgstr "Gajim ne peut accéder à ce fichier" -#: ../src/filetransfers_window.py:296 +#: ../src/filetransfers_window.py:298 msgid "This file is being used by another process." msgstr "Ce fichier est utilisé par un autre processus." -#: ../src/filetransfers_window.py:330 -#, python-format -msgid "File: %s" -msgstr "Fichier : %s" - -#: ../src/filetransfers_window.py:336 -#, python-format -msgid "Type: %s" -msgstr "Type : %s" - -#: ../src/filetransfers_window.py:338 -#, python-format -msgid "Description: %s" -msgstr "Description : %s" - -#: ../src/filetransfers_window.py:339 -#, python-format -msgid "%s wants to send you a file:" -msgstr "%s souhaite vous envoyer un fichier :" - -#: ../src/filetransfers_window.py:352 ../src/gtkgui_helpers.py:850 +#: ../src/filetransfers_window.py:336 ../src/gtkgui_helpers.py:850 #, python-format msgid "Cannot overwrite existing file \"%s\"" msgstr "Impossible de remplacer le fichier existant \"%s\"" -#: ../src/filetransfers_window.py:353 ../src/gtkgui_helpers.py:851 +#: ../src/filetransfers_window.py:337 ../src/gtkgui_helpers.py:851 msgid "" "A file with this name already exists and you do not have permission to " "overwrite it." @@ -8259,33 +8655,54 @@ msgstr "" "Un fichier du même nom existe déjà et vous n'avez pas la permission de " "l'écraser." -#: ../src/filetransfers_window.py:369 ../src/gtkgui_helpers.py:855 +#: ../src/filetransfers_window.py:354 ../src/gtkgui_helpers.py:855 msgid "This file already exists" msgstr "Ce fichier existe déjà" -#: ../src/filetransfers_window.py:369 ../src/gtkgui_helpers.py:855 +#: ../src/filetransfers_window.py:354 ../src/gtkgui_helpers.py:855 msgid "What do you want to do?" msgstr "Que voulez vous faire ?" -#. read-only bit is used to mark special folder under windows, -#. not to mark that a folder is read-only. See ticket #3587 -#: ../src/filetransfers_window.py:379 ../src/gtkgui_helpers.py:862 +#. read-only bit is used to mark special folder under +#. windows, not to mark that a folder is read-only. +#. See ticket #3587 +#: ../src/filetransfers_window.py:365 ../src/gtkgui_helpers.py:862 #, python-format msgid "Directory \"%s\" is not writable" msgstr "Le dossier \"%s\" n'est pas accessible en écriture" -#: ../src/filetransfers_window.py:379 ../src/gtkgui_helpers.py:863 +#: ../src/filetransfers_window.py:366 ../src/gtkgui_helpers.py:863 msgid "You do not have permission to create files in this directory." msgstr "Vous n'avez pas les permissions de créer des fichiers dans ce dossier." -#: ../src/filetransfers_window.py:389 +#: ../src/filetransfers_window.py:377 msgid "Save File as..." msgstr "Enregistrer le Fichier sous..." +#: ../src/filetransfers_window.py:397 +#, python-format +msgid "File: %s" +msgstr "Fichier : %s" + +#: ../src/filetransfers_window.py:403 +#, python-format +msgid "Type: %s" +msgstr "Type : %s" + +#: ../src/filetransfers_window.py:405 +#, python-format +msgid "Description: %s" +msgstr "Description : %s" + +#: ../src/filetransfers_window.py:406 +#, python-format +msgid "%s wants to send you a file:" +msgstr "%s souhaite vous envoyer un fichier :" + #. Print remaining time in format 00:00:00 #. You can change the places of (hours), (minutes), (seconds) - #. they are not translatable. -#: ../src/filetransfers_window.py:459 +#: ../src/filetransfers_window.py:469 #, python-format msgid "%(hours)02.d:%(minutes)02.d:%(seconds)02.d" msgstr "%(hours)02.d:%(minutes)02.d:%(seconds)02.d" @@ -8293,66 +8710,66 @@ msgstr "%(hours)02.d:%(minutes)02.d:%(seconds)02.d" #. This should make the string Kb/s, #. where 'Kb' part is taken from %s. #. Only the 's' after / (which means second) should be translated. -#: ../src/filetransfers_window.py:552 +#: ../src/filetransfers_window.py:562 #, python-format msgid "(%(filesize_unit)s/s)" msgstr "(%(filesize_unit)s/s)" -#: ../src/filetransfers_window.py:595 ../src/filetransfers_window.py:598 +#: ../src/filetransfers_window.py:605 ../src/filetransfers_window.py:608 msgid "Invalid File" msgstr "Fichier non valide" -#: ../src/filetransfers_window.py:595 +#: ../src/filetransfers_window.py:605 msgid "File: " msgstr "Fichier : " -#: ../src/filetransfers_window.py:599 +#: ../src/filetransfers_window.py:609 msgid "It is not possible to send empty files" msgstr "Il n'est pas possible d'envoyer un fichier vide" -#: ../src/filetransfers_window.py:623 ../src/tooltips.py:732 +#: ../src/filetransfers_window.py:633 ../src/tooltips.py:738 msgid "Name: " msgstr "Nom : " -#: ../src/filetransfers_window.py:625 ../src/tooltips.py:736 +#: ../src/filetransfers_window.py:635 ../src/tooltips.py:742 msgid "Sender: " msgstr "Expéditeur : " -#: ../src/filetransfers_window.py:787 +#: ../src/filetransfers_window.py:797 msgid "Pause" msgstr "Pause" -#: ../src/gajim.py:186 +#: ../src/gajim.py:194 msgid "Gajim needs X server to run. Quiting..." msgstr "Gajim a besoin d'un serveur X pour démarrer. Fermeture..." -#: ../src/gajim.py:188 +#: ../src/gajim.py:196 #, python-format msgid "importing PyGTK failed: %s" msgstr "l'import de PyGTK a échoué : %s" -#: ../src/gajim.py:230 +#: ../src/gajim.py:237 msgid "Gajim needs PyGTK 2.16 or above" msgstr "Gajim a besoin de PyGTK 2.16 pour s'exécuter" -#: ../src/gajim.py:231 +#: ../src/gajim.py:238 msgid "Gajim needs PyGTK 2.16 or above to run. Quiting..." msgstr "" "Gajim a besoin de PyGTK 2.16 ou supérieur pour s'exécuter. Fermeture..." -#: ../src/gajim.py:233 +#: ../src/gajim.py:240 msgid "Gajim needs GTK 2.16 or above" msgstr "Gajim a besoin de GTK 2.16 ou supérieur" -#: ../src/gajim.py:234 +#: ../src/gajim.py:241 msgid "Gajim needs GTK 2.16 or above to run. Quiting..." msgstr "Gajim a besoin de GTK 2.16 ou supérieur pour s'exécuter. Fermeture..." -#: ../src/gajim.py:243 +#: ../src/gajim.py:250 msgid "Gajim needs pywin32 to run" msgstr "Gajim a besoin de pywin32 pour s'exécuter" -#: ../src/gajim.py:244 +#: ../src/gajim.py:251 #, python-format msgid "" "Please make sure that Pywin32 is installed on your system. You can get it at " @@ -8360,11 +8777,11 @@ msgid "" msgstr "Assurez-vous que Pywin32 est installé. Vous pouvez l'obtenir ici : %s" #. set the icon to all newly opened wind -#: ../src/gajim.py:360 +#: ../src/gajim.py:367 msgid "Gajim is already running" msgstr "Gajim est déjà en cours d'exécution" -#: ../src/gajim.py:361 +#: ../src/gajim.py:368 msgid "" "Another instance of Gajim seems to be running\n" "Run anyway?" @@ -8809,7 +9226,7 @@ msgstr "" #: ../src/gajim-remote.py:539 msgid "No uri given" -msgstr "" +msgstr "Pas d'uri donnée" #: ../src/gajim-remote.py:541 msgid "Wrong uri" @@ -8841,29 +9258,23 @@ msgid "Please first choose another for your current theme." msgstr "" "Veuillez tout d'abord appliquer un autre thème avant de supprimer celui-ci." -#: ../src/groupchat_control.py:176 ../src/groupchat_control.py:1562 +#: ../src/groupchat_control.py:179 ../src/groupchat_control.py:1567 #, python-format msgid "%(nick)s is now known as %(new_nick)s" msgstr "%(nick)s est maintenant connu en tant que %(new_nick)s" -#: ../src/groupchat_control.py:202 ../src/groupchat_control.py:1760 -#: ../src/history_window.py:447 ../src/notify.py:169 -#, python-format -msgid "%(nick)s is now %(status)s" -msgstr "%(nick)s est maintenant %(status)s" - -#: ../src/groupchat_control.py:230 +#: ../src/groupchat_control.py:233 msgid "Sending private message failed" msgstr "L'envoi du message privé a échoué" #. in second %s code replaces with nickname -#: ../src/groupchat_control.py:232 +#: ../src/groupchat_control.py:235 #, python-format msgid "You are no longer in group chat \"%(room)s\" or \"%(nick)s\" has left." msgstr "" "Vous n'êtes plus dans le salon « %(room)s » ou « %(nick)s » l'a quitté." -#: ../src/groupchat_control.py:561 +#: ../src/groupchat_control.py:563 msgid "Insert Nickname" msgstr "Insérer un surnom" @@ -8875,182 +9286,182 @@ msgstr "Conversation avec " msgid "Continued conversation" msgstr "Conversation continuée" -#: ../src/groupchat_control.py:1228 +#: ../src/groupchat_control.py:1225 #, python-format msgid "%(nick)s has set the subject to %(subject)s" msgstr "%(nick)s a changé le sujet en %(subject)s" #. Can be a presence (see chg_contact_status in groupchat_control.py) -#: ../src/groupchat_control.py:1246 ../src/groupchat_control.py:1505 +#: ../src/groupchat_control.py:1243 ../src/groupchat_control.py:1509 msgid "Any occupant is allowed to see your full JID" msgstr "" "N'importe quel occupant est autorisé à voir votre identifiant Jabber complet" -#: ../src/groupchat_control.py:1249 +#: ../src/groupchat_control.py:1246 msgid "Room now shows unavailable member" msgstr "Le salon affiche dorénavant les membres non-disponibles" -#: ../src/groupchat_control.py:1251 +#: ../src/groupchat_control.py:1248 msgid "room now does not show unavailable members" msgstr "Le salon n'affiche plus les membres non-disponibles" -#: ../src/groupchat_control.py:1253 +#: ../src/groupchat_control.py:1250 msgid "A non-privacy-related room configuration change has occurred" msgstr "" "Un changement de la configuration du salon relatif à la vie-privée a eu lieu" #. Can be a presence (see chg_contact_status in groupchat_control.py) -#: ../src/groupchat_control.py:1257 +#: ../src/groupchat_control.py:1254 msgid "Room logging is now enabled" msgstr "L'enregistrement des conversations du salon est maintenant activé" -#: ../src/groupchat_control.py:1259 +#: ../src/groupchat_control.py:1256 msgid "Room logging is now disabled" msgstr "L'enregistrement des conversations du salon est maintenant désactivé" -#: ../src/groupchat_control.py:1261 +#: ../src/groupchat_control.py:1258 msgid "Room is now non-anonymous" msgstr "Le salon n'est plus anonyme" -#: ../src/groupchat_control.py:1264 +#: ../src/groupchat_control.py:1261 msgid "Room is now semi-anonymous" msgstr "Le salon est maintenant sami-anonyme" -#: ../src/groupchat_control.py:1267 +#: ../src/groupchat_control.py:1264 msgid "Room is now fully-anonymous" msgstr "Le salon est maintenant totalement anonyme" #. Can be a message (see handle_event_gc_config_change in #. gajim.py) -#: ../src/groupchat_control.py:1509 +#: ../src/groupchat_control.py:1514 msgid "Room logging is enabled" msgstr "L'enregistrement des conversations du salon est activé" -#: ../src/groupchat_control.py:1511 +#: ../src/groupchat_control.py:1516 msgid "A new room has been created" msgstr "Un nouveau salon a été créé" -#: ../src/groupchat_control.py:1514 +#: ../src/groupchat_control.py:1519 msgid "The server has assigned or modified your roomnick" msgstr "Le serveur à défini ou midifié votre Surnom de salon" #. do not print 'kicked by None' -#: ../src/groupchat_control.py:1520 +#: ../src/groupchat_control.py:1525 #, python-format msgid "%(nick)s has been kicked: %(reason)s" msgstr "%(nick)s a été éjecté : %(reason)s" -#: ../src/groupchat_control.py:1523 +#: ../src/groupchat_control.py:1528 #, python-format msgid "%(nick)s has been kicked by %(who)s: %(reason)s" msgstr "%(nick)s a été éjecté par %(who)s : %(reason)s" #. do not print 'banned by None' -#: ../src/groupchat_control.py:1532 +#: ../src/groupchat_control.py:1537 #, python-format msgid "%(nick)s has been banned: %(reason)s" msgstr "%(nick)s a été banni : %(reason)s" -#: ../src/groupchat_control.py:1535 +#: ../src/groupchat_control.py:1540 #, python-format msgid "%(nick)s has been banned by %(who)s: %(reason)s" msgstr "%(nick)s a été banni par %(who)s : %(reason)s" -#: ../src/groupchat_control.py:1546 ../src/groupchat_control.py:1650 +#: ../src/groupchat_control.py:1551 ../src/groupchat_control.py:1655 #, python-format msgid "You are now known as %s" msgstr "Vous êtes désormais connu sous le nom de %s" -#: ../src/groupchat_control.py:1604 ../src/groupchat_control.py:1609 -#: ../src/groupchat_control.py:1615 +#: ../src/groupchat_control.py:1609 ../src/groupchat_control.py:1614 +#: ../src/groupchat_control.py:1620 #, python-format msgid "%(nick)s has been removed from the room (%(reason)s)" msgstr "%(nick)s a été éjecté du salon (%(reason)s)" -#: ../src/groupchat_control.py:1606 +#: ../src/groupchat_control.py:1611 msgid "affiliation changed" msgstr "Changement d'affiliation" -#: ../src/groupchat_control.py:1611 +#: ../src/groupchat_control.py:1616 msgid "room configuration changed to members-only" msgstr "La configuration du salon a changé pour « membres seulement »" -#: ../src/groupchat_control.py:1617 +#: ../src/groupchat_control.py:1622 msgid "system shutdown" msgstr "Extinction du système" -#: ../src/groupchat_control.py:1700 +#: ../src/groupchat_control.py:1705 #, python-format msgid "** Affiliation of %(nick)s has been set to %(affiliation)s by %(actor)s" msgstr "" "** L'affiliation de %(nick)s a été définie à %(affiliation)s par %(actor)s" -#: ../src/groupchat_control.py:1704 +#: ../src/groupchat_control.py:1709 #, python-format msgid "** Affiliation of %(nick)s has been set to %(affiliation)s" msgstr "** L'affiliation de %(nick)s a été définie à %(affiliation)s" -#: ../src/groupchat_control.py:1719 +#: ../src/groupchat_control.py:1724 #, python-format msgid "** Role of %(nick)s has been set to %(role)s by %(actor)s" msgstr "** Le rôle de %(nick)s a été défini à %(role)s par %(actor)s" -#: ../src/groupchat_control.py:1723 +#: ../src/groupchat_control.py:1728 #, python-format msgid "** Role of %(nick)s has been set to %(role)s" msgstr "** Le rôle de %(nick)s a été défini à %(role)s" -#: ../src/groupchat_control.py:1753 +#: ../src/groupchat_control.py:1758 #, python-format msgid "%s has left" msgstr "%s est parti" -#: ../src/groupchat_control.py:1758 +#: ../src/groupchat_control.py:1763 #, python-format msgid "%s has joined the group chat" msgstr "%s a rejoint le salon de discussion" -#: ../src/groupchat_control.py:2014 +#: ../src/groupchat_control.py:2018 #, python-format msgid "Are you sure you want to leave group chat \"%s\"?" msgstr "Êtes-vous sûr de vouloir quitter le salon \"%s\" ?" -#: ../src/groupchat_control.py:2016 +#: ../src/groupchat_control.py:2020 msgid "" "If you close this window, you will be disconnected from this group chat." msgstr "Si vous fermez cette fenêtre, vous serez déconnecté(e) de ce salon." -#: ../src/groupchat_control.py:2020 ../src/gui_interface.py:693 -#: ../src/gui_interface.py:1302 ../src/gui_interface.py:1342 -#: ../src/gui_interface.py:1383 ../src/message_window.py:224 -#: ../src/roster_window.py:2946 ../src/roster_window.py:3617 -#: ../src/roster_window.py:4380 +#: ../src/groupchat_control.py:2024 ../src/gui_interface.py:683 +#: ../src/gui_interface.py:1321 ../src/gui_interface.py:1361 +#: ../src/gui_interface.py:1402 ../src/message_window.py:224 +#: ../src/roster_window.py:2983 ../src/roster_window.py:3661 +#: ../src/roster_window.py:4467 msgid "_Do not ask me again" msgstr "_Ne plus me poser la question" -#: ../src/groupchat_control.py:2054 +#: ../src/groupchat_control.py:2058 msgid "Changing Subject" msgstr "Changement de Sujet" -#: ../src/groupchat_control.py:2055 +#: ../src/groupchat_control.py:2059 msgid "Please specify the new subject:" msgstr "Saisissez le nouveau sujet :" -#: ../src/groupchat_control.py:2062 +#: ../src/groupchat_control.py:2066 msgid "Changing Nickname" msgstr "Changement de Surnom" -#: ../src/groupchat_control.py:2063 +#: ../src/groupchat_control.py:2067 msgid "Please specify the new nickname you want to use:" msgstr "Saisissez le nouveau surnom que vous souhaitez utiliser :" #. Ask for a reason -#: ../src/groupchat_control.py:2094 +#: ../src/groupchat_control.py:2098 #, python-format msgid "Destroying %s" msgstr "Destruction de %s" -#: ../src/groupchat_control.py:2095 +#: ../src/groupchat_control.py:2099 msgid "" "You are going to definitively destroy this room.\n" "You may specify a reason below:" @@ -9058,22 +9469,22 @@ msgstr "" "Vous êtes sur le point de supprimer définitivement ce salon.\n" "Vous pouvez spécifier une raison ci-dessous :" -#: ../src/groupchat_control.py:2097 +#: ../src/groupchat_control.py:2101 msgid "You may also enter an alternate venue:" msgstr "Vous pouvez également entrer une juridiction alternative :" #. ask for reason -#: ../src/groupchat_control.py:2292 +#: ../src/groupchat_control.py:2296 #, python-format msgid "Kicking %s" msgstr "Exclusion de %s" -#: ../src/groupchat_control.py:2293 ../src/groupchat_control.py:2630 +#: ../src/groupchat_control.py:2297 ../src/groupchat_control.py:2629 msgid "You may specify a reason below:" msgstr "Vous pouvez saisir une raison ci-dessous :" #. ask for reason -#: ../src/groupchat_control.py:2629 +#: ../src/groupchat_control.py:2628 #, python-format msgid "Banning %s" msgstr "Bannissement de %s" @@ -9098,12 +9509,6 @@ msgstr "_Rapporter l'anomalie" msgid "Details" msgstr "Détails" -#. we talk about file -#: ../src/gtkgui_helpers.py:203 ../src/gtkgui_helpers.py:219 -#, python-format -msgid "Error: cannot open %s for reading" -msgstr "Erreur : impossible d'ouvrir %s en lecture" - #: ../src/gtkgui_helpers.py:348 msgid "Error reading file:" msgstr "Erreur de lecture du fichier :" @@ -9150,14 +9555,14 @@ msgstr "Enregistrer l'image sous..." #. we are banned #. group chat does not exist -#: ../src/gui_interface.py:126 ../src/gui_interface.py:281 -#: ../src/gui_interface.py:290 ../src/gui_interface.py:295 -#: ../src/gui_interface.py:298 ../src/gui_interface.py:301 -#: ../src/gui_interface.py:306 +#: ../src/gui_interface.py:131 ../src/gui_interface.py:295 +#: ../src/gui_interface.py:304 ../src/gui_interface.py:310 +#: ../src/gui_interface.py:313 ../src/gui_interface.py:316 +#: ../src/gui_interface.py:321 msgid "Unable to join group chat" msgstr "Impossible de rejoindre le salon" -#: ../src/gui_interface.py:127 +#: ../src/gui_interface.py:132 #, python-format msgid "" "Your desired nickname in group chat %s is in use or registered by another " @@ -9168,93 +9573,87 @@ msgstr "" "utilisé ou enregistré par un autre occupant.\n" "Veuillez entrer un autre surnom ci-dessous :" -#: ../src/gui_interface.py:130 +#: ../src/gui_interface.py:135 msgid "Always use this nickname when there is a conflict" msgstr "Toujours utiliser ce pseudo en cas de conflit" -#: ../src/gui_interface.py:147 +#: ../src/gui_interface.py:152 msgid "Do you accept this request?" msgstr "Acceptez vous sa requête ?" -#: ../src/gui_interface.py:149 +#: ../src/gui_interface.py:154 #, python-format msgid "Do you accept this request on account %s?" msgstr "Acceptez vous cette requête sur le compte %s ?" -#: ../src/gui_interface.py:152 +#: ../src/gui_interface.py:157 #, python-format msgid "HTTP (%(method)s) Authorization for %(url)s (id: %(id)s)" msgstr "Autorisation HTTP (%(method)s) pour %(url)s (id : %(id)s)" -#: ../src/gui_interface.py:195 ../src/notify.py:439 +#: ../src/gui_interface.py:200 ../src/notify.py:279 msgid "Connection Failed" msgstr "La connexion a échoué" -#: ../src/gui_interface.py:270 +#: ../src/gui_interface.py:284 #, python-format msgid "A Password is required to join the room %s. Please type it." msgstr "" "Un mot de passe est requis pour rejoindre le salon %s. Veuillez le taper." -#: ../src/gui_interface.py:282 +#: ../src/gui_interface.py:296 #, python-format -msgid "Maximum number of users for %s has been reached" -msgstr "Le nombre maximal d'utilisateurs pour %s a été atteint" +msgid "Maximum number of users for <b>%s</b> has been reached" +msgstr "Le nombre maximal d'utilisateurs pour <b>%s</b> a été atteint" -#: ../src/gui_interface.py:291 +#: ../src/gui_interface.py:305 #, python-format -msgid "You are banned from group chat %s." -msgstr "Vous êtes banni du salon %s." +msgid "You are banned from group chat <b>%s</b>." +msgstr "Vous êtes banni du salon <b>%s</b>." -#: ../src/gui_interface.py:296 +#: ../src/gui_interface.py:311 #, python-format -msgid "Group chat %s does not exist." -msgstr "Le salon %s n'existe pas." +msgid "Group chat <b>%s</b> does not exist." +msgstr "Le salon <b>%s</b> n'existe pas." -#: ../src/gui_interface.py:299 +#: ../src/gui_interface.py:314 msgid "Group chat creation is restricted." msgstr "La création de salon est réservée aux administrateurs." -#: ../src/gui_interface.py:302 +#: ../src/gui_interface.py:317 #, python-format -msgid "Your registered nickname must be used in group chat %s." -msgstr "Votre pseudonyme enregistré doit être utilisé dans le salon %s." +msgid "Your registered nickname must be used in group chat <b>%s</b>." +msgstr "Votre pseudonyme enregistré doit être utilisé dans le salon <b>%s</b>." -#: ../src/gui_interface.py:307 +#: ../src/gui_interface.py:322 #, python-format msgid "You are not in the members list in groupchat %s." msgstr "Vous n'êtes pas dans la liste des membres du salon %s." -#: ../src/gui_interface.py:438 ../src/gui_interface.py:442 +#: ../src/gui_interface.py:415 ../src/gui_interface.py:419 #, python-format msgid "Error %(code)s: %(msg)s" msgstr "Erreur %(code)s : %(msg)s" -#. ('MSGNOTSENT', account, (jid, ierror_msg, msg, time, session)) -#: ../src/gui_interface.py:453 ../src/gui_interface.py:467 -#, python-format -msgid "error while sending %(message)s ( %(error)s )" -msgstr "erreur en envoyant %(message)s ( %(error)s )" - -#: ../src/gui_interface.py:494 ../src/notify.py:441 +#: ../src/gui_interface.py:471 ../src/notify.py:281 msgid "Subscription request" msgstr "Requête d'Inscription" -#: ../src/gui_interface.py:519 +#: ../src/gui_interface.py:496 msgid "Authorization accepted" msgstr "Autorisation acceptée" -#: ../src/gui_interface.py:520 +#: ../src/gui_interface.py:497 #, python-format msgid "The contact \"%s\" has authorized you to see his or her status." msgstr "Le contact \"%s\" vous a autorisé à voir son état." -#: ../src/gui_interface.py:528 +#: ../src/gui_interface.py:505 #, python-format msgid "Contact \"%s\" removed subscription from you" msgstr "Le contact \"%s\" a cessé de vous souscrire à sa présence" -#: ../src/gui_interface.py:529 +#: ../src/gui_interface.py:506 msgid "" "You will always see him or her as offline.\n" "Do you want to remove him or her from your contact list?" @@ -9262,16 +9661,16 @@ msgstr "" "Vous le/la verrez toujours hors-ligne.\n" "Voulez vous le/la supprimer de votre liste de contacts ?" -#: ../src/gui_interface.py:550 ../src/notify.py:443 +#: ../src/gui_interface.py:527 ../src/notify.py:283 msgid "Unsubscribed" msgstr "Désinscrit(e)" -#: ../src/gui_interface.py:561 +#: ../src/gui_interface.py:538 #, python-format msgid "Contact with \"%s\" cannot be established" msgstr "Le contact avec \"%s\" ne peut être établi" -#: ../src/gui_interface.py:659 +#: ../src/gui_interface.py:636 msgid "" "You configured Gajim to use GPG agent, but there is no GPG agent running or " "it returned a wrong passphrase.\n" @@ -9279,23 +9678,32 @@ msgstr "" "Vous avez configuré Gajim pour qu'il utilise un agent GPG, mais aucun agent " "GPG n'est lancé ou il a renvoyé un mauvais mot de passe.\n" -#: ../src/gui_interface.py:661 ../src/gui_interface.py:669 +#: ../src/gui_interface.py:638 ../src/gui_interface.py:646 msgid "You are currently connected without your OpenPGP key." msgstr "Vous êtes actuellement connecté sans clé OpenPGP." -#: ../src/gui_interface.py:663 +#: ../src/gui_interface.py:640 msgid "Your passphrase is incorrect" msgstr "Votre mot de passe est incorrect" -#: ../src/gui_interface.py:668 +#: ../src/gui_interface.py:645 msgid "OpenGPG Passphrase Incorrect" msgstr "Mot de passe OpenGPG est incorrect" -#: ../src/gui_interface.py:691 +#: ../src/gui_interface.py:658 +msgid "Certificate Passphrase Required" +msgstr "Mot de passe du certificat requis" + +#: ../src/gui_interface.py:659 +#, python-format +msgid "Enter the passphrase for the certificate for account %s" +msgstr "Entrez votre mot de passe pour le certificat pour le compte %s" + +#: ../src/gui_interface.py:681 msgid "GPG key not trusted" msgstr "la clef GPG n'est pas une clef de confiance" -#: ../src/gui_interface.py:691 +#: ../src/gui_interface.py:681 msgid "" "The GPG key used to encrypt this chat is not trusted. Do you really want to " "encrypt this message?" @@ -9303,28 +9711,39 @@ msgstr "" "La clef GPG utilisé pour chiffrer cette conversation n'est pas une clef de " "confiance. Voulez-vous vraiment chiffrer ce message ?" -#: ../src/gui_interface.py:704 -#, fuzzy +#: ../src/gui_interface.py:694 msgid "" -"Gnome Keyring is installed but not correctly started " -"(environment variable probably not correctly set)" +"Gnome Keyring is installed but not correctly started (environment variable " +"probably not correctly set)" msgstr "" -"Gnome Keyring est installé mais pas \t\t\t\tcorrectement démarré (variable " -"d'environnement probablement \t\t\t\tmal configurée)" +"Gnome Keyring est installé mais pas correctement démarré (variable " +"d'environnement probablement mal configurée)" -#: ../src/gui_interface.py:811 +#: ../src/gui_interface.py:732 +msgid "" +"Please copy / paste the refresh token from the website that has just been " +"opened." +msgstr "" +"Copiez / Collez le jeton de rafraichissement du site web qui vient d'être " +"ouvert." + +#: ../src/gui_interface.py:735 +msgid "Oauth2 Credentials" +msgstr "Certificat Oauth2" + +#: ../src/gui_interface.py:825 #, python-format msgid "New mail on %(gmail_mail_address)s" msgstr "Nouveau courriel sur %(gmail_mail_address)s" -#: ../src/gui_interface.py:813 +#: ../src/gui_interface.py:827 #, python-format msgid "You have %d new mail conversation" msgid_plural "You have %d new mail conversations" msgstr[0] "Vous avez %d nouveau courrier électronique" msgstr[1] "Vous avez %d nouveaux courriers électroniques" -#: ../src/gui_interface.py:826 +#: ../src/gui_interface.py:840 #, python-format msgid "" "\n" @@ -9339,59 +9758,51 @@ msgstr "" "Sujet : %(subject)s\n" "%(snippet)s" -#: ../src/gui_interface.py:891 +#: ../src/gui_interface.py:905 #, python-format msgid "%s wants to send you a file." msgstr "%s souhaite vous envoyer un fichier." -#: ../src/gui_interface.py:928 ../src/roster_window.py:1896 -msgid "Remote contact stopped transfer" -msgstr "Le contact distant à stoppé le transfert" - -#: ../src/gui_interface.py:931 ../src/roster_window.py:1898 -msgid "Error opening file" -msgstr "Erreur à l'ouverture du fichier" - -#: ../src/gui_interface.py:963 +#: ../src/gui_interface.py:977 #, python-format msgid "You successfully received %(filename)s from %(name)s." msgstr "Vous avez bien reçu %(filename)s de la part de %(name)s." #. ft stopped -#: ../src/gui_interface.py:967 +#: ../src/gui_interface.py:981 #, python-format msgid "File transfer of %(filename)s from %(name)s stopped." msgstr "" "Le transfert du fichier %(filename)s de la part de %(name)s est arrêté." -#: ../src/gui_interface.py:980 +#: ../src/gui_interface.py:994 #, python-format msgid "You successfully sent %(filename)s to %(name)s." msgstr "Vous avez bien envoyé %(filename)s à %(name)s." #. ft stopped -#: ../src/gui_interface.py:984 +#: ../src/gui_interface.py:998 #, python-format msgid "File transfer of %(filename)s to %(name)s stopped." msgstr "Le transfert du fichier %(filename)s à %(name)s est arrêté." -#: ../src/gui_interface.py:1059 +#: ../src/gui_interface.py:1073 msgid "Unable to decrypt message" msgstr "Impossible de déchiffrer le message" -#: ../src/gui_interface.py:1071 +#: ../src/gui_interface.py:1085 msgid "Username Conflict" msgstr "Conflit de nom d'utilisateur" -#: ../src/gui_interface.py:1072 +#: ../src/gui_interface.py:1086 msgid "Please type a new username for your local account" msgstr "Veuillez entrer un nouveau surnom pour votre compte local" -#: ../src/gui_interface.py:1087 +#: ../src/gui_interface.py:1101 msgid "Resource Conflict" msgstr "Conflit de ressource" -#: ../src/gui_interface.py:1088 +#: ../src/gui_interface.py:1102 msgid "" "You are already connected to this account with the same resource. Please " "type a new one" @@ -9400,20 +9811,20 @@ msgstr "" "entrer une nouvelle" #. TODO: we should use another pixmap ;-) -#: ../src/gui_interface.py:1133 +#: ../src/gui_interface.py:1147 #, python-format msgid "%s wants to start a voice chat." msgstr "%s souhaite vous envoyer un fichier." -#: ../src/gui_interface.py:1136 +#: ../src/gui_interface.py:1150 msgid "Voice Chat Request" msgstr "Requête de transfert de fichier" -#: ../src/gui_interface.py:1223 +#: ../src/gui_interface.py:1237 msgid "Error verifying SSL certificate" msgstr "Erreur durant la vérification du certificat SSL" -#: ../src/gui_interface.py:1224 +#: ../src/gui_interface.py:1238 #, python-format msgid "" "There was an error verifying the SSL certificate of your jabber server: " @@ -9424,15 +9835,15 @@ msgstr "" "serveur Jabber : %(error)s\n" "Voulez-vous toujours vous connecter à ce serveur ?" -#: ../src/gui_interface.py:1233 +#: ../src/gui_interface.py:1247 msgid "Ignore this error for this certificate." msgstr "Ignorer cette erreur pour ce certificat." -#: ../src/gui_interface.py:1258 +#: ../src/gui_interface.py:1272 msgid "SSL certificate error" msgstr "Erreur de certificat SSL" -#: ../src/gui_interface.py:1259 +#: ../src/gui_interface.py:1273 #, python-format msgid "" "It seems the SSL certificate of account %(account)s has changed or your " @@ -9450,28 +9861,34 @@ msgstr "" "Voulez vous toujours vous connecter et mettre à jour l'empreinte digitale du " "certificat ?" -#: ../src/gui_interface.py:1295 ../src/gui_interface.py:1337 -#: ../src/gui_interface.py:1379 +#: ../src/gui_interface.py:1312 ../src/gui_interface.py:1356 +#: ../src/gui_interface.py:1398 msgid "Insecure connection" msgstr "Connexion non-sécurisée" -#: ../src/gui_interface.py:1296 +#: ../src/gui_interface.py:1313 #, python-format msgid "" "You are about to connect to the account %(account)s (%(server)s) with an " "insecure connection. This means all your conversations will be exchanged " -"unencrypted. Are you sure you want to do that?" +"unencrypted. This type of connection is really discouraged.\n" +"Are you sure you want to do that?" msgstr "" "Vous êtes sur le point de vous connecter au compte %(account)s (%(server)s) " "avec une connexion non-sécurisée. Cela signifie que toutes vos conversations " -"ne seront pas chiffrées. Êtes vous sûr de vouloir faire cela ?" +"ne seront pas chiffrées. Ce type de connexion est vraiment déconseillé.\n" +"Êtes vous sûr de vouloir faire cela ?" -#: ../src/gui_interface.py:1301 ../src/gui_interface.py:1341 -#: ../src/gui_interface.py:1382 +#: ../src/gui_interface.py:1319 ../src/gui_interface.py:1360 +#: ../src/gui_interface.py:1401 msgid "Yes, I really want to connect insecurely" msgstr "Oui, je veux vraiment me connecter de façon non-sécurisée" -#: ../src/gui_interface.py:1338 +#: ../src/gui_interface.py:1320 +msgid "Gajim will NOT connect unless you check this box" +msgstr "Gajim ne se connectera pas si vous ne cochez pas cette case." + +#: ../src/gui_interface.py:1357 msgid "" "You are about to send your password on an insecure connection. You should " "install PyOpenSSL to prevent that. Are you sure you want to do that?" @@ -9480,7 +9897,7 @@ msgstr "" "sécurisée. Vous devriez installer PyOpenSSL pour empêcher cela. Êtes-vous " "sûr de vouloir le faire ?" -#: ../src/gui_interface.py:1380 +#: ../src/gui_interface.py:1399 msgid "" "You are about to send your password unencrypted on an insecure connection. " "Are you sure you want to do that?" @@ -9489,11 +9906,11 @@ msgstr "" "chiffrée. Êtes vous sûr de vouloir le faire ?" #. theme doesn't exist, disable emoticons -#: ../src/gui_interface.py:1887 ../src/gui_interface.py:1910 +#: ../src/gui_interface.py:1909 ../src/gui_interface.py:1932 msgid "Emoticons disabled" msgstr "Émoticônes désactivées" -#: ../src/gui_interface.py:1888 +#: ../src/gui_interface.py:1910 msgid "" "Your configured emoticons theme has not been found, so emoticons have been " "disabled." @@ -9501,7 +9918,7 @@ msgstr "" "Votre thème d'émoticônes n'a pu être trouvé, les émoticônes sont donc " "désactivées." -#: ../src/gui_interface.py:1911 +#: ../src/gui_interface.py:1933 msgid "" "Your configured emoticons theme cannot been loaded. You maybe need to update " "the format of emoticons.py file. See http://trac.gajim.org/wiki/Emoticons " @@ -9511,7 +9928,7 @@ msgstr "" "mettre à jour le format du fichier emoticons.py. Voir http://trac.gajim.org/" "wiki/Emoticons pour plus de détails." -#: ../src/gui_interface.py:1955 ../src/roster_window.py:3784 +#: ../src/gui_interface.py:1977 ../src/roster_window.py:3828 msgid "You cannot join a group chat while you are invisible" msgstr "" "Vous ne pouvez pas joindre un salon de discussion tant que vous êtes " @@ -9519,35 +9936,35 @@ msgstr "" #. it is good to notify the user #. in case he or she cannot see the output of the console -#: ../src/gui_interface.py:2342 +#: ../src/gui_interface.py:2364 msgid "Could not save your settings and preferences" msgstr "Impossible d'enregistrer vos informations de configuration" -#: ../src/gui_interface.py:2889 +#: ../src/gui_interface.py:2926 msgid "Passphrase Required" msgstr "Mot de Passe Requis" -#: ../src/gui_interface.py:2890 +#: ../src/gui_interface.py:2927 #, python-format msgid "Enter GPG key passphrase for key %(keyid)s (account %(account)s)." msgstr "" "Entrez votre mot de passe GPG pour la clé %(keyid)s (compte %(account)s)." -#: ../src/gui_interface.py:2904 +#: ../src/gui_interface.py:2941 msgid "GPG key expired" msgstr "Clef GPG expirée" -#: ../src/gui_interface.py:2905 +#: ../src/gui_interface.py:2942 #, python-format msgid "Your GPG key has expired, you will be connected to %s without OpenPGP." msgstr "Votre clef GPG a expiré, vous serez connecté(e) à %s sans OpenPGP." #. ask again -#: ../src/gui_interface.py:2914 +#: ../src/gui_interface.py:2951 msgid "Wrong Passphrase" msgstr "Mot de passe erroné" -#: ../src/gui_interface.py:2915 +#: ../src/gui_interface.py:2952 msgid "Please retype your GPG passphrase or press Cancel." msgstr "Ressaisissez votre mot de passe GPG ou appuyez sur Annuler." @@ -9555,7 +9972,7 @@ msgstr "Ressaisissez votre mot de passe GPG ou appuyez sur Annuler." msgid "_New Group Chat" msgstr "_Nouveau Salon de Discussion" -#: ../src/gui_menu_builder.py:419 +#: ../src/gui_menu_builder.py:420 msgid "I would like to add you to my roster" msgstr "Je souhaiterais vous ajouter à ma liste de contacts" @@ -9570,7 +9987,7 @@ msgstr "Contacts" #. holds time #: ../src/history_manager.py:169 ../src/history_manager.py:213 -#: ../src/history_window.py:98 +#: ../src/history_window.py:99 msgid "Date" msgstr "Date" @@ -9581,7 +9998,7 @@ msgstr "Pseudonyme" #. holds message #: ../src/history_manager.py:185 ../src/history_manager.py:220 -#: ../src/history_window.py:106 +#: ../src/history_window.py:107 msgid "Message" msgstr "Message" @@ -9613,9 +10030,8 @@ msgstr "" "Si vous choisissez OUI, patientez..." #: ../src/history_manager.py:259 -#, fuzzy msgid "Database Cleanup" -msgstr "Erreur de base de données" +msgstr "Nettoyage de la base de données" #: ../src/history_manager.py:477 msgid "Exporting History Logs..." @@ -9640,9 +10056,8 @@ msgid "This is an irreversible operation." msgstr "Ceci est une opération irréversible." #: ../src/history_manager.py:600 ../src/history_manager.py:639 -#, fuzzy msgid "Deletion Confirmation" -msgstr "Annuler la confirmation" +msgstr "Confirmation de la suppression" #: ../src/history_manager.py:634 msgid "Do you really want to delete the selected message?" @@ -9650,48 +10065,40 @@ msgid_plural "Do you really want to delete the selected messages?" msgstr[0] "Voulez-vous vraiment supprimer le message sélectionné ?" msgstr[1] "Voulez-vous vraiment supprimer les messages sélectionnés ?" -#: ../src/history_window.py:305 +#: ../src/history_window.py:306 #, python-format msgid "Conversation History with %s" msgstr "Historique de conversation avec %s" -#: ../src/history_window.py:355 +#: ../src/history_window.py:356 msgid "Disk Error" msgstr "Erreur du disque" -#: ../src/history_window.py:443 +#: ../src/history_window.py:444 #, python-format msgid "%(nick)s is now %(status)s: %(status_msg)s" msgstr "%(nick)s est maintenant %(status)s : %(status_msg)s" -#: ../src/history_window.py:454 +#: ../src/history_window.py:455 #, python-format msgid "Error: %s" msgstr "Erreur : %s" -#: ../src/history_window.py:456 +#: ../src/history_window.py:457 msgid "Error" msgstr "Erreur" -#: ../src/history_window.py:458 +#: ../src/history_window.py:459 #, python-format msgid "Status is now: %(status)s: %(status_msg)s" msgstr "L'état est maintenant : %(status)s : %(status_msg)s" -#: ../src/history_window.py:461 +#: ../src/history_window.py:462 #, python-format msgid "Status is now: %(status)s" msgstr "L'état est maintenant : %(status)s" -#: ../src/htmltextview.py:518 ../src/htmltextview.py:528 -msgid "Timeout loading image" -msgstr "Délai du chargement de l'image dépassé" - -#: ../src/htmltextview.py:538 -msgid "Image is too big" -msgstr "L'image est trop grande" - -#: ../src/htmltextview.py:571 +#: ../src/htmltextview.py:522 msgid "Loading" msgstr "Chargement" @@ -9703,19 +10110,19 @@ msgstr "Vous êtes sur le point de fermer plusieurs onglets" msgid "Do you really want to close them all?" msgstr "Voulez-vous vraiment tous les fermer ?" -#: ../src/message_window.py:497 +#: ../src/message_window.py:496 msgid "Chats" msgstr "Discussions" -#: ../src/message_window.py:499 +#: ../src/message_window.py:498 msgid "Group Chats" msgstr "Salons de discussion" -#: ../src/message_window.py:501 +#: ../src/message_window.py:500 msgid "Private Chats" msgstr "Conversations privées" -#: ../src/message_window.py:507 +#: ../src/message_window.py:506 msgid "Messages" msgstr "Messages" @@ -9727,86 +10134,67 @@ msgstr "- les messages seront archivés" msgid "- messages will not be logged" msgstr "- les messages ne seront pas archivés" -#: ../src/notify.py:167 -#, python-format -msgid "%(nick)s Changed Status" -msgstr "%(nick)s a changé d'état" - -#: ../src/notify.py:177 -#, python-format -msgid "%(nickname)s Signed In" -msgstr "%(nickname)s s'est connecté(e)" - -#: ../src/notify.py:185 -#, python-format -msgid "%(nickname)s Signed Out" -msgstr "%(nickname)s s'est déconnecté(e)" - -#: ../src/notify.py:482 +#: ../src/notify.py:322 msgid "Ignore" msgstr "Ignorer" -#: ../src/plugins/gui.py:67 +#: ../src/plugins/gui.py:68 msgid "Plugin" -msgstr "" +msgstr "Plugin" -#: ../src/plugins/gui.py:160 -#, fuzzy +#: ../src/plugins/gui.py:162 msgid "Plugin failed" -msgstr "L'inscription a échoué" +msgstr "Plugin échoué" -#: ../src/plugins/gui.py:204 +#: ../src/plugins/gui.py:206 msgid "Unable to properly remove the plugin" msgstr "Impossible de supprimer le plugin proprement" #. members not safe -#: ../src/plugins/gui.py:212 ../src/plugins/pluginmanager.py:495 -#: ../src/plugins/pluginmanager.py:503 -#, fuzzy +#: ../src/plugins/gui.py:214 ../src/plugins/pluginmanager.py:519 +#: ../src/plugins/pluginmanager.py:527 msgid "Archive is malformed" -msgstr "Le service a envoyé des données mal-formées" +msgstr "L'archive est mal-formée" -#: ../src/plugins/gui.py:235 ../src/plugins/gui.py:243 -#: ../src/plugins/pluginmanager.py:511 +#: ../src/plugins/gui.py:237 ../src/plugins/gui.py:245 +#: ../src/plugins/pluginmanager.py:535 msgid "Plugin already exists" msgstr "Le plugin existe déjà" -#: ../src/plugins/gui.py:235 +#: ../src/plugins/gui.py:237 msgid "Overwrite?" msgstr "Remplacer ?" -#: ../src/plugins/gui.py:264 -#, fuzzy +#: ../src/plugins/gui.py:266 msgid "Configuration" -msgstr "Configuration du salon de discussion" +msgstr "Configuration" #. it is not zip file #. CRC error -#: ../src/plugins/pluginmanager.py:481 ../src/plugins/pluginmanager.py:487 +#: ../src/plugins/pluginmanager.py:505 ../src/plugins/pluginmanager.py:511 msgid "Archive corrupted" msgstr "Archive corrompue" -#: ../src/plugins/pluginmanager.py:483 -#, fuzzy +#: ../src/plugins/pluginmanager.py:507 msgid "Archive empty" -msgstr "Le fichier est vide" +msgstr "L'archive est vide" #: ../src/profile_window.py:60 msgid "Retrieving profile..." msgstr "Récupération du profil..." -#: ../src/profile_window.py:125 ../src/roster_window.py:3141 +#: ../src/profile_window.py:125 ../src/roster_window.py:3178 msgid "File is empty" msgstr "Le fichier est vide" -#: ../src/profile_window.py:128 ../src/roster_window.py:3144 +#: ../src/profile_window.py:128 ../src/roster_window.py:3181 msgid "File does not exist" msgstr "Le fichier n'existe pas" #. keep identation #. unknown format #: ../src/profile_window.py:142 ../src/profile_window.py:158 -#: ../src/roster_window.py:3146 ../src/roster_window.py:3157 +#: ../src/roster_window.py:3183 ../src/roster_window.py:3194 msgid "Could not load image" msgstr "Impossible de charger l'image" @@ -9846,51 +10234,51 @@ msgstr "" "Une erreur s'est produite lors de la publication de vos informations " "personnelles, veuillez réessayer plus tard." -#: ../src/roster_window.py:240 ../src/roster_window.py:1028 +#: ../src/roster_window.py:240 ../src/roster_window.py:1031 msgid "Merged accounts" msgstr "Comptes regroupés" -#: ../src/roster_window.py:1961 +#: ../src/roster_window.py:1988 msgid "Authorization has been sent" msgstr "L'Autorisation a été envoyée" -#: ../src/roster_window.py:1962 +#: ../src/roster_window.py:1989 #, python-format msgid "Now \"%s\" will know your status." msgstr "Désormais \"%s\" connaîtra votre état." -#: ../src/roster_window.py:1985 +#: ../src/roster_window.py:2012 msgid "Subscription request has been sent" msgstr "La requête d'inscription a été envoyée" -#: ../src/roster_window.py:1986 +#: ../src/roster_window.py:2013 #, python-format msgid "If \"%s\" accepts this request you will know his or her status." msgstr "Si \"%s\" accepte cette requête, vous connaîtrez son état." -#: ../src/roster_window.py:2000 +#: ../src/roster_window.py:2027 msgid "Authorization has been removed" msgstr "L'Autorisation a été supprimée" -#: ../src/roster_window.py:2001 +#: ../src/roster_window.py:2028 #, python-format msgid "Now \"%s\" will always see you as offline." msgstr "Dorénavant, \"%s\" vous verra toujours déconnecté(e)." -#: ../src/roster_window.py:2028 +#: ../src/roster_window.py:2055 msgid "GPG is not usable" msgstr "GPG n'est pas utilisable" -#: ../src/roster_window.py:2029 +#: ../src/roster_window.py:2056 #, python-format msgid "You will be connected to %s without OpenPGP." msgstr "Vous serez connecté à %s sans OpenPGP." -#: ../src/roster_window.py:2241 ../src/roster_window.py:3714 +#: ../src/roster_window.py:2263 ../src/roster_window.py:3758 msgid "You are participating in one or more group chats" msgstr "Vous participez à un ou plusieurs salons" -#: ../src/roster_window.py:2242 ../src/roster_window.py:3715 +#: ../src/roster_window.py:2264 ../src/roster_window.py:3759 msgid "" "Changing your status to invisible will result in disconnection from those " "group chats. Are you sure you want to go invisible?" @@ -9898,27 +10286,27 @@ msgstr "" "Basculer en état invisible entraînera votre déconnexion ces salons. Êtes-" "vous sûr de vouloir être invisible ?" -#: ../src/roster_window.py:2268 +#: ../src/roster_window.py:2290 msgid "desync'ed" msgstr "désynchronisé" -#: ../src/roster_window.py:2334 +#: ../src/roster_window.py:2356 msgid "Really quit Gajim?" msgstr "Vraiment quitter Gajim ?" -#: ../src/roster_window.py:2335 +#: ../src/roster_window.py:2357 msgid "Are you sure you want to quit Gajim?" msgstr "Êtes-vous sûr de vouloir quitter Gajim ?" -#: ../src/roster_window.py:2336 +#: ../src/roster_window.py:2358 msgid "Always close Gajim" msgstr "Toujours fermer Gajim" -#: ../src/roster_window.py:2420 +#: ../src/roster_window.py:2444 msgid "You have running file transfers" msgstr "Vous des transferts de fichiers en cours" -#: ../src/roster_window.py:2421 +#: ../src/roster_window.py:2445 msgid "" "If you quit now, the file(s) being transferred will be stopped. Do you still " "want to quit?" @@ -9926,11 +10314,11 @@ msgstr "" "Si vous quittez maintenant, le transfert de fichier(s) sera arrêté. Voulez-" "vous toujours quitter ?" -#: ../src/roster_window.py:2452 ../src/roster_window.py:2860 +#: ../src/roster_window.py:2476 ../src/roster_window.py:2897 msgid "You have unread messages" msgstr "Vous avez des messages non lus" -#: ../src/roster_window.py:2453 +#: ../src/roster_window.py:2477 msgid "" "Messages will only be available for reading them later if you have history " "enabled and contact is in your roster." @@ -9938,16 +10326,16 @@ msgstr "" "Les messages seront disponibles pour une lecture ultérieure si l'archivage " "de l'historique est actif et si le contact est dans votre liste." -#: ../src/roster_window.py:2861 +#: ../src/roster_window.py:2898 msgid "You must read them before removing this transport." msgstr "Vous devez les lire avant de supprimer ce compte." -#: ../src/roster_window.py:2864 +#: ../src/roster_window.py:2901 #, python-format msgid "Transport \"%s\" will be removed" msgstr "La passerelle \"%s\" sera enlevée" -#: ../src/roster_window.py:2865 +#: ../src/roster_window.py:2902 msgid "" "You will no longer be able to send and receive messages from contacts using " "this transport." @@ -9955,11 +10343,11 @@ msgstr "" "Vous ne pourrez plus envoyer et recevoir de messages des contacts de cette " "passerelle." -#: ../src/roster_window.py:2868 +#: ../src/roster_window.py:2905 msgid "Transports will be removed" msgstr "Les passerelles seront enlevées" -#: ../src/roster_window.py:2873 +#: ../src/roster_window.py:2910 #, python-format msgid "" "You will no longer be able to send and receive messages to contacts from " @@ -9968,13 +10356,13 @@ msgstr "" "Vous ne pourrez plus envoyer et recevoir de messages aux contacts de ces " "passerelles : %s" -#: ../src/roster_window.py:2941 +#: ../src/roster_window.py:2978 msgid "You are about to block a contact. Are you sure you want to continue?" msgstr "" "Vous êtes sur le point de bloquer un contact. Êtes-vous sûr de vouloir " "continuer ?" -#: ../src/roster_window.py:2943 +#: ../src/roster_window.py:2980 msgid "" "This contact will see you offline and you will not receive messages he will " "send you." @@ -9983,58 +10371,58 @@ msgstr "" "vous enverra." #. it's jid -#: ../src/roster_window.py:3033 +#: ../src/roster_window.py:3070 msgid "Rename Contact" msgstr "Renommer le contact" -#: ../src/roster_window.py:3034 +#: ../src/roster_window.py:3071 #, python-format msgid "Enter a new nickname for contact %s" msgstr "Entrez un nouveau surnom pour le contact %s." -#: ../src/roster_window.py:3041 +#: ../src/roster_window.py:3078 msgid "Rename Group" msgstr "_Renommer le Groupe" -#: ../src/roster_window.py:3042 +#: ../src/roster_window.py:3079 #, python-format msgid "Enter a new name for group %s" msgstr "Entrez un nouveau nom pour le groupe %s." -#: ../src/roster_window.py:3087 +#: ../src/roster_window.py:3124 msgid "Remove Group" msgstr "_Supprimer le Groupe" -#: ../src/roster_window.py:3088 +#: ../src/roster_window.py:3125 #, python-format msgid "Do you want to remove group %s from the roster?" msgstr "Voulez-vous enlever le groupe %s de la liste de contacts ?" -#: ../src/roster_window.py:3089 +#: ../src/roster_window.py:3126 msgid "Also remove all contacts in this group from your roster" msgstr "" "Supprimer également de votre roster tous les contacts appartenant à ce groupe" -#: ../src/roster_window.py:3128 +#: ../src/roster_window.py:3165 msgid "Assign OpenPGP Key" msgstr "Assigner une clé OpenPGP" -#: ../src/roster_window.py:3129 +#: ../src/roster_window.py:3166 msgid "Select a key to apply to the contact" msgstr "Choisissez la clé correspondant au contact" -#: ../src/roster_window.py:3524 +#: ../src/roster_window.py:3568 #, python-format msgid "Contact \"%s\" will be removed from your roster" msgstr "Le contact \"%s\" sera enlevé de la liste de contacts" -#: ../src/roster_window.py:3526 +#: ../src/roster_window.py:3570 #, python-format msgid "You are about to remove \"%(name)s\" (%(jid)s) from your roster.\n" msgstr "" "Vous êtes sur le point de supprimer « %(name)s » (%(jid)s) de votre roster.\n" -#: ../src/roster_window.py:3531 +#: ../src/roster_window.py:3575 msgid "" "By removing this contact you also remove authorization resulting in him or " "her always seeing you as offline." @@ -10043,11 +10431,11 @@ msgstr "" "verra donc toujours déconnecté(e)." #. Contact is not in roster -#: ../src/roster_window.py:3537 +#: ../src/roster_window.py:3581 msgid "Do you want to continue?" msgstr "Voulez vous continuer ?" -#: ../src/roster_window.py:3541 +#: ../src/roster_window.py:3585 msgid "" "By removing this contact you also by default remove authorization resulting " "in him or her always seeing you as offline." @@ -10055,16 +10443,16 @@ msgstr "" "En supprimant ce contact, vous supprimez également son autorisation. Il/Elle " "vous verra donc toujours déconnecté(e)." -#: ../src/roster_window.py:3544 +#: ../src/roster_window.py:3588 msgid "I want this contact to know my status after removal" msgstr "Autoriser ce contact à connaître mon état après la suppression" #. several contact to remove at the same time -#: ../src/roster_window.py:3548 +#: ../src/roster_window.py:3592 msgid "Contacts will be removed from your roster" msgstr "Les contacts seront enlevés de la liste de contacts" -#: ../src/roster_window.py:3553 +#: ../src/roster_window.py:3597 #, python-format msgid "" "By removing these contacts:%s\n" @@ -10074,14 +10462,14 @@ msgstr "" "vous enlevez aussi leurs autorisations. Ces contacts vous verront donc " "toujours déconnecté(e)." -#: ../src/roster_window.py:3611 +#: ../src/roster_window.py:3655 msgid "" "You are about to send a custom status. Are you sure you want to continue?" msgstr "" "Vous êtes sur le point d'envoyer un statut personnalisé. Êtes-vous sûr de " "vouloir continuer ?" -#: ../src/roster_window.py:3613 +#: ../src/roster_window.py:3657 #, python-format msgid "" "This contact will temporarily see you as %(status)s, but only until you " @@ -10090,20 +10478,20 @@ msgstr "" "Ce contact vous verra %(status)s, mais seulement jusqu'à ce que vous " "changiez votre statut. Il verra alors votre statut global." -#: ../src/roster_window.py:3632 +#: ../src/roster_window.py:3676 msgid "No account available" msgstr "Aucun compte disponible" -#: ../src/roster_window.py:3633 +#: ../src/roster_window.py:3677 msgid "You must create an account before you can chat with other contacts." msgstr "" "Vous devez créer un compte avant de pouvoir discuter avec d'autres contacts." -#: ../src/roster_window.py:4280 +#: ../src/roster_window.py:4367 msgid "Metacontacts storage not supported by your server" msgstr "Le stockage des métacontacts n'est pas supporté par votre serveur" -#: ../src/roster_window.py:4282 +#: ../src/roster_window.py:4369 msgid "" "Your server does not support storing metacontacts information. So those " "information will not be saved on next reconnection." @@ -10112,14 +10500,14 @@ msgstr "" "métacontacts. Par conséquent, ces informations ne seront pas enregistrées " "lors de la prochaine connexion." -#: ../src/roster_window.py:4374 +#: ../src/roster_window.py:4461 msgid "" "You are about to create a metacontact. Are you sure you want to continue?" msgstr "" "Vous êtes sur le point de créer un métacontact. Êtes-vous sûr de vouloir " "continuer ?" -#: ../src/roster_window.py:4376 +#: ../src/roster_window.py:4463 msgid "" "Metacontacts are a way to regroup several contacts in one line. Generally it " "is used when the same person has several Jabber accounts or transport " @@ -10129,28 +10517,28 @@ msgstr "" "Généralement, cela est utile lorsqu'une même personne possède plusieurs " "comptes Jabber ou des comptes de transport." -#: ../src/roster_window.py:4497 +#: ../src/roster_window.py:4584 msgid "Invalid file URI:" msgstr "Url de fichier invalide :" -#: ../src/roster_window.py:4509 +#: ../src/roster_window.py:4596 #, python-format msgid "Do you want to send this file to %s:" msgid_plural "Do you want to send these files to %s:" msgstr[0] "Voulez vous envoyer ce fichier à %s :" msgstr[1] "Voulez vous envoyer ces fichiers à %s :" -#: ../src/roster_window.py:4644 +#: ../src/roster_window.py:4731 #, python-format msgid "Send %s to %s" msgstr "Envoyer %s à %s" -#: ../src/roster_window.py:4655 -#, fuzzy, python-format +#: ../src/roster_window.py:4742 +#, python-format msgid "Make %s first contact" -msgstr "Faire de %s et %s des métacontacts" +msgstr "Faire de %s le premier contact" -#: ../src/roster_window.py:4658 +#: ../src/roster_window.py:4745 #, python-format msgid "Make %s and %s metacontacts" msgstr "Faire de %s et %s des métacontacts" @@ -10160,129 +10548,129 @@ msgstr "Faire de %s et %s des métacontacts" #. for chat_with #. for single message #. join gc -#: ../src/roster_window.py:5098 ../src/roster_window.py:5152 -#: ../src/roster_window.py:5161 ../src/statusicon.py:264 +#: ../src/roster_window.py:5184 ../src/roster_window.py:5238 +#: ../src/roster_window.py:5247 ../src/statusicon.py:264 #: ../src/statusicon.py:311 ../src/statusicon.py:317 #, python-format msgid "using account %s" msgstr "du compte %s" #. add -#: ../src/roster_window.py:5168 +#: ../src/roster_window.py:5254 #, python-format msgid "to %s account" msgstr "au compte %s" #. disco -#: ../src/roster_window.py:5173 +#: ../src/roster_window.py:5259 #, python-format msgid "using %s account" msgstr "pour le compte %s" -#: ../src/roster_window.py:5212 ../src/statusicon.py:327 +#: ../src/roster_window.py:5298 ../src/statusicon.py:327 msgid "_Manage Bookmarks..." msgstr "Gérer les marque-pages..." #. profile, avatar -#: ../src/roster_window.py:5232 +#: ../src/roster_window.py:5318 #, python-format msgid "of account %s" msgstr "du compte %s" -#: ../src/roster_window.py:5273 +#: ../src/roster_window.py:5359 #, python-format msgid "for account %s" msgstr "pour le compte %s" -#: ../src/roster_window.py:5333 ../src/roster_window.py:5438 +#: ../src/roster_window.py:5419 ../src/roster_window.py:5527 msgid "_Change Status Message" msgstr "_Changer le message d'état" -#: ../src/roster_window.py:5366 +#: ../src/roster_window.py:5452 msgid "Publish Tune" msgstr "Publier ce que j'écoute" -#: ../src/roster_window.py:5368 +#: ../src/roster_window.py:5454 msgid "Publish Location" msgstr "Publier la localisation" -#: ../src/roster_window.py:5371 +#: ../src/roster_window.py:5457 msgid "Configure Services..." msgstr "Configurer les Services..." -#: ../src/roster_window.py:5516 +#: ../src/roster_window.py:5605 msgid "_Maximize All" msgstr "Tout _maximiser" -#: ../src/roster_window.py:5526 ../src/roster_window.py:5699 +#: ../src/roster_window.py:5615 ../src/roster_window.py:5788 msgid "Send Group M_essage" msgstr "_Envoyer un message de groupe" -#: ../src/roster_window.py:5534 +#: ../src/roster_window.py:5623 msgid "To all users" msgstr "À tous les utilisateurs" -#: ../src/roster_window.py:5538 +#: ../src/roster_window.py:5627 msgid "To all online users" msgstr "À tous les utilisateurs connectés" #. Manage Transport submenu -#: ../src/roster_window.py:5719 +#: ../src/roster_window.py:5808 msgid "_Manage Contacts" msgstr "_Gérer les Contacts" #. Edit Groups -#: ../src/roster_window.py:5728 +#: ../src/roster_window.py:5817 msgid "Edit _Groups" msgstr "Éditer les _groupes" #. Send single message -#: ../src/roster_window.py:5783 +#: ../src/roster_window.py:5872 msgid "Send Single Message" msgstr "Envoyer un message Simple" #. Execute Command -#: ../src/roster_window.py:5830 +#: ../src/roster_window.py:5919 msgid "Execute Command..." msgstr "Exécuter une commande..." #. Manage Transport submenu -#: ../src/roster_window.py:5840 +#: ../src/roster_window.py:5929 msgid "_Manage Transport" msgstr "_Gérer les Passerelles" #. Modify Transport -#: ../src/roster_window.py:5849 +#: ../src/roster_window.py:5938 msgid "_Modify Transport" msgstr "_Modifier la Passerelle" #. Rename -#: ../src/roster_window.py:5859 +#: ../src/roster_window.py:5948 msgid "_Rename" msgstr "_Renommer" -#: ../src/roster_window.py:5919 +#: ../src/roster_window.py:6008 msgid "_Maximize" msgstr "_Maximiser" -#: ../src/roster_window.py:5928 +#: ../src/roster_window.py:6017 msgid "_Reconnect" msgstr "_Reconnecter" -#: ../src/roster_window.py:5935 +#: ../src/roster_window.py:6024 msgid "_Disconnect" msgstr "_Déconnecter" #. History manager -#: ../src/roster_window.py:6024 +#: ../src/roster_window.py:6113 msgid "History Manager" msgstr "Gestionnaire d'historique" -#: ../src/roster_window.py:6035 +#: ../src/roster_window.py:6124 msgid "_Join New Group Chat" msgstr "_Joindre un salon de discussion" -#: ../src/roster_window.py:6254 +#: ../src/roster_window.py:6343 msgid "Change Status Message..." msgstr "Changer le message d'état..." @@ -10299,19 +10687,14 @@ msgstr "Erreur dans la forme des données reçues" msgid "No result" msgstr "Aucun résultat." -#: ../src/session.py:95 -msgid "Disk WriteError" -msgstr "Erreur d'écriture du disque" - -#: ../src/session.py:431 ../src/session.py:475 +#: ../src/session.py:411 ../src/session.py:470 msgid "Confirm these session options" msgstr "Confirmer ces options de session" -#: ../src/session.py:432 +#: ../src/session.py:413 #, python-format msgid "" -"The remote client wants '\n" -" 'to negotiate an session with these features:\n" +"The remote client wants to negotiate a session with these features:\n" "\n" "%s\n" "\n" @@ -10319,11 +10702,11 @@ msgid "" msgstr "" "Le client distant veut négocier une session avec ces fonctionnalités :\n" "\n" -"\t%s\n" +"%s\n" "\n" -"\tCes options sont-elles acceptables ?" +"Ces options sont-elles acceptables ?" -#: ../src/session.py:476 +#: ../src/session.py:472 #, python-format msgid "" "The remote client selected these options:\n" @@ -10338,6 +10721,10 @@ msgstr "" "\n" "Continuer la session ?" +#: ../src/session.py:475 +msgid "Always accept for this contact" +msgstr "Toujours accepter pour ce contact" + #: ../src/statusicon.py:228 msgid "_Change Status Message..." msgstr "_Changer le message d'état..." @@ -10350,134 +10737,134 @@ msgstr "Cacher la liste de contacts" msgid "Hide this menu" msgstr "Cacher ce menu" -#: ../src/tooltips.py:392 ../src/tooltips.py:604 +#: ../src/tooltips.py:393 ../src/tooltips.py:610 msgid "Jabber ID: " msgstr "Identifiant Jabber :" -#: ../src/tooltips.py:395 ../src/tooltips.py:608 +#: ../src/tooltips.py:396 ../src/tooltips.py:614 msgid "Resource: " msgstr "Ressource : " -#: ../src/tooltips.py:401 +#: ../src/tooltips.py:402 #, python-format msgid "%(owner_or_admin_or_member)s of this group chat" msgstr "%(owner_or_admin_or_member)s de ce salon" -#: ../src/tooltips.py:502 +#: ../src/tooltips.py:508 msgid " [blocked]" msgstr " [bloqué]" -#: ../src/tooltips.py:506 +#: ../src/tooltips.py:512 msgid " [minimized]" msgstr " [minimisé]" -#: ../src/tooltips.py:521 ../src/tooltips.py:777 +#: ../src/tooltips.py:527 ../src/tooltips.py:783 msgid "Status: " msgstr "État : " -#: ../src/tooltips.py:565 +#: ../src/tooltips.py:571 #, python-format msgid "Last status: %s" msgstr "Dernier état : %s" -#: ../src/tooltips.py:567 +#: ../src/tooltips.py:573 #, python-format msgid " since %s" msgstr " depuis %s" -#: ../src/tooltips.py:585 +#: ../src/tooltips.py:591 msgid "Connected" msgstr "Connecté" -#: ../src/tooltips.py:587 +#: ../src/tooltips.py:593 msgid "Disconnected" msgstr "Déconnecté(e)" #. ('both' is the normal sub so we don't show it) -#: ../src/tooltips.py:615 +#: ../src/tooltips.py:621 msgid "Subscription: " msgstr "Inscription : " -#: ../src/tooltips.py:625 +#: ../src/tooltips.py:631 msgid "OpenPGP: " msgstr "OpenPGP : " -#: ../src/tooltips.py:646 +#: ../src/tooltips.py:652 #, python-format msgid "Idle since %s" msgstr "Inactif depuis %s" -#: ../src/tooltips.py:647 +#: ../src/tooltips.py:653 #, python-format msgid "Idle for %s" msgstr "Inactif pour %s" -#: ../src/tooltips.py:698 +#: ../src/tooltips.py:704 #, python-format msgid "Mood: %s" msgstr "Humeur : %s" -#: ../src/tooltips.py:702 +#: ../src/tooltips.py:708 #, python-format msgid "Activity: %s" msgstr "Activité : %s" -#: ../src/tooltips.py:706 +#: ../src/tooltips.py:712 #, python-format msgid "Tune: %s" msgstr "Ton : %s" -#: ../src/tooltips.py:710 +#: ../src/tooltips.py:716 #, python-format msgid "Location: %s" msgstr "Localisation : %s" -#: ../src/tooltips.py:735 +#: ../src/tooltips.py:741 msgid "Download" msgstr "Télécharger" -#: ../src/tooltips.py:741 +#: ../src/tooltips.py:747 msgid "Upload" msgstr "Envoyer" -#: ../src/tooltips.py:748 +#: ../src/tooltips.py:754 msgid "Type: " msgstr "Type : " -#: ../src/tooltips.py:752 +#: ../src/tooltips.py:758 msgid "Transferred: " msgstr "Transféré : " -#: ../src/tooltips.py:755 ../src/tooltips.py:776 +#: ../src/tooltips.py:761 ../src/tooltips.py:782 msgid "Not started" msgstr "Non commencé" -#: ../src/tooltips.py:759 +#: ../src/tooltips.py:765 msgid "Stopped" msgstr "Arrêté" -#: ../src/tooltips.py:761 ../src/tooltips.py:764 +#: ../src/tooltips.py:767 ../src/tooltips.py:770 msgid "Completed" msgstr "Terminé" -#: ../src/tooltips.py:768 +#: ../src/tooltips.py:774 msgid "?transfer status:Paused" msgstr "?transfer status:En pause" #. stalled is not paused. it is like 'frozen' it stopped alone -#: ../src/tooltips.py:772 +#: ../src/tooltips.py:778 msgid "Stalled" msgstr "Calé" -#: ../src/tooltips.py:774 +#: ../src/tooltips.py:780 msgid "Transferring" msgstr "En train de transférer" -#: ../src/tooltips.py:812 +#: ../src/tooltips.py:818 msgid "This service has not yet responded with detailed information" msgstr "Ce service n'a pas encore renvoyé d'informations détaillées" -#: ../src/tooltips.py:815 +#: ../src/tooltips.py:821 msgid "" "This service could not respond with detailed information.\n" "It is most likely legacy or broken" @@ -10485,39 +10872,43 @@ msgstr "" "Ce service n'a pas renvoyé d'informations détaillées.\n" "Il est probablement défectueux ou cassé" -#: ../src/vcard.py:285 +#: ../src/upower_listener.py:31 +msgid "Machine going to sleep" +msgstr "La machine se met en veille" + +#: ../src/vcard.py:289 msgid "?Client:Unknown" msgstr "Inconnu" -#: ../src/vcard.py:287 +#: ../src/vcard.py:291 msgid "?OS:Unknown" msgstr "Inconnu" -#: ../src/vcard.py:310 +#: ../src/vcard.py:316 msgid "?Time:Unknown" msgstr "?Date:Inconnue" -#: ../src/vcard.py:334 ../src/vcard.py:344 ../src/vcard.py:552 +#: ../src/vcard.py:340 ../src/vcard.py:350 ../src/vcard.py:558 #, python-format msgid "since %s" msgstr "depuis %s" -#: ../src/vcard.py:367 +#: ../src/vcard.py:373 msgid "?Role in Group Chat:<b>Role:</b>" -msgstr "" +msgstr "<b>Role :</b>" -#: ../src/vcard.py:371 +#: ../src/vcard.py:377 msgid "<b>Affiliation:</b>" msgstr "<b>Affiliation :</b>" -#: ../src/vcard.py:379 +#: ../src/vcard.py:385 msgid "" "This contact is interested in your presence information, but you are not " "interested in his/her presence" msgstr "" "Ce contact s'intéresse à votre état mais vous ne vous intéressez pas au sien" -#: ../src/vcard.py:381 +#: ../src/vcard.py:387 msgid "" "You are interested in the contact's presence information, but he/she is not " "interested in yours" @@ -10525,12 +10916,12 @@ msgstr "" "Vous vous intéressez à l'état de ce contact mais il ne s'intéresse pas au " "vôtre" -#: ../src/vcard.py:383 +#: ../src/vcard.py:389 msgid "You and the contact are interested in each other's presence information" msgstr "Vous et ce contact vous intéressez à vos états réciproques" #. None -#: ../src/vcard.py:385 +#: ../src/vcard.py:391 msgid "" "You are not interested in the contact's presence, and neither he/she is " "interested in yours" @@ -10538,19 +10929,49 @@ msgstr "" "Vous n'êtes pas intéressé par l'état de ce contact et il ne s'intéresse pas " "au vôtre" -#: ../src/vcard.py:392 +#: ../src/vcard.py:398 msgid "You are waiting contact's answer about your subscription request" msgstr "" "Vous attendez la réponse de ce contact pour votre demande de voir son état" -#: ../src/vcard.py:394 +#: ../src/vcard.py:400 msgid "There is no pending subscription request." msgstr "Il n'y a aucune requête d'inscription en attente." -#: ../src/vcard.py:399 ../src/vcard.py:453 ../src/vcard.py:575 +#: ../src/vcard.py:405 ../src/vcard.py:459 ../src/vcard.py:581 msgid " resource with priority " msgstr " ressource avec la priorité " +#~ msgid "label" +#~ msgstr "label" + +#~ msgid "Choose Client Cert" +#~ msgstr "Choisissez le certificat client" + +#~ msgid "The path to the client certificate and key in PKCS#12 format" +#~ msgstr "Chemin vers le certificat client et la clé au format PKCS#12" + +#~ msgid "Descrition:" +#~ msgstr "Description :" + +#~ msgid "button" +#~ msgstr "bouton" + +#~ msgid "Show Roster Fi_lter" +#~ msgstr "Montrer le filtre de _liste de contacts" + +#~ msgid "error: cannot open %s for reading" +#~ msgstr "erreur : impossible d'ouvrir %s en lecture" + +#~ msgid "A GTK+ jabber client" +#~ msgstr "Un client Jabber en GTK+" + +#~ msgid "Requires pybonjour (http://o2s.csail.mit.edu/o2s-wiki/pybonjour)." +#~ msgstr "Nécessite pybonjour (http://o2s.csail.mit.edu/o2s-wiki/pybonjour)." + +#~ msgid "Disk WriteError" +#~ msgstr "Erreur d'écriture du disque" + #~ msgid " a window/tab opened with that contact " #~ msgstr "une fenêtre ou un onglet ouvert avec ce contact " @@ -10696,11 +11117,9 @@ msgstr " ressource avec la priorité " #~ msgid "Requires gpg and python-GnuPGInterface." #~ msgstr "Nécessite gpg et python-GnuPGInterface." -#, fuzzy #~ msgid "one of: offline, online, chat, away, xa, dnd, invisible " #~ msgstr "un parmi : offline, online, chat, away, xa, dnd, invisible " -#, fuzzy #~ msgid "" #~ "Returns current status message(the global one unless account is specified)" #~ msgstr "" @@ -10714,7 +11133,6 @@ msgstr " ressource avec la priorité " #~ "Usage: %s %s %s \n" #~ "\t %s" -#, fuzzy #~ msgid "" #~ "Too many arguments. \n" #~ "Type \"%s help %s\" for more info" @@ -10722,7 +11140,6 @@ msgstr " ressource avec la priorité " #~ "Trop d'arguments.\n" #~ "Tapez \"%(basename)s help %(command)s\" pour plus d'informations" -#, fuzzy #~ msgid "" #~ "Argument \"%s\" is not specified. \n" #~ "Type \"%s help %s\" for more info" @@ -11038,18 +11455,9 @@ msgstr " ressource avec la priorité " #~ msgid "Assign Open_PGP Key" #~ msgstr "Assigner une clé Open_PGP" -#~ msgid "Command not supported for zeroconf account." -#~ msgstr "Commande non prise en charge pour les comptes zeroconf." - #~ msgid "Commands: %s" #~ msgstr "Commandes : %s" -#~ msgid "Usage: /%s, clears the text window." -#~ msgstr "Usage : /%s, nettoie la fenêtre." - -#~ msgid "Usage: /%s, hide the chat buttons." -#~ msgstr "Usage: /%s, cache les boutons de discussion." - #~ msgid "" #~ "Usage: /%(command)s <action>, sends action to the current group chat. Use " #~ "third person. (e.g. /%(command)s explodes.)" @@ -11057,12 +11465,6 @@ msgstr " ressource avec la priorité " #~ "Utilisation : /%(command)s <action>, envoie l'action au salon actuel. " #~ "Utilise la troisième personne. (ex : /%(command)s explose.)" -#~ msgid "Usage: /%s, sends a ping to the contact" -#~ msgstr "Utilisation : /%s, envoie un ping au contact" - -#~ msgid "Usage: /%s, send the message to the contact" -#~ msgstr "Usage: /%s, envoie le message au contact" - #~ msgid "No help info for /%s" #~ msgstr "Pas d'aide disponible pour /%s" @@ -11079,9 +11481,6 @@ msgstr " ressource avec la priorité " #~ msgstr "" #~ "Contact %(contact_jid)s invité dans le salon de discussion %(room_jid)s." -#~ msgid "Nickname not found" -#~ msgstr "Surnom introuvable : %s" - #~ msgid "" #~ "Usage: /%s <nickname|JID> [reason], bans the JID from the group chat. The " #~ "nickname of an occupant may be substituted, but not if it contains \"@\". " @@ -11094,13 +11493,6 @@ msgstr " ressource avec la priorité " #~ "le surnom." #~ msgid "" -#~ "Usage: /%s <nickname>, opens a private chat window with the specified " -#~ "occupant." -#~ msgstr "" -#~ "Usage : /%s <surnom>, ouvre une fenêtre de conversation privée avec " -#~ "l'occupant(e) spécifié(e)." - -#~ msgid "" #~ "Usage: /%s [reason], closes the current window or tab, displaying reason " #~ "if specified." #~ msgstr "" @@ -11139,9 +11531,6 @@ msgstr " ressource avec la priorité " #~ msgid "Usage: /%s <nickname>, changes your nickname in current group chat." #~ msgstr "Utilisation : /%s <surnom>, change votre surnom dans ce salon." -#~ msgid "Usage: /%s , display the names of group chat occupants." -#~ msgstr "Utilisation : /%s , affiche les noms des occupants du salon." - #~ msgid "" #~ "Usage: /%s [topic], displays or updates the current group chat topic." #~ msgstr "" @@ -11323,15 +11712,9 @@ msgstr " ressource avec la priorité " #~ msgid "Authenticate contact" #~ msgstr "Renommer le contact" -#~ msgid "Click to see past conversations with this contact" -#~ msgstr "Cliquez ici pour voir les précédentes conversations avec ce contact" - #~ msgid "Click to see past conversation in this room" #~ msgstr "Cliquez ici pour voir les précédentes conversations de ce salon" -#~ msgid "Accept" -#~ msgstr "Accepter" - #~ msgid "Invitation Received" #~ msgstr "Invitation reçue" @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Gajim 0.15 ja\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-09-02 18:31+0900\n" -"PO-Revision-Date: 2011-09-02 19:09+0900\n" +"POT-Creation-Date: 2012-01-22 18:48+0100\n" +"PO-Revision-Date: 2012-01-22 21:59+0900\n" "Last-Translator: Mako N <mako@pasero.net>\n" "Language-Team: Japanese\n" "Language: ja\n" @@ -104,7 +104,7 @@ msgid "I want to _register for a new account" msgstr "新しいアカウントを作成する (_r)" #: ../data/gui/account_creation_wizard_window.ui.h:15 -#: ../data/gui/accounts_window.ui.h:28 +#: ../data/gui/accounts_window.ui.h:30 msgid "If checked, Gajim will remember the password for this account" msgstr "チェックをつけると、Gajim はこのアカウントのパスワードを記憶します" @@ -113,13 +113,14 @@ msgid "Manage..." msgstr "管理..." #: ../data/gui/account_creation_wizard_window.ui.h:17 -#: ../data/gui/accounts_window.ui.h:39 ../data/gui/change_mood_dialog.ui.h:3 -#: ../src/config.py:1289 ../src/config.py:1392 ../src/config.py:1703 -#: ../src/config.py:1708 ../src/config.py:2284 ../src/config.py:2363 -#: ../src/config.py:2376 ../src/config.py:3655 ../src/config.py:3730 +#: ../data/gui/accounts_window.ui.h:41 ../data/gui/change_mood_dialog.ui.h:3 +#: ../src/config.py:1265 ../src/config.py:1279 ../src/config.py:1284 +#: ../src/config.py:1332 ../src/config.py:1435 ../src/config.py:1746 +#: ../src/config.py:1751 ../src/config.py:2327 ../src/config.py:2406 +#: ../src/config.py:2419 ../src/config.py:3699 ../src/config.py:3774 #: ../src/dialogs.py:311 ../src/dialogs.py:313 ../src/dialogs.py:519 -#: ../src/dialogs.py:532 ../src/roster_window.py:3092 -#: ../src/roster_window.py:3098 ../src/roster_window.py:3103 +#: ../src/dialogs.py:532 ../src/roster_window.py:3139 +#: ../src/roster_window.py:3145 ../src/roster_window.py:3150 msgid "None" msgstr "なし" @@ -128,7 +129,7 @@ msgid "Prox_y:" msgstr "プロキシ (_y)" #: ../data/gui/account_creation_wizard_window.ui.h:19 -#: ../data/gui/accounts_window.ui.h:48 +#: ../data/gui/accounts_window.ui.h:50 msgid "Save pass_word" msgstr "パスワードを保存する" @@ -160,12 +161,12 @@ msgid "_Hostname:" msgstr "ホスト名 (_H):" #: ../data/gui/account_creation_wizard_window.ui.h:27 -#: ../data/gui/accounts_window.ui.h:61 +#: ../data/gui/accounts_window.ui.h:63 msgid "_Jabber ID:" msgstr "Jabber ID (_J):" #: ../data/gui/account_creation_wizard_window.ui.h:28 -#: ../data/gui/accounts_window.ui.h:63 +#: ../data/gui/accounts_window.ui.h:65 #: ../data/gui/manage_bookmarks_window.ui.h:8 msgid "_Password:" msgstr "パスワード (_P):" @@ -207,36 +208,41 @@ msgstr "アカウント" msgid "Accounts" msgstr "アカウント" -#: ../data/gui/accounts_window.ui.h:8 +#. Change label for accept_button to action name instead of 'OK'. +#: ../data/gui/accounts_window.ui.h:8 ../src/dialogs.py:3384 +#: ../src/dialogs.py:3430 +msgid "Add" +msgstr "追加" + +#: ../data/gui/accounts_window.ui.h:9 msgid "Administration operations" msgstr "管理の操作" -#: ../data/gui/accounts_window.ui.h:9 +#: ../data/gui/accounts_window.ui.h:10 msgid "Anonymous authentication" msgstr "匿名の認証" -#: ../data/gui/accounts_window.ui.h:10 +#: ../data/gui/accounts_window.ui.h:11 msgid "Auto-reconnect when connection is lost" msgstr "切断したら自動で再接続する" -#: ../data/gui/accounts_window.ui.h:11 +#: ../data/gui/accounts_window.ui.h:12 msgid "Browse..." msgstr "参照..." -#: ../data/gui/accounts_window.ui.h:12 +#: ../data/gui/accounts_window.ui.h:13 msgid "C_onnect on Gajim startup" msgstr "Gajim 起動時に接続する (_o)" -#: ../data/gui/accounts_window.ui.h:13 -#, fuzzy +#: ../data/gui/accounts_window.ui.h:14 msgid "Certificate is e_ncrypted" -msgstr "証明書は暗号化される (_e)" +msgstr "証明書は暗号化されている (_n)" -#: ../data/gui/accounts_window.ui.h:14 +#: ../data/gui/accounts_window.ui.h:15 msgid "Chan_ge Password" msgstr "パスワードを変更する (_g)" -#: ../data/gui/accounts_window.ui.h:15 +#: ../data/gui/accounts_window.ui.h:16 msgid "" "Check this so Gajim will ask you before sending your password over an " "insecure connection." @@ -244,45 +250,51 @@ msgstr "" "チェックをつけると、安全でない接続の前にパスワードを聞いてくるようになりま" "す。" -#: ../data/gui/accounts_window.ui.h:16 +#: ../data/gui/accounts_window.ui.h:17 msgid "Choose _Key..." msgstr "鍵の選択 (_K)..." -#: ../data/gui/accounts_window.ui.h:17 +#: ../data/gui/accounts_window.ui.h:18 msgid "Click to change account's password" msgstr "アカウントのパスワードを変更するにはクリック" -#: ../data/gui/accounts_window.ui.h:18 +#: ../data/gui/accounts_window.ui.h:19 msgid "Click to request authorization to all contacts of another account" msgstr "別アカウントのすべての相手先に承認を求めるにはクリック" -#: ../data/gui/accounts_window.ui.h:19 +#: ../data/gui/accounts_window.ui.h:20 msgid "Client certificate" msgstr "クライアントの証明書" -#: ../data/gui/accounts_window.ui.h:20 +#: ../data/gui/accounts_window.ui.h:21 msgid "Co_nnect on Gajim startup" msgstr "Gajim 起動時に接続する (_n)" -#: ../data/gui/accounts_window.ui.h:21 +#: ../data/gui/accounts_window.ui.h:22 msgid "Connection" msgstr "接続" -#: ../data/gui/accounts_window.ui.h:22 +#. Change label for accept_button to action name instead of 'OK'. +#: ../data/gui/accounts_window.ui.h:23 ../src/dialogs.py:3388 +#: ../src/dialogs.py:3485 +msgid "Delete" +msgstr "削除" + +#: ../data/gui/accounts_window.ui.h:24 #: ../data/gui/zeroconf_information_window.ui.h:2 msgid "E-Mail:" msgstr "E-メール:" -#: ../data/gui/accounts_window.ui.h:23 +#: ../data/gui/accounts_window.ui.h:25 #: ../data/gui/zeroconf_information_window.ui.h:3 msgid "First Name:" msgstr "名:" #. No configured account -#: ../data/gui/accounts_window.ui.h:24 ../data/gui/roster_window.ui.h:5 -#: ../src/common/helpers.py:1148 ../src/common/helpers.py:1160 -#: ../src/notify.py:311 ../src/notify.py:334 ../src/notify.py:383 -#: ../src/notify.py:399 +#: ../data/gui/accounts_window.ui.h:26 ../data/gui/roster_window.ui.h:5 +#: ../src/common/helpers.py:1168 ../src/common/helpers.py:1180 +#: ../src/notify.py:314 ../src/notify.py:337 ../src/notify.py:387 +#: ../src/notify.py:403 msgid "Gajim" msgstr "Gajim" @@ -290,14 +302,15 @@ msgstr "Gajim" #. FIXME: Ugly workaround. #. Maybe we haven't been in any group (defaults to General) #. General group cannot be changed -#: ../data/gui/accounts_window.ui.h:25 ../data/gui/preferences_window.ui.h:56 +#: ../data/gui/accounts_window.ui.h:27 ../data/gui/preferences_window.ui.h:57 #: ../src/common/contacts.py:132 ../src/dialogs.py:112 ../src/dialogs.py:124 -#: ../src/roster_window.py:3034 ../src/roster_window.py:5652 +#: ../src/roster_window.py:3081 ../src/roster_window.py:4148 +#: ../src/roster_window.py:5738 msgid "General" msgstr "全般" # (Mako)broadcast 困った。ここは「同報」で -#: ../data/gui/accounts_window.ui.h:26 +#: ../data/gui/accounts_window.ui.h:28 msgid "" "If checked, Gajim will also broadcast some more IPs except from just your " "IP, so file transfer has higher chances of working." @@ -305,13 +318,13 @@ msgstr "" "チェックをつけると、Gajim はあなたの IP を除くいくつかの IP に同報します。そ" "れによってファイル転送はうまくいく可能性が高くなります。" -#: ../data/gui/accounts_window.ui.h:27 +#: ../data/gui/accounts_window.ui.h:29 msgid "If checked, Gajim will get the password from a GPG agent like seahorse" msgstr "" "チェックをつけると、Gajim は seahorse など GPG エージェントからパスワードを受" "け取ります" -#: ../data/gui/accounts_window.ui.h:29 +#: ../data/gui/accounts_window.ui.h:31 msgid "" "If checked, Gajim will send keep-alive packets to prevent connection timeout " "which results in disconnection" @@ -319,7 +332,7 @@ msgstr "" "チェックをつけると、Gajim はタイムアウトで接続が切れてしまうのを防ぐために生" "存パケットを流すようになります" -#: ../data/gui/accounts_window.ui.h:30 +#: ../data/gui/accounts_window.ui.h:32 msgid "" "If checked, Gajim, when launched, will automatically connect to jabber using " "this account" @@ -327,7 +340,7 @@ msgstr "" "チェックをつけると、Gajim は起動時に、このアカウントを使って jabber に自動的" "に接続します" -#: ../data/gui/accounts_window.ui.h:31 +#: ../data/gui/accounts_window.ui.h:33 msgid "" "If checked, any change to the global status (handled by the combobox at the " "bottom of the roster window) will change the status of this account " @@ -336,7 +349,7 @@ msgstr "" "チェックをつけると、(名簿ウィンドウの最下段の選択肢による)全体の在席状況の変" "更がこのアカウントの在席状況の変更に反映されます。" -#: ../data/gui/accounts_window.ui.h:32 +#: ../data/gui/accounts_window.ui.h:34 msgid "" "If the default port that is used for incoming messages is unfitting for your " "setup you can select another one here.\n" @@ -346,39 +359,39 @@ msgstr "" "ポートを指定できます。\n" "ファイアーウォールの設定を考慮しましょう。" -#: ../data/gui/accounts_window.ui.h:34 +#: ../data/gui/accounts_window.ui.h:36 msgid "Information about you, as stored in the server" msgstr "サーバに格納する、あなたに関する情報です" -#: ../data/gui/accounts_window.ui.h:35 -#: ../data/gui/zeroconf_information_window.ui.h:4 ../src/config.py:1826 +#: ../data/gui/accounts_window.ui.h:37 +#: ../data/gui/zeroconf_information_window.ui.h:4 ../src/config.py:1869 #: ../src/dialogs.py:837 msgid "Jabber ID:" msgstr "Jabber ID:" -#: ../data/gui/accounts_window.ui.h:36 +#: ../data/gui/accounts_window.ui.h:38 #: ../data/gui/zeroconf_information_window.ui.h:5 msgid "Last Name:" msgstr "姓:" -#: ../data/gui/accounts_window.ui.h:37 +#: ../data/gui/accounts_window.ui.h:39 msgid "Mer_ge accounts" -msgstr "アカウントの統合 (_g)" +msgstr "アカウントを統合 (_g)" -#: ../data/gui/accounts_window.ui.h:38 ../src/config.py:1799 -#: ../src/config.py:2377 +#: ../data/gui/accounts_window.ui.h:40 ../src/config.py:1842 +#: ../src/config.py:2420 msgid "No key selected" msgstr "鍵が選択されていません" -#: ../data/gui/accounts_window.ui.h:40 ../data/gui/profile_window.ui.h:35 +#: ../data/gui/accounts_window.ui.h:42 ../data/gui/profile_window.ui.h:35 msgid "Personal Information" msgstr "個人情報" -#: ../data/gui/accounts_window.ui.h:41 +#: ../data/gui/accounts_window.ui.h:43 msgid "Priori_ty:" msgstr "優先順位 (_t):" -#: ../data/gui/accounts_window.ui.h:42 +#: ../data/gui/accounts_window.ui.h:44 msgid "" "Priority is used in Jabber to determine who gets the events from the jabber " "server when two or more clients are connected using the same account; The " @@ -388,20 +401,20 @@ msgstr "" "jabber サーバーからのイベントの受け取り先を決定するのに使われます。最も高い優" "先順位のクライアントがイベントを受け取ります" -#: ../data/gui/accounts_window.ui.h:43 +#: ../data/gui/accounts_window.ui.h:45 msgid "Priority will change automatically according to your status." msgstr "優先順位は、在席状況に応じて自動的に変わります。" #. Rename -#: ../data/gui/accounts_window.ui.h:44 ../src/roster_window.py:5602 +#: ../data/gui/accounts_window.ui.h:46 ../src/roster_window.py:5688 msgid "Re_name" msgstr "名前の変更 (_n)" -#: ../data/gui/accounts_window.ui.h:45 +#: ../data/gui/accounts_window.ui.h:47 msgid "Resour_ce:" msgstr "リソース (_c):" -#: ../data/gui/accounts_window.ui.h:46 +#: ../data/gui/accounts_window.ui.h:48 msgid "" "Resource is sent to the Jabber server in order to separate the same JID in " "two or more parts depending on the number of the clients connected in the " @@ -414,73 +427,73 @@ msgstr "" "ソースを 'Home' と 'Work' として同時に接続しているかもしれません。最も優先順" "位の高いリソースがイベントを受け取ります(下記参照)。" -#: ../data/gui/accounts_window.ui.h:47 +#: ../data/gui/accounts_window.ui.h:49 msgid "Save conversation _logs for all contacts" msgstr "すべての相手先の会話記録を保存する (_l)" -#: ../data/gui/accounts_window.ui.h:49 +#: ../data/gui/accounts_window.ui.h:51 msgid "Send _keep-alive packets" msgstr "生存パケットを送信する (_k)" -#: ../data/gui/accounts_window.ui.h:50 +#: ../data/gui/accounts_window.ui.h:52 msgid "Synch_ronize account status with global status" msgstr "アカウントの在席状況を全体の在席状況に合わせる (_r)" -#: ../data/gui/accounts_window.ui.h:51 +#: ../data/gui/accounts_window.ui.h:53 msgid "Synchroni_ze account status with global status" msgstr "アカウントの在席状況を全体の在席状況に合わせる (_z)" -#: ../data/gui/accounts_window.ui.h:52 +#: ../data/gui/accounts_window.ui.h:54 #: ../data/gui/synchronise_select_account_dialog.ui.h:2 msgid "Synchronise contacts" msgstr "相手先を合わせる" -#: ../data/gui/accounts_window.ui.h:53 +#: ../data/gui/accounts_window.ui.h:55 msgid "Use G_PG Agent" msgstr "GPG エージェントを使う (_P)" -#: ../data/gui/accounts_window.ui.h:54 +#: ../data/gui/accounts_window.ui.h:56 msgid "Use cust_om hostname/port" msgstr "別のホスト名/ポート番号を使う (_o)" -#: ../data/gui/accounts_window.ui.h:55 +#: ../data/gui/accounts_window.ui.h:57 msgid "Use cust_om port:" msgstr "別のポート番号を使う (_o):" -#: ../data/gui/accounts_window.ui.h:56 +#: ../data/gui/accounts_window.ui.h:58 msgid "Use file transfer proxies" msgstr "ファイル転送のプロキシを使う" -#: ../data/gui/accounts_window.ui.h:57 +#: ../data/gui/accounts_window.ui.h:59 msgid "_Client Cert File:" msgstr "クライアントの証明書ファイル (_C):" -#: ../data/gui/accounts_window.ui.h:58 +#: ../data/gui/accounts_window.ui.h:60 msgid "_Edit Personal Information..." msgstr "個人情報を編集する (_E)..." #. XML Console enable checkbutton -#: ../data/gui/accounts_window.ui.h:59 ../data/gui/xml_console_window.ui.h:11 +#: ../data/gui/accounts_window.ui.h:61 ../data/gui/xml_console_window.ui.h:11 msgid "_Enable" msgstr "有効 (_E)" -#: ../data/gui/accounts_window.ui.h:60 +#: ../data/gui/accounts_window.ui.h:62 msgid "_Hostname: " msgstr "ホスト名 (_H):" -#: ../data/gui/accounts_window.ui.h:62 +#: ../data/gui/accounts_window.ui.h:64 ../data/gui/preferences_window.ui.h:133 msgid "_Manage..." msgstr "管理 (_M)..." -#: ../data/gui/accounts_window.ui.h:64 +#: ../data/gui/accounts_window.ui.h:66 msgid "_Port: " msgstr "ポート番号 (_P):" -#: ../data/gui/accounts_window.ui.h:65 +#: ../data/gui/accounts_window.ui.h:67 msgid "_Warn before using an insecure connection" msgstr "安全でない接続の前には警告する (_W)" -#: ../data/gui/accounts_window.ui.h:66 +#: ../data/gui/accounts_window.ui.h:68 msgid "_use HTTP__PROXY environment variable" msgstr "環境変数 HTTP__PROXY を使う (_u)" @@ -496,7 +509,7 @@ msgstr "この相手先に自分の在席状況を見ることを許可する (_ msgid "Add New Contact" msgstr "新しい相手先を追加する" -#: ../data/gui/add_new_contact_window.ui.h:4 ../src/common/helpers.py:1339 +#: ../data/gui/add_new_contact_window.ui.h:4 ../src/common/helpers.py:1359 msgid "I would like to add you to my contact list." msgstr "あなたを私の相手先リストに追加したいと思います。" @@ -716,8 +729,8 @@ msgstr "遮断している相手先" #: ../data/gui/blocked_contacts_window.ui.h:2 #: ../data/gui/contact_context_menu.ui.h:25 -#: ../data/gui/gc_occupants_menu.ui.h:14 ../src/roster_window.py:5621 -#: ../src/roster_window.py:5748 ../src/roster_window.py:5881 +#: ../data/gui/gc_occupants_menu.ui.h:14 ../src/roster_window.py:5707 +#: ../src/roster_window.py:5834 ../src/roster_window.py:5967 msgid "_Unblock" msgstr "遮断の解除 (_U)" @@ -778,7 +791,7 @@ msgid "Join _Group Chat" msgstr "グループチャットに参加する (_G)" #: ../data/gui/chat_context_menu.ui.h:2 -#: ../data/gui/contact_context_menu.ui.h:16 +#: ../data/gui/contact_context_menu.ui.h:17 msgid "_Add to Roster..." msgstr "名簿に追加 (_A)..." @@ -802,7 +815,7 @@ msgstr "リンク先をブラウザで開く (_O)" #: ../data/gui/subscription_request_popup_menu.ui.h:1 #: ../data/gui/systray_context_menu.ui.h:6 msgid "_Start Chat" -msgstr "チャットの開始 (_S)" +msgstr "チャットを開始 (_S)" #: ../data/gui/chat_control.ui.h:1 msgid "#" @@ -881,16 +894,18 @@ msgid "Show the contact's profile (Ctrl+I)" msgstr "相手先のプロフィールを表示する (Ctrl+I)" #: ../data/gui/chat_control.ui.h:20 +#: ../src/command_system/implementation/standard.py:208 msgid "Toggle audio session" msgstr "音声セッションにする/しない" #: ../data/gui/chat_control.ui.h:21 +#: ../src/command_system/implementation/standard.py:218 msgid "Toggle video session" msgstr "ビデオセッションにする/しない" #. Make sure the character after "_" is not M/m (conflicts with Alt+M that is supposed to show the Emoticon Selector) #: ../data/gui/chat_control.ui.h:23 ../data/gui/groupchat_control.ui.h:9 -#: ../data/gui/xml_console_window.ui.h:16 ../src/filetransfers_window.py:275 +#: ../data/gui/xml_console_window.ui.h:16 ../src/filetransfers_window.py:277 msgid "_Send" msgstr "送信 (_S)" @@ -936,17 +951,17 @@ msgstr "Open_PGP 鍵の割り当て..." #: ../data/gui/contact_context_menu.ui.h:4 msgid "E_xecute Command..." -msgstr "コマンドの実行 (_x)..." +msgstr "コマンドを実行 (_x)..." #: ../data/gui/contact_context_menu.ui.h:5 msgid "Edit _Groups..." -msgstr "グループの変更 (_G)..." +msgstr "グループを変更 (_G)..." #. Invite to #. Invite to Groupchat #: ../data/gui/contact_context_menu.ui.h:6 -#: ../data/gui/gc_occupants_menu.ui.h:1 ../src/roster_window.py:5557 -#: ../src/roster_window.py:5716 +#: ../data/gui/gc_occupants_menu.ui.h:1 ../src/roster_window.py:5643 +#: ../src/roster_window.py:5802 msgid "In_vite to" msgstr "招待 (_v)" @@ -955,70 +970,70 @@ msgid "Invite _Contacts" msgstr "相手先を招待 (_C)" #: ../data/gui/contact_context_menu.ui.h:8 +msgid "M_anage Contact" +msgstr "相手先を管理 (_a)" + +#: ../data/gui/contact_context_menu.ui.h:9 msgid "Remo_ve" msgstr "削除 (_v)" -#: ../data/gui/contact_context_menu.ui.h:9 ../src/roster_window.py:5567 -#: ../src/roster_window.py:5805 +#: ../data/gui/contact_context_menu.ui.h:10 ../src/roster_window.py:5653 +#: ../src/roster_window.py:5891 msgid "Send Cus_tom Status" -msgstr "個別の在席状況の送信 (_t)" +msgstr "個別の在席状況を送信 (_t)" -#: ../data/gui/contact_context_menu.ui.h:10 ../data/gui/roster_window.ui.h:10 +#: ../data/gui/contact_context_menu.ui.h:11 ../data/gui/roster_window.ui.h:10 msgid "Send Single _Message..." -msgstr "単発メッセージの送信 (_M)..." +msgstr "単発メッセージを送信 (_M)..." -#: ../data/gui/contact_context_menu.ui.h:11 +#: ../data/gui/contact_context_menu.ui.h:12 msgid "Send _File..." -msgstr "ファイルの送信 (_S)..." +msgstr "ファイルを送信 (_S)..." -#: ../data/gui/contact_context_menu.ui.h:12 +#: ../data/gui/contact_context_menu.ui.h:13 msgid "Set Custom _Avatar..." -msgstr "独自アバターの設定 (_A)..." +msgstr "独自アバターを設定 (_A)..." -#: ../data/gui/contact_context_menu.ui.h:13 +#: ../data/gui/contact_context_menu.ui.h:14 msgid "Start _Chat" -msgstr "チャットの開始 (_C)" +msgstr "チャットを開始 (_C)" -#: ../data/gui/contact_context_menu.ui.h:14 +#: ../data/gui/contact_context_menu.ui.h:15 msgid "Toggle End to End Encryption" msgstr "全線暗号化(E2EE) (トグル)" -#: ../data/gui/contact_context_menu.ui.h:15 +#: ../data/gui/contact_context_menu.ui.h:16 msgid "Toggle Open_PGP Encryption" msgstr "Open_PGP 暗号化 (トグル)" -#: ../data/gui/contact_context_menu.ui.h:17 +#: ../data/gui/contact_context_menu.ui.h:18 msgid "_Allow him/her to see my status" msgstr "自分の在席状況を見られることを許可する (_A)" -#: ../data/gui/contact_context_menu.ui.h:18 -#: ../data/gui/gc_occupants_menu.ui.h:8 ../src/roster_window.py:5629 -#: ../src/roster_window.py:5754 ../src/roster_window.py:5884 +#: ../data/gui/contact_context_menu.ui.h:19 +#: ../data/gui/gc_occupants_menu.ui.h:8 ../src/roster_window.py:5715 +#: ../src/roster_window.py:5840 ../src/roster_window.py:5970 msgid "_Block" msgstr "遮断 (_B)" -#: ../data/gui/contact_context_menu.ui.h:19 +#: ../data/gui/contact_context_menu.ui.h:20 msgid "_Forbid him/her to see my status" msgstr "自分の在席状況を見られることを禁止する (_F)" -#: ../data/gui/contact_context_menu.ui.h:20 +#: ../data/gui/contact_context_menu.ui.h:21 #: ../data/gui/gc_control_popup_menu.ui.h:6 #: ../data/gui/gc_occupants_menu.ui.h:9 ../data/gui/roster_window.ui.h:23 -#: ../src/roster_window.py:5955 +#: ../src/roster_window.py:6041 msgid "_History" msgstr "履歴 (_H)" -#: ../data/gui/contact_context_menu.ui.h:21 +#: ../data/gui/contact_context_menu.ui.h:22 msgid "_Ignore" msgstr "無視 (_I)" -#: ../data/gui/contact_context_menu.ui.h:22 -msgid "_Manage Contact" -msgstr "相手先の管理 (_M)" - #: ../data/gui/contact_context_menu.ui.h:23 msgid "_Rename..." -msgstr "名前の変更 (_R)..." +msgstr "名前を変更 (_R)..." #: ../data/gui/contact_context_menu.ui.h:24 msgid "_Subscription" @@ -1109,7 +1124,7 @@ msgstr "" msgid "When a file transfer is complete show a popup notification" msgstr "ファイル転送が完了したら、ポップアップで知らせる" -#: ../data/gui/filetransfers.ui.h:13 ../src/filetransfers_window.py:798 +#: ../data/gui/filetransfers.ui.h:13 ../src/filetransfers_window.py:808 msgid "_Continue" msgstr "続ける (_C)" @@ -1118,7 +1133,8 @@ msgid "_Notify me when a file transfer is complete" msgstr "ファイル転送が完了したら知らせる (_N)" # #(Mako)Containing をどうする -#: ../data/gui/filetransfers.ui.h:15 ../src/filetransfers_window.py:205 +#: ../data/gui/filetransfers.ui.h:15 ../src/chat_control.py:3236 +#: ../src/filetransfers_window.py:206 msgid "_Open Containing Folder" msgstr "フォルダを開く (_O)" @@ -1138,7 +1154,7 @@ msgstr "<b>チャット状態のタブの色</b>" msgid "Account row" msgstr "アカウントの行" -#: ../data/gui/gajim_themes_window.ui.h:3 ../src/chat_control.py:1030 +#: ../data/gui/gajim_themes_window.ui.h:3 ../src/chat_control.py:1042 msgid "Bold" msgstr "太字にする" @@ -1174,7 +1190,7 @@ msgstr "グループの行" msgid "Inactive" msgstr "停止中" -#: ../data/gui/gajim_themes_window.ui.h:12 ../src/chat_control.py:1031 +#: ../data/gui/gajim_themes_window.ui.h:12 ../src/chat_control.py:1043 msgid "Italic" msgstr "イタリック" @@ -1212,15 +1228,15 @@ msgstr "背景色 (_B):" #: ../data/gui/gc_control_popup_menu.ui.h:1 msgid "Change _Nickname..." -msgstr "ニックネームの変更 (_N)..." +msgstr "ニックネームを変更 (_N)..." #: ../data/gui/gc_control_popup_menu.ui.h:2 msgid "Change _Subject..." -msgstr "談話室の題の変更 (_S)..." +msgstr "談話室の題を変更 (_S)..." #: ../data/gui/gc_control_popup_menu.ui.h:3 msgid "Configure _Room..." -msgstr "談話室の調整 (_R)..." +msgstr "談話室を調整 (_R)..." #: ../data/gui/gc_control_popup_menu.ui.h:4 ../src/disco.py:1800 msgid "_Bookmark" @@ -1228,11 +1244,11 @@ msgstr "ブックマーク (_B)" #: ../data/gui/gc_control_popup_menu.ui.h:5 msgid "_Destroy Room" -msgstr "談話室の閉鎖 (_D)" +msgstr "談話室を閉鎖 (_D)" #: ../data/gui/gc_control_popup_menu.ui.h:7 msgid "_Manage Room" -msgstr "談話室の管理 (_M)" +msgstr "談話室を管理 (_M)" #: ../data/gui/gc_control_popup_menu.ui.h:8 msgid "_Minimize on close" @@ -1252,7 +1268,7 @@ msgstr "在室者の操作" #: ../data/gui/gc_occupants_menu.ui.h:4 msgid "Send _File" -msgstr "ファイルの送信 (_F)" +msgstr "ファイルを送信 (_F)" #: ../data/gui/gc_occupants_menu.ui.h:5 msgid "_Add to Roster" @@ -1351,13 +1367,13 @@ msgstr "" #: ../data/gui/history_manager.ui.h:9 msgid "_Search Database" -msgstr "データベースの検索 (_S)" +msgstr "データベースを検索 (_S)" #: ../data/gui/history_window.ui.h:1 msgid "All Chat Histories" msgstr "すべてのチャットの履歴" -#: ../data/gui/history_window.ui.h:2 ../src/history_window.py:323 +#: ../data/gui/history_window.ui.h:2 ../src/history_window.py:324 msgid "Conversation History" msgstr "会話の履歴" @@ -1374,10 +1390,18 @@ msgid "Search:" msgstr "検索:" #: ../data/gui/history_window.ui.h:6 +msgid "_In date search" +msgstr "ある日の中で検索 (_I)" + +#: ../data/gui/history_window.ui.h:7 #: ../data/gui/zeroconf_information_window.ui.h:10 msgid "_Log conversation history" msgstr "会話の履歴を記録 (_L)" +#: ../data/gui/history_window.ui.h:8 +msgid "searching only in the selected day " +msgstr "選択した日の中だけでの検索 " + #: ../data/gui/item_archiving_preferences_window.ui.h:1 msgid "approve" msgstr "" @@ -1442,7 +1466,7 @@ msgstr "" msgid "Bro_wse Rooms" msgstr "談話室を一覧 (_w)" -#: ../data/gui/join_groupchat_window.ui.h:3 ../src/dialogs.py:2328 +#: ../data/gui/join_groupchat_window.ui.h:3 ../src/dialogs.py:2334 msgid "Join Group Chat" msgstr "グループチャットに参加" @@ -1466,7 +1490,7 @@ msgstr "最近使った:" msgid "Room:" msgstr "談話室:" -#: ../data/gui/join_groupchat_window.ui.h:9 ../src/config.py:1816 +#: ../data/gui/join_groupchat_window.ui.h:9 ../src/config.py:1859 msgid "Server:" msgstr "サーバー:" @@ -1489,7 +1513,7 @@ msgstr "チェックをつけると、スタート時にこのグループチャ #: ../data/gui/manage_bookmarks_window.ui.h:3 msgid "Manage Bookmarks" -msgstr "ブックマークの管理" +msgstr "ブックマークを管理" #: ../data/gui/manage_bookmarks_window.ui.h:4 msgid "Minimi_ze on Auto Join" @@ -1534,7 +1558,7 @@ msgstr "HTTP 接続" #: ../data/gui/manage_proxies_window.ui.h:5 msgid "Manage Proxy Profiles" -msgstr "プロクシの設定" +msgstr "プロキシの設定" #: ../data/gui/manage_proxies_window.ui.h:6 msgid "Pass_word:" @@ -1558,7 +1582,7 @@ msgstr "HTTP プロキシを利用する (_y)" #: ../data/gui/manage_proxies_window.ui.h:11 msgid "Use proxy auth_entication" -msgstr "プロクシの認証を使用する (_e)" +msgstr "プロキシの認証を使用する (_e)" #: ../data/gui/manage_proxies_window.ui.h:12 msgid "_BOSH URL:" @@ -1734,120 +1758,124 @@ msgid "All chat states" msgstr "すべてのチャット状態" #: ../data/gui/preferences_window.ui.h:25 -msgid "Allow _OS information to be sent" -msgstr "OS 情報の送信を許可する (_O)" +msgid "Allow client / _OS information to be sent" +msgstr "クライアントや OS 情報の送信を許可する (_O)" #: ../data/gui/preferences_window.ui.h:26 +msgid "Allow local system time information to be sent" +msgstr "ローカルのシステムの時刻情報の送信を許可する (_O)" + +#: ../data/gui/preferences_window.ui.h:27 msgid "Allow my _idle time to be sent" msgstr "操作しない時間の送信を許可する (_i)" -#: ../data/gui/preferences_window.ui.h:27 +#: ../data/gui/preferences_window.ui.h:28 msgid "Allow popup/notifications when I'm _away/na/busy/invisible" msgstr "離席/不在/取り込み中/隠れ中のポップアップ/通知を許可する (_a)" -#: ../data/gui/preferences_window.ui.h:28 +#: ../data/gui/preferences_window.ui.h:29 msgid "Allow sound when I'm _busy" msgstr "取り込み中でもサウンドを鳴らす (_b)" -#: ../data/gui/preferences_window.ui.h:29 +#: ../data/gui/preferences_window.ui.h:30 msgid "Always" msgstr "常に" # (Mako)語順が難しい -#: ../data/gui/preferences_window.ui.h:30 +#: ../data/gui/preferences_window.ui.h:31 msgid "Ask status message when I:" msgstr "状況メッセージを求めるのは、私が " -#: ../data/gui/preferences_window.ui.h:31 ../src/features_window.py:106 +#: ../data/gui/preferences_window.ui.h:32 ../src/features_window.py:106 msgid "Audio / Video" msgstr "音声/ビデオ" -#: ../data/gui/preferences_window.ui.h:32 +#: ../data/gui/preferences_window.ui.h:33 msgid "Audio input device" msgstr "音声入力デバイス" -#: ../data/gui/preferences_window.ui.h:33 +#: ../data/gui/preferences_window.ui.h:34 msgid "Audio output device" msgstr "音声出力デバイス" -#: ../data/gui/preferences_window.ui.h:34 +#: ../data/gui/preferences_window.ui.h:35 msgid "Chat message:" msgstr "チャットメッセージ:" -#: ../data/gui/preferences_window.ui.h:35 +#: ../data/gui/preferences_window.ui.h:36 msgid "Check on startup if Gajim is the _default Jabber client" msgstr "起動時に、Gajim がデフォルトの Jabber クライアントかを調べる (_d)" -#: ../data/gui/preferences_window.ui.h:36 +#: ../data/gui/preferences_window.ui.h:37 msgid "Composing only" msgstr "入力中のみ" -#: ../data/gui/preferences_window.ui.h:37 +#: ../data/gui/preferences_window.ui.h:38 msgid "Configure color and font of the interface" msgstr "色とフォントの調整" -#: ../data/gui/preferences_window.ui.h:38 +#: ../data/gui/preferences_window.ui.h:39 msgid "Contact's message:" msgstr "相手先のメッセージ:" -#: ../data/gui/preferences_window.ui.h:39 +#: ../data/gui/preferences_window.ui.h:40 msgid "Contact's nickname:" msgstr "相手先のニックネーム:" -#: ../data/gui/preferences_window.ui.h:40 +#: ../data/gui/preferences_window.ui.h:41 msgid "Custom" msgstr "カスタム" -#: ../data/gui/preferences_window.ui.h:41 +#: ../data/gui/preferences_window.ui.h:42 msgid "Detached roster with chat grouped by account" msgstr "名簿は別ウィンドウ、チャットはアカウントでまとめたウィンドウ" -#: ../data/gui/preferences_window.ui.h:42 +#: ../data/gui/preferences_window.ui.h:43 msgid "Detached roster with chat grouped by type" msgstr "名簿は別ウィンドウ、チャットは種類でまとめたウィンドウ" -#: ../data/gui/preferences_window.ui.h:43 +#: ../data/gui/preferences_window.ui.h:44 msgid "Detached roster with detached chats" msgstr "名簿は別ウィンドウ、チャットは個々のウィンドウ" -#: ../data/gui/preferences_window.ui.h:44 +#: ../data/gui/preferences_window.ui.h:45 msgid "Detached roster with single chat" msgstr "名簿は別ウィンドウ、チャットはひとつにまとめたウィンドウ" -#: ../data/gui/preferences_window.ui.h:45 ../src/config.py:170 -#: ../src/config.py:672 +#: ../data/gui/preferences_window.ui.h:46 ../src/config.py:171 +#: ../src/config.py:683 msgid "Disabled" msgstr "無効" -#: ../data/gui/preferences_window.ui.h:46 +#: ../data/gui/preferences_window.ui.h:47 msgid "Display _activity of contacts in roster" msgstr "名簿に相手先の動向を表示する (_a)" -#: ../data/gui/preferences_window.ui.h:47 +#: ../data/gui/preferences_window.ui.h:48 msgid "Display _extra email details" msgstr "メールの詳細を表示する (_e)" -#: ../data/gui/preferences_window.ui.h:48 +#: ../data/gui/preferences_window.ui.h:49 msgid "Display _location of contacts in roster" msgstr "名簿に相手先の位置を表示する (_l)" -#: ../data/gui/preferences_window.ui.h:49 +#: ../data/gui/preferences_window.ui.h:50 msgid "Display _tunes of contacts in roster" msgstr "名簿に相手先の聴いている楽曲を表示する (_t)" -#: ../data/gui/preferences_window.ui.h:50 +#: ../data/gui/preferences_window.ui.h:51 msgid "Display a_vatars of contacts in roster" msgstr "名簿に相手先のアバターを表示する" -#: ../data/gui/preferences_window.ui.h:51 +#: ../data/gui/preferences_window.ui.h:52 msgid "Display m_ood of contacts in roster" msgstr "名簿に相手先の気分を表示する (_o)" -#: ../data/gui/preferences_window.ui.h:52 +#: ../data/gui/preferences_window.ui.h:53 msgid "Display status _messages of contacts in roster" msgstr "名簿に相手先の状況メッセージを表示する" -#: ../data/gui/preferences_window.ui.h:53 +#: ../data/gui/preferences_window.ui.h:54 msgid "" "Gajim can send and receive meta-information related to a conversation you " "may have with a contact. Here you can specify which chatstates you want to " @@ -1856,7 +1884,7 @@ msgstr "" "Gajim は、相手先との会話に関連するメタ情報の送受信ができます。ここでは、" "チャットウィンドウへのチャット状態の表示について指定します。" -#: ../data/gui/preferences_window.ui.h:54 +#: ../data/gui/preferences_window.ui.h:55 msgid "" "Gajim can send and receive meta-information related to a conversation you " "may have with a contact. Here you can specify which chatstates you want to " @@ -1865,7 +1893,7 @@ msgstr "" "Gajim は、相手先との会話に関連するメタ情報の送受信ができます。ここでは、" "チャット状態の他人への送信について指定します。" -#: ../data/gui/preferences_window.ui.h:55 +#: ../data/gui/preferences_window.ui.h:56 msgid "" "Gajim will notify you via a popup window in the bottom right of the screen " "about contacts that just signed out" @@ -1873,30 +1901,38 @@ msgstr "" "画面の右下のポップアップウィンドウで、相手先がサインアウトしたときに通知しま" "す" -#: ../data/gui/preferences_window.ui.h:57 +#: ../data/gui/preferences_window.ui.h:58 +msgid "Global proxy:" +msgstr "デフォルトのプロキシ:" + +#: ../data/gui/preferences_window.ui.h:59 msgid "Hide all buttons in chat windows" msgstr "チャットウィンドウのすべてのボタンを隠します" -#: ../data/gui/preferences_window.ui.h:58 +#: ../data/gui/preferences_window.ui.h:60 msgid "" "If checked, Gajim will allow others to detect the operation system you are " "using" msgstr "チェックをつけると、Gajim は使用中の OS を知られることを許可します" -#: ../data/gui/preferences_window.ui.h:59 +#: ../data/gui/preferences_window.ui.h:61 +msgid "If checked, Gajim will allow others to detect the time on your system" +msgstr "チェックをつけると、Gajim はシステムの時刻を知られることを許可します" + +#: ../data/gui/preferences_window.ui.h:62 msgid "" "If checked, Gajim will also include information about the sender of the new " "emails" msgstr "チェックをつけると、Gajim は電子メールの送信者の情報を含めます" -#: ../data/gui/preferences_window.ui.h:60 +#: ../data/gui/preferences_window.ui.h:63 msgid "" "If checked, Gajim will change status to Away when the computer is unused." msgstr "" "チェックをつけると、Gajim はコンピュータが使われていないとき、在席状況を「離" "席中」に変更します" -#: ../data/gui/preferences_window.ui.h:61 +#: ../data/gui/preferences_window.ui.h:64 msgid "" "If checked, Gajim will change status to Not Available when the computer has " "not been used even longer" @@ -1904,7 +1940,7 @@ msgstr "" "チェックをつけると、Gajim はコンピュータが長い間使われていないとき、在席状況" "を「不在」に変更します" -#: ../data/gui/preferences_window.ui.h:62 +#: ../data/gui/preferences_window.ui.h:65 msgid "" "If checked, Gajim will display avatars of contacts in roster window and in " "group chats" @@ -1912,7 +1948,7 @@ msgstr "" "チェックをつけると、Gajim は名簿ウィンドウとグループチャットに相手先のアバ" "ターを表示します" -#: ../data/gui/preferences_window.ui.h:63 +#: ../data/gui/preferences_window.ui.h:66 msgid "" "If checked, Gajim will display status messages of contacts under the contact " "name in roster window and in group chats" @@ -1920,30 +1956,30 @@ msgstr "" "チェックをつけると、Gajim は名簿ウィンドウとグループチャットの相手先名の下に" "状況メッセージを表示します" -#: ../data/gui/preferences_window.ui.h:64 +#: ../data/gui/preferences_window.ui.h:67 msgid "" "If checked, Gajim will display the activity of contacts in the roster window" msgstr "チェックをつけると、Gajim は名簿ウィンドウに相手先の動向を表示します" -#: ../data/gui/preferences_window.ui.h:65 +#: ../data/gui/preferences_window.ui.h:68 msgid "" "If checked, Gajim will display the location of contacts in the roster window" msgstr "" "チェックをつけると、Gajim は名簿ウィンドウに相手先の位置情報を表示します" -#: ../data/gui/preferences_window.ui.h:66 +#: ../data/gui/preferences_window.ui.h:69 msgid "" "If checked, Gajim will display the mood of contacts in the roster window" msgstr "チェックをつけると、Gajim は名簿ウィンドウに相手先の気分を表示します" -#: ../data/gui/preferences_window.ui.h:67 +#: ../data/gui/preferences_window.ui.h:70 msgid "" "If checked, Gajim will display the tunes of contacts in the roster window" msgstr "" "チェックをつけると、Gajim は名簿ウィンドウに相手先の聴いている楽曲を表示しま" "す" -#: ../data/gui/preferences_window.ui.h:68 +#: ../data/gui/preferences_window.ui.h:71 msgid "" "If checked, Gajim will highlight spelling errors in input fields of chat " "windows. If no language is explicitly set via right click on the input " @@ -1954,7 +1990,7 @@ msgstr "" "ていない場合は、この相手先やグループチャットにはデフォルトの言語が適用されま" "す。" -#: ../data/gui/preferences_window.ui.h:69 +#: ../data/gui/preferences_window.ui.h:72 msgid "" "If checked, Gajim will ignore incoming events from unauthorized contacts. " "Use with caution, because it blocks all messages from any contact that is " @@ -1963,7 +1999,7 @@ msgstr "" "チェックをつけると、Gajim は承認していない相手先からのイベントを無視します。" "名簿にない相手先からのすべてのメッセージを遮断しますので、注意してください。" -#: ../data/gui/preferences_window.ui.h:70 +#: ../data/gui/preferences_window.ui.h:73 msgid "" "If checked, Gajim will keep logs for encrypted messages. Please note that " "when using E2E encryption the remote party has to agree on logging, else the " @@ -1973,7 +2009,7 @@ msgstr "" "号化 (E2EE) の場合は相手先が記録に同意していなければなりません。そうでなけれ" "ば記録しないでください。" -#: ../data/gui/preferences_window.ui.h:71 +#: ../data/gui/preferences_window.ui.h:74 msgid "" "If checked, Gajim will show a notification when a new e-mail is received via " "GMail" @@ -1981,7 +2017,7 @@ msgstr "" "チェックをつけると、Gajim は GMail 経由で新しいメールを受け取ったとき、通知し" "ます" -#: ../data/gui/preferences_window.ui.h:72 +#: ../data/gui/preferences_window.ui.h:75 msgid "" "If checked, Gajim will use protocol-specific status icons. (eg. A contact " "from MSN will have the equivalent msn icon for status online, away, busy, " @@ -1991,7 +2027,7 @@ msgstr "" "(例: MSN からの相手先にはオンライン、離席、取り込み中...などの対応する MSN の" "アイコンがあります)" -#: ../data/gui/preferences_window.ui.h:73 +#: ../data/gui/preferences_window.ui.h:76 msgid "" "If enabled, Gajim will not ask for a status message. The specified default " "message will be used instead." @@ -1999,7 +2035,7 @@ msgstr "" "チェックをつけると、Gajim は状況メッセージを要求しません。かわりに対応するデ" "フォルトのメッセージが使われます。" -#: ../data/gui/preferences_window.ui.h:74 +#: ../data/gui/preferences_window.ui.h:77 msgid "" "If not disabled, Gajim will replace ascii smilies like ':)' with equivalent " "animated or static graphical emoticons" @@ -2008,68 +2044,68 @@ msgstr "" "ます" # 起動時に名簿を表示するか -#: ../data/gui/preferences_window.ui.h:75 +#: ../data/gui/preferences_window.ui.h:78 msgid "Last state" msgstr "以前の状態" -#: ../data/gui/preferences_window.ui.h:76 +#: ../data/gui/preferences_window.ui.h:79 msgid "Log _encrypted chat session" msgstr "暗号化チャットを記録する (_e)" -#: ../data/gui/preferences_window.ui.h:77 +#: ../data/gui/preferences_window.ui.h:80 msgid "Ma_ke message windows compact" msgstr "メッセージウィンドウを簡潔にする (_k)" -#: ../data/gui/preferences_window.ui.h:78 +#: ../data/gui/preferences_window.ui.h:81 msgid "Ma_nage..." msgstr "設定 (_n)..." # (Mako)systrayに表示 -#: ../data/gui/preferences_window.ui.h:79 +#: ../data/gui/preferences_window.ui.h:82 msgid "Never" msgstr "しない" -#: ../data/gui/preferences_window.ui.h:80 +#: ../data/gui/preferences_window.ui.h:83 msgid "Notifications" msgstr "通知" -#: ../data/gui/preferences_window.ui.h:81 +#: ../data/gui/preferences_window.ui.h:84 msgid "Notify me about contacts that sign _in" msgstr "相手先のサインインを通知する (_i)" -#: ../data/gui/preferences_window.ui.h:82 +#: ../data/gui/preferences_window.ui.h:85 msgid "Notify me about contacts that sign _out" msgstr "相手先のサインアウトを通知する (_o)" -#: ../data/gui/preferences_window.ui.h:83 +#: ../data/gui/preferences_window.ui.h:86 msgid "Notify me about it" msgstr "それについて通知する" -#: ../data/gui/preferences_window.ui.h:84 +#: ../data/gui/preferences_window.ui.h:87 msgid "Notify on new _GMail email" msgstr "新しい GMail メールを通知する (_G)" -#: ../data/gui/preferences_window.ui.h:85 +#: ../data/gui/preferences_window.ui.h:88 msgid "Only when pending events" msgstr "保留イベントがあるときだけ" -#: ../data/gui/preferences_window.ui.h:86 +#: ../data/gui/preferences_window.ui.h:89 msgid "Personal Events" msgstr "個人イベント" -#: ../data/gui/preferences_window.ui.h:87 +#: ../data/gui/preferences_window.ui.h:90 msgid "Play _sounds" msgstr "サウンドを鳴らす (_s)" -#: ../data/gui/preferences_window.ui.h:88 +#: ../data/gui/preferences_window.ui.h:91 msgid "Pop it up" msgstr "ポップアップする" -#: ../data/gui/preferences_window.ui.h:89 +#: ../data/gui/preferences_window.ui.h:92 msgid "Preferences" msgstr "設定" -#: ../data/gui/preferences_window.ui.h:90 +#: ../data/gui/preferences_window.ui.h:93 msgid "" "STUN server hostname. If none given, Gajim will try\n" "to discover one from server." @@ -2077,33 +2113,33 @@ msgstr "" "STUN サーバー。空なら、Gajim はサーバーから探索\n" "しようとします。" -#: ../data/gui/preferences_window.ui.h:92 +#: ../data/gui/preferences_window.ui.h:95 msgid "STUN server:" msgstr "STUN サーバー:" -#: ../data/gui/preferences_window.ui.h:93 +#: ../data/gui/preferences_window.ui.h:96 msgid "Show notification area icon:" msgstr "通知エリアのアイコンの表示:" -#: ../data/gui/preferences_window.ui.h:94 +#: ../data/gui/preferences_window.ui.h:97 msgid "Show only in roster" msgstr "名簿にのみ表示する" # (Mako)"Ask status message when I:" に続く語 -#: ../data/gui/preferences_window.ui.h:95 +#: ../data/gui/preferences_window.ui.h:98 msgid "Sign _in" msgstr "サインインしたとき (_i)" # (Mako)"Ask status message when I:" に続く語 -#: ../data/gui/preferences_window.ui.h:96 +#: ../data/gui/preferences_window.ui.h:99 msgid "Sign _out" msgstr "サインアウトしたとき (_o)" -#: ../data/gui/preferences_window.ui.h:97 +#: ../data/gui/preferences_window.ui.h:100 msgid "Single window for everything" msgstr "すべてをひとつのウィンドウ" -#: ../data/gui/preferences_window.ui.h:98 +#: ../data/gui/preferences_window.ui.h:101 msgid "" "Some messages may include rich content (formatting, colors etc). If checked, " "Gajim will just display the raw message text." @@ -2111,27 +2147,27 @@ msgstr "" "メッセージが装飾(書式や色など)を含んでいる場合があります。チェックをつける" "と、Gajim はそのままのメッセージ文を表示します。" -#: ../data/gui/preferences_window.ui.h:99 +#: ../data/gui/preferences_window.ui.h:102 msgid "Sort contacts by status" msgstr "相手先を在席状況順に並べる" -#: ../data/gui/preferences_window.ui.h:100 ../src/config.py:400 +#: ../data/gui/preferences_window.ui.h:103 ../src/config.py:401 msgid "Status" msgstr "在席状況" -#: ../data/gui/preferences_window.ui.h:101 +#: ../data/gui/preferences_window.ui.h:104 msgid "Status _iconset:" msgstr "状況アイコン (_i):" -#: ../data/gui/preferences_window.ui.h:102 +#: ../data/gui/preferences_window.ui.h:105 msgid "Style" msgstr "スタイル" -#: ../data/gui/preferences_window.ui.h:103 +#: ../data/gui/preferences_window.ui.h:106 msgid "T_heme:" msgstr "テーマ (_h):" -#: ../data/gui/preferences_window.ui.h:104 +#: ../data/gui/preferences_window.ui.h:107 msgid "" "The auto away status message. If empty, Gajim will not change the current " "status message\n" @@ -2143,7 +2179,7 @@ msgstr "" "$S は前の状況メッセージに置き換えられます\n" "$T は自動離席の設定時間に置き換えられます" -#: ../data/gui/preferences_window.ui.h:107 +#: ../data/gui/preferences_window.ui.h:110 msgid "" "The auto not available status message. If empty, Gajim will not change the " "current status message\n" @@ -2155,131 +2191,135 @@ msgstr "" "$S は前の状況メッセージに置き換えられます\n" "$T は自動不在の設定時間に置き換えられます" -#: ../data/gui/preferences_window.ui.h:110 +#: ../data/gui/preferences_window.ui.h:113 msgid "Use _transports icons" msgstr "中継先のアイコンを使う (_t)" -#: ../data/gui/preferences_window.ui.h:111 +#: ../data/gui/preferences_window.ui.h:114 msgid "Use default applications" msgstr "デフォルトのアプリケーションを使う" -#: ../data/gui/preferences_window.ui.h:112 +#: ../data/gui/preferences_window.ui.h:115 msgid "Use system _default" msgstr "システムのデフォルトを使う (_d)" -#: ../data/gui/preferences_window.ui.h:113 +#: ../data/gui/preferences_window.ui.h:116 msgid "Video framerate" msgstr "ビデオのフレームレート" -#: ../data/gui/preferences_window.ui.h:114 +#: ../data/gui/preferences_window.ui.h:117 msgid "Video input device" msgstr "ビデオ入力デバイス" -#: ../data/gui/preferences_window.ui.h:115 +#: ../data/gui/preferences_window.ui.h:118 msgid "Video output device" msgstr "ビデオ出力デバイス" -#: ../data/gui/preferences_window.ui.h:116 +#: ../data/gui/preferences_window.ui.h:119 msgid "Video size" msgstr "ビデオの大きさ" -#: ../data/gui/preferences_window.ui.h:117 +#: ../data/gui/preferences_window.ui.h:120 msgid "When new event is received:" msgstr "新しいイベントを受信したとき:" -#: ../data/gui/preferences_window.ui.h:118 +#: ../data/gui/preferences_window.ui.h:121 msgid "Your message:" msgstr "あなたのメッセージ:" -#: ../data/gui/preferences_window.ui.h:119 +#: ../data/gui/preferences_window.ui.h:122 msgid "Your nickname:" msgstr "あなたのニックネーム:" -#: ../data/gui/preferences_window.ui.h:120 +#: ../data/gui/preferences_window.ui.h:123 msgid "_Away after:" msgstr "「離席中」にする (_A):" -#: ../data/gui/preferences_window.ui.h:121 +#: ../data/gui/preferences_window.ui.h:124 msgid "_Browser:" msgstr "ブラウザ (_B):" -#: ../data/gui/preferences_window.ui.h:122 +#: ../data/gui/preferences_window.ui.h:125 msgid "_Display chat state notifications:" msgstr "チャット状態通知を表示する (_D):" -#: ../data/gui/preferences_window.ui.h:123 +#: ../data/gui/preferences_window.ui.h:126 msgid "_Emoticons:" msgstr "感情アイコン (_E):" -#: ../data/gui/preferences_window.ui.h:124 +#: ../data/gui/preferences_window.ui.h:127 msgid "_File manager:" msgstr "ファイルマネージャ (_F):" -#: ../data/gui/preferences_window.ui.h:125 +#: ../data/gui/preferences_window.ui.h:128 msgid "_Highlight misspelled words" msgstr "スペル間違いを強調表示する (_H)" -#: ../data/gui/preferences_window.ui.h:126 +#: ../data/gui/preferences_window.ui.h:129 msgid "_Ignore events from contacts not in the roster" msgstr "名簿にない相手先からのイベントを無視する (_I)" -#: ../data/gui/preferences_window.ui.h:127 +#: ../data/gui/preferences_window.ui.h:130 msgid "_Ignore rich content in incoming messages" msgstr "受信したメッセージの書式を無視する (_I)" -#: ../data/gui/preferences_window.ui.h:128 +#: ../data/gui/preferences_window.ui.h:131 msgid "_Log status changes of contacts" msgstr "相手先の状況変更を記録する (_L)" -#: ../data/gui/preferences_window.ui.h:129 +#: ../data/gui/preferences_window.ui.h:132 msgid "_Mail client:" msgstr "メールクライアント (_M):" -#: ../data/gui/preferences_window.ui.h:130 +#: ../data/gui/preferences_window.ui.h:134 msgid "_Not available after:" msgstr "「不在」にする (_N):" -#: ../data/gui/preferences_window.ui.h:131 +#: ../data/gui/preferences_window.ui.h:135 msgid "_Open..." msgstr "開く (_O)..." -#: ../data/gui/preferences_window.ui.h:132 +#: ../data/gui/preferences_window.ui.h:136 msgid "_Reset to Default Colors" msgstr "デフォルトの色に戻す (_R)" -#: ../data/gui/preferences_window.ui.h:133 +#: ../data/gui/preferences_window.ui.h:137 msgid "_Send chat state notifications:" msgstr "チャット状態通知を送信する (_S):" -#: ../data/gui/preferences_window.ui.h:134 +#: ../data/gui/preferences_window.ui.h:138 msgid "_Show roster on startup:" msgstr "自動時に名簿を表示する (_S):" -#: ../data/gui/preferences_window.ui.h:135 +#: ../data/gui/preferences_window.ui.h:139 msgid "_Status message:" msgstr "状況メッセージ (_S):" # (Mako)あえてカッコ書き -#: ../data/gui/preferences_window.ui.h:136 +#: ../data/gui/preferences_window.ui.h:140 msgid "_URL highlight:" msgstr "URL 強調表示 (_U):" -#: ../data/gui/preferences_window.ui.h:137 +#: ../data/gui/preferences_window.ui.h:141 msgid "_Window behavior:" msgstr "ウィンドウの配置 (_W):" -#: ../data/gui/preferences_window.ui.h:138 +#: ../data/gui/preferences_window.ui.h:142 msgid "in _group chats" msgstr "グループチャットで (_g)" -#: ../data/gui/preferences_window.ui.h:139 +#: ../data/gui/preferences_window.ui.h:143 msgid "in _roster" msgstr "名簿で (_r)" -#: ../data/gui/preferences_window.ui.h:140 +#: ../data/gui/preferences_window.ui.h:144 msgid "minutes" msgstr "分後" +#: ../data/gui/privacy_lists_window.ui.h:1 +msgid "Privacy Lists:" +msgstr "プライバシーリスト:" + #: ../data/gui/privacy_list_window.ui.h:1 msgid "<b>Add / Edit a rule</b>" msgstr "<b>規則の追加/編集</b>" @@ -2324,7 +2364,7 @@ msgstr "JabberID" msgid "Order:" msgstr "順位:" -#: ../data/gui/privacy_list_window.ui.h:12 ../src/dialogs.py:3966 +#: ../data/gui/privacy_list_window.ui.h:12 ../src/dialogs.py:3979 msgid "Privacy List" msgstr "プライバシーリスト" @@ -2370,10 +2410,6 @@ msgstr "状況を私に送信すること" msgid "to view my status" msgstr "私の状況を見ること" -#: ../data/gui/privacy_lists_window.ui.h:1 -msgid "Privacy Lists:" -msgstr "プライバシーリスト:" - #: ../data/gui/profile_window.ui.h:1 #: ../data/gui/vcard_information_window.ui.h:1 msgid "<b>Address</b>" @@ -2538,8 +2574,8 @@ msgstr "アカウントを Gajim とサーバーからも削除 (_s)" #. Remove group #. Remove -#: ../data/gui/remove_account_window.ui.h:4 ../src/roster_window.py:5639 -#: ../src/roster_window.py:5764 ../src/roster_window.py:5894 +#: ../data/gui/remove_account_window.ui.h:4 ../src/roster_window.py:5725 +#: ../src/roster_window.py:5850 ../src/roster_window.py:5980 msgid "_Remove" msgstr "削除 (_R)" @@ -2598,8 +2634,8 @@ msgid "Show Only _Active Contacts" msgstr "アクティブな相手先のみ表示 (_A)" #: ../data/gui/roster_window.ui.h:12 -msgid "Show Trans_ports" -msgstr "中継先を表示 (_p)" +msgid "Show T_rans_ports" +msgstr "中継先を表示 (_r)" #: ../data/gui/roster_window.ui.h:13 msgid "Show _Offline Contacts" @@ -2652,7 +2688,7 @@ msgid "_Add contact" msgstr "相手先リストに追加 (_A)" #. Information -#: ../data/gui/search_window.ui.h:4 ../src/roster_window.py:5906 +#: ../data/gui/search_window.ui.h:4 ../src/roster_window.py:5992 msgid "_Information" msgstr "情報 (_I)" @@ -2872,7 +2908,7 @@ msgstr "_Presence" #: ../data/gui/zeroconf_context_menu.ui.h:1 msgid "_Modify Account..." -msgstr "アカウントの編集 (_M)" +msgstr "アカウントを編集 (_M)" #: ../data/gui/zeroconf_information_window.ui.h:6 msgid "Local jid:" @@ -2953,7 +2989,7 @@ msgstr "整数型" msgid "Text" msgstr "文字列型" -#: ../src/advanced_configuration_window.py:96 ../src/chat_control.py:1050 +#: ../src/advanced_configuration_window.py:96 ../src/chat_control.py:1062 msgid "Color" msgstr "色" @@ -2990,203 +3026,203 @@ msgstr[1] "新しいエントリーを受け取りました (%d 件が表示さ #. #!/bin/sh #. LANG=$(for i in *.po; do j=${i/.po/}; echo -n "_('"$j"')":" '"$j"', " ; done) #. echo "{_('en'):'en'",$LANG"}" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "English" msgstr "英語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Belarusian" msgstr "ベラルーシ語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Bulgarian" msgstr "ブルガリア語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Breton" msgstr "ブルトン語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Czech" msgstr "チェコ語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "German" msgstr "ドイツ語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Greek" msgstr "ギリシア語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "British" msgstr "英語 (イギリス)" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Esperanto" msgstr "エスペラント" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Spanish" msgstr "スペイン語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Basque" msgstr "バスク語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "French" msgstr "フランス語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Croatian" msgstr "クロアチア語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Italian" msgstr "イタリア語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Norwegian (b)" msgstr "ノルウェー語 (b)" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Dutch" msgstr "オランダ語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Norwegian" msgstr "ノルウェー語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Polish" msgstr "ポーランド語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Portuguese" msgstr "ポルトガル語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Brazilian Portuguese" msgstr "ポルトガル語 (ブラジル)" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Russian" msgstr "ロシア語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Serbian" msgstr "セルビア語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Slovak" msgstr "スロバキア語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Swedish" msgstr "スウェーデン語" -#: ../src/chat_control.py:84 +#: ../src/chat_control.py:85 msgid "Chinese (Ch)" msgstr "中国語 (Ch)" -#: ../src/chat_control.py:227 +#: ../src/chat_control.py:228 msgid "Ping?" msgstr "Ping?" -#: ../src/chat_control.py:232 +#: ../src/chat_control.py:233 #, python-format msgid "Pong! (%s s.)" msgstr "Pong! (%s)" -#: ../src/chat_control.py:237 +#: ../src/chat_control.py:238 msgid "Error." msgstr "エラー" -#: ../src/chat_control.py:562 +#: ../src/chat_control.py:574 msgid "Spelling language" msgstr "スペルチェックの言語" #. we are not connected -#: ../src/chat_control.py:594 ../src/chat_control.py:810 +#: ../src/chat_control.py:606 ../src/chat_control.py:822 msgid "A connection is not available" msgstr "接続は有効ではありません" -#: ../src/chat_control.py:595 ../src/chat_control.py:811 +#: ../src/chat_control.py:607 ../src/chat_control.py:823 msgid "Your message can not be sent until you are connected." msgstr "接続するまでメッセージは送信されません。" -#: ../src/chat_control.py:1032 +#: ../src/chat_control.py:1044 msgid "Underline" msgstr "下線" -#: ../src/chat_control.py:1033 +#: ../src/chat_control.py:1045 msgid "Strike" msgstr "抹消線" -#: ../src/chat_control.py:1056 +#: ../src/chat_control.py:1068 msgid "Font" msgstr "フォント" -#: ../src/chat_control.py:1065 +#: ../src/chat_control.py:1077 msgid "Clear formating" msgstr "書式のクリア" -#: ../src/chat_control.py:1142 +#: ../src/chat_control.py:1154 msgid "Really send file?" msgstr "ファイルを送信しますか ?" -#: ../src/chat_control.py:1143 +#: ../src/chat_control.py:1155 #, python-format msgid "If you send a file to %s, he/she will know your real Jabber ID." msgstr "" "ファイルを %s に送信すると、その相手はあなたの本当の Jabber ID を知ることにな" "ります。" -#: ../src/chat_control.py:1623 ../src/chat_control.py:2135 +#: ../src/chat_control.py:1638 ../src/chat_control.py:2172 msgid "GPG encryption enabled" msgstr "GPG 暗号化は有効" -#: ../src/chat_control.py:1644 ../src/chat_control.py:1647 +#: ../src/chat_control.py:1659 ../src/chat_control.py:1662 msgid "Requires python-farsight." msgstr "python-farsight が必要です。" #. Add to roster -#: ../src/chat_control.py:1673 ../src/common/contacts.py:149 -#: ../src/common/contacts.py:270 ../src/common/helpers.py:60 -#: ../src/common/helpers.py:254 ../src/dialogs.py:1099 ../src/dialogs.py:2222 -#: ../src/dialogs.py:2251 ../src/gui_interface.py:467 -#: ../src/gui_menu_builder.py:254 ../src/gui_menu_builder.py:404 -#: ../src/roster_window.py:1644 ../src/roster_window.py:1646 -#: ../src/roster_window.py:1979 ../src/roster_window.py:3507 -#: ../src/roster_window.py:3534 +#: ../src/chat_control.py:1702 ../src/common/contacts.py:149 +#: ../src/common/contacts.py:270 ../src/common/helpers.py:67 +#: ../src/common/helpers.py:261 ../src/dialogs.py:1099 ../src/dialogs.py:2228 +#: ../src/dialogs.py:2257 ../src/gui_interface.py:472 +#: ../src/gui_menu_builder.py:254 ../src/gui_menu_builder.py:405 +#: ../src/roster_window.py:767 ../src/roster_window.py:1687 +#: ../src/roster_window.py:1689 ../src/roster_window.py:2022 +#: ../src/roster_window.py:3557 ../src/roster_window.py:3584 msgid "Not in Roster" msgstr "名簿にありません" -#: ../src/chat_control.py:1704 +#: ../src/chat_control.py:1734 msgid "This contact does not support file transfer." msgstr "この相手先はファイル転送をサポートしていません。" -#: ../src/chat_control.py:1707 +#: ../src/chat_control.py:1737 msgid "You need to know the real JID of the contact to send him or her a file." msgstr "ファイル転送を行なうには、本当の JID を知っている必要があります。" -#: ../src/chat_control.py:1814 +#: ../src/chat_control.py:1851 #, python-format msgid "%(type)s state : %(state)s, reason: %(reason)s" msgstr "%(type)s の状態: %(state)s 理由: %(reason)s" -#: ../src/chat_control.py:2005 +#: ../src/chat_control.py:2042 #, python-format msgid "%(nickname)s from group chat %(room_name)s" msgstr "%(nickname)s さん (グループチャット %(room_name)s より)" #. No key assigned nor a key is used by remote contact -#: ../src/chat_control.py:2115 ../src/dialogs.py:5027 +#: ../src/chat_control.py:2152 ../src/dialogs.py:5040 msgid "No GPG key assigned" msgstr "GPG 鍵が割り当てられていません" -#: ../src/chat_control.py:2116 +#: ../src/chat_control.py:2153 msgid "" "No GPG key is assigned to this contact. So you cannot encrypt messages with " "GPG." @@ -3194,52 +3230,52 @@ msgstr "" "この相手先に GPG 鍵が割り当てられていないため、メッセージを GPG で暗号化する" "ことができません。" -#: ../src/chat_control.py:2125 +#: ../src/chat_control.py:2162 msgid "GPG encryption disabled" msgstr "GPG 暗号化は無効" -#: ../src/chat_control.py:2151 +#: ../src/chat_control.py:2188 msgid "Session WILL be logged" msgstr "セッションは記録されます" -#: ../src/chat_control.py:2153 +#: ../src/chat_control.py:2190 msgid "Session WILL NOT be logged" msgstr "セッションは記録されません" # (Mako)暗号化は有効 %s、 #. encryption %s active -#: ../src/chat_control.py:2170 +#: ../src/chat_control.py:2207 msgid "is" msgstr "で" -#: ../src/chat_control.py:2170 +#: ../src/chat_control.py:2207 msgid "is NOT" msgstr "でなく" # #. チャットは記録 %s。 #. chat session %s be logged -#: ../src/chat_control.py:2172 +#: ../src/chat_control.py:2209 msgid "will" msgstr "記録されます" -#: ../src/chat_control.py:2172 +#: ../src/chat_control.py:2209 msgid "will NOT" msgstr "記録されません" #. About encrypted chat session -#: ../src/chat_control.py:2176 +#: ../src/chat_control.py:2213 msgid "and authenticated" msgstr "認証されています" #. About encrypted chat session -#: ../src/chat_control.py:2180 +#: ../src/chat_control.py:2217 msgid "and NOT authenticated" msgstr "認証されていません" #. status will become 'is' or 'is not', authentificaed will become #. 'and authentificated' or 'and not authentificated', logged will become #. 'will' or 'will not' -#: ../src/chat_control.py:2187 +#: ../src/chat_control.py:2224 #, python-format msgid "" "%(type)s encryption %(status)s active %(authenticated)s.\n" @@ -3248,31 +3284,31 @@ msgstr "" "%(type)s の暗号化は有効%(status)s、%(authenticated)s。\n" "チャットは%(logged)s。" -#: ../src/chat_control.py:2331 +#: ../src/chat_control.py:2351 msgid "Session negotiation cancelled" msgstr "セッションの確率を中止しました" -#: ../src/chat_control.py:2341 +#: ../src/chat_control.py:2361 msgid "This session WILL be archived on server" msgstr "セッションはサーバーに記録されます" -#: ../src/chat_control.py:2343 +#: ../src/chat_control.py:2363 msgid "This session WILL NOT be archived on server" msgstr "セッションはサーバーに記録されません" -#: ../src/chat_control.py:2352 +#: ../src/chat_control.py:2372 msgid "This session is encrypted" msgstr "このセッションは暗号化されています" -#: ../src/chat_control.py:2355 +#: ../src/chat_control.py:2375 msgid " and WILL be logged" msgstr " かつ、記録されます" -#: ../src/chat_control.py:2357 +#: ../src/chat_control.py:2377 msgid " and WILL NOT be logged" msgstr " かつ、記録されません" -#: ../src/chat_control.py:2362 +#: ../src/chat_control.py:2382 msgid "" "Remote contact's identity not verified. Click the shield button for more " "details." @@ -3280,41 +3316,39 @@ msgstr "" "遠くの相手先の同一性は検証されませんでした。詳しくは盾ボタンをクリックしてく" "ださい。" -#: ../src/chat_control.py:2364 +#: ../src/chat_control.py:2384 msgid "E2E encryption disabled" msgstr "終端間暗号化 (E2EE) は無効" -#: ../src/chat_control.py:2408 ../src/chat_control.py:2421 +#: ../src/chat_control.py:2432 ../src/chat_control.py:2445 msgid "The following message was NOT encrypted" msgstr "次のメッセージは暗号化されませんでした" -#: ../src/chat_control.py:2414 +#: ../src/chat_control.py:2438 msgid "The following message was encrypted" msgstr "次のメッセージは暗号化されました" #. %s is being replaced in the code with JID -#: ../src/chat_control.py:2685 +#: ../src/chat_control.py:2707 #, python-format msgid "You just received a new message from \"%s\"" msgstr "\"%s\" さんから新しいメッセージを受信しました" -#: ../src/chat_control.py:2686 +#: ../src/chat_control.py:2708 msgid "" "If you close this tab and you have history disabled, this message will be " "lost." msgstr "" "このタブを閉じると、記録を残さない設定の場合、このメッセージは失われます。" -#: ../src/chat_control.py:2853 ../src/common/connection.py:451 -#: ../src/common/connection_handlers.py:945 -#: ../src/common/connection_handlers.py:1055 -#: ../src/common/connection_handlers.py:1712 -#: ../src/common/connection_handlers_events.py:864 -#: ../src/common/logger.py:1126 ../src/gajim.py:203 ../src/session.py:97 +#: ../src/chat_control.py:2875 ../src/common/connection_handlers_events.py:887 +#: ../src/common/connection_handlers.py:942 +#: ../src/common/connection_handlers.py:1054 ../src/common/connection.py:456 +#: ../src/common/logger.py:1144 ../src/gajim.py:210 ../src/session.py:100 msgid "Database Error" msgstr "データベースのエラー" -#: ../src/chat_control.py:2854 +#: ../src/chat_control.py:2876 #, python-format msgid "" "The database file (%s) cannot be read. Try to repair it or remove it (all " @@ -3323,7 +3357,7 @@ msgstr "" "データベースファイル (%s) を読むことができません。修復するか、または削除(すべ" "ての履歴は失われます)してください。" -#: ../src/chat_control.py:3090 ../src/gui_interface.py:1032 +#: ../src/chat_control.py:3112 ../src/gui_interface.py:1061 #, python-format msgid "" "Unable to decrypt message from %s\n" @@ -3332,11 +3366,248 @@ msgstr "" "%s さんからのメッセージを復号できません\n" "改竄の可能性があります。" -#: ../src/chat_control.py:3123 +#: ../src/chat_control.py:3145 #, python-format msgid "%(name)s is now %(status)s" msgstr "%(name)s さんは現在、%(status)s" +#: ../src/chat_control.py:3204 +msgid "File transfer" +msgstr "ファイルの転送" + +#: ../src/chat_control.py:3207 +msgid "Size" +msgstr "サイズ" + +#: ../src/chat_control.py:3209 +msgid "_Accept" +msgstr "了承する (_A)" + +#: ../src/chat_control.py:3232 ../src/filetransfers_window.py:204 +msgid "File transfer completed" +msgstr "ファイルの転送が完了しました" + +#: ../src/chat_control.py:3260 ../src/gui_interface.py:932 +#: ../src/roster_window.py:1934 +msgid "Remote contact stopped transfer" +msgstr "遠くの相手先が転送を中止しました" + +#: ../src/chat_control.py:3262 ../src/gui_interface.py:935 +#: ../src/roster_window.py:1936 +msgid "Error opening file" +msgstr "ファイルを開く際のエラー" + +#: ../src/chat_control.py:3264 ../src/filetransfers_window.py:240 +msgid "File transfer stopped" +msgstr "ファイルの転送が中断しました" + +#: ../src/chat_control.py:3267 ../src/filetransfers_window.py:219 +#: ../src/filetransfers_window.py:226 +msgid "File transfer cancelled" +msgstr "ファイルの転送が中止されました" + +#: ../src/chat_control.py:3268 ../src/filetransfers_window.py:219 +#: ../src/filetransfers_window.py:227 +msgid "Connection with peer cannot be established." +msgstr "ピア接続は確立できませんでした。" + +#: ../src/command_system/implementation/custom.py:105 +msgid "The same as using a doc-string, except it supports translation" +msgstr "使う文章は同じものとします (翻訳は除く)" + +#: ../src/command_system/implementation/execute.py:53 +msgid "Execute expression inside a shell, show output" +msgstr "シェル内で表現を実行し、結果を表示します" + +#: ../src/command_system/implementation/execute.py:109 +msgid "Execute expression inside a shell, send output" +msgstr "シェル内で表現を実行し、結果を送信します" + +#: ../src/command_system/implementation/standard.py:50 +msgid "Hide the chat buttons" +msgstr "チャットボタンを隠します" + +#: ../src/command_system/implementation/standard.py:56 +msgid "" +"Show help on a given command or a list of available commands if -a is given" +msgstr "コマンドのヘルプを表示します。-a で、可能なコマンドの一覧を表示します" + +#: ../src/command_system/implementation/standard.py:83 +msgid "Send a message to the contact" +msgstr "相手先にメッセージを送信します" + +#: ../src/command_system/implementation/standard.py:88 +msgid "Send action (in the third person) to the current chat" +msgstr "" + +#: ../src/command_system/implementation/standard.py:93 +msgid "Show logged messages which mention given text" +msgstr "" + +#: ../src/command_system/implementation/standard.py:99 +#, python-format +msgid "%s: Nothing found" +msgstr "%s: 見つかりません" + +#: ../src/command_system/implementation/standard.py:105 +msgid "Limit must be an integer" +msgstr "制限は整数である必要があります" + +#: ../src/command_system/implementation/standard.py:140 +msgid "" +"\n" +" Set current the status\n" +"\n" +" Status can be given as one of the following values: online, away,\n" +" chat, xa, dnd.\n" +" " +msgstr "" +"\n" +" 在席状況を設定します\n" +"\n" +" 在席状況は次のいずれかの値です: online (在席), away (離席中),\n" +" chat (チャット可), xa (不在), dnd (取り込み中).\n" +" " + +#: ../src/command_system/implementation/standard.py:153 +msgid "Set the current status to away" +msgstr "在席状況を「離席中」に設定します" + +#: ../src/command_system/implementation/standard.py:156 +#: ../src/common/commands.py:109 ../src/common/helpers.py:249 +#: ../src/tooltips.py:194 +msgid "Away" +msgstr "離席中" + +#: ../src/command_system/implementation/standard.py:161 +msgid "Set the current status to online" +msgstr "在席状況を「在席」に設定します" + +#: ../src/command_system/implementation/standard.py:164 +msgid "Available" +msgstr "在席" + +#: ../src/command_system/implementation/standard.py:178 +#: ../src/command_system/implementation/standard.py:255 +#, fuzzy +msgid "Clear the text window" +msgstr "ウィンドウを閉じる" + +#: ../src/command_system/implementation/standard.py:183 +msgid "Toggle the GPG encryption" +msgstr "GPGP 暗号化 (トグル)" + +#: ../src/command_system/implementation/standard.py:188 +msgid "Send a ping to the contact" +msgstr "相手先に ping を送信します" + +#: ../src/command_system/implementation/standard.py:191 +msgid "Command is not supported for zeroconf accounts" +msgstr "コマンドは、zeroconf アカウントには使えません" + +#: ../src/command_system/implementation/standard.py:195 +msgid "Send DTMF sequence through an open audio session" +msgstr "接続している音声セッションに DTMF 手順を送信します" + +#: ../src/command_system/implementation/standard.py:198 +msgid "No open audio sessions with the contact" +msgstr "この相手先と接続している音声セッションがありません" + +#: ../src/command_system/implementation/standard.py:201 +#, python-format +msgid "%s is not a valid tone" +msgstr "%s は有効なトーンではありません" + +#: ../src/command_system/implementation/standard.py:211 +msgid "Audio sessions are not available" +msgstr "音声セッションは有効ではありません" + +#: ../src/command_system/implementation/standard.py:221 +msgid "Video sessions are not available" +msgstr "ビデオセッションは有効ではありません" + +#: ../src/command_system/implementation/standard.py:262 +msgid "Change your nickname in a group chat" +msgstr "グループチャットでニックネームを変更します" + +#. invalid char +#: ../src/command_system/implementation/standard.py:267 ../src/config.py:3392 +#: ../src/dialogs.py:2075 +msgid "Invalid nickname" +msgstr "ニックネームは有効ではありません" + +#: ../src/command_system/implementation/standard.py:272 +msgid "Open a private chat window with a specified occupant" +msgstr "指定した在室者との私信のウィンドウを開きます" + +#: ../src/command_system/implementation/standard.py:278 +#: ../src/command_system/implementation/standard.py:287 +#: ../src/command_system/implementation/standard.py:341 +msgid "Nickname not found" +msgstr "ニックネームは見つかりません" + +#: ../src/command_system/implementation/standard.py:281 +msgid "" +"Open a private chat window with a specified occupant and send him a message" +msgstr "指定した在室者との私信のウィンドウを開き、メッセージを送信します" + +#: ../src/command_system/implementation/standard.py:290 +msgid "Display or change a group chat topic" +msgstr "グループチャットの題を表示または変更します" + +#: ../src/command_system/implementation/standard.py:298 +msgid "Invite a user to a room for a reason" +msgstr "理由を添えて、談話室に招待します" + +#: ../src/command_system/implementation/standard.py:301 +#, python-format +msgid "Invited %s to %s" +msgstr "%s を %s に招待しました" + +#: ../src/command_system/implementation/standard.py:304 +msgid "Join a group chat given by a jid, optionally using given nickname" +msgstr "" +"指定する JID のグループチャットに参加します (ニックネームが指定されていればそ" +"れを使って)" + +#: ../src/command_system/implementation/standard.py:321 +msgid "" +"Leave the groupchat, optionally giving a reason, and close tab or window" +msgstr "" +"グループチャットから退出し (理由があればそれを送信します)、タブまたはウィンド" +"ウを閉じます" + +#: ../src/command_system/implementation/standard.py:326 +msgid "" +"\n" +" Ban user by a nick or a jid from a groupchat\n" +"\n" +" If given nickname is not found it will be treated as a jid.\n" +" " +msgstr "" +"\n" +" ニックネームまたは JID で指定するユーザーをグループチャットから締め出しま" +"す\n" +"\n" +" ニックネームが見つからなければ JID として扱います。\n" +" " + +#: ../src/command_system/implementation/standard.py:338 +msgid "Kick user by a nick from a groupchat" +msgstr "ニックネームで指定するユーザーをグループチャットから蹴り出します" + +#: ../src/command_system/implementation/standard.py:345 +msgid "Display names of all group chat occupants" +msgstr "グループチャットのすべての在室者の名前を表示します" + +#: ../src/command_system/implementation/standard.py:367 +msgid "Forbid an occupant to send you public or private messages" +msgstr "在室者がメッセージ (私信も含む) を送ってくることを禁止します" + +#: ../src/command_system/implementation/standard.py:372 +msgid "Allow an occupant to send you public or private messages" +msgstr "在室者がメッセージ (私信も含む) を送ってくることを許可します" + #: ../src/common/check_paths.py:38 msgid "creating logs database" msgstr "記録データベースを作っています" @@ -3371,89 +3642,84 @@ msgstr "%s はディレクトリです。ファイルでなければなりませ msgid "creating %s directory" msgstr "ディレクトリ %s を作ります" -#: ../src/common/commands.py:82 +#: ../src/common/commands.py:85 msgid "Change status information" msgstr "在席状況の変更" -#: ../src/common/commands.py:97 +#: ../src/common/commands.py:100 msgid "Change status" msgstr "在席状況を変更する" -#: ../src/common/commands.py:98 +#: ../src/common/commands.py:101 msgid "Set the presence type and description" msgstr "在席状況の種類と説明の設定" -#: ../src/common/commands.py:104 +#: ../src/common/commands.py:107 msgid "Free for chat" msgstr "チャットできます" -#: ../src/common/commands.py:105 +#: ../src/common/commands.py:108 msgid "Online" msgstr "オンライン" -#: ../src/common/commands.py:106 ../src/common/helpers.py:242 -#: ../src/tooltips.py:193 -msgid "Away" -msgstr "離席中" - -#: ../src/common/commands.py:107 +#: ../src/common/commands.py:110 msgid "Extended away" msgstr "長時間不在です" -#: ../src/common/commands.py:108 +#: ../src/common/commands.py:111 msgid "Do not disturb" msgstr "邪魔しないでください" -#: ../src/common/commands.py:109 +#: ../src/common/commands.py:112 msgid "Offline - disconnect" msgstr "オフライン - 切断中" -#: ../src/common/commands.py:114 +#: ../src/common/commands.py:117 msgid "Presence description:" msgstr "在席状況の説明:" -#: ../src/common/commands.py:149 ../src/common/commands.py:317 +#: ../src/common/commands.py:152 ../src/common/commands.py:320 msgid "The status has been changed." msgstr "在席状況が変更されました。" -#: ../src/common/commands.py:181 ../src/common/commands.py:207 +#: ../src/common/commands.py:184 ../src/common/commands.py:210 msgid "Leave Groupchats" msgstr "グループチャットから退出" -#: ../src/common/commands.py:197 +#: ../src/common/commands.py:200 #, python-format msgid "%(nickname)s on %(room_jid)s" msgstr "%(room_jid)s の %(nickname)s さん" -#: ../src/common/commands.py:201 +#: ../src/common/commands.py:204 msgid "You have not joined a groupchat." msgstr "グループチャットに参加していません。" -#: ../src/common/commands.py:208 +#: ../src/common/commands.py:211 msgid "Choose the groupchats you want to leave" msgstr "退出したいグループチャットを選択してください" #. Make special context menu if group is Groupchats -#: ../src/common/commands.py:212 ../src/common/contacts.py:128 -#: ../src/common/helpers.py:60 ../src/roster_window.py:817 -#: ../src/roster_window.py:1648 ../src/roster_window.py:1650 -#: ../src/roster_window.py:2512 ../src/roster_window.py:5524 +#: ../src/common/commands.py:215 ../src/common/contacts.py:128 +#: ../src/common/helpers.py:67 ../src/roster_window.py:820 +#: ../src/roster_window.py:1691 ../src/roster_window.py:1693 +#: ../src/roster_window.py:2557 ../src/roster_window.py:5610 msgid "Groupchats" msgstr "グループチャット" -#: ../src/common/commands.py:253 +#: ../src/common/commands.py:256 msgid "You left the following groupchats:" msgstr "次のグループチャットから退出しました:" -#: ../src/common/commands.py:265 +#: ../src/common/commands.py:268 msgid "Forward unread messages" msgstr "未読メッセージの転送" -#: ../src/common/commands.py:287 +#: ../src/common/commands.py:290 msgid "All unread messages have been forwarded." msgstr "すべての未読メッセージが転送されました。" -#: ../src/common/commands.py:295 +#: ../src/common/commands.py:298 msgid "Forward unread message then disconnect" msgstr "未読メッセージを転送してから切断" @@ -3552,9 +3818,9 @@ msgid "" msgstr "折り畳む(アカウントやグループチャットの)行の一覧(空白で区切る)。" #. sorted alphanum -#: ../src/common/config.py:108 ../src/common/config.py:496 +#: ../src/common/config.py:108 ../src/common/config.py:504 #: ../src/common/optparser.py:296 ../src/common/optparser.py:492 -#: ../src/common/optparser.py:526 ../src/gui_interface.py:2634 +#: ../src/common/optparser.py:526 ../src/gui_interface.py:2668 msgid "default" msgstr "デフォルト" @@ -4199,7 +4465,15 @@ msgstr "" "真なら、Gajim はグループチャットの参加者の分掌をステータスアイコンに色付き四" "角をつけて表示します。" -#: ../src/common/config.py:306 +#: ../src/common/config.py:293 +msgid "" +"Proxy used for all outgoing connections if the account does not have a " +"specific proxy configured" +msgstr "" +"アカウントで正しいプロキシの設定がなされていない場合に、外向きの通信に使われ" +"るプロキシ" + +#: ../src/common/config.py:307 msgid "" "Priority will change automatically according to your status. Priorities are " "defined in autopriority_* options." @@ -4207,7 +4481,7 @@ msgstr "" "在席状況に応じて優先順位を自動的に変更します。優先順位は autopriority_* オプ" "ションで定義します。" -#: ../src/common/config.py:314 +#: ../src/common/config.py:315 msgid "" "Status used to autoconnect as. Can be online, chat, away, xa, dnd, " "invisible. NOTE: this option is used only if restore_last_status is disabled" @@ -4217,82 +4491,100 @@ msgstr "" "このオプションは restore_last_status が無効のときのみ使われます" # (Mako) If enabled は If True であるべきだろう -#: ../src/common/config.py:315 +#: ../src/common/config.py:316 msgid "If enabled, restore the last status that was used." msgstr "真なら、最後に使われた在席状況を復元します。" -#: ../src/common/config.py:317 +#: ../src/common/config.py:318 msgid "" "If True, Contacts requesting authorization will be automatically accepted." msgstr "真なら、相手先の承認の要求は自動的に了承されます。" -#: ../src/common/config.py:318 +#: ../src/common/config.py:319 msgid "" "If False, this account will be disabled and will not appear in roster window." msgstr "" "偽なら、このアカウントを無効にして、チャットウィンドウにアバターを表示しませ" "ん。" -#: ../src/common/config.py:321 +#: ../src/common/config.py:322 msgid "" "If disabled, don't sign presences with GPG key, even if GPG is configured." msgstr "偽なら、たとえ GPG が設定されていても、GPG 鍵による署名を行いません。" -#: ../src/common/config.py:323 +#: ../src/common/config.py:324 msgid "Enable ESessions encryption for this account." -msgstr "このアカウントの暗号化セッションを有効にする" +msgstr "このアカウントの暗号化セッションを有効にします。" -#: ../src/common/config.py:324 +#: ../src/common/config.py:325 msgid "Should Gajim automatically start an encrypted session when possible?" msgstr "Gajim は(可能なら)自動的に暗号化セッションを始めるべきかどうか。" -#: ../src/common/config.py:325 +#: ../src/common/config.py:326 msgid "" "Ordered list (space separated) of connection type to try. Can contain tls, " "ssl or plain" msgstr "試みる接続の種類の順番(空白で区切る)。「tls」「ssl」または「plain」" -#: ../src/common/config.py:326 +#: ../src/common/config.py:327 msgid "" -"Show a warning dialog before sending password on an plaintext connection." +"Show a warning dialog before sending password on an plaintext connection. " +"Can be 'warn', 'connect', 'disconnect'" msgstr "" "暗号化されない接続の場合、パスワードを送る前に警告のダイアログを表示します。" +"「warn」(警告する)「connect」(接続する)または「disconnect」(接続しない)" -#: ../src/common/config.py:327 +#: ../src/common/config.py:328 msgid "Show a warning dialog before using standard SSL library." msgstr "標準の SSL ライブラリを使う前に警告のダイアログを表示します。" -#: ../src/common/config.py:328 +#: ../src/common/config.py:329 msgid "" "Show a warning dialog before sending PLAIN password over a plain connection." msgstr "" "暗号化されない接続で平文でパスワードを送る前に、警告のダイアログを表示しま" "す。" -#: ../src/common/config.py:330 +#: ../src/common/config.py:331 msgid "Space separated list of ssl errors to ignore." msgstr "無視すべき SSL のエラーの一覧(空白で区切って)。" -#: ../src/common/config.py:339 +#: ../src/common/config.py:337 +msgid "" +"Space separated list of JIDs for which you do not want to store logs. You " +"can also add account name to log nothing for this account." +msgstr "" +"記録を保存しない JID の一覧(空白で区切って)。アカウント名を加えることもでき、" +"そのアカウントについて記録を残しません。" + +#: ../src/common/config.py:338 +msgid "" +"Space separated list of JIDs for which you accept to not log conversations " +"if he does not want to." +msgstr "" +"相手が記録しないことを望む場合、記録しない会話を受け入れる JID の一覧(空白で" +"区切って)。" + +#: ../src/common/config.py:341 msgid "Whitespace sent after inactivity" msgstr "活動停止状態の後に送られる空白" -#: ../src/common/config.py:340 +#: ../src/common/config.py:342 msgid "XMPP ping sent after inactivity" msgstr "活動停止状態の後に XMPP ping を送ります" -#: ../src/common/config.py:344 +#: ../src/common/config.py:346 msgid "" "How many seconds to wait for the answer of ping alive packet before we try " "to reconnect." msgstr "生存パケットを送ってから再接続を試みるまで待機する時間(単位は秒)。" #. yes, no, ask -#: ../src/common/config.py:348 +#: ../src/common/config.py:350 msgid "Jabberd2 workaround" msgstr "Jabberd2 対策" -#: ../src/common/config.py:351 +#: ../src/common/config.py:353 msgid "" "If checked, Gajim will use your IP and proxies defined in " "file_transfer_proxies option for file transfer." @@ -4300,24 +4592,33 @@ msgstr "" "チェックをつけると、Gajim はあなたの IP とプロキシを使います。プロキシはファ" "イル転送のために file_transfer_proxies オプションで定義します。" -#: ../src/common/config.py:365 +#: ../src/common/config.py:354 +msgid "" +"If True, Gajim will test file transfer proxies on startup to be sure it " +"works. Openfire's proxies are known to fail this test even if they work." +msgstr "" +"真にすると、Gajim は起動時にファイル転送プロキシが正常に機能するかテストを行" +"います。Openfire のプロキシは(正常に機能する場合でも)このテストに失敗すること" +"がわかっています。" + +#: ../src/common/config.py:368 msgid "Answer to receipt requests" msgstr "受領確認に応じる" -#: ../src/common/config.py:366 +#: ../src/common/config.py:369 msgid "Sent receipt requests" msgstr "受領確認を求める" -#: ../src/common/config.py:375 +#: ../src/common/config.py:378 msgid "" "Allow Gajim to send information about the operating system you are running." msgstr "Gajim が使用中の OS を通知することを許可します。" -#: ../src/common/config.py:376 +#: ../src/common/config.py:379 msgid "Allow Gajim to send your local time." msgstr "Gajim があなたの現地時間を通知することを許可します。" -#: ../src/common/config.py:377 +#: ../src/common/config.py:380 msgid "" "When negotiating an encrypted session, should Gajim assume you want your " "messages to be logged?" @@ -4325,19 +4626,47 @@ msgstr "" "暗号化セッションを確立しようとする際、メッセージの記録をとりたいと仮定するか" "どうか" -#: ../src/common/config.py:380 +#: ../src/common/config.py:383 msgid "Message that is sent to contacts you want to add" msgstr "追加したい相手先に送られるメッセージ" -#: ../src/common/config.py:381 +#: ../src/common/config.py:384 msgid "Last time we syncronized with logs from server." msgstr "サーバーの履歴に同期した最後の時刻" -#: ../src/common/config.py:443 +#: ../src/common/config.py:385 +msgid "" +"If enabled and if server supports this feature, Gajim will receive messages " +"sent and received by other resources." +msgstr "" +"真にすると(かつサーバーがこの機能をサポートしている場合)、Gajim はほかのリ" +"ソースによって送受されたメッセージを受信します。" + +#: ../src/common/config.py:386 +msgid "" +"If enabled, Gajim will send your local IPs so your contact can connect to " +"your machine to transfer files." +msgstr "" +"真にすると、Gajim は相手先がファイル転送を行うためにあなたのローカル IP アド" +"レスを送信します。" + +#: ../src/common/config.py:387 +msgid "Latest token for Oauth2 authentication." +msgstr "最近の Oauth2 認証のトークン" + +#: ../src/common/config.py:388 +msgid "client_id for Oauth2 authentication." +msgstr "Oauth2 認証のクライアント id" + +#: ../src/common/config.py:389 +msgid "redirect_url for Oauth2 authentication." +msgstr "Oauth2 認証のリダイレクト URL" + +#: ../src/common/config.py:451 msgid "Is OpenPGP enabled for this contact?" msgstr "この相手先に OpenPGP を使えるかどうか" -#: ../src/common/config.py:444 +#: ../src/common/config.py:452 msgid "" "Should Gajim automatically start an encrypted session with this contact when " "possible?" @@ -4345,11 +4674,11 @@ msgstr "" "Gajim はこの相手先について自動的に(可能なら)暗号化セッションを始めるべきかど" "うか" -#: ../src/common/config.py:445 ../src/common/config.py:448 +#: ../src/common/config.py:453 ../src/common/config.py:456 msgid "Language for which we want to check misspelled words" msgstr "スペル間違いを調べたい言語" -#: ../src/common/config.py:451 +#: ../src/common/config.py:459 msgid "" "State whether plugins should be activated on exit (this is saved on Gajim " "exit). This option SHOULD NOT be used to (de)activate plug-ins. Use GUI " @@ -4359,83 +4688,83 @@ msgstr "" "す)。このオプションをプラグインの有効化/無効化のために使用してはいけません。" "代わりに GUI を使用してください。" -#: ../src/common/config.py:456 ../src/common/pep.py:157 +#: ../src/common/config.py:464 ../src/common/pep.py:157 msgid "Sleeping" msgstr "睡眠中" -#: ../src/common/config.py:457 +#: ../src/common/config.py:465 msgid "Back soon" msgstr "すぐに戻ります" -#: ../src/common/config.py:457 +#: ../src/common/config.py:465 msgid "Back in some minutes." msgstr "数分後に戻ります。" -#: ../src/common/config.py:458 ../src/common/pep.py:127 +#: ../src/common/config.py:466 ../src/common/pep.py:127 msgid "Eating" msgstr "食事" -#: ../src/common/config.py:458 +#: ../src/common/config.py:466 msgid "I'm eating, so leave me a message." msgstr "食事のため、しばらく離れます。" -#: ../src/common/config.py:459 +#: ../src/common/config.py:467 msgid "Movie" msgstr "映画" -#: ../src/common/config.py:459 +#: ../src/common/config.py:467 msgid "I'm watching a movie." msgstr "ただいま映画鑑賞中です。" -#: ../src/common/config.py:460 ../src/common/pep.py:186 +#: ../src/common/config.py:468 ../src/common/pep.py:186 msgid "Working" msgstr "仕事中" -#: ../src/common/config.py:460 +#: ../src/common/config.py:468 msgid "I'm working." msgstr "仕事中です。" -#: ../src/common/config.py:461 +#: ../src/common/config.py:469 msgid "Phone" msgstr "電話中" -#: ../src/common/config.py:461 +#: ../src/common/config.py:469 msgid "I'm on the phone." msgstr "電話中です。" -#: ../src/common/config.py:462 +#: ../src/common/config.py:470 msgid "Out" msgstr "外出中" -#: ../src/common/config.py:462 +#: ../src/common/config.py:470 msgid "I'm out enjoying life." msgstr "出かけています。" -#: ../src/common/config.py:473 +#: ../src/common/config.py:481 msgid "I'm available." msgstr "在席しています。" -#: ../src/common/config.py:474 +#: ../src/common/config.py:482 msgid "I'm free for chat." msgstr "チャットできます。" -#: ../src/common/config.py:475 ../src/config.py:1609 +#: ../src/common/config.py:483 ../src/config.py:1652 msgid "Be right back." msgstr "すぐ戻ります。" -#: ../src/common/config.py:476 +#: ../src/common/config.py:484 msgid "I'm not available." msgstr "不在です。" -#: ../src/common/config.py:477 +#: ../src/common/config.py:485 msgid "Do not disturb." msgstr "邪魔しないでください。" -#: ../src/common/config.py:478 ../src/common/config.py:479 +#: ../src/common/config.py:486 ../src/common/config.py:487 msgid "Bye!" msgstr "バイバイ !" -#: ../src/common/config.py:489 +#: ../src/common/config.py:497 msgid "" "Sound to play when a group chat message contains one of the words in " "muc_highlight_words, or when a group chat message contains your nickname." @@ -4443,184 +4772,375 @@ msgstr "" "グループチャットのメッセージに、muc_highlight_words で設定した語、またはあな" "たのニックネームが含まれる場合にサウンドを鳴らします。" -#: ../src/common/config.py:490 +#: ../src/common/config.py:498 msgid "Sound to play when any MUC message arrives." msgstr "グループチャットのメッセージがあった際にサウンドを鳴らします。" -#: ../src/common/config.py:499 ../src/common/optparser.py:310 +#: ../src/common/config.py:507 ../src/common/optparser.py:310 msgid "green" msgstr "green" -#: ../src/common/config.py:503 ../src/common/optparser.py:296 +#: ../src/common/config.py:511 ../src/common/optparser.py:296 msgid "grocery" msgstr "grocery" -#: ../src/common/config.py:507 +#: ../src/common/config.py:515 msgid "human" msgstr "human" -#: ../src/common/config.py:511 +#: ../src/common/config.py:519 msgid "marine" msgstr "marine" -#: ../src/common/connection.py:68 +#: ../src/common/config.py:526 +msgid "Tor" +msgstr "" + +#: ../src/common/connection_handlers_events.py:367 +#, python-format +msgid "" +"JID %s is not RFC compliant. It will not be added to your roster. Use roster " +"management tools such as http://jru.jabberstudio.org/ to remove it" +msgstr "" +"JID %s は規格(RFC)に合っていません。名簿には追加されません。これを削除するに" +"は、http://jru.jabberstudio.org/ のような名簿管理ツールを使ってください。" + +# (Mako) 実際に使われている場所を確認していないが、強引に訳す +#: ../src/common/connection_handlers_events.py:799 +#, python-format +msgid "unsubscribe request from %s" +msgstr "%s から継読中止の要求" + +#: ../src/common/connection_handlers_events.py:884 +#: ../src/common/connection_handlers.py:334 +#: ../src/common/connection_handlers.py:940 +#: ../src/common/connection_handlers.py:1052 ../src/common/connection.py:453 +#: ../src/common/logger.py:1142 ../src/gajim.py:392 +msgid "Disk Write Error" +msgstr "ディスクの書き込みエラー" + +#: ../src/common/connection_handlers_events.py:888 +#: ../src/common/connection_handlers.py:943 +#: ../src/common/connection_handlers.py:1055 ../src/common/connection.py:457 +#: ../src/common/logger.py:1145 ../src/gajim.py:211 ../src/session.py:101 +#, python-format +msgid "" +"The database file (%s) cannot be read. Try to repair it (see http://trac." +"gajim.org/wiki/DatabaseBackup) or remove it (all history will be lost)." +msgstr "" +"データベースファイル (%s) の読み込みができません。修復を試みる (http://trac." +"gajim.org/wiki/DatabaseBackup を参照のこと) か、または削除して (すべての履歴" +"は失われます) ください。" + +#. Room has been destroyed. see +#. http://www.xmpp.org/extensions/xep-0045.html#destroyroom +#: ../src/common/connection_handlers_events.py:909 +msgid "Room has been destroyed" +msgstr "談話室は閉鎖されました" + +#: ../src/common/connection_handlers_events.py:917 +#, python-format +msgid "You can join this room instead: %s" +msgstr "代わりに次の談話室に参加します: %s" + +#: ../src/common/connection_handlers_events.py:1001 +#: ../src/common/connection_handlers_events.py:1033 +#: ../src/common/connection_handlers_events.py:1049 +#: ../src/common/connection.py:263 ../src/config.py:2149 ../src/config.py:2158 +#: ../src/config.py:2226 ../src/config.py:3663 ../src/dataforms_widget.py:623 +#: ../src/dialogs.py:3092 +msgid "Invalid Jabber ID" +msgstr "Jabber ID が正しくありません" + +#: ../src/common/connection_handlers_events.py:1002 +#: ../src/common/connection_handlers_events.py:1034 +#: ../src/common/connection_handlers_events.py:1050 +msgid "A message from a non-valid JID arrived, it has been ignored." +msgstr "正しくない JID からメッセージが届きました。無視します。" + +#. ('MSGNOTSENT', account, (jid, ierror_msg, msg, time, session)) +#: ../src/common/connection_handlers_events.py:1076 +#: ../src/gui_interface.py:420 ../src/gui_interface.py:434 +#, python-format +msgid "error while sending %(message)s ( %(error)s )" +msgstr "%(message)s を送信する際にエラー ( %(error)s )" + +#: ../src/common/connection_handlers_events.py:1508 +#, python-format +msgid "Unknown SSL error: %d" +msgstr "未知の SSL エラー: %d" + +#: ../src/common/connection_handlers_events.py:2040 ../src/dialogs.py:2779 +#: ../src/notify.py:263 +msgid "New Single Message" +msgstr "新着の単発メッセージ" + +#: ../src/common/connection_handlers_events.py:2042 +#, python-format +msgid "New Single Message from %(nickname)s" +msgstr "%(nickname)s からの新しい単発メッセージ" + +#: ../src/common/connection_handlers_events.py:2046 ../src/dialogs.py:2780 +#: ../src/notify.py:264 +msgid "New Private Message" +msgstr "新着の私信" + +#: ../src/common/connection_handlers_events.py:2048 +#, python-format +msgid "New Private Message from group chat %s" +msgstr "グループチャット %s からの新着の私信" + +#: ../src/common/connection_handlers_events.py:2051 +#, python-format +msgid "%(nickname)s: %(message)s" +msgstr "%(nickname)s さん: %(message)s" + +#: ../src/common/connection_handlers_events.py:2054 +#, python-format +msgid "Messaged by %(nickname)s" +msgstr "%(nickname)s さんからのメッセージ" + +#: ../src/common/connection_handlers_events.py:2058 ../src/dialogs.py:2779 +#: ../src/notify.py:263 +msgid "New Message" +msgstr "新着メッセージ" + +#: ../src/common/connection_handlers_events.py:2060 +#, python-format +msgid "New Message from %(nickname)s" +msgstr "%(nickname)s さんからの新着メッセージ" + +#: ../src/common/connection_handlers_events.py:2189 +#, python-format +msgid "%(nick)s Changed Status" +msgstr "%(nick)s さんの在席状況が変わりました" + +#: ../src/common/connection_handlers_events.py:2191 +#: ../src/groupchat_control.py:205 ../src/groupchat_control.py:1766 +#: ../src/history_window.py:448 +#, python-format +msgid "%(nick)s is now %(status)s" +msgstr "%(nick)s さんは現在 %(status)s" + +#: ../src/common/connection_handlers_events.py:2196 ../src/dialogs.py:2791 +#: ../src/notify.py:277 +msgid "Contact Changed Status" +msgstr "相手先が在席状況を変更" + +#: ../src/common/connection_handlers_events.py:2198 +#, python-format +msgid "%(nickname)s Signed In" +msgstr "%(nickname)s さんがサインインしました" + +#. default value +#: ../src/common/connection_handlers_events.py:2203 ../src/dialogs.py:2775 +#: ../src/notify.py:259 +msgid "Contact Signed In" +msgstr "相手先がサインインしました" + +#: ../src/common/connection_handlers_events.py:2205 +#, python-format +msgid "%(nickname)s Signed Out" +msgstr "%(nickname)s さんがサインアウトしました" + +#: ../src/common/connection_handlers_events.py:2210 ../src/dialogs.py:2777 +#: ../src/notify.py:261 +msgid "Contact Signed Out" +msgstr "相手先がサインアウトしました" + +# (Mako) idle をどうする +#: ../src/common/connection_handlers.py:88 +#: ../src/common/zeroconf/connection_handlers_zeroconf.py:54 +msgid "Unable to load idle module" +msgstr "アイドルモジュールをロードできません" + +#: ../src/common/connection_handlers.py:121 +#, python-format +msgid "Registration information for transport %s has not arrived in time" +msgstr "中継先 %s の登録情報が一定時間内に到達しませんでした" + +#: ../src/common/connection_handlers.py:129 +msgid "Registration succeeded" +msgstr "登録が完了しました" + +#: ../src/common/connection_handlers.py:130 +#, python-format +msgid "Registration with agent %s succeeded" +msgstr "エージェント %s の登録は成功しました" + +#: ../src/common/connection_handlers.py:139 +msgid "Registration failed" +msgstr "登録が失敗しました" + +#: ../src/common/connection_handlers.py:140 +#, python-format +msgid "" +"Registration with agent %(agent)s failed with error %(error)s: %(error_msg)s" +msgstr "%(agent)s の登録は失敗しました。%(error)s: %(error_msg)s" + +#: ../src/common/connection_handlers.py:571 ../src/common/connection.py:1540 +msgid "Invisibility not supported" +msgstr "「隠れています」はサポートされていません" + +#: ../src/common/connection_handlers.py:572 ../src/common/connection.py:1541 +#, python-format +msgid "Account %s doesn't support invisibility." +msgstr "アカウント %s は「隠れています」をサポートしていません。" + +#: ../src/common/connection_handlers.py:1714 +msgid "I would like to add you to my roster." +msgstr "あなたを私の名簿に追加したいと思っています。" + +#: ../src/common/connection.py:70 msgid "Unable to get issuer certificate" msgstr "発行者の証明書を取得できません" -#: ../src/common/connection.py:69 +#: ../src/common/connection.py:71 msgid "Unable to get certificate CRL" msgstr "証明書失効リストを取得できません" -#: ../src/common/connection.py:70 +#: ../src/common/connection.py:72 msgid "Unable to decrypt certificate's signature" msgstr "証明書の署名を復号できません" -#: ../src/common/connection.py:71 +#: ../src/common/connection.py:73 msgid "Unable to decrypt CRL's signature" msgstr "証明書失効リストの署名を復号できません" -#: ../src/common/connection.py:72 +#: ../src/common/connection.py:74 msgid "Unable to decode issuer public key" msgstr "発行者の公開鍵を復元できません" -#: ../src/common/connection.py:73 +#: ../src/common/connection.py:75 msgid "Certificate signature failure" msgstr "証明書の署名の失敗" -#: ../src/common/connection.py:74 +#: ../src/common/connection.py:76 msgid "CRL signature failure" msgstr "証明書失効リストの署名の失敗" -#: ../src/common/connection.py:75 +#: ../src/common/connection.py:77 msgid "Certificate is not yet valid" msgstr "証明書は検証されていません" -#: ../src/common/connection.py:76 +#: ../src/common/connection.py:78 msgid "Certificate has expired" msgstr "証明書は期限切れです" -#: ../src/common/connection.py:77 +#: ../src/common/connection.py:79 msgid "CRL is not yet valid" msgstr "証明書失効リストは検証されていません" -#: ../src/common/connection.py:78 +#: ../src/common/connection.py:80 msgid "CRL has expired" msgstr "証明書失効リストは有効期限が切れています" -#: ../src/common/connection.py:79 +#: ../src/common/connection.py:81 msgid "Format error in certificate's notBefore field" msgstr "証明書の notBefore (有効期限の始め)の書式のエラー" -#: ../src/common/connection.py:80 +#: ../src/common/connection.py:82 msgid "Format error in certificate's notAfter field" msgstr "証明書の notAfter (有効期限の終わり)の書式のエラー" -#: ../src/common/connection.py:81 +#: ../src/common/connection.py:83 msgid "Format error in CRL's lastUpdate field" msgstr "証明書失効リストの最終更新の書式のエラー" -#: ../src/common/connection.py:82 +#: ../src/common/connection.py:84 msgid "Format error in CRL's nextUpdate field" msgstr "証明書失効リストの次回更新の書式のエラー" -#: ../src/common/connection.py:83 +#: ../src/common/connection.py:85 msgid "Out of memory" msgstr "メモリが足りません" -#: ../src/common/connection.py:84 +#: ../src/common/connection.py:86 msgid "Self signed certificate" msgstr "自己署名証明書" -#: ../src/common/connection.py:85 +#: ../src/common/connection.py:87 msgid "Self signed certificate in certificate chain" msgstr "認証パス中の自己署名証明書" -#: ../src/common/connection.py:86 +#: ../src/common/connection.py:88 msgid "Unable to get local issuer certificate" msgstr "ローカルの発行者の証明書を取得できません" # (Mako)The first は root のことか? -#: ../src/common/connection.py:87 +#: ../src/common/connection.py:89 msgid "Unable to verify the first certificate" msgstr "ルート証明書が検証できません" -#: ../src/common/connection.py:88 +#: ../src/common/connection.py:90 msgid "Certificate chain too long" msgstr "認証パスが長すぎます" -#: ../src/common/connection.py:89 +#: ../src/common/connection.py:91 msgid "Certificate revoked" msgstr "証明書は失効しています" -#: ../src/common/connection.py:90 +#: ../src/common/connection.py:92 msgid "Invalid CA certificate" msgstr "検証されない認証局証明書" -#: ../src/common/connection.py:91 +#: ../src/common/connection.py:93 msgid "Path length constraint exceeded" msgstr "パスの長さの制限を越えています" -#: ../src/common/connection.py:92 +#: ../src/common/connection.py:94 msgid "Unsupported certificate purpose" msgstr "証明書の目的はサポートされていません" -#: ../src/common/connection.py:93 +#: ../src/common/connection.py:95 msgid "Certificate not trusted" msgstr "証明書は信頼できません" -#: ../src/common/connection.py:94 +#: ../src/common/connection.py:96 msgid "Certificate rejected" msgstr "証明書は却下されました" -#: ../src/common/connection.py:95 +#: ../src/common/connection.py:97 msgid "Subject issuer mismatch" msgstr "サブジェクトの発行者が合致しません" -#: ../src/common/connection.py:96 +#: ../src/common/connection.py:98 msgid "Authority and subject key identifier mismatch" msgstr "機関とサブジェクトの鍵IDが合致しません" -#: ../src/common/connection.py:97 +#: ../src/common/connection.py:99 msgid "Authority and issuer serial number mismatch" msgstr "機関と発行者シリアル番号が合致しません" -#: ../src/common/connection.py:98 +#: ../src/common/connection.py:100 msgid "Key usage does not include certificate signing" msgstr "証明書署名に鍵の使い方が含まれていません" -#: ../src/common/connection.py:99 +#: ../src/common/connection.py:101 msgid "Application verification failure" msgstr "アプリケーションの検証に失敗しました" -#: ../src/common/connection.py:259 -#: ../src/common/connection_handlers_events.py:967 ../src/config.py:2106 -#: ../src/config.py:2115 ../src/config.py:2183 ../src/config.py:3619 -#: ../src/dataforms_widget.py:623 ../src/dialogs.py:3079 -msgid "Invalid Jabber ID" -msgstr "Jabber ID が正しくありません" - -#: ../src/common/connection.py:260 ../src/dialogs.py:3080 +#: ../src/common/connection.py:264 ../src/dialogs.py:3093 #, python-format msgid "It is not possible to send a message to %s, this JID is not valid." msgstr "%s さんにメッセージを送ることができません。JID が正しくありません。" # (Mako) ここでは presence を「相手先」と訳す -#: ../src/common/connection.py:282 +#: ../src/common/connection.py:286 msgid "Neither the remote presence is signed, nor a key was assigned." msgstr "相手先が署名していないか、鍵が割り当てられていません。" -#: ../src/common/connection.py:285 +#: ../src/common/connection.py:289 #, python-format msgid "The contact's key (%s) does not match the key assigned in Gajim." msgstr "相手先の鍵 (%s) は、Gajim で割り当てられている鍵と合致しません。" -#. we're not english -#. one in locale and one en -#: ../src/common/connection.py:337 +#. we're not english: one in locale and one en +#: ../src/common/connection.py:342 msgid "[This message is *encrypted* (See :XEP:`27`]" msgstr "[このメッセージは *暗号化されています* (参考 :XEP:`27`]" -#: ../src/common/connection.py:435 +#: ../src/common/connection.py:440 #, python-format msgid "" "Subject: %(subject)s\n" @@ -4629,97 +5149,73 @@ msgstr "" "件名: %(subject)s\n" "%(message)s" -#: ../src/common/connection.py:448 ../src/common/connection_handlers.py:339 -#: ../src/common/connection_handlers.py:943 -#: ../src/common/connection_handlers.py:1053 -#: ../src/common/connection_handlers.py:1710 -#: ../src/common/connection_handlers_events.py:861 -#: ../src/common/logger.py:1124 ../src/gajim.py:385 -msgid "Disk Write Error" -msgstr "ディスクの書き込みエラー" - -#: ../src/common/connection.py:452 ../src/common/connection_handlers.py:946 -#: ../src/common/connection_handlers.py:1056 -#: ../src/common/connection_handlers.py:1713 -#: ../src/common/connection_handlers_events.py:865 -#: ../src/common/logger.py:1127 ../src/gajim.py:204 ../src/session.py:98 -#, python-format -msgid "" -"The database file (%s) cannot be read. Try to repair it (see http://trac." -"gajim.org/wiki/DatabaseBackup) or remove it (all history will be lost)." -msgstr "" -"データベースファイル (%s) の読み込みができません。修復を試みる (http://trac." -"gajim.org/wiki/DatabaseBackup を参照のこと) か、または削除して (すべての履歴" -"は失われます) ください。" - -#: ../src/common/connection.py:845 +#: ../src/common/connection.py:850 #, python-format msgid "Connection with account \"%s\" has been lost" msgstr "アカウント \"%s\" での接続が切れました" -#: ../src/common/connection.py:846 +#: ../src/common/connection.py:851 msgid "Reconnect manually." msgstr "手動で再接続してください。" #. it's a new account #. wrong answer -#: ../src/common/connection.py:857 +#: ../src/common/connection.py:862 #, python-format msgid "Server %(name)s answered wrongly to register request: %(error)s" msgstr "サーバー %(name)s は登録要求に対してエラーを返しました: %(error)s" #. requested config has changed since first connection -#: ../src/common/connection.py:899 +#: ../src/common/connection.py:904 #, python-format msgid "Server %s provided a different registration form" msgstr "サーバー %s は異なる登録フォームを提供しています" -#. wrong answer -#: ../src/common/connection.py:915 +#: ../src/common/connection.py:921 msgid "Invalid answer" msgstr "応答が正しくありません" -#: ../src/common/connection.py:916 +#: ../src/common/connection.py:922 #, python-format msgid "Transport %(name)s answered wrongly to register request: %(error)s" msgstr "中継先 %(name)s は登録要求に対してエラーを返しました: %(error)s" -#: ../src/common/connection.py:1224 ../src/common/connection.py:1358 -#: ../src/common/connection.py:1972 -#: ../src/common/zeroconf/connection_zeroconf.py:204 +#: ../src/common/connection.py:1197 ../src/common/connection.py:1349 +#: ../src/common/connection.py:1976 +#: ../src/common/zeroconf/connection_zeroconf.py:205 #, python-format msgid "Could not connect to \"%s\"" msgstr "%s に接続できませんでした" -#: ../src/common/connection.py:1225 ../src/gui_interface.py:524 +#: ../src/common/connection.py:1198 ../src/gui_interface.py:529 msgid "Check your connection or try again later." msgstr "設定を確認するか、時間をおいて試してください。" -#: ../src/common/connection.py:1230 +#: ../src/common/connection.py:1203 #, python-format msgid "Server replied: %s" msgstr "サーバの応答: %s" -#: ../src/common/connection.py:1243 +#: ../src/common/connection.py:1218 msgid "Connection to proxy failed" msgstr "プロキシへの接続に失敗" -#: ../src/common/connection.py:1275 ../src/common/connection.py:1337 +#: ../src/common/connection.py:1256 ../src/common/connection.py:1328 #, python-format msgid "Could not connect to account %s" msgstr "アカウント %s に接続できません" -#: ../src/common/connection.py:1276 ../src/common/connection.py:1338 +#: ../src/common/connection.py:1257 ../src/common/connection.py:1329 #, python-format msgid "Connection with account %s has been lost. Retry connecting." msgstr "アカウント %s での接続が切れました。再接続を試みます。" -#: ../src/common/connection.py:1301 +#: ../src/common/connection.py:1282 #, python-format msgid "The authenticity of the %s certificate could be invalid." msgstr "%s の証明書の真正性は検証できませんでした。" -#: ../src/common/connection.py:1304 +#: ../src/common/connection.py:1285 #, python-format msgid "" "\n" @@ -4728,7 +5224,7 @@ msgstr "" "\n" "SSL エラー: <b>%s</b>" -#: ../src/common/connection.py:1306 +#: ../src/common/connection.py:1287 #, python-format msgid "" "\n" @@ -4737,230 +5233,76 @@ msgstr "" "\n" "未知の SSL エラー: %d" -#: ../src/common/connection.py:1359 +#: ../src/common/connection.py:1310 +#, python-format +msgid "" +"The authenticity of the %s certificate could be invalid.\n" +"The certificate does not cover this domain." +msgstr "" +"%s の証明書の真正性は検証できませんでした。\n" +"この証明書はこのドメインをカバーしていません。" + +#: ../src/common/connection.py:1350 msgid "Check your connection or try again later" msgstr "接続を確認するか、または後で再度試してください" # (Mako) %s はアカウントか -#: ../src/common/connection.py:1393 +#: ../src/common/connection.py:1385 #, python-format msgid "Authentication failed with \"%s\"" msgstr "\"%s\" の認証に失敗しました" -#: ../src/common/connection.py:1395 -msgid "Please check your login and password for correctness." +#: ../src/common/connection.py:1386 +msgid "Please check your login and passwordfor correctness." msgstr "整合性のために、ログインとパスワードを確認してください。" -#: ../src/common/connection.py:1468 +#: ../src/common/connection.py:1461 msgid "Error while removing privacy list" msgstr "プライバシーリストを削除する際のエラー" -#: ../src/common/connection.py:1469 +#: ../src/common/connection.py:1462 #, python-format msgid "" "Privacy list %s has not been removed. It is maybe active in one of your " -"connected resources. Deactivate it and try again." +"connected resources. Deactivate it and tryagain." msgstr "" "プライバシーリスト %s は削除されませんでした。現在の接続に使用されているよう" "です。使用をやめてから再び試してください。" -#: ../src/common/connection.py:1546 ../src/common/connection_handlers.py:573 -msgid "Invisibility not supported" -msgstr "「隠れています」はサポートされていません" - -#: ../src/common/connection.py:1547 ../src/common/connection_handlers.py:574 -#, python-format -msgid "Account %s doesn't support invisibility." -msgstr "アカウント %s は「隠れています」をサポートしていません。" - -#: ../src/common/connection.py:1839 +#: ../src/common/connection.py:1843 #, python-format msgid "Sent contact: \"%s\" (%s)" msgstr "送った相手先: \"%s\" (%s)" -#: ../src/common/connection.py:1842 +#: ../src/common/connection.py:1846 msgid "Sent contacts:" msgstr "送った相手先:" -#: ../src/common/connection.py:1989 ../src/common/connection.py:2012 +#: ../src/common/connection.py:1993 ../src/common/connection.py:2016 msgid "Not fetched because of invisible status" msgstr "「隠れ中」のため取得できません" -#: ../src/common/connection.py:2542 +#: ../src/common/connection.py:2575 msgid "Unregister failed" msgstr "登録解除に失敗" -#: ../src/common/connection.py:2543 +#: ../src/common/connection.py:2576 #, python-format msgid "Unregistration with server %(server)s failed: %(error)s" msgstr "サーバー %(server)s での登録解除に失敗しました: %(error)s" -# (Mako) idle をどうする -#: ../src/common/connection_handlers.py:95 -#: ../src/common/zeroconf/connection_handlers_zeroconf.py:54 -msgid "Unable to load idle module" -msgstr "アイドルモジュールをロードできません" - -#: ../src/common/connection_handlers.py:128 -#, python-format -msgid "Registration information for transport %s has not arrived in time" -msgstr "中継先 %s の登録情報が一定時間内に到達しませんでした" - -#: ../src/common/connection_handlers.py:135 -msgid "Registration succeeded" -msgstr "登録が完了しました" - -#: ../src/common/connection_handlers.py:136 -#, python-format -msgid "Registration with agent %s succeeded" -msgstr "エージェント %s の登録は成功しました" - -#: ../src/common/connection_handlers.py:144 -msgid "Registration failed" -msgstr "登録が失敗しました" - -#: ../src/common/connection_handlers.py:144 -#, python-format -msgid "" -"Registration with agent %(agent)s failed with error %(error)s: %(error_msg)s" -msgstr "%(agent)s の登録は失敗しました。%(error)s: %(error_msg)s" - -#: ../src/common/connection_handlers.py:1755 -msgid "I would like to add you to my roster." -msgstr "あなたを私の名簿に追加したいと思っています。" - -#: ../src/common/connection_handlers_events.py:345 -#, python-format -msgid "" -"JID %s is not RFC compliant. It will not be added to your roster. Use roster " -"management tools such as http://jru.jabberstudio.org/ to remove it" -msgstr "" -"JID %s は規格(RFC)に合っていません。名簿には追加されません。これを削除するに" -"は、http://jru.jabberstudio.org/ のような名簿管理ツールを使ってください。" - -# (Mako) 実際に使われている場所を確認していないが、強引に訳す -#: ../src/common/connection_handlers_events.py:776 -#, python-format -msgid "unsubscribe request from %s" -msgstr "%s から継読中止の要求" - -#. Room has been destroyed. see -#. http://www.xmpp.org/extensions/xep-0045.html#destroyroom -#: ../src/common/connection_handlers_events.py:886 -msgid "Room has been destroyed" -msgstr "談話室は閉鎖されました" - -#: ../src/common/connection_handlers_events.py:894 -#, python-format -msgid "You can join this room instead: %s" -msgstr "代わりに次の談話室に参加します: %s" - -#: ../src/common/connection_handlers_events.py:968 -msgid "A message from a non-valid JID arrived, it has been ignored." -msgstr "正しくない JID からメッセージが届きました。無視します。" - -#. ('MSGNOTSENT', account, (jid, ierror_msg, msg, time, session)) -#: ../src/common/connection_handlers_events.py:1005 -#: ../src/gui_interface.py:415 ../src/gui_interface.py:429 -#, python-format -msgid "error while sending %(message)s ( %(error)s )" -msgstr "%(message)s を送信する際にエラー ( %(error)s )" - -#: ../src/common/connection_handlers_events.py:1422 -#, python-format -msgid "Unknown SSL error: %d" -msgstr "未知の SSL エラー: %d" - -#: ../src/common/connection_handlers_events.py:1950 ../src/dialogs.py:2771 -#: ../src/notify.py:260 -msgid "New Single Message" -msgstr "新着の単発メッセージ" - -#: ../src/common/connection_handlers_events.py:1952 -#, python-format -msgid "New Single Message from %(nickname)s" -msgstr "%(nickname)s からの新しい単発メッセージ" - -#: ../src/common/connection_handlers_events.py:1956 ../src/dialogs.py:2772 -#: ../src/notify.py:261 -msgid "New Private Message" -msgstr "新着の私信" - -#: ../src/common/connection_handlers_events.py:1958 -#, python-format -msgid "New Private Message from group chat %s" -msgstr "グループチャット %s からの新着の私信" - -#: ../src/common/connection_handlers_events.py:1961 -#, python-format -msgid "%(nickname)s: %(message)s" -msgstr "%(nickname)s さん: %(message)s" - -#: ../src/common/connection_handlers_events.py:1964 -#, python-format -msgid "Messaged by %(nickname)s" -msgstr "%(nickname)s さんからのメッセージ" - -#: ../src/common/connection_handlers_events.py:1968 ../src/dialogs.py:2771 -#: ../src/notify.py:260 -msgid "New Message" -msgstr "新着メッセージ" - -#: ../src/common/connection_handlers_events.py:1970 -#, python-format -msgid "New Message from %(nickname)s" -msgstr "%(nickname)s さんからの新着メッセージ" - -#: ../src/common/connection_handlers_events.py:2099 -#, python-format -msgid "%(nick)s Changed Status" -msgstr "%(nick)s さんの在席状況が変わりました" - -#: ../src/common/connection_handlers_events.py:2101 -#: ../src/groupchat_control.py:202 ../src/groupchat_control.py:1755 -#: ../src/history_window.py:447 -#, python-format -msgid "%(nick)s is now %(status)s" -msgstr "%(nick)s さんは現在 %(status)s" - -#: ../src/common/connection_handlers_events.py:2106 ../src/dialogs.py:2783 -#: ../src/notify.py:274 -msgid "Contact Changed Status" -msgstr "相手先が在席状況を変更" - -#: ../src/common/connection_handlers_events.py:2108 -#, python-format -msgid "%(nickname)s Signed In" -msgstr "%(nickname)s さんがサインインしました" - -#. default value -#: ../src/common/connection_handlers_events.py:2113 ../src/dialogs.py:2767 -#: ../src/notify.py:256 -msgid "Contact Signed In" -msgstr "相手先がサインインしました" - -#: ../src/common/connection_handlers_events.py:2115 -#, python-format -msgid "%(nickname)s Signed Out" -msgstr "%(nickname)s さんがサインアウトしました" - -#: ../src/common/connection_handlers_events.py:2120 ../src/dialogs.py:2769 -#: ../src/notify.py:258 -msgid "Contact Signed Out" -msgstr "相手先がサインアウトしました" - # (Mako)承認なしに名簿にある状態 -#: ../src/common/contacts.py:126 ../src/common/helpers.py:60 -#: ../src/gui_interface.py:467 +#: ../src/common/contacts.py:126 ../src/common/helpers.py:67 +#: ../src/gui_interface.py:472 msgid "Observers" msgstr "オブザーバ" #: ../src/common/contacts.py:130 ../src/common/contacts.py:358 -#: ../src/common/helpers.py:60 ../src/disco.py:120 ../src/disco.py:121 -#: ../src/disco.py:1517 ../src/roster_window.py:856 -#: ../src/roster_window.py:1552 ../src/roster_window.py:1640 -#: ../src/roster_window.py:1642 ../src/roster_window.py:1804 -#: ../src/roster_window.py:2480 +#: ../src/common/helpers.py:67 ../src/disco.py:120 ../src/disco.py:121 +#: ../src/disco.py:1517 ../src/roster_window.py:859 +#: ../src/roster_window.py:1579 ../src/roster_window.py:1683 +#: ../src/roster_window.py:1685 ../src/roster_window.py:1847 +#: ../src/roster_window.py:2525 msgid "Transports" msgstr "中継先" @@ -5189,280 +5531,297 @@ msgstr "週の終わり" msgid "Weekend!" msgstr "週末 !" -#: ../src/common/helpers.py:151 +#: ../src/common/helpers.py:158 msgid "Username must be between 1 and 1023 chars" msgstr "ユーザー名は1文字以上1023文字以下である必要があります" -#: ../src/common/helpers.py:156 +#: ../src/common/helpers.py:163 msgid "Invalid character in username." msgstr "ユーザー名に不正な文字が含まれています。" -#: ../src/common/helpers.py:162 +#: ../src/common/helpers.py:169 msgid "Server must be between 1 and 1023 chars" msgstr "サーバー名は1文字以上1023文字以下である必要があります" -#: ../src/common/helpers.py:167 +#: ../src/common/helpers.py:174 msgid "Invalid character in hostname." msgstr "ホスト名に不正な文字が含まれています。" -#: ../src/common/helpers.py:169 +#: ../src/common/helpers.py:176 msgid "Server address required." msgstr "サーバーのアドレスが必要です。" -#: ../src/common/helpers.py:173 +#: ../src/common/helpers.py:180 msgid "Resource must be between 1 and 1023 chars" msgstr "リソースは1文字以上1023文字以下である必要があります" -#: ../src/common/helpers.py:178 +#: ../src/common/helpers.py:185 msgid "Invalid character in resource." msgstr "リソースに不正な文字が含まれています。" -#: ../src/common/helpers.py:218 +#: ../src/common/helpers.py:225 msgid "_Busy" msgstr "取り込み中 (_B)" -#: ../src/common/helpers.py:220 ../src/tooltips.py:195 +#: ../src/common/helpers.py:227 ../src/tooltips.py:196 msgid "Busy" msgstr "取り込み中" -#: ../src/common/helpers.py:223 +#: ../src/common/helpers.py:230 msgid "_Not Available" msgstr "不在 (_N)" -#: ../src/common/helpers.py:225 ../src/tooltips.py:197 +#: ../src/common/helpers.py:232 ../src/tooltips.py:198 msgid "Not Available" msgstr "不在" -#: ../src/common/helpers.py:228 +#: ../src/common/helpers.py:235 msgid "_Free for Chat" msgstr "チャット可 (_F)" -#: ../src/common/helpers.py:230 ../src/tooltips.py:191 +#: ../src/common/helpers.py:237 ../src/tooltips.py:192 msgid "Free for Chat" msgstr "チャット可" -#: ../src/common/helpers.py:233 +#: ../src/common/helpers.py:240 msgid "?user status:_Available" msgstr "在席 (_A)" -#: ../src/common/helpers.py:235 ../src/tooltips.py:189 +#: ../src/common/helpers.py:242 ../src/tooltips.py:190 msgid "?user status:Available" msgstr "在席" -#: ../src/common/helpers.py:237 +#: ../src/common/helpers.py:244 msgid "Connecting" msgstr "接続中です" -#: ../src/common/helpers.py:240 +#: ../src/common/helpers.py:247 msgid "A_way" msgstr "離席中 (_w)" -#: ../src/common/helpers.py:245 +#: ../src/common/helpers.py:252 msgid "_Offline" msgstr "オフライン (_O)" -#: ../src/common/helpers.py:247 ../src/tooltips.py:199 +#: ../src/common/helpers.py:254 ../src/tooltips.py:200 msgid "Offline" msgstr "オフライン" -#: ../src/common/helpers.py:250 +#: ../src/common/helpers.py:257 msgid "_Invisible" msgstr "隠れ中 (_I)" -#: ../src/common/helpers.py:252 +#: ../src/common/helpers.py:259 msgid "Invisible" msgstr "隠れ中" -#: ../src/common/helpers.py:256 +#: ../src/common/helpers.py:263 msgid "?contact has status:Unknown" msgstr "不明" -#: ../src/common/helpers.py:258 +#: ../src/common/helpers.py:265 msgid "?contact has status:Has errors" msgstr "エラーが起こっています" -#: ../src/common/helpers.py:263 +#: ../src/common/helpers.py:270 msgid "?Subscription we already have:None" msgstr "なし" # (Mako)subscription -#: ../src/common/helpers.py:265 +#: ../src/common/helpers.py:272 msgid "To" msgstr "相手先が承認" # (Mako)groups_post_window.ui は、メールの「差出人」に相当 # helpers.pyは、 # 相手先の情報で、subscriptionの有無なので、「こちらが承認」としたい -#: ../src/common/helpers.py:267 +#: ../src/common/helpers.py:274 msgid "From" msgstr "こちらが承認" -#: ../src/common/helpers.py:269 +#: ../src/common/helpers.py:276 msgid "Both" msgstr "相互に承認" -#: ../src/common/helpers.py:277 +#: ../src/common/helpers.py:284 msgid "?Ask (for Subscription):None" msgstr "なし" -#: ../src/common/helpers.py:279 +#: ../src/common/helpers.py:286 msgid "Subscribe" msgstr "申し込み" -#: ../src/common/helpers.py:288 +#: ../src/common/helpers.py:295 msgid "?Group Chat Contact Role:None" msgstr "なし" -#: ../src/common/helpers.py:291 +#: ../src/common/helpers.py:298 msgid "Moderators" msgstr "司会者" -#: ../src/common/helpers.py:293 +#: ../src/common/helpers.py:300 msgid "Moderator" msgstr "司会者" -#: ../src/common/helpers.py:296 +#: ../src/common/helpers.py:303 msgid "Participants" msgstr "参加者" -#: ../src/common/helpers.py:298 +#: ../src/common/helpers.py:305 msgid "Participant" msgstr "参加者" # (Mako)moderated room で、発言権(voice)を持たない者 -#: ../src/common/helpers.py:301 +#: ../src/common/helpers.py:308 msgid "Visitors" msgstr "傍聴者" -#: ../src/common/helpers.py:303 +#: ../src/common/helpers.py:310 msgid "Visitor" msgstr "傍聴者" -#: ../src/common/helpers.py:309 ../src/tooltips.py:210 +#: ../src/common/helpers.py:316 ../src/tooltips.py:211 msgid "?Group Chat Contact Affiliation:None" msgstr "なし" -#: ../src/common/helpers.py:311 ../src/tooltips.py:216 +#: ../src/common/helpers.py:318 ../src/tooltips.py:217 msgid "Owner" msgstr "主宰者" -#: ../src/common/helpers.py:313 ../src/tooltips.py:214 +#: ../src/common/helpers.py:320 ../src/tooltips.py:215 msgid "Administrator" msgstr "管理人" # (Mako)「会員」では排他的なニュアンスが強いのでしかたなくカタカナ語で -#: ../src/common/helpers.py:315 ../src/tooltips.py:212 +#: ../src/common/helpers.py:322 ../src/tooltips.py:213 msgid "Member" msgstr "メンバー" -#: ../src/common/helpers.py:354 +#: ../src/common/helpers.py:361 msgid "is paying attention to the conversation" msgstr "さんはこの会話に目を向けています" -#: ../src/common/helpers.py:356 +#: ../src/common/helpers.py:363 msgid "is doing something else" msgstr "さんは何かほかのことをしています" -#: ../src/common/helpers.py:358 +#: ../src/common/helpers.py:365 msgid "is composing a message..." msgstr "さんがメッセージを書いています..." #. paused means he or she was composing but has stopped for a while -#: ../src/common/helpers.py:361 +#: ../src/common/helpers.py:368 msgid "paused composing a message" msgstr "さんは書く手をちょっと止めています" -#: ../src/common/helpers.py:363 +#: ../src/common/helpers.py:370 msgid "has closed the chat window or tab" msgstr "さんは会話ウインドウを閉じました" #. GiB means gibibyte -#: ../src/common/helpers.py:628 +#: ../src/common/helpers.py:648 #, python-format msgid "%s GiB" msgstr "%s GiB" #. GB means gigabyte -#: ../src/common/helpers.py:631 +#: ../src/common/helpers.py:651 #, python-format msgid "%s GB" msgstr "%s GB" #. MiB means mibibyte -#: ../src/common/helpers.py:635 +#: ../src/common/helpers.py:655 #, python-format msgid "%s MiB" msgstr "%s MiB" #. MB means megabyte -#: ../src/common/helpers.py:638 +#: ../src/common/helpers.py:658 #, python-format msgid "%s MB" msgstr "%s MB" #. KiB means kibibyte -#: ../src/common/helpers.py:642 +#: ../src/common/helpers.py:662 #, python-format msgid "%s KiB" msgstr "%s KiB" #. KB means kilo bytes -#: ../src/common/helpers.py:645 +#: ../src/common/helpers.py:665 #, python-format msgid "%s KB" msgstr "%s KB" #. B means bytes -#: ../src/common/helpers.py:648 +#: ../src/common/helpers.py:668 #, python-format msgid "%s B" msgstr "%s B" # (Mako)これと、次の "from room %s" は連続して表示される -#: ../src/common/helpers.py:1099 ../src/common/helpers.py:1106 +#: ../src/common/helpers.py:1119 ../src/common/helpers.py:1126 #, python-format msgid "%d message pending" msgid_plural "%d messages pending" msgstr[0] "保留メッセージ %d 件" msgstr[1] "保留メッセージ %d 件" -#: ../src/common/helpers.py:1112 +#: ../src/common/helpers.py:1132 #, python-format msgid " from room %s" msgstr " - 談話室 \"%s\"" -#: ../src/common/helpers.py:1115 ../src/common/helpers.py:1132 +#: ../src/common/helpers.py:1135 ../src/common/helpers.py:1152 #, python-format msgid " from user %s" msgstr " - ユーザー %s" -#: ../src/common/helpers.py:1117 +#: ../src/common/helpers.py:1137 #, python-format msgid " from %s" msgstr "- %s" -#: ../src/common/helpers.py:1124 ../src/common/helpers.py:1130 +#: ../src/common/helpers.py:1144 ../src/common/helpers.py:1150 #, python-format msgid "%d event pending" msgid_plural "%d events pending" msgstr[0] "保留イベント %d 件" msgstr[1] "保留イベント %d 件" -#: ../src/common/helpers.py:1162 +#: ../src/common/helpers.py:1182 #, python-format msgid "Gajim - %s" msgstr "Gajim - %s" -#: ../src/common/helpers.py:1341 +#: ../src/common/helpers.py:1361 msgid "Hello, I am $name." msgstr "こんにちは。私は $name です。" -#: ../src/common/jingle_rtp.py:107 +#: ../src/common/helpers.py:1471 ../src/common/helpers.py:1480 +#: ../src/common/helpers.py:1534 +msgid "Timeout loading image" +msgstr "画像の読み込みに失敗しました" + +#: ../src/common/helpers.py:1490 ../src/common/helpers.py:1532 +msgid "Image is too big" +msgstr "画像が大きすぎます" + +#: ../src/common/helpers.py:1500 +msgid "PyCURL is not installed" +msgstr "pyCURL がインストールされていません" + +#: ../src/common/helpers.py:1536 +msgid "Error loading image" +msgstr "画像読み込みエラー" + +#: ../src/common/jingle_rtp.py:109 #, python-format msgid "%s configuration error" msgstr "%s 設定エラー" -#: ../src/common/jingle_rtp.py:108 +#: ../src/common/jingle_rtp.py:110 #, python-format msgid "" "Couldn't setup %s. Check your configuration.\n" @@ -5481,11 +5840,11 @@ msgstr "" "エラー:\n" "%s" -#: ../src/common/jingle_rtp.py:205 +#: ../src/common/jingle_rtp.py:208 msgid "GStreamer error" msgstr "GStreamer エラー" -#: ../src/common/jingle_rtp.py:206 +#: ../src/common/jingle_rtp.py:208 #, python-format msgid "" "Error: %s\n" @@ -5494,19 +5853,19 @@ msgstr "" "エラー: %s\n" "デバッグ: %s" -#: ../src/common/jingle_rtp.py:335 +#: ../src/common/jingle_rtp.py:338 msgid "audio input" msgstr "音声入力" -#: ../src/common/jingle_rtp.py:338 +#: ../src/common/jingle_rtp.py:341 msgid "audio output" msgstr "音声出力" -#: ../src/common/jingle_rtp.py:381 +#: ../src/common/jingle_rtp.py:384 msgid "video input" msgstr "ビデオ入力" -#: ../src/common/jingle_rtp.py:390 +#: ../src/common/jingle_rtp.py:393 msgid "video output" msgstr "ビデオ出力" @@ -6273,7 +6632,7 @@ msgstr "" "[暗号化セッションの途中です。このメッセージを見ているということは、何か失敗し" "ています。]" -#: ../src/common/zeroconf/connection_zeroconf.py:192 +#: ../src/common/zeroconf/connection_zeroconf.py:193 msgid "Avahi error" msgstr "Avahi エラー" @@ -6286,45 +6645,45 @@ msgstr "" "%s\n" "ローカルの伝送がうまく働いていないようです。" -#: ../src/common/zeroconf/connection_zeroconf.py:205 +#: ../src/common/zeroconf/connection_zeroconf.py:206 msgid "Please check if Avahi or Bonjour is installed." msgstr "Avahi か Bonjour がインストールされているか確認してください。" -#: ../src/common/zeroconf/connection_zeroconf.py:215 -#: ../src/common/zeroconf/connection_zeroconf.py:219 +#: ../src/common/zeroconf/connection_zeroconf.py:216 +#: ../src/common/zeroconf/connection_zeroconf.py:220 msgid "Could not start local service" msgstr "ローカルのサービスを起動できません" -#: ../src/common/zeroconf/connection_zeroconf.py:216 +#: ../src/common/zeroconf/connection_zeroconf.py:217 #, python-format msgid "Unable to bind to port %d." msgstr "ポート %d を開けません。" -#: ../src/common/zeroconf/connection_zeroconf.py:220 -#: ../src/common/zeroconf/connection_zeroconf.py:304 -#: ../src/common/zeroconf/connection_zeroconf.py:317 -#: ../src/common/zeroconf/connection_zeroconf.py:333 +#: ../src/common/zeroconf/connection_zeroconf.py:221 +#: ../src/common/zeroconf/connection_zeroconf.py:305 +#: ../src/common/zeroconf/connection_zeroconf.py:318 +#: ../src/common/zeroconf/connection_zeroconf.py:334 msgid "Please check if avahi-daemon is running." msgstr "avahi-daemon が起動しているか確認してください。" -#: ../src/common/zeroconf/connection_zeroconf.py:303 -#: ../src/common/zeroconf/connection_zeroconf.py:316 -#: ../src/common/zeroconf/connection_zeroconf.py:332 +#: ../src/common/zeroconf/connection_zeroconf.py:304 +#: ../src/common/zeroconf/connection_zeroconf.py:317 +#: ../src/common/zeroconf/connection_zeroconf.py:333 #, python-format msgid "Could not change status of account \"%s\"" msgstr "アカウント \"%s\" の在席状況を変更できませんでした" -#: ../src/common/zeroconf/connection_zeroconf.py:351 -#: ../src/common/zeroconf/connection_zeroconf.py:390 +#: ../src/common/zeroconf/connection_zeroconf.py:352 +#: ../src/common/zeroconf/connection_zeroconf.py:392 msgid "Your message could not be sent." msgstr "メッセージを送信できませんでした。" -#: ../src/common/zeroconf/connection_zeroconf.py:365 -#: ../src/common/zeroconf/connection_zeroconf.py:404 +#: ../src/common/zeroconf/connection_zeroconf.py:366 +#: ../src/common/zeroconf/connection_zeroconf.py:406 msgid "Contact is offline. Your message could not be sent." msgstr "相手先はオフラインです。メッセージを送信できませんでした。" -#: ../src/common/zeroconf/connection_zeroconf.py:431 +#: ../src/common/zeroconf/connection_zeroconf.py:433 msgid "" "Connection to host could not be established: Timeout while sending data." msgstr "ホストへの接続を確立できませんでした: データ送信中の時間切れです。" @@ -6335,24 +6694,24 @@ msgstr "ホストへの接続を確立できませんでした: データ送信 msgid "Error while adding service. %s" msgstr "サービスの追加中のエラーです。%s" -#: ../src/config.py:406 +#: ../src/config.py:407 msgid "Default Message" msgstr "デフォルトのメッセージ" -#: ../src/config.py:415 +#: ../src/config.py:416 msgid "Enabled" msgstr "有効" -#: ../src/config.py:468 ../src/config.py:472 ../src/config.py:3115 +#: ../src/config.py:469 ../src/config.py:473 ../src/config.py:3159 msgid "Default" msgstr "デフォルト" -#: ../src/config.py:746 ../src/dialogs.py:1493 +#: ../src/config.py:757 ../src/dialogs.py:1493 #, python-format msgid "Dictionary for lang %s not available" msgstr "言語 %s の辞書はありません" -#: ../src/config.py:747 +#: ../src/config.py:758 #, python-format msgid "" "You have to install %s dictionary to use spellchecking, or choose another " @@ -6361,213 +6720,213 @@ msgstr "" "スペルチェックを行なうには %s の辞書をインストールしなければなりません。ある" "いは、speller_language オプションで別の言語を選択してください。" -#: ../src/config.py:1223 +#: ../src/config.py:1238 msgid "status message title" msgstr "状況メッセージのタイトル" -#: ../src/config.py:1223 +#: ../src/config.py:1238 msgid "status message text" msgstr "状況メッセージの文" #. Name column -#: ../src/config.py:1523 ../src/dialogs.py:2528 ../src/dialogs.py:2595 -#: ../src/dialogs.py:3382 ../src/disco.py:886 ../src/disco.py:1744 -#: ../src/disco.py:2046 ../src/history_window.py:90 +#: ../src/config.py:1566 ../src/dialogs.py:2536 ../src/dialogs.py:2603 +#: ../src/dialogs.py:3395 ../src/disco.py:886 ../src/disco.py:1744 +#: ../src/disco.py:2046 ../src/history_window.py:91 msgid "Name" msgstr "名前" -#: ../src/config.py:1618 +#: ../src/config.py:1661 msgid "Relogin now?" msgstr "今すぐ再ログインしますか ?" -#: ../src/config.py:1619 +#: ../src/config.py:1662 msgid "If you want all the changes to apply instantly, you must relogin." msgstr "すべての変更を直ちに有効にするには、再ログインしてください。" -#: ../src/config.py:1773 ../src/config.py:1906 +#: ../src/config.py:1816 ../src/config.py:1949 msgid "OpenPGP is not usable on this computer" msgstr "OpenPGP はこのコンピュータでは使えません。" -#: ../src/config.py:1946 ../src/config.py:1993 +#: ../src/config.py:1989 ../src/config.py:2036 msgid "Unread events" msgstr "未読のイベント" -#: ../src/config.py:1947 +#: ../src/config.py:1990 msgid "Read all pending events before removing this account." msgstr "このアカウントを削除する前にすべての保留イベントを読みます。" -#: ../src/config.py:1976 +#: ../src/config.py:2019 #, python-format msgid "You have opened chat in account %s" msgstr "アカウント %s でチャット中です" -#: ../src/config.py:1977 +#: ../src/config.py:2020 msgid "All chat and groupchat windows will be closed. Do you want to continue?" msgstr "" "すべてのチャットとグループチャットのウィンドウを閉じます。続けてもいいです" "か ?" -#: ../src/config.py:1989 ../src/config.py:2531 ../src/config.py:2567 +#: ../src/config.py:2032 ../src/config.py:2574 ../src/config.py:2611 msgid "You are currently connected to the server" msgstr "現在サーバーに接続している状態です" -#: ../src/config.py:1990 +#: ../src/config.py:2033 msgid "To change the account name, you must be disconnected." msgstr "アカウント名を変更するには、接続を切らなければなりません。" -#: ../src/config.py:1994 +#: ../src/config.py:2037 msgid "To change the account name, you must read all pending events." msgstr "" "アカウント名を変更するには、保留されているすべてのイベントを読まなければなり" "ません。" -#: ../src/config.py:2000 +#: ../src/config.py:2043 msgid "Account Name Already Used" msgstr "アカウン名は既に使われています" -#: ../src/config.py:2001 +#: ../src/config.py:2044 msgid "" "This name is already used by another of your accounts. Please choose another " "name." msgstr "この名前は別のアカウントで既に使われています。別の名前にしてください。" -#: ../src/config.py:2005 ../src/config.py:2009 +#: ../src/config.py:2048 ../src/config.py:2052 msgid "Invalid account name" msgstr "アカウント名が正しくありません" -#: ../src/config.py:2006 +#: ../src/config.py:2049 msgid "Account name cannot be empty." msgstr "アカウント名は空白にできません。" -#: ../src/config.py:2010 +#: ../src/config.py:2053 msgid "Account name cannot contain spaces." msgstr "アカウント名にスペースを含めることはできません。" -#: ../src/config.py:2087 +#: ../src/config.py:2130 msgid "Rename Account" msgstr "アカウントの変更" -#: ../src/config.py:2088 +#: ../src/config.py:2131 #, python-format msgid "Enter a new name for account %s" msgstr "%s さんの新しい名前を入力してください" -#: ../src/config.py:2116 +#: ../src/config.py:2159 msgid "A Jabber ID must be in the form \"user@servername\"." msgstr "Jabber ID は \"user@サーバー名\" の形をしていなければなりません。" -#: ../src/config.py:2339 ../src/config.py:3665 +#: ../src/config.py:2382 ../src/config.py:3709 msgid "Invalid entry" msgstr "入力内容が正しくありません" -#: ../src/config.py:2340 ../src/config.py:3666 +#: ../src/config.py:2383 ../src/config.py:3710 msgid "Custom port must be a port number." msgstr "ポートは番号で指定しなければなりません。" -#: ../src/config.py:2361 +#: ../src/config.py:2404 msgid "Failed to get secret keys" msgstr "秘密鍵が見つかりません" -#: ../src/config.py:2362 +#: ../src/config.py:2405 msgid "There is no OpenPGP secret key available." msgstr "利用できる OpenPGP の秘密鍵がありません。" -#: ../src/config.py:2396 +#: ../src/config.py:2439 msgid "OpenPGP Key Selection" msgstr "OpenPGP キーの選択" -#: ../src/config.py:2397 +#: ../src/config.py:2440 msgid "Choose your OpenPGP key" msgstr "OpenPGP の鍵を選択してください" -#: ../src/config.py:2404 +#: ../src/config.py:2447 msgid "No such account available" msgstr "そのアカウントは無効です" -#: ../src/config.py:2405 +#: ../src/config.py:2448 msgid "You must create your account before editing your personal information." msgstr "個人情報を編集するには、その前にアカウントを作成しなければなりません。" -#: ../src/config.py:2412 ../src/dialogs.py:2281 ../src/dialogs.py:2517 -#: ../src/dialogs.py:2705 ../src/disco.py:515 ../src/profile_window.py:361 +#: ../src/config.py:2455 ../src/dialogs.py:2287 ../src/dialogs.py:2525 +#: ../src/dialogs.py:2713 ../src/disco.py:515 ../src/profile_window.py:361 msgid "You are not connected to the server" msgstr "サーバに接続していません" -#: ../src/config.py:2413 +#: ../src/config.py:2456 msgid "Without a connection, you can not edit your personal information." msgstr "接続していない状態では個人情報の編集はできません。" -#: ../src/config.py:2417 +#: ../src/config.py:2460 msgid "Your server doesn't support Vcard" msgstr "このサーバーは Vcard をサポートしていません" -#: ../src/config.py:2418 +#: ../src/config.py:2461 msgid "Your server can't save your personal information." msgstr "このサーバーは個人情報を保持できません。" -#: ../src/config.py:2532 ../src/config.py:2568 +#: ../src/config.py:2575 ../src/config.py:2612 msgid "To disable the account, you must be disconnected." msgstr "アカウントを無効にするには、接続を切らなければなりません。" -#: ../src/config.py:2537 +#: ../src/config.py:2581 msgid "Account Local already exists." msgstr "アカウント Local は既に存在しています。" -#: ../src/config.py:2538 +#: ../src/config.py:2582 msgid "Please rename or remove it before enabling link-local messaging." msgstr "ローカルの伝送を有効にするには、名前の変更または削除を行ってください。" -#: ../src/config.py:2695 +#: ../src/config.py:2739 #, python-format msgid "Edit %s" msgstr "%s を編集" -#: ../src/config.py:2697 +#: ../src/config.py:2741 #, python-format msgid "Register to %s" msgstr "%s を登録" #. list at the beginning -#: ../src/config.py:2733 +#: ../src/config.py:2777 msgid "Ban List" msgstr "追放者の一覧" -#: ../src/config.py:2734 +#: ../src/config.py:2778 msgid "Member List" msgstr "メンバーの一覧" -#: ../src/config.py:2734 +#: ../src/config.py:2778 msgid "Owner List" msgstr "主宰者の一覧" -#: ../src/config.py:2735 +#: ../src/config.py:2779 msgid "Administrator List" msgstr "管理人の一覧" #. Address column #. holds JID (who said this) -#: ../src/config.py:2799 ../src/disco.py:893 ../src/history_manager.py:207 +#: ../src/config.py:2843 ../src/disco.py:893 ../src/history_manager.py:207 msgid "JID" msgstr "JID" -#: ../src/config.py:2809 +#: ../src/config.py:2853 msgid "Reason" msgstr "理由" -#: ../src/config.py:2816 +#: ../src/config.py:2860 msgid "Nick" msgstr "ニックネーム" -#: ../src/config.py:2822 +#: ../src/config.py:2866 msgid "Role" msgstr "役" -#: ../src/config.py:2849 +#: ../src/config.py:2893 msgid "Banning..." msgstr "締め出し中..." #. You can move '\n' before user@domain if that line is TOO BIG -#: ../src/config.py:2851 +#: ../src/config.py:2895 msgid "" "<b>Whom do you want to ban?</b>\n" "\n" @@ -6575,11 +6934,11 @@ msgstr "" "<b>誰を締め出したいですか ?</b>\n" "\n" -#: ../src/config.py:2853 +#: ../src/config.py:2897 msgid "Adding Member..." msgstr "メンバーを追加..." -#: ../src/config.py:2854 +#: ../src/config.py:2898 msgid "" "<b>Whom do you want to make a member?</b>\n" "\n" @@ -6587,11 +6946,11 @@ msgstr "" "<b>誰をメンバーにしたいですか ?</b>\n" "\n" -#: ../src/config.py:2856 +#: ../src/config.py:2900 msgid "Adding Owner..." msgstr "主宰者を追加..." -#: ../src/config.py:2857 +#: ../src/config.py:2901 msgid "" "<b>Whom do you want to make an owner?</b>\n" "\n" @@ -6599,11 +6958,11 @@ msgstr "" "<b>誰を主宰者にしたいですか ?</b>\n" "\n" -#: ../src/config.py:2859 +#: ../src/config.py:2903 msgid "Adding Administrator..." msgstr "管理人を追加..." -#: ../src/config.py:2860 +#: ../src/config.py:2904 msgid "" "<b>Whom do you want to make an administrator?</b>\n" "\n" @@ -6611,7 +6970,7 @@ msgstr "" "<b>誰を管理人にしたいですか ?</b>\n" "\n" -#: ../src/config.py:2861 +#: ../src/config.py:2905 msgid "" "Can be one of the following:\n" "1. user@domain/resource (only that resource matches).\n" @@ -6627,110 +6986,105 @@ msgstr "" "4. ドメイン (ドメインの合致。どんな user@domain や domain/resource や\n" "サブドメインを含んでも可)" -#: ../src/config.py:2962 +#: ../src/config.py:3006 #, python-format msgid "Removing %s account" msgstr "アカウント %s を削除します" -#: ../src/config.py:2977 +#: ../src/config.py:3021 msgid "Account is disabled" msgstr "アカウントは無効です" -#: ../src/config.py:2978 +#: ../src/config.py:3022 msgid "To unregister from a server, account must be enabled." msgstr "" "サーバーから登録を解除するには、アカウントを有効にしなければなりません。" -#: ../src/config.py:2991 ../src/gui_interface.py:278 -#: ../src/gui_interface.py:696 +#: ../src/config.py:3035 ../src/gui_interface.py:283 +#: ../src/gui_interface.py:701 msgid "Password Required" msgstr "パスワードが必要です" -#: ../src/config.py:2992 ../src/gui_interface.py:676 +#: ../src/config.py:3036 ../src/gui_interface.py:681 #, python-format msgid "Enter your password for account %s" msgstr "%s のパスワードを入力してください" -#: ../src/config.py:2993 ../src/gui_interface.py:696 +#: ../src/config.py:3037 ../src/gui_interface.py:701 msgid "Save password" msgstr "パスワードを保存する" -#: ../src/config.py:3003 +#: ../src/config.py:3047 #, python-format msgid "Account \"%s\" is connected to the server" msgstr "アカウント \"%s\" はサーバに接続しています" -#: ../src/config.py:3004 +#: ../src/config.py:3048 msgid "If you remove it, the connection will be lost." msgstr "削除すると、接続が失われます。" -#: ../src/config.py:3018 +#: ../src/config.py:3062 #, python-format msgid "Connection to server %s failed" msgstr "サーバー %s への接続に失敗しました" -#: ../src/config.py:3019 +#: ../src/config.py:3063 msgid "What would you like to do?" msgstr "何をしたいですか ?" -#: ../src/config.py:3020 +#: ../src/config.py:3064 msgid "Remove only from Gajim" msgstr "アカウントを Gajim からのみ削除" -#: ../src/config.py:3021 +#: ../src/config.py:3065 msgid "Don't remove anything. I'll try again later" msgstr "何も削除できません。あとで再び試みます" -#: ../src/config.py:3115 +#: ../src/config.py:3159 msgid "?print_status:All" msgstr "すべて" -#: ../src/config.py:3116 +#: ../src/config.py:3160 msgid "Enter and leave only" msgstr "入退室のみ" -#: ../src/config.py:3117 +#: ../src/config.py:3161 msgid "?print_status:None" msgstr "なし" -#: ../src/config.py:3189 +#: ../src/config.py:3233 msgid "New Group Chat" msgstr "新しいグループチャット" -#: ../src/config.py:3222 +#: ../src/config.py:3266 msgid "This bookmark has invalid data" msgstr "このブックマークは不正なデータを含んでいます" -#: ../src/config.py:3223 +#: ../src/config.py:3267 msgid "" "Please be sure to fill out server and room fields or remove this bookmark." msgstr "" "サーバーと談話室の欄を正しく入力するか、このブックマークを削除してください。" -#. invalid char -#: ../src/config.py:3348 ../src/dialogs.py:2070 -msgid "Invalid nickname" -msgstr "ニックネームが正しくありません" - -#: ../src/config.py:3349 ../src/config.py:3360 ../src/config.py:3369 -#: ../src/config.py:3380 ../src/config.py:3388 +#: ../src/config.py:3393 ../src/config.py:3404 ../src/config.py:3413 +#: ../src/config.py:3424 ../src/config.py:3432 msgid "Character not allowed" msgstr "使えない文字です" -#: ../src/config.py:3360 ../src/config.py:3368 ../src/config.py:3380 -#: ../src/config.py:3641 +#: ../src/config.py:3404 ../src/config.py:3412 ../src/config.py:3424 +#: ../src/config.py:3685 msgid "Invalid server" msgstr "サーバー名が正しくありません" -#: ../src/config.py:3387 +#: ../src/config.py:3431 msgid "Invalid room" msgstr "談話室名が正しくありません" -#: ../src/config.py:3557 +#: ../src/config.py:3601 msgid "Account has been added successfully" msgstr "アカウントは無事に追加されました" -#: ../src/config.py:3558 ../src/config.py:3564 +#: ../src/config.py:3602 ../src/config.py:3608 msgid "" "You can set advanced account options by pressing the Advanced button, or " "later by choosing the Accounts menu item under the Edit menu from the main " @@ -6739,32 +7093,32 @@ msgstr "" "「拡張」ボタンで、詳細なオプションの設定ができます。また後で、メインウィンド" "ウの「編集」メニューの「アカウント」を選択して設定することができます。" -#: ../src/config.py:3563 +#: ../src/config.py:3607 msgid "Your new account has been created successfully" msgstr "新しいアカウントは無事に作られました" -#: ../src/config.py:3602 +#: ../src/config.py:3646 msgid "Invalid username" msgstr "ユーザー名が正しくありません" -#: ../src/config.py:3604 +#: ../src/config.py:3648 msgid "You must provide a username to configure this account." msgstr "このアカウントを編集するには、ユーザー名を指定しなければなりません。" -#: ../src/config.py:3642 +#: ../src/config.py:3686 msgid "Please provide a server on which you want to register." msgstr "登録したいサーバーを指定してください。" -#: ../src/config.py:3698 ../src/gui_interface.py:1174 +#: ../src/config.py:3742 ../src/gui_interface.py:1203 msgid "Certificate Already in File" msgstr "証明書はファイルにあります" -#: ../src/config.py:3699 ../src/gui_interface.py:1175 +#: ../src/config.py:3743 ../src/gui_interface.py:1204 #, python-format msgid "This certificate is already in file %s, so it's not added again." msgstr "この証明書は既にファイル %s にあります。再び追加することはできません。" -#: ../src/config.py:3788 +#: ../src/config.py:3831 #, python-format msgid "" "<b>Security Warning</b>\n" @@ -6779,7 +7133,7 @@ msgstr "" "SSL エラー: %(error)s\n" "それでもこのサーバーに接続しますか ?" -#: ../src/config.py:3794 ../src/gui_interface.py:1203 +#: ../src/config.py:3837 ../src/gui_interface.py:1232 #, python-format msgid "" "Add this certificate to the list of trusted certificates.\n" @@ -6790,73 +7144,73 @@ msgstr "" "この証明書の SHA1 指紋:\n" "%s" -#: ../src/config.py:3826 ../src/config.py:3860 +#: ../src/config.py:3869 ../src/config.py:3903 msgid "An error occurred during account creation" msgstr "アカウント作成時にエラーが起きました" -#: ../src/config.py:3925 +#: ../src/config.py:3968 msgid "Account name is in use" msgstr "アカウント名は使われています" -#: ../src/config.py:3926 +#: ../src/config.py:3969 msgid "You already have an account using this name." msgstr "この名前のアカウントは既に存在しています。" -#: ../src/config.py:4056 +#: ../src/config.py:4099 msgid "PEP node was not removed" msgstr "PEP ノードは削除されませんでした" -#: ../src/config.py:4057 +#: ../src/config.py:4100 #, python-format msgid "PEP node %(node)s was not removed: %(message)s" msgstr "PEP ノード %(node)s は削除されませんでした: %(message)s" -#: ../src/config.py:4085 +#: ../src/config.py:4128 #, fuzzy, python-format msgid "Configure %s" msgstr "%s を調整" -#: ../src/config.py:4101 ../src/plugins/gui.py:73 +#: ../src/config.py:4144 ../src/plugins/gui.py:74 msgid "Active" msgstr "有効" -#: ../src/config.py:4109 +#: ../src/config.py:4152 msgid "Event" msgstr "イベント" -#: ../src/config.py:4144 +#: ../src/config.py:4187 msgid "First Message Received" msgstr "最初のメッセージを受信した" -#: ../src/config.py:4145 +#: ../src/config.py:4188 msgid "Next Message Received Focused" msgstr "開いているチャットで、その次のメッセージを受信した" -#: ../src/config.py:4147 +#: ../src/config.py:4190 msgid "Next Message Received Unfocused" msgstr "開いていないチャットで、その次のメッセージを受信した" -#: ../src/config.py:4148 +#: ../src/config.py:4191 msgid "Contact Connected" msgstr "相手先が接続した" -#: ../src/config.py:4149 +#: ../src/config.py:4192 msgid "Contact Disconnected" msgstr "相手先が切断した" -#: ../src/config.py:4150 +#: ../src/config.py:4193 msgid "Message Sent" msgstr "メッセージを送信した" -#: ../src/config.py:4151 +#: ../src/config.py:4194 msgid "Group Chat Message Highlight" msgstr "グループチャットのメッセージの強調" -#: ../src/config.py:4152 +#: ../src/config.py:4195 msgid "Group Chat Message Received" msgstr "グループチャットのメッセージを受信した" -#: ../src/config.py:4153 +#: ../src/config.py:4196 msgid "GMail Email Received" msgstr "GMail メールを受信した" @@ -6916,7 +7270,7 @@ msgid "Open as _Link" msgstr "リンクとして開く (_L)" #. %i is day in year (1-365) -#: ../src/conversation_textview.py:1310 +#: ../src/conversation_textview.py:1319 #, python-format msgid "Yesterday" msgid_plural "%(nb_days)i days ago" @@ -6924,7 +7278,7 @@ msgstr[0] "昨日" msgstr[1] "%(nb_days)i日前" #. if we have subject, show it too! -#: ../src/conversation_textview.py:1359 ../src/history_window.py:480 +#: ../src/conversation_textview.py:1368 ../src/history_window.py:481 #, python-format msgid "Subject: %s\n" msgstr "件名: %s\n" @@ -7048,7 +7402,7 @@ msgid "Please fill in the data of the contact you want to add" msgstr "追加したい相手先の情報を入力してください" #: ../src/dialogs.py:1074 ../src/dialogs.py:1080 ../src/dialogs.py:1085 -#: ../src/dialogs.py:3615 +#: ../src/dialogs.py:3628 msgid "Invalid User ID" msgstr "ユーザー ID が正しくありません" @@ -7120,244 +7474,244 @@ msgstr "" "\n" "スペル間違いの強調表示は使われません" -#: ../src/dialogs.py:1872 +#: ../src/dialogs.py:1877 msgid "_Resume" msgstr "残す (_R)" -#: ../src/dialogs.py:1880 +#: ../src/dialogs.py:1885 msgid "Re_place" msgstr "置換する (_p)" -#: ../src/dialogs.py:2071 ../src/dialogs.py:2470 +#: ../src/dialogs.py:2076 ../src/dialogs.py:2477 msgid "The nickname has not allowed characters." msgstr "ニックネームに使用できない文字が含まれています。" -#: ../src/dialogs.py:2189 +#: ../src/dialogs.py:2195 #, python-format msgid "Subscription request for account %(account)s from %(jid)s" msgstr "アカウント %(account)s に対して、%(jid)s さんからの在席通知の申し込み" -#: ../src/dialogs.py:2192 +#: ../src/dialogs.py:2198 #, python-format msgid "Subscription request from %s" msgstr "%s さんから在席通知の申し込み" -#: ../src/dialogs.py:2276 ../src/gui_interface.py:1925 +#: ../src/dialogs.py:2282 ../src/gui_interface.py:1959 #, python-format msgid "You are already in group chat %s" msgstr "既にグループチャット %s に参加しています。" -#: ../src/dialogs.py:2282 +#: ../src/dialogs.py:2288 msgid "You can not join a group chat unless you are connected." msgstr "接続しないと、グループチャットに参加できません。" -#: ../src/dialogs.py:2326 +#: ../src/dialogs.py:2332 #, python-format msgid "Join Group Chat with account %s" msgstr "アカウント %s でグループチャットに参加" -#: ../src/dialogs.py:2457 +#: ../src/dialogs.py:2463 msgid "Invalid Account" msgstr "アカウントが正しくありません" -#: ../src/dialogs.py:2458 +#: ../src/dialogs.py:2464 msgid "" "You have to choose an account from which you want to join the groupchat." msgstr "グループチャット参加に使用するアカウントを選択してください。" -#: ../src/dialogs.py:2469 +#: ../src/dialogs.py:2476 msgid "Invalid Nickname" msgstr "ニックネームが正しくありません" -#: ../src/dialogs.py:2474 ../src/dialogs.py:2480 -#: ../src/groupchat_control.py:2079 +#: ../src/dialogs.py:2481 ../src/dialogs.py:2487 +#: ../src/groupchat_control.py:2092 msgid "Invalid group chat Jabber ID" msgstr "グループチャットの JID が正しくありません" -#: ../src/dialogs.py:2475 +#: ../src/dialogs.py:2482 msgid "Please enter the group chat Jabber ID as room@server." msgstr "グループチャットの JID を、room@server のように、入力してください。" -#: ../src/dialogs.py:2481 ../src/groupchat_control.py:2080 +#: ../src/dialogs.py:2488 ../src/groupchat_control.py:2093 msgid "The group chat Jabber ID has not allowed characters." msgstr "グループチャットの JID に使えない文字が含まれています。" -#: ../src/dialogs.py:2485 ../src/gui_interface.py:1907 +#: ../src/dialogs.py:2493 ../src/gui_interface.py:1941 msgid "This is not a group chat" msgstr "グループチャットではありません" -#: ../src/dialogs.py:2486 ../src/gui_interface.py:1908 +#: ../src/dialogs.py:2494 ../src/gui_interface.py:1942 #, python-format msgid "%s is not the name of a group chat." msgstr "%s はグループチャット名ではありません。" -#: ../src/dialogs.py:2518 +#: ../src/dialogs.py:2526 msgid "Without a connection, you can not synchronise your contacts." msgstr "接続していないと、相手先を合わせることはできません。" -#: ../src/dialogs.py:2531 +#: ../src/dialogs.py:2539 msgid "Server" msgstr "サーバー" -#: ../src/dialogs.py:2567 +#: ../src/dialogs.py:2575 msgid "This account is not connected to the server" msgstr "このアカウントはサーバに接続していません" -#: ../src/dialogs.py:2568 +#: ../src/dialogs.py:2576 msgid "You cannot synchronize with an account unless it is connected." msgstr "接続していないと、相手先に合わせることはできません。" -#: ../src/dialogs.py:2593 +#: ../src/dialogs.py:2601 msgid "Synchronise" msgstr "同調" -#: ../src/dialogs.py:2654 +#: ../src/dialogs.py:2662 #, python-format msgid "Start Chat with account %s" msgstr "アカウント %s でチャットを開始する" -#: ../src/dialogs.py:2656 +#: ../src/dialogs.py:2664 msgid "Start Chat" msgstr "チャットを開始する" -#: ../src/dialogs.py:2657 +#: ../src/dialogs.py:2665 msgid "" "Fill in the nickname or the Jabber ID of the contact you would like\n" "to send a chat message to:" msgstr "チャットしたい相手先のニックネームか Jabber ID を入力してください:" #. if offline or connecting -#: ../src/dialogs.py:2684 ../src/dialogs.py:3065 ../src/dialogs.py:3295 +#: ../src/dialogs.py:2692 ../src/dialogs.py:3073 ../src/dialogs.py:3308 msgid "Connection not available" msgstr "接続していません" -#: ../src/dialogs.py:2685 ../src/dialogs.py:3066 ../src/dialogs.py:3296 +#: ../src/dialogs.py:2693 ../src/dialogs.py:3074 ../src/dialogs.py:3309 #, python-format msgid "Please make sure you are connected with \"%s\"." msgstr "\"%s\" に接続していることを確認してください。" -#: ../src/dialogs.py:2694 ../src/dialogs.py:2697 +#: ../src/dialogs.py:2702 ../src/dialogs.py:2705 msgid "Invalid JID" msgstr "JID が正しくありません" -#: ../src/dialogs.py:2697 +#: ../src/dialogs.py:2705 #, python-format msgid "Unable to parse \"%s\"." msgstr "\"%s\" を解析できません。" -#: ../src/dialogs.py:2706 +#: ../src/dialogs.py:2714 msgid "Without a connection, you can not change your password." msgstr "接続しないと、パスワードは変更できません。" -#: ../src/dialogs.py:2725 +#: ../src/dialogs.py:2733 msgid "Invalid password" msgstr "パスワードが正しくありません。" -#: ../src/dialogs.py:2725 +#: ../src/dialogs.py:2733 msgid "You must enter a password." msgstr "パスワードを入力してください。" -#: ../src/dialogs.py:2729 +#: ../src/dialogs.py:2737 msgid "Passwords do not match" msgstr "パスワードが一致しません" -#: ../src/dialogs.py:2730 +#: ../src/dialogs.py:2738 msgid "The passwords typed in both fields must be identical." msgstr "ふたつの欄のパスワードは同一でなければなりません。" -#: ../src/dialogs.py:2772 ../src/gui_interface.py:813 ../src/notify.py:270 +#: ../src/dialogs.py:2780 ../src/gui_interface.py:842 ../src/notify.py:273 msgid "New E-mail" msgstr "新着メール" -#: ../src/dialogs.py:2774 ../src/gui_interface.py:868 ../src/notify.py:263 +#: ../src/dialogs.py:2782 ../src/gui_interface.py:897 ../src/notify.py:266 msgid "File Transfer Request" msgstr "ファイル転送の要求" -#: ../src/dialogs.py:2776 ../src/gui_interface.py:775 -#: ../src/gui_interface.py:839 ../src/notify.py:265 +#: ../src/dialogs.py:2784 ../src/gui_interface.py:804 +#: ../src/gui_interface.py:868 ../src/notify.py:268 msgid "File Transfer Error" msgstr "ファイル転送のエラー" -#: ../src/dialogs.py:2778 ../src/gui_interface.py:914 -#: ../src/gui_interface.py:937 ../src/gui_interface.py:954 -#: ../src/notify.py:267 +#: ../src/dialogs.py:2786 ../src/gui_interface.py:943 +#: ../src/gui_interface.py:966 ../src/gui_interface.py:983 +#: ../src/notify.py:270 msgid "File Transfer Completed" msgstr "ファイルの転送の完了" -#: ../src/dialogs.py:2779 ../src/gui_interface.py:917 ../src/notify.py:268 +#: ../src/dialogs.py:2787 ../src/gui_interface.py:946 ../src/notify.py:271 msgid "File Transfer Stopped" msgstr "ファイルの転送の中断" -#: ../src/dialogs.py:2781 ../src/gui_interface.py:609 ../src/notify.py:272 +#: ../src/dialogs.py:2789 ../src/gui_interface.py:614 ../src/notify.py:275 msgid "Groupchat Invitation" msgstr "グループチャットへの招待" -#: ../src/dialogs.py:2984 +#: ../src/dialogs.py:2992 #, python-format msgid "Single Message using account %s" -msgstr "account %s で単発メッセージ" +msgstr "アカウント %s で単発メッセージ" -#: ../src/dialogs.py:2986 +#: ../src/dialogs.py:2994 #, python-format msgid "Single Message in account %s" msgstr "アカウント %s での単発メッセージ" -#: ../src/dialogs.py:2988 +#: ../src/dialogs.py:2996 msgid "Single Message" msgstr "単発メッセージ" #. prepare UI for Sending -#: ../src/dialogs.py:2991 +#: ../src/dialogs.py:2999 #, python-format msgid "Send %s" msgstr "%s を送信する" #. prepare UI for Receiving -#: ../src/dialogs.py:3014 +#: ../src/dialogs.py:3022 #, python-format msgid "Received %s" msgstr "%s を受信" #. prepare UI for Receiving -#: ../src/dialogs.py:3037 +#: ../src/dialogs.py:3045 #, python-format msgid "Form %s" msgstr "フォーム %s" #. we create a new blank window to send and we preset RE: and to jid -#: ../src/dialogs.py:3116 +#: ../src/dialogs.py:3129 #, python-format msgid "RE: %s" msgstr "RE: %s" -#: ../src/dialogs.py:3117 +#: ../src/dialogs.py:3130 #, python-format msgid "%s wrote:\n" msgstr "%s wrote:\n" -#: ../src/dialogs.py:3176 +#: ../src/dialogs.py:3189 #, python-format msgid "XML Console for %s" msgstr "%s の XML コンソール" -#: ../src/dialogs.py:3178 +#: ../src/dialogs.py:3191 msgid "XML Console" msgstr "XML コンソール" #. Action that can be done with an incoming list of contacts -#: ../src/dialogs.py:3325 +#: ../src/dialogs.py:3338 msgid "add" msgstr "追加" -#: ../src/dialogs.py:3325 +#: ../src/dialogs.py:3338 msgid "modify" msgstr "変更" -#: ../src/dialogs.py:3326 +#: ../src/dialogs.py:3339 msgid "remove" msgstr "削除" -#: ../src/dialogs.py:3355 +#: ../src/dialogs.py:3368 #, python-format msgid "" "<b>%(jid)s</b> would like you to <b>%(action)s</b> some contacts in your " @@ -7367,181 +7721,171 @@ msgstr "" "b> を行うよう、求めています。" #. Change label for accept_button to action name instead of 'OK'. -#: ../src/dialogs.py:3371 ../src/dialogs.py:3417 -msgid "Add" -msgstr "追加" - -#. Change label for accept_button to action name instead of 'OK'. -#: ../src/dialogs.py:3373 ../src/dialogs.py:3448 +#: ../src/dialogs.py:3386 ../src/dialogs.py:3461 msgid "Modify" msgstr "変更" -#. Change label for accept_button to action name instead of 'OK'. -#: ../src/dialogs.py:3375 ../src/dialogs.py:3472 -msgid "Delete" -msgstr "削除" - -#: ../src/dialogs.py:3379 +#: ../src/dialogs.py:3392 msgid "Jabber ID" msgstr "Jabber ID" -#: ../src/dialogs.py:3385 +#: ../src/dialogs.py:3398 msgid "Groups" msgstr "グループ" #. it is selected #. remote_jid = model[iter_][1].decode('utf-8') -#: ../src/dialogs.py:3493 +#: ../src/dialogs.py:3506 #, python-format msgid "%s suggested me to add you in my roster." msgstr "あなたを名簿に追加するよう、%s さんは私に勧めました。" -#: ../src/dialogs.py:3507 +#: ../src/dialogs.py:3520 #, python-format msgid "Added %s contacts" msgstr "%s の相手先を追加しました" -#: ../src/dialogs.py:3544 +#: ../src/dialogs.py:3557 #, python-format msgid "Removed %s contacts" msgstr "%s の相手先を削除しました" -#: ../src/dialogs.py:3584 ../src/dialogs.py:3761 +#: ../src/dialogs.py:3597 ../src/dialogs.py:3774 #, python-format msgid "Archiving Preferences for %s" msgstr "%s の書庫の設定" -#: ../src/dialogs.py:3624 +#: ../src/dialogs.py:3637 msgid "Invalid expire value" msgstr "期限の値が正しくありません" -#: ../src/dialogs.py:3625 +#: ../src/dialogs.py:3638 msgid "Expire must be a valid positive integer." msgstr "期限は正の整数でなければなりません。" -#: ../src/dialogs.py:3672 +#: ../src/dialogs.py:3685 msgid "There is an error with the form" msgstr "書式に誤りがあります" -#: ../src/dialogs.py:3892 +#: ../src/dialogs.py:3905 msgid "There is an error" msgstr "誤りがあります" -#: ../src/dialogs.py:3960 +#: ../src/dialogs.py:3973 #, python-format msgid "Privacy List <b><i>%s</i></b>" msgstr "プライバシーリスト <b><i>%s</i></b>" -#: ../src/dialogs.py:3964 +#: ../src/dialogs.py:3977 #, python-format msgid "Privacy List for %s" msgstr "%s のプライバシーリスト" -#: ../src/dialogs.py:4031 +#: ../src/dialogs.py:4044 #, python-format msgid "Order: %(order)s, action: %(action)s, type: %(type)s, value: %(value)s" msgstr "順位: %(order)s, 操作: %(action)s, 型: %(type)s, 値: %(value)s" -#: ../src/dialogs.py:4036 +#: ../src/dialogs.py:4049 #, python-format msgid "Order: %(order)s, action: %(action)s" msgstr "順位: %(order)s, 操作: %(action)s" -#: ../src/dialogs.py:4087 +#: ../src/dialogs.py:4100 msgid "<b>Edit a rule</b>" msgstr "<b>規則の編集</b>" -#: ../src/dialogs.py:4198 +#: ../src/dialogs.py:4211 msgid "<b>Add a rule</b>" msgstr "<b>規則の追加</b>" -#: ../src/dialogs.py:4297 +#: ../src/dialogs.py:4310 #, python-format msgid "Privacy Lists for %s" msgstr "%s のプライバシーリスト" -#: ../src/dialogs.py:4299 +#: ../src/dialogs.py:4312 msgid "Privacy Lists" msgstr "プライバシーリスト" -#: ../src/dialogs.py:4388 +#: ../src/dialogs.py:4401 msgid "Invalid List Name" msgstr "リスト名が正しくありません" -#: ../src/dialogs.py:4389 +#: ../src/dialogs.py:4402 msgid "You must enter a name to create a privacy list." msgstr "プライバシーリストを作成するには、名前を入力しなければなりません。" -#: ../src/dialogs.py:4421 +#: ../src/dialogs.py:4434 msgid "You are invited to a groupchat" msgstr "グループチャットへの招待を受けました" -#: ../src/dialogs.py:4424 +#: ../src/dialogs.py:4437 msgid "$Contact has invited you to join a discussion" msgstr "$Contact さんがあなたを議論に参加するよう招待しています" -#: ../src/dialogs.py:4426 +#: ../src/dialogs.py:4439 #, python-format msgid "$Contact has invited you to group chat %(room_jid)s" msgstr "$Contact さんがあなたをグループチャット %(room_jid)s へ招待しています" -#: ../src/dialogs.py:4434 +#: ../src/dialogs.py:4447 #, python-format msgid "Comment: %s" msgstr "コメント: %s" -#: ../src/dialogs.py:4436 +#: ../src/dialogs.py:4449 msgid "Do you want to accept the invitation?" msgstr "招待に応じますか ?" -#: ../src/dialogs.py:4498 +#: ../src/dialogs.py:4511 msgid "Choose Client Cert #PCKS12" msgstr "#PCKS12 形式のクライアント証明書の選択" -#: ../src/dialogs.py:4508 ../src/dialogs.py:4550 ../src/dialogs.py:4606 -#: ../src/dialogs.py:4694 +#: ../src/dialogs.py:4521 ../src/dialogs.py:4563 ../src/dialogs.py:4619 +#: ../src/dialogs.py:4707 msgid "All files" msgstr "すべてのファイル" -#: ../src/dialogs.py:4513 +#: ../src/dialogs.py:4526 msgid "PKCS12 Files" msgstr "PKCS12 形式のファイル" -#: ../src/dialogs.py:4540 +#: ../src/dialogs.py:4553 msgid "Choose Sound" msgstr "サウンドの選択" -#: ../src/dialogs.py:4555 +#: ../src/dialogs.py:4568 msgid "Wav Sounds" msgstr "WAV サウンド" -#: ../src/dialogs.py:4593 +#: ../src/dialogs.py:4606 msgid "Choose Image" msgstr "画像の選択" -#: ../src/dialogs.py:4611 +#: ../src/dialogs.py:4624 msgid "Images" msgstr "画像" -#: ../src/dialogs.py:4681 +#: ../src/dialogs.py:4694 msgid "Choose Archive" msgstr "書庫の選択" -#: ../src/dialogs.py:4699 +#: ../src/dialogs.py:4712 msgid "Zip files" msgstr "Zip ファイル" -#: ../src/dialogs.py:4725 +#: ../src/dialogs.py:4738 #, python-format msgid "When %s becomes:" msgstr "%s が次のようになったとき:" -#: ../src/dialogs.py:4727 +#: ../src/dialogs.py:4740 #, python-format msgid "Adding Special Notification for %s" msgstr "%s の特別通知の追加" -#: ../src/dialogs.py:4947 +#: ../src/dialogs.py:4960 #, python-format msgid "" "Your chat session with <b>%(jid)s</b> is encrypted.\n" @@ -7552,19 +7896,19 @@ msgstr "" "\n" "このチャットの認証文字列 (SAS)は <b>%(sas)s</b> です。" -#: ../src/dialogs.py:4950 +#: ../src/dialogs.py:4963 msgid "You have already verified this contact's identity." msgstr "相手先の同一性を既に確認しています。" -#: ../src/dialogs.py:4956 ../src/dialogs.py:5040 +#: ../src/dialogs.py:4969 ../src/dialogs.py:5053 msgid "Contact's identity verified" msgstr "相手先の同一性を確認しました" -#: ../src/dialogs.py:4962 +#: ../src/dialogs.py:4975 msgid "Verify again..." msgstr "再検証中..." -#: ../src/dialogs.py:4967 +#: ../src/dialogs.py:4980 msgid "" "To be certain that <b>only</b> the expected person can read your messages or " "send you messages, you need to verify their identity by clicking the button " @@ -7574,19 +7918,19 @@ msgstr "" "を送ることができることを確実にするため、その人が本人であることを検証する必要" "があります。次のボタンをクリックしてください。" -#: ../src/dialogs.py:4970 ../src/dialogs.py:5021 ../src/dialogs.py:5034 +#: ../src/dialogs.py:4983 ../src/dialogs.py:5034 ../src/dialogs.py:5047 msgid "Contact's identity NOT verified" msgstr "相手先の同一性を確認していません" -#: ../src/dialogs.py:4975 +#: ../src/dialogs.py:4988 msgid "Verify..." msgstr "検証中..." -#: ../src/dialogs.py:4986 +#: ../src/dialogs.py:4999 msgid "Have you verified the contact's identity?" msgstr "相手先の同一性を確認しましたか ?" -#: ../src/dialogs.py:4987 +#: ../src/dialogs.py:5000 #, python-format msgid "" "To prevent talking to an unknown person, you should speak to <b>%(jid)s</b> " @@ -7600,23 +7944,23 @@ msgstr "" "\n" "この接続の認証文字列は <b>%(sas)s</b> です。" -#: ../src/dialogs.py:4988 +#: ../src/dialogs.py:5001 msgid "Did you talk to the remote contact and verify the SAS?" msgstr "遠くの相手先と話して、認証文字列(SAS)を確認しましたか ?" -#: ../src/dialogs.py:5022 +#: ../src/dialogs.py:5035 #, python-format msgid "The contact's key (%s) <b>does not match</b> the key assigned in Gajim." msgstr "" "この相手先の鍵 (%s) は、Gajim で割り当てられた鍵と <b>一致しません</b>。" -#: ../src/dialogs.py:5028 +#: ../src/dialogs.py:5041 msgid "No GPG key is assigned to this contact. So you cannot encrypt messages." msgstr "" "この相手先に対して GPG 鍵は割り当てられていません。そのため、メッセージは暗号" "化されません。 " -#: ../src/dialogs.py:5035 +#: ../src/dialogs.py:5048 msgid "" "GPG key is assigned to this contact, but <b>you do not trust his key</b>, so " "message <b>cannot</b> be encrypted. Use your GPG client to trust this key." @@ -7625,7 +7969,7 @@ msgstr "" "いません</b>。メッセージは暗号化<b>されません</b>。鍵に信頼を与えるには GPG " "クライアントを使ってください。" -#: ../src/dialogs.py:5041 +#: ../src/dialogs.py:5054 msgid "" "GPG Key is assigned to this contact, and you trust his key, so messages will " "be encrypted." @@ -7633,19 +7977,19 @@ msgstr "" "この相手先に対して GPG 鍵が割り当てられています。その鍵を信頼して、メッセージ" "は暗号化されます。" -#: ../src/dialogs.py:5106 +#: ../src/dialogs.py:5119 msgid "an audio and video" msgstr "音声とビデオ" -#: ../src/dialogs.py:5108 +#: ../src/dialogs.py:5121 msgid "an audio" msgstr "音声" -#: ../src/dialogs.py:5110 +#: ../src/dialogs.py:5123 msgid "a video" msgstr "ビデオ" -#: ../src/dialogs.py:5114 +#: ../src/dialogs.py:5127 #, python-format msgid "" "%(contact)s wants to start %(type)s session with you. Do you want to answer " @@ -7654,12 +7998,12 @@ msgstr "" "%(contact)s さんは、%(type)s でセッションを始めようとしています。呼び出しに応" "えますか ?" -#: ../src/dialogs.py:5182 +#: ../src/dialogs.py:5195 #, python-format msgid "Certificate for account %s" msgstr "アカウント %s の証明書" -#: ../src/dialogs.py:5182 +#: ../src/dialogs.py:5195 #, python-format msgid "" "<b>Issued to:</b>\n" @@ -7698,7 +8042,7 @@ msgstr "" "<b>指紋</b>\n" "SHA1 指紋: %(sha1)s" -#: ../src/dialogs.py:5216 ../src/dialogs.py:5233 +#: ../src/dialogs.py:5229 ../src/dialogs.py:5246 msgid "View cert..." msgstr "証明書を表示..." @@ -7789,20 +8133,20 @@ msgstr "説明" msgid "Id" msgstr "Id" -#: ../src/disco.py:1835 ../src/gui_interface.py:2443 +#: ../src/disco.py:1835 ../src/gui_interface.py:2477 msgid "Bookmark already set" msgstr "既にブックマーク" -#: ../src/disco.py:1836 ../src/gui_interface.py:2444 +#: ../src/disco.py:1836 ../src/gui_interface.py:2478 #, python-format msgid "Group Chat \"%s\" is already in your bookmarks." msgstr "グループチャット \"%s\" は既にブックマークにあります。" -#: ../src/disco.py:1845 ../src/gui_interface.py:2458 +#: ../src/disco.py:1845 ../src/gui_interface.py:2492 msgid "Bookmark has been added successfully" msgstr "ブックマークが追加されました" -#: ../src/disco.py:1846 ../src/gui_interface.py:2459 +#: ../src/disco.py:1846 ../src/gui_interface.py:2493 msgid "You can manage your bookmarks via Actions menu in your roster." msgstr "ブックマークは、名簿の「アクション」メニューから管理できます。" @@ -7838,8 +8182,8 @@ msgstr "" "安全な接続を確実にするために、サーバー証明書の検証に使われるライブラリ。" #: ../src/features_window.py:52 ../src/features_window.py:53 -msgid "Requires python-pyopenssl." -msgstr "python-pyopenssl が必要です。" +msgid "Requires python-pyopenssl > 0.12 and pyasn1." +msgstr "python-pyopenssl (0.12 より上) と pyasn1 が必要です。" #: ../src/features_window.py:54 msgid "Bonjour / Zeroconf" @@ -7848,16 +8192,20 @@ msgstr "Bonjour / Zeroconf" #: ../src/features_window.py:55 msgid "Serverless chatting with autodetected clients in a local network." msgstr "" -"ローカルなネットワークで自動検出されたクライアントとサーバーなしのチャットで" -"きます。" +"ローカルなネットワークで自動検出されたクライアントとサーバーなしのチャットが" +"できます。" #: ../src/features_window.py:56 msgid "Requires python-avahi." msgstr "python-avahi が必要です。" #: ../src/features_window.py:57 -msgid "Requires pybonjour (http://o2s.csail.mit.edu/o2s-wiki/pybonjour)." -msgstr "pybonjour が必要です ( http://o2s.csail.mit.edu/o2s-wiki/pybonjour )。" +msgid "" +"Requires pybonjour and bonjour SDK running (http://developer.apple.com/" +"opensource/)." +msgstr "" +"pybonjour と実行中の bonjour SDK が必要です (http://developer.apple.com/" +"opensource/)。" #: ../src/features_window.py:58 msgid "Command line" @@ -7873,8 +8221,8 @@ msgstr "python-dbus が必要です。" #: ../src/features_window.py:61 ../src/features_window.py:69 #: ../src/features_window.py:73 ../src/features_window.py:77 -#: ../src/features_window.py:85 ../src/features_window.py:89 -#: ../src/features_window.py:109 ../src/features_window.py:113 +#: ../src/features_window.py:89 ../src/features_window.py:109 +#: ../src/features_window.py:113 ../src/features_window.py:117 msgid "Feature not available under Windows." msgstr "Windows ではこの機能は無効です。" @@ -7959,6 +8307,10 @@ msgstr "入力するメッセージのスペルチェックをします。" msgid "Requires libgtkspell." msgstr "libgtkspell が必要です。" +#: ../src/features_window.py:85 +msgid "Requires libgtkspell and libenchant." +msgstr "libgtkspell と libenchant が必要です。" + #: ../src/features_window.py:86 msgid "Notification" msgstr "通知" @@ -8057,19 +8409,30 @@ msgid "UPnP-IGD" msgstr "UPnP-IGD" #: ../src/features_window.py:111 -#, fuzzy msgid "Ability to request your router to forward port for file transfer." -msgstr "ファイル転送のフォワードポートのためのルーターの要求の可能性。" +msgstr "ファイル転送のフォワードポートのためのルーターの要求を可能にします。" #: ../src/features_window.py:112 msgid "Requires python-gupnp-igd." msgstr "python-gupnp-igd が必要です。" -#: ../src/features_window.py:120 +#: ../src/features_window.py:114 +msgid "UPower" +msgstr "UPower" + +#: ../src/features_window.py:115 +msgid "Ability to disconnect properly just before suspending the machine." +msgstr "コンピュータをサスペンドする直前に適切に切断するか。" + +#: ../src/features_window.py:116 +msgid "Requires upower and python-dbus." +msgstr "upower と python-dbus が必要です。" + +#: ../src/features_window.py:124 msgid "?features:Available" msgstr "有効" -#: ../src/features_window.py:127 +#: ../src/features_window.py:131 msgid "Feature" msgstr "機能" @@ -8085,139 +8448,124 @@ msgstr "時間" msgid "Progress" msgstr "進捗" -#: ../src/filetransfers_window.py:178 ../src/filetransfers_window.py:234 +#: ../src/filetransfers_window.py:178 ../src/filetransfers_window.py:235 #, python-format msgid "Filename: %s" msgstr "ファイル名: %s" -#: ../src/filetransfers_window.py:179 ../src/filetransfers_window.py:333 +#: ../src/filetransfers_window.py:180 ../src/filetransfers_window.py:400 #, python-format msgid "Size: %s" msgstr "サイズ: %s" #. You is a reply of who sent a file #. You is a reply of who received a file -#: ../src/filetransfers_window.py:188 ../src/filetransfers_window.py:198 +#: ../src/filetransfers_window.py:189 ../src/filetransfers_window.py:199 #: ../src/history_manager.py:541 msgid "You" msgstr "あなた" -#: ../src/filetransfers_window.py:189 +#: ../src/filetransfers_window.py:190 #, python-format msgid "Sender: %s" msgstr "送信者: %s" -#: ../src/filetransfers_window.py:190 ../src/filetransfers_window.py:627 -#: ../src/tooltips.py:742 +#: ../src/filetransfers_window.py:191 ../src/filetransfers_window.py:637 +#: ../src/tooltips.py:743 msgid "Recipient: " msgstr "受取人: " -#: ../src/filetransfers_window.py:201 +#: ../src/filetransfers_window.py:202 #, python-format msgid "Saved in: %s" msgstr "保存場所: %s" -#: ../src/filetransfers_window.py:203 -msgid "File transfer completed" -msgstr "ファイルの転送が完了しました" - -#: ../src/filetransfers_window.py:218 ../src/filetransfers_window.py:225 -msgid "File transfer cancelled" -msgstr "ファイルの転送が中止されました" - -#: ../src/filetransfers_window.py:218 ../src/filetransfers_window.py:226 -msgid "Connection with peer cannot be established." -msgstr "ピア接続は確立できませんでした。" - # (Mako) とりあえず「受取人」で -#: ../src/filetransfers_window.py:235 +#: ../src/filetransfers_window.py:237 #, python-format msgid "Recipient: %s" msgstr "受取人: %s" -#: ../src/filetransfers_window.py:237 +#: ../src/filetransfers_window.py:239 #, python-format msgid "Error message: %s" msgstr "エラーメッセージ: %s" -#: ../src/filetransfers_window.py:238 -msgid "File transfer stopped" -msgstr "ファイルの転送が中断しました" - -#: ../src/filetransfers_window.py:266 +#: ../src/filetransfers_window.py:268 msgid "Choose File to Send..." msgstr "転送するファイルを選択..." -#: ../src/filetransfers_window.py:282 ../src/tooltips.py:780 +#: ../src/filetransfers_window.py:284 ../src/tooltips.py:781 msgid "Description: " msgstr "説明: " -#: ../src/filetransfers_window.py:295 +#: ../src/filetransfers_window.py:297 msgid "Gajim cannot access this file" msgstr "このファイルにアクセスできません" -#: ../src/filetransfers_window.py:296 +#: ../src/filetransfers_window.py:298 msgid "This file is being used by another process." msgstr "このファイルは別のプログラムが使用中です。" -#: ../src/filetransfers_window.py:330 -#, python-format -msgid "File: %s" -msgstr "ファイル: %s" - -#: ../src/filetransfers_window.py:336 -#, python-format -msgid "Type: %s" -msgstr "種類: %s" - -#: ../src/filetransfers_window.py:338 -#, python-format -msgid "Description: %s" -msgstr "説明: %s" - -#: ../src/filetransfers_window.py:339 -#, python-format -msgid "%s wants to send you a file:" -msgstr "%s さんがファイルを転送したがっています:" - -#: ../src/filetransfers_window.py:352 ../src/gtkgui_helpers.py:850 +#: ../src/filetransfers_window.py:336 ../src/gtkgui_helpers.py:850 #, python-format msgid "Cannot overwrite existing file \"%s\"" msgstr "既存のファイル \"%s\" に上書きできない" -#: ../src/filetransfers_window.py:353 ../src/gtkgui_helpers.py:851 +#: ../src/filetransfers_window.py:337 ../src/gtkgui_helpers.py:851 msgid "" "A file with this name already exists and you do not have permission to " "overwrite it." msgstr "この名前のファイルは既に存在し、かつ上書きの権限がありません。" -#: ../src/filetransfers_window.py:369 ../src/gtkgui_helpers.py:855 +#: ../src/filetransfers_window.py:354 ../src/gtkgui_helpers.py:855 msgid "This file already exists" msgstr "そのファイルは既に存在しています" -#: ../src/filetransfers_window.py:369 ../src/gtkgui_helpers.py:855 +#: ../src/filetransfers_window.py:354 ../src/gtkgui_helpers.py:855 msgid "What do you want to do?" msgstr "何をしたいですか ?" -#. read-only bit is used to mark special folder under windows, -#. not to mark that a folder is read-only. See ticket #3587 -#: ../src/filetransfers_window.py:379 ../src/gtkgui_helpers.py:862 +#. read-only bit is used to mark special folder under +#. windows, not to mark that a folder is read-only. +#. See ticket #3587 +#: ../src/filetransfers_window.py:365 ../src/gtkgui_helpers.py:862 #, python-format msgid "Directory \"%s\" is not writable" msgstr "ディレクトリ \"%s\" に書き込む権限がありません" -#: ../src/filetransfers_window.py:379 ../src/gtkgui_helpers.py:863 +#: ../src/filetransfers_window.py:366 ../src/gtkgui_helpers.py:863 msgid "You do not have permission to create files in this directory." msgstr "このディレクトリにファイルを作成する権限がありません。" -#: ../src/filetransfers_window.py:389 +#: ../src/filetransfers_window.py:377 msgid "Save File as..." msgstr "ファイルの保存..." +#: ../src/filetransfers_window.py:397 +#, python-format +msgid "File: %s" +msgstr "ファイル: %s" + +#: ../src/filetransfers_window.py:403 +#, python-format +msgid "Type: %s" +msgstr "種類: %s" + +#: ../src/filetransfers_window.py:405 +#, python-format +msgid "Description: %s" +msgstr "説明: %s" + +#: ../src/filetransfers_window.py:406 +#, python-format +msgid "%s wants to send you a file:" +msgstr "%s さんがファイルを転送したがっています:" + #. Print remaining time in format 00:00:00 #. You can change the places of (hours), (minutes), (seconds) - #. they are not translatable. -#: ../src/filetransfers_window.py:459 +#: ../src/filetransfers_window.py:469 #, python-format msgid "%(hours)02.d:%(minutes)02.d:%(seconds)02.d" msgstr "%(hours)02.d:%(minutes)02.d:%(seconds)02.d" @@ -8225,35 +8573,84 @@ msgstr "%(hours)02.d:%(minutes)02.d:%(seconds)02.d" #. This should make the string Kb/s, #. where 'Kb' part is taken from %s. #. Only the 's' after / (which means second) should be translated. -#: ../src/filetransfers_window.py:552 +#: ../src/filetransfers_window.py:562 #, python-format msgid "(%(filesize_unit)s/s)" msgstr "(%(filesize_unit)s/秒)" -#: ../src/filetransfers_window.py:595 ../src/filetransfers_window.py:598 +#: ../src/filetransfers_window.py:605 ../src/filetransfers_window.py:608 msgid "Invalid File" msgstr "ファイルが正しくありません" -#: ../src/filetransfers_window.py:595 +#: ../src/filetransfers_window.py:605 msgid "File: " msgstr "ファイル: " -#: ../src/filetransfers_window.py:599 +#: ../src/filetransfers_window.py:609 msgid "It is not possible to send empty files" msgstr "空のファイルを転送することはできません" -#: ../src/filetransfers_window.py:623 ../src/tooltips.py:732 +#: ../src/filetransfers_window.py:633 ../src/tooltips.py:733 msgid "Name: " msgstr "名前: " -#: ../src/filetransfers_window.py:625 ../src/tooltips.py:736 +#: ../src/filetransfers_window.py:635 ../src/tooltips.py:737 msgid "Sender: " msgstr "送信者: " -#: ../src/filetransfers_window.py:787 +#: ../src/filetransfers_window.py:797 msgid "Pause" msgstr "一時停止" +#: ../src/gajim.py:194 +msgid "Gajim needs X server to run. Quiting..." +msgstr "Gajim には X server が必要です。終了します..." + +#: ../src/gajim.py:196 +#, python-format +msgid "importing PyGTK failed: %s" +msgstr "PyGTK のインポートに失敗しました: %s" + +#: ../src/gajim.py:237 +msgid "Gajim needs PyGTK 2.16 or above" +msgstr "Gajim には PyGTK 2.16 以上が必要です" + +#: ../src/gajim.py:238 +msgid "Gajim needs PyGTK 2.16 or above to run. Quiting..." +msgstr "Gajim には PyGTK 2.16 またはそれ以上が必要です。終了します..." + +#: ../src/gajim.py:240 +msgid "Gajim needs GTK 2.16 or above" +msgstr "Gajim には GTK 2.16 以上が必要です" + +#: ../src/gajim.py:241 +msgid "Gajim needs GTK 2.16 or above to run. Quiting..." +msgstr "Gajim には GTK 2.16 またはそれ以上が必要です。終了します..." + +#: ../src/gajim.py:250 +msgid "Gajim needs pywin32 to run" +msgstr "Gajim には pywin32 が必要です" + +#: ../src/gajim.py:251 +#, python-format +msgid "" +"Please make sure that Pywin32 is installed on your system. You can get it at " +"%s" +msgstr "" +"システムに Pywin32 がインストールされているか確認してください。%s から入手で" +"きます" + +#. set the icon to all newly opened wind +#: ../src/gajim.py:367 +msgid "Gajim is already running" +msgstr "Gajim は既に起動しています" + +#: ../src/gajim.py:368 +msgid "" +"Another instance of Gajim seems to be running\n" +"Run anyway?" +msgstr "別の Gajim が既に起動しているようですそれでも起動しますか ?" + #: ../src/gajim-remote.py:77 msgid "Shows a help on specific command" msgstr "指定のコマンドに対するヘルプを表示します" @@ -8699,55 +9096,6 @@ msgstr "uri がありません" msgid "Wrong uri" msgstr "uri が間違っています" -#: ../src/gajim.py:186 -msgid "Gajim needs X server to run. Quiting..." -msgstr "Gajim には X server が必要です。終了します..." - -#: ../src/gajim.py:188 -#, python-format -msgid "importing PyGTK failed: %s" -msgstr "PyGTK のインポートに失敗しました: %s" - -#: ../src/gajim.py:230 -msgid "Gajim needs PyGTK 2.16 or above" -msgstr "Gajim には PyGTK 2.16 以上が必要です" - -#: ../src/gajim.py:231 -msgid "Gajim needs PyGTK 2.16 or above to run. Quiting..." -msgstr "Gajim には PyGTK 2.16 またはそれ以上が必要です。終了します..." - -#: ../src/gajim.py:233 -msgid "Gajim needs GTK 2.16 or above" -msgstr "Gajim には GTK 2.16 以上が必要です" - -#: ../src/gajim.py:234 -msgid "Gajim needs GTK 2.16 or above to run. Quiting..." -msgstr "Gajim には GTK 2.16 またはそれ以上が必要です。終了します..." - -#: ../src/gajim.py:243 -msgid "Gajim needs pywin32 to run" -msgstr "Gajim には pywin32 が必要です" - -#: ../src/gajim.py:244 -#, python-format -msgid "" -"Please make sure that Pywin32 is installed on your system. You can get it at " -"%s" -msgstr "" -"システムに Pywin32 がインストールされているか確認してください。%s から入手で" -"きます" - -#. set the icon to all newly opened wind -#: ../src/gajim.py:360 -msgid "Gajim is already running" -msgstr "Gajim は既に起動しています" - -#: ../src/gajim.py:361 -msgid "" -"Another instance of Gajim seems to be running\n" -"Run anyway?" -msgstr "別の Gajim が既に起動しているようですそれでも起動しますか ?" - #: ../src/gajim_themes_window.py:59 msgid "Theme" msgstr "テーマ" @@ -8773,213 +9121,213 @@ msgstr "現在のテーマを削除することはできません" msgid "Please first choose another for your current theme." msgstr "まず、現在のテーマとして別のものを選んでください。" -#: ../src/groupchat_control.py:176 ../src/groupchat_control.py:1557 +#: ../src/groupchat_control.py:179 ../src/groupchat_control.py:1568 #, python-format msgid "%(nick)s is now known as %(new_nick)s" msgstr "%(nick)s さんは現在 %(new_nick)s さんと認識されました" -#: ../src/groupchat_control.py:230 +#: ../src/groupchat_control.py:233 msgid "Sending private message failed" msgstr "私信の送信に失敗しました" #. in second %s code replaces with nickname -#: ../src/groupchat_control.py:232 +#: ../src/groupchat_control.py:235 #, python-format msgid "You are no longer in group chat \"%(room)s\" or \"%(nick)s\" has left." msgstr "" "あなたが既にグループチャット \"%(room)s\" にいないか、あるいは \"%(nick)s\" " "さんがいません。" -#: ../src/groupchat_control.py:560 +#: ../src/groupchat_control.py:563 msgid "Insert Nickname" msgstr "ニックネームの挿入" # (Mako) 語順が問題。コロンでごまかしてみる -#: ../src/groupchat_control.py:743 +#: ../src/groupchat_control.py:746 msgid "Conversation with " msgstr "会話中: " -#: ../src/groupchat_control.py:745 +#: ../src/groupchat_control.py:748 msgid "Continued conversation" msgstr "会話中" -#: ../src/groupchat_control.py:1222 +#: ../src/groupchat_control.py:1225 #, python-format msgid "%(nick)s has set the subject to %(subject)s" msgstr "%(nick)s さんは題を %(subject)s に設定しました" #. Can be a presence (see chg_contact_status in groupchat_control.py) -#: ../src/groupchat_control.py:1240 ../src/groupchat_control.py:1499 +#: ../src/groupchat_control.py:1243 ../src/groupchat_control.py:1510 msgid "Any occupant is allowed to see your full JID" msgstr "在室者の誰もがあなたのフルJID を知ることができます" -#: ../src/groupchat_control.py:1243 +#: ../src/groupchat_control.py:1246 msgid "Room now shows unavailable member" msgstr "談話室はメンバー以外にも見えます" -#: ../src/groupchat_control.py:1245 +#: ../src/groupchat_control.py:1248 msgid "room now does not show unavailable members" msgstr "談話室はメンバー以外には見えません" -#: ../src/groupchat_control.py:1247 +#: ../src/groupchat_control.py:1250 msgid "A non-privacy-related room configuration change has occurred" msgstr "談話室の構成の変更(プライバシー関連ではない)がありました" #. Can be a presence (see chg_contact_status in groupchat_control.py) -#: ../src/groupchat_control.py:1251 +#: ../src/groupchat_control.py:1254 msgid "Room logging is now enabled" msgstr "談話室の記録を取りはじめます" -#: ../src/groupchat_control.py:1253 +#: ../src/groupchat_control.py:1256 msgid "Room logging is now disabled" msgstr "談話室の記録を止めます" -#: ../src/groupchat_control.py:1255 +#: ../src/groupchat_control.py:1258 msgid "Room is now non-anonymous" msgstr "談話室は非匿名です" -#: ../src/groupchat_control.py:1258 +#: ../src/groupchat_control.py:1261 msgid "Room is now semi-anonymous" msgstr "談話室は半匿名です" -#: ../src/groupchat_control.py:1261 +#: ../src/groupchat_control.py:1264 msgid "Room is now fully-anonymous" msgstr "談話室は完全匿名です" #. Can be a message (see handle_event_gc_config_change in #. gajim.py) -#: ../src/groupchat_control.py:1504 +#: ../src/groupchat_control.py:1515 msgid "Room logging is enabled" msgstr "談話室の会話は記録されています" -#: ../src/groupchat_control.py:1506 +#: ../src/groupchat_control.py:1517 msgid "A new room has been created" msgstr "新しい談話室が作成されました" -#: ../src/groupchat_control.py:1509 +#: ../src/groupchat_control.py:1520 msgid "The server has assigned or modified your roomnick" msgstr "サーバーはあなたの談話室ニックネームを割り当て(または変更し)ました" #. do not print 'kicked by None' -#: ../src/groupchat_control.py:1515 +#: ../src/groupchat_control.py:1526 #, python-format msgid "%(nick)s has been kicked: %(reason)s" msgstr "%(nick)s は蹴り出されました: %(reason)s" -#: ../src/groupchat_control.py:1518 +#: ../src/groupchat_control.py:1529 #, python-format msgid "%(nick)s has been kicked by %(who)s: %(reason)s" msgstr "%(nick)s は %(who)s によって蹴り出されました: %(reason)s" #. do not print 'banned by None' -#: ../src/groupchat_control.py:1527 +#: ../src/groupchat_control.py:1538 #, python-format msgid "%(nick)s has been banned: %(reason)s" msgstr "%(nick)s は締め出されました: %(reason)s" -#: ../src/groupchat_control.py:1530 +#: ../src/groupchat_control.py:1541 #, python-format msgid "%(nick)s has been banned by %(who)s: %(reason)s" msgstr "%(nick)s は %(who)s: によって締め出されました: %(reason)s" -#: ../src/groupchat_control.py:1541 ../src/groupchat_control.py:1645 +#: ../src/groupchat_control.py:1552 ../src/groupchat_control.py:1656 #, python-format msgid "You are now known as %s" msgstr "あなたは %s と認識されました" -#: ../src/groupchat_control.py:1599 ../src/groupchat_control.py:1604 -#: ../src/groupchat_control.py:1610 +#: ../src/groupchat_control.py:1610 ../src/groupchat_control.py:1615 +#: ../src/groupchat_control.py:1621 #, python-format msgid "%(nick)s has been removed from the room (%(reason)s)" msgstr "%(nick)s は退出しました (%(reason)s)" -#: ../src/groupchat_control.py:1601 +#: ../src/groupchat_control.py:1612 msgid "affiliation changed" msgstr "分掌を変更しました" -#: ../src/groupchat_control.py:1606 +#: ../src/groupchat_control.py:1617 msgid "room configuration changed to members-only" msgstr "談話室はメンバー制に変更されました" -#: ../src/groupchat_control.py:1612 +#: ../src/groupchat_control.py:1623 msgid "system shutdown" msgstr "システムのシャットダウン" -#: ../src/groupchat_control.py:1695 +#: ../src/groupchat_control.py:1706 #, python-format msgid "** Affiliation of %(nick)s has been set to %(affiliation)s by %(actor)s" msgstr "" "** %(actor)s さんによって、%(nick)s さんの分掌は %(affiliation)s に設定されま" "した" -#: ../src/groupchat_control.py:1699 +#: ../src/groupchat_control.py:1710 #, python-format msgid "** Affiliation of %(nick)s has been set to %(affiliation)s" msgstr "** %(nick)s さんの分掌は %(affiliation)s に設定されました" # (Mako)ここでの role は「役」 -#: ../src/groupchat_control.py:1714 +#: ../src/groupchat_control.py:1725 #, python-format msgid "** Role of %(nick)s has been set to %(role)s by %(actor)s" msgstr "" "** %(actor)s さんによって、%(nick)s さんの役は %(role)s に設定されました" -#: ../src/groupchat_control.py:1718 +#: ../src/groupchat_control.py:1729 #, python-format msgid "** Role of %(nick)s has been set to %(role)s" msgstr "** %(nick)s さんの役は %(role)s に設定されました" -#: ../src/groupchat_control.py:1748 +#: ../src/groupchat_control.py:1759 #, python-format msgid "%s has left" msgstr "%s さんが退出しました" -#: ../src/groupchat_control.py:1753 +#: ../src/groupchat_control.py:1764 #, python-format msgid "%s has joined the group chat" msgstr "%s さんが参加しました" -#: ../src/groupchat_control.py:2006 +#: ../src/groupchat_control.py:2019 #, python-format msgid "Are you sure you want to leave group chat \"%s\"?" msgstr "本当にグループチャット \"%s\" から退出してもいいですか ?" -#: ../src/groupchat_control.py:2008 +#: ../src/groupchat_control.py:2021 msgid "" "If you close this window, you will be disconnected from this group chat." msgstr "このウィンドウを閉じると、このグループチャットから切断されます。" -#: ../src/groupchat_control.py:2012 ../src/gui_interface.py:668 -#: ../src/gui_interface.py:1277 ../src/gui_interface.py:1317 -#: ../src/gui_interface.py:1358 ../src/message_window.py:224 -#: ../src/roster_window.py:2942 ../src/roster_window.py:3617 -#: ../src/roster_window.py:4386 +#: ../src/groupchat_control.py:2025 ../src/gui_interface.py:673 +#: ../src/gui_interface.py:1311 ../src/gui_interface.py:1351 +#: ../src/gui_interface.py:1392 ../src/message_window.py:224 +#: ../src/roster_window.py:2989 ../src/roster_window.py:3667 +#: ../src/roster_window.py:4473 msgid "_Do not ask me again" msgstr "次回から質問しない (_D)" -#: ../src/groupchat_control.py:2046 +#: ../src/groupchat_control.py:2059 msgid "Changing Subject" msgstr "題の変更" -#: ../src/groupchat_control.py:2047 +#: ../src/groupchat_control.py:2060 msgid "Please specify the new subject:" msgstr "新しい題を入力してください:" -#: ../src/groupchat_control.py:2054 +#: ../src/groupchat_control.py:2067 msgid "Changing Nickname" msgstr "ニックネームの変更" -#: ../src/groupchat_control.py:2055 +#: ../src/groupchat_control.py:2068 msgid "Please specify the new nickname you want to use:" msgstr "使いたい新しいニックネームを入力してください:" #. Ask for a reason -#: ../src/groupchat_control.py:2086 +#: ../src/groupchat_control.py:2099 #, python-format msgid "Destroying %s" msgstr "%s の閉鎖" -#: ../src/groupchat_control.py:2087 +#: ../src/groupchat_control.py:2100 msgid "" "You are going to definitively destroy this room.\n" "You may specify a reason below:" @@ -8987,22 +9335,22 @@ msgstr "" "この談話室を閉鎖しようとしています。\n" "下に理由を入力できます:" -#: ../src/groupchat_control.py:2089 +#: ../src/groupchat_control.py:2102 msgid "You may also enter an alternate venue:" msgstr "また、代替の談話室を入力することもできます:" #. ask for reason -#: ../src/groupchat_control.py:2284 +#: ../src/groupchat_control.py:2297 #, python-format msgid "Kicking %s" msgstr "%s を蹴り出し" -#: ../src/groupchat_control.py:2285 ../src/groupchat_control.py:2617 +#: ../src/groupchat_control.py:2298 ../src/groupchat_control.py:2630 msgid "You may specify a reason below:" msgstr "下に理由を書くことができます:" #. ask for reason -#: ../src/groupchat_control.py:2616 +#: ../src/groupchat_control.py:2629 #, python-format msgid "Banning %s" msgstr "%s を締め出し" @@ -9076,14 +9424,14 @@ msgstr "画像の保存..." #. we are banned #. group chat does not exist -#: ../src/gui_interface.py:126 ../src/gui_interface.py:290 -#: ../src/gui_interface.py:299 ../src/gui_interface.py:305 -#: ../src/gui_interface.py:308 ../src/gui_interface.py:311 -#: ../src/gui_interface.py:316 +#: ../src/gui_interface.py:131 ../src/gui_interface.py:295 +#: ../src/gui_interface.py:304 ../src/gui_interface.py:310 +#: ../src/gui_interface.py:313 ../src/gui_interface.py:316 +#: ../src/gui_interface.py:321 msgid "Unable to join group chat" msgstr "グループに参加できません" -#: ../src/gui_interface.py:127 +#: ../src/gui_interface.py:132 #, python-format msgid "" "Your desired nickname in group chat %s is in use or registered by another " @@ -9094,86 +9442,86 @@ msgstr "" "す。\n" "別のニックネームを下に入力してください:" -#: ../src/gui_interface.py:130 +#: ../src/gui_interface.py:135 msgid "Always use this nickname when there is a conflict" msgstr "衝突が生じたときはいつもこのニックネームを使う" -#: ../src/gui_interface.py:147 +#: ../src/gui_interface.py:152 msgid "Do you accept this request?" msgstr "この申し込みを承認しますか ?" -#: ../src/gui_interface.py:149 +#: ../src/gui_interface.py:154 #, python-format msgid "Do you accept this request on account %s?" msgstr "アカウント %s への申し込みを承認しますか ?" -#: ../src/gui_interface.py:152 +#: ../src/gui_interface.py:157 #, python-format msgid "HTTP (%(method)s) Authorization for %(url)s (id: %(id)s)" msgstr "%(url)s に対する HTTP (%(method)s) の承認 (id: %(id)s)" -#: ../src/gui_interface.py:195 ../src/notify.py:276 +#: ../src/gui_interface.py:200 ../src/notify.py:279 msgid "Connection Failed" msgstr "接続に失敗しました" -#: ../src/gui_interface.py:279 +#: ../src/gui_interface.py:284 #, python-format msgid "A Password is required to join the room %s. Please type it." msgstr "談話室 %s に参加するにはパスワードが必要です。入力してください。" -#: ../src/gui_interface.py:291 +#: ../src/gui_interface.py:296 #, python-format msgid "Maximum number of users for <b>%s</b> has been reached" msgstr "<b>%s</b> の人数の上限に達しています" -#: ../src/gui_interface.py:300 +#: ../src/gui_interface.py:305 #, python-format msgid "You are banned from group chat <b>%s</b>." msgstr "グループチャット <b>%s</b> から締め出されています。" -#: ../src/gui_interface.py:306 +#: ../src/gui_interface.py:311 #, python-format msgid "Group chat <b>%s</b> does not exist." msgstr "グループチャット <b>%s</b> は存在しません。" -#: ../src/gui_interface.py:309 +#: ../src/gui_interface.py:314 msgid "Group chat creation is restricted." msgstr "グループチャットの作成は制限されています。" -#: ../src/gui_interface.py:312 +#: ../src/gui_interface.py:317 #, python-format msgid "Your registered nickname must be used in group chat <b>%s</b>." msgstr "登録したニックネームは、グループチャット <b>%s</b> で使われます。" -#: ../src/gui_interface.py:317 +#: ../src/gui_interface.py:322 #, python-format msgid "You are not in the members list in groupchat %s." msgstr "あなたはグループチャット %s のメンバー一覧にありません。" -#: ../src/gui_interface.py:400 ../src/gui_interface.py:404 +#: ../src/gui_interface.py:405 ../src/gui_interface.py:409 #, python-format msgid "Error %(code)s: %(msg)s" msgstr "エラー %(code)s: %(msg)s" -#: ../src/gui_interface.py:456 ../src/notify.py:278 +#: ../src/gui_interface.py:461 ../src/notify.py:281 msgid "Subscription request" msgstr "在席通知申込" -#: ../src/gui_interface.py:481 +#: ../src/gui_interface.py:486 msgid "Authorization accepted" msgstr "承認が得られました" -#: ../src/gui_interface.py:482 +#: ../src/gui_interface.py:487 #, python-format msgid "The contact \"%s\" has authorized you to see his or her status." msgstr "相手先 %s さんは、あなたが在席状況を見ることを承認しました。" -#: ../src/gui_interface.py:490 +#: ../src/gui_interface.py:495 #, python-format msgid "Contact \"%s\" removed subscription from you" msgstr "相手先 \"%s\" さんは、あなたからの申し込みを却下しました。" -#: ../src/gui_interface.py:491 +#: ../src/gui_interface.py:496 msgid "" "You will always see him or her as offline.\n" "Do you want to remove him or her from your contact list?" @@ -9181,16 +9529,16 @@ msgstr "" "この相手先を常にオフラインとして見ることになります。\n" "相手先一覧から削除しますか ?" -#: ../src/gui_interface.py:512 ../src/notify.py:280 +#: ../src/gui_interface.py:517 ../src/notify.py:283 msgid "Unsubscribed" msgstr "在席通知の取り消し" -#: ../src/gui_interface.py:523 +#: ../src/gui_interface.py:528 #, python-format msgid "Contact with \"%s\" cannot be established" msgstr "\"%s\" との接続は確立できませんでした" -#: ../src/gui_interface.py:621 +#: ../src/gui_interface.py:626 msgid "" "You configured Gajim to use GPG agent, but there is no GPG agent running or " "it returned a wrong passphrase.\n" @@ -9198,32 +9546,32 @@ msgstr "" "Gajim は GPG エージェントを使用するよう設定されました。しかし、GPG エージェン" "トが起動していないか、あるいはパスフレーズが間違っています。\n" -#: ../src/gui_interface.py:623 ../src/gui_interface.py:631 +#: ../src/gui_interface.py:628 ../src/gui_interface.py:636 msgid "You are currently connected without your OpenPGP key." msgstr "現在、OpenPGP 鍵を使わずに接続しています。" -#: ../src/gui_interface.py:625 +#: ../src/gui_interface.py:630 msgid "Your passphrase is incorrect" msgstr "パスフレーズが違います" -#: ../src/gui_interface.py:630 +#: ../src/gui_interface.py:635 msgid "OpenGPG Passphrase Incorrect" msgstr "OpenGPG のパスフレーズが違います" -#: ../src/gui_interface.py:643 +#: ../src/gui_interface.py:648 msgid "Certificate Passphrase Required" msgstr "証明書のパスフレーズが必要です" -#: ../src/gui_interface.py:644 +#: ../src/gui_interface.py:649 #, python-format msgid "Enter the passphrase for the certificate for account %s" msgstr "アカウント %s の証明書のパスフレーズを入力してください。" -#: ../src/gui_interface.py:666 +#: ../src/gui_interface.py:671 msgid "GPG key not trusted" msgstr "GPG 鍵に信用がありません" -#: ../src/gui_interface.py:666 +#: ../src/gui_interface.py:671 msgid "" "The GPG key used to encrypt this chat is not trusted. Do you really want to " "encrypt this message?" @@ -9231,7 +9579,7 @@ msgstr "" "このチャットの暗号化に使った GPG 鍵には信用がありません。ほんとうにこのメッ" "セージを暗号化したいですか ?" -#: ../src/gui_interface.py:679 +#: ../src/gui_interface.py:684 msgid "" "Gnome Keyring is installed but not correctly started (environment variable " "probably not correctly set)" @@ -9239,19 +9587,29 @@ msgstr "" "Gnome Keyring はインストールされています。しかし、正しく起動できません(環境変" "数が正しく設定されていないようです)。" -#: ../src/gui_interface.py:786 +#: ../src/gui_interface.py:722 +msgid "" +"Please copy / paste the refresh token from the website that has just been " +"opened." +msgstr "表示された web サイトから新しいトークンをコピー/ペーストしてください。" + +#: ../src/gui_interface.py:725 +msgid "Oauth2 Credentials" +msgstr "Oauth2 信任状" + +#: ../src/gui_interface.py:815 #, python-format msgid "New mail on %(gmail_mail_address)s" msgstr "%(gmail_mail_address)s に新着メール" -#: ../src/gui_interface.py:788 +#: ../src/gui_interface.py:817 #, python-format msgid "You have %d new mail conversation" msgid_plural "You have %d new mail conversations" msgstr[0] "新着メールが %d 件あります" msgstr[1] "新着メールが %d 件あります" -#: ../src/gui_interface.py:801 +#: ../src/gui_interface.py:830 #, python-format msgid "" "\n" @@ -9266,58 +9624,50 @@ msgstr "" "件名: %(subject)s\n" "%(snippet)s" -#: ../src/gui_interface.py:866 +#: ../src/gui_interface.py:895 #, python-format msgid "%s wants to send you a file." msgstr "%s さんがファイルを転送したがっています。" -#: ../src/gui_interface.py:903 ../src/roster_window.py:1891 -msgid "Remote contact stopped transfer" -msgstr "遠くの相手先が転送を中止しました" - -#: ../src/gui_interface.py:906 ../src/roster_window.py:1893 -msgid "Error opening file" -msgstr "ファイルを開く際のエラー" - -#: ../src/gui_interface.py:938 +#: ../src/gui_interface.py:967 #, python-format msgid "You successfully received %(filename)s from %(name)s." msgstr "%(name)s さんからファイル %(filename)s を受け取りました。" #. ft stopped -#: ../src/gui_interface.py:942 +#: ../src/gui_interface.py:971 #, python-format msgid "File transfer of %(filename)s from %(name)s stopped." msgstr "%(name)s さんからのファイル %(filename)s の転送を中断しました。" -#: ../src/gui_interface.py:955 +#: ../src/gui_interface.py:984 #, python-format msgid "You successfully sent %(filename)s to %(name)s." msgstr "%(name)s さんへファイル %(filename)s を送りました。" #. ft stopped -#: ../src/gui_interface.py:959 +#: ../src/gui_interface.py:988 #, python-format msgid "File transfer of %(filename)s to %(name)s stopped." msgstr "%(name)s さんへのファイル %(filename)s の転送を中断しました。" -#: ../src/gui_interface.py:1034 +#: ../src/gui_interface.py:1063 msgid "Unable to decrypt message" msgstr "メッセージを復号できません" -#: ../src/gui_interface.py:1046 +#: ../src/gui_interface.py:1075 msgid "Username Conflict" msgstr "ユーザー名の重複" -#: ../src/gui_interface.py:1047 +#: ../src/gui_interface.py:1076 msgid "Please type a new username for your local account" msgstr "ローカルのアカウントの新しいユーザー名を入力してください" -#: ../src/gui_interface.py:1062 +#: ../src/gui_interface.py:1091 msgid "Resource Conflict" msgstr "リソースの衝突" -#: ../src/gui_interface.py:1063 +#: ../src/gui_interface.py:1092 msgid "" "You are already connected to this account with the same resource. Please " "type a new one" @@ -9326,20 +9676,20 @@ msgstr "" "てください" #. TODO: we should use another pixmap ;-) -#: ../src/gui_interface.py:1108 +#: ../src/gui_interface.py:1137 #, python-format msgid "%s wants to start a voice chat." msgstr "%s さんがファイルを音声チャットを始めたがっています。" -#: ../src/gui_interface.py:1111 +#: ../src/gui_interface.py:1140 msgid "Voice Chat Request" msgstr "音声チャットの要求" -#: ../src/gui_interface.py:1198 +#: ../src/gui_interface.py:1227 msgid "Error verifying SSL certificate" msgstr "SSL 証明書の検証エラー" -#: ../src/gui_interface.py:1199 +#: ../src/gui_interface.py:1228 #, python-format msgid "" "There was an error verifying the SSL certificate of your jabber server: " @@ -9349,15 +9699,15 @@ msgstr "" "jabber サーバーの SSL 証明書の検証にエラーがあります: %(error)s\n" "それでもこのサーバーに接続しますか ?" -#: ../src/gui_interface.py:1208 +#: ../src/gui_interface.py:1237 msgid "Ignore this error for this certificate." msgstr "この証明書のこのエラーを無視します。" -#: ../src/gui_interface.py:1233 +#: ../src/gui_interface.py:1262 msgid "SSL certificate error" msgstr "SSL 証明書エラー" -#: ../src/gui_interface.py:1234 +#: ../src/gui_interface.py:1263 #, python-format msgid "" "It seems the SSL certificate of account %(account)s has changed or your " @@ -9374,28 +9724,34 @@ msgstr "" "\n" "それでも接続して、証明書の指紋を更新しますか ?" -#: ../src/gui_interface.py:1270 ../src/gui_interface.py:1312 -#: ../src/gui_interface.py:1354 +#: ../src/gui_interface.py:1302 ../src/gui_interface.py:1346 +#: ../src/gui_interface.py:1388 msgid "Insecure connection" msgstr "安全でない接続" -#: ../src/gui_interface.py:1271 +#: ../src/gui_interface.py:1303 #, python-format msgid "" "You are about to connect to the account %(account)s (%(server)s) with an " "insecure connection. This means all your conversations will be exchanged " -"unencrypted. Are you sure you want to do that?" +"unencrypted. This type of connection is really discouraged.\n" +"Are you sure you want to do that?" msgstr "" "安全でない接続でアカウント %(account)s (サーバー %(server)s) に接続しようとし" -"ています。これは、すべての会話が暗号化されずに交わされること意味します。あな" -"たがやりたいことですか ?" +"ています。これは、すべての会話が暗号化されずに交わされること意味します。この" +"タイプの接続はまったくおすすめしません。\n" +"あなたがやりたいことですか ?" -#: ../src/gui_interface.py:1276 ../src/gui_interface.py:1316 -#: ../src/gui_interface.py:1357 +#: ../src/gui_interface.py:1309 ../src/gui_interface.py:1350 +#: ../src/gui_interface.py:1391 msgid "Yes, I really want to connect insecurely" msgstr "はい。安全でないまま接続したいです" -#: ../src/gui_interface.py:1313 +#: ../src/gui_interface.py:1310 +msgid "Gajim will NOT connect unless you check this box" +msgstr "このボックスにチェックしなければ、Gajim は接続しません" + +#: ../src/gui_interface.py:1347 msgid "" "You are about to send your password on an insecure connection. You should " "install PyOpenSSL to prevent that. Are you sure you want to do that?" @@ -9403,7 +9759,7 @@ msgstr "" "安全でない接続でパスワードを送ろうとしています。それを避けるには PyOpenSSL を" "インストールすべきです。あなたがやりたいことですか ?" -#: ../src/gui_interface.py:1355 +#: ../src/gui_interface.py:1389 msgid "" "You are about to send your password unencrypted on an insecure connection. " "Are you sure you want to do that?" @@ -9412,11 +9768,11 @@ msgstr "" "りたいことですか ?" #. theme doesn't exist, disable emoticons -#: ../src/gui_interface.py:1864 ../src/gui_interface.py:1887 +#: ../src/gui_interface.py:1898 ../src/gui_interface.py:1921 msgid "Emoticons disabled" msgstr "感情アイコンは無効" -#: ../src/gui_interface.py:1865 +#: ../src/gui_interface.py:1899 msgid "" "Your configured emoticons theme has not been found, so emoticons have been " "disabled." @@ -9424,7 +9780,7 @@ msgstr "" "指定された感情アイコンのテーマは見つかりません。そのため、感情アイコンは無効" "です。" -#: ../src/gui_interface.py:1888 +#: ../src/gui_interface.py:1922 msgid "" "Your configured emoticons theme cannot been loaded. You maybe need to update " "the format of emoticons.py file. See http://trac.gajim.org/wiki/Emoticons " @@ -9434,42 +9790,42 @@ msgstr "" "ルの書式を更新する必要があるかも知れません。詳しくは http://trac.gajim.org/" "wiki/Emoticons をご覧ください。" -#: ../src/gui_interface.py:1932 ../src/roster_window.py:3784 +#: ../src/gui_interface.py:1966 ../src/roster_window.py:3834 msgid "You cannot join a group chat while you are invisible" msgstr "隠れているあいだはグループチャットに参加できません" #. it is good to notify the user #. in case he or she cannot see the output of the console -#: ../src/gui_interface.py:2319 +#: ../src/gui_interface.py:2353 msgid "Could not save your settings and preferences" msgstr "設定を保存できませんでした" -#: ../src/gui_interface.py:2866 +#: ../src/gui_interface.py:2915 msgid "Passphrase Required" msgstr "パスフレーズが必要です" -#: ../src/gui_interface.py:2867 +#: ../src/gui_interface.py:2916 #, python-format msgid "Enter GPG key passphrase for key %(keyid)s (account %(account)s)." msgstr "" "鍵ID %(keyid)s (アカウント %(account)s) の GPG 鍵のパスフレーズを入力してくだ" "さい。" -#: ../src/gui_interface.py:2881 +#: ../src/gui_interface.py:2930 msgid "GPG key expired" msgstr "GPG 鍵は期限切れです" -#: ../src/gui_interface.py:2882 +#: ../src/gui_interface.py:2931 #, python-format msgid "Your GPG key has expired, you will be connected to %s without OpenPGP." msgstr "GPG 鍵は有効期限が切れています。OpenPGP なしに %s に接続します。" #. ask again -#: ../src/gui_interface.py:2891 +#: ../src/gui_interface.py:2940 msgid "Wrong Passphrase" msgstr "パスフレーズが間違っています" -#: ../src/gui_interface.py:2892 +#: ../src/gui_interface.py:2941 msgid "Please retype your GPG passphrase or press Cancel." msgstr "" "GPG のパスフレーズをもういちど入力するか、または「中止」を押してください。" @@ -9478,7 +9834,7 @@ msgstr "" msgid "_New Group Chat" msgstr "新しいグループチャット (_N)" -#: ../src/gui_menu_builder.py:419 +#: ../src/gui_menu_builder.py:420 msgid "I would like to add you to my roster" msgstr "私はあなたを名簿に追加したいと思っています" @@ -9493,7 +9849,7 @@ msgstr "相手先" #. holds time #: ../src/history_manager.py:169 ../src/history_manager.py:213 -#: ../src/history_window.py:98 +#: ../src/history_window.py:99 msgid "Date" msgstr "日付" @@ -9504,7 +9860,7 @@ msgstr "ニックネーム" #. holds message #: ../src/history_manager.py:185 ../src/history_manager.py:220 -#: ../src/history_window.py:106 +#: ../src/history_window.py:107 msgid "Message" msgstr "メッセージ" @@ -9562,9 +9918,8 @@ msgid "This is an irreversible operation." msgstr "これは不可逆的な操作です。" #: ../src/history_manager.py:600 ../src/history_manager.py:639 -#, fuzzy msgid "Deletion Confirmation" -msgstr "中止の確認" +msgstr "削除の確認" #: ../src/history_manager.py:634 msgid "Do you really want to delete the selected message?" @@ -9572,48 +9927,40 @@ msgid_plural "Do you really want to delete the selected messages?" msgstr[0] "本当に、選択したメッセージを削除してもいいですか ?" msgstr[1] "本当に、選択したメッセージを削除してもいいですか ?" -#: ../src/history_window.py:305 +#: ../src/history_window.py:306 #, python-format msgid "Conversation History with %s" msgstr "%s さんとの会話の履歴" -#: ../src/history_window.py:355 +#: ../src/history_window.py:356 msgid "Disk Error" msgstr "ディスクのエラー" -#: ../src/history_window.py:443 +#: ../src/history_window.py:444 #, python-format msgid "%(nick)s is now %(status)s: %(status_msg)s" msgstr "%(nick)s さんは現在、%(status)s: %(status_msg)s" -#: ../src/history_window.py:454 +#: ../src/history_window.py:455 #, python-format msgid "Error: %s" msgstr "エラー: %s" -#: ../src/history_window.py:456 +#: ../src/history_window.py:457 msgid "Error" msgstr "エラー" -#: ../src/history_window.py:458 +#: ../src/history_window.py:459 #, python-format msgid "Status is now: %(status)s: %(status_msg)s" msgstr "現在の状況: %(status)s: %(status_msg)s" -#: ../src/history_window.py:461 +#: ../src/history_window.py:462 #, python-format msgid "Status is now: %(status)s" msgstr "現在の状況: %(status)s" -#: ../src/htmltextview.py:523 ../src/htmltextview.py:533 -msgid "Timeout loading image" -msgstr "画像の読み込みに失敗しました" - -#: ../src/htmltextview.py:543 -msgid "Image is too big" -msgstr "画像が大きすぎます" - -#: ../src/htmltextview.py:576 +#: ../src/htmltextview.py:522 #, fuzzy msgid "Loading" msgstr "読み込み中" @@ -9650,48 +9997,48 @@ msgstr "- メッセージは記録されます" msgid "- messages will not be logged" msgstr "- メッセージは記録されません" -#: ../src/notify.py:319 +#: ../src/notify.py:322 msgid "Ignore" msgstr "無視する" -#: ../src/plugins/gui.py:67 +#: ../src/plugins/gui.py:68 msgid "Plugin" msgstr "プラグイン" -#: ../src/plugins/gui.py:161 +#: ../src/plugins/gui.py:162 msgid "Plugin failed" msgstr "プラグインに失敗しました" -#: ../src/plugins/gui.py:205 +#: ../src/plugins/gui.py:206 msgid "Unable to properly remove the plugin" msgstr "プラグインを正しく削除することができません" #. members not safe -#: ../src/plugins/gui.py:213 ../src/plugins/pluginmanager.py:499 -#: ../src/plugins/pluginmanager.py:507 +#: ../src/plugins/gui.py:214 ../src/plugins/pluginmanager.py:519 +#: ../src/plugins/pluginmanager.py:527 msgid "Archive is malformed" -msgstr "" +msgstr "書庫の形式が正しくありません" -#: ../src/plugins/gui.py:236 ../src/plugins/gui.py:244 -#: ../src/plugins/pluginmanager.py:515 +#: ../src/plugins/gui.py:237 ../src/plugins/gui.py:245 +#: ../src/plugins/pluginmanager.py:535 msgid "Plugin already exists" msgstr "プラグインは既に存在しています" -#: ../src/plugins/gui.py:236 +#: ../src/plugins/gui.py:237 msgid "Overwrite?" msgstr "上書きしますか ?" -#: ../src/plugins/gui.py:265 +#: ../src/plugins/gui.py:266 msgid "Configuration" msgstr "調整" #. it is not zip file #. CRC error -#: ../src/plugins/pluginmanager.py:485 ../src/plugins/pluginmanager.py:491 +#: ../src/plugins/pluginmanager.py:505 ../src/plugins/pluginmanager.py:511 msgid "Archive corrupted" msgstr "書庫が壊れています" -#: ../src/plugins/pluginmanager.py:487 +#: ../src/plugins/pluginmanager.py:507 msgid "Archive empty" msgstr "書庫が空です" @@ -9699,18 +10046,18 @@ msgstr "書庫が空です" msgid "Retrieving profile..." msgstr "プロフィールを取得中..." -#: ../src/profile_window.py:125 ../src/roster_window.py:3137 +#: ../src/profile_window.py:125 ../src/roster_window.py:3184 msgid "File is empty" msgstr "ファイルが空です" -#: ../src/profile_window.py:128 ../src/roster_window.py:3140 +#: ../src/profile_window.py:128 ../src/roster_window.py:3187 msgid "File does not exist" msgstr "ファイルがありません" #. keep identation #. unknown format #: ../src/profile_window.py:142 ../src/profile_window.py:158 -#: ../src/roster_window.py:3142 ../src/roster_window.py:3153 +#: ../src/roster_window.py:3189 ../src/roster_window.py:3200 msgid "Could not load image" msgstr "画像を読み込めませんでした" @@ -9749,52 +10096,52 @@ msgid "" msgstr "" "個人情報の公開する際にエラーが発生しました。時間をおいて再度試みてください。" -#: ../src/roster_window.py:240 ../src/roster_window.py:1028 +#: ../src/roster_window.py:240 ../src/roster_window.py:1031 msgid "Merged accounts" msgstr "統合アカウント" -#: ../src/roster_window.py:1956 +#: ../src/roster_window.py:1999 msgid "Authorization has been sent" msgstr "承認が送信されました" -#: ../src/roster_window.py:1957 +#: ../src/roster_window.py:2000 #, python-format msgid "Now \"%s\" will know your status." msgstr "現在 \"%s\" さんはあなたの在席状況を知ることができます。" -#: ../src/roster_window.py:1980 +#: ../src/roster_window.py:2023 msgid "Subscription request has been sent" msgstr "在席通知の申し込みを送信しました" -#: ../src/roster_window.py:1981 +#: ../src/roster_window.py:2024 #, python-format msgid "If \"%s\" accepts this request you will know his or her status." msgstr "" "\"%s\" さんがこの申し込みを承認したら、相手先の在席状況を知ることができます。" -#: ../src/roster_window.py:1995 +#: ../src/roster_window.py:2038 msgid "Authorization has been removed" msgstr "承認が取り消されました" -#: ../src/roster_window.py:1996 +#: ../src/roster_window.py:2039 #, python-format msgid "Now \"%s\" will always see you as offline." msgstr "\"%s\" さんは常にあなたをオフラインとして見ることになります。" -#: ../src/roster_window.py:2023 +#: ../src/roster_window.py:2066 msgid "GPG is not usable" msgstr "GPG は使用できません" -#: ../src/roster_window.py:2024 +#: ../src/roster_window.py:2067 #, python-format msgid "You will be connected to %s without OpenPGP." msgstr "OpenPGP なしに、%s さんに接続します。" -#: ../src/roster_window.py:2231 ../src/roster_window.py:3714 +#: ../src/roster_window.py:2274 ../src/roster_window.py:3764 msgid "You are participating in one or more group chats" msgstr "一つ以上のグループチャットに参加中です。" -#: ../src/roster_window.py:2232 ../src/roster_window.py:3715 +#: ../src/roster_window.py:2275 ../src/roster_window.py:3765 msgid "" "Changing your status to invisible will result in disconnection from those " "group chats. Are you sure you want to go invisible?" @@ -9802,37 +10149,37 @@ msgstr "" "在席状況を「隠れ中」にすると、グループチャットから退出することになります。ほ" "んとうに「隠れ中」にしますか ?" -#: ../src/roster_window.py:2258 +#: ../src/roster_window.py:2301 msgid "desync'ed" msgstr "不揃い" -#: ../src/roster_window.py:2324 +#: ../src/roster_window.py:2367 msgid "Really quit Gajim?" msgstr "本当に Gajim を終了しますか ?" -#: ../src/roster_window.py:2325 +#: ../src/roster_window.py:2368 msgid "Are you sure you want to quit Gajim?" msgstr "本当に Gajim を終了してもいいですか ?" -#: ../src/roster_window.py:2326 +#: ../src/roster_window.py:2369 msgid "Always close Gajim" msgstr "常に Gajim を終了する" -#: ../src/roster_window.py:2410 +#: ../src/roster_window.py:2455 msgid "You have running file transfers" msgstr "ファイルの転送を実行中です" -#: ../src/roster_window.py:2411 +#: ../src/roster_window.py:2456 msgid "" "If you quit now, the file(s) being transferred will be stopped. Do you still " "want to quit?" msgstr "いま終了すると、転送中のファイルは中断されます。それでも終了しますか?" -#: ../src/roster_window.py:2442 ../src/roster_window.py:2856 +#: ../src/roster_window.py:2487 ../src/roster_window.py:2903 msgid "You have unread messages" msgstr "未読のメッセージがあります" -#: ../src/roster_window.py:2443 +#: ../src/roster_window.py:2488 msgid "" "Messages will only be available for reading them later if you have history " "enabled and contact is in your roster." @@ -9840,37 +10187,37 @@ msgstr "" "履歴が有効になっていて、かつ相手先が名簿にあれば、メッセージは後で読むことが" "できます。" -#: ../src/roster_window.py:2857 +#: ../src/roster_window.py:2904 msgid "You must read them before removing this transport." msgstr "この中継先を削除する前に、それらを読まなければなりません。" -#: ../src/roster_window.py:2860 +#: ../src/roster_window.py:2907 #, python-format msgid "Transport \"%s\" will be removed" msgstr "中継先 \"%s\" を削除します" -#: ../src/roster_window.py:2861 +#: ../src/roster_window.py:2908 msgid "" "You will no longer be able to send and receive messages from contacts using " "this transport." msgstr "この中継先をとおして相手先にメッセージを送受信することはできません。" -#: ../src/roster_window.py:2864 +#: ../src/roster_window.py:2911 msgid "Transports will be removed" msgstr "中継先は削除されます" -#: ../src/roster_window.py:2869 +#: ../src/roster_window.py:2916 #, python-format msgid "" "You will no longer be able to send and receive messages to contacts from " "these transports: %s" msgstr "もうこれらの中継先 %s から相手先とのメッセージの送受信はできません。" -#: ../src/roster_window.py:2937 +#: ../src/roster_window.py:2984 msgid "You are about to block a contact. Are you sure you want to continue?" msgstr "相手先を遮断しようとしています。続行してもいいですか ?" -#: ../src/roster_window.py:2939 +#: ../src/roster_window.py:2986 msgid "" "This contact will see you offline and you will not receive messages he will " "send you." @@ -9879,56 +10226,56 @@ msgstr "" "ん。" #. it's jid -#: ../src/roster_window.py:3029 +#: ../src/roster_window.py:3076 msgid "Rename Contact" msgstr "相手先の名前を変更" -#: ../src/roster_window.py:3030 +#: ../src/roster_window.py:3077 #, python-format msgid "Enter a new nickname for contact %s" msgstr "相手先 %s さんの新しいニックネームを入力してください" -#: ../src/roster_window.py:3037 +#: ../src/roster_window.py:3084 msgid "Rename Group" msgstr "グループの名前変更" -#: ../src/roster_window.py:3038 +#: ../src/roster_window.py:3085 #, python-format msgid "Enter a new name for group %s" msgstr "グループ %s の新しい名前を入力してください" -#: ../src/roster_window.py:3083 +#: ../src/roster_window.py:3130 msgid "Remove Group" msgstr "グループの削除" -#: ../src/roster_window.py:3084 +#: ../src/roster_window.py:3131 #, python-format msgid "Do you want to remove group %s from the roster?" msgstr "名簿からグループ %s を削除しますか ?" -#: ../src/roster_window.py:3085 +#: ../src/roster_window.py:3132 msgid "Also remove all contacts in this group from your roster" msgstr "名簿のこのグループのすべての相手先も削除します" -#: ../src/roster_window.py:3124 +#: ../src/roster_window.py:3171 msgid "Assign OpenPGP Key" msgstr "OpenPGP 鍵の割り当て" -#: ../src/roster_window.py:3125 +#: ../src/roster_window.py:3172 msgid "Select a key to apply to the contact" msgstr "相手先に適用する鍵を選択してください" -#: ../src/roster_window.py:3524 +#: ../src/roster_window.py:3574 #, python-format msgid "Contact \"%s\" will be removed from your roster" msgstr "相手先 \"%s\" さんを名簿から削除します" -#: ../src/roster_window.py:3526 +#: ../src/roster_window.py:3576 #, python-format msgid "You are about to remove \"%(name)s\" (%(jid)s) from your roster.\n" msgstr "\"%(name)s\" (%(jid)s) さんを名簿から削除しようとしています。\n" -#: ../src/roster_window.py:3531 +#: ../src/roster_window.py:3581 msgid "" "By removing this contact you also remove authorization resulting in him or " "her always seeing you as offline." @@ -9937,11 +10284,11 @@ msgstr "" "を常にオフラインとして見ることになります。" #. Contact is not in roster -#: ../src/roster_window.py:3537 +#: ../src/roster_window.py:3587 msgid "Do you want to continue?" msgstr "続けますか ?" -#: ../src/roster_window.py:3541 +#: ../src/roster_window.py:3591 msgid "" "By removing this contact you also by default remove authorization resulting " "in him or her always seeing you as offline." @@ -9949,16 +10296,16 @@ msgstr "" "この相手先を名簿から削除すると、デフォルトで在席通知の承認も取り消します。相" "手先はあなたを常にオフラインとして見ることになります。" -#: ../src/roster_window.py:3544 +#: ../src/roster_window.py:3594 msgid "I want this contact to know my status after removal" msgstr "削除後も、この相手先に自分の在席状況を知らせる" #. several contact to remove at the same time -#: ../src/roster_window.py:3548 +#: ../src/roster_window.py:3598 msgid "Contacts will be removed from your roster" msgstr "相手先は名簿から削除されました" -#: ../src/roster_window.py:3553 +#: ../src/roster_window.py:3603 #, python-format msgid "" "By removing these contacts:%s\n" @@ -9968,12 +10315,12 @@ msgstr "" "を名簿から削除すると、在席通知の承認も取り消します。相手先はあなたを常にオフ" "ラインとして見ることになります。" -#: ../src/roster_window.py:3611 +#: ../src/roster_window.py:3661 msgid "" "You are about to send a custom status. Are you sure you want to continue?" msgstr "独自の在席状況を送信しようとしています。続行してもいいですか ?" -#: ../src/roster_window.py:3613 +#: ../src/roster_window.py:3663 #, python-format msgid "" "This contact will temporarily see you as %(status)s, but only until you " @@ -9983,19 +10330,19 @@ msgstr "" "が在席状況を変更するまでの間です。その後はあなたの全体の在席状況を見ることに" "なります。" -#: ../src/roster_window.py:3632 +#: ../src/roster_window.py:3682 msgid "No account available" msgstr "アカウントがありません" -#: ../src/roster_window.py:3633 +#: ../src/roster_window.py:3683 msgid "You must create an account before you can chat with other contacts." msgstr "相手先とチャットを開始する前に、アカウントを作成しなければなりません。" -#: ../src/roster_window.py:4286 +#: ../src/roster_window.py:4373 msgid "Metacontacts storage not supported by your server" msgstr "サーバーはメタ相手先の保存をサポートしていません" -#: ../src/roster_window.py:4288 +#: ../src/roster_window.py:4375 msgid "" "Your server does not support storing metacontacts information. So those " "information will not be saved on next reconnection." @@ -10003,12 +10350,12 @@ msgstr "" "サーバーはメタ相手先の情報の保存をサポートしていません。したがってその情報は" "次の接続の際には失われています。" -#: ../src/roster_window.py:4380 +#: ../src/roster_window.py:4467 msgid "" "You are about to create a metacontact. Are you sure you want to continue?" msgstr "メタ相手先を作成しようとしています。続行してもいいですか ?" -#: ../src/roster_window.py:4382 +#: ../src/roster_window.py:4469 msgid "" "Metacontacts are a way to regroup several contacts in one line. Generally it " "is used when the same person has several Jabber accounts or transport " @@ -10018,29 +10365,29 @@ msgstr "" "人物が複数の Jabber アカウントや中継先アカウントを持っているときに使用しま" "す。" -#: ../src/roster_window.py:4503 +#: ../src/roster_window.py:4590 msgid "Invalid file URI:" msgstr "ファイルの URI が正しくありません:" -#: ../src/roster_window.py:4515 +#: ../src/roster_window.py:4602 #, python-format msgid "Do you want to send this file to %s:" msgid_plural "Do you want to send these files to %s:" msgstr[0] "このファイルを %s さんに転送しますか:" msgstr[1] "これらのファイルを %s さんに転送しますか:" -#: ../src/roster_window.py:4650 +#: ../src/roster_window.py:4737 #, python-format msgid "Send %s to %s" msgstr "%s を %s に送信" -#: ../src/roster_window.py:4661 -#, fuzzy, python-format +#: ../src/roster_window.py:4748 +#, python-format msgid "Make %s first contact" msgstr "%s を優先の相手先とする" # (Mako) よくわからない。Make [c_source.get_shown_name()] and [c_dest.get_shown_name()] metacontacts -#: ../src/roster_window.py:4664 +#: ../src/roster_window.py:4751 #, python-format msgid "Make %s and %s metacontacts" msgstr "%s と %s をメタ相手先とする" @@ -10050,131 +10397,131 @@ msgstr "%s と %s をメタ相手先とする" #. for chat_with #. for single message #. join gc -#: ../src/roster_window.py:5104 ../src/roster_window.py:5158 -#: ../src/roster_window.py:5167 ../src/statusicon.py:264 +#: ../src/roster_window.py:5190 ../src/roster_window.py:5244 +#: ../src/roster_window.py:5253 ../src/statusicon.py:264 #: ../src/statusicon.py:311 ../src/statusicon.py:317 #, python-format msgid "using account %s" msgstr "アカウント %s で" #. add -#: ../src/roster_window.py:5174 +#: ../src/roster_window.py:5260 #, python-format msgid "to %s account" msgstr "アカウント %s に対して" #. disco -#: ../src/roster_window.py:5179 +#: ../src/roster_window.py:5265 #, python-format msgid "using %s account" msgstr "アカウント %s で" -#: ../src/roster_window.py:5218 ../src/statusicon.py:327 +#: ../src/roster_window.py:5304 ../src/statusicon.py:327 msgid "_Manage Bookmarks..." msgstr "ブックマークの管理 (_M)..." #. profile, avatar -#: ../src/roster_window.py:5238 +#: ../src/roster_window.py:5324 #, python-format msgid "of account %s" msgstr "アカウント %s の" -#: ../src/roster_window.py:5279 +#: ../src/roster_window.py:5365 #, python-format msgid "for account %s" msgstr "アカウント %s について" -#: ../src/roster_window.py:5339 ../src/roster_window.py:5447 +#: ../src/roster_window.py:5425 ../src/roster_window.py:5533 msgid "_Change Status Message" msgstr "状況メッセージの変更 (_C)" -#: ../src/roster_window.py:5372 +#: ../src/roster_window.py:5458 msgid "Publish Tune" msgstr "聴いている楽曲名を公開" -#: ../src/roster_window.py:5374 +#: ../src/roster_window.py:5460 msgid "Publish Location" msgstr "位置情報を公開" -#: ../src/roster_window.py:5377 +#: ../src/roster_window.py:5463 msgid "Configure Services..." msgstr "サービスの調整..." # (Mako)ここでは「復元」の意味か -#: ../src/roster_window.py:5525 +#: ../src/roster_window.py:5611 msgid "_Maximize All" msgstr "ウィンドウをすべて復元 (_M)" -#: ../src/roster_window.py:5535 ../src/roster_window.py:5708 +#: ../src/roster_window.py:5621 ../src/roster_window.py:5794 msgid "Send Group M_essage" msgstr "メッセージの一斉送信 (_e)" -#: ../src/roster_window.py:5543 +#: ../src/roster_window.py:5629 msgid "To all users" msgstr "すべてのユーザーに" -#: ../src/roster_window.py:5547 +#: ../src/roster_window.py:5633 msgid "To all online users" msgstr "オンラインのすべてのユーザーに" #. Manage Transport submenu -#: ../src/roster_window.py:5728 +#: ../src/roster_window.py:5814 msgid "_Manage Contacts" msgstr "相手先の管理 (_M)" #. Edit Groups -#: ../src/roster_window.py:5737 +#: ../src/roster_window.py:5823 msgid "Edit _Groups" msgstr "グループの編集 (_G)" #. Send single message -#: ../src/roster_window.py:5792 +#: ../src/roster_window.py:5878 msgid "Send Single Message" msgstr "単発メッセージの送信" #. Execute Command -#: ../src/roster_window.py:5839 +#: ../src/roster_window.py:5925 msgid "Execute Command..." msgstr "コマンドを実行する..." #. Manage Transport submenu -#: ../src/roster_window.py:5849 +#: ../src/roster_window.py:5935 msgid "_Manage Transport" msgstr "中継先の管理 (_M)" #. Modify Transport -#: ../src/roster_window.py:5858 +#: ../src/roster_window.py:5944 msgid "_Modify Transport" msgstr "中継先の変更 (_M)" #. Rename -#: ../src/roster_window.py:5868 +#: ../src/roster_window.py:5954 msgid "_Rename" msgstr "名前の変更(_R)" # (Mako)ここでは「復元」の意味か -#: ../src/roster_window.py:5928 +#: ../src/roster_window.py:6014 msgid "_Maximize" msgstr "ウィンドウの復元 (_M)" -#: ../src/roster_window.py:5937 +#: ../src/roster_window.py:6023 msgid "_Reconnect" msgstr "再接続 (_R)" -#: ../src/roster_window.py:5944 +#: ../src/roster_window.py:6030 msgid "_Disconnect" msgstr "切断 (_D)" #. History manager -#: ../src/roster_window.py:6033 +#: ../src/roster_window.py:6119 msgid "History Manager" msgstr "履歴マネージャ" -#: ../src/roster_window.py:6044 +#: ../src/roster_window.py:6130 msgid "_Join New Group Chat" msgstr "新しいグループチャットに参加 (_J)" -#: ../src/roster_window.py:6263 +#: ../src/roster_window.py:6349 msgid "Change Status Message..." msgstr "状況メッセージを変更する..." @@ -10191,32 +10538,30 @@ msgstr "ファイルを受ける際のエラー" msgid "No result" msgstr "見つかりません" -#: ../src/session.py:95 +#: ../src/session.py:97 msgid "Disk WriteError" msgstr "ディスクの書き込みエラー" -#: ../src/session.py:406 ../src/session.py:450 +#: ../src/session.py:411 ../src/session.py:470 msgid "Confirm these session options" msgstr "セッションのオプションを確認する" -#: ../src/session.py:407 +#: ../src/session.py:413 #, python-format msgid "" -"The remote client wants '\n" -" 'to negotiate an session with these features:\n" +"The remote client wants to negotiate a session with these features:\n" "\n" "%s\n" "\n" "Are these options acceptable?" msgstr "" -"遠くのクライアントが\n" -"次の機能とともにセッションを確立しようとしています:\n" +"遠くのクライアントが次の機能とともにセッションを確立しようとしています:\n" "\n" -"\t%s\n" +"%s\n" "\n" -"\tこれらのオプションを受け付けますか ?" +"これらのオプションを受け付けますか ?" -#: ../src/session.py:451 +#: ../src/session.py:472 #, python-format msgid "" "The remote client selected these options:\n" @@ -10231,6 +10576,10 @@ msgstr "" "\n" "セッションを続けますか ?" +#: ../src/session.py:475 +msgid "Always accept for this contact" +msgstr "この相手先を常に受け入れるかどうか" + #: ../src/statusicon.py:228 msgid "_Change Status Message..." msgstr "状況メッセージを変更する (_C)..." @@ -10243,134 +10592,134 @@ msgstr "名簿を閉じる (_R)" msgid "Hide this menu" msgstr "このメニューを表示しない" -#: ../src/tooltips.py:392 ../src/tooltips.py:604 +#: ../src/tooltips.py:393 ../src/tooltips.py:605 msgid "Jabber ID: " msgstr "Jabber ID: " -#: ../src/tooltips.py:395 ../src/tooltips.py:608 +#: ../src/tooltips.py:396 ../src/tooltips.py:609 msgid "Resource: " msgstr "リソース: " -#: ../src/tooltips.py:401 +#: ../src/tooltips.py:402 #, python-format msgid "%(owner_or_admin_or_member)s of this group chat" msgstr "このグループチャットの %(owner_or_admin_or_member)s " -#: ../src/tooltips.py:502 +#: ../src/tooltips.py:503 msgid " [blocked]" msgstr "遮断しています]" -#: ../src/tooltips.py:506 +#: ../src/tooltips.py:507 msgid " [minimized]" msgstr "[最小化しています]" -#: ../src/tooltips.py:521 ../src/tooltips.py:777 +#: ../src/tooltips.py:522 ../src/tooltips.py:778 msgid "Status: " msgstr "在席状況: " -#: ../src/tooltips.py:565 +#: ../src/tooltips.py:566 #, python-format msgid "Last status: %s" msgstr "最近の在席状況: %s" -#: ../src/tooltips.py:567 +#: ../src/tooltips.py:568 #, python-format msgid " since %s" msgstr " %s から" -#: ../src/tooltips.py:585 +#: ../src/tooltips.py:586 msgid "Connected" msgstr "接続中" -#: ../src/tooltips.py:587 +#: ../src/tooltips.py:588 msgid "Disconnected" msgstr "切断中" #. ('both' is the normal sub so we don't show it) -#: ../src/tooltips.py:615 +#: ../src/tooltips.py:616 msgid "Subscription: " msgstr "在席通知の承認: " -#: ../src/tooltips.py:625 +#: ../src/tooltips.py:626 msgid "OpenPGP: " msgstr "OpenPGP: " -#: ../src/tooltips.py:646 +#: ../src/tooltips.py:647 #, python-format msgid "Idle since %s" msgstr " %s から操作のない状態" -#: ../src/tooltips.py:647 +#: ../src/tooltips.py:648 #, python-format msgid "Idle for %s" msgstr "%s 間、操作のない状態" -#: ../src/tooltips.py:698 +#: ../src/tooltips.py:699 #, python-format msgid "Mood: %s" msgstr "気分: %s" -#: ../src/tooltips.py:702 +#: ../src/tooltips.py:703 #, python-format msgid "Activity: %s" msgstr "動向: %s" -#: ../src/tooltips.py:706 +#: ../src/tooltips.py:707 #, python-format msgid "Tune: %s" msgstr "楽曲: %s" -#: ../src/tooltips.py:710 +#: ../src/tooltips.py:711 #, python-format msgid "Location: %s" msgstr "位置: %s" -#: ../src/tooltips.py:735 +#: ../src/tooltips.py:736 msgid "Download" msgstr "ダウンロード" -#: ../src/tooltips.py:741 +#: ../src/tooltips.py:742 msgid "Upload" msgstr "アップロード" -#: ../src/tooltips.py:748 +#: ../src/tooltips.py:749 msgid "Type: " msgstr "種類: " -#: ../src/tooltips.py:752 +#: ../src/tooltips.py:753 msgid "Transferred: " msgstr "転送:" -#: ../src/tooltips.py:755 ../src/tooltips.py:776 +#: ../src/tooltips.py:756 ../src/tooltips.py:777 msgid "Not started" msgstr "開始していません" -#: ../src/tooltips.py:759 +#: ../src/tooltips.py:760 msgid "Stopped" msgstr "停止しています" -#: ../src/tooltips.py:761 ../src/tooltips.py:764 +#: ../src/tooltips.py:762 ../src/tooltips.py:765 msgid "Completed" msgstr "完了しました" -#: ../src/tooltips.py:768 +#: ../src/tooltips.py:769 msgid "?transfer status:Paused" msgstr "一時停止しました" #. stalled is not paused. it is like 'frozen' it stopped alone -#: ../src/tooltips.py:772 +#: ../src/tooltips.py:773 msgid "Stalled" msgstr "滞っています" -#: ../src/tooltips.py:774 +#: ../src/tooltips.py:775 msgid "Transferring" msgstr "転送しています" -#: ../src/tooltips.py:812 +#: ../src/tooltips.py:813 msgid "This service has not yet responded with detailed information" msgstr "このサービスは、詳細情報の返答がありません" -#: ../src/tooltips.py:815 +#: ../src/tooltips.py:816 msgid "" "This service could not respond with detailed information.\n" "It is most likely legacy or broken" @@ -10378,6 +10727,10 @@ msgstr "" "このサービスは詳細情報を返答することができません。\n" "古いか、または壊れています" +#: ../src/upower_listener.py:31 +msgid "Machine going to sleep" +msgstr "コンピュータを終了しています" + #: ../src/vcard.py:285 msgid "?Client:Unknown" msgstr "不明" @@ -10442,3 +10795,6 @@ msgstr "保留中の在席通知の申し込みはありません。" msgid " resource with priority " msgstr " リソース。優先順位は " +#~ msgid "Requires pybonjour (http://o2s.csail.mit.edu/o2s-wiki/pybonjour)." +#~ msgstr "" +#~ "pybonjour が必要です ( http://o2s.csail.mit.edu/o2s-wiki/pybonjour )。" @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: ru\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-11 00:06+0400\n" -"PO-Revision-Date: 2011-11-15 23:22+0300\n" +"POT-Creation-Date: 2012-03-01 11:01+0400\n" +"PO-Revision-Date: 2012-03-01 11:08+0300\n" "Last-Translator: Fomin Denis <fominde@mail.ru>\n" "Language-Team: Linux Support LLC\n" "Language: ru\n" @@ -126,25 +126,25 @@ msgstr "Управление..." #: ../data/gui/account_creation_wizard_window.ui.h:17 #: ../data/gui/accounts_window.ui.h:41 #: ../data/gui/change_mood_dialog.ui.h:3 -#: ../src/config.py:1264 -#: ../src/config.py:1278 -#: ../src/config.py:1283 -#: ../src/config.py:1331 -#: ../src/config.py:1434 -#: ../src/config.py:1745 -#: ../src/config.py:1750 -#: ../src/config.py:2326 -#: ../src/config.py:2405 -#: ../src/config.py:2418 -#: ../src/config.py:3697 -#: ../src/config.py:3772 +#: ../src/config.py:1265 +#: ../src/config.py:1279 +#: ../src/config.py:1284 +#: ../src/config.py:1332 +#: ../src/config.py:1435 +#: ../src/config.py:1746 +#: ../src/config.py:1751 +#: ../src/config.py:2327 +#: ../src/config.py:2406 +#: ../src/config.py:2419 +#: ../src/config.py:3699 +#: ../src/config.py:3774 #: ../src/dialogs.py:311 #: ../src/dialogs.py:313 #: ../src/dialogs.py:519 #: ../src/dialogs.py:532 -#: ../src/roster_window.py:3096 -#: ../src/roster_window.py:3102 -#: ../src/roster_window.py:3107 +#: ../src/roster_window.py:3139 +#: ../src/roster_window.py:3145 +#: ../src/roster_window.py:3150 msgid "None" msgstr "Нет" @@ -238,8 +238,8 @@ msgstr "Учётные записи" #. Change label for accept_button to action name instead of 'OK'. #: ../data/gui/accounts_window.ui.h:8 -#: ../src/dialogs.py:3382 -#: ../src/dialogs.py:3428 +#: ../src/dialogs.py:3387 +#: ../src/dialogs.py:3433 msgid "Add" msgstr "Добавить" @@ -302,8 +302,8 @@ msgstr "Соединение" #. Change label for accept_button to action name instead of 'OK'. #: ../data/gui/accounts_window.ui.h:23 -#: ../src/dialogs.py:3386 -#: ../src/dialogs.py:3483 +#: ../src/dialogs.py:3391 +#: ../src/dialogs.py:3488 msgid "Delete" msgstr "Удалить" @@ -320,8 +320,8 @@ msgstr "Имя:" #. No configured account #: ../data/gui/accounts_window.ui.h:26 #: ../data/gui/roster_window.ui.h:5 -#: ../src/common/helpers.py:1159 -#: ../src/common/helpers.py:1171 +#: ../src/common/helpers.py:1168 +#: ../src/common/helpers.py:1180 #: ../src/notify.py:314 #: ../src/notify.py:337 #: ../src/notify.py:387 @@ -338,8 +338,9 @@ msgstr "Gajim" #: ../src/common/contacts.py:132 #: ../src/dialogs.py:112 #: ../src/dialogs.py:124 -#: ../src/roster_window.py:3038 -#: ../src/roster_window.py:5656 +#: ../src/roster_window.py:3081 +#: ../src/roster_window.py:4148 +#: ../src/roster_window.py:5738 msgid "General" msgstr "Общие" @@ -377,7 +378,7 @@ msgstr "Информация о вас, сохраненная на сервер #: ../data/gui/accounts_window.ui.h:37 #: ../data/gui/zeroconf_information_window.ui.h:4 -#: ../src/config.py:1868 +#: ../src/config.py:1869 #: ../src/dialogs.py:837 msgid "Jabber ID:" msgstr "Jabber ID:" @@ -392,8 +393,8 @@ msgid "Mer_ge accounts" msgstr "_Объединить учетные записи" #: ../data/gui/accounts_window.ui.h:40 -#: ../src/config.py:1841 -#: ../src/config.py:2419 +#: ../src/config.py:1842 +#: ../src/config.py:2420 msgid "No key selected" msgstr "Не выбран ключ" @@ -416,7 +417,7 @@ msgstr "Изменять приоритет автоматически в соо #. Rename #: ../data/gui/accounts_window.ui.h:46 -#: ../src/roster_window.py:5606 +#: ../src/roster_window.py:5688 msgid "Re_name" msgstr "П_ереименовать" @@ -445,8 +446,8 @@ msgid "Synchroni_ze account status with global status" msgstr "Син_хронизировать статус учетной записи с глобальным статусом" #: ../data/gui/accounts_window.ui.h:54 -#: ../data/gui/synchronise_select_account_dialog.ui.h:2 -msgid "Synchronise contacts" +#, fuzzy +msgid "Synchronize contacts" msgstr "Объединить контакты" #: ../data/gui/accounts_window.ui.h:55 @@ -514,7 +515,7 @@ msgid "Add New Contact" msgstr "Добавить новый контакт" #: ../data/gui/add_new_contact_window.ui.h:4 -#: ../src/common/helpers.py:1350 +#: ../src/common/helpers.py:1359 msgid "I would like to add you to my contact list." msgstr "Вы не возражаете, если я добавлю Вас в контакт лист?" @@ -571,7 +572,9 @@ msgstr "<b>Произошла ошибка:</b>" msgid "<b>Choose command to execute:</b>" msgstr "<b>Выберите команду:</b>" +#. displaying the window #: ../data/gui/adhoc_commands_window.ui.h:3 +#: ../src/adhoc_commands.py:102 msgid "Ad-hoc Commands - Gajim" msgstr "Специальные команды — Gajim" @@ -735,9 +738,9 @@ msgstr "Заблокированные контакты" #: ../data/gui/blocked_contacts_window.ui.h:2 #: ../data/gui/contact_context_menu.ui.h:25 #: ../data/gui/gc_occupants_menu.ui.h:14 -#: ../src/roster_window.py:5625 -#: ../src/roster_window.py:5752 -#: ../src/roster_window.py:5885 +#: ../src/roster_window.py:5707 +#: ../src/roster_window.py:5834 +#: ../src/roster_window.py:5967 msgid "_Unblock" msgstr "_Разблокировать" @@ -906,10 +909,12 @@ msgid "Show the contact's profile (Ctrl+I)" msgstr "Показать информацию о контакте (Ctrl+I)" #: ../data/gui/chat_control.ui.h:20 +#: ../src/command_system/implementation/standard.py:214 msgid "Toggle audio session" msgstr "Переключить аудио сеанс" #: ../data/gui/chat_control.ui.h:21 +#: ../src/command_system/implementation/standard.py:224 msgid "Toggle video session" msgstr "Переключить видео сеанс" @@ -974,8 +979,8 @@ msgstr "Редактировать _группы" #. Invite to Groupchat #: ../data/gui/contact_context_menu.ui.h:6 #: ../data/gui/gc_occupants_menu.ui.h:1 -#: ../src/roster_window.py:5561 -#: ../src/roster_window.py:5720 +#: ../src/roster_window.py:5643 +#: ../src/roster_window.py:5802 msgid "In_vite to" msgstr "_Пригласить в" @@ -992,8 +997,8 @@ msgid "Remo_ve" msgstr "_Удалить" #: ../data/gui/contact_context_menu.ui.h:10 -#: ../src/roster_window.py:5571 -#: ../src/roster_window.py:5809 +#: ../src/roster_window.py:5653 +#: ../src/roster_window.py:5891 msgid "Send Cus_tom Status" msgstr "Установи_ть статус" @@ -1028,9 +1033,9 @@ msgstr "_Позволить ему или ей видеть мой статус" #: ../data/gui/contact_context_menu.ui.h:19 #: ../data/gui/gc_occupants_menu.ui.h:8 -#: ../src/roster_window.py:5633 -#: ../src/roster_window.py:5758 -#: ../src/roster_window.py:5888 +#: ../src/roster_window.py:5715 +#: ../src/roster_window.py:5840 +#: ../src/roster_window.py:5970 msgid "_Block" msgstr "_Блокировать" @@ -1042,7 +1047,7 @@ msgstr "_Запретить ему или ей видеть мой статус" #: ../data/gui/gc_control_popup_menu.ui.h:6 #: ../data/gui/gc_occupants_menu.ui.h:9 #: ../data/gui/roster_window.ui.h:23 -#: ../src/roster_window.py:5959 +#: ../src/roster_window.py:6041 msgid "_History" msgstr "_История" @@ -1148,7 +1153,7 @@ msgid "_Notify me when a file transfer is complete" msgstr "_Уведомить меня, когда передача файлов закончится" #: ../data/gui/filetransfers.ui.h:15 -#: ../src/chat_control.py:3228 +#: ../src/chat_control.py:3236 #: ../src/filetransfers_window.py:206 msgid "_Open Containing Folder" msgstr "_Открыть папку с принятым файлом" @@ -1384,7 +1389,7 @@ msgid "All Chat Histories" msgstr "Вся история" #: ../data/gui/history_window.ui.h:2 -#: ../src/history_window.py:323 +#: ../src/history_window.py:324 msgid "Conversation History" msgstr "История" @@ -1401,10 +1406,18 @@ msgid "Search:" msgstr "Поиск:" #: ../data/gui/history_window.ui.h:6 +msgid "_In date search" +msgstr "" + +#: ../data/gui/history_window.ui.h:7 #: ../data/gui/zeroconf_information_window.ui.h:10 msgid "_Log conversation history" msgstr "_Сохранять историю переписки" +#: ../data/gui/history_window.ui.h:8 +msgid "searching only in the selected day " +msgstr "" + #: ../data/gui/item_archiving_preferences_window.ui.h:1 msgid "approve" msgstr "" @@ -1475,7 +1488,7 @@ msgid "Bro_wse Rooms" msgstr "Просмотр конферен_ций" #: ../data/gui/join_groupchat_window.ui.h:3 -#: ../src/dialogs.py:2333 +#: ../src/dialogs.py:2337 msgid "Join Group Chat" msgstr "Войти в комнату" @@ -1500,7 +1513,7 @@ msgid "Room:" msgstr "Комната:" #: ../data/gui/join_groupchat_window.ui.h:9 -#: ../src/config.py:1858 +#: ../src/config.py:1859 msgid "Server:" msgstr "Сервер:" @@ -1849,8 +1862,8 @@ msgid "Detached roster with single chat" msgstr "Окно контактов и окно с беседами" #: ../data/gui/preferences_window.ui.h:46 -#: ../src/config.py:170 -#: ../src/config.py:682 +#: ../src/config.py:171 +#: ../src/config.py:683 msgid "Disabled" msgstr "Отключены" @@ -2075,7 +2088,7 @@ msgid "Sort contacts by status" msgstr "Сортировать контакты по статусу" #: ../data/gui/preferences_window.ui.h:103 -#: ../src/config.py:400 +#: ../src/config.py:401 msgid "Status" msgstr "Статус" @@ -2284,7 +2297,7 @@ msgid "Order:" msgstr "Номер:" #: ../data/gui/privacy_list_window.ui.h:12 -#: ../src/dialogs.py:3977 +#: ../src/dialogs.py:3982 msgid "Privacy List" msgstr "Список доступа" @@ -2483,7 +2496,7 @@ msgstr "<b>Что вы хотите сделать?</b>" #: ../data/gui/remove_account_window.ui.h:2 msgid "Remove account _only from Gajim" -msgstr "Удалит учетную запись _только из Gajim" +msgstr "Удалить учетную запись _только из Gajim" #: ../data/gui/remove_account_window.ui.h:3 msgid "Remove account from Gajim and from _server" @@ -2492,9 +2505,9 @@ msgstr "Удалить учетную запись из Gajim и с _серве #. Remove group #. Remove #: ../data/gui/remove_account_window.ui.h:4 -#: ../src/roster_window.py:5643 -#: ../src/roster_window.py:5768 -#: ../src/roster_window.py:5898 +#: ../src/roster_window.py:5725 +#: ../src/roster_window.py:5850 +#: ../src/roster_window.py:5980 msgid "_Remove" msgstr "_Удалить" @@ -2548,8 +2561,8 @@ msgid "Show Only _Active Contacts" msgstr "Показать _только активных" #: ../data/gui/roster_window.ui.h:12 -msgid "Show T_rans_ports" -msgstr "Показать Т_ранс_порты" +msgid "Show T_ransports" +msgstr "Показать Т_ранспорты" #: ../data/gui/roster_window.ui.h:13 msgid "Show _Offline Contacts" @@ -2605,7 +2618,7 @@ msgstr "Добавить _контакт" #. Information #: ../data/gui/search_window.ui.h:4 -#: ../src/roster_window.py:5910 +#: ../src/roster_window.py:5992 msgid "_Information" msgstr "_Информация о контакте" @@ -2682,6 +2695,10 @@ msgstr "_Отклонить" msgid "Select the account with which you want to synchronise" msgstr "Выберите учетную запись для объединения" +#: ../data/gui/synchronise_select_account_dialog.ui.h:2 +msgid "Synchronise contacts" +msgstr "Объединить контакты" + #: ../data/gui/synchronise_select_contacts_dialog.ui.h:1 msgid "Select the contacts you want to synchronise" msgstr "Расширенные статусы" @@ -2877,6 +2894,11 @@ msgstr "Сервис отправил недопустимые данные" msgid "Service changed the session identifier." msgstr "Сервис изменил идентификатор сеанса." +#: ../src/adhoc_commands.py:418 +#, fuzzy, python-format +msgid "%s - Ad-hoc Commands - Gajim" +msgstr "Специальные команды — Gajim" + #. when stanza doesn't have error description #: ../src/adhoc_commands.py:513 msgid "Service returned an error." @@ -3095,33 +3117,34 @@ msgstr "Отправить файл?" msgid "If you send a file to %s, he/she will know your real Jabber ID." msgstr "Если вы пошлете файл %s, он/она узнает ваш настоящий Jabber ID." -#: ../src/chat_control.py:1639 -#: ../src/chat_control.py:2165 +#: ../src/chat_control.py:1638 +#: ../src/chat_control.py:2172 msgid "GPG encryption enabled" msgstr "GPG шифрование включено" -#: ../src/chat_control.py:1660 -#: ../src/chat_control.py:1663 +#: ../src/chat_control.py:1659 +#: ../src/chat_control.py:1662 msgid "Requires python-farsight." msgstr "Требует python-farsight." #. Add to roster -#: ../src/chat_control.py:1703 +#: ../src/chat_control.py:1702 #: ../src/common/contacts.py:149 #: ../src/common/contacts.py:270 -#: ../src/common/helpers.py:61 -#: ../src/common/helpers.py:255 +#: ../src/common/helpers.py:67 +#: ../src/common/helpers.py:261 #: ../src/dialogs.py:1099 -#: ../src/dialogs.py:2227 -#: ../src/dialogs.py:2256 -#: ../src/gui_interface.py:467 +#: ../src/dialogs.py:2231 +#: ../src/dialogs.py:2260 +#: ../src/gui_interface.py:472 #: ../src/gui_menu_builder.py:254 -#: ../src/gui_menu_builder.py:404 -#: ../src/roster_window.py:1644 -#: ../src/roster_window.py:1646 -#: ../src/roster_window.py:1979 -#: ../src/roster_window.py:3511 -#: ../src/roster_window.py:3538 +#: ../src/gui_menu_builder.py:405 +#: ../src/roster_window.py:767 +#: ../src/roster_window.py:1687 +#: ../src/roster_window.py:1689 +#: ../src/roster_window.py:2022 +#: ../src/roster_window.py:3557 +#: ../src/roster_window.py:3584 msgid "Not in Roster" msgstr "Не в ростере" @@ -3133,70 +3156,70 @@ msgstr "Этот контакт не поддерживает передачу msgid "You need to know the real JID of the contact to send him or her a file." msgstr "Необходимо знать настоящий JID контакта для того, чтобы отправить ему или ей файл." -#: ../src/chat_control.py:1844 +#: ../src/chat_control.py:1851 #, python-format msgid "%(type)s state : %(state)s, reason: %(reason)s" msgstr "%(type)s состояние : %(state)s, причина: %(reason)s" -#: ../src/chat_control.py:2035 +#: ../src/chat_control.py:2042 #, python-format msgid "%(nickname)s from group chat %(room_name)s" msgstr "%(nickname)s из комнаты %(room_name)s" #. No key assigned nor a key is used by remote contact -#: ../src/chat_control.py:2145 -#: ../src/dialogs.py:5038 +#: ../src/chat_control.py:2152 +#: ../src/dialogs.py:5043 msgid "No GPG key assigned" msgstr "Ключ GPG не присвоен" -#: ../src/chat_control.py:2146 +#: ../src/chat_control.py:2153 msgid "No GPG key is assigned to this contact. So you cannot encrypt messages with GPG." msgstr "Этому контакту не присвоен ключ GPG, поэтому вы не можете зашифровать сообщения с помощью GPG." -#: ../src/chat_control.py:2155 +#: ../src/chat_control.py:2162 msgid "GPG encryption disabled" msgstr "GPG шифрование выключено" -#: ../src/chat_control.py:2181 +#: ../src/chat_control.py:2188 msgid "Session WILL be logged" msgstr "Для сеанса БУДЕТ сохранена история сообщений" -#: ../src/chat_control.py:2183 +#: ../src/chat_control.py:2190 msgid "Session WILL NOT be logged" msgstr "Для сеанса НЕ БУДЕТ сохранена история сообщений" #. encryption %s active -#: ../src/chat_control.py:2200 +#: ../src/chat_control.py:2207 msgid "is" msgstr "было" -#: ../src/chat_control.py:2200 +#: ../src/chat_control.py:2207 msgid "is NOT" msgstr "НЕ" #. chat session %s be logged -#: ../src/chat_control.py:2202 +#: ../src/chat_control.py:2209 msgid "will" msgstr "будет" -#: ../src/chat_control.py:2202 +#: ../src/chat_control.py:2209 msgid "will NOT" msgstr "НЕ будет" #. About encrypted chat session -#: ../src/chat_control.py:2206 +#: ../src/chat_control.py:2213 msgid "and authenticated" msgstr "и заверено" #. About encrypted chat session -#: ../src/chat_control.py:2210 +#: ../src/chat_control.py:2217 msgid "and NOT authenticated" msgstr "и НЕ заверено" #. status will become 'is' or 'is not', authentificaed will become #. 'and authentificated' or 'and not authentificated', logged will become #. 'will' or 'will not' -#: ../src/chat_control.py:2217 +#: ../src/chat_control.py:2224 #, python-format msgid "" "%(type)s encryption %(status)s active %(authenticated)s.\n" @@ -3205,75 +3228,75 @@ msgstr "" "%(type)s шифрование %(status)s включено %(authenticated)s.\n" "Для сеанса %(logged)s сохранена история сообщений." -#: ../src/chat_control.py:2344 +#: ../src/chat_control.py:2351 msgid "Session negotiation cancelled" msgstr "Установление сеанса отменено" -#: ../src/chat_control.py:2354 +#: ../src/chat_control.py:2361 msgid "This session WILL be archived on server" msgstr "История сеанса БУДЕТ сохранена на сервере" -#: ../src/chat_control.py:2356 +#: ../src/chat_control.py:2363 msgid "This session WILL NOT be archived on server" msgstr "История сеанса НЕ БУДЕТ сохранена на сервере" -#: ../src/chat_control.py:2365 +#: ../src/chat_control.py:2372 msgid "This session is encrypted" msgstr "Сеанс зашифрован" -#: ../src/chat_control.py:2368 +#: ../src/chat_control.py:2375 msgid " and WILL be logged" msgstr " и БУДЕТ сохранена история сообщений" -#: ../src/chat_control.py:2370 +#: ../src/chat_control.py:2377 msgid " and WILL NOT be logged" msgstr " и НЕ БУДЕТ сохранена история сообщений" -#: ../src/chat_control.py:2375 +#: ../src/chat_control.py:2382 msgid "Remote contact's identity not verified. Click the shield button for more details." msgstr "Личность удаленного контакта не подтверждена. Нажмите на кнопке со щитом для подробностей." -#: ../src/chat_control.py:2377 +#: ../src/chat_control.py:2384 msgid "E2E encryption disabled" msgstr "E2E шифрование выключено" -#: ../src/chat_control.py:2424 -#: ../src/chat_control.py:2437 +#: ../src/chat_control.py:2432 +#: ../src/chat_control.py:2445 msgid "The following message was NOT encrypted" msgstr "Последнее сообщение НЕ БЫЛО зашифровано" -#: ../src/chat_control.py:2430 +#: ../src/chat_control.py:2438 msgid "The following message was encrypted" msgstr "Последнее сообщение зашифровано" #. %s is being replaced in the code with JID -#: ../src/chat_control.py:2699 +#: ../src/chat_control.py:2707 #, python-format msgid "You just received a new message from \"%s\"" msgstr "Получено новое сообщение от «%s»" -#: ../src/chat_control.py:2700 +#: ../src/chat_control.py:2708 msgid "If you close this tab and you have history disabled, this message will be lost." msgstr "Если вы закроете эту вкладку и у вас отключена функция ведения истории сообщений, то это сообщение будет утеряно." -#: ../src/chat_control.py:2867 +#: ../src/chat_control.py:2875 #: ../src/common/connection_handlers_events.py:887 -#: ../src/common/connection_handlers.py:938 -#: ../src/common/connection_handlers.py:1050 -#: ../src/common/connection.py:451 -#: ../src/common/logger.py:1131 -#: ../src/gajim.py:209 -#: ../src/session.py:101 +#: ../src/common/connection_handlers.py:948 +#: ../src/common/connection_handlers.py:1060 +#: ../src/common/connection.py:456 +#: ../src/common/logger.py:1144 +#: ../src/gajim.py:210 +#: ../src/session.py:100 msgid "Database Error" msgstr "Ошибка базы данных" -#: ../src/chat_control.py:2868 +#: ../src/chat_control.py:2876 #, python-format msgid "The database file (%s) cannot be read. Try to repair it or remove it (all history will be lost)." msgstr "Файл базы данных (%s) не может быть прочитан. Попробуйте восстановить его или удалить (вся история будет утеряна)." -#: ../src/chat_control.py:3104 -#: ../src/gui_interface.py:1032 +#: ../src/chat_control.py:3112 +#: ../src/gui_interface.py:1061 #, python-format msgid "" "Unable to decrypt message from %s\n" @@ -3282,57 +3305,251 @@ msgstr "" "Не удалось расшифровать сообщение от %s\n" "Возможно, оно было испорчено." -#: ../src/chat_control.py:3137 +#: ../src/chat_control.py:3145 #, python-format msgid "%(name)s is now %(status)s" msgstr "%(name)s теперь %(status)s" -#: ../src/chat_control.py:3196 +#: ../src/chat_control.py:3204 msgid "File transfer" msgstr "Передача файлов" -#: ../src/chat_control.py:3199 +#: ../src/chat_control.py:3207 msgid "Size" msgstr "Размер" -#: ../src/chat_control.py:3201 +#: ../src/chat_control.py:3209 msgid "_Accept" msgstr "_Принять" -#: ../src/chat_control.py:3224 +#: ../src/chat_control.py:3232 #: ../src/filetransfers_window.py:204 msgid "File transfer completed" msgstr "Передача завершена" -#: ../src/chat_control.py:3252 -#: ../src/gui_interface.py:903 -#: ../src/roster_window.py:1891 +#: ../src/chat_control.py:3260 +#: ../src/gui_interface.py:932 +#: ../src/roster_window.py:1934 msgid "Remote contact stopped transfer" msgstr "Удаленный контакт остановил передачу" -#: ../src/chat_control.py:3254 -#: ../src/gui_interface.py:906 -#: ../src/roster_window.py:1893 +#: ../src/chat_control.py:3262 +#: ../src/gui_interface.py:935 +#: ../src/roster_window.py:1936 msgid "Error opening file" msgstr "Ошибка открытия файла" -#: ../src/chat_control.py:3256 +#: ../src/chat_control.py:3264 #: ../src/filetransfers_window.py:240 msgid "File transfer stopped" msgstr "Передача файла остановлена" -#: ../src/chat_control.py:3259 +#: ../src/chat_control.py:3267 #: ../src/filetransfers_window.py:219 #: ../src/filetransfers_window.py:226 msgid "File transfer cancelled" msgstr "Передача отменена" -#: ../src/chat_control.py:3260 +#: ../src/chat_control.py:3268 #: ../src/filetransfers_window.py:219 #: ../src/filetransfers_window.py:227 msgid "Connection with peer cannot be established." msgstr "Соединение не может быть установлено." +#: ../src/command_system/implementation/custom.py:105 +msgid "The same as using a doc-string, except it supports translation" +msgstr "" + +#: ../src/command_system/implementation/execute.py:53 +msgid "Execute expression inside a shell, show output" +msgstr "" + +#: ../src/command_system/implementation/execute.py:109 +msgid "Execute expression inside a shell, send output" +msgstr "" + +#: ../src/command_system/implementation/standard.py:50 +#, fuzzy +msgid "Hide the chat buttons" +msgstr "Использование: /%s, скрывает кнопки беседы." + +#: ../src/command_system/implementation/standard.py:56 +msgid "Show help on a given command or a list of available commands if -a is given" +msgstr "" + +#: ../src/command_system/implementation/standard.py:83 +#, fuzzy +msgid "Send a message to the contact" +msgstr "Использование: /%s, посылает сообщение контакту" + +#: ../src/command_system/implementation/standard.py:88 +msgid "Send action (in the third person) to the current chat" +msgstr "" + +#: ../src/command_system/implementation/standard.py:93 +msgid "Show logged messages which mention given text" +msgstr "" + +#: ../src/command_system/implementation/standard.py:99 +#, fuzzy, python-format +msgid "%s: Nothing found" +msgstr "%s не найден" + +#: ../src/command_system/implementation/standard.py:105 +msgid "Limit must be an integer" +msgstr "" + +#: ../src/command_system/implementation/standard.py:129 +msgid "" +"\n" +" Set current the status\n" +"\n" +" Status can be given as one of the following values: online, away,\n" +" chat, xa, dnd.\n" +" " +msgstr "" + +#: ../src/command_system/implementation/standard.py:147 +msgid "Set the current status to away" +msgstr "" + +#: ../src/command_system/implementation/standard.py:150 +#: ../src/common/commands.py:109 +#: ../src/common/helpers.py:249 +#: ../src/tooltips.py:194 +msgid "Away" +msgstr "Ушел" + +#: ../src/command_system/implementation/standard.py:161 +msgid "Set the current status to online" +msgstr "" + +#: ../src/command_system/implementation/standard.py:164 +msgid "Available" +msgstr "Доступен" + +#: ../src/command_system/implementation/standard.py:184 +#: ../src/command_system/implementation/standard.py:261 +#, fuzzy +msgid "Clear the text window" +msgstr "Использование: /%s, очищает текстовое окно." + +#: ../src/command_system/implementation/standard.py:189 +#, fuzzy +msgid "Toggle the GPG encryption" +msgstr "Включить Open_PGP шифрование" + +#: ../src/command_system/implementation/standard.py:194 +#, fuzzy +msgid "Send a ping to the contact" +msgstr "Использование: /%s, посылает пинг контакту" + +#: ../src/command_system/implementation/standard.py:197 +#, fuzzy +msgid "Command is not supported for zeroconf accounts" +msgstr "Команда не поддерживается учетной записью zeroconf." + +#: ../src/command_system/implementation/standard.py:201 +msgid "Send DTMF sequence through an open audio session" +msgstr "" + +#: ../src/command_system/implementation/standard.py:204 +#, fuzzy +msgid "No open audio sessions with the contact" +msgstr "Щелкните для просмотра последних бесед с этим человеком" + +#: ../src/command_system/implementation/standard.py:207 +#, fuzzy, python-format +msgid "%s is not a valid tone" +msgstr "%s не является допустимым loglevel" + +#: ../src/command_system/implementation/standard.py:217 +#, fuzzy +msgid "Audio sessions are not available" +msgstr "Подключение недоступно" + +#: ../src/command_system/implementation/standard.py:227 +#, fuzzy +msgid "Video sessions are not available" +msgstr "Соединение недоступно" + +#: ../src/command_system/implementation/standard.py:268 +#, fuzzy +msgid "Change your nickname in a group chat" +msgstr "Изменить ник (Ctrl+N)" + +#. invalid char +#: ../src/command_system/implementation/standard.py:273 +#: ../src/config.py:3392 +#: ../src/dialogs.py:2078 +msgid "Invalid nickname" +msgstr "Неверное имя пользователя" + +#: ../src/command_system/implementation/standard.py:278 +#, fuzzy +msgid "Open a private chat window with a specified occupant" +msgstr "Использование: /%s <ник>, открывает окно привата с указанным посетителем." + +#: ../src/command_system/implementation/standard.py:284 +#: ../src/command_system/implementation/standard.py:293 +#: ../src/command_system/implementation/standard.py:347 +msgid "Nickname not found" +msgstr "Ник не обнаружен" + +#: ../src/command_system/implementation/standard.py:287 +#, fuzzy +msgid "Open a private chat window with a specified occupant and send him a message" +msgstr "Использование: /%s <ник>, открывает окно привата с указанным посетителем." + +#: ../src/command_system/implementation/standard.py:296 +#, fuzzy +msgid "Display or change a group chat topic" +msgstr "Спрашивать перед закрытием окна/вкладки комнаты." + +#: ../src/command_system/implementation/standard.py:304 +msgid "Invite a user to a room for a reason" +msgstr "" + +#: ../src/command_system/implementation/standard.py:307 +#, fuzzy, python-format +msgid "Invited %s to %s" +msgstr "Отправить %s контакту %s" + +#: ../src/command_system/implementation/standard.py:310 +msgid "Join a group chat given by a jid, optionally using given nickname" +msgstr "" + +#: ../src/command_system/implementation/standard.py:327 +msgid "Leave the groupchat, optionally giving a reason, and close tab or window" +msgstr "" + +#: ../src/command_system/implementation/standard.py:332 +msgid "" +"\n" +" Ban user by a nick or a jid from a groupchat\n" +"\n" +" If given nickname is not found it will be treated as a jid.\n" +" " +msgstr "" + +#: ../src/command_system/implementation/standard.py:344 +#, fuzzy +msgid "Kick user by a nick from a groupchat" +msgstr "Вы приглашены в конференцию" + +#: ../src/command_system/implementation/standard.py:351 +#, fuzzy +msgid "Display names of all group chat occupants" +msgstr "Использование: /%s, показывает список присутствующих в комнате." + +#: ../src/command_system/implementation/standard.py:373 +msgid "Forbid an occupant to send you public or private messages" +msgstr "" + +#: ../src/command_system/implementation/standard.py:378 +msgid "Allow an occupant to send you public or private messages" +msgstr "" + #: ../src/common/check_paths.py:38 msgid "creating logs database" msgstr "создается БД истории" @@ -3397,12 +3614,6 @@ msgstr "Готов поболтать" msgid "Online" msgstr "В сети" -#: ../src/common/commands.py:109 -#: ../src/common/helpers.py:243 -#: ../src/tooltips.py:193 -msgid "Away" -msgstr "Ушел" - #: ../src/common/commands.py:110 msgid "Extended away" msgstr "Недоступен (расширенный)" @@ -3445,12 +3656,12 @@ msgstr "Выберите конференции, которые вы хотит #. Make special context menu if group is Groupchats #: ../src/common/commands.py:215 #: ../src/common/contacts.py:128 -#: ../src/common/helpers.py:61 -#: ../src/roster_window.py:817 -#: ../src/roster_window.py:1648 -#: ../src/roster_window.py:1650 -#: ../src/roster_window.py:2514 -#: ../src/roster_window.py:5528 +#: ../src/common/helpers.py:67 +#: ../src/roster_window.py:820 +#: ../src/roster_window.py:1691 +#: ../src/roster_window.py:1693 +#: ../src/roster_window.py:2557 +#: ../src/roster_window.py:5610 msgid "Groupchats" msgstr "Комнаты" @@ -3560,11 +3771,11 @@ msgstr "Список (через пробел) строк (учётных зап #. sorted alphanum #: ../src/common/config.py:108 -#: ../src/common/config.py:501 +#: ../src/common/config.py:504 #: ../src/common/optparser.py:296 #: ../src/common/optparser.py:492 #: ../src/common/optparser.py:526 -#: ../src/gui_interface.py:2639 +#: ../src/gui_interface.py:2668 msgid "default" msgstr "По_умолчанию" @@ -4098,130 +4309,149 @@ msgstr "" msgid "If enabled, Gajim will send your local IPs so your contact can connect to your machine to transfer files." msgstr "" -#: ../src/common/config.py:448 +#: ../src/common/config.py:387 +#, fuzzy +msgid "Latest token for Oauth2 authentication." +msgstr "Анонимная аутентификация" + +#: ../src/common/config.py:388 +#, fuzzy +msgid "client_id for Oauth2 authentication." +msgstr "Анонимная аут_ентификация" + +#: ../src/common/config.py:389 +msgid "redirect_url for Oauth2 authentication." +msgstr "" + +#: ../src/common/config.py:451 msgid "Is OpenPGP enabled for this contact?" msgstr "Используется ли для этого контакта OpenPGP?" -#: ../src/common/config.py:449 +#: ../src/common/config.py:452 msgid "Should Gajim automatically start an encrypted session with this contact when possible?" msgstr "Должен ли Gajim по возможности автоматически начинать для данного контакта зашифрованный сеанс?" -#: ../src/common/config.py:450 #: ../src/common/config.py:453 +#: ../src/common/config.py:456 msgid "Language for which we want to check misspelled words" msgstr "Язык, который используется при проверке правописания" -#: ../src/common/config.py:456 +#: ../src/common/config.py:459 msgid "State whether plugins should be activated on exit (this is saved on Gajim exit). This option SHOULD NOT be used to (de)activate plug-ins. Use GUI instead." msgstr "Состояние модулей при выходе(это сохраняется при выключении Gajim). Эта опция НЕ ДОЛЖНА использоваться для включения или выключения модулей. Используйте графический интерфейс для этого." -#: ../src/common/config.py:461 +#: ../src/common/config.py:464 #: ../src/common/pep.py:157 msgid "Sleeping" msgstr "Сплю" -#: ../src/common/config.py:462 +#: ../src/common/config.py:465 msgid "Back soon" msgstr "Скоро буду" -#: ../src/common/config.py:462 +#: ../src/common/config.py:465 msgid "Back in some minutes." msgstr "Вернусь через несколько минут" -#: ../src/common/config.py:463 +#: ../src/common/config.py:466 #: ../src/common/pep.py:127 msgid "Eating" msgstr "Ем" -#: ../src/common/config.py:463 +#: ../src/common/config.py:466 msgid "I'm eating, so leave me a message." msgstr "Кушаю, так что оставьте сообщение секретарю." -#: ../src/common/config.py:464 +#: ../src/common/config.py:467 msgid "Movie" msgstr "В кино" -#: ../src/common/config.py:464 +#: ../src/common/config.py:467 msgid "I'm watching a movie." msgstr "Смотрю кино" -#: ../src/common/config.py:465 +#: ../src/common/config.py:468 #: ../src/common/pep.py:186 msgid "Working" msgstr "Работаю" -#: ../src/common/config.py:465 +#: ../src/common/config.py:468 msgid "I'm working." msgstr "Работаю" -#: ../src/common/config.py:466 +#: ../src/common/config.py:469 msgid "Phone" msgstr "Телефон" -#: ../src/common/config.py:466 +#: ../src/common/config.py:469 msgid "I'm on the phone." msgstr "Говорю по телефону" -#: ../src/common/config.py:467 +#: ../src/common/config.py:470 msgid "Out" msgstr "Вышел" -#: ../src/common/config.py:467 +#: ../src/common/config.py:470 msgid "I'm out enjoying life." msgstr "Наслаждаюсь жизнью, чего и вам желаю." -#: ../src/common/config.py:478 +#: ../src/common/config.py:481 msgid "I'm available." msgstr "Я здесь." -#: ../src/common/config.py:479 +#: ../src/common/config.py:482 msgid "I'm free for chat." msgstr "Я готов поболтать." -#: ../src/common/config.py:480 -#: ../src/config.py:1651 +#: ../src/common/config.py:483 +#: ../src/config.py:1652 msgid "Be right back." msgstr "Скоро буду." -#: ../src/common/config.py:481 +#: ../src/common/config.py:484 msgid "I'm not available." msgstr "Меня нет." -#: ../src/common/config.py:482 +#: ../src/common/config.py:485 msgid "Do not disturb." msgstr "Не беспокоить." -#: ../src/common/config.py:483 -#: ../src/common/config.py:484 +#: ../src/common/config.py:486 +#: ../src/common/config.py:487 msgid "Bye!" msgstr "Пока!" -#: ../src/common/config.py:494 +#: ../src/common/config.py:497 msgid "Sound to play when a group chat message contains one of the words in muc_highlight_words, or when a group chat message contains your nickname." msgstr "Звук, который нужно воспроизвести, когда в MUC появляется сообщение, которое содержит слово из списка muc_highlight_words, или когда сообщение содержит ваш ник." -#: ../src/common/config.py:495 +#: ../src/common/config.py:498 msgid "Sound to play when any MUC message arrives." msgstr "Звук, который нужно проигрывать, когда приходит любое сообщение MUC." -#: ../src/common/config.py:504 +#: ../src/common/config.py:507 #: ../src/common/optparser.py:310 msgid "green" msgstr "зеленый" -#: ../src/common/config.py:508 +#: ../src/common/config.py:511 #: ../src/common/optparser.py:296 msgid "grocery" msgstr "овощной" -#: ../src/common/config.py:512 +#: ../src/common/config.py:515 msgid "human" msgstr "телесный" -#: ../src/common/config.py:516 +#: ../src/common/config.py:519 msgid "marine" msgstr "морской" +#: ../src/common/config.py:526 +#, fuzzy +msgid "Tor" +msgstr "К" + #: ../src/common/connection_handlers_events.py:367 #, python-format msgid "JID %s is not RFC compliant. It will not be added to your roster. Use roster management tools such as http://jru.jabberstudio.org/ to remove it" @@ -4233,22 +4463,23 @@ msgid "unsubscribe request from %s" msgstr "%s хочет отменить подписку" #: ../src/common/connection_handlers_events.py:884 -#: ../src/common/connection_handlers.py:331 -#: ../src/common/connection_handlers.py:936 -#: ../src/common/connection_handlers.py:1048 -#: ../src/common/connection.py:448 -#: ../src/common/logger.py:1129 -#: ../src/gajim.py:391 +#: ../src/common/connection_handlers.py:334 +#: ../src/common/connection_handlers.py:946 +#: ../src/common/connection_handlers.py:1058 +#: ../src/common/connection.py:453 +#: ../src/common/logger.py:1142 +#: ../src/gajim.py:392 +#: ../src/session.py:97 msgid "Disk Write Error" msgstr "Ошибка записи на диск" #: ../src/common/connection_handlers_events.py:888 -#: ../src/common/connection_handlers.py:939 -#: ../src/common/connection_handlers.py:1051 -#: ../src/common/connection.py:452 -#: ../src/common/logger.py:1132 -#: ../src/gajim.py:210 -#: ../src/session.py:102 +#: ../src/common/connection_handlers.py:949 +#: ../src/common/connection_handlers.py:1061 +#: ../src/common/connection.py:457 +#: ../src/common/logger.py:1145 +#: ../src/gajim.py:211 +#: ../src/session.py:101 #, python-format msgid "The database file (%s) cannot be read. Try to repair it (see http://trac.gajim.org/wiki/DatabaseBackup) or remove it (all history will be lost)." msgstr "Файл базы данных (%s) не может быть прочитан. Попробуйте восстановить его(см. http://trac.gajim.org/wiki/DatabaseBackup) или удалить (вся история будет утеряна)." @@ -4264,119 +4495,117 @@ msgstr "Комната была удалена" msgid "You can join this room instead: %s" msgstr "Взамен, вы можете присоединиться к комнате: %s" -#: ../src/common/connection_handlers_events.py:1000 -#: ../src/common/connection_handlers_events.py:1030 -#: ../src/common/connection_handlers_events.py:1044 -#: ../src/common/connection.py:259 -#: ../src/config.py:2148 -#: ../src/config.py:2157 -#: ../src/config.py:2225 -#: ../src/config.py:3661 +#: ../src/common/connection_handlers_events.py:1001 +#: ../src/common/connection_handlers_events.py:1038 +#: ../src/common/connection.py:263 +#: ../src/config.py:2149 +#: ../src/config.py:2158 +#: ../src/config.py:2226 +#: ../src/config.py:3663 #: ../src/dataforms_widget.py:623 -#: ../src/dialogs.py:3090 +#: ../src/dialogs.py:3095 msgid "Invalid Jabber ID" msgstr "Неверный Jabber ID" -#: ../src/common/connection_handlers_events.py:1001 -#: ../src/common/connection_handlers_events.py:1031 -#: ../src/common/connection_handlers_events.py:1045 +#: ../src/common/connection_handlers_events.py:1002 +#: ../src/common/connection_handlers_events.py:1039 msgid "A message from a non-valid JID arrived, it has been ignored." msgstr "Было получено сообщение от неверного JID, оно было проигнорировано." #. ('MSGNOTSENT', account, (jid, ierror_msg, msg, time, session)) -#: ../src/common/connection_handlers_events.py:1071 -#: ../src/gui_interface.py:415 -#: ../src/gui_interface.py:429 +#: ../src/common/connection_handlers_events.py:1064 +#: ../src/gui_interface.py:420 +#: ../src/gui_interface.py:434 #, python-format msgid "error while sending %(message)s ( %(error)s )" msgstr "ошибка при отправке %(message)s ( %(error)s )" -#: ../src/common/connection_handlers_events.py:1502 +#: ../src/common/connection_handlers_events.py:1496 #, python-format msgid "Unknown SSL error: %d" msgstr "Неизвестная ошибка SSL: %d" -#: ../src/common/connection_handlers_events.py:2030 -#: ../src/dialogs.py:2777 +#: ../src/common/connection_handlers_events.py:2028 +#: ../src/dialogs.py:2782 #: ../src/notify.py:263 msgid "New Single Message" msgstr "Новое одиночное сообщение" -#: ../src/common/connection_handlers_events.py:2032 +#: ../src/common/connection_handlers_events.py:2030 #, python-format msgid "New Single Message from %(nickname)s" msgstr "Новое сообщение от %(nickname)s" -#: ../src/common/connection_handlers_events.py:2036 -#: ../src/dialogs.py:2778 +#: ../src/common/connection_handlers_events.py:2034 +#: ../src/dialogs.py:2783 #: ../src/notify.py:264 msgid "New Private Message" msgstr "Новое личное сообщение" -#: ../src/common/connection_handlers_events.py:2038 +#: ../src/common/connection_handlers_events.py:2036 #, python-format msgid "New Private Message from group chat %s" msgstr "Новое личное сообщение из комнаты %s" -#: ../src/common/connection_handlers_events.py:2041 +#: ../src/common/connection_handlers_events.py:2039 #, python-format msgid "%(nickname)s: %(message)s" msgstr "%(nickname)s: %(message)s" -#: ../src/common/connection_handlers_events.py:2044 +#: ../src/common/connection_handlers_events.py:2042 #, python-format msgid "Messaged by %(nickname)s" msgstr "Новое сообщение от %(nickname)s" -#: ../src/common/connection_handlers_events.py:2048 -#: ../src/dialogs.py:2777 +#: ../src/common/connection_handlers_events.py:2046 +#: ../src/dialogs.py:2782 #: ../src/notify.py:263 msgid "New Message" msgstr "Новое сообщение" -#: ../src/common/connection_handlers_events.py:2050 +#: ../src/common/connection_handlers_events.py:2048 #, python-format msgid "New Message from %(nickname)s" msgstr "Новое сообщение от %(nickname)s" -#: ../src/common/connection_handlers_events.py:2179 +#: ../src/common/connection_handlers_events.py:2177 #, python-format msgid "%(nick)s Changed Status" msgstr "%(nick)s меняет статус" -#: ../src/common/connection_handlers_events.py:2181 +#: ../src/common/connection_handlers_events.py:2179 #: ../src/groupchat_control.py:205 #: ../src/groupchat_control.py:1766 -#: ../src/history_window.py:447 +#: ../src/history_window.py:448 #, python-format msgid "%(nick)s is now %(status)s" msgstr "%(nick)s теперь %(status)s" -#: ../src/common/connection_handlers_events.py:2186 -#: ../src/dialogs.py:2789 +#: ../src/common/connection_handlers_events.py:2184 +#: ../src/dialogs.py:2794 #: ../src/notify.py:277 msgid "Contact Changed Status" msgstr "Контакт изменит статус" -#: ../src/common/connection_handlers_events.py:2188 +#: ../src/common/connection_handlers_events.py:2186 #, python-format msgid "%(nickname)s Signed In" msgstr "%(nickname)s подключается" #. default value -#: ../src/common/connection_handlers_events.py:2193 -#: ../src/dialogs.py:2773 +#: ../src/common/connection_handlers_events.py:2191 +#: ../src/dialogs.py:2778 #: ../src/notify.py:259 msgid "Contact Signed In" msgstr "Контакт подключился" -#: ../src/common/connection_handlers_events.py:2195 +#: ../src/common/connection_handlers_events.py:2193 #, python-format msgid "%(nickname)s Signed Out" msgstr "%(nickname)s отключается" -#: ../src/common/connection_handlers_events.py:2200 -#: ../src/dialogs.py:2775 +#: ../src/common/connection_handlers_events.py:2198 +#: ../src/dialogs.py:2780 #: ../src/notify.py:261 msgid "Contact Signed Out" msgstr "Контакт отключился" @@ -4391,189 +4620,188 @@ msgstr "Не могу загрузить модуль «idle»" msgid "Registration information for transport %s has not arrived in time" msgstr "Данные о регистрации для транспорта %s не пришли вовремя." -#: ../src/common/connection_handlers.py:128 +#: ../src/common/connection_handlers.py:129 msgid "Registration succeeded" msgstr "Регистрация завершена" -#: ../src/common/connection_handlers.py:129 +#: ../src/common/connection_handlers.py:130 #, python-format msgid "Registration with agent %s succeeded" msgstr "Регистрация сервиса %s завершена успешно" -#: ../src/common/connection_handlers.py:137 +#: ../src/common/connection_handlers.py:139 msgid "Registration failed" msgstr "Ошибка регистрации" -#: ../src/common/connection_handlers.py:137 +#: ../src/common/connection_handlers.py:140 #, python-format msgid "Registration with agent %(agent)s failed with error %(error)s: %(error_msg)s" msgstr "Регистрация сервиса %(agent)s завершилась ошибкой: %(error)s: %(error_msg)s" -#: ../src/common/connection_handlers.py:567 -#: ../src/common/connection.py:1519 +#: ../src/common/connection_handlers.py:571 +#: ../src/common/connection.py:1543 msgid "Invisibility not supported" msgstr "Невидимость не поддерживается" -#: ../src/common/connection_handlers.py:568 -#: ../src/common/connection.py:1520 +#: ../src/common/connection_handlers.py:572 +#: ../src/common/connection.py:1544 #, python-format msgid "Account %s doesn't support invisibility." msgstr "Учетная запись %s не поддерживает невидимость." -#: ../src/common/connection_handlers.py:1710 +#: ../src/common/connection_handlers.py:1720 msgid "I would like to add you to my roster." msgstr "Вы не возражаете, если я добавлю Вас в свой ростер?" -#: ../src/common/connection.py:68 +#: ../src/common/connection.py:70 msgid "Unable to get issuer certificate" msgstr "Не удалось получить сертификат издателя" -#: ../src/common/connection.py:69 +#: ../src/common/connection.py:71 msgid "Unable to get certificate CRL" msgstr "Не удалось получить сертификат CRL" -#: ../src/common/connection.py:70 +#: ../src/common/connection.py:72 msgid "Unable to decrypt certificate's signature" msgstr "Не удалось расшифровать подпись сертификата" -#: ../src/common/connection.py:71 +#: ../src/common/connection.py:73 msgid "Unable to decrypt CRL's signature" msgstr "Не удалось расшифровать подпись CRL" -#: ../src/common/connection.py:72 +#: ../src/common/connection.py:74 msgid "Unable to decode issuer public key" msgstr "Не удалось расшифровать открытый ключ издателя" -#: ../src/common/connection.py:73 +#: ../src/common/connection.py:75 msgid "Certificate signature failure" msgstr "Ошибка подписи сертификата" -#: ../src/common/connection.py:74 +#: ../src/common/connection.py:76 msgid "CRL signature failure" msgstr "Ошибка подписи CRL" -#: ../src/common/connection.py:75 +#: ../src/common/connection.py:77 msgid "Certificate is not yet valid" msgstr "Сертификат ещё не действителен" -#: ../src/common/connection.py:76 +#: ../src/common/connection.py:78 msgid "Certificate has expired" msgstr "Сертификат просрочен" -#: ../src/common/connection.py:77 +#: ../src/common/connection.py:79 msgid "CRL is not yet valid" msgstr "CRL ещё не действителен" -#: ../src/common/connection.py:78 +#: ../src/common/connection.py:80 msgid "CRL has expired" msgstr "CRL просрочен" -#: ../src/common/connection.py:79 +#: ../src/common/connection.py:81 msgid "Format error in certificate's notBefore field" msgstr "Ошибка в поле notBefore сертификата" -#: ../src/common/connection.py:80 +#: ../src/common/connection.py:82 msgid "Format error in certificate's notAfter field" msgstr "Ошибка в поле notAfter сертификата" -#: ../src/common/connection.py:81 +#: ../src/common/connection.py:83 msgid "Format error in CRL's lastUpdate field" msgstr "Ошибка в поле «lastUpdate» CRL" -#: ../src/common/connection.py:82 +#: ../src/common/connection.py:84 msgid "Format error in CRL's nextUpdate field" msgstr "Ошибка в поле «nextUpdate» CRL" -#: ../src/common/connection.py:83 +#: ../src/common/connection.py:85 msgid "Out of memory" msgstr "Недостаточно памяти" -#: ../src/common/connection.py:84 +#: ../src/common/connection.py:86 msgid "Self signed certificate" msgstr "Сертификат подписан самим владельцем." -#: ../src/common/connection.py:85 +#: ../src/common/connection.py:87 msgid "Self signed certificate in certificate chain" msgstr "Самостоятельно подписанный сертификат в цепочке сертификатов" -#: ../src/common/connection.py:86 +#: ../src/common/connection.py:88 msgid "Unable to get local issuer certificate" msgstr "Не удалось получить сертификат локального издателя" -#: ../src/common/connection.py:87 +#: ../src/common/connection.py:89 msgid "Unable to verify the first certificate" msgstr "Не удалось подтвердить первый сертификат" -#: ../src/common/connection.py:88 +#: ../src/common/connection.py:90 msgid "Certificate chain too long" msgstr "Цепочка сертификатов слишком длинная" -#: ../src/common/connection.py:89 +#: ../src/common/connection.py:91 msgid "Certificate revoked" msgstr "Сертификат аннулирован" -#: ../src/common/connection.py:90 +#: ../src/common/connection.py:92 msgid "Invalid CA certificate" msgstr "Недопустимый сертификат CA" -#: ../src/common/connection.py:91 +#: ../src/common/connection.py:93 msgid "Path length constraint exceeded" msgstr "Превышено ограничение по длине пути" -#: ../src/common/connection.py:92 +#: ../src/common/connection.py:94 msgid "Unsupported certificate purpose" msgstr "Неподдерживаемое назначение сертификата" -#: ../src/common/connection.py:93 +#: ../src/common/connection.py:95 msgid "Certificate not trusted" msgstr "Сертификат не является доверенным" -#: ../src/common/connection.py:94 +#: ../src/common/connection.py:96 msgid "Certificate rejected" msgstr "Сертификат отклонен" -#: ../src/common/connection.py:95 +#: ../src/common/connection.py:97 msgid "Subject issuer mismatch" msgstr "Несоответствие поставщика сертификата" -#: ../src/common/connection.py:96 +#: ../src/common/connection.py:98 msgid "Authority and subject key identifier mismatch" msgstr "Идентификаторы ключа центра сертификации и владельца не совпадают" -#: ../src/common/connection.py:97 +#: ../src/common/connection.py:99 msgid "Authority and issuer serial number mismatch" msgstr "Идентификаторы ключа центра сертификации и издателя не совпадают" -#: ../src/common/connection.py:98 +#: ../src/common/connection.py:100 msgid "Key usage does not include certificate signing" msgstr "Назначение ключа не включает подписывание сертификата" -#: ../src/common/connection.py:99 +#: ../src/common/connection.py:101 msgid "Application verification failure" msgstr "Ошибка при проверке приложения" -#: ../src/common/connection.py:260 -#: ../src/dialogs.py:3091 +#: ../src/common/connection.py:264 +#: ../src/dialogs.py:3096 #, python-format msgid "It is not possible to send a message to %s, this JID is not valid." msgstr "Не удалось передать сообщение %s — этот JID неверен." -#: ../src/common/connection.py:282 +#: ../src/common/connection.py:286 msgid "Neither the remote presence is signed, nor a key was assigned." msgstr "Ни удаленное присутствие не подписано, ни ключ не присвоен." -#: ../src/common/connection.py:285 +#: ../src/common/connection.py:289 #, python-format msgid "The contact's key (%s) does not match the key assigned in Gajim." msgstr "Ключ (%s) контакта не соответствует ключу, присвоенному в Gajim." -#. we're not english -#. one in locale and one en -#: ../src/common/connection.py:337 +#. we're not english: one in locale and one en +#: ../src/common/connection.py:342 msgid "[This message is *encrypted* (See :XEP:`27`]" msgstr "[Это сообщение *зашифровано* (см. :XEP:`27`]" -#: ../src/common/connection.py:435 +#: ../src/common/connection.py:440 #, python-format msgid "" "Subject: %(subject)s\n" @@ -4582,78 +4810,77 @@ msgstr "" "Тема: %(subject)s\n" "%(message)s" -#: ../src/common/connection.py:845 +#: ../src/common/connection.py:853 #, python-format msgid "Connection with account \"%s\" has been lost" msgstr "Связь с учетной записью «%s» была потеряна" -#: ../src/common/connection.py:846 +#: ../src/common/connection.py:854 msgid "Reconnect manually." msgstr "Переподключаться вручную." #. it's a new account #. wrong answer -#: ../src/common/connection.py:857 +#: ../src/common/connection.py:865 #, python-format msgid "Server %(name)s answered wrongly to register request: %(error)s" msgstr "Сервер %(name)s неверно ответил на запрос о регистрации: %(error)s" #. requested config has changed since first connection -#: ../src/common/connection.py:899 +#: ../src/common/connection.py:907 #, python-format msgid "Server %s provided a different registration form" msgstr "Сервер %s предоставил другую регистрационную форму" -#. wrong answer -#: ../src/common/connection.py:915 +#: ../src/common/connection.py:924 msgid "Invalid answer" msgstr "Неверный ответ" -#: ../src/common/connection.py:916 +#: ../src/common/connection.py:925 #, python-format msgid "Transport %(name)s answered wrongly to register request: %(error)s" msgstr "Транспорт %(name)s неверно ответил на запрос о регистрации: %(error)s" -#: ../src/common/connection.py:1191 -#: ../src/common/connection.py:1331 -#: ../src/common/connection.py:1954 -#: ../src/common/zeroconf/connection_zeroconf.py:204 +#: ../src/common/connection.py:1200 +#: ../src/common/connection.py:1352 +#: ../src/common/connection.py:1979 +#: ../src/common/zeroconf/connection_zeroconf.py:205 #, python-format msgid "Could not connect to \"%s\"" msgstr "Не могу соединиться с «%s»" -#: ../src/common/connection.py:1192 -#: ../src/gui_interface.py:524 +#: ../src/common/connection.py:1201 +#: ../src/gui_interface.py:529 msgid "Check your connection or try again later." msgstr "Проверьте настройки сети или попробуйте еще раз позже." -#: ../src/common/connection.py:1197 +#: ../src/common/connection.py:1206 #, python-format msgid "Server replied: %s" msgstr "Сервер ответил: %s" -#: ../src/common/connection.py:1210 +#: ../src/common/connection.py:1221 msgid "Connection to proxy failed" msgstr "Соединение с прокси разорвалось" -#: ../src/common/connection.py:1248 -#: ../src/common/connection.py:1310 +#: ../src/common/connection.py:1259 +#: ../src/common/connection.py:1331 #, python-format msgid "Could not connect to account %s" msgstr "Не могу соединиться с %s" -#: ../src/common/connection.py:1249 -#: ../src/common/connection.py:1311 +#: ../src/common/connection.py:1260 +#: ../src/common/connection.py:1332 #, python-format msgid "Connection with account %s has been lost. Retry connecting." msgstr "Связь с учетной записью %s была потеряна.Попытка подключения." -#: ../src/common/connection.py:1274 +#: ../src/common/connection.py:1285 #, python-format msgid "The authenticity of the %s certificate could be invalid." msgstr "Достоверность сертификата %s может быть недействительной." -#: ../src/common/connection.py:1277 +#: ../src/common/connection.py:1288 #, python-format msgid "" "\n" @@ -4662,7 +4889,7 @@ msgstr "" "\n" "Ошибка SSL: <b>%s</b>" -#: ../src/common/connection.py:1279 +#: ../src/common/connection.py:1290 #, python-format msgid "" "\n" @@ -4671,69 +4898,76 @@ msgstr "" "\n" "Неизвестная ошибка SSL: %d" -#: ../src/common/connection.py:1332 +#: ../src/common/connection.py:1313 +#, fuzzy, python-format +msgid "" +"The authenticity of the %s certificate could be invalid.\n" +"The certificate does not cover this domain." +msgstr "Достоверность сертификата %s может быть недействительной." + +#: ../src/common/connection.py:1353 msgid "Check your connection or try again later" msgstr "Проверьте настройки сети или попробуйте еще раз позже" -#: ../src/common/connection.py:1366 +#: ../src/common/connection.py:1388 #, python-format msgid "Authentication failed with \"%s\"" msgstr "Ошибка аутентификации с «%s»" -#: ../src/common/connection.py:1368 +#: ../src/common/connection.py:1389 msgid "Please check your login and password for correctness." msgstr "Проверьте правильность логина и пароля." -#: ../src/common/connection.py:1441 +#: ../src/common/connection.py:1464 msgid "Error while removing privacy list" msgstr "Ошибка при удалении списка доступа" -#: ../src/common/connection.py:1442 +#: ../src/common/connection.py:1465 #, python-format msgid "Privacy list %s has not been removed. It is maybe active in one of your connected resources. Deactivate it and try again." msgstr "Список доступа %s не может быть удален. Возможно, он используется одним из ваших активных ресурсов. Отключите ресурс и попробуйте снова." -#: ../src/common/connection.py:1821 +#: ../src/common/connection.py:1846 #, python-format msgid "Sent contact: \"%s\" (%s)" msgstr "Контакт для отправки: «%s» (%s)" -#: ../src/common/connection.py:1824 +#: ../src/common/connection.py:1849 msgid "Sent contacts:" msgstr "Контакты для отправки:" -#: ../src/common/connection.py:1971 -#: ../src/common/connection.py:1994 +#: ../src/common/connection.py:1996 +#: ../src/common/connection.py:2019 msgid "Not fetched because of invisible status" msgstr "Нельзя получить из-за невидимости" -#: ../src/common/connection.py:2525 +#: ../src/common/connection.py:2579 msgid "Unregister failed" msgstr "Ошибка отказа от регистрации" -#: ../src/common/connection.py:2526 +#: ../src/common/connection.py:2580 #, python-format msgid "Unregistration with server %(server)s failed: %(error)s" msgstr "Отказ от регистрации на сервере %(server)s завершился ошибкой: %(error)s" #: ../src/common/contacts.py:126 -#: ../src/common/helpers.py:61 -#: ../src/gui_interface.py:467 +#: ../src/common/helpers.py:67 +#: ../src/gui_interface.py:472 msgid "Observers" msgstr "Наблюдатели" #: ../src/common/contacts.py:130 #: ../src/common/contacts.py:358 -#: ../src/common/helpers.py:61 +#: ../src/common/helpers.py:67 #: ../src/disco.py:120 #: ../src/disco.py:121 #: ../src/disco.py:1517 -#: ../src/roster_window.py:856 -#: ../src/roster_window.py:1552 -#: ../src/roster_window.py:1640 -#: ../src/roster_window.py:1642 -#: ../src/roster_window.py:1804 -#: ../src/roster_window.py:2482 +#: ../src/roster_window.py:859 +#: ../src/roster_window.py:1579 +#: ../src/roster_window.py:1683 +#: ../src/roster_window.py:1685 +#: ../src/roster_window.py:1847 +#: ../src/roster_window.py:2525 msgid "Transports" msgstr "Транспорты" @@ -4960,240 +5194,240 @@ msgstr "Конец недели" msgid "Weekend!" msgstr "Выходные!" -#: ../src/common/helpers.py:152 +#: ../src/common/helpers.py:158 msgid "Username must be between 1 and 1023 chars" msgstr "Имя должно быть от 1 до 1023 символов" -#: ../src/common/helpers.py:157 +#: ../src/common/helpers.py:163 msgid "Invalid character in username." msgstr "Неверный символ в имени пользователя." -#: ../src/common/helpers.py:163 +#: ../src/common/helpers.py:169 msgid "Server must be between 1 and 1023 chars" msgstr "Имя сервера должно быть от 1 до 1023 символов" -#: ../src/common/helpers.py:168 +#: ../src/common/helpers.py:174 msgid "Invalid character in hostname." msgstr "Неверный символ в имени сервера" -#: ../src/common/helpers.py:170 +#: ../src/common/helpers.py:176 msgid "Server address required." msgstr "Требуется адрес сервера." -#: ../src/common/helpers.py:174 +#: ../src/common/helpers.py:180 msgid "Resource must be between 1 and 1023 chars" msgstr "Имя ресурса должно быть от 1 до 1023 символов" -#: ../src/common/helpers.py:179 +#: ../src/common/helpers.py:185 msgid "Invalid character in resource." msgstr "Неверный символ в ресурсе" -#: ../src/common/helpers.py:219 +#: ../src/common/helpers.py:225 msgid "_Busy" msgstr "_Занят" -#: ../src/common/helpers.py:221 -#: ../src/tooltips.py:195 +#: ../src/common/helpers.py:227 +#: ../src/tooltips.py:196 msgid "Busy" msgstr "Занят" -#: ../src/common/helpers.py:224 +#: ../src/common/helpers.py:230 msgid "_Not Available" msgstr "_Недоступен" -#: ../src/common/helpers.py:226 -#: ../src/tooltips.py:197 +#: ../src/common/helpers.py:232 +#: ../src/tooltips.py:198 msgid "Not Available" msgstr "Недоступен" -#: ../src/common/helpers.py:229 +#: ../src/common/helpers.py:235 msgid "_Free for Chat" msgstr "_Готов поболтать" -#: ../src/common/helpers.py:231 -#: ../src/tooltips.py:191 +#: ../src/common/helpers.py:237 +#: ../src/tooltips.py:192 msgid "Free for Chat" msgstr "Готов поболтать" -#: ../src/common/helpers.py:234 +#: ../src/common/helpers.py:240 msgid "?user status:_Available" msgstr "Д_оступен" -#: ../src/common/helpers.py:236 -#: ../src/tooltips.py:189 +#: ../src/common/helpers.py:242 +#: ../src/tooltips.py:190 msgid "?user status:Available" msgstr "Доступен" -#: ../src/common/helpers.py:238 +#: ../src/common/helpers.py:244 msgid "Connecting" msgstr "Соединяюсь" -#: ../src/common/helpers.py:241 +#: ../src/common/helpers.py:247 msgid "A_way" msgstr "_Ушел" -#: ../src/common/helpers.py:246 +#: ../src/common/helpers.py:252 msgid "_Offline" msgstr "_Отключен" -#: ../src/common/helpers.py:248 -#: ../src/tooltips.py:199 +#: ../src/common/helpers.py:254 +#: ../src/tooltips.py:200 msgid "Offline" msgstr "Отключен" -#: ../src/common/helpers.py:251 +#: ../src/common/helpers.py:257 msgid "_Invisible" msgstr "_Невидимка" -#: ../src/common/helpers.py:253 +#: ../src/common/helpers.py:259 msgid "Invisible" msgstr "Невидимка" -#: ../src/common/helpers.py:257 +#: ../src/common/helpers.py:263 msgid "?contact has status:Unknown" msgstr "Неизвестен" -#: ../src/common/helpers.py:259 +#: ../src/common/helpers.py:265 msgid "?contact has status:Has errors" msgstr "Ошибка" -#: ../src/common/helpers.py:264 +#: ../src/common/helpers.py:270 msgid "?Subscription we already have:None" msgstr "Нет" -#: ../src/common/helpers.py:266 +#: ../src/common/helpers.py:272 msgid "To" msgstr "К" -#: ../src/common/helpers.py:268 +#: ../src/common/helpers.py:274 msgid "From" msgstr "От" -#: ../src/common/helpers.py:270 +#: ../src/common/helpers.py:276 msgid "Both" msgstr "Оба" -#: ../src/common/helpers.py:278 +#: ../src/common/helpers.py:284 msgid "?Ask (for Subscription):None" msgstr "Нет" -#: ../src/common/helpers.py:280 +#: ../src/common/helpers.py:286 msgid "Subscribe" msgstr "Подписаться" -#: ../src/common/helpers.py:289 +#: ../src/common/helpers.py:295 msgid "?Group Chat Contact Role:None" msgstr "Отсутствует" -#: ../src/common/helpers.py:292 +#: ../src/common/helpers.py:298 msgid "Moderators" msgstr "Модераторы" -#: ../src/common/helpers.py:294 +#: ../src/common/helpers.py:300 msgid "Moderator" msgstr "Модератор" -#: ../src/common/helpers.py:297 +#: ../src/common/helpers.py:303 msgid "Participants" msgstr "Участники" -#: ../src/common/helpers.py:299 +#: ../src/common/helpers.py:305 msgid "Participant" msgstr "Участник" -#: ../src/common/helpers.py:302 +#: ../src/common/helpers.py:308 msgid "Visitors" msgstr "Посетители" -#: ../src/common/helpers.py:304 +#: ../src/common/helpers.py:310 msgid "Visitor" msgstr "Посетитель" -#: ../src/common/helpers.py:310 -#: ../src/tooltips.py:210 +#: ../src/common/helpers.py:316 +#: ../src/tooltips.py:211 msgid "?Group Chat Contact Affiliation:None" msgstr "?Group Chat Contact Affiliation:Отсутствует" -#: ../src/common/helpers.py:312 -#: ../src/tooltips.py:216 +#: ../src/common/helpers.py:318 +#: ../src/tooltips.py:217 msgid "Owner" msgstr "Владелец" -#: ../src/common/helpers.py:314 -#: ../src/tooltips.py:214 +#: ../src/common/helpers.py:320 +#: ../src/tooltips.py:215 msgid "Administrator" msgstr "Администратор" -#: ../src/common/helpers.py:316 -#: ../src/tooltips.py:212 +#: ../src/common/helpers.py:322 +#: ../src/tooltips.py:213 msgid "Member" msgstr "Участник" -#: ../src/common/helpers.py:355 +#: ../src/common/helpers.py:361 msgid "is paying attention to the conversation" msgstr "читает сообщение" -#: ../src/common/helpers.py:357 +#: ../src/common/helpers.py:363 msgid "is doing something else" msgstr "занят чем-то еще" -#: ../src/common/helpers.py:359 +#: ../src/common/helpers.py:365 msgid "is composing a message..." msgstr "печатает сообщение..." #. paused means he or she was composing but has stopped for a while -#: ../src/common/helpers.py:362 +#: ../src/common/helpers.py:368 msgid "paused composing a message" msgstr "перестал печатать сообщение" -#: ../src/common/helpers.py:364 +#: ../src/common/helpers.py:370 msgid "has closed the chat window or tab" msgstr "закрыл окно чата или вкладку" #. GiB means gibibyte -#: ../src/common/helpers.py:639 +#: ../src/common/helpers.py:648 #, python-format msgid "%s GiB" msgstr "%s GiB" #. GB means gigabyte -#: ../src/common/helpers.py:642 +#: ../src/common/helpers.py:651 #, python-format msgid "%s GB" msgstr "%s GB" #. MiB means mibibyte -#: ../src/common/helpers.py:646 +#: ../src/common/helpers.py:655 #, python-format msgid "%s MiB" msgstr "%s MiB" #. MB means megabyte -#: ../src/common/helpers.py:649 +#: ../src/common/helpers.py:658 #, python-format msgid "%s MB" msgstr "%s MB" #. KiB means kibibyte -#: ../src/common/helpers.py:653 +#: ../src/common/helpers.py:662 #, python-format msgid "%s KiB" msgstr "%s KiB" #. KB means kilo bytes -#: ../src/common/helpers.py:656 +#: ../src/common/helpers.py:665 #, python-format msgid "%s KB" msgstr "%s KB" #. B means bytes -#: ../src/common/helpers.py:659 +#: ../src/common/helpers.py:668 #, python-format msgid "%s B" msgstr "%s B" -#: ../src/common/helpers.py:1110 -#: ../src/common/helpers.py:1117 +#: ../src/common/helpers.py:1119 +#: ../src/common/helpers.py:1126 #, python-format msgid "%d message pending" msgid_plural "%d messages pending" @@ -5201,24 +5435,24 @@ msgstr[0] "%d пропущенное сообщение" msgstr[1] "%d пропущенных сообщения" msgstr[2] "%d пропущенных сообщений" -#: ../src/common/helpers.py:1123 +#: ../src/common/helpers.py:1132 #, python-format msgid " from room %s" msgstr " в комнате %s" -#: ../src/common/helpers.py:1126 -#: ../src/common/helpers.py:1143 +#: ../src/common/helpers.py:1135 +#: ../src/common/helpers.py:1152 #, python-format msgid " from user %s" msgstr " от пользователя %s" -#: ../src/common/helpers.py:1128 +#: ../src/common/helpers.py:1137 #, python-format msgid " from %s" msgstr " от %s" -#: ../src/common/helpers.py:1135 -#: ../src/common/helpers.py:1141 +#: ../src/common/helpers.py:1144 +#: ../src/common/helpers.py:1150 #, python-format msgid "%d event pending" msgid_plural "%d events pending" @@ -5226,21 +5460,41 @@ msgstr[0] "%d событие пропущено" msgstr[1] "%d события пропущено" msgstr[2] "%d событий пропущено" -#: ../src/common/helpers.py:1173 +#: ../src/common/helpers.py:1182 #, python-format msgid "Gajim - %s" msgstr "Gajim — %s" -#: ../src/common/helpers.py:1352 +#: ../src/common/helpers.py:1361 msgid "Hello, I am $name." msgstr "Привет, я $name." -#: ../src/common/jingle_rtp.py:107 +#: ../src/common/helpers.py:1471 +#: ../src/common/helpers.py:1480 +#: ../src/common/helpers.py:1534 +msgid "Timeout loading image" +msgstr "Не могу загрузить изображение" + +#: ../src/common/helpers.py:1490 +#: ../src/common/helpers.py:1532 +msgid "Image is too big" +msgstr "Изображение слишком большое" + +#: ../src/common/helpers.py:1500 +#, fuzzy +msgid "PyCURL is not installed" +msgstr "CRL ещё не действителен" + +#: ../src/common/helpers.py:1536 +msgid "Error loading image" +msgstr "Ошибка загрузки изображения" + +#: ../src/common/jingle_rtp.py:109 #, python-format msgid "%s configuration error" msgstr "ошибка конфигурации %s" -#: ../src/common/jingle_rtp.py:108 +#: ../src/common/jingle_rtp.py:110 #, python-format msgid "" "Couldn't setup %s. Check your configuration.\n" @@ -5259,11 +5513,11 @@ msgstr "" "Ошибка:\n" "%s" -#: ../src/common/jingle_rtp.py:205 +#: ../src/common/jingle_rtp.py:208 msgid "GStreamer error" msgstr "Ошибка GStreamer" -#: ../src/common/jingle_rtp.py:206 +#: ../src/common/jingle_rtp.py:208 #, python-format msgid "" "Error: %s\n" @@ -5272,19 +5526,19 @@ msgstr "" "Ошибка: %s\n" "Отладка: %s" -#: ../src/common/jingle_rtp.py:335 +#: ../src/common/jingle_rtp.py:338 msgid "audio input" msgstr "звуковой вход" -#: ../src/common/jingle_rtp.py:338 +#: ../src/common/jingle_rtp.py:341 msgid "audio output" msgstr "звуковой выход" -#: ../src/common/jingle_rtp.py:381 +#: ../src/common/jingle_rtp.py:384 msgid "video input" msgstr "видео вход" -#: ../src/common/jingle_rtp.py:390 +#: ../src/common/jingle_rtp.py:393 msgid "video output" msgstr "видео выход" @@ -5362,10 +5616,13 @@ msgid "X Window System (without Xv)" msgstr "Система X Window (без Xv)" #. we talk about a file +#. we talk about file #: ../src/common/optparser.py:53 +#: ../src/gtkgui_helpers.py:203 +#: ../src/gtkgui_helpers.py:219 #, python-format -msgid "error: cannot open %s for reading" -msgstr "ошибка: не могу открыть %s для чтения" +msgid "Error: cannot open %s for reading" +msgstr "Ошибка: не могу открыть %s для чтения" #: ../src/common/optparser.py:305 #: ../src/common/optparser.py:306 @@ -6046,7 +6303,7 @@ msgstr "Возможно, запущен ещё один экземпляр Gaji msgid "[This is part of an encrypted session. If you see this message, something went wrong.]" msgstr "[Это часть зашифрованного сообщения. Если вы видите это сообщение, возможно, произошла ошибка.]" -#: ../src/common/zeroconf/connection_zeroconf.py:192 +#: ../src/common/zeroconf/connection_zeroconf.py:193 msgid "Avahi error" msgstr "Ошибка Avahi" @@ -6061,45 +6318,45 @@ msgstr "" "%s\n" "Возможно, обмен локальными сообщениями работает не верно." -#: ../src/common/zeroconf/connection_zeroconf.py:205 +#: ../src/common/zeroconf/connection_zeroconf.py:206 msgid "Please check if Avahi or Bonjour is installed." msgstr "Удостоверьтесь, что Avahi или Bonjour установлен." -#: ../src/common/zeroconf/connection_zeroconf.py:215 -#: ../src/common/zeroconf/connection_zeroconf.py:219 +#: ../src/common/zeroconf/connection_zeroconf.py:216 +#: ../src/common/zeroconf/connection_zeroconf.py:220 msgid "Could not start local service" msgstr "Не могу запустить локальный сервис" -#: ../src/common/zeroconf/connection_zeroconf.py:216 +#: ../src/common/zeroconf/connection_zeroconf.py:217 #, python-format msgid "Unable to bind to port %d." msgstr "Не могу использовать порт %d." -#: ../src/common/zeroconf/connection_zeroconf.py:220 -#: ../src/common/zeroconf/connection_zeroconf.py:304 -#: ../src/common/zeroconf/connection_zeroconf.py:317 -#: ../src/common/zeroconf/connection_zeroconf.py:333 +#: ../src/common/zeroconf/connection_zeroconf.py:221 +#: ../src/common/zeroconf/connection_zeroconf.py:305 +#: ../src/common/zeroconf/connection_zeroconf.py:318 +#: ../src/common/zeroconf/connection_zeroconf.py:334 msgid "Please check if avahi-daemon is running." msgstr "Удостоверьтесь, что демон avahi запущен." -#: ../src/common/zeroconf/connection_zeroconf.py:303 -#: ../src/common/zeroconf/connection_zeroconf.py:316 -#: ../src/common/zeroconf/connection_zeroconf.py:332 +#: ../src/common/zeroconf/connection_zeroconf.py:304 +#: ../src/common/zeroconf/connection_zeroconf.py:317 +#: ../src/common/zeroconf/connection_zeroconf.py:333 #, python-format msgid "Could not change status of account \"%s\"" msgstr "Не могу изменить статус учётной записи «%s»" -#: ../src/common/zeroconf/connection_zeroconf.py:351 -#: ../src/common/zeroconf/connection_zeroconf.py:390 +#: ../src/common/zeroconf/connection_zeroconf.py:352 +#: ../src/common/zeroconf/connection_zeroconf.py:392 msgid "Your message could not be sent." msgstr "Ваше сообщение не может быть отправлено." -#: ../src/common/zeroconf/connection_zeroconf.py:365 -#: ../src/common/zeroconf/connection_zeroconf.py:404 +#: ../src/common/zeroconf/connection_zeroconf.py:366 +#: ../src/common/zeroconf/connection_zeroconf.py:406 msgid "Contact is offline. Your message could not be sent." msgstr "Контакт не в сети. Отправить сообщение не удалось." -#: ../src/common/zeroconf/connection_zeroconf.py:431 +#: ../src/common/zeroconf/connection_zeroconf.py:433 msgid "Connection to host could not be established: Timeout while sending data." msgstr "Не удалось соединиться с хостом: истекло время ожидания." @@ -6109,251 +6366,251 @@ msgstr "Не удалось соединиться с хостом: истекл msgid "Error while adding service. %s" msgstr "Ошибка при добавлении службы. %s" -#: ../src/config.py:406 +#: ../src/config.py:407 msgid "Default Message" msgstr "Сообщение по умолчанию" -#: ../src/config.py:415 +#: ../src/config.py:416 msgid "Enabled" msgstr "Включено" -#: ../src/config.py:468 -#: ../src/config.py:472 -#: ../src/config.py:3157 +#: ../src/config.py:469 +#: ../src/config.py:473 +#: ../src/config.py:3159 msgid "Default" msgstr "По умолчанию" -#: ../src/config.py:756 +#: ../src/config.py:757 #: ../src/dialogs.py:1493 #, python-format msgid "Dictionary for lang %s not available" msgstr "Нет словаря для языка %s" -#: ../src/config.py:757 +#: ../src/config.py:758 #, python-format msgid "You have to install %s dictionary to use spellchecking, or choose another language by setting the speller_language option." msgstr "Чтобы воспользоваться проверкой правописания, установите словарь для языка %s или выберите другой язык, исправив настройку speller_language." -#: ../src/config.py:1237 +#: ../src/config.py:1238 msgid "status message title" msgstr "заголовок сообщения о статусе" -#: ../src/config.py:1237 +#: ../src/config.py:1238 msgid "status message text" msgstr "текст сообщения о статусе" #. Name column -#: ../src/config.py:1565 -#: ../src/dialogs.py:2534 -#: ../src/dialogs.py:2601 -#: ../src/dialogs.py:3393 +#: ../src/config.py:1566 +#: ../src/dialogs.py:2539 +#: ../src/dialogs.py:2606 +#: ../src/dialogs.py:3398 #: ../src/disco.py:886 #: ../src/disco.py:1744 #: ../src/disco.py:2046 -#: ../src/history_window.py:90 +#: ../src/history_window.py:91 msgid "Name" msgstr "Имя" -#: ../src/config.py:1660 +#: ../src/config.py:1661 msgid "Relogin now?" msgstr "Переподключиться сейчас?" -#: ../src/config.py:1661 +#: ../src/config.py:1662 msgid "If you want all the changes to apply instantly, you must relogin." msgstr "Если вы хотите, чтобы изменения были применены немедленно, вы должны переподключиться." -#: ../src/config.py:1815 -#: ../src/config.py:1948 +#: ../src/config.py:1816 +#: ../src/config.py:1949 msgid "OpenPGP is not usable on this computer" msgstr "Невозможно использовать OpenPGP на этом компьютере" -#: ../src/config.py:1988 -#: ../src/config.py:2035 +#: ../src/config.py:1989 +#: ../src/config.py:2036 msgid "Unread events" msgstr "Непросмотренные события" -#: ../src/config.py:1989 +#: ../src/config.py:1990 msgid "Read all pending events before removing this account." msgstr "Просмотрите все ожидающие события перед удалением учетной записи." -#: ../src/config.py:2018 +#: ../src/config.py:2019 #, python-format msgid "You have opened chat in account %s" msgstr "У вас есть окна чата под учётной записью %s" -#: ../src/config.py:2019 +#: ../src/config.py:2020 msgid "All chat and groupchat windows will be closed. Do you want to continue?" msgstr "Все окна чатов и комнат будут закрыты. Продолжить?" -#: ../src/config.py:2031 -#: ../src/config.py:2573 -#: ../src/config.py:2609 +#: ../src/config.py:2032 +#: ../src/config.py:2574 +#: ../src/config.py:2611 msgid "You are currently connected to the server" msgstr "Вы сейчас подсоединены к серверу" -#: ../src/config.py:2032 +#: ../src/config.py:2033 msgid "To change the account name, you must be disconnected." msgstr "Для смены имени учетной записи необходимо отключиться." -#: ../src/config.py:2036 +#: ../src/config.py:2037 msgid "To change the account name, you must read all pending events." msgstr "Для смены имени учетной записи необходимо просмотреть ожидающие события." -#: ../src/config.py:2042 +#: ../src/config.py:2043 msgid "Account Name Already Used" msgstr "Такое имя учетной записи уже используется" -#: ../src/config.py:2043 +#: ../src/config.py:2044 msgid "This name is already used by another of your accounts. Please choose another name." msgstr "Это имя уже используется в другой вашей учетной записи. Выберите другое." -#: ../src/config.py:2047 -#: ../src/config.py:2051 +#: ../src/config.py:2048 +#: ../src/config.py:2052 msgid "Invalid account name" msgstr "Неверное имя учетной записи" -#: ../src/config.py:2048 +#: ../src/config.py:2049 msgid "Account name cannot be empty." msgstr "Имя учетной записи не может быть пустым." -#: ../src/config.py:2052 +#: ../src/config.py:2053 msgid "Account name cannot contain spaces." msgstr "Имя учетной записи не может содержать пробелы." -#: ../src/config.py:2129 +#: ../src/config.py:2130 msgid "Rename Account" msgstr "Переименовать учетную запись" -#: ../src/config.py:2130 +#: ../src/config.py:2131 #, python-format msgid "Enter a new name for account %s" msgstr "Введите новое название для учетной записи %s" -#: ../src/config.py:2158 +#: ../src/config.py:2159 msgid "A Jabber ID must be in the form \"user@servername\"." msgstr "Jabber ID должен иметь формат «имя_пользователя@сервер»." -#: ../src/config.py:2381 -#: ../src/config.py:3707 +#: ../src/config.py:2382 +#: ../src/config.py:3709 msgid "Invalid entry" msgstr "Неверная запись" -#: ../src/config.py:2382 -#: ../src/config.py:3708 +#: ../src/config.py:2383 +#: ../src/config.py:3710 msgid "Custom port must be a port number." msgstr "В качестве номера порта должно выступать число" -#: ../src/config.py:2403 +#: ../src/config.py:2404 msgid "Failed to get secret keys" msgstr "Не удалось получить секретный ключ" -#: ../src/config.py:2404 +#: ../src/config.py:2405 msgid "There is no OpenPGP secret key available." msgstr "Нет секретного ключа OpenPGP." -#: ../src/config.py:2438 +#: ../src/config.py:2439 msgid "OpenPGP Key Selection" msgstr "Выбор ключа OpenPGP" -#: ../src/config.py:2439 +#: ../src/config.py:2440 msgid "Choose your OpenPGP key" msgstr "Выберите свой ключ OpenPGP" -#: ../src/config.py:2446 +#: ../src/config.py:2447 msgid "No such account available" msgstr "Такая учетная запись недоступна" -#: ../src/config.py:2447 +#: ../src/config.py:2448 msgid "You must create your account before editing your personal information." msgstr "Перед редактированием личных данных необходимо сначала создать учетную запись." -#: ../src/config.py:2454 -#: ../src/dialogs.py:2286 -#: ../src/dialogs.py:2523 -#: ../src/dialogs.py:2711 +#: ../src/config.py:2455 +#: ../src/dialogs.py:2290 +#: ../src/dialogs.py:2528 +#: ../src/dialogs.py:2716 #: ../src/disco.py:515 #: ../src/profile_window.py:361 msgid "You are not connected to the server" msgstr "Вы не подключены к серверу" -#: ../src/config.py:2455 +#: ../src/config.py:2456 msgid "Without a connection, you can not edit your personal information." msgstr "Чтобы отредактировать личную информацию, нужно подключиться к серверу." -#: ../src/config.py:2459 +#: ../src/config.py:2460 msgid "Your server doesn't support Vcard" msgstr "Сервер не поддерживает Vcard" -#: ../src/config.py:2460 +#: ../src/config.py:2461 msgid "Your server can't save your personal information." msgstr "Ваш сервер не может хранить личную информацию." -#: ../src/config.py:2574 -#: ../src/config.py:2610 +#: ../src/config.py:2575 +#: ../src/config.py:2612 msgid "To disable the account, you must be disconnected." msgstr "Чтобы отключить эту учетную запись, необходимо отсоединиться от сервера." -#: ../src/config.py:2579 +#: ../src/config.py:2581 msgid "Account Local already exists." msgstr "Учётная запись Local уже существует." -#: ../src/config.py:2580 +#: ../src/config.py:2582 msgid "Please rename or remove it before enabling link-local messaging." msgstr "Переименуйте или удалите её, прежде чем включать локальные сообщения." -#: ../src/config.py:2737 +#: ../src/config.py:2739 #, python-format msgid "Edit %s" msgstr "Править %s" -#: ../src/config.py:2739 +#: ../src/config.py:2741 #, python-format msgid "Register to %s" msgstr "Зарегистрировать %s" #. list at the beginning -#: ../src/config.py:2775 +#: ../src/config.py:2777 msgid "Ban List" msgstr "Черный список" -#: ../src/config.py:2776 +#: ../src/config.py:2778 msgid "Member List" msgstr "Список участников" -#: ../src/config.py:2776 +#: ../src/config.py:2778 msgid "Owner List" msgstr "Список владельцев" -#: ../src/config.py:2777 +#: ../src/config.py:2779 msgid "Administrator List" msgstr "Список администраторов" #. Address column #. holds JID (who said this) -#: ../src/config.py:2841 +#: ../src/config.py:2843 #: ../src/disco.py:893 #: ../src/history_manager.py:207 msgid "JID" msgstr "JID" -#: ../src/config.py:2851 +#: ../src/config.py:2853 msgid "Reason" msgstr "Причина" -#: ../src/config.py:2858 +#: ../src/config.py:2860 msgid "Nick" msgstr "Ник" -#: ../src/config.py:2864 +#: ../src/config.py:2866 msgid "Role" msgstr "Обязанность" -#: ../src/config.py:2891 +#: ../src/config.py:2893 msgid "Banning..." msgstr "Баню..." #. You can move '\n' before user@domain if that line is TOO BIG -#: ../src/config.py:2893 +#: ../src/config.py:2895 msgid "" "<b>Whom do you want to ban?</b>\n" "\n" @@ -6361,11 +6618,11 @@ msgstr "" "<b>Кого вы хотите забанить?</b>\n" "\n" -#: ../src/config.py:2895 +#: ../src/config.py:2897 msgid "Adding Member..." msgstr "Добавляю участника..." -#: ../src/config.py:2896 +#: ../src/config.py:2898 msgid "" "<b>Whom do you want to make a member?</b>\n" "\n" @@ -6373,11 +6630,11 @@ msgstr "" "<b>Кого вы хотите сделать участником?</b>\n" "\n" -#: ../src/config.py:2898 +#: ../src/config.py:2900 msgid "Adding Owner..." msgstr "Добавляю владельца..." -#: ../src/config.py:2899 +#: ../src/config.py:2901 msgid "" "<b>Whom do you want to make an owner?</b>\n" "\n" @@ -6385,11 +6642,11 @@ msgstr "" "<b>Кого вы хотите сделать владельцем?</b>\n" "\n" -#: ../src/config.py:2901 +#: ../src/config.py:2903 msgid "Adding Administrator..." msgstr "Добавляю администратора..." -#: ../src/config.py:2902 +#: ../src/config.py:2904 msgid "" "<b>Whom do you want to make an administrator?</b>\n" "\n" @@ -6397,7 +6654,7 @@ msgstr "" "<b>Кого вы хотите сделать администратором?</b>\n" "\n" -#: ../src/config.py:2903 +#: ../src/config.py:2905 msgid "" "Can be one of the following:\n" "1. user@domain/resource (only that resource matches).\n" @@ -6413,148 +6670,142 @@ msgstr "" "4. domain (сам домен, т.е. как любое сочетание user@domain,\n" "domain/resource, так и адрес, содержащий этот поддомен)" -#: ../src/config.py:3004 +#: ../src/config.py:3006 #, python-format msgid "Removing %s account" msgstr "Удаление учетной записи %s" -#: ../src/config.py:3019 +#: ../src/config.py:3021 msgid "Account is disabled" msgstr "Учетная запись отключена" -#: ../src/config.py:3020 +#: ../src/config.py:3022 msgid "To unregister from a server, account must be enabled." msgstr "Для удаления регистрации с сервера, учетная запись должна быть активна." -#: ../src/config.py:3033 -#: ../src/gui_interface.py:278 -#: ../src/gui_interface.py:696 +#: ../src/config.py:3035 +#: ../src/gui_interface.py:283 +#: ../src/gui_interface.py:701 msgid "Password Required" msgstr "Требуется пароль" -#: ../src/config.py:3034 -#: ../src/gui_interface.py:676 +#: ../src/config.py:3036 +#: ../src/gui_interface.py:681 #, python-format msgid "Enter your password for account %s" msgstr "Введите пароль для учетной записи %s" -#: ../src/config.py:3035 -#: ../src/gui_interface.py:696 +#: ../src/config.py:3037 +#: ../src/gui_interface.py:701 msgid "Save password" msgstr "Сохранить пароль" -#: ../src/config.py:3045 +#: ../src/config.py:3047 #, python-format msgid "Account \"%s\" is connected to the server" msgstr "Учетная запись «%s» подключена к серверу" -#: ../src/config.py:3046 +#: ../src/config.py:3048 msgid "If you remove it, the connection will be lost." msgstr "Если вы удалите его, произойдет отключение." -#: ../src/config.py:3060 +#: ../src/config.py:3062 #, python-format msgid "Connection to server %s failed" msgstr "Не удалось соединиться с сервером %s" -#: ../src/config.py:3061 +#: ../src/config.py:3063 msgid "What would you like to do?" msgstr "Что вы хотите сделать?" -#: ../src/config.py:3062 +#: ../src/config.py:3064 msgid "Remove only from Gajim" msgstr "Удалить только из Gajim" -#: ../src/config.py:3063 +#: ../src/config.py:3065 msgid "Don't remove anything. I'll try again later" msgstr "Ничего не удалять. Я попробую позже." -#: ../src/config.py:3157 +#: ../src/config.py:3159 msgid "?print_status:All" msgstr "?print_status:Все" -#: ../src/config.py:3158 +#: ../src/config.py:3160 msgid "Enter and leave only" msgstr "Только приход и уход" -#: ../src/config.py:3159 +#: ../src/config.py:3161 msgid "?print_status:None" msgstr "?print_status:Нет" -#: ../src/config.py:3231 +#: ../src/config.py:3233 msgid "New Group Chat" msgstr "Новая комната" -#: ../src/config.py:3264 +#: ../src/config.py:3266 msgid "This bookmark has invalid data" msgstr "Эта закладка содержит неверные данные" -#: ../src/config.py:3265 +#: ../src/config.py:3267 msgid "Please be sure to fill out server and room fields or remove this bookmark." msgstr "Удостоверьтесь, что заполнены поля с именем сервера и комнаты, либо удалите эту закладку." -#. invalid char -#: ../src/config.py:3390 -#: ../src/dialogs.py:2075 -msgid "Invalid nickname" -msgstr "Неверное имя пользователя" - -#: ../src/config.py:3391 -#: ../src/config.py:3402 -#: ../src/config.py:3411 -#: ../src/config.py:3422 -#: ../src/config.py:3430 +#: ../src/config.py:3393 +#: ../src/config.py:3404 +#: ../src/config.py:3413 +#: ../src/config.py:3424 +#: ../src/config.py:3432 msgid "Character not allowed" msgstr "Символ недопустим" -#: ../src/config.py:3402 -#: ../src/config.py:3410 -#: ../src/config.py:3422 -#: ../src/config.py:3683 +#: ../src/config.py:3404 +#: ../src/config.py:3412 +#: ../src/config.py:3424 +#: ../src/config.py:3685 msgid "Invalid server" msgstr "Неверный сервер" -#: ../src/config.py:3429 +#: ../src/config.py:3431 msgid "Invalid room" msgstr "Неверная комната" -#: ../src/config.py:3599 +#: ../src/config.py:3601 msgid "Account has been added successfully" msgstr "Учетная запись успешно добавлена" -#: ../src/config.py:3600 -#: ../src/config.py:3606 +#: ../src/config.py:3602 +#: ../src/config.py:3608 msgid "You can set advanced account options by pressing the Advanced button, or later by choosing the Accounts menu item under the Edit menu from the main window." msgstr "Вы можете установить расширенные настройки учетной записи нажатием кнопки «Дополнительно», или сделать это позже посредством пункта «Учетные записи» меню «Правка» в главном окне программы." -#: ../src/config.py:3605 +#: ../src/config.py:3607 msgid "Your new account has been created successfully" msgstr "Ваша новая учетная запись успешно создана" -#: ../src/config.py:3644 +#: ../src/config.py:3646 msgid "Invalid username" msgstr "Неверное имя пользователя" -#: ../src/config.py:3646 +#: ../src/config.py:3648 msgid "You must provide a username to configure this account." msgstr "Для настройки учетной записи необходимо ввести имя пользователя." -#: ../src/config.py:3684 +#: ../src/config.py:3686 msgid "Please provide a server on which you want to register." msgstr "Укажите сервер, на котором вы хотите зарегистрироваться." -#: ../src/config.py:3740 -#: ../src/gui_interface.py:1174 +#: ../src/config.py:3742 +#: ../src/gui_interface.py:1203 msgid "Certificate Already in File" msgstr "Сертификат уже находится в файле" -#: ../src/config.py:3741 -#: ../src/gui_interface.py:1175 +#: ../src/config.py:3743 +#: ../src/gui_interface.py:1204 #, python-format msgid "This certificate is already in file %s, so it's not added again." msgstr "Этот сертификат уже есть в файле %s, поэтому он не был добавлен." -#: ../src/config.py:3828 +#: ../src/config.py:3831 #, python-format msgid "" "<b>Security Warning</b>\n" @@ -6569,8 +6820,8 @@ msgstr "" "Ошибка SSL: %(error)s\n" "Соединиться с этим сервером?" -#: ../src/config.py:3834 -#: ../src/gui_interface.py:1203 +#: ../src/config.py:3837 +#: ../src/gui_interface.py:1232 #, python-format msgid "" "Add this certificate to the list of trusted certificates.\n" @@ -6581,75 +6832,75 @@ msgstr "" "Отпечаток SHA1 сертификата:\n" "%s" -#: ../src/config.py:3866 -#: ../src/config.py:3900 +#: ../src/config.py:3869 +#: ../src/config.py:3903 msgid "An error occurred during account creation" msgstr "Произошла ошибка при создании учетной записи" -#: ../src/config.py:3965 +#: ../src/config.py:3968 msgid "Account name is in use" msgstr "Такое имя учетной записи уже используется" -#: ../src/config.py:3966 +#: ../src/config.py:3969 msgid "You already have an account using this name." msgstr "У вас уже есть учетная запись с таким именем." -#: ../src/config.py:4096 +#: ../src/config.py:4099 msgid "PEP node was not removed" msgstr "PEP узел не был удален" -#: ../src/config.py:4097 +#: ../src/config.py:4100 #, python-format msgid "PEP node %(node)s was not removed: %(message)s" msgstr "PEP узел %(node)s не был удален: %(message)s" -#: ../src/config.py:4125 +#: ../src/config.py:4128 #, python-format msgid "Configure %s" msgstr "Настроить %s" -#: ../src/config.py:4141 -#: ../src/plugins/gui.py:73 +#: ../src/config.py:4144 +#: ../src/plugins/gui.py:74 msgid "Active" msgstr "Активен" -#: ../src/config.py:4149 +#: ../src/config.py:4152 msgid "Event" msgstr "Событие" -#: ../src/config.py:4184 +#: ../src/config.py:4187 msgid "First Message Received" msgstr "Получено первое сообщение" -#: ../src/config.py:4185 +#: ../src/config.py:4188 msgid "Next Message Received Focused" msgstr "Следующее сообщение получено в окне с фокусом" -#: ../src/config.py:4187 +#: ../src/config.py:4190 msgid "Next Message Received Unfocused" msgstr "Следующее сообщение получено в окне без фокуса" -#: ../src/config.py:4188 +#: ../src/config.py:4191 msgid "Contact Connected" msgstr "Контакт подключился" -#: ../src/config.py:4189 +#: ../src/config.py:4192 msgid "Contact Disconnected" msgstr "Контакт отключился" -#: ../src/config.py:4190 +#: ../src/config.py:4193 msgid "Message Sent" msgstr "Сообщение отправлено" -#: ../src/config.py:4191 +#: ../src/config.py:4194 msgid "Group Chat Message Highlight" msgstr "Вас упомянули в комнате" -#: ../src/config.py:4192 +#: ../src/config.py:4195 msgid "Group Chat Message Received" msgstr "Получено сообщение в комнате" -#: ../src/config.py:4193 +#: ../src/config.py:4196 msgid "GMail Email Received" msgstr "Получено письмо на Gmail" @@ -6708,7 +6959,7 @@ msgid "Open as _Link" msgstr "Открыть как _ссылку" #. %i is day in year (1-365) -#: ../src/conversation_textview.py:1319 +#: ../src/conversation_textview.py:1323 #, python-format msgid "Yesterday" msgid_plural "%(nb_days)i days ago" @@ -6717,8 +6968,8 @@ msgstr[1] "%(nb_days)i дня назад" msgstr[2] "%(nb_days)i дней назад" #. if we have subject, show it too! -#: ../src/conversation_textview.py:1368 -#: ../src/history_window.py:480 +#: ../src/conversation_textview.py:1372 +#: ../src/history_window.py:481 #, python-format msgid "Subject: %s\n" msgstr "Тема: %s\n" @@ -6844,7 +7095,7 @@ msgstr "Заполните данные о контакте, который вы #: ../src/dialogs.py:1074 #: ../src/dialogs.py:1080 #: ../src/dialogs.py:1085 -#: ../src/dialogs.py:3626 +#: ../src/dialogs.py:3631 msgid "Invalid User ID" msgstr "Неверный ID пользователя" @@ -6925,434 +7176,434 @@ msgstr "_Продолжить" msgid "Re_place" msgstr "_Заменить" -#: ../src/dialogs.py:2076 -#: ../src/dialogs.py:2475 +#: ../src/dialogs.py:2079 +#: ../src/dialogs.py:2480 msgid "The nickname has not allowed characters." msgstr "В Jabber ID комнаты или сервера содержатся недопустимые символы." -#: ../src/dialogs.py:2194 +#: ../src/dialogs.py:2198 #, python-format msgid "Subscription request for account %(account)s from %(jid)s" msgstr "Запрос на подписку для учетной записи %(account)s от %(jid)s" -#: ../src/dialogs.py:2197 +#: ../src/dialogs.py:2201 #, python-format msgid "Subscription request from %s" msgstr "Запрос на подписку от %s" -#: ../src/dialogs.py:2281 -#: ../src/gui_interface.py:1930 +#: ../src/dialogs.py:2285 +#: ../src/gui_interface.py:1959 #, python-format msgid "You are already in group chat %s" msgstr "Вы уже в комнате %s" -#: ../src/dialogs.py:2287 +#: ../src/dialogs.py:2291 msgid "You can not join a group chat unless you are connected." msgstr "Вы не можете зайти в комнату без подключения." -#: ../src/dialogs.py:2331 +#: ../src/dialogs.py:2335 #, python-format msgid "Join Group Chat with account %s" msgstr "Войти в комнату с учетной записи %s" -#: ../src/dialogs.py:2462 +#: ../src/dialogs.py:2466 msgid "Invalid Account" msgstr "Неверное имя учетной записи" -#: ../src/dialogs.py:2463 +#: ../src/dialogs.py:2467 msgid "You have to choose an account from which you want to join the groupchat." msgstr "Выберите учетную запись, с которой вы хотите войти в комнату." -#: ../src/dialogs.py:2474 +#: ../src/dialogs.py:2479 msgid "Invalid Nickname" msgstr "Неверное имя пользователя" -#: ../src/dialogs.py:2479 -#: ../src/dialogs.py:2485 +#: ../src/dialogs.py:2484 +#: ../src/dialogs.py:2490 #: ../src/groupchat_control.py:2092 msgid "Invalid group chat Jabber ID" msgstr "Неверное имя комнаты" -#: ../src/dialogs.py:2480 +#: ../src/dialogs.py:2485 msgid "Please enter the group chat Jabber ID as room@server." msgstr "В Jabber ID комнаты или сервера содержатся недопустимые символы." -#: ../src/dialogs.py:2486 +#: ../src/dialogs.py:2491 #: ../src/groupchat_control.py:2093 msgid "The group chat Jabber ID has not allowed characters." msgstr "В Jabber ID комнаты или сервера содержатся недопустимые символы." -#: ../src/dialogs.py:2491 -#: ../src/gui_interface.py:1912 +#: ../src/dialogs.py:2496 +#: ../src/gui_interface.py:1941 msgid "This is not a group chat" msgstr "Это не комната" -#: ../src/dialogs.py:2492 -#: ../src/gui_interface.py:1913 +#: ../src/dialogs.py:2497 +#: ../src/gui_interface.py:1942 #, python-format msgid "%s is not the name of a group chat." msgstr "%s не является именем комнаты." -#: ../src/dialogs.py:2524 +#: ../src/dialogs.py:2529 msgid "Without a connection, you can not synchronise your contacts." msgstr "Чтобы объединить контакты, необходимо подключиться к серверу." -#: ../src/dialogs.py:2537 +#: ../src/dialogs.py:2542 msgid "Server" msgstr "Сервер" -#: ../src/dialogs.py:2573 +#: ../src/dialogs.py:2578 msgid "This account is not connected to the server" msgstr "Учётная запись не подключена к серверу" -#: ../src/dialogs.py:2574 +#: ../src/dialogs.py:2579 msgid "You cannot synchronize with an account unless it is connected." msgstr "Вы не можете синхронизировать учетную запись если она не подключена." -#: ../src/dialogs.py:2599 +#: ../src/dialogs.py:2604 msgid "Synchronise" msgstr "Синхронизировать" -#: ../src/dialogs.py:2660 +#: ../src/dialogs.py:2665 #, python-format msgid "Start Chat with account %s" msgstr "Начать чат с учетной записью %s" -#: ../src/dialogs.py:2662 +#: ../src/dialogs.py:2667 msgid "Start Chat" msgstr "Начать чат" -#: ../src/dialogs.py:2663 +#: ../src/dialogs.py:2668 msgid "" "Fill in the nickname or the Jabber ID of the contact you would like\n" "to send a chat message to:" msgstr "Введите ник или ID пользователя, которому вы хотите отправить сообщение:" #. if offline or connecting -#: ../src/dialogs.py:2690 -#: ../src/dialogs.py:3071 -#: ../src/dialogs.py:3306 +#: ../src/dialogs.py:2695 +#: ../src/dialogs.py:3076 +#: ../src/dialogs.py:3311 msgid "Connection not available" msgstr "Соединение недоступно" -#: ../src/dialogs.py:2691 -#: ../src/dialogs.py:3072 -#: ../src/dialogs.py:3307 +#: ../src/dialogs.py:2696 +#: ../src/dialogs.py:3077 +#: ../src/dialogs.py:3312 #, python-format msgid "Please make sure you are connected with \"%s\"." msgstr "Удостоверьтесь, что вы подключены к «%s»." -#: ../src/dialogs.py:2700 -#: ../src/dialogs.py:2703 +#: ../src/dialogs.py:2705 +#: ../src/dialogs.py:2708 msgid "Invalid JID" msgstr "Неверный JID" -#: ../src/dialogs.py:2703 +#: ../src/dialogs.py:2708 #, python-format msgid "Unable to parse \"%s\"." msgstr "Не понимаю адреса «%s»." -#: ../src/dialogs.py:2712 +#: ../src/dialogs.py:2717 msgid "Without a connection, you can not change your password." msgstr "Чтобы изменить пароль, необходимо подключиться к серверу." -#: ../src/dialogs.py:2731 +#: ../src/dialogs.py:2736 msgid "Invalid password" msgstr "Неверный пароль" -#: ../src/dialogs.py:2731 +#: ../src/dialogs.py:2736 msgid "You must enter a password." msgstr "Необходимо ввести пароль." -#: ../src/dialogs.py:2735 +#: ../src/dialogs.py:2740 msgid "Passwords do not match" msgstr "Пароли не совпадают" -#: ../src/dialogs.py:2736 +#: ../src/dialogs.py:2741 msgid "The passwords typed in both fields must be identical." msgstr "Пароли, введенные в оба поля, должны быть одинаковыми." -#: ../src/dialogs.py:2778 -#: ../src/gui_interface.py:813 +#: ../src/dialogs.py:2783 +#: ../src/gui_interface.py:842 #: ../src/notify.py:273 msgid "New E-mail" msgstr "Новое письмо" -#: ../src/dialogs.py:2780 -#: ../src/gui_interface.py:868 +#: ../src/dialogs.py:2785 +#: ../src/gui_interface.py:897 #: ../src/notify.py:266 msgid "File Transfer Request" msgstr "Запрос передачи" -#: ../src/dialogs.py:2782 -#: ../src/gui_interface.py:775 -#: ../src/gui_interface.py:839 +#: ../src/dialogs.py:2787 +#: ../src/gui_interface.py:804 +#: ../src/gui_interface.py:868 #: ../src/notify.py:268 msgid "File Transfer Error" msgstr "Ошибка передачи" -#: ../src/dialogs.py:2784 -#: ../src/gui_interface.py:914 -#: ../src/gui_interface.py:937 -#: ../src/gui_interface.py:954 +#: ../src/dialogs.py:2789 +#: ../src/gui_interface.py:943 +#: ../src/gui_interface.py:966 +#: ../src/gui_interface.py:983 #: ../src/notify.py:270 msgid "File Transfer Completed" msgstr "Передача файла завершена" -#: ../src/dialogs.py:2785 -#: ../src/gui_interface.py:917 +#: ../src/dialogs.py:2790 +#: ../src/gui_interface.py:946 #: ../src/notify.py:271 msgid "File Transfer Stopped" msgstr "Передача остановлена" -#: ../src/dialogs.py:2787 -#: ../src/gui_interface.py:609 +#: ../src/dialogs.py:2792 +#: ../src/gui_interface.py:614 #: ../src/notify.py:275 msgid "Groupchat Invitation" msgstr "Приглашение в комнату" -#: ../src/dialogs.py:2990 +#: ../src/dialogs.py:2995 #, python-format msgid "Single Message using account %s" msgstr "Новое сообщение с учетной записи %s" -#: ../src/dialogs.py:2992 +#: ../src/dialogs.py:2997 #, python-format msgid "Single Message in account %s" msgstr "Новое сообщение для учетной записи %s" -#: ../src/dialogs.py:2994 +#: ../src/dialogs.py:2999 msgid "Single Message" msgstr "Сообщение" #. prepare UI for Sending -#: ../src/dialogs.py:2997 +#: ../src/dialogs.py:3002 #, python-format msgid "Send %s" msgstr "Отправить %s" #. prepare UI for Receiving -#: ../src/dialogs.py:3020 +#: ../src/dialogs.py:3025 #, python-format msgid "Received %s" msgstr "Получено %s" #. prepare UI for Receiving -#: ../src/dialogs.py:3043 +#: ../src/dialogs.py:3048 #, python-format msgid "Form %s" msgstr "От %s" #. we create a new blank window to send and we preset RE: and to jid -#: ../src/dialogs.py:3127 +#: ../src/dialogs.py:3132 #, python-format msgid "RE: %s" msgstr "RE: %s" -#: ../src/dialogs.py:3128 +#: ../src/dialogs.py:3133 #, python-format msgid "%s wrote:\n" msgstr "%s написал:\n" -#: ../src/dialogs.py:3187 +#: ../src/dialogs.py:3192 #, python-format msgid "XML Console for %s" msgstr "Консоль XML для %s" -#: ../src/dialogs.py:3189 +#: ../src/dialogs.py:3194 msgid "XML Console" msgstr "Консоль XML" #. Action that can be done with an incoming list of contacts -#: ../src/dialogs.py:3336 +#: ../src/dialogs.py:3341 msgid "add" msgstr "добавить" -#: ../src/dialogs.py:3336 +#: ../src/dialogs.py:3341 msgid "modify" msgstr "изменить" -#: ../src/dialogs.py:3337 +#: ../src/dialogs.py:3342 msgid "remove" msgstr "удалить" -#: ../src/dialogs.py:3366 +#: ../src/dialogs.py:3371 #, python-format msgid "<b>%(jid)s</b> would like you to <b>%(action)s</b> some contacts in your roster." msgstr "<b>%(jid)s</b> хочет <b>%(action)s</b> несколько контактов в ваш список контактов." #. Change label for accept_button to action name instead of 'OK'. -#: ../src/dialogs.py:3384 -#: ../src/dialogs.py:3459 +#: ../src/dialogs.py:3389 +#: ../src/dialogs.py:3464 msgid "Modify" msgstr "Изменить" -#: ../src/dialogs.py:3390 +#: ../src/dialogs.py:3395 msgid "Jabber ID" msgstr "Jabber ID" -#: ../src/dialogs.py:3396 +#: ../src/dialogs.py:3401 msgid "Groups" msgstr "Группы" #. it is selected #. remote_jid = model[iter_][1].decode('utf-8') -#: ../src/dialogs.py:3504 +#: ../src/dialogs.py:3509 #, python-format msgid "%s suggested me to add you in my roster." msgstr "%s предложил мне добавить вас в мой список контактов." -#: ../src/dialogs.py:3518 +#: ../src/dialogs.py:3523 #, python-format msgid "Added %s contacts" msgstr "Добавлены контакты %s" -#: ../src/dialogs.py:3555 +#: ../src/dialogs.py:3560 #, python-format msgid "Removed %s contacts" msgstr "Удалены контакты %s" -#: ../src/dialogs.py:3595 -#: ../src/dialogs.py:3772 +#: ../src/dialogs.py:3600 +#: ../src/dialogs.py:3777 #, python-format msgid "Archiving Preferences for %s" msgstr "Настройки архивации для %s" -#: ../src/dialogs.py:3635 +#: ../src/dialogs.py:3640 #, fuzzy msgid "Invalid expire value" msgstr "Неверное имя сервера" -#: ../src/dialogs.py:3636 +#: ../src/dialogs.py:3641 msgid "Expire must be a valid positive integer." msgstr "" -#: ../src/dialogs.py:3683 +#: ../src/dialogs.py:3688 msgid "There is an error with the form" msgstr "" -#: ../src/dialogs.py:3903 +#: ../src/dialogs.py:3908 #, fuzzy msgid "There is an error" msgstr "Сервис ответил ошибкой." -#: ../src/dialogs.py:3971 +#: ../src/dialogs.py:3976 #, python-format msgid "Privacy List <b><i>%s</i></b>" msgstr "Список доступа <b><i>%s</i></b>" -#: ../src/dialogs.py:3975 +#: ../src/dialogs.py:3980 #, python-format msgid "Privacy List for %s" msgstr "Список доступа для %s" -#: ../src/dialogs.py:4042 +#: ../src/dialogs.py:4047 #, python-format msgid "Order: %(order)s, action: %(action)s, type: %(type)s, value: %(value)s" msgstr "Номер: %(order)s, действие: %(action)s, тип: %(type)s, значение: %(value)s" -#: ../src/dialogs.py:4047 +#: ../src/dialogs.py:4052 #, python-format msgid "Order: %(order)s, action: %(action)s" msgstr "Номер: %(order)s, действие: %(action)s" -#: ../src/dialogs.py:4098 +#: ../src/dialogs.py:4103 msgid "<b>Edit a rule</b>" msgstr "<b>Изменить правило</b>" -#: ../src/dialogs.py:4209 +#: ../src/dialogs.py:4214 msgid "<b>Add a rule</b>" msgstr "<b>Добавить правило</b>" -#: ../src/dialogs.py:4308 +#: ../src/dialogs.py:4313 #, python-format msgid "Privacy Lists for %s" msgstr "Списки доступа для %s" -#: ../src/dialogs.py:4310 +#: ../src/dialogs.py:4315 msgid "Privacy Lists" msgstr "Списки доступа" -#: ../src/dialogs.py:4399 +#: ../src/dialogs.py:4404 msgid "Invalid List Name" msgstr "Недопустимое имя списка" -#: ../src/dialogs.py:4400 +#: ../src/dialogs.py:4405 msgid "You must enter a name to create a privacy list." msgstr "Необходимо ввести имя для нового списка доступа." -#: ../src/dialogs.py:4432 +#: ../src/dialogs.py:4437 msgid "You are invited to a groupchat" msgstr "Вы приглашены в конференцию" -#: ../src/dialogs.py:4435 +#: ../src/dialogs.py:4440 msgid "$Contact has invited you to join a discussion" msgstr "$Contact приглашает вас присоединиться к обсуждению." -#: ../src/dialogs.py:4437 +#: ../src/dialogs.py:4442 #, python-format msgid "$Contact has invited you to group chat %(room_jid)s" msgstr "$Contact приглашает вас в комнату %(room_jid)s." -#: ../src/dialogs.py:4445 +#: ../src/dialogs.py:4450 #, python-format msgid "Comment: %s" msgstr "Комментарий: %s" -#: ../src/dialogs.py:4447 +#: ../src/dialogs.py:4452 msgid "Do you want to accept the invitation?" msgstr "Вы принимаете приглашение?" -#: ../src/dialogs.py:4509 +#: ../src/dialogs.py:4514 msgid "Choose Client Cert #PCKS12" msgstr "Выберите сертификат владельца #PCKS12" -#: ../src/dialogs.py:4519 -#: ../src/dialogs.py:4561 -#: ../src/dialogs.py:4617 -#: ../src/dialogs.py:4705 +#: ../src/dialogs.py:4524 +#: ../src/dialogs.py:4566 +#: ../src/dialogs.py:4622 +#: ../src/dialogs.py:4710 msgid "All files" msgstr "Все файлы" -#: ../src/dialogs.py:4524 +#: ../src/dialogs.py:4529 msgid "PKCS12 Files" msgstr "Файлы PKCS12" -#: ../src/dialogs.py:4551 +#: ../src/dialogs.py:4556 msgid "Choose Sound" msgstr "Выберите звуковой файл" -#: ../src/dialogs.py:4566 +#: ../src/dialogs.py:4571 msgid "Wav Sounds" msgstr "В формате Wav" -#: ../src/dialogs.py:4604 +#: ../src/dialogs.py:4609 msgid "Choose Image" msgstr "Выбрать картинку" -#: ../src/dialogs.py:4622 +#: ../src/dialogs.py:4627 msgid "Images" msgstr "Картинки" -#: ../src/dialogs.py:4692 +#: ../src/dialogs.py:4697 msgid "Choose Archive" msgstr "Выбрать Архив" -#: ../src/dialogs.py:4710 +#: ../src/dialogs.py:4715 msgid "Zip files" msgstr "Zip файлы" -#: ../src/dialogs.py:4736 +#: ../src/dialogs.py:4741 #, python-format msgid "When %s becomes:" msgstr "Когда %s происходит:" -#: ../src/dialogs.py:4738 +#: ../src/dialogs.py:4743 #, python-format msgid "Adding Special Notification for %s" msgstr "Добавление специального уведомления для %s" -#: ../src/dialogs.py:4958 +#: ../src/dialogs.py:4963 #, python-format msgid "" "Your chat session with <b>%(jid)s</b> is encrypted.\n" @@ -7363,38 +7614,38 @@ msgstr "" "\n" "Short Authentication String данного сеанса <b>%(sas)s</b>." -#: ../src/dialogs.py:4961 +#: ../src/dialogs.py:4966 msgid "You have already verified this contact's identity." msgstr "Вы уже удостоверили личность этого контакта." -#: ../src/dialogs.py:4967 -#: ../src/dialogs.py:5051 +#: ../src/dialogs.py:4972 +#: ../src/dialogs.py:5056 msgid "Contact's identity verified" msgstr "Личность контакта удостоверена" -#: ../src/dialogs.py:4973 +#: ../src/dialogs.py:4978 msgid "Verify again..." msgstr "Удостоверить снова..." -#: ../src/dialogs.py:4978 +#: ../src/dialogs.py:4983 msgid "To be certain that <b>only</b> the expected person can read your messages or send you messages, you need to verify their identity by clicking the button below." msgstr "Чтобы быть уверенным, что <b>только</b> нужный человек может прочитать ваши сообщения или послать сообщения вам, вы должны удостоверить личность собеседника, нажав кнопку, расположенную ниже." -#: ../src/dialogs.py:4981 -#: ../src/dialogs.py:5032 -#: ../src/dialogs.py:5045 +#: ../src/dialogs.py:4986 +#: ../src/dialogs.py:5037 +#: ../src/dialogs.py:5050 msgid "Contact's identity NOT verified" msgstr "Личность контакта НЕ удостоверена" -#: ../src/dialogs.py:4986 +#: ../src/dialogs.py:4991 msgid "Verify..." msgstr "Удостоверить..." -#: ../src/dialogs.py:4997 +#: ../src/dialogs.py:5002 msgid "Have you verified the contact's identity?" msgstr "Вы удостоверили личность удаленного контакта?" -#: ../src/dialogs.py:4998 +#: ../src/dialogs.py:5003 #, python-format msgid "" "To prevent talking to an unknown person, you should speak to <b>%(jid)s</b> directly (in person or on the phone) and verify that they see the same Short Authentication String (SAS) as you.\n" @@ -7405,50 +7656,50 @@ msgstr "" "\n" "Short Authentication String этого сеанса <b>%(sas)s</b>" -#: ../src/dialogs.py:4999 +#: ../src/dialogs.py:5004 msgid "Did you talk to the remote contact and verify the SAS?" msgstr "Вы переговорили с удаленным контактом и удостоверили SAS?" -#: ../src/dialogs.py:5033 +#: ../src/dialogs.py:5038 #, python-format msgid "The contact's key (%s) <b>does not match</b> the key assigned in Gajim." msgstr "Ключ (%s) контакта <b>не соответствует</b> ключу, присвоенному в Gajim." -#: ../src/dialogs.py:5039 +#: ../src/dialogs.py:5044 msgid "No GPG key is assigned to this contact. So you cannot encrypt messages." msgstr "Этому контакту не присвоен ключ GPG, поэтому вы не можете зашифровать сообщения." -#: ../src/dialogs.py:5046 +#: ../src/dialogs.py:5051 msgid "GPG key is assigned to this contact, but <b>you do not trust his key</b>, so message <b>cannot</b> be encrypted. Use your GPG client to trust this key." msgstr "Этому контакту присвоен ключ GPG, но <b>вы не доверяете этому ключу</b>. Таким образом, сообщения <b>не могут быть</b> зашифрованы. Воспользуйтесь вашим GPG клиентом для того, чтобы выставить доверие данному ключу" -#: ../src/dialogs.py:5052 +#: ../src/dialogs.py:5057 msgid "GPG Key is assigned to this contact, and you trust his key, so messages will be encrypted." msgstr "Этому контакту присвоен ключ GPG, и вы доверяете этому ключу. Таким образом, сообщения будут зашифрованы." -#: ../src/dialogs.py:5117 +#: ../src/dialogs.py:5122 msgid "an audio and video" msgstr "аудио и видео" -#: ../src/dialogs.py:5119 +#: ../src/dialogs.py:5124 msgid "an audio" msgstr "аудио" -#: ../src/dialogs.py:5121 +#: ../src/dialogs.py:5126 msgid "a video" msgstr "видео" -#: ../src/dialogs.py:5125 +#: ../src/dialogs.py:5130 #, python-format msgid "%(contact)s wants to start %(type)s session with you. Do you want to answer the call?" msgstr "%(contact)s хочет начать %(type)s сеанс с вами. Вы хотите ответить?" -#: ../src/dialogs.py:5193 +#: ../src/dialogs.py:5198 #, python-format msgid "Certificate for account %s" msgstr "Сертификат учетной записи %s" -#: ../src/dialogs.py:5193 +#: ../src/dialogs.py:5198 #, python-format msgid "" "<b>Issued to:</b>\n" @@ -7470,8 +7721,8 @@ msgid "" "SHA1 Fingerprint: %(sha1)s" msgstr "" -#: ../src/dialogs.py:5227 -#: ../src/dialogs.py:5244 +#: ../src/dialogs.py:5232 +#: ../src/dialogs.py:5249 msgid "View cert..." msgstr "" @@ -7562,23 +7813,23 @@ msgid "Id" msgstr "ID" #: ../src/disco.py:1835 -#: ../src/gui_interface.py:2448 +#: ../src/gui_interface.py:2477 msgid "Bookmark already set" msgstr "Закладка уже установлена" #: ../src/disco.py:1836 -#: ../src/gui_interface.py:2449 +#: ../src/gui_interface.py:2478 #, python-format msgid "Group Chat \"%s\" is already in your bookmarks." msgstr "Комната «%s» уже есть в ваших закладках." #: ../src/disco.py:1845 -#: ../src/gui_interface.py:2463 +#: ../src/gui_interface.py:2492 msgid "Bookmark has been added successfully" msgstr "Закладка успешно добавлена" #: ../src/disco.py:1846 -#: ../src/gui_interface.py:2464 +#: ../src/gui_interface.py:2493 msgid "You can manage your bookmarks via Actions menu in your roster." msgstr "Вы можете управлять закладками через меню «Действия» в ростере." @@ -7612,8 +7863,8 @@ msgstr "Библиотека используется для подтвержд #: ../src/features_window.py:52 #: ../src/features_window.py:53 -msgid "Requires python-pyopenssl." -msgstr "Требует python-pyopenssl." +msgid "Requires python-pyopenssl > 0.12 and pyasn1." +msgstr "Требует python-pyopenssl > 0.12 и pyasn1." #: ../src/features_window.py:54 msgid "Bonjour / Zeroconf" @@ -7628,8 +7879,8 @@ msgid "Requires python-avahi." msgstr "Требует python-avahi." #: ../src/features_window.py:57 -msgid "Requires pybonjour (http://o2s.csail.mit.edu/o2s-wiki/pybonjour)." -msgstr "Требует pybonjour (http://o2s.csail.mit.edu/o2s-wiki/pybonjour)." +msgid "Requires pybonjour and bonjour SDK running (http://developer.apple.com/opensource/)." +msgstr "" #: ../src/features_window.py:58 msgid "Command line" @@ -7647,7 +7898,6 @@ msgstr "Требует python-dbus." #: ../src/features_window.py:69 #: ../src/features_window.py:73 #: ../src/features_window.py:77 -#: ../src/features_window.py:85 #: ../src/features_window.py:89 #: ../src/features_window.py:109 #: ../src/features_window.py:113 @@ -7735,6 +7985,10 @@ msgstr "Проверка орфографии набираемых сообще msgid "Requires libgtkspell." msgstr "Требует библиотеку libgtkspell." +#: ../src/features_window.py:85 +msgid "Requires libgtkspell and libenchant." +msgstr "Требует libgtkspell и libenchant." + #: ../src/features_window.py:86 msgid "Notification" msgstr "Уведомления" @@ -7884,7 +8138,7 @@ msgstr "Отправитель: %s" #: ../src/filetransfers_window.py:191 #: ../src/filetransfers_window.py:637 -#: ../src/tooltips.py:742 +#: ../src/tooltips.py:743 msgid "Recipient: " msgstr "Получатель:" @@ -7908,7 +8162,7 @@ msgid "Choose File to Send..." msgstr "Выбрать файл для отправки..." #: ../src/filetransfers_window.py:284 -#: ../src/tooltips.py:780 +#: ../src/tooltips.py:781 msgid "Description: " msgstr "Описание: " @@ -8009,12 +8263,12 @@ msgid "It is not possible to send empty files" msgstr "Нельзя отсылать пустые файлы" #: ../src/filetransfers_window.py:633 -#: ../src/tooltips.py:732 +#: ../src/tooltips.py:733 msgid "Name: " msgstr "Имя: " #: ../src/filetransfers_window.py:635 -#: ../src/tooltips.py:736 +#: ../src/tooltips.py:737 msgid "Sender: " msgstr "Отправитель:" @@ -8022,46 +8276,46 @@ msgstr "Отправитель:" msgid "Pause" msgstr "Пауза" -#: ../src/gajim.py:192 +#: ../src/gajim.py:194 msgid "Gajim needs X server to run. Quiting..." msgstr "Gajim для запуска требуется X-сервер. Выход..." -#: ../src/gajim.py:194 +#: ../src/gajim.py:196 #, python-format msgid "importing PyGTK failed: %s" msgstr "ошибка импортирования PyGTK: %s" -#: ../src/gajim.py:236 +#: ../src/gajim.py:237 msgid "Gajim needs PyGTK 2.16 or above" msgstr "Gajim требуется PyGTK 2.16 или выше" -#: ../src/gajim.py:237 +#: ../src/gajim.py:238 msgid "Gajim needs PyGTK 2.16 or above to run. Quiting..." msgstr "Gajim для запуска требуется PyGTK 2.16 или выше. Выход..." -#: ../src/gajim.py:239 +#: ../src/gajim.py:240 msgid "Gajim needs GTK 2.16 or above" msgstr "Gajim требуется GTK 2.16 или выше" -#: ../src/gajim.py:240 +#: ../src/gajim.py:241 msgid "Gajim needs GTK 2.16 or above to run. Quiting..." msgstr "Gajim для запуска требуется GTK 2.16 или выше. Выход..." -#: ../src/gajim.py:249 +#: ../src/gajim.py:250 msgid "Gajim needs pywin32 to run" msgstr "Gajim для запуска требуется pywin32" -#: ../src/gajim.py:250 +#: ../src/gajim.py:251 #, python-format msgid "Please make sure that Pywin32 is installed on your system. You can get it at %s" msgstr "Удостоверьтесь, что в вашей системе установлен Pywin32. Вы можете получить его на сайте: %s" #. set the icon to all newly opened wind -#: ../src/gajim.py:366 +#: ../src/gajim.py:367 msgid "Gajim is already running" msgstr "Gajim уже запущен" -#: ../src/gajim.py:367 +#: ../src/gajim.py:368 msgid "" "Another instance of Gajim seems to be running\n" "Run anyway?" @@ -8680,14 +8934,14 @@ msgid "If you close this window, you will be disconnected from this group chat." msgstr "Если вы закроете это окно, то вы выйдете из этой комнаты." #: ../src/groupchat_control.py:2025 -#: ../src/gui_interface.py:668 -#: ../src/gui_interface.py:1282 -#: ../src/gui_interface.py:1322 -#: ../src/gui_interface.py:1363 +#: ../src/gui_interface.py:673 +#: ../src/gui_interface.py:1311 +#: ../src/gui_interface.py:1351 +#: ../src/gui_interface.py:1392 #: ../src/message_window.py:224 -#: ../src/roster_window.py:2946 -#: ../src/roster_window.py:3621 -#: ../src/roster_window.py:4390 +#: ../src/roster_window.py:2989 +#: ../src/roster_window.py:3667 +#: ../src/roster_window.py:4473 msgid "_Do not ask me again" msgstr "Не _спрашивать меня снова" @@ -8759,13 +9013,6 @@ msgstr "_Сообщить об ошибке" msgid "Details" msgstr "Детали" -#. we talk about file -#: ../src/gtkgui_helpers.py:203 -#: ../src/gtkgui_helpers.py:219 -#, python-format -msgid "Error: cannot open %s for reading" -msgstr "Ошибка: не могу открыть %s для чтения" - #: ../src/gtkgui_helpers.py:348 msgid "Error reading file:" msgstr "Ошибка чтения файла:" @@ -8809,17 +9056,17 @@ msgstr "Сохранить изображение как..." #. we are banned #. group chat does not exist -#: ../src/gui_interface.py:126 -#: ../src/gui_interface.py:290 -#: ../src/gui_interface.py:299 -#: ../src/gui_interface.py:305 -#: ../src/gui_interface.py:308 -#: ../src/gui_interface.py:311 +#: ../src/gui_interface.py:131 +#: ../src/gui_interface.py:295 +#: ../src/gui_interface.py:304 +#: ../src/gui_interface.py:310 +#: ../src/gui_interface.py:313 #: ../src/gui_interface.py:316 +#: ../src/gui_interface.py:321 msgid "Unable to join group chat" msgstr "Не получается войти в комнату" -#: ../src/gui_interface.py:127 +#: ../src/gui_interface.py:132 #, python-format msgid "" "Your desired nickname in group chat %s is in use or registered by another occupant.\n" @@ -8828,89 +9075,89 @@ msgstr "" "Тот ник, что вы ввели в комнате %s уже используется или зарегистрирован другим пользователем.\n" "Укажите другой ник:" -#: ../src/gui_interface.py:130 +#: ../src/gui_interface.py:135 msgid "Always use this nickname when there is a conflict" msgstr "Всегда использовать этот ник в случае конфликта" -#: ../src/gui_interface.py:147 +#: ../src/gui_interface.py:152 msgid "Do you accept this request?" msgstr "Вы принимаете этот запрос?" -#: ../src/gui_interface.py:149 +#: ../src/gui_interface.py:154 #, python-format msgid "Do you accept this request on account %s?" msgstr "Вы принимаете запрос %s?" -#: ../src/gui_interface.py:152 +#: ../src/gui_interface.py:157 #, python-format msgid "HTTP (%(method)s) Authorization for %(url)s (id: %(id)s)" msgstr "HTTP (%(method)s) Авторизация для %(url)s (id: %(id)s)" -#: ../src/gui_interface.py:195 +#: ../src/gui_interface.py:200 #: ../src/notify.py:279 msgid "Connection Failed" msgstr "Соединение разорвалось" -#: ../src/gui_interface.py:279 +#: ../src/gui_interface.py:284 #, python-format msgid "A Password is required to join the room %s. Please type it." msgstr "Чтобы войти в комнату %s, нужен пароль." -#: ../src/gui_interface.py:291 +#: ../src/gui_interface.py:296 #, python-format msgid "Maximum number of users for <b>%s</b> has been reached" msgstr "Было достигнуто максимальное количество пользователей <b>%s</b>" -#: ../src/gui_interface.py:300 +#: ../src/gui_interface.py:305 #, python-format msgid "You are banned from group chat <b>%s</b>." msgstr "Вам запрещено входить в комнату <b>%s</b>." -#: ../src/gui_interface.py:306 +#: ../src/gui_interface.py:311 #, python-format msgid "Group chat <b>%s</b> does not exist." msgstr "Комнаты <b>%s</b> не существует." -#: ../src/gui_interface.py:309 +#: ../src/gui_interface.py:314 msgid "Group chat creation is restricted." msgstr "Создание комнат запрещено." -#: ../src/gui_interface.py:312 +#: ../src/gui_interface.py:317 #, python-format msgid "Your registered nickname must be used in group chat <b>%s</b>." msgstr "Необходимо использовать ваш зарегистрированный ник в комнате <b>%s</b>." -#: ../src/gui_interface.py:317 +#: ../src/gui_interface.py:322 #, python-format msgid "You are not in the members list in groupchat %s." msgstr "Вас нет в списке членов комнаты %s." -#: ../src/gui_interface.py:400 -#: ../src/gui_interface.py:404 +#: ../src/gui_interface.py:405 +#: ../src/gui_interface.py:409 #, python-format msgid "Error %(code)s: %(msg)s" msgstr "Ошибка %(code)s: %(msg)s" -#: ../src/gui_interface.py:456 +#: ../src/gui_interface.py:461 #: ../src/notify.py:281 msgid "Subscription request" msgstr "Запрос подписки" -#: ../src/gui_interface.py:481 +#: ../src/gui_interface.py:486 msgid "Authorization accepted" msgstr "Авторизация принята" -#: ../src/gui_interface.py:482 +#: ../src/gui_interface.py:487 #, python-format msgid "The contact \"%s\" has authorized you to see his or her status." msgstr "Контакт «%s» авторизовал вас, теперь вы можете видеть его статус." -#: ../src/gui_interface.py:490 +#: ../src/gui_interface.py:495 #, python-format msgid "Contact \"%s\" removed subscription from you" msgstr "Контакт «%s» отозвал подписку с вами" -#: ../src/gui_interface.py:491 +#: ../src/gui_interface.py:496 msgid "" "You will always see him or her as offline.\n" "Do you want to remove him or her from your contact list?" @@ -8918,61 +9165,69 @@ msgstr "" "Вы всегда будете видеть его или её как отключенными.\n" "Удалить его или её из контакт-листа?" -#: ../src/gui_interface.py:512 +#: ../src/gui_interface.py:517 #: ../src/notify.py:283 msgid "Unsubscribed" msgstr "От подписки отказался" -#: ../src/gui_interface.py:523 +#: ../src/gui_interface.py:528 #, python-format msgid "Contact with \"%s\" cannot be established" msgstr "Связь с «%s» не может быть установлена" -#: ../src/gui_interface.py:621 +#: ../src/gui_interface.py:626 msgid "You configured Gajim to use GPG agent, but there is no GPG agent running or it returned a wrong passphrase.\n" msgstr "Gajim настроен на использование GPG агента, но GPG агент не запущен или он возвратил неверный пароль.\n" -#: ../src/gui_interface.py:623 -#: ../src/gui_interface.py:631 +#: ../src/gui_interface.py:628 +#: ../src/gui_interface.py:636 msgid "You are currently connected without your OpenPGP key." msgstr "Вы сейчас соединены без ключа OpenPGP." -#: ../src/gui_interface.py:625 +#: ../src/gui_interface.py:630 msgid "Your passphrase is incorrect" msgstr "Ваша парольная фраза неверна" -#: ../src/gui_interface.py:630 +#: ../src/gui_interface.py:635 msgid "OpenGPG Passphrase Incorrect" msgstr "Парольная фраза OpenGPG неверна" -#: ../src/gui_interface.py:643 +#: ../src/gui_interface.py:648 #, fuzzy msgid "Certificate Passphrase Required" msgstr "Сертификат просрочен" -#: ../src/gui_interface.py:644 +#: ../src/gui_interface.py:649 #, fuzzy, python-format msgid "Enter the passphrase for the certificate for account %s" msgstr "Введите пароль для ключа %(keyid)s (аккаунт %(account)s)." -#: ../src/gui_interface.py:666 +#: ../src/gui_interface.py:671 msgid "GPG key not trusted" msgstr "Ключ GPG не является доверенным" -#: ../src/gui_interface.py:666 +#: ../src/gui_interface.py:671 msgid "The GPG key used to encrypt this chat is not trusted. Do you really want to encrypt this message?" msgstr "Ключ GPG используемый для шифрования не является доверенным. Вы действительно хотите зашифровать эти сообщения?" -#: ../src/gui_interface.py:679 +#: ../src/gui_interface.py:684 msgid "Gnome Keyring is installed but not correctly started (environment variable probably not correctly set)" msgstr "Gnome Keyring установлен, но некорректно запущен (возможно, неверно установлена переменная среды)" -#: ../src/gui_interface.py:786 +#: ../src/gui_interface.py:722 +msgid "Please copy / paste the refresh token from the website that has just been opened." +msgstr "" + +#: ../src/gui_interface.py:725 +msgid "Oauth2 Credentials" +msgstr "" + +#: ../src/gui_interface.py:815 #, python-format msgid "New mail on %(gmail_mail_address)s" msgstr "Новое письмо на %(gmail_mail_address)s" -#: ../src/gui_interface.py:788 +#: ../src/gui_interface.py:817 #, python-format msgid "You have %d new mail conversation" msgid_plural "You have %d new mail conversations" @@ -8980,7 +9235,7 @@ msgstr[0] "У вас есть %d непрочитанное письмо" msgstr[1] "У вас есть %d непрочитанных письма" msgstr[2] "У вас есть %d непрочитанных писем" -#: ../src/gui_interface.py:801 +#: ../src/gui_interface.py:830 #, python-format msgid "" "\n" @@ -8995,68 +9250,68 @@ msgstr "" "Тема: %(subject)s\n" "%(snippet)s" -#: ../src/gui_interface.py:866 +#: ../src/gui_interface.py:895 #, python-format msgid "%s wants to send you a file." msgstr "%s хочет отправить вам файл." -#: ../src/gui_interface.py:938 +#: ../src/gui_interface.py:967 #, python-format msgid "You successfully received %(filename)s from %(name)s." msgstr "Успешно получен файл %(filename)s от %(name)s." #. ft stopped -#: ../src/gui_interface.py:942 +#: ../src/gui_interface.py:971 #, python-format msgid "File transfer of %(filename)s from %(name)s stopped." msgstr "Передача файла %(filename)s от %(name)s приостановлена." -#: ../src/gui_interface.py:955 +#: ../src/gui_interface.py:984 #, python-format msgid "You successfully sent %(filename)s to %(name)s." msgstr "%(name)s успешно получил(а) отправленный вами файл %(filename)s." #. ft stopped -#: ../src/gui_interface.py:959 +#: ../src/gui_interface.py:988 #, python-format msgid "File transfer of %(filename)s to %(name)s stopped." msgstr "Передача файла %(filename)s к %(name)s приостановлена." -#: ../src/gui_interface.py:1034 +#: ../src/gui_interface.py:1063 msgid "Unable to decrypt message" msgstr "Сообщение не удалось расшифровать" -#: ../src/gui_interface.py:1046 +#: ../src/gui_interface.py:1075 msgid "Username Conflict" msgstr "Такое имя уже есть" -#: ../src/gui_interface.py:1047 +#: ../src/gui_interface.py:1076 msgid "Please type a new username for your local account" msgstr "Введите новое имя пользователя для локальной учетной записи" -#: ../src/gui_interface.py:1062 +#: ../src/gui_interface.py:1091 msgid "Resource Conflict" msgstr "Такое имя уже есть" -#: ../src/gui_interface.py:1063 +#: ../src/gui_interface.py:1092 msgid "You are already connected to this account with the same resource. Please type a new one" msgstr "Вы уже подсоединены к этой учетной записи с таким же ресурсом. Введите другой ресурс" #. TODO: we should use another pixmap ;-) -#: ../src/gui_interface.py:1108 +#: ../src/gui_interface.py:1137 #, python-format msgid "%s wants to start a voice chat." msgstr "%s хочет начать видео сеанс." -#: ../src/gui_interface.py:1111 +#: ../src/gui_interface.py:1140 msgid "Voice Chat Request" msgstr "Запрос аудио сеанса" -#: ../src/gui_interface.py:1198 +#: ../src/gui_interface.py:1227 msgid "Error verifying SSL certificate" msgstr "Ошибка при проверке SSL сертификата" -#: ../src/gui_interface.py:1199 +#: ../src/gui_interface.py:1228 #, python-format msgid "" "There was an error verifying the SSL certificate of your jabber server: %(error)s\n" @@ -9065,15 +9320,15 @@ msgstr "" "Произошла ошибка при проверке сертификата SSL вашего jabber сервера: %(error)s\n" "Вы всё ещё хотите подключиться к этому серверу?" -#: ../src/gui_interface.py:1208 +#: ../src/gui_interface.py:1237 msgid "Ignore this error for this certificate." msgstr "Игнорировать эту ошибку для данного сертификата." -#: ../src/gui_interface.py:1233 +#: ../src/gui_interface.py:1262 msgid "SSL certificate error" msgstr "Ошибка SSL сертификата" -#: ../src/gui_interface.py:1234 +#: ../src/gui_interface.py:1263 #, python-format msgid "" "It seems the SSL certificate of account %(account)s has changed or your connection is being hacked.\n" @@ -9087,13 +9342,13 @@ msgstr "" "Новый отпечаток: %(new)s\n" "Вы всё ещё хотите соединиться и обновить отпечаток сертификата?" -#: ../src/gui_interface.py:1273 -#: ../src/gui_interface.py:1317 -#: ../src/gui_interface.py:1359 +#: ../src/gui_interface.py:1302 +#: ../src/gui_interface.py:1346 +#: ../src/gui_interface.py:1388 msgid "Insecure connection" msgstr "Небезопасное соединение" -#: ../src/gui_interface.py:1274 +#: ../src/gui_interface.py:1303 #, python-format msgid "" "You are about to connect to the account %(account)s (%(server)s) with an insecure connection. This means all your conversations will be exchanged unencrypted. This type of connection is really discouraged.\n" @@ -9102,73 +9357,73 @@ msgstr "" "Вы хотите подключить учетную запись %(account)s (%(server)s) через незащищенное соединение. Вся ваша переписка не будет зашифрована. Этот тип подключения не рекомендуется.\n" "Вы действительно хотите это сделать?" -#: ../src/gui_interface.py:1280 -#: ../src/gui_interface.py:1321 -#: ../src/gui_interface.py:1362 +#: ../src/gui_interface.py:1309 +#: ../src/gui_interface.py:1350 +#: ../src/gui_interface.py:1391 msgid "Yes, I really want to connect insecurely" msgstr "Да, я действительно хочу соединиться небезопасно" -#: ../src/gui_interface.py:1281 +#: ../src/gui_interface.py:1310 msgid "Gajim will NOT connect unless you check this box" msgstr "" -#: ../src/gui_interface.py:1318 +#: ../src/gui_interface.py:1347 msgid "You are about to send your password on an insecure connection. You should install PyOpenSSL to prevent that. Are you sure you want to do that?" msgstr "Вы хотите отправить пароль через небезопасное соединение. Вы уверены? (Установите PyOpenSSL, чтобы этого не происходило.)" -#: ../src/gui_interface.py:1360 +#: ../src/gui_interface.py:1389 msgid "You are about to send your password unencrypted on an insecure connection. Are you sure you want to do that?" msgstr "Вы хотите отправить пароль через небезопасное соединение. Вы уверены?" #. theme doesn't exist, disable emoticons -#: ../src/gui_interface.py:1869 -#: ../src/gui_interface.py:1892 +#: ../src/gui_interface.py:1898 +#: ../src/gui_interface.py:1921 msgid "Emoticons disabled" msgstr "Смайлики выключены" -#: ../src/gui_interface.py:1870 +#: ../src/gui_interface.py:1899 msgid "Your configured emoticons theme has not been found, so emoticons have been disabled." msgstr "Тема смайликов не найдена, они будут отключены." -#: ../src/gui_interface.py:1893 +#: ../src/gui_interface.py:1922 msgid "Your configured emoticons theme cannot been loaded. You maybe need to update the format of emoticons.py file. See http://trac.gajim.org/wiki/Emoticons for more details." msgstr "Смайлики не могут быть загружены. Возможно, вам нужно обновить формат файла emoticons.py. Подробности на http://trac.gajim.org/wiki/Emoticons." -#: ../src/gui_interface.py:1937 -#: ../src/roster_window.py:3788 +#: ../src/gui_interface.py:1966 +#: ../src/roster_window.py:3834 msgid "You cannot join a group chat while you are invisible" msgstr "Вы не можете зайти в комнату, так как вы в режиме невидимости." #. it is good to notify the user #. in case he or she cannot see the output of the console -#: ../src/gui_interface.py:2324 +#: ../src/gui_interface.py:2353 msgid "Could not save your settings and preferences" msgstr "Не могу сохранить ваши установки и настройки" -#: ../src/gui_interface.py:2874 +#: ../src/gui_interface.py:2915 msgid "Passphrase Required" msgstr "Требуется парольная фраза" -#: ../src/gui_interface.py:2875 +#: ../src/gui_interface.py:2916 #, python-format msgid "Enter GPG key passphrase for key %(keyid)s (account %(account)s)." msgstr "Введите пароль для ключа %(keyid)s (аккаунт %(account)s)." -#: ../src/gui_interface.py:2889 +#: ../src/gui_interface.py:2930 msgid "GPG key expired" msgstr "Срок действия ключа GPG истёк" -#: ../src/gui_interface.py:2890 +#: ../src/gui_interface.py:2931 #, python-format msgid "Your GPG key has expired, you will be connected to %s without OpenPGP." msgstr "Срок действия вашего ключа GPG истёк, вы будете подключены к %s без использования OpenPGP." #. ask again -#: ../src/gui_interface.py:2899 +#: ../src/gui_interface.py:2940 msgid "Wrong Passphrase" msgstr "Неверная парольная фраза" -#: ../src/gui_interface.py:2900 +#: ../src/gui_interface.py:2941 msgid "Please retype your GPG passphrase or press Cancel." msgstr "Введите парольную фразу для GPG еще раз или нажмите «Отмена»." @@ -9176,7 +9431,7 @@ msgstr "Введите парольную фразу для GPG еще раз и msgid "_New Group Chat" msgstr "В _новую комнату" -#: ../src/gui_menu_builder.py:419 +#: ../src/gui_menu_builder.py:420 msgid "I would like to add you to my roster" msgstr "Вы не против, если я добавлю Вас к себе в ростер?" @@ -9192,7 +9447,7 @@ msgstr "Контакты" #. holds time #: ../src/history_manager.py:169 #: ../src/history_manager.py:213 -#: ../src/history_window.py:98 +#: ../src/history_window.py:99 msgid "Date" msgstr "Дата" @@ -9205,7 +9460,7 @@ msgstr "Ник" #. holds message #: ../src/history_manager.py:185 #: ../src/history_manager.py:220 -#: ../src/history_window.py:106 +#: ../src/history_window.py:107 msgid "Message" msgstr "Сообщение" @@ -9268,49 +9523,40 @@ msgstr[0] "Вы точно хотите удалить выделенное со msgstr[1] "Вы точно хотите удалить выделенные сообщения?" msgstr[2] "Вы точно хотите удалить выделенные сообщения?" -#: ../src/history_window.py:305 +#: ../src/history_window.py:306 #, python-format msgid "Conversation History with %s" msgstr "История %s" -#: ../src/history_window.py:355 +#: ../src/history_window.py:356 msgid "Disk Error" msgstr "Ошибка записи на диск" -#: ../src/history_window.py:443 +#: ../src/history_window.py:444 #, python-format msgid "%(nick)s is now %(status)s: %(status_msg)s" msgstr "%(nick)s теперь %(status)s: %(status_msg)s" -#: ../src/history_window.py:454 +#: ../src/history_window.py:455 #, python-format msgid "Error: %s" msgstr "Ошибка: %s" -#: ../src/history_window.py:456 +#: ../src/history_window.py:457 msgid "Error" msgstr "Ошибка" -#: ../src/history_window.py:458 +#: ../src/history_window.py:459 #, python-format msgid "Status is now: %(status)s: %(status_msg)s" msgstr "Статус установлен в: %(status)s: %(status_msg)s" -#: ../src/history_window.py:461 +#: ../src/history_window.py:462 #, python-format msgid "Status is now: %(status)s" msgstr "Статус установлен в: %(status)s" -#: ../src/htmltextview.py:523 -#: ../src/htmltextview.py:533 -msgid "Timeout loading image" -msgstr "Не могу загрузить изображение" - -#: ../src/htmltextview.py:543 -msgid "Image is too big" -msgstr "Изображение слишком большое" - -#: ../src/htmltextview.py:576 +#: ../src/htmltextview.py:522 msgid "Loading" msgstr "Загрузка" @@ -9350,47 +9596,47 @@ msgstr "— сообщения не будут записаны в лог" msgid "Ignore" msgstr "Игнорировать" -#: ../src/plugins/gui.py:67 +#: ../src/plugins/gui.py:68 msgid "Plugin" msgstr "Модуль" -#: ../src/plugins/gui.py:161 +#: ../src/plugins/gui.py:162 msgid "Plugin failed" msgstr "Неудачный модуль" -#: ../src/plugins/gui.py:205 +#: ../src/plugins/gui.py:206 msgid "Unable to properly remove the plugin" msgstr "Невозможно правильно удалить модуль" #. members not safe -#: ../src/plugins/gui.py:213 -#: ../src/plugins/pluginmanager.py:516 -#: ../src/plugins/pluginmanager.py:524 +#: ../src/plugins/gui.py:214 +#: ../src/plugins/pluginmanager.py:519 +#: ../src/plugins/pluginmanager.py:527 msgid "Archive is malformed" msgstr "Формат архива не поддерживается" -#: ../src/plugins/gui.py:236 -#: ../src/plugins/gui.py:244 -#: ../src/plugins/pluginmanager.py:532 +#: ../src/plugins/gui.py:237 +#: ../src/plugins/gui.py:245 +#: ../src/plugins/pluginmanager.py:535 msgid "Plugin already exists" msgstr "Модуль уже существует" -#: ../src/plugins/gui.py:236 +#: ../src/plugins/gui.py:237 msgid "Overwrite?" msgstr "Перезаписать?" -#: ../src/plugins/gui.py:265 +#: ../src/plugins/gui.py:266 msgid "Configuration" msgstr "Конфигурация" #. it is not zip file #. CRC error -#: ../src/plugins/pluginmanager.py:502 -#: ../src/plugins/pluginmanager.py:508 +#: ../src/plugins/pluginmanager.py:505 +#: ../src/plugins/pluginmanager.py:511 msgid "Archive corrupted" msgstr "Архив поврежден" -#: ../src/plugins/pluginmanager.py:504 +#: ../src/plugins/pluginmanager.py:507 msgid "Archive empty" msgstr "Архив пуст" @@ -9399,12 +9645,12 @@ msgid "Retrieving profile..." msgstr "Получаю данные..." #: ../src/profile_window.py:125 -#: ../src/roster_window.py:3141 +#: ../src/roster_window.py:3184 msgid "File is empty" msgstr "Пустой файл" #: ../src/profile_window.py:128 -#: ../src/roster_window.py:3144 +#: ../src/roster_window.py:3187 msgid "File does not exist" msgstr "Файл не существует" @@ -9412,8 +9658,8 @@ msgstr "Файл не существует" #. unknown format #: ../src/profile_window.py:142 #: ../src/profile_window.py:158 -#: ../src/roster_window.py:3146 -#: ../src/roster_window.py:3157 +#: ../src/roster_window.py:3189 +#: ../src/roster_window.py:3200 msgid "Could not load image" msgstr "Не могу загрузить изображение" @@ -9450,192 +9696,192 @@ msgid "There was an error while publishing your personal information, try again msgstr "При публикации вашей личной информации произошла ошибка, попробуйте позже." #: ../src/roster_window.py:240 -#: ../src/roster_window.py:1028 +#: ../src/roster_window.py:1031 msgid "Merged accounts" msgstr "Объединенные учетные записи" -#: ../src/roster_window.py:1956 +#: ../src/roster_window.py:1999 msgid "Authorization has been sent" msgstr "Была отправлена авторизация" -#: ../src/roster_window.py:1957 +#: ../src/roster_window.py:2000 #, python-format msgid "Now \"%s\" will know your status." msgstr "Теперь «%s» будет знать о вашем статусе." -#: ../src/roster_window.py:1980 +#: ../src/roster_window.py:2023 msgid "Subscription request has been sent" msgstr "Был отправлен запрос на подписку " -#: ../src/roster_window.py:1981 +#: ../src/roster_window.py:2024 #, python-format msgid "If \"%s\" accepts this request you will know his or her status." msgstr "Если «%s» примет ваш запрос, вы будете знать его или её статус" -#: ../src/roster_window.py:1995 +#: ../src/roster_window.py:2038 msgid "Authorization has been removed" msgstr "Авторизация была удалена" -#: ../src/roster_window.py:1996 +#: ../src/roster_window.py:2039 #, python-format msgid "Now \"%s\" will always see you as offline." msgstr "Теперь «%s» всегда будет видеть вас в оффлайне." -#: ../src/roster_window.py:2023 +#: ../src/roster_window.py:2066 msgid "GPG is not usable" msgstr "GPG использовать невозможно" -#: ../src/roster_window.py:2024 +#: ../src/roster_window.py:2067 #, python-format msgid "You will be connected to %s without OpenPGP." msgstr "Вы будете подключены к %s без использования OpenPGP." -#: ../src/roster_window.py:2231 -#: ../src/roster_window.py:3718 +#: ../src/roster_window.py:2274 +#: ../src/roster_window.py:3764 msgid "You are participating in one or more group chats" msgstr "Вы находитесь в одной или более комнатах" -#: ../src/roster_window.py:2232 -#: ../src/roster_window.py:3719 +#: ../src/roster_window.py:2275 +#: ../src/roster_window.py:3765 msgid "Changing your status to invisible will result in disconnection from those group chats. Are you sure you want to go invisible?" msgstr "Переход в состояние невидимости приведет к выходу из этих комнат. Вы точно хотите стать невидимым?" -#: ../src/roster_window.py:2258 +#: ../src/roster_window.py:2301 msgid "desync'ed" msgstr "не синхронизировано" -#: ../src/roster_window.py:2324 +#: ../src/roster_window.py:2367 msgid "Really quit Gajim?" msgstr "Закрыть Gajim?" -#: ../src/roster_window.py:2325 +#: ../src/roster_window.py:2368 msgid "Are you sure you want to quit Gajim?" msgstr "Вы точно хотите закрыть Gajim?" -#: ../src/roster_window.py:2326 +#: ../src/roster_window.py:2369 msgid "Always close Gajim" msgstr "Всегда закрывать Gajim" -#: ../src/roster_window.py:2412 +#: ../src/roster_window.py:2455 msgid "You have running file transfers" msgstr "Идет передача файлов" -#: ../src/roster_window.py:2413 +#: ../src/roster_window.py:2456 msgid "If you quit now, the file(s) being transferred will be stopped. Do you still want to quit?" msgstr "Если выйти сейчас, передача файла остановится. Выйти?" -#: ../src/roster_window.py:2444 -#: ../src/roster_window.py:2860 +#: ../src/roster_window.py:2487 +#: ../src/roster_window.py:2903 msgid "You have unread messages" msgstr "У вас есть непрочитанные сообщения" -#: ../src/roster_window.py:2445 +#: ../src/roster_window.py:2488 msgid "Messages will only be available for reading them later if you have history enabled and contact is in your roster." msgstr "Сообщения будут доступны для чтения позже, если у вас активирована опция истории." -#: ../src/roster_window.py:2861 +#: ../src/roster_window.py:2904 msgid "You must read them before removing this transport." msgstr "Просмотрите все ожидающие события перед удалением транспорта." -#: ../src/roster_window.py:2864 +#: ../src/roster_window.py:2907 #, python-format msgid "Transport \"%s\" will be removed" msgstr "Транспорт «%s» будет удален" -#: ../src/roster_window.py:2865 +#: ../src/roster_window.py:2908 msgid "You will no longer be able to send and receive messages from contacts using this transport." msgstr "У вас теперь не будет возможности приема и отправки сообщения контактам через этот транспорт." -#: ../src/roster_window.py:2868 +#: ../src/roster_window.py:2911 msgid "Transports will be removed" msgstr "Транспорты будут удалены" -#: ../src/roster_window.py:2873 +#: ../src/roster_window.py:2916 #, python-format msgid "You will no longer be able to send and receive messages to contacts from these transports: %s" msgstr "У вас больше не будет возможности приема и отправки сообщений через эти транспорты:%s." -#: ../src/roster_window.py:2941 +#: ../src/roster_window.py:2984 msgid "You are about to block a contact. Are you sure you want to continue?" msgstr "Вы точно хотите заблокировать контакт?" -#: ../src/roster_window.py:2943 +#: ../src/roster_window.py:2986 msgid "This contact will see you offline and you will not receive messages he will send you." msgstr "Этот контакт будет видеть вас как отключенного, а вы не будете получать от него сообщения." #. it's jid -#: ../src/roster_window.py:3033 +#: ../src/roster_window.py:3076 msgid "Rename Contact" msgstr "Переименовать контакт" -#: ../src/roster_window.py:3034 +#: ../src/roster_window.py:3077 #, python-format msgid "Enter a new nickname for contact %s" msgstr "Введите новый ник для контакта %s" -#: ../src/roster_window.py:3041 +#: ../src/roster_window.py:3084 msgid "Rename Group" msgstr "Переименовать группу" -#: ../src/roster_window.py:3042 +#: ../src/roster_window.py:3085 #, python-format msgid "Enter a new name for group %s" msgstr "Введите новое название для группы %s" -#: ../src/roster_window.py:3087 +#: ../src/roster_window.py:3130 msgid "Remove Group" msgstr "Удалить группу" -#: ../src/roster_window.py:3088 +#: ../src/roster_window.py:3131 #, python-format msgid "Do you want to remove group %s from the roster?" msgstr "Вы точно хотите удалить группу %s из ростера?" -#: ../src/roster_window.py:3089 +#: ../src/roster_window.py:3132 msgid "Also remove all contacts in this group from your roster" msgstr "Удалить из ростера все контакты в этой группе" -#: ../src/roster_window.py:3128 +#: ../src/roster_window.py:3171 msgid "Assign OpenPGP Key" msgstr "Назначить ключ OpenPGP" -#: ../src/roster_window.py:3129 +#: ../src/roster_window.py:3172 msgid "Select a key to apply to the contact" msgstr "Выберите ключ, который будет применен к контакту" -#: ../src/roster_window.py:3528 +#: ../src/roster_window.py:3574 #, python-format msgid "Contact \"%s\" will be removed from your roster" msgstr "Контакт «%s» будет удален из вашего ростера" -#: ../src/roster_window.py:3530 +#: ../src/roster_window.py:3576 #, python-format msgid "You are about to remove \"%(name)s\" (%(jid)s) from your roster.\n" msgstr "Вы собираетесь удалить «%(name)s» (%(jid)s) из вашего списка контактов.\n" -#: ../src/roster_window.py:3535 +#: ../src/roster_window.py:3581 msgid "By removing this contact you also remove authorization resulting in him or her always seeing you as offline." msgstr "Удаляя контакт, вы одновременно удалите авторизацию, и этот человек больше не сможет видеть ваш статус." #. Contact is not in roster -#: ../src/roster_window.py:3541 +#: ../src/roster_window.py:3587 msgid "Do you want to continue?" msgstr "Продолжить?" -#: ../src/roster_window.py:3545 +#: ../src/roster_window.py:3591 msgid "By removing this contact you also by default remove authorization resulting in him or her always seeing you as offline." msgstr "Если вы удалите контакт, вы так же удалите и авторизацию. Вы будете видеть его или её всегда в оффлайне." -#: ../src/roster_window.py:3548 +#: ../src/roster_window.py:3594 msgid "I want this contact to know my status after removal" msgstr "Я хочу, чтобы этот контакт видел мой статус после удаления" #. several contact to remove at the same time -#: ../src/roster_window.py:3552 +#: ../src/roster_window.py:3598 msgid "Contacts will be removed from your roster" msgstr "Контакты будут удалены из вашего ростера" -#: ../src/roster_window.py:3557 +#: ../src/roster_window.py:3603 #, python-format msgid "" "By removing these contacts:%s\n" @@ -9644,44 +9890,44 @@ msgstr "" "Вы удаляете эти контакты:%s.\n" "Одновременно вы удалите и авторизацию, то есть они всегда будут видеть вас в оффлайне." -#: ../src/roster_window.py:3615 +#: ../src/roster_window.py:3661 msgid "You are about to send a custom status. Are you sure you want to continue?" msgstr "Вы точно хотите послать другой статус?" -#: ../src/roster_window.py:3617 +#: ../src/roster_window.py:3663 #, python-format msgid "This contact will temporarily see you as %(status)s, but only until you change your status. Then he or she will see your global status." msgstr "Этот контакт будет временно видеть ваш статус как %(status)s, но лишь пока вы не измените свой глобальный статус. Тогда этому контакту станет виден глобальный статус." -#: ../src/roster_window.py:3636 +#: ../src/roster_window.py:3682 msgid "No account available" msgstr "Нет доступной учетной записи" -#: ../src/roster_window.py:3637 +#: ../src/roster_window.py:3683 msgid "You must create an account before you can chat with other contacts." msgstr "Для начала беседы с другими людьми прежде необходимо создать учетную запись." -#: ../src/roster_window.py:4290 +#: ../src/roster_window.py:4373 msgid "Metacontacts storage not supported by your server" msgstr "Сервер не умеет хранить метаконтакты" -#: ../src/roster_window.py:4292 +#: ../src/roster_window.py:4375 msgid "Your server does not support storing metacontacts information. So those information will not be saved on next reconnection." msgstr "Ваш сервер не умеет хранить данные о метаконтактах. Они будут утеряны при следующем подключении." -#: ../src/roster_window.py:4384 +#: ../src/roster_window.py:4467 msgid "You are about to create a metacontact. Are you sure you want to continue?" msgstr "Вы точно хотите создать метаконтакт?" -#: ../src/roster_window.py:4386 +#: ../src/roster_window.py:4469 msgid "Metacontacts are a way to regroup several contacts in one line. Generally it is used when the same person has several Jabber accounts or transport accounts." msgstr "Метаконтакты — это метод группировки нескольких контактов в одну запись. Обычно используется, когда один и тот же человек имеет несколько учетных записей в Jabber или на транспортах." -#: ../src/roster_window.py:4507 +#: ../src/roster_window.py:4590 msgid "Invalid file URI:" msgstr "Неверный файл:" -#: ../src/roster_window.py:4519 +#: ../src/roster_window.py:4602 #, python-format msgid "Do you want to send this file to %s:" msgid_plural "Do you want to send these files to %s:" @@ -9689,17 +9935,17 @@ msgstr[0] "Хотите отправить файл %s:" msgstr[1] "Хотите отправить файлы %s:" msgstr[2] "Хотите отправить файлы %s:" -#: ../src/roster_window.py:4654 +#: ../src/roster_window.py:4737 #, python-format msgid "Send %s to %s" msgstr "Отправить %s контакту %s" -#: ../src/roster_window.py:4665 +#: ../src/roster_window.py:4748 #, python-format msgid "Make %s first contact" msgstr "Сделать %s первым контактом" -#: ../src/roster_window.py:4668 +#: ../src/roster_window.py:4751 #, python-format msgid "Make %s and %s metacontacts" msgstr "Обьединить %s и %s в метаконтакт" @@ -9709,9 +9955,9 @@ msgstr "Обьединить %s и %s в метаконтакт" #. for chat_with #. for single message #. join gc -#: ../src/roster_window.py:5108 -#: ../src/roster_window.py:5162 -#: ../src/roster_window.py:5171 +#: ../src/roster_window.py:5190 +#: ../src/roster_window.py:5244 +#: ../src/roster_window.py:5253 #: ../src/statusicon.py:264 #: ../src/statusicon.py:311 #: ../src/statusicon.py:317 @@ -9720,124 +9966,124 @@ msgid "using account %s" msgstr "используя учетную запись %s" #. add -#: ../src/roster_window.py:5178 +#: ../src/roster_window.py:5260 #, python-format msgid "to %s account" msgstr "для учетной записи %s" #. disco -#: ../src/roster_window.py:5183 +#: ../src/roster_window.py:5265 #, python-format msgid "using %s account" msgstr "учетной записи %s" -#: ../src/roster_window.py:5222 +#: ../src/roster_window.py:5304 #: ../src/statusicon.py:327 msgid "_Manage Bookmarks..." msgstr "Управление _закладками..." #. profile, avatar -#: ../src/roster_window.py:5242 +#: ../src/roster_window.py:5324 #, python-format msgid "of account %s" msgstr "для учетной записи %s" -#: ../src/roster_window.py:5283 +#: ../src/roster_window.py:5365 #, python-format msgid "for account %s" msgstr "для учетной записи %s" -#: ../src/roster_window.py:5343 -#: ../src/roster_window.py:5451 +#: ../src/roster_window.py:5425 +#: ../src/roster_window.py:5533 msgid "_Change Status Message" msgstr "_Изменить сообщение о статусе" -#: ../src/roster_window.py:5376 +#: ../src/roster_window.py:5458 msgid "Publish Tune" msgstr "Музыка" -#: ../src/roster_window.py:5378 +#: ../src/roster_window.py:5460 msgid "Publish Location" msgstr "Отправлять Местоположение" -#: ../src/roster_window.py:5381 +#: ../src/roster_window.py:5463 msgid "Configure Services..." msgstr "Настроить Сервисы..." -#: ../src/roster_window.py:5529 +#: ../src/roster_window.py:5611 msgid "_Maximize All" msgstr "_Развернуть все" -#: ../src/roster_window.py:5539 -#: ../src/roster_window.py:5712 +#: ../src/roster_window.py:5621 +#: ../src/roster_window.py:5794 msgid "Send Group M_essage" msgstr "_Отправить сообщение группе" -#: ../src/roster_window.py:5547 +#: ../src/roster_window.py:5629 msgid "To all users" msgstr "Всем пользователям" -#: ../src/roster_window.py:5551 +#: ../src/roster_window.py:5633 msgid "To all online users" msgstr "Всем, кто подключён" #. Manage Transport submenu -#: ../src/roster_window.py:5732 +#: ../src/roster_window.py:5814 msgid "_Manage Contacts" msgstr "_Управление контактами" #. Edit Groups -#: ../src/roster_window.py:5741 +#: ../src/roster_window.py:5823 msgid "Edit _Groups" msgstr "Редактировать _группы" #. Send single message -#: ../src/roster_window.py:5796 +#: ../src/roster_window.py:5878 msgid "Send Single Message" msgstr "Отправить одиночное сообщение" #. Execute Command -#: ../src/roster_window.py:5843 +#: ../src/roster_window.py:5925 msgid "Execute Command..." msgstr "Выполнить команду..." #. Manage Transport submenu -#: ../src/roster_window.py:5853 +#: ../src/roster_window.py:5935 msgid "_Manage Transport" msgstr "_Управление транспортом" #. Modify Transport -#: ../src/roster_window.py:5862 +#: ../src/roster_window.py:5944 msgid "_Modify Transport" msgstr "_Изменить транспорт" #. Rename -#: ../src/roster_window.py:5872 +#: ../src/roster_window.py:5954 msgid "_Rename" msgstr "П_ереименовать" -#: ../src/roster_window.py:5932 +#: ../src/roster_window.py:6014 msgid "_Maximize" msgstr "Развернут_ь" -#: ../src/roster_window.py:5941 +#: ../src/roster_window.py:6023 msgid "_Reconnect" msgstr "_Переподсоеденится" -#: ../src/roster_window.py:5948 +#: ../src/roster_window.py:6030 msgid "_Disconnect" msgstr "_Выйти" #. History manager -#: ../src/roster_window.py:6037 +#: ../src/roster_window.py:6119 msgid "History Manager" msgstr "Менеджер истории" -#: ../src/roster_window.py:6048 +#: ../src/roster_window.py:6130 msgid "_Join New Group Chat" msgstr "_Войти в новую комнату" -#: ../src/roster_window.py:6267 +#: ../src/roster_window.py:6349 msgid "Change Status Message..." msgstr "Изменить сообщение о статусе..." @@ -9856,16 +10102,12 @@ msgstr "Ошибка в принятой форме данных" msgid "No result" msgstr "Нет результата" -#: ../src/session.py:99 -msgid "Disk WriteError" -msgstr "Ошибка записи на диск" - -#: ../src/session.py:410 -#: ../src/session.py:469 +#: ../src/session.py:411 +#: ../src/session.py:470 msgid "Confirm these session options" msgstr "Подтвердить данные настройки сеанса" -#: ../src/session.py:412 +#: ../src/session.py:413 #, fuzzy, python-format msgid "" "The remote client wants to negotiate a session with these features:\n" @@ -9881,7 +10123,7 @@ msgstr "" "\n" "Приемлемы ли эти настройки?" -#: ../src/session.py:471 +#: ../src/session.py:472 #, python-format msgid "" "The remote client selected these options:\n" @@ -9896,7 +10138,7 @@ msgstr "" "\n" "Продолжить этот сеанс?" -#: ../src/session.py:474 +#: ../src/session.py:475 #, fuzzy msgid "Always accept for this contact" msgstr "Используется ли для этого контакта OpenPGP?" @@ -9913,139 +10155,139 @@ msgstr "Скрыть _ростер" msgid "Hide this menu" msgstr "Скрыть это меню" -#: ../src/tooltips.py:392 -#: ../src/tooltips.py:604 +#: ../src/tooltips.py:393 +#: ../src/tooltips.py:605 msgid "Jabber ID: " msgstr "Jabber ID: " -#: ../src/tooltips.py:395 -#: ../src/tooltips.py:608 +#: ../src/tooltips.py:396 +#: ../src/tooltips.py:609 msgid "Resource: " msgstr "Ресурс: " -#: ../src/tooltips.py:401 +#: ../src/tooltips.py:402 #, python-format msgid "%(owner_or_admin_or_member)s of this group chat" msgstr "%(owner_or_admin_or_member)s этой комнаты" -#: ../src/tooltips.py:502 +#: ../src/tooltips.py:503 msgid " [blocked]" msgstr "[заблокировано]" -#: ../src/tooltips.py:506 +#: ../src/tooltips.py:507 msgid " [minimized]" msgstr "[свернуто]" -#: ../src/tooltips.py:521 -#: ../src/tooltips.py:777 +#: ../src/tooltips.py:522 +#: ../src/tooltips.py:778 msgid "Status: " msgstr "Статус: " -#: ../src/tooltips.py:565 +#: ../src/tooltips.py:566 #, python-format msgid "Last status: %s" msgstr "Последний статус: %s" -#: ../src/tooltips.py:567 +#: ../src/tooltips.py:568 #, python-format msgid " since %s" msgstr " с %s" -#: ../src/tooltips.py:585 +#: ../src/tooltips.py:586 msgid "Connected" msgstr "Подключен" -#: ../src/tooltips.py:587 +#: ../src/tooltips.py:588 msgid "Disconnected" msgstr "Отключен" #. ('both' is the normal sub so we don't show it) -#: ../src/tooltips.py:615 +#: ../src/tooltips.py:616 msgid "Subscription: " msgstr "Подписка: " -#: ../src/tooltips.py:625 +#: ../src/tooltips.py:626 msgid "OpenPGP: " msgstr "OpenPGP: " -#: ../src/tooltips.py:646 +#: ../src/tooltips.py:647 #, python-format msgid "Idle since %s" msgstr "Бездействует с %s" -#: ../src/tooltips.py:647 +#: ../src/tooltips.py:648 #, python-format msgid "Idle for %s" msgstr "Время бездействия %s" -#: ../src/tooltips.py:698 +#: ../src/tooltips.py:699 #, python-format msgid "Mood: %s" msgstr "Настроение: %s" -#: ../src/tooltips.py:702 +#: ../src/tooltips.py:703 #, python-format msgid "Activity: %s" msgstr "Занятие: %s" -#: ../src/tooltips.py:706 +#: ../src/tooltips.py:707 #, python-format msgid "Tune: %s" msgstr "Слушаю: %s" -#: ../src/tooltips.py:710 +#: ../src/tooltips.py:711 #, python-format msgid "Location: %s" msgstr "Местоположение: %s" -#: ../src/tooltips.py:735 +#: ../src/tooltips.py:736 msgid "Download" msgstr "Скачать" -#: ../src/tooltips.py:741 +#: ../src/tooltips.py:742 msgid "Upload" msgstr "Загрузить" -#: ../src/tooltips.py:748 +#: ../src/tooltips.py:749 msgid "Type: " msgstr "Тип: " -#: ../src/tooltips.py:752 +#: ../src/tooltips.py:753 msgid "Transferred: " msgstr "Передано: " -#: ../src/tooltips.py:755 -#: ../src/tooltips.py:776 +#: ../src/tooltips.py:756 +#: ../src/tooltips.py:777 msgid "Not started" msgstr "Не начато" -#: ../src/tooltips.py:759 +#: ../src/tooltips.py:760 msgid "Stopped" msgstr "Остановлено" -#: ../src/tooltips.py:761 -#: ../src/tooltips.py:764 +#: ../src/tooltips.py:762 +#: ../src/tooltips.py:765 msgid "Completed" msgstr "Завершено" -#: ../src/tooltips.py:768 +#: ../src/tooltips.py:769 msgid "?transfer status:Paused" msgstr "Приостановлено" #. stalled is not paused. it is like 'frozen' it stopped alone -#: ../src/tooltips.py:772 +#: ../src/tooltips.py:773 msgid "Stalled" msgstr "Ожидание" -#: ../src/tooltips.py:774 +#: ../src/tooltips.py:775 msgid "Transferring" msgstr "Передается" -#: ../src/tooltips.py:812 +#: ../src/tooltips.py:813 msgid "This service has not yet responded with detailed information" msgstr "Этот сервис еще не сообщил информацию о себе" -#: ../src/tooltips.py:815 +#: ../src/tooltips.py:816 msgid "" "This service could not respond with detailed information.\n" "It is most likely legacy or broken" @@ -10115,6 +10357,15 @@ msgstr "Нет ожидающего запроса на подписку." msgid " resource with priority " msgstr " ресурс с приоритетом " +#~ msgid "error: cannot open %s for reading" +#~ msgstr "ошибка: не могу открыть %s для чтения" + +#~ msgid "Requires pybonjour (http://o2s.csail.mit.edu/o2s-wiki/pybonjour)." +#~ msgstr "Требует pybonjour (http://o2s.csail.mit.edu/o2s-wiki/pybonjour)." + +#~ msgid "Disk WriteError" +#~ msgstr "Ошибка записи на диск" + #~ msgid "A GTK+ jabber client" #~ msgstr "Jabber-клиент на GTK+" @@ -10242,9 +10493,6 @@ msgstr " ресурс с приоритетом " #~ msgid "when I'm in" #~ msgstr "Когда я в " -#~ msgid "Available" -#~ msgstr "Доступен" - #~ msgid "Descrition:" #~ msgstr "Описание: " @@ -10613,18 +10861,9 @@ msgstr " ресурс с приоритетом " #~ "Приём и отправка локальных (link-local) сообщений и сообщений в сетях " #~ "zeroconf" -#~ msgid "Command not supported for zeroconf account." -#~ msgstr "Команда не поддерживается учетной записью zeroconf." - #~ msgid "Commands: %s" #~ msgstr "Команды: %s" -#~ msgid "Usage: /%s, clears the text window." -#~ msgstr "Использование: /%s, очищает текстовое окно." - -#~ msgid "Usage: /%s, hide the chat buttons." -#~ msgstr "Использование: /%s, скрывает кнопки беседы." - #~ msgid "" #~ "Usage: /%(command)s <action>, sends action to the current group chat. Use " #~ "third person. (e.g. /%(command)s explodes.)" @@ -10632,12 +10871,6 @@ msgstr " ресурс с приоритетом " #~ "Использование: /%(command)s <действие>, совершает действие в текущей " #~ "комнате. Используйте третье лицо (например, «/%(command)s взрывается».)" -#~ msgid "Usage: /%s, sends a ping to the contact" -#~ msgstr "Использование: /%s, посылает пинг контакту" - -#~ msgid "Usage: /%s, send the message to the contact" -#~ msgstr "Использование: /%s, посылает сообщение контакту" - #~ msgid "No help info for /%s" #~ msgstr "Нет подсказки для /%s" @@ -10657,9 +10890,6 @@ msgstr " ресурс с приоритетом " #~ "Неоднозначность: %d ника совпадают.\n" #~ " Используйте графический интерфейс" -#~ msgid "Nickname not found" -#~ msgstr "Ник не обнаружен" - #~ msgid "" #~ "There is an ambiguity: %d nicks match.\n" #~ " Please use graphical interface" @@ -10677,12 +10907,6 @@ msgstr " ресурс с приоритетом " #~ "данный момент находится в комнате, то он/она/оно также будет выгнан." #~ msgid "" -#~ "Usage: /%s <nickname>, opens a private chat window with the specified " -#~ "occupant." -#~ msgstr "" -#~ "Использование: /%s <ник>, открывает окно привата с указанным посетителем." - -#~ msgid "" #~ "Usage: /%s [reason], closes the current window or tab, displaying reason " #~ "if specified." #~ msgstr "" @@ -10720,9 +10944,6 @@ msgstr " ресурс с приоритетом " #~ msgid "Usage: /%s <nickname>, changes your nickname in current group chat." #~ msgstr "Использование: /%s <ник>, меняет ваш ник в текущей комнате." -#~ msgid "Usage: /%s , display the names of group chat occupants." -#~ msgstr "Использование: /%s, показывает список присутствующих в комнате." - #~ msgid "" #~ "Usage: /%s [topic], displays or updates the current group chat topic." #~ msgstr "" @@ -10983,9 +11204,6 @@ msgstr " ресурс с приоритетом " #~ "Когда устанавливается зашифрованная сессия, дожен ли Gajim предпочитать " #~ "использовать открытый ключ для идентификации?" -#~ msgid "Click to see past conversations with this contact" -#~ msgstr "Щелкните для просмотра последних бесед с этим человеком" - #~ msgid "Click to see past conversation in this room" #~ msgstr "Щелкните для просмотра бесед в этой комнате" @@ -2,13 +2,13 @@ # Copyright (C) 2010 THE Gajim - A Jabber Instant Messager'S COPYRIGHT HOLDER # This file is distributed under the same license as the Gajim - A Jabber Instant Messager package. # -# Sergiy Yegorov <prapor@unixzone.org.ua>, 2010, 2011. +# Sergiy Yegorov <prapor@unixzone.org.ua>, 2010, 2011, 2012. msgid "" msgstr "" "Project-Id-Version: Gajim - A Jabber Instant Messager 0.14.0.1-2fa5ddcd1adf\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-10-22 10:57+0200\n" -"PO-Revision-Date: 2011-10-19 12:08+0300\n" +"POT-Creation-Date: 2012-02-03 01:18+0200\n" +"PO-Revision-Date: 2012-02-03 01:43+0200\n" "Last-Translator: Sergiy Yegorov <prapor@unixzone.org.ua>\n" "Language-Team: Ukrainian <kde-i18n-doc@kde.org>\n" "Language: uk\n" @@ -107,7 +107,7 @@ msgid "I want to _register for a new account" msgstr "Я бажаю _зареєструвати новий обліковий запис" #: ../data/gui/account_creation_wizard_window.ui.h:15 -#: ../data/gui/accounts_window.ui.h:28 +#: ../data/gui/accounts_window.ui.h:30 msgid "If checked, Gajim will remember the password for this account" msgstr "" "Якщо буде позначено цей пункт, Gajim запам'ятає пароль цього облікового " @@ -118,13 +118,14 @@ msgid "Manage..." msgstr "Керування..." #: ../data/gui/account_creation_wizard_window.ui.h:17 -#: ../data/gui/accounts_window.ui.h:39 ../data/gui/change_mood_dialog.ui.h:3 -#: ../src/config.py:1289 ../src/config.py:1392 ../src/config.py:1703 -#: ../src/config.py:1708 ../src/config.py:2284 ../src/config.py:2363 -#: ../src/config.py:2376 ../src/config.py:3655 ../src/config.py:3730 +#: ../data/gui/accounts_window.ui.h:41 ../data/gui/change_mood_dialog.ui.h:3 +#: ../src/config.py:1265 ../src/config.py:1279 ../src/config.py:1284 +#: ../src/config.py:1332 ../src/config.py:1435 ../src/config.py:1746 +#: ../src/config.py:1751 ../src/config.py:2327 ../src/config.py:2406 +#: ../src/config.py:2419 ../src/config.py:3699 ../src/config.py:3774 #: ../src/dialogs.py:311 ../src/dialogs.py:313 ../src/dialogs.py:519 -#: ../src/dialogs.py:532 ../src/roster_window.py:3092 -#: ../src/roster_window.py:3098 ../src/roster_window.py:3103 +#: ../src/dialogs.py:532 ../src/roster_window.py:3139 +#: ../src/roster_window.py:3145 ../src/roster_window.py:3150 msgid "None" msgstr "Немає" @@ -133,7 +134,7 @@ msgid "Prox_y:" msgstr "Прокс_і:" #: ../data/gui/account_creation_wizard_window.ui.h:19 -#: ../data/gui/accounts_window.ui.h:48 +#: ../data/gui/accounts_window.ui.h:50 msgid "Save pass_word" msgstr "Зберегти _пароль" @@ -167,12 +168,12 @@ msgid "_Hostname:" msgstr "Назва _вузла:" #: ../data/gui/account_creation_wizard_window.ui.h:27 -#: ../data/gui/accounts_window.ui.h:61 +#: ../data/gui/accounts_window.ui.h:63 msgid "_Jabber ID:" msgstr "_Jabber ID:" #: ../data/gui/account_creation_wizard_window.ui.h:28 -#: ../data/gui/accounts_window.ui.h:63 +#: ../data/gui/accounts_window.ui.h:65 #: ../data/gui/manage_bookmarks_window.ui.h:8 msgid "_Password:" msgstr "_Password:" @@ -214,35 +215,41 @@ msgstr "Обліковий запис" msgid "Accounts" msgstr "Облікові записи" -#: ../data/gui/accounts_window.ui.h:8 +#. Change label for accept_button to action name instead of 'OK'. +#: ../data/gui/accounts_window.ui.h:8 ../src/dialogs.py:3384 +#: ../src/dialogs.py:3430 +msgid "Add" +msgstr "Додати" + +#: ../data/gui/accounts_window.ui.h:9 msgid "Administration operations" msgstr "Адміністративні дії" -#: ../data/gui/accounts_window.ui.h:9 +#: ../data/gui/accounts_window.ui.h:10 msgid "Anonymous authentication" msgstr "Анонімна аутентифікація" -#: ../data/gui/accounts_window.ui.h:10 +#: ../data/gui/accounts_window.ui.h:11 msgid "Auto-reconnect when connection is lost" msgstr "Автоматично відновлювати втрачене з'єднання" -#: ../data/gui/accounts_window.ui.h:11 +#: ../data/gui/accounts_window.ui.h:12 msgid "Browse..." msgstr "Перегляд..." -#: ../data/gui/accounts_window.ui.h:12 +#: ../data/gui/accounts_window.ui.h:13 msgid "C_onnect on Gajim startup" msgstr "_З'єднуватись після запуску Gajim" -#: ../data/gui/accounts_window.ui.h:13 +#: ../data/gui/accounts_window.ui.h:14 msgid "Certificate is e_ncrypted" msgstr "Сертифікат зашифровано" -#: ../data/gui/accounts_window.ui.h:14 +#: ../data/gui/accounts_window.ui.h:15 msgid "Chan_ge Password" msgstr "_Змінити пароль" -#: ../data/gui/accounts_window.ui.h:15 +#: ../data/gui/accounts_window.ui.h:16 msgid "" "Check this so Gajim will ask you before sending your password over an " "insecure connection." @@ -250,47 +257,53 @@ msgstr "" "Позначте цей пункт, щоб Gajim запитував вас перед надсиланням пароля через " "незахищеним з’єднанням." -#: ../data/gui/accounts_window.ui.h:16 +#: ../data/gui/accounts_window.ui.h:17 msgid "Choose _Key..." msgstr "Обрати _ключ..." -#: ../data/gui/accounts_window.ui.h:17 +#: ../data/gui/accounts_window.ui.h:18 msgid "Click to change account's password" msgstr "Натисніть. щоб змінити пароль цього облікового запису" -#: ../data/gui/accounts_window.ui.h:18 +#: ../data/gui/accounts_window.ui.h:19 msgid "Click to request authorization to all contacts of another account" msgstr "" "Натисніть, щоб запитати уповноваження від усіх контактів іншого облікового " "запису" -#: ../data/gui/accounts_window.ui.h:19 +#: ../data/gui/accounts_window.ui.h:20 msgid "Client certificate" msgstr "Клієнтський сертифікат" -#: ../data/gui/accounts_window.ui.h:20 +#: ../data/gui/accounts_window.ui.h:21 msgid "Co_nnect on Gajim startup" msgstr "_З'єднуватись після запуску Gajim" -#: ../data/gui/accounts_window.ui.h:21 +#: ../data/gui/accounts_window.ui.h:22 msgid "Connection" msgstr "З'єднання" -#: ../data/gui/accounts_window.ui.h:22 +#. Change label for accept_button to action name instead of 'OK'. +#: ../data/gui/accounts_window.ui.h:23 ../src/dialogs.py:3388 +#: ../src/dialogs.py:3485 +msgid "Delete" +msgstr "Вилучити" + +#: ../data/gui/accounts_window.ui.h:24 #: ../data/gui/zeroconf_information_window.ui.h:2 msgid "E-Mail:" msgstr "Ел. пошта:" -#: ../data/gui/accounts_window.ui.h:23 +#: ../data/gui/accounts_window.ui.h:25 #: ../data/gui/zeroconf_information_window.ui.h:3 msgid "First Name:" msgstr "Ім'я:" #. No configured account -#: ../data/gui/accounts_window.ui.h:24 ../data/gui/roster_window.ui.h:5 -#: ../src/common/helpers.py:1148 ../src/common/helpers.py:1160 -#: ../src/notify.py:318 ../src/notify.py:341 ../src/notify.py:391 -#: ../src/notify.py:407 +#: ../data/gui/accounts_window.ui.h:26 ../data/gui/roster_window.ui.h:5 +#: ../src/common/helpers.py:1168 ../src/common/helpers.py:1180 +#: ../src/notify.py:314 ../src/notify.py:337 ../src/notify.py:387 +#: ../src/notify.py:403 msgid "Gajim" msgstr "Gajim" @@ -298,13 +311,14 @@ msgstr "Gajim" #. FIXME: Ugly workaround. #. Maybe we haven't been in any group (defaults to General) #. General group cannot be changed -#: ../data/gui/accounts_window.ui.h:25 ../data/gui/preferences_window.ui.h:56 +#: ../data/gui/accounts_window.ui.h:27 ../data/gui/preferences_window.ui.h:57 #: ../src/common/contacts.py:132 ../src/dialogs.py:112 ../src/dialogs.py:124 -#: ../src/roster_window.py:3034 ../src/roster_window.py:5652 +#: ../src/roster_window.py:3081 ../src/roster_window.py:4148 +#: ../src/roster_window.py:5738 msgid "General" msgstr "Загальне" -#: ../data/gui/accounts_window.ui.h:26 +#: ../data/gui/accounts_window.ui.h:28 msgid "" "If checked, Gajim will also broadcast some more IPs except from just your " "IP, so file transfer has higher chances of working." @@ -313,13 +327,13 @@ msgstr "" "адреси. окрім вашої, тому передавання файлів працюватиме з більшою " "ймовірністю." -#: ../data/gui/accounts_window.ui.h:27 +#: ../data/gui/accounts_window.ui.h:29 msgid "If checked, Gajim will get the password from a GPG agent like seahorse" msgstr "" "Якщо буде позначено цей пункт, Gajim буде отримувати пароль від агента GPG, " "наприклад, seahorse." -#: ../data/gui/accounts_window.ui.h:29 +#: ../data/gui/accounts_window.ui.h:31 msgid "" "If checked, Gajim will send keep-alive packets to prevent connection timeout " "which results in disconnection" @@ -327,7 +341,7 @@ msgstr "" "Якщо буде позначено цей пункт, Gajim надсилатиме порожні пакети для " "запобігання простою з'єднання (такий простій може призводити до від'єднання)" -#: ../data/gui/accounts_window.ui.h:30 +#: ../data/gui/accounts_window.ui.h:32 msgid "" "If checked, Gajim, when launched, will automatically connect to jabber using " "this account" @@ -335,7 +349,7 @@ msgstr "" "Якщо буде позначено цей пункт, Gajim під час запуску буде автоматично " "намагатись з'єднатися з вказаним обліковим записом на сервері jabber" -#: ../data/gui/accounts_window.ui.h:31 +#: ../data/gui/accounts_window.ui.h:33 msgid "" "If checked, any change to the global status (handled by the combobox at the " "bottom of the roster window) will change the status of this account " @@ -345,7 +359,7 @@ msgstr "" "спадним списком у нижній частині вікна реєстру) призведе до відповідних змін " "стану цього облікового запису" -#: ../data/gui/accounts_window.ui.h:32 +#: ../data/gui/accounts_window.ui.h:34 msgid "" "If the default port that is used for incoming messages is unfitting for your " "setup you can select another one here.\n" @@ -355,39 +369,39 @@ msgstr "" "налаштувань, ви можете налаштувати інший.\n" "Можливо, вам також доведеться змінити параметри брандмауера." -#: ../data/gui/accounts_window.ui.h:34 +#: ../data/gui/accounts_window.ui.h:36 msgid "Information about you, as stored in the server" msgstr "Відомості про вас, які зберігаються на сервері" -#: ../data/gui/accounts_window.ui.h:35 -#: ../data/gui/zeroconf_information_window.ui.h:4 ../src/config.py:1826 +#: ../data/gui/accounts_window.ui.h:37 +#: ../data/gui/zeroconf_information_window.ui.h:4 ../src/config.py:1869 #: ../src/dialogs.py:837 msgid "Jabber ID:" msgstr "Jabber ID:" -#: ../data/gui/accounts_window.ui.h:36 +#: ../data/gui/accounts_window.ui.h:38 #: ../data/gui/zeroconf_information_window.ui.h:5 msgid "Last Name:" msgstr "Прізвище:" -#: ../data/gui/accounts_window.ui.h:37 +#: ../data/gui/accounts_window.ui.h:39 msgid "Mer_ge accounts" msgstr "Об’є_днати облікові записи" -#: ../data/gui/accounts_window.ui.h:38 ../src/config.py:1799 -#: ../src/config.py:2377 +#: ../data/gui/accounts_window.ui.h:40 ../src/config.py:1842 +#: ../src/config.py:2420 msgid "No key selected" msgstr "Не обрано жодного ключа" -#: ../data/gui/accounts_window.ui.h:40 ../data/gui/profile_window.ui.h:35 +#: ../data/gui/accounts_window.ui.h:42 ../data/gui/profile_window.ui.h:35 msgid "Personal Information" msgstr "Особисті відомості" -#: ../data/gui/accounts_window.ui.h:41 +#: ../data/gui/accounts_window.ui.h:43 msgid "Priori_ty:" msgstr "Пріорите_т:" -#: ../data/gui/accounts_window.ui.h:42 +#: ../data/gui/accounts_window.ui.h:44 msgid "" "Priority is used in Jabber to determine who gets the events from the jabber " "server when two or more clients are connected using the same account; The " @@ -397,20 +411,20 @@ msgstr "" "від jabber-сервера, якщо з одним обліковим записом з’єднано декілька " "клієнтів. Повідомлення про події отримує клієнт з найвищим пріоритетом" -#: ../data/gui/accounts_window.ui.h:43 +#: ../data/gui/accounts_window.ui.h:45 msgid "Priority will change automatically according to your status." msgstr "Пріоритет змінюватиметься залежно від вашого стану." #. Rename -#: ../data/gui/accounts_window.ui.h:44 ../src/roster_window.py:5602 +#: ../data/gui/accounts_window.ui.h:46 ../src/roster_window.py:5688 msgid "Re_name" msgstr "Пере_йменувати" -#: ../data/gui/accounts_window.ui.h:45 +#: ../data/gui/accounts_window.ui.h:47 msgid "Resour_ce:" msgstr "Ресур_с:" -#: ../data/gui/accounts_window.ui.h:46 +#: ../data/gui/accounts_window.ui.h:48 msgid "" "Resource is sent to the Jabber server in order to separate the same JID in " "two or more parts depending on the number of the clients connected in the " @@ -424,73 +438,73 @@ msgstr "" "обліковим записом з ресурсів «Домівка» або «Робота». Ресурс з найвищім " "пріоритетом буде отримувати усі повідомлення та події. (Див. нижче)" -#: ../data/gui/accounts_window.ui.h:47 +#: ../data/gui/accounts_window.ui.h:49 msgid "Save conversation _logs for all contacts" msgstr "Зберігати _журнал спілкування для усіх контактів" -#: ../data/gui/accounts_window.ui.h:49 +#: ../data/gui/accounts_window.ui.h:51 msgid "Send _keep-alive packets" msgstr "Надсилати пакети підтвердження дієздатності" -#: ../data/gui/accounts_window.ui.h:50 +#: ../data/gui/accounts_window.ui.h:52 msgid "Synch_ronize account status with global status" msgstr "_Синхронізувати стан облікового запису з загальним" -#: ../data/gui/accounts_window.ui.h:51 +#: ../data/gui/accounts_window.ui.h:53 msgid "Synchroni_ze account status with global status" msgstr "_Синхронізувати стан облікового запису з загальним" -#: ../data/gui/accounts_window.ui.h:52 +#: ../data/gui/accounts_window.ui.h:54 #: ../data/gui/synchronise_select_account_dialog.ui.h:2 msgid "Synchronise contacts" msgstr "Синхронізувати контакти" -#: ../data/gui/accounts_window.ui.h:53 +#: ../data/gui/accounts_window.ui.h:55 msgid "Use G_PG Agent" msgstr "Використовувати _агент GnuPG" -#: ../data/gui/accounts_window.ui.h:54 +#: ../data/gui/accounts_window.ui.h:56 msgid "Use cust_om hostname/port" msgstr "Використовувати інші вузол/порт" -#: ../data/gui/accounts_window.ui.h:55 +#: ../data/gui/accounts_window.ui.h:57 msgid "Use cust_om port:" msgstr "Використовувати інший порт:" -#: ../data/gui/accounts_window.ui.h:56 +#: ../data/gui/accounts_window.ui.h:58 msgid "Use file transfer proxies" msgstr "Використовувати проксі передавання файлів" -#: ../data/gui/accounts_window.ui.h:57 +#: ../data/gui/accounts_window.ui.h:59 msgid "_Client Cert File:" msgstr "Файл клієнтського _сертифікату:" -#: ../data/gui/accounts_window.ui.h:58 +#: ../data/gui/accounts_window.ui.h:60 msgid "_Edit Personal Information..." msgstr "Редагувати особисті відомості..." #. XML Console enable checkbutton -#: ../data/gui/accounts_window.ui.h:59 ../data/gui/xml_console_window.ui.h:11 +#: ../data/gui/accounts_window.ui.h:61 ../data/gui/xml_console_window.ui.h:11 msgid "_Enable" msgstr "Увімкнути" -#: ../data/gui/accounts_window.ui.h:60 +#: ../data/gui/accounts_window.ui.h:62 msgid "_Hostname: " msgstr "Назва _вузла:" -#: ../data/gui/accounts_window.ui.h:62 +#: ../data/gui/accounts_window.ui.h:64 ../data/gui/preferences_window.ui.h:133 msgid "_Manage..." msgstr "Керування..." -#: ../data/gui/accounts_window.ui.h:64 +#: ../data/gui/accounts_window.ui.h:66 msgid "_Port: " msgstr "_Порт:" -#: ../data/gui/accounts_window.ui.h:65 +#: ../data/gui/accounts_window.ui.h:67 msgid "_Warn before using an insecure connection" msgstr "_Попереджати перед використанням незахищеного з’єднання" -#: ../data/gui/accounts_window.ui.h:66 +#: ../data/gui/accounts_window.ui.h:68 msgid "_use HTTP__PROXY environment variable" msgstr "використовувати змінну середовища HTTP_PROXY" @@ -506,7 +520,7 @@ msgstr "Д_озволити цьому контакту бачити мій ст msgid "Add New Contact" msgstr "Додати новий контакт" -#: ../data/gui/add_new_contact_window.ui.h:4 ../src/common/helpers.py:1339 +#: ../data/gui/add_new_contact_window.ui.h:4 ../src/common/helpers.py:1359 msgid "I would like to add you to my contact list." msgstr "Я хочу додати вас до мого списку контактів." @@ -724,8 +738,8 @@ msgstr "Заблоковані контакти" #: ../data/gui/blocked_contacts_window.ui.h:2 #: ../data/gui/contact_context_menu.ui.h:25 -#: ../data/gui/gc_occupants_menu.ui.h:14 ../src/roster_window.py:5621 -#: ../src/roster_window.py:5748 ../src/roster_window.py:5881 +#: ../data/gui/gc_occupants_menu.ui.h:14 ../src/roster_window.py:5707 +#: ../src/roster_window.py:5834 ../src/roster_window.py:5967 msgid "_Unblock" msgstr "_Розблокувати" @@ -889,16 +903,18 @@ msgid "Show the contact's profile (Ctrl+I)" msgstr "Показати профіль контакту (Ctrl+I)" #: ../data/gui/chat_control.ui.h:20 +#: ../src/command_system/implementation/standard.py:208 msgid "Toggle audio session" msgstr "Перемкнути аудіо сессію" #: ../data/gui/chat_control.ui.h:21 +#: ../src/command_system/implementation/standard.py:218 msgid "Toggle video session" msgstr "Перемкнути відео сессію" #. Make sure the character after "_" is not M/m (conflicts with Alt+M that is supposed to show the Emoticon Selector) #: ../data/gui/chat_control.ui.h:23 ../data/gui/groupchat_control.ui.h:9 -#: ../data/gui/xml_console_window.ui.h:16 ../src/filetransfers_window.py:275 +#: ../data/gui/xml_console_window.ui.h:16 ../src/filetransfers_window.py:277 msgid "_Send" msgstr "_Надіслати" @@ -953,8 +969,8 @@ msgstr "Редагувати _групи..." #. Invite to #. Invite to Groupchat #: ../data/gui/contact_context_menu.ui.h:6 -#: ../data/gui/gc_occupants_menu.ui.h:1 ../src/roster_window.py:5557 -#: ../src/roster_window.py:5716 +#: ../data/gui/gc_occupants_menu.ui.h:1 ../src/roster_window.py:5643 +#: ../src/roster_window.py:5802 msgid "In_vite to" msgstr "За_просити до" @@ -970,8 +986,8 @@ msgstr "К_ерування контактом" msgid "Remo_ve" msgstr "В_илучити" -#: ../data/gui/contact_context_menu.ui.h:10 ../src/roster_window.py:5567 -#: ../src/roster_window.py:5805 +#: ../data/gui/contact_context_menu.ui.h:10 ../src/roster_window.py:5653 +#: ../src/roster_window.py:5891 msgid "Send Cus_tom Status" msgstr "Надіслати не_типовий стан" @@ -1004,8 +1020,8 @@ msgid "_Allow him/her to see my status" msgstr "_Дозволити йому/їй бачити мій стан" #: ../data/gui/contact_context_menu.ui.h:19 -#: ../data/gui/gc_occupants_menu.ui.h:8 ../src/roster_window.py:5629 -#: ../src/roster_window.py:5754 ../src/roster_window.py:5884 +#: ../data/gui/gc_occupants_menu.ui.h:8 ../src/roster_window.py:5715 +#: ../src/roster_window.py:5840 ../src/roster_window.py:5970 msgid "_Block" msgstr "_Заблокувати" @@ -1016,7 +1032,7 @@ msgstr "_Заборонити йому/їй бачити мій стан" #: ../data/gui/contact_context_menu.ui.h:21 #: ../data/gui/gc_control_popup_menu.ui.h:6 #: ../data/gui/gc_occupants_menu.ui.h:9 ../data/gui/roster_window.ui.h:23 -#: ../src/roster_window.py:5955 +#: ../src/roster_window.py:6041 msgid "_History" msgstr "_Журнал" @@ -1116,7 +1132,7 @@ msgstr "" msgid "When a file transfer is complete show a popup notification" msgstr "Показувати контекстне сповіщення про завершення передавання файла" -#: ../data/gui/filetransfers.ui.h:13 ../src/filetransfers_window.py:798 +#: ../data/gui/filetransfers.ui.h:13 ../src/filetransfers_window.py:808 msgid "_Continue" msgstr "_Продовжити" @@ -1124,7 +1140,8 @@ msgstr "_Продовжити" msgid "_Notify me when a file transfer is complete" msgstr "П_овідомити мене про завершення передавання файлу" -#: ../data/gui/filetransfers.ui.h:15 ../src/filetransfers_window.py:205 +#: ../data/gui/filetransfers.ui.h:15 ../src/chat_control.py:3236 +#: ../src/filetransfers_window.py:206 msgid "_Open Containing Folder" msgstr "В_ідкриту теку, яка містить цей файл" @@ -1365,7 +1382,7 @@ msgstr "_Шукати у базі даних" msgid "All Chat Histories" msgstr "Усі журнали балачок" -#: ../data/gui/history_window.ui.h:2 ../src/history_window.py:323 +#: ../data/gui/history_window.ui.h:2 ../src/history_window.py:324 msgid "Conversation History" msgstr "Журнал спілкування" @@ -1382,10 +1399,18 @@ msgid "Search:" msgstr "Пошук:" #: ../data/gui/history_window.ui.h:6 +msgid "_In date search" +msgstr "_Пошук по даті" + +#: ../data/gui/history_window.ui.h:7 #: ../data/gui/zeroconf_information_window.ui.h:10 msgid "_Log conversation history" msgstr "_Зберігати журнал спілкування" +#: ../data/gui/history_window.ui.h:8 +msgid "searching only in the selected day " +msgstr "шукати лише зазначений день" + #: ../data/gui/item_archiving_preferences_window.ui.h:1 msgid "approve" msgstr "підтвердити" @@ -1450,7 +1475,7 @@ msgstr "потік" msgid "Bro_wse Rooms" msgstr "_Перегляд кімнат" -#: ../data/gui/join_groupchat_window.ui.h:3 ../src/dialogs.py:2328 +#: ../data/gui/join_groupchat_window.ui.h:3 ../src/dialogs.py:2334 msgid "Join Group Chat" msgstr "Приєднатись до групової балачки" @@ -1474,7 +1499,7 @@ msgstr "Нещодавно:" msgid "Room:" msgstr "Кімната:" -#: ../data/gui/join_groupchat_window.ui.h:9 ../src/config.py:1816 +#: ../data/gui/join_groupchat_window.ui.h:9 ../src/config.py:1859 msgid "Server:" msgstr "Сервер:" @@ -1743,121 +1768,125 @@ msgid "All chat states" msgstr "Усі стани балачок" #: ../data/gui/preferences_window.ui.h:25 -msgid "Allow _OS information to be sent" +msgid "Allow client / _OS information to be sent" msgstr "Дозволити надсилання інформації про _операційну систему" #: ../data/gui/preferences_window.ui.h:26 +msgid "Allow local system time information to be sent" +msgstr "Дозволити надсилання інформації про місцевий час" + +#: ../data/gui/preferences_window.ui.h:27 msgid "Allow my _idle time to be sent" msgstr "Дозволити надсилання часу бездіяльності" -#: ../data/gui/preferences_window.ui.h:27 +#: ../data/gui/preferences_window.ui.h:28 msgid "Allow popup/notifications when I'm _away/na/busy/invisible" msgstr "" "Дозволити сповіщення у разі встановленого стану в_ідійшов/зайнятий/тощо" -#: ../data/gui/preferences_window.ui.h:28 +#: ../data/gui/preferences_window.ui.h:29 msgid "Allow sound when I'm _busy" msgstr "Дозволити звуки у стані _зайнятий." -#: ../data/gui/preferences_window.ui.h:29 +#: ../data/gui/preferences_window.ui.h:30 msgid "Always" msgstr "Завжди" -#: ../data/gui/preferences_window.ui.h:30 +#: ../data/gui/preferences_window.ui.h:31 msgid "Ask status message when I:" msgstr "Запитувати щодо повідомлення про стан, якщо я:" -#: ../data/gui/preferences_window.ui.h:31 ../src/features_window.py:106 +#: ../data/gui/preferences_window.ui.h:32 ../src/features_window.py:106 msgid "Audio / Video" msgstr "Аудіо/Відео" -#: ../data/gui/preferences_window.ui.h:32 +#: ../data/gui/preferences_window.ui.h:33 msgid "Audio input device" msgstr "Пристрій введення звуку" -#: ../data/gui/preferences_window.ui.h:33 +#: ../data/gui/preferences_window.ui.h:34 msgid "Audio output device" msgstr "Пристрій відтворення звуку" -#: ../data/gui/preferences_window.ui.h:34 +#: ../data/gui/preferences_window.ui.h:35 msgid "Chat message:" msgstr "Повідомлення балачки:" -#: ../data/gui/preferences_window.ui.h:35 +#: ../data/gui/preferences_window.ui.h:36 msgid "Check on startup if Gajim is the _default Jabber client" msgstr "Перевіряти при запуску, чи є Gajim _типовим клієнтом Jabber" -#: ../data/gui/preferences_window.ui.h:36 +#: ../data/gui/preferences_window.ui.h:37 msgid "Composing only" msgstr "Лише друк" -#: ../data/gui/preferences_window.ui.h:37 +#: ../data/gui/preferences_window.ui.h:38 msgid "Configure color and font of the interface" msgstr "Налаштувати шрифт та колір інтерфейсу" -#: ../data/gui/preferences_window.ui.h:38 +#: ../data/gui/preferences_window.ui.h:39 msgid "Contact's message:" msgstr "Повідомлення контакту:" -#: ../data/gui/preferences_window.ui.h:39 +#: ../data/gui/preferences_window.ui.h:40 msgid "Contact's nickname:" msgstr "Псевдонім контакту:" -#: ../data/gui/preferences_window.ui.h:40 +#: ../data/gui/preferences_window.ui.h:41 msgid "Custom" msgstr "Нетиповий" -#: ../data/gui/preferences_window.ui.h:41 +#: ../data/gui/preferences_window.ui.h:42 msgid "Detached roster with chat grouped by account" msgstr "" "Відокремлений реєстр з балачками згуртованими відповідно облікових записів" -#: ../data/gui/preferences_window.ui.h:42 +#: ../data/gui/preferences_window.ui.h:43 msgid "Detached roster with chat grouped by type" msgstr "Відокремлений реєстр з балачками згуртованими відповідно типу" -#: ../data/gui/preferences_window.ui.h:43 +#: ../data/gui/preferences_window.ui.h:44 msgid "Detached roster with detached chats" msgstr "Відокремлений реєстр з окремими балачками" -#: ../data/gui/preferences_window.ui.h:44 +#: ../data/gui/preferences_window.ui.h:45 msgid "Detached roster with single chat" msgstr "Відокремлений реєстр з єдиним вікном балачок" -#: ../data/gui/preferences_window.ui.h:45 ../src/config.py:170 -#: ../src/config.py:672 +#: ../data/gui/preferences_window.ui.h:46 ../src/config.py:171 +#: ../src/config.py:683 msgid "Disabled" msgstr "Вимкнено" -#: ../data/gui/preferences_window.ui.h:46 +#: ../data/gui/preferences_window.ui.h:47 msgid "Display _activity of contacts in roster" msgstr "Показувати _заняття контактів у реєстрі" -#: ../data/gui/preferences_window.ui.h:47 +#: ../data/gui/preferences_window.ui.h:48 msgid "Display _extra email details" msgstr "Показати _подробиці щодо скриньки" -#: ../data/gui/preferences_window.ui.h:48 +#: ../data/gui/preferences_window.ui.h:49 msgid "Display _location of contacts in roster" msgstr "Показувати _положення контактів у реєстрі" -#: ../data/gui/preferences_window.ui.h:49 +#: ../data/gui/preferences_window.ui.h:50 msgid "Display _tunes of contacts in roster" msgstr "Показувати _музику контактів у реєстрі" -#: ../data/gui/preferences_window.ui.h:50 +#: ../data/gui/preferences_window.ui.h:51 msgid "Display a_vatars of contacts in roster" msgstr "Показувати _аватари контактів у реєстрі" -#: ../data/gui/preferences_window.ui.h:51 +#: ../data/gui/preferences_window.ui.h:52 msgid "Display m_ood of contacts in roster" msgstr "Показувати _настрій контактів у реєстрі" -#: ../data/gui/preferences_window.ui.h:52 +#: ../data/gui/preferences_window.ui.h:53 msgid "Display status _messages of contacts in roster" msgstr "Показувати _повідомлення про стан контактів з реєстру" -#: ../data/gui/preferences_window.ui.h:53 +#: ../data/gui/preferences_window.ui.h:54 msgid "" "Gajim can send and receive meta-information related to a conversation you " "may have with a contact. Here you can specify which chatstates you want to " @@ -1867,7 +1896,7 @@ msgstr "" "ви вели з контактом. Тут ви можете вказати стани, які ви бажаєте бачити у " "вікні розмови." -#: ../data/gui/preferences_window.ui.h:54 +#: ../data/gui/preferences_window.ui.h:55 msgid "" "Gajim can send and receive meta-information related to a conversation you " "may have with a contact. Here you can specify which chatstates you want to " @@ -1877,7 +1906,7 @@ msgstr "" "спілкуванням з контактом. Тут ви можете зазначити стани, які ви бажаєте " "надсилати іншому учаснику балачки." -#: ../data/gui/preferences_window.ui.h:55 +#: ../data/gui/preferences_window.ui.h:56 msgid "" "Gajim will notify you via a popup window in the bottom right of the screen " "about contacts that just signed out" @@ -1885,11 +1914,15 @@ msgstr "" "Gajim буде сповіщати вас про вихід з мережі контактів за допомогою " "контекстного вікна у нижній правій частині екрана" -#: ../data/gui/preferences_window.ui.h:57 +#: ../data/gui/preferences_window.ui.h:58 +msgid "Global proxy:" +msgstr "Глобальний проксі:" + +#: ../data/gui/preferences_window.ui.h:59 msgid "Hide all buttons in chat windows" msgstr "Сховати усі кнопки у вікнах балачок" -#: ../data/gui/preferences_window.ui.h:58 +#: ../data/gui/preferences_window.ui.h:60 msgid "" "If checked, Gajim will allow others to detect the operation system you are " "using" @@ -1897,7 +1930,13 @@ msgstr "" "Якщо буде позначено цей пункт, Gajim дозволить іншим визначати, яку " "операційну систему ви використовуєте" -#: ../data/gui/preferences_window.ui.h:59 +#: ../data/gui/preferences_window.ui.h:61 +msgid "If checked, Gajim will allow others to detect the time on your system" +msgstr "" +"Якщо буде позначено цей пункт, Gajim дозволить іншим визначати ваш місцевий " +"час" + +#: ../data/gui/preferences_window.ui.h:62 msgid "" "If checked, Gajim will also include information about the sender of the new " "emails" @@ -1905,14 +1944,14 @@ msgstr "" "Якщо буде позначено цей пункт, Gajim буде також додавати інформацію про " "авторів листів" -#: ../data/gui/preferences_window.ui.h:60 +#: ../data/gui/preferences_window.ui.h:63 msgid "" "If checked, Gajim will change status to Away when the computer is unused." msgstr "" "Якщо буде позначено цей пункт, Gajim буде змінювати стан на «Відсутній», " "якщо комп’ютер не використовуватиметься." -#: ../data/gui/preferences_window.ui.h:61 +#: ../data/gui/preferences_window.ui.h:64 msgid "" "If checked, Gajim will change status to Not Available when the computer has " "not been used even longer" @@ -1920,7 +1959,7 @@ msgstr "" "Якщо буде позначено цей пункт, Gajim змінюватиме стан на «Недоступний», якщо " "на комп’ютері не спостерігатиметься активності користувача довше, ніж" -#: ../data/gui/preferences_window.ui.h:62 +#: ../data/gui/preferences_window.ui.h:65 msgid "" "If checked, Gajim will display avatars of contacts in roster window and in " "group chats" @@ -1928,7 +1967,7 @@ msgstr "" "Якщо буде позначено цей пункт, Gajim буде показувати аватари контактів у " "вікні реєстру і групових балачках" -#: ../data/gui/preferences_window.ui.h:63 +#: ../data/gui/preferences_window.ui.h:66 msgid "" "If checked, Gajim will display status messages of contacts under the contact " "name in roster window and in group chats" @@ -1936,35 +1975,35 @@ msgstr "" "Якщо буде позначено цей пункт, Gajim буде показувати повідомлення про стан " "під ім'ям контакту у вікні реєстру і групових балачках" -#: ../data/gui/preferences_window.ui.h:64 +#: ../data/gui/preferences_window.ui.h:67 msgid "" "If checked, Gajim will display the activity of contacts in the roster window" msgstr "" "Якщо буде позначено цей пункт, Gajim показуватиме рід занять контактів у " "вікні реєстру" -#: ../data/gui/preferences_window.ui.h:65 +#: ../data/gui/preferences_window.ui.h:68 msgid "" "If checked, Gajim will display the location of contacts in the roster window" msgstr "" "Якщо буде позначено цей пункт, Gajim показуватиме положення контактів у " "вікні реєстру" -#: ../data/gui/preferences_window.ui.h:66 +#: ../data/gui/preferences_window.ui.h:69 msgid "" "If checked, Gajim will display the mood of contacts in the roster window" msgstr "" "Якщо буде позначено цей пункт, Gajim показуватиме настрій контактів у вікні " "реєстру" -#: ../data/gui/preferences_window.ui.h:67 +#: ../data/gui/preferences_window.ui.h:70 msgid "" "If checked, Gajim will display the tunes of contacts in the roster window" msgstr "" "Якщо буде позначено цей пункт, Gajim показуватиме музику, яку слухають " "контакти у вікні реєстру" -#: ../data/gui/preferences_window.ui.h:68 +#: ../data/gui/preferences_window.ui.h:71 msgid "" "If checked, Gajim will highlight spelling errors in input fields of chat " "windows. If no language is explicitly set via right click on the input " @@ -1975,7 +2014,7 @@ msgstr "" "контекстного меню (клацання правою кнопкою миші), буде використано типову " "мову для контакту або групової балачки." -#: ../data/gui/preferences_window.ui.h:69 +#: ../data/gui/preferences_window.ui.h:72 msgid "" "If checked, Gajim will ignore incoming events from unauthorized contacts. " "Use with caution, because it blocks all messages from any contact that is " @@ -1986,7 +2025,7 @@ msgstr "" "можливістю, оскільки її за її використання всі повідомлення від контактів, " "яких немає у реєстрі, буде заблоковано." -#: ../data/gui/preferences_window.ui.h:70 +#: ../data/gui/preferences_window.ui.h:73 msgid "" "If checked, Gajim will keep logs for encrypted messages. Please note that " "when using E2E encryption the remote party has to agree on logging, else the " @@ -1997,7 +2036,7 @@ msgstr "" "E2E, ваш співрозмовник має погодитися на запис до журналу, інакше " "повідомлення не буде записано до журналу." -#: ../data/gui/preferences_window.ui.h:71 +#: ../data/gui/preferences_window.ui.h:74 msgid "" "If checked, Gajim will show a notification when a new e-mail is received via " "GMail" @@ -2005,7 +2044,7 @@ msgstr "" "Якщо буде позначено цей пункт, Gajim показуватиме сповіщення про нові листи, " "отримані поштовою скринькою GMail" -#: ../data/gui/preferences_window.ui.h:72 +#: ../data/gui/preferences_window.ui.h:75 msgid "" "If checked, Gajim will use protocol-specific status icons. (eg. A contact " "from MSN will have the equivalent msn icon for status online, away, busy, " @@ -2015,7 +2054,7 @@ msgstr "" "протоколу піктограми станів. (Приклад: для контактів MSN будуть використані " "відповідні піктограми msn для станів «в мережі», «відсутній» тощо)" -#: ../data/gui/preferences_window.ui.h:73 +#: ../data/gui/preferences_window.ui.h:76 msgid "" "If enabled, Gajim will not ask for a status message. The specified default " "message will be used instead." @@ -2023,7 +2062,7 @@ msgstr "" "Якщо буде позначено цей пункт, Gajim не запитуватиме про повідомлення стану. " "Програма використовуватиме вказане типове повідомлення." -#: ../data/gui/preferences_window.ui.h:74 +#: ../data/gui/preferences_window.ui.h:77 msgid "" "If not disabled, Gajim will replace ascii smilies like ':)' with equivalent " "animated or static graphical emoticons" @@ -2031,67 +2070,67 @@ msgstr "" "Якщо цей пункт буде позначено, Gajim замінюватиме ascii-емоційки, наприклад, " "':)' відповідними статичними або анімованими емоційками" -#: ../data/gui/preferences_window.ui.h:75 +#: ../data/gui/preferences_window.ui.h:78 msgid "Last state" msgstr "Попередній стан: %" -#: ../data/gui/preferences_window.ui.h:76 +#: ../data/gui/preferences_window.ui.h:79 msgid "Log _encrypted chat session" msgstr "Записувати до журналу _шифровані сеанси балачки" -#: ../data/gui/preferences_window.ui.h:77 +#: ../data/gui/preferences_window.ui.h:80 msgid "Ma_ke message windows compact" msgstr "У_щільнити компонування вікон повідомлень" -#: ../data/gui/preferences_window.ui.h:78 +#: ../data/gui/preferences_window.ui.h:81 msgid "Ma_nage..." msgstr "Ке_рування..." -#: ../data/gui/preferences_window.ui.h:79 +#: ../data/gui/preferences_window.ui.h:82 msgid "Never" msgstr "Ніколи" -#: ../data/gui/preferences_window.ui.h:80 +#: ../data/gui/preferences_window.ui.h:83 msgid "Notifications" msgstr "Сповіщення" -#: ../data/gui/preferences_window.ui.h:81 +#: ../data/gui/preferences_window.ui.h:84 msgid "Notify me about contacts that sign _in" msgstr "Сповіщати мене про в_хід контактів до мережі" -#: ../data/gui/preferences_window.ui.h:82 +#: ../data/gui/preferences_window.ui.h:85 msgid "Notify me about contacts that sign _out" msgstr "Сповіщати мене про в_ихід контактів з мережі" -#: ../data/gui/preferences_window.ui.h:83 +#: ../data/gui/preferences_window.ui.h:86 msgid "Notify me about it" msgstr "Сповіщати мене про це" -#: ../data/gui/preferences_window.ui.h:84 +#: ../data/gui/preferences_window.ui.h:87 msgid "Notify on new _GMail email" msgstr "Сповіщати про нові листи _GMail" -#: ../data/gui/preferences_window.ui.h:85 +#: ../data/gui/preferences_window.ui.h:88 msgid "Only when pending events" msgstr "Лише події, що очікують уваги" -#: ../data/gui/preferences_window.ui.h:86 +#: ../data/gui/preferences_window.ui.h:89 msgid "Personal Events" msgstr "Особисті події" -#: ../data/gui/preferences_window.ui.h:87 +#: ../data/gui/preferences_window.ui.h:90 msgid "Play _sounds" msgstr "Відтворювати _звуки" -#: ../data/gui/preferences_window.ui.h:88 +#: ../data/gui/preferences_window.ui.h:91 msgid "Pop it up" msgstr "Підняти це" -#: ../data/gui/preferences_window.ui.h:89 +#: ../data/gui/preferences_window.ui.h:92 msgid "Preferences" msgstr "Параметри" -#: ../data/gui/preferences_window.ui.h:90 +#: ../data/gui/preferences_window.ui.h:93 msgid "" "STUN server hostname. If none given, Gajim will try\n" "to discover one from server." @@ -2099,31 +2138,31 @@ msgstr "" "Ім’я серверу STUN. Якщо нічого не вказано\n" "Gajim спробує отримати значення з серверу." -#: ../data/gui/preferences_window.ui.h:92 +#: ../data/gui/preferences_window.ui.h:95 msgid "STUN server:" msgstr "Сервер STUN:" -#: ../data/gui/preferences_window.ui.h:93 +#: ../data/gui/preferences_window.ui.h:96 msgid "Show notification area icon:" msgstr "Показувати піктограму зони сповіщень" -#: ../data/gui/preferences_window.ui.h:94 +#: ../data/gui/preferences_window.ui.h:97 msgid "Show only in roster" msgstr "_Показати лише у реєстрі" -#: ../data/gui/preferences_window.ui.h:95 +#: ../data/gui/preferences_window.ui.h:98 msgid "Sign _in" msgstr "Уві_йти" -#: ../data/gui/preferences_window.ui.h:96 +#: ../data/gui/preferences_window.ui.h:99 msgid "Sign _out" msgstr "Вий_ти" -#: ../data/gui/preferences_window.ui.h:97 +#: ../data/gui/preferences_window.ui.h:100 msgid "Single window for everything" msgstr "Єдине вікно для усього" -#: ../data/gui/preferences_window.ui.h:98 +#: ../data/gui/preferences_window.ui.h:101 msgid "" "Some messages may include rich content (formatting, colors etc). If checked, " "Gajim will just display the raw message text." @@ -2132,27 +2171,27 @@ msgstr "" "тексту, кольори тощо). Якщо буде позначено цей пункт, Gajim показуватиме " "простий текст без форматування." -#: ../data/gui/preferences_window.ui.h:99 +#: ../data/gui/preferences_window.ui.h:102 msgid "Sort contacts by status" msgstr "Впорядкувати контакти за станом" -#: ../data/gui/preferences_window.ui.h:100 ../src/config.py:400 +#: ../data/gui/preferences_window.ui.h:103 ../src/config.py:401 msgid "Status" msgstr "Стан" -#: ../data/gui/preferences_window.ui.h:101 +#: ../data/gui/preferences_window.ui.h:104 msgid "Status _iconset:" msgstr "Набір _піктограм стану:" -#: ../data/gui/preferences_window.ui.h:102 +#: ../data/gui/preferences_window.ui.h:105 msgid "Style" msgstr "Стиль" -#: ../data/gui/preferences_window.ui.h:103 +#: ../data/gui/preferences_window.ui.h:106 msgid "T_heme:" msgstr "Т_ема:" -#: ../data/gui/preferences_window.ui.h:104 +#: ../data/gui/preferences_window.ui.h:107 msgid "" "The auto away status message. If empty, Gajim will not change the current " "status message\n" @@ -2162,7 +2201,7 @@ msgstr "" "Автоматичне повідомлення про відсутність. Якщо ви не вкажете тексту " "повідомлення, Gajim не змінюватиме поточного повідомлення про стан." -#: ../data/gui/preferences_window.ui.h:107 +#: ../data/gui/preferences_window.ui.h:110 msgid "" "The auto not available status message. If empty, Gajim will not change the " "current status message\n" @@ -2172,127 +2211,127 @@ msgstr "" "Автоматичне повідомлення про недоступність. Якщо ви не вкажете тексту " "повідомлення, Gajim не змінюватиме поточного повідомлення про стан." -#: ../data/gui/preferences_window.ui.h:110 +#: ../data/gui/preferences_window.ui.h:113 msgid "Use _transports icons" msgstr "Використовувати піктограми _транспортів" -#: ../data/gui/preferences_window.ui.h:111 +#: ../data/gui/preferences_window.ui.h:114 msgid "Use default applications" msgstr "Використовувати типові програми" -#: ../data/gui/preferences_window.ui.h:112 +#: ../data/gui/preferences_window.ui.h:115 msgid "Use system _default" msgstr "Використовувати _типове для системи" -#: ../data/gui/preferences_window.ui.h:113 +#: ../data/gui/preferences_window.ui.h:116 msgid "Video framerate" msgstr "Частота кадрів відео" -#: ../data/gui/preferences_window.ui.h:114 +#: ../data/gui/preferences_window.ui.h:117 msgid "Video input device" msgstr "Пристрій введення відео" -#: ../data/gui/preferences_window.ui.h:115 +#: ../data/gui/preferences_window.ui.h:118 msgid "Video output device" msgstr "Пристрій відтворення відео" -#: ../data/gui/preferences_window.ui.h:116 +#: ../data/gui/preferences_window.ui.h:119 msgid "Video size" msgstr "Розмір відео" -#: ../data/gui/preferences_window.ui.h:117 +#: ../data/gui/preferences_window.ui.h:120 msgid "When new event is received:" msgstr "Якщо отримано нову подію:" -#: ../data/gui/preferences_window.ui.h:118 +#: ../data/gui/preferences_window.ui.h:121 msgid "Your message:" msgstr "Ваше повідомлення:" -#: ../data/gui/preferences_window.ui.h:119 +#: ../data/gui/preferences_window.ui.h:122 msgid "Your nickname:" msgstr "Ваш псевдонім:" -#: ../data/gui/preferences_window.ui.h:120 +#: ../data/gui/preferences_window.ui.h:123 msgid "_Away after:" msgstr "«_Відсутній» через:" -#: ../data/gui/preferences_window.ui.h:121 +#: ../data/gui/preferences_window.ui.h:124 msgid "_Browser:" msgstr "_Веб-переглядач:" -#: ../data/gui/preferences_window.ui.h:122 +#: ../data/gui/preferences_window.ui.h:125 msgid "_Display chat state notifications:" msgstr "_Показувати сповіщення стану балачки:" -#: ../data/gui/preferences_window.ui.h:123 +#: ../data/gui/preferences_window.ui.h:126 msgid "_Emoticons:" msgstr "_Емоційки:" -#: ../data/gui/preferences_window.ui.h:124 +#: ../data/gui/preferences_window.ui.h:127 msgid "_File manager:" msgstr "_Менеджер файлів:" -#: ../data/gui/preferences_window.ui.h:125 +#: ../data/gui/preferences_window.ui.h:128 msgid "_Highlight misspelled words" msgstr "_Виділяти слова з помилками" -#: ../data/gui/preferences_window.ui.h:126 +#: ../data/gui/preferences_window.ui.h:129 msgid "_Ignore events from contacts not in the roster" msgstr "_Ігнорувати події від контактів поза реєстром" -#: ../data/gui/preferences_window.ui.h:127 +#: ../data/gui/preferences_window.ui.h:130 msgid "_Ignore rich content in incoming messages" msgstr "_Ігнорувати позначки форматування у вхідних повідомленнях" -#: ../data/gui/preferences_window.ui.h:128 +#: ../data/gui/preferences_window.ui.h:131 msgid "_Log status changes of contacts" msgstr "_Записувати зміни стану контактів" -#: ../data/gui/preferences_window.ui.h:129 +#: ../data/gui/preferences_window.ui.h:132 msgid "_Mail client:" msgstr "_Поштовий клієнт:" -#: ../data/gui/preferences_window.ui.h:130 +#: ../data/gui/preferences_window.ui.h:134 msgid "_Not available after:" msgstr "«_Не доступний» через:" -#: ../data/gui/preferences_window.ui.h:131 +#: ../data/gui/preferences_window.ui.h:135 msgid "_Open..." msgstr "_Відкрити..." -#: ../data/gui/preferences_window.ui.h:132 +#: ../data/gui/preferences_window.ui.h:136 msgid "_Reset to Default Colors" msgstr "В_ідновити типові кольори" -#: ../data/gui/preferences_window.ui.h:133 +#: ../data/gui/preferences_window.ui.h:137 msgid "_Send chat state notifications:" msgstr "_Надсилати сповіщення про стан балачки:" -#: ../data/gui/preferences_window.ui.h:134 +#: ../data/gui/preferences_window.ui.h:138 msgid "_Show roster on startup:" msgstr "_Показувати реєстр при старті:з" -#: ../data/gui/preferences_window.ui.h:135 +#: ../data/gui/preferences_window.ui.h:139 msgid "_Status message:" msgstr "_Повідомлення про стан:" -#: ../data/gui/preferences_window.ui.h:136 +#: ../data/gui/preferences_window.ui.h:140 msgid "_URL highlight:" msgstr "Вид_ілення адрес URL:" -#: ../data/gui/preferences_window.ui.h:137 +#: ../data/gui/preferences_window.ui.h:141 msgid "_Window behavior:" msgstr "Пов_едінка вікна:" -#: ../data/gui/preferences_window.ui.h:138 +#: ../data/gui/preferences_window.ui.h:142 msgid "in _group chats" msgstr "у _групових балачках" -#: ../data/gui/preferences_window.ui.h:139 +#: ../data/gui/preferences_window.ui.h:143 msgid "in _roster" msgstr "у _реєстрі" -#: ../data/gui/preferences_window.ui.h:140 +#: ../data/gui/preferences_window.ui.h:144 msgid "minutes" msgstr "хвилин" @@ -2344,7 +2383,7 @@ msgstr "JabberID" msgid "Order:" msgstr "Порядок:" -#: ../data/gui/privacy_list_window.ui.h:12 ../src/dialogs.py:3972 +#: ../data/gui/privacy_list_window.ui.h:12 ../src/dialogs.py:3979 msgid "Privacy List" msgstr "Список конфіденційності" @@ -2551,8 +2590,8 @@ msgstr "Вилучити обліковий запис з Gajim та з _сер #. Remove group #. Remove -#: ../data/gui/remove_account_window.ui.h:4 ../src/roster_window.py:5639 -#: ../src/roster_window.py:5764 ../src/roster_window.py:5894 +#: ../data/gui/remove_account_window.ui.h:4 ../src/roster_window.py:5725 +#: ../src/roster_window.py:5850 ../src/roster_window.py:5980 msgid "_Remove" msgstr "В_илучити" @@ -2665,7 +2704,7 @@ msgid "_Add contact" msgstr "Дод_ати контакт" #. Information -#: ../data/gui/search_window.ui.h:4 ../src/roster_window.py:5906 +#: ../data/gui/search_window.ui.h:4 ../src/roster_window.py:5992 msgid "_Information" msgstr "_Інформація" @@ -3157,50 +3196,50 @@ msgstr "" "Якщо ви надішлете файл %s, він або вона дізнаються про ваш справжній " "ідентифікатор Jabber." -#: ../src/chat_control.py:1623 ../src/chat_control.py:2135 +#: ../src/chat_control.py:1638 ../src/chat_control.py:2172 msgid "GPG encryption enabled" msgstr "Шифрування GPG увімкнено" -#: ../src/chat_control.py:1644 ../src/chat_control.py:1647 +#: ../src/chat_control.py:1659 ../src/chat_control.py:1662 msgid "Requires python-farsight." msgstr "Потрібен python-farsight." #. Add to roster -#: ../src/chat_control.py:1673 ../src/common/contacts.py:149 -#: ../src/common/contacts.py:270 ../src/common/helpers.py:60 -#: ../src/common/helpers.py:254 ../src/dialogs.py:1099 ../src/dialogs.py:2222 -#: ../src/dialogs.py:2251 ../src/gui_interface.py:467 -#: ../src/gui_menu_builder.py:254 ../src/gui_menu_builder.py:404 -#: ../src/roster_window.py:1644 ../src/roster_window.py:1646 -#: ../src/roster_window.py:1979 ../src/roster_window.py:3507 -#: ../src/roster_window.py:3534 +#: ../src/chat_control.py:1702 ../src/common/contacts.py:149 +#: ../src/common/contacts.py:270 ../src/common/helpers.py:67 +#: ../src/common/helpers.py:261 ../src/dialogs.py:1099 ../src/dialogs.py:2228 +#: ../src/dialogs.py:2257 ../src/gui_interface.py:472 +#: ../src/gui_menu_builder.py:254 ../src/gui_menu_builder.py:405 +#: ../src/roster_window.py:767 ../src/roster_window.py:1687 +#: ../src/roster_window.py:1689 ../src/roster_window.py:2022 +#: ../src/roster_window.py:3557 ../src/roster_window.py:3584 msgid "Not in Roster" msgstr "Немає у реєстрі" -#: ../src/chat_control.py:1704 +#: ../src/chat_control.py:1734 msgid "This contact does not support file transfer." msgstr "Цей контакт не підтримує передавання файлів." -#: ../src/chat_control.py:1707 +#: ../src/chat_control.py:1737 msgid "You need to know the real JID of the contact to send him or her a file." msgstr "Ви маєте знати справжній JID контакту, щоб надсилати йому чи їй файл." -#: ../src/chat_control.py:1814 +#: ../src/chat_control.py:1851 #, python-format msgid "%(type)s state : %(state)s, reason: %(reason)s" msgstr "%(type)s стан : %(state)s, причина: %(reason)s" -#: ../src/chat_control.py:2005 +#: ../src/chat_control.py:2042 #, python-format msgid "%(nickname)s from group chat %(room_name)s" msgstr "%(nickname)s з групової балачки %(room_name)s" #. No key assigned nor a key is used by remote contact -#: ../src/chat_control.py:2115 ../src/dialogs.py:5033 +#: ../src/chat_control.py:2152 ../src/dialogs.py:5040 msgid "No GPG key assigned" msgstr "Немає ключа GPG" -#: ../src/chat_control.py:2116 +#: ../src/chat_control.py:2153 msgid "" "No GPG key is assigned to this contact. So you cannot encrypt messages with " "GPG." @@ -3208,50 +3247,50 @@ msgstr "" "З цим контактом не пов’язано жодного ключа GPG. Отже ви не зможете шифрувати " "повідомлення за допомогою GPG." -#: ../src/chat_control.py:2125 +#: ../src/chat_control.py:2162 msgid "GPG encryption disabled" msgstr "Шифрування GPG вимкнено" -#: ../src/chat_control.py:2151 +#: ../src/chat_control.py:2188 msgid "Session WILL be logged" msgstr "Сеанс БУДЕ записано до журналу" -#: ../src/chat_control.py:2153 +#: ../src/chat_control.py:2190 msgid "Session WILL NOT be logged" msgstr "Сеанс НЕ БУДЕ записано до журналу" #. encryption %s active -#: ../src/chat_control.py:2170 +#: ../src/chat_control.py:2207 msgid "is" msgstr "є" -#: ../src/chat_control.py:2170 +#: ../src/chat_control.py:2207 msgid "is NOT" msgstr "НЕ є" #. chat session %s be logged -#: ../src/chat_control.py:2172 +#: ../src/chat_control.py:2209 msgid "will" msgstr "буде" -#: ../src/chat_control.py:2172 +#: ../src/chat_control.py:2209 msgid "will NOT" msgstr "НЕ буде" #. About encrypted chat session -#: ../src/chat_control.py:2176 +#: ../src/chat_control.py:2213 msgid "and authenticated" msgstr "і уповноваженим" #. About encrypted chat session -#: ../src/chat_control.py:2180 +#: ../src/chat_control.py:2217 msgid "and NOT authenticated" msgstr "і НЕ уповноваженим" #. status will become 'is' or 'is not', authentificaed will become #. 'and authentificated' or 'and not authentificated', logged will become #. 'will' or 'will not' -#: ../src/chat_control.py:2187 +#: ../src/chat_control.py:2224 #, python-format msgid "" "%(type)s encryption %(status)s active %(authenticated)s.\n" @@ -3260,31 +3299,31 @@ msgstr "" "Шифрування %(type)s %(status)s активним %(authenticated)s.\n" "Ваш сеанс балачки %(logged)s записано до журналу." -#: ../src/chat_control.py:2314 +#: ../src/chat_control.py:2351 msgid "Session negotiation cancelled" msgstr "Встановлення сеансу було скасовано" -#: ../src/chat_control.py:2324 +#: ../src/chat_control.py:2361 msgid "This session WILL be archived on server" msgstr "Цей сеанс БУДЕ збережена на сервері" -#: ../src/chat_control.py:2326 +#: ../src/chat_control.py:2363 msgid "This session WILL NOT be archived on server" msgstr "Цей сеанс НЕ БУДЕ збережено на сервері" -#: ../src/chat_control.py:2335 +#: ../src/chat_control.py:2372 msgid "This session is encrypted" msgstr "Цей сеанс зашифровано" -#: ../src/chat_control.py:2338 +#: ../src/chat_control.py:2375 msgid " and WILL be logged" msgstr " і БУДЕ записано до журналу" -#: ../src/chat_control.py:2340 +#: ../src/chat_control.py:2377 msgid " and WILL NOT be logged" msgstr " і НЕ БУДЕ записано до журналу" -#: ../src/chat_control.py:2345 +#: ../src/chat_control.py:2382 msgid "" "Remote contact's identity not verified. Click the shield button for more " "details." @@ -3292,25 +3331,25 @@ msgstr "" "Особу віддаленого контакту не було перевірено. Натисніть кнопку з щитом, щоб " "ознайомитися з подробицями." -#: ../src/chat_control.py:2347 +#: ../src/chat_control.py:2384 msgid "E2E encryption disabled" msgstr "Шифрування E2E вимкнено" -#: ../src/chat_control.py:2394 ../src/chat_control.py:2407 +#: ../src/chat_control.py:2432 ../src/chat_control.py:2445 msgid "The following message was NOT encrypted" msgstr "Наступне повідомлення НЕ було зашифровано" -#: ../src/chat_control.py:2400 +#: ../src/chat_control.py:2438 msgid "The following message was encrypted" msgstr "Наступне повідомлення було зашифровано" #. %s is being replaced in the code with JID -#: ../src/chat_control.py:2667 +#: ../src/chat_control.py:2707 #, python-format msgid "You just received a new message from \"%s\"" msgstr "Ви щойно отримали нове повідомлення від «%s»" -#: ../src/chat_control.py:2668 +#: ../src/chat_control.py:2708 msgid "" "If you close this tab and you have history disabled, this message will be " "lost." @@ -3318,15 +3357,14 @@ msgstr "" "Якщо ви закриєте вкладку, а журнал було вимкнено, це повідомлення буде " "втрачено." -#: ../src/chat_control.py:2835 ../src/common/connection_handlers_events.py:865 -#: ../src/common/connection_handlers.py:945 -#: ../src/common/connection_handlers.py:1057 -#: ../src/common/connection_handlers.py:1718 ../src/common/connection.py:451 -#: ../src/common/logger.py:1127 ../src/gajim.py:207 ../src/session.py:100 +#: ../src/chat_control.py:2875 ../src/common/connection_handlers_events.py:887 +#: ../src/common/connection_handlers.py:942 +#: ../src/common/connection_handlers.py:1054 ../src/common/connection.py:456 +#: ../src/common/logger.py:1144 ../src/gajim.py:210 ../src/session.py:100 msgid "Database Error" msgstr "Помилка бази даних" -#: ../src/chat_control.py:2836 +#: ../src/chat_control.py:2876 #, python-format msgid "" "The database file (%s) cannot be read. Try to repair it or remove it (all " @@ -3335,7 +3373,7 @@ msgstr "" "Не вдалося прочитати файл бази даних (%s). Спробуйте виправити або вилучити " "його (всі записи журналу буде втрачено)." -#: ../src/chat_control.py:3072 ../src/gui_interface.py:1032 +#: ../src/chat_control.py:3112 ../src/gui_interface.py:1061 #, python-format msgid "" "Unable to decrypt message from %s\n" @@ -3344,11 +3382,248 @@ msgstr "" "Не вдалося розшифрувати повідомлення від %s\n" "Можливо, хтось втрутився у ваше з’єднання." -#: ../src/chat_control.py:3105 +#: ../src/chat_control.py:3145 #, python-format msgid "%(name)s is now %(status)s" msgstr "%(name)s тепер %(status)s" +#: ../src/chat_control.py:3204 +msgid "File transfer" +msgstr "Перенесення файлів" + +#: ../src/chat_control.py:3207 +msgid "Size" +msgstr "Розмір" + +#: ../src/chat_control.py:3209 +msgid "_Accept" +msgstr "_Прийняти" + +#: ../src/chat_control.py:3232 ../src/filetransfers_window.py:204 +msgid "File transfer completed" +msgstr "Передавання файла завершено" + +#: ../src/chat_control.py:3260 ../src/gui_interface.py:932 +#: ../src/roster_window.py:1934 +msgid "Remote contact stopped transfer" +msgstr "Віддалений контакт зупинив передавання файлу" + +#: ../src/chat_control.py:3262 ../src/gui_interface.py:935 +#: ../src/roster_window.py:1936 +msgid "Error opening file" +msgstr "Помилка під час спроби прочитати файл" + +#: ../src/chat_control.py:3264 ../src/filetransfers_window.py:240 +msgid "File transfer stopped" +msgstr "Зупинка передавання файла" + +#: ../src/chat_control.py:3267 ../src/filetransfers_window.py:219 +#: ../src/filetransfers_window.py:226 +msgid "File transfer cancelled" +msgstr "Передавання файла скасовано" + +#: ../src/chat_control.py:3268 ../src/filetransfers_window.py:219 +#: ../src/filetransfers_window.py:227 +msgid "Connection with peer cannot be established." +msgstr "Не вдалося встановити з’єднання з вузлом." + +#: ../src/command_system/implementation/custom.py:105 +msgid "The same as using a doc-string, except it supports translation" +msgstr "" +"Так само як для використання doc-string, за виключенням наявної підтримки " +"перекладів" + +#: ../src/command_system/implementation/execute.py:53 +msgid "Execute expression inside a shell, show output" +msgstr "Виконати вираз у оболонці, показати результат" + +#: ../src/command_system/implementation/execute.py:109 +msgid "Execute expression inside a shell, send output" +msgstr "Виконати вираз у оболонці, надіслати результат" + +#: ../src/command_system/implementation/standard.py:50 +msgid "Hide the chat buttons" +msgstr "Сховати кнопки балачки" + +#: ../src/command_system/implementation/standard.py:56 +msgid "" +"Show help on a given command or a list of available commands if -a is given" +msgstr "Показати довідку по команді або перелік команд якщо вказано -a" + +#: ../src/command_system/implementation/standard.py:83 +msgid "Send a message to the contact" +msgstr "Надіслати повідомлення контакту" + +#: ../src/command_system/implementation/standard.py:88 +msgid "Send action (in the third person) to the current chat" +msgstr "Надіслати дію (від третьої особи) до поточної балачки" + +#: ../src/command_system/implementation/standard.py:93 +msgid "Show logged messages which mention given text" +msgstr "Показувати збережені повідомлення що містять відповідний текст" + +#: ../src/command_system/implementation/standard.py:99 +#, python-format +msgid "%s: Nothing found" +msgstr "%s: не знайдено" + +#: ../src/command_system/implementation/standard.py:105 +msgid "Limit must be an integer" +msgstr "Обмеження має бути цілим числом" + +#: ../src/command_system/implementation/standard.py:140 +msgid "" +"\n" +" Set current the status\n" +"\n" +" Status can be given as one of the following values: online, away,\n" +" chat, xa, dnd.\n" +" " +msgstr "" +"\n" +" Встановити поточний стан\n" +"\n" +" Стан може бути одним з наведених: online, away,\n" +" chat, xa, dnd.\n" +" " + +#: ../src/command_system/implementation/standard.py:153 +msgid "Set the current status to away" +msgstr "Встановити поточний стан як відсутній" + +#: ../src/command_system/implementation/standard.py:156 +#: ../src/common/commands.py:109 ../src/common/helpers.py:249 +#: ../src/tooltips.py:194 +msgid "Away" +msgstr "Далеко" + +#: ../src/command_system/implementation/standard.py:161 +msgid "Set the current status to online" +msgstr "Встановити поточний стан як на зв’язку" + +#: ../src/command_system/implementation/standard.py:164 +msgid "Available" +msgstr "Доступний" + +#: ../src/command_system/implementation/standard.py:178 +#: ../src/command_system/implementation/standard.py:255 +msgid "Clear the text window" +msgstr "Очистити текстове вікно" + +#: ../src/command_system/implementation/standard.py:183 +msgid "Toggle the GPG encryption" +msgstr "Перемкнути GPG-шифрування" + +#: ../src/command_system/implementation/standard.py:188 +msgid "Send a ping to the contact" +msgstr "Надіслати запит присутності до контакту" + +#: ../src/command_system/implementation/standard.py:191 +msgid "Command is not supported for zeroconf accounts" +msgstr "Команда не підтримується для облікових записів zeroconf" + +#: ../src/command_system/implementation/standard.py:195 +msgid "Send DTMF sequence through an open audio session" +msgstr "Надіслати DTMF послідовність через відкриту аудіо сесію" + +#: ../src/command_system/implementation/standard.py:198 +msgid "No open audio sessions with the contact" +msgstr "Нема відкритих аудіо сесій з контактом" + +#: ../src/command_system/implementation/standard.py:201 +#, python-format +msgid "%s is not a valid tone" +msgstr "%s не є коректним тоном" + +#: ../src/command_system/implementation/standard.py:211 +msgid "Audio sessions are not available" +msgstr "Аудіо сесія недоступна" + +#: ../src/command_system/implementation/standard.py:221 +msgid "Video sessions are not available" +msgstr "Відео сесія недоступна" + +#: ../src/command_system/implementation/standard.py:262 +msgid "Change your nickname in a group chat" +msgstr "Змінити ваш псевдонім у груповій балачці" + +#. invalid char +#: ../src/command_system/implementation/standard.py:267 ../src/config.py:3392 +#: ../src/dialogs.py:2075 +msgid "Invalid nickname" +msgstr "Некоректний псевдонім" + +#: ../src/command_system/implementation/standard.py:272 +msgid "Open a private chat window with a specified occupant" +msgstr "_Відкрити вікно приватної балачки з зазначеним користувачем" + +#: ../src/command_system/implementation/standard.py:278 +#: ../src/command_system/implementation/standard.py:287 +#: ../src/command_system/implementation/standard.py:341 +msgid "Nickname not found" +msgstr "Псевдонім не знайдено" + +#: ../src/command_system/implementation/standard.py:281 +msgid "" +"Open a private chat window with a specified occupant and send him a message" +msgstr "" +"Відкрити вікно приватної балачки з зазначеним користувачем та надіслати йому " +"повідомлення" + +#: ../src/command_system/implementation/standard.py:290 +msgid "Display or change a group chat topic" +msgstr "Показати або змінити тему групової балачки" + +#: ../src/command_system/implementation/standard.py:298 +msgid "Invite a user to a room for a reason" +msgstr "Запросити користувача в кімнату вказавши причину" + +#: ../src/command_system/implementation/standard.py:301 +#, python-format +msgid "Invited %s to %s" +msgstr "Запрошено %s до %s" + +#: ../src/command_system/implementation/standard.py:304 +msgid "Join a group chat given by a jid, optionally using given nickname" +msgstr "Приєднатися до групової балачки по JID, або за псевдонімом" + +#: ../src/command_system/implementation/standard.py:321 +msgid "" +"Leave the groupchat, optionally giving a reason, and close tab or window" +msgstr "" +"Покинути групову балачку, за бажанням вказавши причину, та закрити вкладку " +"або вікно" + +#: ../src/command_system/implementation/standard.py:326 +msgid "" +"\n" +" Ban user by a nick or a jid from a groupchat\n" +"\n" +" If given nickname is not found it will be treated as a jid.\n" +" " +msgstr "" +"\n" +" Заблокувати користувача у груповій балачці по JID або псевдоніму\n" +"\n" +" Якщо вказаний псевдонім не буде знайдено, він буде оброблений як jid.\n" +" " + +#: ../src/command_system/implementation/standard.py:338 +msgid "Kick user by a nick from a groupchat" +msgstr "Викинути користувача з групової балачки за псевдонімом" + +#: ../src/command_system/implementation/standard.py:345 +msgid "Display names of all group chat occupants" +msgstr "Показати імена усіх учасників балачки" + +#: ../src/command_system/implementation/standard.py:367 +msgid "Forbid an occupant to send you public or private messages" +msgstr "Заборонити учаснику надсилати вам особисті або публічні повідомлення" + +#: ../src/command_system/implementation/standard.py:372 +msgid "Allow an occupant to send you public or private messages" +msgstr "Дозволити учаснику надсилати вам особисті або публічні повідомлення" + #: ../src/common/check_paths.py:38 msgid "creating logs database" msgstr "створення бази даних журналів" @@ -3403,11 +3678,6 @@ msgstr "Вільний для балачки" msgid "Online" msgstr "В мережі" -#: ../src/common/commands.py:109 ../src/common/helpers.py:242 -#: ../src/tooltips.py:193 -msgid "Away" -msgstr "Далеко" - #: ../src/common/commands.py:110 msgid "Extended away" msgstr "Не буде довго" @@ -3447,9 +3717,9 @@ msgstr "Оберіть групові балачки, які ви бажаєте #. Make special context menu if group is Groupchats #: ../src/common/commands.py:215 ../src/common/contacts.py:128 -#: ../src/common/helpers.py:60 ../src/roster_window.py:817 -#: ../src/roster_window.py:1648 ../src/roster_window.py:1650 -#: ../src/roster_window.py:2512 ../src/roster_window.py:5524 +#: ../src/common/helpers.py:67 ../src/roster_window.py:820 +#: ../src/roster_window.py:1691 ../src/roster_window.py:1693 +#: ../src/roster_window.py:2557 ../src/roster_window.py:5610 msgid "Groupchats" msgstr "Групові балачки" @@ -3571,9 +3841,9 @@ msgstr "" "згорнуто." #. sorted alphanum -#: ../src/common/config.py:108 ../src/common/config.py:497 +#: ../src/common/config.py:108 ../src/common/config.py:504 #: ../src/common/optparser.py:296 ../src/common/optparser.py:492 -#: ../src/common/optparser.py:526 ../src/gui_interface.py:2634 +#: ../src/common/optparser.py:526 ../src/gui_interface.py:2668 msgid "default" msgstr "типовий" @@ -4267,7 +4537,13 @@ msgstr "" "Якщо увімкнено, Gajim покаже членство учасників балачки додаванням " "кольорового квадрату до піктограми стану." -#: ../src/common/config.py:306 +#: ../src/common/config.py:293 +msgid "" +"Proxy used for all outgoing connections if the account does not have a " +"specific proxy configured" +msgstr "Проксі що використовується для усіх вихідних з’єднань не налаштовано" + +#: ../src/common/config.py:307 msgid "" "Priority will change automatically according to your status. Priorities are " "defined in autopriority_* options." @@ -4275,7 +4551,7 @@ msgstr "" "Пріоритет автоматично змінюватиметься залежно від вашого стану. Пріоритети " "визначаються за допомогою параметрів autopriority_*." -#: ../src/common/config.py:314 +#: ../src/common/config.py:315 msgid "" "Status used to autoconnect as. Can be online, chat, away, xa, dnd, " "invisible. NOTE: this option is used only if restore_last_status is disabled" @@ -4284,38 +4560,38 @@ msgstr "" "значення: online, chat, away, xa, dnd, invisible. ЗАУВАЖЕННЯ: цей параметр " "використовуватиметься, лише якщо вимкнено параметр restore_last_status" -#: ../src/common/config.py:315 +#: ../src/common/config.py:316 msgid "If enabled, restore the last status that was used." msgstr "Якщо увімкнено, відновлювати попередній використаний стан." -#: ../src/common/config.py:317 +#: ../src/common/config.py:318 msgid "" "If True, Contacts requesting authorization will be automatically accepted." msgstr "Якщо Істино, усі запити авторизації буде автоматично задоволено." -#: ../src/common/config.py:318 +#: ../src/common/config.py:319 msgid "" "If False, this account will be disabled and will not appear in roster window." msgstr "" "Якщо цей параметр матиме значення «False», обліковий запис буде вимкнено та " "не буде відображатись у вікні реєстру." -#: ../src/common/config.py:321 +#: ../src/common/config.py:322 msgid "" "If disabled, don't sign presences with GPG key, even if GPG is configured." msgstr "" "Якщо вимкнено, не підписувати повідомлення про присутність ключем GPG, " "навіть якщо GPG налаштовано для використання." -#: ../src/common/config.py:323 +#: ../src/common/config.py:324 msgid "Enable ESessions encryption for this account." msgstr "Увімкнути шифрування ESession для цього облікового запису." -#: ../src/common/config.py:324 +#: ../src/common/config.py:325 msgid "Should Gajim automatically start an encrypted session when possible?" msgstr "Чи має Gajim автоматично починати сеанс з шифруванням за можливості?" -#: ../src/common/config.py:325 +#: ../src/common/config.py:326 msgid "" "Ordered list (space separated) of connection type to try. Can contain tls, " "ssl or plain" @@ -4323,31 +4599,33 @@ msgstr "" "Впорядкований список відокремлених комами типів з’єднання, які має " "спробувати програма. Можливі значення: tls, ssl і plain" -#: ../src/common/config.py:326 +#: ../src/common/config.py:327 msgid "" -"Show a warning dialog before sending password on an plaintext connection." +"Show a warning dialog before sending password on an plaintext connection. " +"Can be 'warn', 'connect', 'disconnect'" msgstr "" -"Показувати діалогове вікно попередження, перш ніж надсилати пароль " -"нешифрованим з’єднанням." +"Показувати діалогове вікно попередження, перш ніж надсилати пароль звичайним " +"текстом. " +"Може бути 'поперджати', 'з’єднувати', 'відключати'" -#: ../src/common/config.py:327 +#: ../src/common/config.py:328 msgid "Show a warning dialog before using standard SSL library." msgstr "" "Показувати діалогове вікно попередження, перш ніж користуватися стандартною " "бібліотекою SSL." -#: ../src/common/config.py:328 +#: ../src/common/config.py:329 msgid "" "Show a warning dialog before sending PLAIN password over a plain connection." msgstr "" "Показувати діалогове вікно попередження, перш ніж надсилати відкритий пароль " "незашифрованим з'єднанням." -#: ../src/common/config.py:330 +#: ../src/common/config.py:331 msgid "Space separated list of ssl errors to ignore." msgstr "Відокремлений пробілами список помилок ssl, які слід ігнорувати." -#: ../src/common/config.py:336 +#: ../src/common/config.py:337 msgid "" "Space separated list of JIDs for which you do not want to store logs. You " "can also add account name to log nothing for this account." @@ -4356,7 +4634,7 @@ msgstr "" "журнали. Ви можете також додати назву облікового запису для якого не буде " "вестись журналювання." -#: ../src/common/config.py:337 +#: ../src/common/config.py:338 msgid "" "Space separated list of JIDs for which you accept to not log conversations " "if he does not want to." @@ -4364,15 +4642,15 @@ msgstr "" "Розділений пробілами перелік ідентифікаторів JID для яких ви згодні не " "зберігати записи якщо вони цього не хочуть." -#: ../src/common/config.py:340 +#: ../src/common/config.py:341 msgid "Whitespace sent after inactivity" msgstr "Надсилання порожнього повідомлення після неактивності." -#: ../src/common/config.py:341 +#: ../src/common/config.py:342 msgid "XMPP ping sent after inactivity" msgstr "Надсилання XMPP ехо після неактивності." -#: ../src/common/config.py:345 +#: ../src/common/config.py:346 msgid "" "How many seconds to wait for the answer of ping alive packet before we try " "to reconnect." @@ -4382,11 +4660,11 @@ msgstr "" "з’єднання." #. yes, no, ask -#: ../src/common/config.py:349 +#: ../src/common/config.py:350 msgid "Jabberd2 workaround" msgstr "Обхідний прийом для Jabberd2" -#: ../src/common/config.py:352 +#: ../src/common/config.py:353 msgid "" "If checked, Gajim will use your IP and proxies defined in " "file_transfer_proxies option for file transfer." @@ -4395,26 +4673,35 @@ msgstr "" "проксі сервери, визначення параметром file_transfer_proxies, для передавання " "файлів." -#: ../src/common/config.py:366 +#: ../src/common/config.py:354 +msgid "" +"If True, Gajim will test file transfer proxies on startup to be sure it " +"works. Openfire's proxies are known to fail this test even if they work." +msgstr "" +"Якщо увімкнено, Gajim буде тестувати проксі для надсилання файлів при старті, " +"щоб переконатись у їх працездатності. Openfire не проходить цей тест навіть " +"якщо працездатний." + +#: ../src/common/config.py:368 msgid "Answer to receipt requests" msgstr "Відповідати на запити щодо підтвердження отримання" -#: ../src/common/config.py:367 +#: ../src/common/config.py:369 msgid "Sent receipt requests" msgstr "Надіслані запити на підтвердження отримання" -#: ../src/common/config.py:376 +#: ../src/common/config.py:378 msgid "" "Allow Gajim to send information about the operating system you are running." msgstr "" "Дозволити Gajim надсилати інформацію, яку операційну систему ви " "використовуєте" -#: ../src/common/config.py:377 +#: ../src/common/config.py:379 msgid "Allow Gajim to send your local time." msgstr "Дозволятии Gajim надсилати ваш локальний часд" -#: ../src/common/config.py:378 +#: ../src/common/config.py:380 msgid "" "When negotiating an encrypted session, should Gajim assume you want your " "messages to be logged?" @@ -4422,19 +4709,48 @@ msgstr "" "Під час налаштування сеансу з шифруванням, чи слід Gajim припускати, що ви " "бажаєте вести запис повідомлень?" -#: ../src/common/config.py:381 +#: ../src/common/config.py:383 msgid "Message that is sent to contacts you want to add" msgstr "Повідомлення що буде надіслано контакту який ви бажаєте додати" -#: ../src/common/config.py:382 +#: ../src/common/config.py:384 msgid "Last time we syncronized with logs from server." msgstr "Останній раз коли було синхронізовано журнали з сервером" -#: ../src/common/config.py:444 +#: ../src/common/config.py:385 +msgid "" +"If enabled and if server supports this feature, Gajim will receive messages " +"sent and received by other resources." +msgstr "" +"Якщо увімкнено та сервер підтримує цю можливість, Gajim буде отримувати " +"повідомлення " +"надіслані та отримані іншими ресурсами." + +#: ../src/common/config.py:386 +msgid "" +"If enabled, Gajim will send your local IPs so your contact can connect to " +"your machine to transfer files." +msgstr "" +"Якщо увімкнено, Gajim надішле ваш локальний IP щоб контакт міг з’єднатись " +"та надіслати вам файли." + +#: ../src/common/config.py:387 +msgid "Latest token for Oauth2 authentication." +msgstr "Останній запис аутентифікації Oauth2" + +#: ../src/common/config.py:388 +msgid "client_id for Oauth2 authentication." +msgstr "client_id для аутентифікації Oauth2" + +#: ../src/common/config.py:389 +msgid "redirect_url for Oauth2 authentication." +msgstr "redirect_url для аутентифікації Oauth2." + +#: ../src/common/config.py:451 msgid "Is OpenPGP enabled for this contact?" msgstr "Чи увімкнено OpenPGP для цього контакту?" -#: ../src/common/config.py:445 +#: ../src/common/config.py:452 msgid "" "Should Gajim automatically start an encrypted session with this contact when " "possible?" @@ -4442,11 +4758,11 @@ msgstr "" "Чи має Gajim за можливості автоматично запускати шифрований сеанс " "спілкування з цим контактом?" -#: ../src/common/config.py:446 ../src/common/config.py:449 +#: ../src/common/config.py:453 ../src/common/config.py:456 msgid "Language for which we want to check misspelled words" msgstr "Мова, згідно правил якої відбуватиметься перевірка правопису слів" -#: ../src/common/config.py:452 +#: ../src/common/config.py:459 msgid "" "State whether plugins should be activated on exit (this is saved on Gajim " "exit). This option SHOULD NOT be used to (de)activate plug-ins. Use GUI " @@ -4456,83 +4772,83 @@ msgstr "" "виході з Gajim). Ця опція НЕ ПОВИННА бути використана для (де)активації " "додатків. Використовуйте для цього графічний інтерфейс користувача." -#: ../src/common/config.py:457 ../src/common/pep.py:157 +#: ../src/common/config.py:464 ../src/common/pep.py:157 msgid "Sleeping" msgstr "Сплю" -#: ../src/common/config.py:458 +#: ../src/common/config.py:465 msgid "Back soon" msgstr "Скоро повернуся" -#: ../src/common/config.py:458 +#: ../src/common/config.py:465 msgid "Back in some minutes." msgstr "Повернуся за декілька хвилин." -#: ../src/common/config.py:459 ../src/common/pep.py:127 +#: ../src/common/config.py:466 ../src/common/pep.py:127 msgid "Eating" msgstr "Їм" -#: ../src/common/config.py:459 +#: ../src/common/config.py:466 msgid "I'm eating, so leave me a message." msgstr "Зараз їм, залиште повідомлення, перегляну пізніше." -#: ../src/common/config.py:460 +#: ../src/common/config.py:467 msgid "Movie" msgstr "Відео" -#: ../src/common/config.py:460 +#: ../src/common/config.py:467 msgid "I'm watching a movie." msgstr "Я дивлюся відео." -#: ../src/common/config.py:461 ../src/common/pep.py:186 +#: ../src/common/config.py:468 ../src/common/pep.py:186 msgid "Working" msgstr "Працюю" -#: ../src/common/config.py:461 +#: ../src/common/config.py:468 msgid "I'm working." msgstr "Я працюю." -#: ../src/common/config.py:462 +#: ../src/common/config.py:469 msgid "Phone" msgstr "Телефон" -#: ../src/common/config.py:462 +#: ../src/common/config.py:469 msgid "I'm on the phone." msgstr "Я розмовляю телефоном." -#: ../src/common/config.py:463 +#: ../src/common/config.py:470 msgid "Out" msgstr "Відійшов(шла)" -#: ../src/common/config.py:463 +#: ../src/common/config.py:470 msgid "I'm out enjoying life." msgstr "Я насолоджуюся життям." -#: ../src/common/config.py:474 +#: ../src/common/config.py:481 msgid "I'm available." msgstr "Я — доступний (доступна) для балачки." -#: ../src/common/config.py:475 +#: ../src/common/config.py:482 msgid "I'm free for chat." msgstr "Я — вільний (вільна) для балачки." -#: ../src/common/config.py:476 ../src/config.py:1609 +#: ../src/common/config.py:483 ../src/config.py:1652 msgid "Be right back." msgstr "Скоро повернуся." -#: ../src/common/config.py:477 +#: ../src/common/config.py:484 msgid "I'm not available." msgstr "Я — недоступний (недоступна) для балачки." -#: ../src/common/config.py:478 +#: ../src/common/config.py:485 msgid "Do not disturb." msgstr "Не турбувати." -#: ../src/common/config.py:479 ../src/common/config.py:480 +#: ../src/common/config.py:486 ../src/common/config.py:487 msgid "Bye!" msgstr "Пока!" -#: ../src/common/config.py:490 +#: ../src/common/config.py:497 msgid "" "Sound to play when a group chat message contains one of the words in " "muc_highlight_words, or when a group chat message contains your nickname." @@ -4541,27 +4857,31 @@ msgstr "" "зі слів, вказаних за допомогою параметра muc_highlight_words, або якщо " "повідомлення групової балачки містить ваш псевдонім." -#: ../src/common/config.py:491 +#: ../src/common/config.py:498 msgid "Sound to play when any MUC message arrives." msgstr "Звук, який буде відтворено за появи повідомлення групової балачки." -#: ../src/common/config.py:500 ../src/common/optparser.py:310 +#: ../src/common/config.py:507 ../src/common/optparser.py:310 msgid "green" msgstr "зелений" -#: ../src/common/config.py:504 ../src/common/optparser.py:296 +#: ../src/common/config.py:511 ../src/common/optparser.py:296 msgid "grocery" msgstr "овочевий" -#: ../src/common/config.py:508 +#: ../src/common/config.py:515 msgid "human" msgstr "тілесний" -#: ../src/common/config.py:512 +#: ../src/common/config.py:519 msgid "marine" msgstr "морський" -#: ../src/common/connection_handlers_events.py:345 +#: ../src/common/config.py:526 +msgid "Tor" +msgstr "Tor" + +#: ../src/common/connection_handlers_events.py:367 #, python-format msgid "" "JID %s is not RFC compliant. It will not be added to your roster. Use roster " @@ -4571,25 +4891,23 @@ msgstr "" "Скористайтеся інструментами для керування реєстром, наприклад, http://jru." "jabberstudio.org/ для його вилучення" -#: ../src/common/connection_handlers_events.py:777 +#: ../src/common/connection_handlers_events.py:799 #, python-format msgid "unsubscribe request from %s" msgstr "запит на скасування підписки від %s" -#: ../src/common/connection_handlers_events.py:862 -#: ../src/common/connection_handlers.py:339 -#: ../src/common/connection_handlers.py:943 -#: ../src/common/connection_handlers.py:1055 -#: ../src/common/connection_handlers.py:1716 ../src/common/connection.py:448 -#: ../src/common/logger.py:1125 ../src/gajim.py:389 +#: ../src/common/connection_handlers_events.py:884 +#: ../src/common/connection_handlers.py:334 +#: ../src/common/connection_handlers.py:940 +#: ../src/common/connection_handlers.py:1052 ../src/common/connection.py:453 +#: ../src/common/logger.py:1142 ../src/gajim.py:392 msgid "Disk Write Error" msgstr "Помилка під час спроби запису на диск" -#: ../src/common/connection_handlers_events.py:866 -#: ../src/common/connection_handlers.py:946 -#: ../src/common/connection_handlers.py:1058 -#: ../src/common/connection_handlers.py:1719 ../src/common/connection.py:452 -#: ../src/common/logger.py:1128 ../src/gajim.py:208 ../src/session.py:101 +#: ../src/common/connection_handlers_events.py:888 +#: ../src/common/connection_handlers.py:943 +#: ../src/common/connection_handlers.py:1055 ../src/common/connection.py:457 +#: ../src/common/logger.py:1145 ../src/gajim.py:211 ../src/session.py:101 #, python-format msgid "" "The database file (%s) cannot be read. Try to repair it (see http://trac." @@ -4601,313 +4919,316 @@ msgstr "" #. Room has been destroyed. see #. http://www.xmpp.org/extensions/xep-0045.html#destroyroom -#: ../src/common/connection_handlers_events.py:887 +#: ../src/common/connection_handlers_events.py:909 msgid "Room has been destroyed" msgstr "Кімнату було знищено" -#: ../src/common/connection_handlers_events.py:895 +#: ../src/common/connection_handlers_events.py:917 #, python-format msgid "You can join this room instead: %s" msgstr "Ви можете приєднатися замість цієї кімнати до %s" -#: ../src/common/connection_handlers_events.py:968 -#: ../src/common/connection.py:259 ../src/config.py:2106 ../src/config.py:2115 -#: ../src/config.py:2183 ../src/config.py:3619 ../src/dataforms_widget.py:623 -#: ../src/dialogs.py:3085 +#: ../src/common/connection_handlers_events.py:1001 +#: ../src/common/connection_handlers_events.py:1033 +#: ../src/common/connection_handlers_events.py:1049 +#: ../src/common/connection.py:263 ../src/config.py:2149 ../src/config.py:2158 +#: ../src/config.py:2226 ../src/config.py:3663 ../src/dataforms_widget.py:623 +#: ../src/dialogs.py:3092 msgid "Invalid Jabber ID" msgstr "Некоректний ідентифікатор Jabber" -#: ../src/common/connection_handlers_events.py:969 +#: ../src/common/connection_handlers_events.py:1002 +#: ../src/common/connection_handlers_events.py:1034 +#: ../src/common/connection_handlers_events.py:1050 msgid "A message from a non-valid JID arrived, it has been ignored." msgstr "" "Надійшло повідомлення від некоректного JID, це повідомлення було " "проігноровано." #. ('MSGNOTSENT', account, (jid, ierror_msg, msg, time, session)) -#: ../src/common/connection_handlers_events.py:1006 -#: ../src/gui_interface.py:415 ../src/gui_interface.py:429 +#: ../src/common/connection_handlers_events.py:1076 +#: ../src/gui_interface.py:420 ../src/gui_interface.py:434 #, python-format msgid "error while sending %(message)s ( %(error)s )" msgstr "помилка під час надсилання %(message)s ( %(error)s )" -#: ../src/common/connection_handlers_events.py:1423 +#: ../src/common/connection_handlers_events.py:1508 #, python-format msgid "Unknown SSL error: %d" msgstr "Невідома помилка SSL: %d" -#: ../src/common/connection_handlers_events.py:1951 ../src/dialogs.py:2772 -#: ../src/notify.py:267 +#: ../src/common/connection_handlers_events.py:2040 ../src/dialogs.py:2779 +#: ../src/notify.py:263 msgid "New Single Message" msgstr "Створити окреме повідомлення" -#: ../src/common/connection_handlers_events.py:1953 +#: ../src/common/connection_handlers_events.py:2042 #, python-format msgid "New Single Message from %(nickname)s" msgstr "Нове окреме повідомлення від %(nickname)s" -#: ../src/common/connection_handlers_events.py:1957 ../src/dialogs.py:2773 -#: ../src/notify.py:268 +#: ../src/common/connection_handlers_events.py:2046 ../src/dialogs.py:2780 +#: ../src/notify.py:264 msgid "New Private Message" msgstr "Нове конфіденційне повідомлення" -#: ../src/common/connection_handlers_events.py:1959 +#: ../src/common/connection_handlers_events.py:2048 #, python-format msgid "New Private Message from group chat %s" msgstr "Нове конфіденційне повідомлення з групової балачки %s" -#: ../src/common/connection_handlers_events.py:1962 +#: ../src/common/connection_handlers_events.py:2051 #, python-format msgid "%(nickname)s: %(message)s" msgstr "%(nickname)s: %(message)s" -#: ../src/common/connection_handlers_events.py:1965 +#: ../src/common/connection_handlers_events.py:2054 #, python-format msgid "Messaged by %(nickname)s" msgstr "Повідомлення надіслано від імені %(nickname)s" -#: ../src/common/connection_handlers_events.py:1969 ../src/dialogs.py:2772 -#: ../src/notify.py:267 +#: ../src/common/connection_handlers_events.py:2058 ../src/dialogs.py:2779 +#: ../src/notify.py:263 msgid "New Message" msgstr "Нове повідомлення" -#: ../src/common/connection_handlers_events.py:1971 +#: ../src/common/connection_handlers_events.py:2060 #, python-format msgid "New Message from %(nickname)s" msgstr "Нове повідомлення від %(nickname)s" -#: ../src/common/connection_handlers_events.py:2100 +#: ../src/common/connection_handlers_events.py:2189 #, python-format msgid "%(nick)s Changed Status" msgstr "%(nick)s змінив стан" -#: ../src/common/connection_handlers_events.py:2102 +#: ../src/common/connection_handlers_events.py:2191 #: ../src/groupchat_control.py:205 ../src/groupchat_control.py:1766 -#: ../src/history_window.py:447 +#: ../src/history_window.py:448 #, python-format msgid "%(nick)s is now %(status)s" msgstr "%(nick)s тепер %(status)s" -#: ../src/common/connection_handlers_events.py:2107 ../src/dialogs.py:2784 -#: ../src/notify.py:281 +#: ../src/common/connection_handlers_events.py:2196 ../src/dialogs.py:2791 +#: ../src/notify.py:277 msgid "Contact Changed Status" msgstr "Зміна контактом стану" -#: ../src/common/connection_handlers_events.py:2109 +#: ../src/common/connection_handlers_events.py:2198 #, python-format msgid "%(nickname)s Signed In" msgstr "%(nickname)s в мережі" #. default value -#: ../src/common/connection_handlers_events.py:2114 ../src/dialogs.py:2768 -#: ../src/notify.py:263 +#: ../src/common/connection_handlers_events.py:2203 ../src/dialogs.py:2775 +#: ../src/notify.py:259 msgid "Contact Signed In" msgstr "Контакт увійшов до мережі" -#: ../src/common/connection_handlers_events.py:2116 +#: ../src/common/connection_handlers_events.py:2205 #, python-format msgid "%(nickname)s Signed Out" msgstr "%(nickname)s вийшов з мережі" -#: ../src/common/connection_handlers_events.py:2121 ../src/dialogs.py:2770 -#: ../src/notify.py:265 +#: ../src/common/connection_handlers_events.py:2210 ../src/dialogs.py:2777 +#: ../src/notify.py:261 msgid "Contact Signed Out" msgstr "Контакт вийшов з мережі" -#: ../src/common/connection_handlers.py:95 +#: ../src/common/connection_handlers.py:88 #: ../src/common/zeroconf/connection_handlers_zeroconf.py:54 msgid "Unable to load idle module" msgstr "Не вдалося завантажити модуль перевірки відсутності активності" -#: ../src/common/connection_handlers.py:128 +#: ../src/common/connection_handlers.py:121 #, python-format msgid "Registration information for transport %s has not arrived in time" msgstr "" "Відомості щодо реєстрації з транспорту %s не надійшли протягом визначеного " "проміжку часу" -#: ../src/common/connection_handlers.py:135 +#: ../src/common/connection_handlers.py:129 msgid "Registration succeeded" msgstr "Зареєструватися на %s" -#: ../src/common/connection_handlers.py:136 +#: ../src/common/connection_handlers.py:130 #, python-format msgid "Registration with agent %s succeeded" msgstr "Реєстрацію з агентом %s вдало закінчено" -#: ../src/common/connection_handlers.py:144 +#: ../src/common/connection_handlers.py:139 msgid "Registration failed" msgstr "Спроба з’єднання завершилася невдало" -#: ../src/common/connection_handlers.py:144 +#: ../src/common/connection_handlers.py:140 #, python-format msgid "" "Registration with agent %(agent)s failed with error %(error)s: %(error_msg)s" msgstr "" "Реєстрація з агентом %(agent)s невдала через помилку %(error)s: %(error_msg)s" -#: ../src/common/connection_handlers.py:573 ../src/common/connection.py:1546 +#: ../src/common/connection_handlers.py:571 ../src/common/connection.py:1540 msgid "Invisibility not supported" msgstr "Невидимість не підтримується" -#: ../src/common/connection_handlers.py:574 ../src/common/connection.py:1547 +#: ../src/common/connection_handlers.py:572 ../src/common/connection.py:1541 #, python-format msgid "Account %s doesn't support invisibility." msgstr "Обліковий запис %s не підтримує невидимості." -#: ../src/common/connection_handlers.py:1761 +#: ../src/common/connection_handlers.py:1714 msgid "I would like to add you to my roster." msgstr "Я хочу додати вас до свого реєстру." -#: ../src/common/connection.py:68 +#: ../src/common/connection.py:70 msgid "Unable to get issuer certificate" msgstr "Не вдається отримати сертифікат видавця" -#: ../src/common/connection.py:69 +#: ../src/common/connection.py:71 msgid "Unable to get certificate CRL" msgstr "Не вдалося отримати список відкликаних сертифікатів" -#: ../src/common/connection.py:70 +#: ../src/common/connection.py:72 msgid "Unable to decrypt certificate's signature" msgstr "Не вдалося розшифрувати підпис сертифікату" -#: ../src/common/connection.py:71 +#: ../src/common/connection.py:73 msgid "Unable to decrypt CRL's signature" msgstr "Не вдалося розшифрувати підпис списку відкликаних сертифікатів" -#: ../src/common/connection.py:72 +#: ../src/common/connection.py:74 msgid "Unable to decode issuer public key" msgstr "Не вдалося декодувати відкритий ключ видавця" -#: ../src/common/connection.py:73 +#: ../src/common/connection.py:75 msgid "Certificate signature failure" msgstr "Помилка під час підписування сертифіката" -#: ../src/common/connection.py:74 +#: ../src/common/connection.py:76 msgid "CRL signature failure" msgstr "Помилка під час роботи з підписом списку відкликаних сертифікатів" -#: ../src/common/connection.py:75 +#: ../src/common/connection.py:77 msgid "Certificate is not yet valid" msgstr "Сертифікат ще не набув чинності" -#: ../src/common/connection.py:76 +#: ../src/common/connection.py:78 msgid "Certificate has expired" msgstr "Строк дії сертифікату завершився!" -#: ../src/common/connection.py:77 +#: ../src/common/connection.py:79 msgid "CRL is not yet valid" msgstr "Строк дії CRL ще не почався" -#: ../src/common/connection.py:78 +#: ../src/common/connection.py:80 msgid "CRL has expired" msgstr "Строк дії CRL завершився" -#: ../src/common/connection.py:79 +#: ../src/common/connection.py:81 msgid "Format error in certificate's notBefore field" msgstr "Помилка форматування у полі сертифіката notBefore" -#: ../src/common/connection.py:80 +#: ../src/common/connection.py:82 msgid "Format error in certificate's notAfter field" msgstr "Помилка форматування у полі сертифіката notAfter" -#: ../src/common/connection.py:81 +#: ../src/common/connection.py:83 msgid "Format error in CRL's lastUpdate field" msgstr "Помилка форматування у полі сертифіката lastUpdate" -#: ../src/common/connection.py:82 +#: ../src/common/connection.py:84 msgid "Format error in CRL's nextUpdate field" msgstr "Помилка форматування у полі сертифіката nextUpdate" -#: ../src/common/connection.py:83 +#: ../src/common/connection.py:85 msgid "Out of memory" msgstr "Не вистачає пам'яті" -#: ../src/common/connection.py:84 +#: ../src/common/connection.py:86 msgid "Self signed certificate" msgstr "Сертифікат є самопідписаним" -#: ../src/common/connection.py:85 +#: ../src/common/connection.py:87 msgid "Self signed certificate in certificate chain" msgstr "Самопідписаний сертифікат у ланцюжку сертифікатів" -#: ../src/common/connection.py:86 +#: ../src/common/connection.py:88 msgid "Unable to get local issuer certificate" msgstr "Не вдалося отримати сертифікат локального видавця" -#: ../src/common/connection.py:87 +#: ../src/common/connection.py:89 msgid "Unable to verify the first certificate" msgstr "Не вдалося перевірити перший сертифікат" -#: ../src/common/connection.py:88 +#: ../src/common/connection.py:90 msgid "Certificate chain too long" msgstr "Ланцюжок сертифіката занадто великий" -#: ../src/common/connection.py:89 +#: ../src/common/connection.py:91 msgid "Certificate revoked" msgstr "Сертифікат відкликано" -#: ../src/common/connection.py:90 +#: ../src/common/connection.py:92 msgid "Invalid CA certificate" msgstr "Некоректний сертифікат CA" -#: ../src/common/connection.py:91 +#: ../src/common/connection.py:93 msgid "Path length constraint exceeded" msgstr "Перевищення обмеження на довжину адреси" -#: ../src/common/connection.py:92 +#: ../src/common/connection.py:94 msgid "Unsupported certificate purpose" msgstr "Непідтримуване призначення сертифіката" -#: ../src/common/connection.py:93 +#: ../src/common/connection.py:95 msgid "Certificate not trusted" msgstr "Сертифікат є недостовірним" -#: ../src/common/connection.py:94 +#: ../src/common/connection.py:96 msgid "Certificate rejected" msgstr "Сертифікат відхилено" -#: ../src/common/connection.py:95 +#: ../src/common/connection.py:97 msgid "Subject issuer mismatch" msgstr "Видано для іншого призначення" -#: ../src/common/connection.py:96 +#: ../src/common/connection.py:98 msgid "Authority and subject key identifier mismatch" msgstr "Не збігаються поля видавця та ідентифікатора призначення ключа" -#: ../src/common/connection.py:97 +#: ../src/common/connection.py:99 msgid "Authority and issuer serial number mismatch" msgstr "Серійні номери служби сертифікації і видавця не збігаються" -#: ../src/common/connection.py:98 +#: ../src/common/connection.py:100 msgid "Key usage does not include certificate signing" msgstr "До призначення ключа не належить підписування сертифікатів" -#: ../src/common/connection.py:99 +#: ../src/common/connection.py:101 msgid "Application verification failure" msgstr "Помилка під час перевірки програми" -#: ../src/common/connection.py:260 ../src/dialogs.py:3086 +#: ../src/common/connection.py:264 ../src/dialogs.py:3093 #, python-format msgid "It is not possible to send a message to %s, this JID is not valid." msgstr "Неможливо надіслати повідомлення до %s, вказаний JID не є коректним." -#: ../src/common/connection.py:282 +#: ../src/common/connection.py:286 msgid "Neither the remote presence is signed, nor a key was assigned." msgstr "Не підписано повідомлення про присутність, ключа також не призначено." -#: ../src/common/connection.py:285 +#: ../src/common/connection.py:289 #, python-format msgid "The contact's key (%s) does not match the key assigned in Gajim." msgstr "" "Ключ контакту (%s) не збігається з ключем, призначеним для нього у Gajim." -#. we're not english -#. one in locale and one en -#: ../src/common/connection.py:337 +#. we're not english: one in locale and one en +#: ../src/common/connection.py:342 msgid "[This message is *encrypted* (See :XEP:`27`]" msgstr "[Це повідомлення *зашифровано* (див. :XEP:`27`]" -#: ../src/common/connection.py:435 +#: ../src/common/connection.py:440 #, python-format msgid "" "Subject: %(subject)s\n" @@ -4916,18 +5237,18 @@ msgstr "" "Тема: %(subject)s\n" "%(message)s" -#: ../src/common/connection.py:845 +#: ../src/common/connection.py:850 #, python-format msgid "Connection with account \"%s\" has been lost" msgstr "З’єднання з обліковим записом «%s» було втрачено" -#: ../src/common/connection.py:846 +#: ../src/common/connection.py:851 msgid "Reconnect manually." msgstr "Виконати повторне з’єднання вручну." #. it's a new account #. wrong answer -#: ../src/common/connection.py:857 +#: ../src/common/connection.py:862 #, python-format msgid "Server %(name)s answered wrongly to register request: %(error)s" msgstr "" @@ -4935,60 +5256,59 @@ msgstr "" "реєстрації: %(error)s" #. requested config has changed since first connection -#: ../src/common/connection.py:899 +#: ../src/common/connection.py:904 #, python-format msgid "Server %s provided a different registration form" msgstr "На сервері %s передбачено іншу форму реєстрації" -#. wrong answer -#: ../src/common/connection.py:915 +#: ../src/common/connection.py:921 msgid "Invalid answer" msgstr "Некоректна відповідь" -#: ../src/common/connection.py:916 +#: ../src/common/connection.py:922 #, python-format msgid "Transport %(name)s answered wrongly to register request: %(error)s" msgstr "" "Транспорт %(name)s надіслав помилкову відповідь на запит щодо реєстрації: " "%(error)s" -#: ../src/common/connection.py:1224 ../src/common/connection.py:1358 -#: ../src/common/connection.py:1972 -#: ../src/common/zeroconf/connection_zeroconf.py:204 +#: ../src/common/connection.py:1197 ../src/common/connection.py:1349 +#: ../src/common/connection.py:1976 +#: ../src/common/zeroconf/connection_zeroconf.py:205 #, python-format msgid "Could not connect to \"%s\"" msgstr "Не вдалося з’єднатися з «%s»" -#: ../src/common/connection.py:1225 ../src/gui_interface.py:524 +#: ../src/common/connection.py:1198 ../src/gui_interface.py:529 msgid "Check your connection or try again later." msgstr "Перевірте ваше з’єднання, а потім повторіть спробу." -#: ../src/common/connection.py:1230 +#: ../src/common/connection.py:1203 #, python-format msgid "Server replied: %s" msgstr "Збережено за адресою: %s" -#: ../src/common/connection.py:1243 +#: ../src/common/connection.py:1218 msgid "Connection to proxy failed" msgstr "Спроба встановити з'єднання з проксі-сервером завершилася невдало" -#: ../src/common/connection.py:1275 ../src/common/connection.py:1337 +#: ../src/common/connection.py:1256 ../src/common/connection.py:1328 #, python-format msgid "Could not connect to account %s" msgstr "Не вдалося з’єднатися з обліковим записом %s" -#: ../src/common/connection.py:1276 ../src/common/connection.py:1338 +#: ../src/common/connection.py:1257 ../src/common/connection.py:1329 #, python-format msgid "Connection with account %s has been lost. Retry connecting." msgstr "" "З’єднання з обліковим записом було втрачено %s. Повторна спроба з’єднання." -#: ../src/common/connection.py:1301 +#: ../src/common/connection.py:1282 #, python-format msgid "The authenticity of the %s certificate could be invalid." msgstr "Достовірність сертифіката %s знаходиться під питанням." -#: ../src/common/connection.py:1304 +#: ../src/common/connection.py:1285 #, python-format msgid "" "\n" @@ -4997,7 +5317,7 @@ msgstr "" "\n" "Помилка SSL: <b>%s</b>" -#: ../src/common/connection.py:1306 +#: ../src/common/connection.py:1287 #, python-format msgid "" "\n" @@ -5006,67 +5326,76 @@ msgstr "" "\n" "Невідома помилка SSL: %d" -#: ../src/common/connection.py:1359 +#: ../src/common/connection.py:1310 +#, python-format +msgid "" +"The authenticity of the %s certificate could be invalid.\n" +"The certificate does not cover this domain." +msgstr "" +"Достовірність сертифіката %s знаходиться під питанням. " +"Сертифікат не відповідає поточному домену." + +#: ../src/common/connection.py:1350 msgid "Check your connection or try again later" msgstr "Перевірте ваше з’єднання або повторіть спробу пізніше" -#: ../src/common/connection.py:1393 +#: ../src/common/connection.py:1385 #, python-format msgid "Authentication failed with \"%s\"" msgstr "Спроба розпізнавання за допомогою «%s» завершилася невдало" -#: ../src/common/connection.py:1395 -msgid "Please check your login and password for correctness." +#: ../src/common/connection.py:1386 +msgid "Please check your login and passwordfor correctness." msgstr "Будь ласка, перевірте, чи правильно вказано ім’я користувача і пароль." -#: ../src/common/connection.py:1468 +#: ../src/common/connection.py:1461 msgid "Error while removing privacy list" msgstr "Помилка під час вилучення списку конфіденційності" -#: ../src/common/connection.py:1469 +#: ../src/common/connection.py:1462 #, python-format msgid "" "Privacy list %s has not been removed. It is maybe active in one of your " -"connected resources. Deactivate it and try again." +"connected resources. Deactivate it and tryagain." msgstr "" "Список конфіденційності %s не було вилучено. Ймовірно, він використовується " "у одному з ресурсів, з яким з’єднано ваш клієнт. Вимкніть цей ресурс і " "повторіть спробу." -#: ../src/common/connection.py:1839 +#: ../src/common/connection.py:1843 #, python-format msgid "Sent contact: \"%s\" (%s)" msgstr "Відправлений контакт: \"%s\" (%s)" -#: ../src/common/connection.py:1842 +#: ../src/common/connection.py:1846 msgid "Sent contacts:" msgstr "Надіслати контакти:" -#: ../src/common/connection.py:1989 ../src/common/connection.py:2012 +#: ../src/common/connection.py:1993 ../src/common/connection.py:2016 msgid "Not fetched because of invisible status" msgstr "Не отримано через стан невидимості" -#: ../src/common/connection.py:2543 +#: ../src/common/connection.py:2575 msgid "Unregister failed" msgstr "Спроба скасування реєстрації завершилася невдало" -#: ../src/common/connection.py:2544 +#: ../src/common/connection.py:2576 #, python-format msgid "Unregistration with server %(server)s failed: %(error)s" msgstr "" "Видалення реєстрації з серверу %(server)s не вдалося через помилку: %(error)s" -#: ../src/common/contacts.py:126 ../src/common/helpers.py:60 -#: ../src/gui_interface.py:467 +#: ../src/common/contacts.py:126 ../src/common/helpers.py:67 +#: ../src/gui_interface.py:472 msgid "Observers" msgstr "Спостерігачі" #: ../src/common/contacts.py:130 ../src/common/contacts.py:358 -#: ../src/common/helpers.py:60 ../src/disco.py:120 ../src/disco.py:121 -#: ../src/disco.py:1517 ../src/roster_window.py:856 -#: ../src/roster_window.py:1552 ../src/roster_window.py:1640 -#: ../src/roster_window.py:1642 ../src/roster_window.py:1804 -#: ../src/roster_window.py:2480 +#: ../src/common/helpers.py:67 ../src/disco.py:120 ../src/disco.py:121 +#: ../src/disco.py:1517 ../src/roster_window.py:859 +#: ../src/roster_window.py:1579 ../src/roster_window.py:1683 +#: ../src/roster_window.py:1685 ../src/roster_window.py:1847 +#: ../src/roster_window.py:2525 msgid "Transports" msgstr "Транспорти" @@ -5291,230 +5620,230 @@ msgstr "Кінець тижня" msgid "Weekend!" msgstr "Вихідні!" -#: ../src/common/helpers.py:151 +#: ../src/common/helpers.py:158 msgid "Username must be between 1 and 1023 chars" msgstr "Ім’я користувача повинно бути від 1 до 1023 символів" -#: ../src/common/helpers.py:156 +#: ../src/common/helpers.py:163 msgid "Invalid character in username." msgstr "Некоректний символ у імені користувача." -#: ../src/common/helpers.py:162 +#: ../src/common/helpers.py:169 msgid "Server must be between 1 and 1023 chars" msgstr "Сервер має бути від 1 до 1023 символів" -#: ../src/common/helpers.py:167 +#: ../src/common/helpers.py:174 msgid "Invalid character in hostname." msgstr "Некоректний символ у назві вузла." -#: ../src/common/helpers.py:169 +#: ../src/common/helpers.py:176 msgid "Server address required." msgstr "Слід вказати адресу сервера." -#: ../src/common/helpers.py:173 +#: ../src/common/helpers.py:180 msgid "Resource must be between 1 and 1023 chars" msgstr "Ресурс має бути від 1 до 1023 символів" -#: ../src/common/helpers.py:178 +#: ../src/common/helpers.py:185 msgid "Invalid character in resource." msgstr "Некоректний символ у назві ресурсу." -#: ../src/common/helpers.py:218 +#: ../src/common/helpers.py:225 msgid "_Busy" msgstr "_Зайнятий" -#: ../src/common/helpers.py:220 ../src/tooltips.py:195 +#: ../src/common/helpers.py:227 ../src/tooltips.py:196 msgid "Busy" msgstr "Зайнятий" -#: ../src/common/helpers.py:223 +#: ../src/common/helpers.py:230 msgid "_Not Available" msgstr "_Не доступний" -#: ../src/common/helpers.py:225 ../src/tooltips.py:197 +#: ../src/common/helpers.py:232 ../src/tooltips.py:198 msgid "Not Available" msgstr "Дуже далеко" -#: ../src/common/helpers.py:228 +#: ../src/common/helpers.py:235 msgid "_Free for Chat" msgstr "_Вільний для балачки" -#: ../src/common/helpers.py:230 ../src/tooltips.py:191 +#: ../src/common/helpers.py:237 ../src/tooltips.py:192 msgid "Free for Chat" msgstr "Вільний для балачки" -#: ../src/common/helpers.py:233 +#: ../src/common/helpers.py:240 msgid "?user status:_Available" msgstr "?стан користувача:_Доступний" -#: ../src/common/helpers.py:235 ../src/tooltips.py:189 +#: ../src/common/helpers.py:242 ../src/tooltips.py:190 msgid "?user status:Available" msgstr "?стан користувача:Доступний" -#: ../src/common/helpers.py:237 +#: ../src/common/helpers.py:244 msgid "Connecting" msgstr "Виконується з'єднання" -#: ../src/common/helpers.py:240 +#: ../src/common/helpers.py:247 msgid "A_way" msgstr "В_ідійшов" -#: ../src/common/helpers.py:245 +#: ../src/common/helpers.py:252 msgid "_Offline" msgstr "_Поза мережею" -#: ../src/common/helpers.py:247 ../src/tooltips.py:199 +#: ../src/common/helpers.py:254 ../src/tooltips.py:200 msgid "Offline" msgstr "Поза мережею" -#: ../src/common/helpers.py:250 +#: ../src/common/helpers.py:257 msgid "_Invisible" msgstr "_Невидимий" -#: ../src/common/helpers.py:252 +#: ../src/common/helpers.py:259 msgid "Invisible" msgstr "Невидимка" -#: ../src/common/helpers.py:256 +#: ../src/common/helpers.py:263 msgid "?contact has status:Unknown" msgstr "?стан контакту:Невідомий" -#: ../src/common/helpers.py:258 +#: ../src/common/helpers.py:265 msgid "?contact has status:Has errors" msgstr "?стан контакту:З помилками" -#: ../src/common/helpers.py:263 +#: ../src/common/helpers.py:270 msgid "?Subscription we already have:None" msgstr "?Підписка яку ми вже маємо:Жодної" -#: ../src/common/helpers.py:265 +#: ../src/common/helpers.py:272 msgid "To" msgstr "До" -#: ../src/common/helpers.py:267 +#: ../src/common/helpers.py:274 msgid "From" msgstr "Від" -#: ../src/common/helpers.py:269 +#: ../src/common/helpers.py:276 msgid "Both" msgstr "Обидва" -#: ../src/common/helpers.py:277 +#: ../src/common/helpers.py:284 msgid "?Ask (for Subscription):None" msgstr "?Запит (на підписку):Немає" -#: ../src/common/helpers.py:279 +#: ../src/common/helpers.py:286 msgid "Subscribe" msgstr "Підписатися" -#: ../src/common/helpers.py:288 +#: ../src/common/helpers.py:295 msgid "?Group Chat Contact Role:None" msgstr "?Роль у груповій балачці:Немає" -#: ../src/common/helpers.py:291 +#: ../src/common/helpers.py:298 msgid "Moderators" msgstr "Модератори" -#: ../src/common/helpers.py:293 +#: ../src/common/helpers.py:300 msgid "Moderator" msgstr "Модератор" -#: ../src/common/helpers.py:296 +#: ../src/common/helpers.py:303 msgid "Participants" msgstr "Учасники" -#: ../src/common/helpers.py:298 +#: ../src/common/helpers.py:305 msgid "Participant" msgstr "Учасник" -#: ../src/common/helpers.py:301 +#: ../src/common/helpers.py:308 msgid "Visitors" msgstr "Відвідувачі" -#: ../src/common/helpers.py:303 +#: ../src/common/helpers.py:310 msgid "Visitor" msgstr "Відвідувач" -#: ../src/common/helpers.py:309 ../src/tooltips.py:210 +#: ../src/common/helpers.py:316 ../src/tooltips.py:211 msgid "?Group Chat Contact Affiliation:None" msgstr "?Членство контакту у груповій балачці:Жодного" -#: ../src/common/helpers.py:311 ../src/tooltips.py:216 +#: ../src/common/helpers.py:318 ../src/tooltips.py:217 msgid "Owner" msgstr "Власник" -#: ../src/common/helpers.py:313 ../src/tooltips.py:214 +#: ../src/common/helpers.py:320 ../src/tooltips.py:215 msgid "Administrator" msgstr "Адміністратор" -#: ../src/common/helpers.py:315 ../src/tooltips.py:212 +#: ../src/common/helpers.py:322 ../src/tooltips.py:213 msgid "Member" msgstr "Учасник" -#: ../src/common/helpers.py:354 +#: ../src/common/helpers.py:361 msgid "is paying attention to the conversation" msgstr "спілкується" -#: ../src/common/helpers.py:356 +#: ../src/common/helpers.py:363 msgid "is doing something else" msgstr "робить щось інше" -#: ../src/common/helpers.py:358 +#: ../src/common/helpers.py:365 msgid "is composing a message..." msgstr "пише повідомлення..." #. paused means he or she was composing but has stopped for a while -#: ../src/common/helpers.py:361 +#: ../src/common/helpers.py:368 msgid "paused composing a message" msgstr "призупинив (призупинила) створення повідомлення" -#: ../src/common/helpers.py:363 +#: ../src/common/helpers.py:370 msgid "has closed the chat window or tab" msgstr "закрив (закрила) вікно або вкладку балачки" #. GiB means gibibyte -#: ../src/common/helpers.py:628 +#: ../src/common/helpers.py:648 #, python-format msgid "%s GiB" msgstr "%s ГіБ" #. GB means gigabyte -#: ../src/common/helpers.py:631 +#: ../src/common/helpers.py:651 #, python-format msgid "%s GB" msgstr "%s ГБ" #. MiB means mibibyte -#: ../src/common/helpers.py:635 +#: ../src/common/helpers.py:655 #, python-format msgid "%s MiB" msgstr "%s МіБ" #. MB means megabyte -#: ../src/common/helpers.py:638 +#: ../src/common/helpers.py:658 #, python-format msgid "%s MB" msgstr "%s МБ" #. KiB means kibibyte -#: ../src/common/helpers.py:642 +#: ../src/common/helpers.py:662 #, python-format msgid "%s KiB" msgstr "%s кіБ" #. KB means kilo bytes -#: ../src/common/helpers.py:645 +#: ../src/common/helpers.py:665 #, python-format msgid "%s KB" msgstr "%s кБ" #. B means bytes -#: ../src/common/helpers.py:648 +#: ../src/common/helpers.py:668 #, python-format msgid "%s B" msgstr "%s Б" -#: ../src/common/helpers.py:1099 ../src/common/helpers.py:1106 +#: ../src/common/helpers.py:1119 ../src/common/helpers.py:1126 #, python-format msgid "%d message pending" msgid_plural "%d messages pending" @@ -5522,22 +5851,22 @@ msgstr[0] "у черзі %d повідомлення" msgstr[1] "у черзі %d повідомлення" msgstr[2] "у черзі %d повідомлень" -#: ../src/common/helpers.py:1112 +#: ../src/common/helpers.py:1132 #, python-format msgid " from room %s" msgstr " з кімнати %s" -#: ../src/common/helpers.py:1115 ../src/common/helpers.py:1132 +#: ../src/common/helpers.py:1135 ../src/common/helpers.py:1152 #, python-format msgid " from user %s" msgstr " від користувача %s" -#: ../src/common/helpers.py:1117 +#: ../src/common/helpers.py:1137 #, python-format msgid " from %s" msgstr " від %s" -#: ../src/common/helpers.py:1124 ../src/common/helpers.py:1130 +#: ../src/common/helpers.py:1144 ../src/common/helpers.py:1150 #, python-format msgid "%d event pending" msgid_plural "%d events pending" @@ -5545,21 +5874,38 @@ msgstr[0] "у черзі %d подія" msgstr[1] "у черзі %d події" msgstr[2] "у черзі %d подій" -#: ../src/common/helpers.py:1162 +#: ../src/common/helpers.py:1182 #, python-format msgid "Gajim - %s" msgstr "Gajim - %s" -#: ../src/common/helpers.py:1341 +#: ../src/common/helpers.py:1361 msgid "Hello, I am $name." msgstr "Привіт, я $name." -#: ../src/common/jingle_rtp.py:107 +#: ../src/common/helpers.py:1471 ../src/common/helpers.py:1480 +#: ../src/common/helpers.py:1534 +msgid "Timeout loading image" +msgstr "Перевищення часу очікування під час завантаження зображення" + +#: ../src/common/helpers.py:1490 ../src/common/helpers.py:1532 +msgid "Image is too big" +msgstr "Зображення є завеликим" + +#: ../src/common/helpers.py:1500 +msgid "PyCURL is not installed" +msgstr "PyCURL не встановлено" + +#: ../src/common/helpers.py:1536 +msgid "Error loading image" +msgstr "Помилка завантаження зображення" + +#: ../src/common/jingle_rtp.py:109 #, python-format msgid "%s configuration error" msgstr "%s помилка конфігурації" -#: ../src/common/jingle_rtp.py:108 +#: ../src/common/jingle_rtp.py:110 #, python-format msgid "" "Couldn't setup %s. Check your configuration.\n" @@ -5578,11 +5924,11 @@ msgstr "" "Помилка:\n" "%s" -#: ../src/common/jingle_rtp.py:205 +#: ../src/common/jingle_rtp.py:208 msgid "GStreamer error" msgstr "Помилка GStreamer" -#: ../src/common/jingle_rtp.py:206 +#: ../src/common/jingle_rtp.py:208 #, python-format msgid "" "Error: %s\n" @@ -5591,19 +5937,19 @@ msgstr "" "Повідомлення про помилку: %s\n" "Відлагодження: %s" -#: ../src/common/jingle_rtp.py:335 +#: ../src/common/jingle_rtp.py:338 msgid "audio input" msgstr "аудіо вхід" -#: ../src/common/jingle_rtp.py:338 +#: ../src/common/jingle_rtp.py:341 msgid "audio output" msgstr "аудіо вихід" -#: ../src/common/jingle_rtp.py:381 +#: ../src/common/jingle_rtp.py:384 msgid "video input" msgstr "відео вхід" -#: ../src/common/jingle_rtp.py:390 +#: ../src/common/jingle_rtp.py:393 msgid "video output" msgstr "відео вихід" @@ -6370,7 +6716,7 @@ msgstr "" "[Це частина шифрованого сеансу. Якщо ви бачите це повідомлення, сталася " "якась помилка.]" -#: ../src/common/zeroconf/connection_zeroconf.py:192 +#: ../src/common/zeroconf/connection_zeroconf.py:193 msgid "Avahi error" msgstr "Помилка Avahi" @@ -6383,46 +6729,46 @@ msgstr "" "%s\n" "Обмін локальними повідомленнями може працювати з помилками." -#: ../src/common/zeroconf/connection_zeroconf.py:205 +#: ../src/common/zeroconf/connection_zeroconf.py:206 msgid "Please check if Avahi or Bonjour is installed." msgstr "Будь ласка, переконайтеся, що встановлено Avahi або Bonjour." -#: ../src/common/zeroconf/connection_zeroconf.py:215 -#: ../src/common/zeroconf/connection_zeroconf.py:219 +#: ../src/common/zeroconf/connection_zeroconf.py:216 +#: ../src/common/zeroconf/connection_zeroconf.py:220 msgid "Could not start local service" msgstr "Не вдалося запустити локальну службу" -#: ../src/common/zeroconf/connection_zeroconf.py:216 +#: ../src/common/zeroconf/connection_zeroconf.py:217 #, python-format msgid "Unable to bind to port %d." msgstr "Не вдалося прив’язатися до порту %d." -#: ../src/common/zeroconf/connection_zeroconf.py:220 -#: ../src/common/zeroconf/connection_zeroconf.py:304 -#: ../src/common/zeroconf/connection_zeroconf.py:317 -#: ../src/common/zeroconf/connection_zeroconf.py:333 +#: ../src/common/zeroconf/connection_zeroconf.py:221 +#: ../src/common/zeroconf/connection_zeroconf.py:305 +#: ../src/common/zeroconf/connection_zeroconf.py:318 +#: ../src/common/zeroconf/connection_zeroconf.py:334 msgid "Please check if avahi-daemon is running." msgstr "Будь ласка, переконайтеся, що запущено фонову службу avahi." -#: ../src/common/zeroconf/connection_zeroconf.py:303 -#: ../src/common/zeroconf/connection_zeroconf.py:316 -#: ../src/common/zeroconf/connection_zeroconf.py:332 +#: ../src/common/zeroconf/connection_zeroconf.py:304 +#: ../src/common/zeroconf/connection_zeroconf.py:317 +#: ../src/common/zeroconf/connection_zeroconf.py:333 #, python-format msgid "Could not change status of account \"%s\"" msgstr "Не вдалося змінити стан облікового запису «%s»" -#: ../src/common/zeroconf/connection_zeroconf.py:351 -#: ../src/common/zeroconf/connection_zeroconf.py:390 +#: ../src/common/zeroconf/connection_zeroconf.py:352 +#: ../src/common/zeroconf/connection_zeroconf.py:392 msgid "Your message could not be sent." msgstr "Ваше повідомлення неможливо надіслати." -#: ../src/common/zeroconf/connection_zeroconf.py:365 -#: ../src/common/zeroconf/connection_zeroconf.py:404 +#: ../src/common/zeroconf/connection_zeroconf.py:366 +#: ../src/common/zeroconf/connection_zeroconf.py:406 msgid "Contact is offline. Your message could not be sent." msgstr "" "Контакт перебуває поза мережею. Ваше повідомлення не може бути надіслано." -#: ../src/common/zeroconf/connection_zeroconf.py:431 +#: ../src/common/zeroconf/connection_zeroconf.py:433 msgid "" "Connection to host could not be established: Timeout while sending data." msgstr "" @@ -6435,24 +6781,24 @@ msgstr "" msgid "Error while adding service. %s" msgstr "Помилка під час додавання служби. %s" -#: ../src/config.py:406 +#: ../src/config.py:407 msgid "Default Message" msgstr "Типове повідомлення" -#: ../src/config.py:415 +#: ../src/config.py:416 msgid "Enabled" msgstr "Увімкнено" -#: ../src/config.py:468 ../src/config.py:472 ../src/config.py:3115 +#: ../src/config.py:469 ../src/config.py:473 ../src/config.py:3159 msgid "Default" msgstr "Типовий" -#: ../src/config.py:746 ../src/dialogs.py:1493 +#: ../src/config.py:757 ../src/dialogs.py:1493 #, python-format msgid "Dictionary for lang %s not available" msgstr "Словники для мови %s не доступні" -#: ../src/config.py:747 +#: ../src/config.py:758 #, python-format msgid "" "You have to install %s dictionary to use spellchecking, or choose another " @@ -6461,76 +6807,76 @@ msgstr "" "Ви маєте встановити словники %s для використання перевірки орфографії, або " "обрати іншу мову через параметр speller_language." -#: ../src/config.py:1223 +#: ../src/config.py:1238 msgid "status message title" msgstr "заголовок повідомлення про стан" -#: ../src/config.py:1223 +#: ../src/config.py:1238 msgid "status message text" msgstr "текст повідомлення про стан" #. Name column -#: ../src/config.py:1523 ../src/dialogs.py:2529 ../src/dialogs.py:2596 -#: ../src/dialogs.py:3388 ../src/disco.py:886 ../src/disco.py:1744 -#: ../src/disco.py:2046 ../src/history_window.py:90 +#: ../src/config.py:1566 ../src/dialogs.py:2536 ../src/dialogs.py:2603 +#: ../src/dialogs.py:3395 ../src/disco.py:886 ../src/disco.py:1744 +#: ../src/disco.py:2046 ../src/history_window.py:91 msgid "Name" msgstr "Назва" -#: ../src/config.py:1618 +#: ../src/config.py:1661 msgid "Relogin now?" msgstr "Повторно увійти зараз?" -#: ../src/config.py:1619 +#: ../src/config.py:1662 msgid "If you want all the changes to apply instantly, you must relogin." msgstr "" "Якщо ви бажаєте, щоб всі зміни негайно набули чинності, вам слід вийти з " "облікового запису, а потім знову туди увійти." -#: ../src/config.py:1773 ../src/config.py:1906 +#: ../src/config.py:1816 ../src/config.py:1949 msgid "OpenPGP is not usable on this computer" msgstr "На цьому комп'ютері OpenPGP не придатне для використання" -#: ../src/config.py:1946 ../src/config.py:1993 +#: ../src/config.py:1989 ../src/config.py:2036 msgid "Unread events" msgstr "Непрочитані події" -#: ../src/config.py:1947 +#: ../src/config.py:1990 msgid "Read all pending events before removing this account." msgstr "" "Перш ніж вилучати цей обліковий запис, прочитайте усі повідомлення з черги " "подій." -#: ../src/config.py:1976 +#: ../src/config.py:2019 #, python-format msgid "You have opened chat in account %s" msgstr "Ви розпочали балачку за допомогою облікового запису %s" -#: ../src/config.py:1977 +#: ../src/config.py:2020 msgid "All chat and groupchat windows will be closed. Do you want to continue?" msgstr "" "Всі вікна балачок і групових балачок буде закрито. Бажаєте продовжити " "процедуру виходу?" -#: ../src/config.py:1989 ../src/config.py:2531 ../src/config.py:2567 +#: ../src/config.py:2032 ../src/config.py:2574 ../src/config.py:2611 msgid "You are currently connected to the server" msgstr "Зараз ваш клієнт з’єднано з сервером" -#: ../src/config.py:1990 +#: ../src/config.py:2033 msgid "To change the account name, you must be disconnected." msgstr "" "Для зміни назви облікового запису вам слід від’єднати клієнт від сервера." -#: ../src/config.py:1994 +#: ../src/config.py:2037 msgid "To change the account name, you must read all pending events." msgstr "" "Для зміни назви облікового запису вам слід прочитати усі повідомлення з " "черги подій." -#: ../src/config.py:2000 +#: ../src/config.py:2043 msgid "Account Name Already Used" msgstr "Така назва облікового запису вже використовується" -#: ../src/config.py:2001 +#: ../src/config.py:2044 msgid "" "This name is already used by another of your accounts. Please choose another " "name." @@ -6538,148 +6884,148 @@ msgstr "" "Ви вже створили обліковий запис з такою назвою. Будь ласка, оберіть іншу " "назву." -#: ../src/config.py:2005 ../src/config.py:2009 +#: ../src/config.py:2048 ../src/config.py:2052 msgid "Invalid account name" msgstr "Некоректна назва облікового запису" -#: ../src/config.py:2006 +#: ../src/config.py:2049 msgid "Account name cannot be empty." msgstr "Назва облікового запису не може бути порожньою." -#: ../src/config.py:2010 +#: ../src/config.py:2053 msgid "Account name cannot contain spaces." msgstr "Назва облікового запису не може містити пробіли." -#: ../src/config.py:2087 +#: ../src/config.py:2130 msgid "Rename Account" msgstr "Перейменувати запис" -#: ../src/config.py:2088 +#: ../src/config.py:2131 #, python-format msgid "Enter a new name for account %s" msgstr "Введіть нову назву для облікового запису %s" -#: ../src/config.py:2116 +#: ../src/config.py:2159 msgid "A Jabber ID must be in the form \"user@servername\"." msgstr "Ідентифікатор Jabber слід вказувати як «користувач@назва.сервера»." -#: ../src/config.py:2339 ../src/config.py:3665 +#: ../src/config.py:2382 ../src/config.py:3709 msgid "Invalid entry" msgstr "Некоректний запис" -#: ../src/config.py:2340 ../src/config.py:3666 +#: ../src/config.py:2383 ../src/config.py:3710 msgid "Custom port must be a port number." msgstr "Нетиповий порти слід вказувати у вигляді номера." -#: ../src/config.py:2361 +#: ../src/config.py:2404 msgid "Failed to get secret keys" msgstr "Спроба отримання закритих ключів завершилася невдало" -#: ../src/config.py:2362 +#: ../src/config.py:2405 msgid "There is no OpenPGP secret key available." msgstr "Немає доступних закритих ключів OpenPGP." -#: ../src/config.py:2396 +#: ../src/config.py:2439 msgid "OpenPGP Key Selection" msgstr "Вибір ключа OpenPGP" -#: ../src/config.py:2397 +#: ../src/config.py:2440 msgid "Choose your OpenPGP key" msgstr "Оберіть свій ключ OpenPGP" -#: ../src/config.py:2404 +#: ../src/config.py:2447 msgid "No such account available" msgstr "Вказаний обліковий запис недоступний" -#: ../src/config.py:2405 +#: ../src/config.py:2448 msgid "You must create your account before editing your personal information." msgstr "" "Вам слід створити обліковий запис, перш ніж розпочати редагування ваших " "особистих відомостей." -#: ../src/config.py:2412 ../src/dialogs.py:2281 ../src/dialogs.py:2518 -#: ../src/dialogs.py:2706 ../src/disco.py:515 ../src/profile_window.py:361 +#: ../src/config.py:2455 ../src/dialogs.py:2287 ../src/dialogs.py:2525 +#: ../src/dialogs.py:2713 ../src/disco.py:515 ../src/profile_window.py:361 msgid "You are not connected to the server" msgstr "Ваш комп’ютер не з’єднано з сервером" -#: ../src/config.py:2413 +#: ../src/config.py:2456 msgid "Without a connection, you can not edit your personal information." msgstr "Без з’єднання ви не зможете редагувати ваші особисті відомості." -#: ../src/config.py:2417 +#: ../src/config.py:2460 msgid "Your server doesn't support Vcard" msgstr "Ваш сервер не підтримує Vcard" -#: ../src/config.py:2418 +#: ../src/config.py:2461 msgid "Your server can't save your personal information." msgstr "Ваш сервер не може зберігати ваші особисті відомості." -#: ../src/config.py:2532 ../src/config.py:2568 +#: ../src/config.py:2575 ../src/config.py:2612 msgid "To disable the account, you must be disconnected." msgstr "" "Для відключення облікового запису вам слід від’єднати клієнт від сервера." -#: ../src/config.py:2537 +#: ../src/config.py:2581 msgid "Account Local already exists." msgstr "Обліковий запис Local вже існує." -#: ../src/config.py:2538 +#: ../src/config.py:2582 msgid "Please rename or remove it before enabling link-local messaging." msgstr "" "Будь ласка, перейменуйте або вилучіть його, перш ніж вмикати локальні " "повідомлення." -#: ../src/config.py:2695 +#: ../src/config.py:2739 #, python-format msgid "Edit %s" msgstr "Редагувати %s" -#: ../src/config.py:2697 +#: ../src/config.py:2741 #, python-format msgid "Register to %s" msgstr "Зареєструватися на %s" #. list at the beginning -#: ../src/config.py:2733 +#: ../src/config.py:2777 msgid "Ban List" msgstr "Список заборон" -#: ../src/config.py:2734 +#: ../src/config.py:2778 msgid "Member List" msgstr "Список учасників" -#: ../src/config.py:2734 +#: ../src/config.py:2778 msgid "Owner List" msgstr "Список власників" -#: ../src/config.py:2735 +#: ../src/config.py:2779 msgid "Administrator List" msgstr "Список адміністраторів" #. Address column #. holds JID (who said this) -#: ../src/config.py:2799 ../src/disco.py:893 ../src/history_manager.py:207 +#: ../src/config.py:2843 ../src/disco.py:893 ../src/history_manager.py:207 msgid "JID" msgstr "JID" -#: ../src/config.py:2809 +#: ../src/config.py:2853 msgid "Reason" msgstr "Підстава" -#: ../src/config.py:2816 +#: ../src/config.py:2860 msgid "Nick" msgstr "Прізвисько" -#: ../src/config.py:2822 +#: ../src/config.py:2866 msgid "Role" msgstr "Роль" -#: ../src/config.py:2849 +#: ../src/config.py:2893 msgid "Banning..." msgstr "Блокування..." #. You can move '\n' before user@domain if that line is TOO BIG -#: ../src/config.py:2851 +#: ../src/config.py:2895 msgid "" "<b>Whom do you want to ban?</b>\n" "\n" @@ -6687,11 +7033,11 @@ msgstr "" "<b>Кого ви бажаєте заблокувати?</b>\n" "\n" -#: ../src/config.py:2853 +#: ../src/config.py:2897 msgid "Adding Member..." msgstr "Додавання учасника..." -#: ../src/config.py:2854 +#: ../src/config.py:2898 msgid "" "<b>Whom do you want to make a member?</b>\n" "\n" @@ -6699,11 +7045,11 @@ msgstr "" "<b>Кому ви бажаєте надати можливість участі?</b>\n" "\n" -#: ../src/config.py:2856 +#: ../src/config.py:2900 msgid "Adding Owner..." msgstr "Додавання власника..." -#: ../src/config.py:2857 +#: ../src/config.py:2901 msgid "" "<b>Whom do you want to make an owner?</b>\n" "\n" @@ -6711,11 +7057,11 @@ msgstr "" "<b>Кого ви бажаєте зробити власником?</b>\n" "\n" -#: ../src/config.py:2859 +#: ../src/config.py:2903 msgid "Adding Administrator..." msgstr "Додавання адміністратора..." -#: ../src/config.py:2860 +#: ../src/config.py:2904 msgid "" "<b>Whom do you want to make an administrator?</b>\n" "\n" @@ -6723,7 +7069,7 @@ msgstr "" "<b>Кого ви бажаєте зробити адміністратором?</b>\n" "\n" -#: ../src/config.py:2861 +#: ../src/config.py:2905 msgid "" "Can be one of the following:\n" "1. user@domain/resource (only that resource matches).\n" @@ -6739,108 +7085,103 @@ msgstr "" "4. домен (пошук лише домену: записів користувач@домен,\n" "домен/ресурс або адреси, що містить піддомен)." -#: ../src/config.py:2962 +#: ../src/config.py:3006 #, python-format msgid "Removing %s account" msgstr "Вилучення облікового запису %s" -#: ../src/config.py:2977 +#: ../src/config.py:3021 msgid "Account is disabled" msgstr "Обліковий запис вимкнено" -#: ../src/config.py:2978 +#: ../src/config.py:3022 msgid "To unregister from a server, account must be enabled." msgstr "Щоб зняти реєстрацію з серверу, обліковий запис має бути активним." -#: ../src/config.py:2991 ../src/gui_interface.py:278 -#: ../src/gui_interface.py:696 +#: ../src/config.py:3035 ../src/gui_interface.py:283 +#: ../src/gui_interface.py:701 msgid "Password Required" msgstr "Слід ввести пароль" -#: ../src/config.py:2992 ../src/gui_interface.py:676 +#: ../src/config.py:3036 ../src/gui_interface.py:681 #, python-format msgid "Enter your password for account %s" msgstr "Введіть ваш пароль для облікового запису %s" -#: ../src/config.py:2993 ../src/gui_interface.py:696 +#: ../src/config.py:3037 ../src/gui_interface.py:701 msgid "Save password" msgstr "Зберегти пароль" -#: ../src/config.py:3003 +#: ../src/config.py:3047 #, python-format msgid "Account \"%s\" is connected to the server" msgstr "Обліковий запис «%s» з’єднано з сервером" -#: ../src/config.py:3004 +#: ../src/config.py:3048 msgid "If you remove it, the connection will be lost." msgstr "Якщо ви вилучите його, з’єднання буде розірвано." -#: ../src/config.py:3018 +#: ../src/config.py:3062 #, python-format msgid "Connection to server %s failed" msgstr "Спроба встановити з'єднання з сервером %s завершилася невдало" -#: ../src/config.py:3019 +#: ../src/config.py:3063 msgid "What would you like to do?" msgstr "Що ви хочете зробити?" -#: ../src/config.py:3020 +#: ../src/config.py:3064 msgid "Remove only from Gajim" msgstr "Вилучити _лише з Gajim" -#: ../src/config.py:3021 +#: ../src/config.py:3065 msgid "Don't remove anything. I'll try again later" msgstr "Не видаляти нічого. Я спробую пізніше ще раз." -#: ../src/config.py:3115 +#: ../src/config.py:3159 msgid "?print_status:All" msgstr "Всі" -#: ../src/config.py:3116 +#: ../src/config.py:3160 msgid "Enter and leave only" msgstr "Лише вхід і вихід" -#: ../src/config.py:3117 +#: ../src/config.py:3161 msgid "?print_status:None" msgstr "Жодного" -#: ../src/config.py:3189 +#: ../src/config.py:3233 msgid "New Group Chat" msgstr "Створити групову балачку" -#: ../src/config.py:3222 +#: ../src/config.py:3266 msgid "This bookmark has invalid data" msgstr "У цій закладці містяться некоректні дані" -#: ../src/config.py:3223 +#: ../src/config.py:3267 msgid "" "Please be sure to fill out server and room fields or remove this bookmark." msgstr "Будь ласка, заповніть поля сервера і кімнати або вилучіть цю закладку." -#. invalid char -#: ../src/config.py:3348 ../src/dialogs.py:2070 -msgid "Invalid nickname" -msgstr "Некоректний псевдонім" - -#: ../src/config.py:3349 ../src/config.py:3360 ../src/config.py:3369 -#: ../src/config.py:3380 ../src/config.py:3388 +#: ../src/config.py:3393 ../src/config.py:3404 ../src/config.py:3413 +#: ../src/config.py:3424 ../src/config.py:3432 msgid "Character not allowed" msgstr "Заборонений символ" -#: ../src/config.py:3360 ../src/config.py:3368 ../src/config.py:3380 -#: ../src/config.py:3641 +#: ../src/config.py:3404 ../src/config.py:3412 ../src/config.py:3424 +#: ../src/config.py:3685 msgid "Invalid server" msgstr "Некоректний сервер" -#: ../src/config.py:3387 +#: ../src/config.py:3431 msgid "Invalid room" msgstr "Некоректна кімната" -#: ../src/config.py:3557 +#: ../src/config.py:3601 msgid "Account has been added successfully" msgstr "Обліковий запис було успішно додано" -#: ../src/config.py:3558 ../src/config.py:3564 +#: ../src/config.py:3602 ../src/config.py:3608 msgid "" "You can set advanced account options by pressing the Advanced button, or " "later by choosing the Accounts menu item under the Edit menu from the main " @@ -6850,35 +7191,35 @@ msgstr "" "«Додатково». Пізніше ви можете виконати ті самі дії з налаштування вибором " "пункту «Облікові записи» у меню «Правка» головного вікна програми." -#: ../src/config.py:3563 +#: ../src/config.py:3607 msgid "Your new account has been created successfully" msgstr "Ваш новий обліковий запис було успішно створено" -#: ../src/config.py:3602 +#: ../src/config.py:3646 msgid "Invalid username" msgstr "Некоректне ім’я користувача" -#: ../src/config.py:3604 +#: ../src/config.py:3648 msgid "You must provide a username to configure this account." msgstr "" "Щоб налаштувати цей обліковий запис, вам слід вказати ім’я користувача." -#: ../src/config.py:3642 +#: ../src/config.py:3686 msgid "Please provide a server on which you want to register." msgstr "" "Будь ласка, вкажіть назву сервера, на якому ви бажаєте зареєструватися." -#: ../src/config.py:3698 ../src/gui_interface.py:1174 +#: ../src/config.py:3742 ../src/gui_interface.py:1203 msgid "Certificate Already in File" msgstr "Сертифікат вже наявний у файлі" -#: ../src/config.py:3699 ../src/gui_interface.py:1175 +#: ../src/config.py:3743 ../src/gui_interface.py:1204 #, python-format msgid "This certificate is already in file %s, so it's not added again." msgstr "" "Цей сертифікат вже існує у файлі %s, програма не буде додавати його ще раз." -#: ../src/config.py:3786 +#: ../src/config.py:3831 #, python-format msgid "" "<b>Security Warning</b>\n" @@ -6893,7 +7234,7 @@ msgstr "" "Помилка SSL: %(error)s\n" "Ви все ще бажаєте з’єднатися з цим сервером?" -#: ../src/config.py:3792 ../src/gui_interface.py:1203 +#: ../src/config.py:3837 ../src/gui_interface.py:1232 #, python-format msgid "" "Add this certificate to the list of trusted certificates.\n" @@ -6904,73 +7245,73 @@ msgstr "" "Відбиток SHA1 сертифіката:\n" "%s" -#: ../src/config.py:3824 ../src/config.py:3858 +#: ../src/config.py:3869 ../src/config.py:3903 msgid "An error occurred during account creation" msgstr "Під час спроби створення облікового запису сталася помилка" -#: ../src/config.py:3923 +#: ../src/config.py:3968 msgid "Account name is in use" msgstr "Цю назву облікового запису вже використано" -#: ../src/config.py:3924 +#: ../src/config.py:3969 msgid "You already have an account using this name." msgstr "У вас вже є обліковий запис з такою назвою." -#: ../src/config.py:4054 +#: ../src/config.py:4099 msgid "PEP node was not removed" msgstr "Вузол повідомлення про стан було вилучено" -#: ../src/config.py:4055 +#: ../src/config.py:4100 #, python-format msgid "PEP node %(node)s was not removed: %(message)s" msgstr "Вузол повідомлення про стан %(node)s було вилучено: %(message)s" -#: ../src/config.py:4083 +#: ../src/config.py:4128 #, python-format msgid "Configure %s" msgstr "Налаштувати %s" -#: ../src/config.py:4099 ../src/plugins/gui.py:73 +#: ../src/config.py:4144 ../src/plugins/gui.py:74 msgid "Active" msgstr "Активний" -#: ../src/config.py:4107 +#: ../src/config.py:4152 msgid "Event" msgstr "Подія" -#: ../src/config.py:4142 +#: ../src/config.py:4187 msgid "First Message Received" msgstr "Перше отримане повідомлення" -#: ../src/config.py:4143 +#: ../src/config.py:4188 msgid "Next Message Received Focused" msgstr "Фокус на наступне отримане повідомлення" -#: ../src/config.py:4145 +#: ../src/config.py:4190 msgid "Next Message Received Unfocused" msgstr "Зняття фокусу з наступного отриманого повідомлення" -#: ../src/config.py:4146 +#: ../src/config.py:4191 msgid "Contact Connected" msgstr "Контакт з'єднано" -#: ../src/config.py:4147 +#: ../src/config.py:4192 msgid "Contact Disconnected" msgstr "Контакт від'єднано" -#: ../src/config.py:4148 +#: ../src/config.py:4193 msgid "Message Sent" msgstr "Повідомлення надіслано" -#: ../src/config.py:4149 +#: ../src/config.py:4194 msgid "Group Chat Message Highlight" msgstr "Виділення повідомлення групової балачки" -#: ../src/config.py:4150 +#: ../src/config.py:4195 msgid "Group Chat Message Received" msgstr "Отримано повідомлення групової балачки" -#: ../src/config.py:4151 +#: ../src/config.py:4196 msgid "GMail Email Received" msgstr "Отримано електронного листа GMail " @@ -7038,7 +7379,7 @@ msgstr[1] "%(nb_days)i днi тому" msgstr[2] "%(nb_days)i днiв тому" #. if we have subject, show it too! -#: ../src/conversation_textview.py:1368 ../src/history_window.py:480 +#: ../src/conversation_textview.py:1368 ../src/history_window.py:481 #, python-format msgid "Subject: %s\n" msgstr "Тема: %s\n" @@ -7164,7 +7505,7 @@ msgid "Please fill in the data of the contact you want to add" msgstr "Будь ласка, вкажіть дані контакту, який ви бажаєте додати" #: ../src/dialogs.py:1074 ../src/dialogs.py:1080 ../src/dialogs.py:1085 -#: ../src/dialogs.py:3621 +#: ../src/dialogs.py:3628 msgid "Invalid User ID" msgstr "Некоректний ідентифікатор користувача" @@ -7238,116 +7579,116 @@ msgstr "" "\n" "Можливість підсвічування неправильно написаних слів буде поки що вимкнено" -#: ../src/dialogs.py:1872 +#: ../src/dialogs.py:1877 msgid "_Resume" msgstr "_Продовжити" -#: ../src/dialogs.py:1880 +#: ../src/dialogs.py:1885 msgid "Re_place" msgstr "За_мінити" -#: ../src/dialogs.py:2071 ../src/dialogs.py:2470 +#: ../src/dialogs.py:2076 ../src/dialogs.py:2477 msgid "The nickname has not allowed characters." msgstr "У псевдонімі є недозволені символи." -#: ../src/dialogs.py:2189 +#: ../src/dialogs.py:2195 #, python-format msgid "Subscription request for account %(account)s from %(jid)s" msgstr "Запит на підписку до облікового запису %(account)s від %(jid)s" -#: ../src/dialogs.py:2192 +#: ../src/dialogs.py:2198 #, python-format msgid "Subscription request from %s" msgstr "Запит на підписку від %s" -#: ../src/dialogs.py:2276 ../src/gui_interface.py:1925 +#: ../src/dialogs.py:2282 ../src/gui_interface.py:1959 #, python-format msgid "You are already in group chat %s" msgstr "Ви вже берете участь у груповій балачці %s" -#: ../src/dialogs.py:2282 +#: ../src/dialogs.py:2288 msgid "You can not join a group chat unless you are connected." msgstr "" "Вам слід з’єднати ваш обліковий запис, щоб взяти участь у груповій балачці." -#: ../src/dialogs.py:2326 +#: ../src/dialogs.py:2332 #, python-format msgid "Join Group Chat with account %s" msgstr "Приєднатися до групової балачки з облікового запису %s" -#: ../src/dialogs.py:2457 +#: ../src/dialogs.py:2463 msgid "Invalid Account" msgstr "Некоректний обліковий запис" -#: ../src/dialogs.py:2458 +#: ../src/dialogs.py:2464 msgid "" "You have to choose an account from which you want to join the groupchat." msgstr "" "Ви маєте обрати обліковий запис, з якого ви бажаєте приєднатись до групової " "балачки." -#: ../src/dialogs.py:2469 +#: ../src/dialogs.py:2476 msgid "Invalid Nickname" msgstr "Некоректний псевдонім" -#: ../src/dialogs.py:2474 ../src/dialogs.py:2480 -#: ../src/groupchat_control.py:2090 +#: ../src/dialogs.py:2481 ../src/dialogs.py:2487 +#: ../src/groupchat_control.py:2092 msgid "Invalid group chat Jabber ID" msgstr "Некоректний ідентифікатор Jabber групової балачки" -#: ../src/dialogs.py:2475 +#: ../src/dialogs.py:2482 msgid "Please enter the group chat Jabber ID as room@server." msgstr "" "Будь ласка, вкажіть Jabber ID групової балачки у вигляді кімната@сервер." -#: ../src/dialogs.py:2481 ../src/groupchat_control.py:2091 +#: ../src/dialogs.py:2488 ../src/groupchat_control.py:2093 msgid "The group chat Jabber ID has not allowed characters." msgstr "" "У ідентифікаторі Jabber групової балачки містяться недозволені символи." -#: ../src/dialogs.py:2486 ../src/gui_interface.py:1907 +#: ../src/dialogs.py:2493 ../src/gui_interface.py:1941 msgid "This is not a group chat" msgstr "Це не групова балачка" -#: ../src/dialogs.py:2487 ../src/gui_interface.py:1908 +#: ../src/dialogs.py:2494 ../src/gui_interface.py:1942 #, python-format msgid "%s is not the name of a group chat." msgstr "%s не є назвою групової балачки." -#: ../src/dialogs.py:2519 +#: ../src/dialogs.py:2526 msgid "Without a connection, you can not synchronise your contacts." msgstr "" "Для синхронізації ваших контактів потрібно встановити з’єднання облікового " "запису з сервером." -#: ../src/dialogs.py:2532 +#: ../src/dialogs.py:2539 msgid "Server" msgstr "Сервер" -#: ../src/dialogs.py:2568 +#: ../src/dialogs.py:2575 msgid "This account is not connected to the server" msgstr "Цей обліковий запис не з’єднано з сервером" -#: ../src/dialogs.py:2569 +#: ../src/dialogs.py:2576 msgid "You cannot synchronize with an account unless it is connected." msgstr "" "Можливістю синхронізації можна скористатися, лише якщо обліковий запис " "з’єднано з сервером." -#: ../src/dialogs.py:2594 +#: ../src/dialogs.py:2601 msgid "Synchronise" msgstr "Синхронізувати" -#: ../src/dialogs.py:2655 +#: ../src/dialogs.py:2662 #, python-format msgid "Start Chat with account %s" msgstr "Почати балачку з облікового запису %s" -#: ../src/dialogs.py:2657 +#: ../src/dialogs.py:2664 msgid "Start Chat" msgstr "Почати балачку" -#: ../src/dialogs.py:2658 +#: ../src/dialogs.py:2665 msgid "" "Fill in the nickname or the Jabber ID of the contact you would like\n" "to send a chat message to:" @@ -7356,137 +7697,137 @@ msgstr "" "бажаєте надіслати повідомлення балачки:" #. if offline or connecting -#: ../src/dialogs.py:2685 ../src/dialogs.py:3066 ../src/dialogs.py:3301 +#: ../src/dialogs.py:2692 ../src/dialogs.py:3073 ../src/dialogs.py:3308 msgid "Connection not available" msgstr "З’єднання недоступне" -#: ../src/dialogs.py:2686 ../src/dialogs.py:3067 ../src/dialogs.py:3302 +#: ../src/dialogs.py:2693 ../src/dialogs.py:3074 ../src/dialogs.py:3309 #, python-format msgid "Please make sure you are connected with \"%s\"." msgstr "Будь ласка, переконайтеся, що клієнт з’єднано з «%s»." -#: ../src/dialogs.py:2695 ../src/dialogs.py:2698 +#: ../src/dialogs.py:2702 ../src/dialogs.py:2705 msgid "Invalid JID" msgstr "Некоректний JID" -#: ../src/dialogs.py:2698 +#: ../src/dialogs.py:2705 #, python-format msgid "Unable to parse \"%s\"." msgstr "Не вдалося обробити «%s»." -#: ../src/dialogs.py:2707 +#: ../src/dialogs.py:2714 msgid "Without a connection, you can not change your password." msgstr "До встановлення з’єднання ви не зможете змінити ваш пароль." -#: ../src/dialogs.py:2726 +#: ../src/dialogs.py:2733 msgid "Invalid password" msgstr "Некоректний пароль" -#: ../src/dialogs.py:2726 +#: ../src/dialogs.py:2733 msgid "You must enter a password." msgstr "Вам слід ввести пароль." -#: ../src/dialogs.py:2730 +#: ../src/dialogs.py:2737 msgid "Passwords do not match" msgstr "Паролі не збігаються" -#: ../src/dialogs.py:2731 +#: ../src/dialogs.py:2738 msgid "The passwords typed in both fields must be identical." msgstr "Паролі, введені у обидва поля, мають бути тотожними." -#: ../src/dialogs.py:2773 ../src/gui_interface.py:813 ../src/notify.py:277 +#: ../src/dialogs.py:2780 ../src/gui_interface.py:842 ../src/notify.py:273 msgid "New E-mail" msgstr "Нове повідомлення електронної пошти" -#: ../src/dialogs.py:2775 ../src/gui_interface.py:868 ../src/notify.py:270 +#: ../src/dialogs.py:2782 ../src/gui_interface.py:897 ../src/notify.py:266 msgid "File Transfer Request" msgstr "Запит на передавання файла" -#: ../src/dialogs.py:2777 ../src/gui_interface.py:775 -#: ../src/gui_interface.py:839 ../src/notify.py:272 +#: ../src/dialogs.py:2784 ../src/gui_interface.py:804 +#: ../src/gui_interface.py:868 ../src/notify.py:268 msgid "File Transfer Error" msgstr "Помилка під час передавання файла" -#: ../src/dialogs.py:2779 ../src/gui_interface.py:914 -#: ../src/gui_interface.py:937 ../src/gui_interface.py:954 -#: ../src/notify.py:274 +#: ../src/dialogs.py:2786 ../src/gui_interface.py:943 +#: ../src/gui_interface.py:966 ../src/gui_interface.py:983 +#: ../src/notify.py:270 msgid "File Transfer Completed" msgstr "Завершення передавання файла" -#: ../src/dialogs.py:2780 ../src/gui_interface.py:917 ../src/notify.py:275 +#: ../src/dialogs.py:2787 ../src/gui_interface.py:946 ../src/notify.py:271 msgid "File Transfer Stopped" msgstr "Зупинка передавання файла" -#: ../src/dialogs.py:2782 ../src/gui_interface.py:609 ../src/notify.py:279 +#: ../src/dialogs.py:2789 ../src/gui_interface.py:614 ../src/notify.py:275 msgid "Groupchat Invitation" msgstr "Запрошення до групової балачки" -#: ../src/dialogs.py:2985 +#: ../src/dialogs.py:2992 #, python-format msgid "Single Message using account %s" msgstr "Окреме повідомлення з використанням облікового запису %s" -#: ../src/dialogs.py:2987 +#: ../src/dialogs.py:2994 #, python-format msgid "Single Message in account %s" msgstr "Окреме повідомлення для облікового запису %s" -#: ../src/dialogs.py:2989 +#: ../src/dialogs.py:2996 msgid "Single Message" msgstr "Окреме повідомлення" #. prepare UI for Sending -#: ../src/dialogs.py:2992 +#: ../src/dialogs.py:2999 #, python-format msgid "Send %s" msgstr "Надіслати %s" #. prepare UI for Receiving -#: ../src/dialogs.py:3015 +#: ../src/dialogs.py:3022 #, python-format msgid "Received %s" msgstr "Отримано %s" #. prepare UI for Receiving -#: ../src/dialogs.py:3038 +#: ../src/dialogs.py:3045 #, python-format msgid "Form %s" msgstr "Форма %s" #. we create a new blank window to send and we preset RE: and to jid -#: ../src/dialogs.py:3122 +#: ../src/dialogs.py:3129 #, python-format msgid "RE: %s" msgstr "Відповідь: %s" -#: ../src/dialogs.py:3123 +#: ../src/dialogs.py:3130 #, python-format msgid "%s wrote:\n" msgstr "%s написав(-ла):\n" -#: ../src/dialogs.py:3182 +#: ../src/dialogs.py:3189 #, python-format msgid "XML Console for %s" msgstr "Консоль XML для %s" -#: ../src/dialogs.py:3184 +#: ../src/dialogs.py:3191 msgid "XML Console" msgstr "Консоль XML" #. Action that can be done with an incoming list of contacts -#: ../src/dialogs.py:3331 +#: ../src/dialogs.py:3338 msgid "add" msgstr "додати" -#: ../src/dialogs.py:3331 +#: ../src/dialogs.py:3338 msgid "modify" msgstr "змінити" -#: ../src/dialogs.py:3332 +#: ../src/dialogs.py:3339 msgid "remove" msgstr "вилучити" -#: ../src/dialogs.py:3361 +#: ../src/dialogs.py:3368 #, python-format msgid "" "<b>%(jid)s</b> would like you to <b>%(action)s</b> some contacts in your " @@ -7495,182 +7836,172 @@ msgstr "" "<b>%(jid)s</b> бажає <b>%(action)s</b> кілька контактів у вашому реєстрі." #. Change label for accept_button to action name instead of 'OK'. -#: ../src/dialogs.py:3377 ../src/dialogs.py:3423 -msgid "Add" -msgstr "Додати" - -#. Change label for accept_button to action name instead of 'OK'. -#: ../src/dialogs.py:3379 ../src/dialogs.py:3454 +#: ../src/dialogs.py:3386 ../src/dialogs.py:3461 msgid "Modify" msgstr "Змінити" -#. Change label for accept_button to action name instead of 'OK'. -#: ../src/dialogs.py:3381 ../src/dialogs.py:3478 -msgid "Delete" -msgstr "Вилучити" - -#: ../src/dialogs.py:3385 +#: ../src/dialogs.py:3392 msgid "Jabber ID" msgstr "Jabber ID:" -#: ../src/dialogs.py:3391 +#: ../src/dialogs.py:3398 msgid "Groups" msgstr "Групи" #. it is selected #. remote_jid = model[iter_][1].decode('utf-8') -#: ../src/dialogs.py:3499 +#: ../src/dialogs.py:3506 #, python-format msgid "%s suggested me to add you in my roster." msgstr "%s підказав мені додати вас до мого реєстру." -#: ../src/dialogs.py:3513 +#: ../src/dialogs.py:3520 #, python-format msgid "Added %s contacts" msgstr "Додано %s контактів" -#: ../src/dialogs.py:3550 +#: ../src/dialogs.py:3557 #, python-format msgid "Removed %s contacts" msgstr "Вилучено %s контактів" -#: ../src/dialogs.py:3590 ../src/dialogs.py:3767 +#: ../src/dialogs.py:3597 ../src/dialogs.py:3774 #, python-format msgid "Archiving Preferences for %s" msgstr "Архівація налаштувань для %s" -#: ../src/dialogs.py:3630 +#: ../src/dialogs.py:3637 msgid "Invalid expire value" msgstr "Некоректне значення застарівання" -#: ../src/dialogs.py:3631 +#: ../src/dialogs.py:3638 msgid "Expire must be a valid positive integer." msgstr "Час застарівання має бути дійсним додатним цілим числом." -#: ../src/dialogs.py:3678 +#: ../src/dialogs.py:3685 msgid "There is an error with the form" msgstr "Це помилка з формою" -#: ../src/dialogs.py:3898 +#: ../src/dialogs.py:3905 msgid "There is an error" msgstr "Це помилка" -#: ../src/dialogs.py:3966 +#: ../src/dialogs.py:3973 #, python-format msgid "Privacy List <b><i>%s</i></b>" msgstr "Списки конфіденційності <b><i>%s</i></b>" -#: ../src/dialogs.py:3970 +#: ../src/dialogs.py:3977 #, python-format msgid "Privacy List for %s" msgstr "Списки приватності для %s" -#: ../src/dialogs.py:4037 +#: ../src/dialogs.py:4044 #, python-format msgid "Order: %(order)s, action: %(action)s, type: %(type)s, value: %(value)s" msgstr "" "Порядок: %(order)s, дія: %(action)s, тип: %(type)s, значення: %(value)s" -#: ../src/dialogs.py:4042 +#: ../src/dialogs.py:4049 #, python-format msgid "Order: %(order)s, action: %(action)s" msgstr "Порядок: %(order)s, дія: %(action)s" -#: ../src/dialogs.py:4093 +#: ../src/dialogs.py:4100 msgid "<b>Edit a rule</b>" msgstr "<b>Редагувати правило</b>" -#: ../src/dialogs.py:4204 +#: ../src/dialogs.py:4211 msgid "<b>Add a rule</b>" msgstr "<b>Додати правило</b>" -#: ../src/dialogs.py:4303 +#: ../src/dialogs.py:4310 #, python-format msgid "Privacy Lists for %s" msgstr "Списки приватності для %s" -#: ../src/dialogs.py:4305 +#: ../src/dialogs.py:4312 msgid "Privacy Lists" msgstr "Списки конфіденційності" -#: ../src/dialogs.py:4394 +#: ../src/dialogs.py:4401 msgid "Invalid List Name" msgstr "Некоректна назва списку" -#: ../src/dialogs.py:4395 +#: ../src/dialogs.py:4402 msgid "You must enter a name to create a privacy list." msgstr "Для створення списку конфіденційності вам слід ввести його назву." -#: ../src/dialogs.py:4427 +#: ../src/dialogs.py:4434 msgid "You are invited to a groupchat" msgstr "Вас запрошено до групової балачки" -#: ../src/dialogs.py:4430 +#: ../src/dialogs.py:4437 msgid "$Contact has invited you to join a discussion" msgstr "$Contact запросив вас до участі у обговоренні" -#: ../src/dialogs.py:4432 +#: ../src/dialogs.py:4439 #, python-format msgid "$Contact has invited you to group chat %(room_jid)s" msgstr "$Contact запросив вас до групової балачки %(room_jid)s" -#: ../src/dialogs.py:4440 +#: ../src/dialogs.py:4447 #, python-format msgid "Comment: %s" msgstr "Коментар: %s" -#: ../src/dialogs.py:4442 +#: ../src/dialogs.py:4449 msgid "Do you want to accept the invitation?" msgstr "Чи бажаєте ви прийняти це запрошення?" -#: ../src/dialogs.py:4504 +#: ../src/dialogs.py:4511 msgid "Choose Client Cert #PCKS12" msgstr "Оберіть клієнтський сертифікат PCKS#12" -#: ../src/dialogs.py:4514 ../src/dialogs.py:4556 ../src/dialogs.py:4612 -#: ../src/dialogs.py:4700 +#: ../src/dialogs.py:4521 ../src/dialogs.py:4563 ../src/dialogs.py:4619 +#: ../src/dialogs.py:4707 msgid "All files" msgstr "Всі файли" -#: ../src/dialogs.py:4519 +#: ../src/dialogs.py:4526 msgid "PKCS12 Files" msgstr "Файли PKCS12" -#: ../src/dialogs.py:4546 +#: ../src/dialogs.py:4553 msgid "Choose Sound" msgstr "Обрати звук" -#: ../src/dialogs.py:4561 +#: ../src/dialogs.py:4568 msgid "Wav Sounds" msgstr "Звуки wav" -#: ../src/dialogs.py:4599 +#: ../src/dialogs.py:4606 msgid "Choose Image" msgstr "Вибрати зображення" -#: ../src/dialogs.py:4617 +#: ../src/dialogs.py:4624 msgid "Images" msgstr "Зображення" -#: ../src/dialogs.py:4687 +#: ../src/dialogs.py:4694 msgid "Choose Archive" msgstr "Вибрати архів" -#: ../src/dialogs.py:4705 +#: ../src/dialogs.py:4712 msgid "Zip files" msgstr "Файли ZIP" -#: ../src/dialogs.py:4731 +#: ../src/dialogs.py:4738 #, python-format msgid "When %s becomes:" msgstr "Якщо %s стане рівним:" -#: ../src/dialogs.py:4733 +#: ../src/dialogs.py:4740 #, python-format msgid "Adding Special Notification for %s" msgstr "Додавання особливого сповіщення для %s" -#: ../src/dialogs.py:4953 +#: ../src/dialogs.py:4960 #, python-format msgid "" "Your chat session with <b>%(jid)s</b> is encrypted.\n" @@ -7681,19 +8012,19 @@ msgstr "" "\n" "Коротким рядком розпізнавання (SAS) цього сеансу є <b>%(sas)s</b>." -#: ../src/dialogs.py:4956 +#: ../src/dialogs.py:4963 msgid "You have already verified this contact's identity." msgstr "Ви вже перевіряли особу контакту." -#: ../src/dialogs.py:4962 ../src/dialogs.py:5046 +#: ../src/dialogs.py:4969 ../src/dialogs.py:5053 msgid "Contact's identity verified" msgstr "Особу контакту перевірено" -#: ../src/dialogs.py:4968 +#: ../src/dialogs.py:4975 msgid "Verify again..." msgstr "Повторити перевірку..." -#: ../src/dialogs.py:4973 +#: ../src/dialogs.py:4980 msgid "" "To be certain that <b>only</b> the expected person can read your messages or " "send you messages, you need to verify their identity by clicking the button " @@ -7703,19 +8034,19 @@ msgstr "" "бажана особа, і що ця лише ця особа матиме змогу надсилати вам повідомлення, " "вам слід підтвердити їх ідентичність натисканням кнопки, розташованої нижче." -#: ../src/dialogs.py:4976 ../src/dialogs.py:5027 ../src/dialogs.py:5040 +#: ../src/dialogs.py:4983 ../src/dialogs.py:5034 ../src/dialogs.py:5047 msgid "Contact's identity NOT verified" msgstr "Особу контакту НЕ перевірено" -#: ../src/dialogs.py:4981 +#: ../src/dialogs.py:4988 msgid "Verify..." msgstr "Перевірити..." -#: ../src/dialogs.py:4992 +#: ../src/dialogs.py:4999 msgid "Have you verified the contact's identity?" msgstr "Чи перевірили ви особу контакту?" -#: ../src/dialogs.py:4993 +#: ../src/dialogs.py:5000 #, python-format msgid "" "To prevent talking to an unknown person, you should speak to <b>%(jid)s</b> " @@ -7730,24 +8061,24 @@ msgstr "" "\n" "Коротким рядком розпізнавання у цьому сеансі буде <b>%(sas)s</b>." -#: ../src/dialogs.py:4994 +#: ../src/dialogs.py:5001 msgid "Did you talk to the remote contact and verify the SAS?" msgstr "Ви зв’язалися з контактом і перевірили SAS?" -#: ../src/dialogs.py:5028 +#: ../src/dialogs.py:5035 #, python-format msgid "The contact's key (%s) <b>does not match</b> the key assigned in Gajim." msgstr "" "Ключ контакту (%s) <b>не збігається</b> з ключем, призначеним для нього у " "Gajim." -#: ../src/dialogs.py:5034 +#: ../src/dialogs.py:5041 msgid "No GPG key is assigned to this contact. So you cannot encrypt messages." msgstr "" "З цим контактом не пов’язано жодних ключів GPG. Отже шифрування повідомлень " "буде неможливим." -#: ../src/dialogs.py:5041 +#: ../src/dialogs.py:5048 msgid "" "GPG key is assigned to this contact, but <b>you do not trust his key</b>, so " "message <b>cannot</b> be encrypted. Use your GPG client to trust this key." @@ -7756,7 +8087,7 @@ msgstr "" "b>, отже повідомлення <b>не може</b> бути зашифрованим. Для того, щоб " "встановити надійність цього ключа, скористайтесь вашим клієнтом GPG." -#: ../src/dialogs.py:5047 +#: ../src/dialogs.py:5054 msgid "" "GPG Key is assigned to this contact, and you trust his key, so messages will " "be encrypted." @@ -7764,19 +8095,19 @@ msgstr "" "З цим контактом пов’язано ключ GPG, ви вважаєте цей ключ надійним, отже " "повідомлення буде зашифровано." -#: ../src/dialogs.py:5112 +#: ../src/dialogs.py:5119 msgid "an audio and video" msgstr "аудіо та відео" -#: ../src/dialogs.py:5114 +#: ../src/dialogs.py:5121 msgid "an audio" msgstr "аудіо" -#: ../src/dialogs.py:5116 +#: ../src/dialogs.py:5123 msgid "a video" msgstr "відео" -#: ../src/dialogs.py:5120 +#: ../src/dialogs.py:5127 #, python-format msgid "" "%(contact)s wants to start %(type)s session with you. Do you want to answer " @@ -7785,12 +8116,12 @@ msgstr "" "%(contact)s бажають розпочати %(type)s розмову з вами. Ви бажаєте відповісти " "на запит?" -#: ../src/dialogs.py:5188 +#: ../src/dialogs.py:5195 #, python-format msgid "Certificate for account %s" msgstr "Сертифікат до облікового запису %s" -#: ../src/dialogs.py:5188 +#: ../src/dialogs.py:5195 #, python-format msgid "" "<b>Issued to:</b>\n" @@ -7829,7 +8160,7 @@ msgstr "" "<b>Відбито:</b>\n" "SHA1 Відбиток: %(sha1)s" -#: ../src/dialogs.py:5222 ../src/dialogs.py:5239 +#: ../src/dialogs.py:5229 ../src/dialogs.py:5246 msgid "View cert..." msgstr "Перегляд сертифікату..." @@ -7921,20 +8252,20 @@ msgstr "Опис" msgid "Id" msgstr "Ідентифікатор" -#: ../src/disco.py:1835 ../src/gui_interface.py:2443 +#: ../src/disco.py:1835 ../src/gui_interface.py:2477 msgid "Bookmark already set" msgstr "Закладку вже встановлено" -#: ../src/disco.py:1836 ../src/gui_interface.py:2444 +#: ../src/disco.py:1836 ../src/gui_interface.py:2478 #, python-format msgid "Group Chat \"%s\" is already in your bookmarks." msgstr "Закладка на груповій балачці «%s» вже існує." -#: ../src/disco.py:1845 ../src/gui_interface.py:2458 +#: ../src/disco.py:1845 ../src/gui_interface.py:2492 msgid "Bookmark has been added successfully" msgstr "Закладку було успішно додано" -#: ../src/disco.py:1846 ../src/gui_interface.py:2459 +#: ../src/disco.py:1846 ../src/gui_interface.py:2493 msgid "You can manage your bookmarks via Actions menu in your roster." msgstr "" "Керувати вашими закладками можна за допомогою меню дій у вашому реєстрі." @@ -7971,8 +8302,8 @@ msgstr "" "безпеку з’єднання." #: ../src/features_window.py:52 ../src/features_window.py:53 -msgid "Requires python-pyopenssl." -msgstr "Потрібен python-pyopenssl." +msgid "Requires python-pyopenssl > 0.12 and pyasn1." +msgstr "Потрібен python-pyopenssl > 0.12 та pyasn1." #: ../src/features_window.py:54 msgid "Bonjour / Zeroconf" @@ -7989,8 +8320,11 @@ msgid "Requires python-avahi." msgstr "Потрібен python-avahi." #: ../src/features_window.py:57 -msgid "Requires pybonjour (http://o2s.csail.mit.edu/o2s-wiki/pybonjour)." -msgstr "Потрібен pybonjour (http://o2s.csail.mit.edu/o2s-wiki/pybonjour)." +msgid "" +"Requires pybonjour and bonjour SDK running (http://developer.apple.com/" +"opensource/)." +msgstr "" +"Вимагає pybonjour та bonjour SDK (http://developer.apple.com/opensource/)." #: ../src/features_window.py:58 msgid "Command line" @@ -8006,9 +8340,8 @@ msgstr "Потрібен python-dbus." #: ../src/features_window.py:61 ../src/features_window.py:69 #: ../src/features_window.py:73 ../src/features_window.py:77 -#: ../src/features_window.py:85 ../src/features_window.py:89 -#: ../src/features_window.py:109 ../src/features_window.py:113 -#: ../src/features_window.py:117 +#: ../src/features_window.py:89 ../src/features_window.py:109 +#: ../src/features_window.py:113 ../src/features_window.py:117 msgid "Feature not available under Windows." msgstr "Цією можливістю не можна скористатися у Windows." @@ -8094,6 +8427,10 @@ msgstr "Перевірка правопису повідомлень, які в msgid "Requires libgtkspell." msgstr "Потрібна бібліотека libgtkspell." +#: ../src/features_window.py:85 +msgid "Requires libgtkspell and libenchant." +msgstr "Потрібна бібліотека libgtkspell та libenchant." + #: ../src/features_window.py:86 msgid "Notification" msgstr "Сповіщення" @@ -8235,139 +8572,124 @@ msgstr "Час" msgid "Progress" msgstr "Поступ" -#: ../src/filetransfers_window.py:178 ../src/filetransfers_window.py:234 +#: ../src/filetransfers_window.py:178 ../src/filetransfers_window.py:235 #, python-format msgid "Filename: %s" msgstr "Назва файла: %s" -#: ../src/filetransfers_window.py:179 ../src/filetransfers_window.py:333 +#: ../src/filetransfers_window.py:180 ../src/filetransfers_window.py:400 #, python-format msgid "Size: %s" msgstr "Розмір: %s" #. You is a reply of who sent a file #. You is a reply of who received a file -#: ../src/filetransfers_window.py:188 ../src/filetransfers_window.py:198 +#: ../src/filetransfers_window.py:189 ../src/filetransfers_window.py:199 #: ../src/history_manager.py:541 msgid "You" msgstr "Ви" -#: ../src/filetransfers_window.py:189 +#: ../src/filetransfers_window.py:190 #, python-format msgid "Sender: %s" msgstr "Відправник: %s" -#: ../src/filetransfers_window.py:190 ../src/filetransfers_window.py:627 -#: ../src/tooltips.py:742 +#: ../src/filetransfers_window.py:191 ../src/filetransfers_window.py:637 +#: ../src/tooltips.py:743 msgid "Recipient: " msgstr "Отримувач:" -#: ../src/filetransfers_window.py:201 +#: ../src/filetransfers_window.py:202 #, python-format msgid "Saved in: %s" msgstr "Збережено за адресою: %s" -#: ../src/filetransfers_window.py:203 -msgid "File transfer completed" -msgstr "Передавання файла завершено" - -#: ../src/filetransfers_window.py:218 ../src/filetransfers_window.py:225 -msgid "File transfer cancelled" -msgstr "Передавання файла скасовано" - -#: ../src/filetransfers_window.py:218 ../src/filetransfers_window.py:226 -msgid "Connection with peer cannot be established." -msgstr "Не вдалося встановити з’єднання з вузлом." - -#: ../src/filetransfers_window.py:235 +#: ../src/filetransfers_window.py:237 #, python-format msgid "Recipient: %s" msgstr "Отримувач: %s" -#: ../src/filetransfers_window.py:237 +#: ../src/filetransfers_window.py:239 #, python-format msgid "Error message: %s" msgstr "Повідомлення про помилку: %s" -#: ../src/filetransfers_window.py:238 -msgid "File transfer stopped" -msgstr "Зупинка передавання файла" - -#: ../src/filetransfers_window.py:266 +#: ../src/filetransfers_window.py:268 msgid "Choose File to Send..." msgstr "Вибрати файл для надсилання..." -#: ../src/filetransfers_window.py:282 ../src/tooltips.py:780 +#: ../src/filetransfers_window.py:284 ../src/tooltips.py:781 msgid "Description: " msgstr "Опис: " -#: ../src/filetransfers_window.py:295 +#: ../src/filetransfers_window.py:297 msgid "Gajim cannot access this file" msgstr "Gajim не може отримати доступу до цього файла" -#: ../src/filetransfers_window.py:296 +#: ../src/filetransfers_window.py:298 msgid "This file is being used by another process." msgstr "Цей файл використовується іншим процесом." -#: ../src/filetransfers_window.py:330 -#, python-format -msgid "File: %s" -msgstr "Файл: %s" - -#: ../src/filetransfers_window.py:336 -#, python-format -msgid "Type: %s" -msgstr "Тип: %s" - -#: ../src/filetransfers_window.py:338 -#, python-format -msgid "Description: %s" -msgstr "Опис: %s" - -#: ../src/filetransfers_window.py:339 -#, python-format -msgid "%s wants to send you a file:" -msgstr "%s бажає надіслати вам файл:" - -#: ../src/filetransfers_window.py:352 ../src/gtkgui_helpers.py:850 +#: ../src/filetransfers_window.py:336 ../src/gtkgui_helpers.py:850 #, python-format msgid "Cannot overwrite existing file \"%s\"" msgstr "Не вдалося перезаписати існуючий файл «%s»" -#: ../src/filetransfers_window.py:353 ../src/gtkgui_helpers.py:851 +#: ../src/filetransfers_window.py:337 ../src/gtkgui_helpers.py:851 msgid "" "A file with this name already exists and you do not have permission to " "overwrite it." msgstr "" "Файл з такою назвою вже існує, у вас немає дозволів для його перезапису." -#: ../src/filetransfers_window.py:369 ../src/gtkgui_helpers.py:855 +#: ../src/filetransfers_window.py:354 ../src/gtkgui_helpers.py:855 msgid "This file already exists" msgstr "Файл з такою назвою вже існує." -#: ../src/filetransfers_window.py:369 ../src/gtkgui_helpers.py:855 +#: ../src/filetransfers_window.py:354 ../src/gtkgui_helpers.py:855 msgid "What do you want to do?" msgstr "Що ви хочете зробити?" -#. read-only bit is used to mark special folder under windows, -#. not to mark that a folder is read-only. See ticket #3587 -#: ../src/filetransfers_window.py:379 ../src/gtkgui_helpers.py:862 +#. read-only bit is used to mark special folder under +#. windows, not to mark that a folder is read-only. +#. See ticket #3587 +#: ../src/filetransfers_window.py:365 ../src/gtkgui_helpers.py:862 #, python-format msgid "Directory \"%s\" is not writable" msgstr "Запис до каталогу «%s» неможливий" -#: ../src/filetransfers_window.py:379 ../src/gtkgui_helpers.py:863 +#: ../src/filetransfers_window.py:366 ../src/gtkgui_helpers.py:863 msgid "You do not have permission to create files in this directory." msgstr "Ваш користувач не має права на створення файлів у цьому каталозі." -#: ../src/filetransfers_window.py:389 +#: ../src/filetransfers_window.py:377 msgid "Save File as..." msgstr "Зберегти файл як..." +#: ../src/filetransfers_window.py:397 +#, python-format +msgid "File: %s" +msgstr "Файл: %s" + +#: ../src/filetransfers_window.py:403 +#, python-format +msgid "Type: %s" +msgstr "Тип: %s" + +#: ../src/filetransfers_window.py:405 +#, python-format +msgid "Description: %s" +msgstr "Опис: %s" + +#: ../src/filetransfers_window.py:406 +#, python-format +msgid "%s wants to send you a file:" +msgstr "%s бажає надіслати вам файл:" + #. Print remaining time in format 00:00:00 #. You can change the places of (hours), (minutes), (seconds) - #. they are not translatable. -#: ../src/filetransfers_window.py:459 +#: ../src/filetransfers_window.py:469 #, python-format msgid "%(hours)02.d:%(minutes)02.d:%(seconds)02.d" msgstr "%(hours)02.d:%(minutes)02.d:%(seconds)02.d" @@ -8375,68 +8697,68 @@ msgstr "%(hours)02.d:%(minutes)02.d:%(seconds)02.d" #. This should make the string Kb/s, #. where 'Kb' part is taken from %s. #. Only the 's' after / (which means second) should be translated. -#: ../src/filetransfers_window.py:552 +#: ../src/filetransfers_window.py:562 #, python-format msgid "(%(filesize_unit)s/s)" msgstr "(%(filesize_unit)s/s)" -#: ../src/filetransfers_window.py:595 ../src/filetransfers_window.py:598 +#: ../src/filetransfers_window.py:605 ../src/filetransfers_window.py:608 msgid "Invalid File" msgstr "Некоректний файл" -#: ../src/filetransfers_window.py:595 +#: ../src/filetransfers_window.py:605 msgid "File: " msgstr "Файл: " -#: ../src/filetransfers_window.py:599 +#: ../src/filetransfers_window.py:609 msgid "It is not possible to send empty files" msgstr "Надсилання порожніх файлів не передбачено" -#: ../src/filetransfers_window.py:623 ../src/tooltips.py:732 +#: ../src/filetransfers_window.py:633 ../src/tooltips.py:733 msgid "Name: " msgstr "Назва: " -#: ../src/filetransfers_window.py:625 ../src/tooltips.py:736 +#: ../src/filetransfers_window.py:635 ../src/tooltips.py:737 msgid "Sender: " msgstr "Відправник:" -#: ../src/filetransfers_window.py:787 +#: ../src/filetransfers_window.py:797 msgid "Pause" msgstr "Призупинити" -#: ../src/gajim.py:190 +#: ../src/gajim.py:194 msgid "Gajim needs X server to run. Quiting..." msgstr "Для роботи Gajim потрібен запущений сервер X. Завершення роботи..." -#: ../src/gajim.py:192 +#: ../src/gajim.py:196 #, python-format msgid "importing PyGTK failed: %s" msgstr "імпорт PyGTK не вдався: %s" -#: ../src/gajim.py:234 +#: ../src/gajim.py:237 msgid "Gajim needs PyGTK 2.16 or above" msgstr "Для роботи Gajim потрібен PyGTK 2.16 або новіша версія" -#: ../src/gajim.py:235 +#: ../src/gajim.py:238 msgid "Gajim needs PyGTK 2.16 or above to run. Quiting..." msgstr "" "Для запуску Gajim потрібен PyGTK 2.16 або новіша версія. Завершення роботи..." -#: ../src/gajim.py:237 +#: ../src/gajim.py:240 msgid "Gajim needs GTK 2.16 or above" msgstr "Для роботи Gajim потрібна бібліотека GTK 2.16 або новіша версія" -#: ../src/gajim.py:238 +#: ../src/gajim.py:241 msgid "Gajim needs GTK 2.16 or above to run. Quiting..." msgstr "" "Для запуску Gajim потрібна бібліотека GTK 2.16 або новіша версія. Завершення " "роботи..." -#: ../src/gajim.py:247 +#: ../src/gajim.py:250 msgid "Gajim needs pywin32 to run" msgstr "Для роботи Gajim потрібен pywin32" -#: ../src/gajim.py:248 +#: ../src/gajim.py:251 #, python-format msgid "" "Please make sure that Pywin32 is installed on your system. You can get it at " @@ -8446,11 +8768,11 @@ msgstr "" "Звантажити цю програму можна за адресою %s" #. set the icon to all newly opened wind -#: ../src/gajim.py:364 +#: ../src/gajim.py:367 msgid "Gajim is already running" msgstr "Gajim вже запущено" -#: ../src/gajim.py:365 +#: ../src/gajim.py:368 msgid "" "Another instance of Gajim seems to be running\n" "Run anyway?" @@ -9094,47 +9416,47 @@ msgstr "%s вийшов" msgid "%s has joined the group chat" msgstr "%s приєднався до групової балачки" -#: ../src/groupchat_control.py:2017 +#: ../src/groupchat_control.py:2019 #, python-format msgid "Are you sure you want to leave group chat \"%s\"?" msgstr "Ви справді бажаєте полишити групову балачку «%s»?" -#: ../src/groupchat_control.py:2019 +#: ../src/groupchat_control.py:2021 msgid "" "If you close this window, you will be disconnected from this group chat." msgstr "Якщо ви закриєте це вікно, вас буде від’єднано від групової балачки." -#: ../src/groupchat_control.py:2023 ../src/gui_interface.py:668 -#: ../src/gui_interface.py:1277 ../src/gui_interface.py:1317 -#: ../src/gui_interface.py:1358 ../src/message_window.py:224 -#: ../src/roster_window.py:2942 ../src/roster_window.py:3617 -#: ../src/roster_window.py:4386 +#: ../src/groupchat_control.py:2025 ../src/gui_interface.py:673 +#: ../src/gui_interface.py:1311 ../src/gui_interface.py:1351 +#: ../src/gui_interface.py:1392 ../src/message_window.py:224 +#: ../src/roster_window.py:2989 ../src/roster_window.py:3667 +#: ../src/roster_window.py:4473 msgid "_Do not ask me again" msgstr "Більше _не питати мене" -#: ../src/groupchat_control.py:2057 +#: ../src/groupchat_control.py:2059 msgid "Changing Subject" msgstr "Зміна теми" -#: ../src/groupchat_control.py:2058 +#: ../src/groupchat_control.py:2060 msgid "Please specify the new subject:" msgstr "Будь ласка, вкажіть нову тему:" -#: ../src/groupchat_control.py:2065 +#: ../src/groupchat_control.py:2067 msgid "Changing Nickname" msgstr "Зміна псевдоніма" -#: ../src/groupchat_control.py:2066 +#: ../src/groupchat_control.py:2068 msgid "Please specify the new nickname you want to use:" msgstr "Будь ласка, вкажіть новий псевдонім, яким ви бажаєте скористатися:" #. Ask for a reason -#: ../src/groupchat_control.py:2097 +#: ../src/groupchat_control.py:2099 #, python-format msgid "Destroying %s" msgstr "Знищення %s" -#: ../src/groupchat_control.py:2098 +#: ../src/groupchat_control.py:2100 msgid "" "You are going to definitively destroy this room.\n" "You may specify a reason below:" @@ -9142,22 +9464,22 @@ msgstr "" "Ви маєте намір знищити цю кімнату.\n" "Нижче ви можете вказати причину цього рішення:" -#: ../src/groupchat_control.py:2100 +#: ../src/groupchat_control.py:2102 msgid "You may also enter an alternate venue:" msgstr "Ви також можете вказати альтернативне місце зустрічі:" #. ask for reason -#: ../src/groupchat_control.py:2295 +#: ../src/groupchat_control.py:2297 #, python-format msgid "Kicking %s" msgstr "Викидання %s" -#: ../src/groupchat_control.py:2296 ../src/groupchat_control.py:2628 +#: ../src/groupchat_control.py:2298 ../src/groupchat_control.py:2630 msgid "You may specify a reason below:" msgstr "Нижче ви можете зазначити причину:" #. ask for reason -#: ../src/groupchat_control.py:2627 +#: ../src/groupchat_control.py:2629 #, python-format msgid "Banning %s" msgstr "Блокування %s" @@ -9233,14 +9555,14 @@ msgstr "Зберегти зображення як..." #. we are banned #. group chat does not exist -#: ../src/gui_interface.py:126 ../src/gui_interface.py:290 -#: ../src/gui_interface.py:299 ../src/gui_interface.py:305 -#: ../src/gui_interface.py:308 ../src/gui_interface.py:311 -#: ../src/gui_interface.py:316 +#: ../src/gui_interface.py:131 ../src/gui_interface.py:295 +#: ../src/gui_interface.py:304 ../src/gui_interface.py:310 +#: ../src/gui_interface.py:313 ../src/gui_interface.py:316 +#: ../src/gui_interface.py:321 msgid "Unable to join group chat" msgstr "Не вдалося приєднатися до групової балачки" -#: ../src/gui_interface.py:127 +#: ../src/gui_interface.py:132 #, python-format msgid "" "Your desired nickname in group chat %s is in use or registered by another " @@ -9251,89 +9573,89 @@ msgstr "" "використовує інший учасник.\n" "Будь ласка, вкажіть нижче інший псевдонім:" -#: ../src/gui_interface.py:130 +#: ../src/gui_interface.py:135 msgid "Always use this nickname when there is a conflict" msgstr "Завжди використовувати цей псевдонім при виникненні конфліктів." -#: ../src/gui_interface.py:147 +#: ../src/gui_interface.py:152 msgid "Do you accept this request?" msgstr "Чи приймаєте ви цей запит?" -#: ../src/gui_interface.py:149 +#: ../src/gui_interface.py:154 #, python-format msgid "Do you accept this request on account %s?" msgstr "Чи приймаєте ви запит щодо облікового запису %s?" -#: ../src/gui_interface.py:152 +#: ../src/gui_interface.py:157 #, python-format msgid "HTTP (%(method)s) Authorization for %(url)s (id: %(id)s)" msgstr "HTTP (%(method)s) уповноваження для %(url)s (ідентифікатор: %(id)s)" -#: ../src/gui_interface.py:195 ../src/notify.py:283 +#: ../src/gui_interface.py:200 ../src/notify.py:279 msgid "Connection Failed" msgstr "Спроба з’єднання завершилася невдало" -#: ../src/gui_interface.py:279 +#: ../src/gui_interface.py:284 #, python-format msgid "A Password is required to join the room %s. Please type it." msgstr "" "Для приєднання до кімнати %s потрібен пароль. Будь ласка, введіть його." -#: ../src/gui_interface.py:291 +#: ../src/gui_interface.py:296 #, python-format msgid "Maximum number of users for <b>%s</b> has been reached" msgstr "Максимальна кількість користувачів <b>%s</b> вже досягнута." -#: ../src/gui_interface.py:300 +#: ../src/gui_interface.py:305 #, python-format msgid "You are banned from group chat <b>%s</b>." msgstr "Вас заблокували у груповій балачці <b>%s</b>." -#: ../src/gui_interface.py:306 +#: ../src/gui_interface.py:311 #, python-format msgid "Group chat <b>%s</b> does not exist." msgstr "Групової балачки <b>%s</b> не існує." -#: ../src/gui_interface.py:309 +#: ../src/gui_interface.py:314 msgid "Group chat creation is restricted." msgstr "Можливість створення групових балачок обмежено." -#: ../src/gui_interface.py:312 +#: ../src/gui_interface.py:317 #, python-format msgid "Your registered nickname must be used in group chat <b>%s</b>." msgstr "" "Для групової балачки <b>%s</b> слід використовувати псевдонім, під яким ви " "зареєструвалися." -#: ../src/gui_interface.py:317 +#: ../src/gui_interface.py:322 #, python-format msgid "You are not in the members list in groupchat %s." msgstr "Вас немає у списку постійних учасників групової балачки %s." -#: ../src/gui_interface.py:400 ../src/gui_interface.py:404 +#: ../src/gui_interface.py:405 ../src/gui_interface.py:409 #, python-format msgid "Error %(code)s: %(msg)s" msgstr "Помилка %(code)s: %(msg)s" -#: ../src/gui_interface.py:456 ../src/notify.py:285 +#: ../src/gui_interface.py:461 ../src/notify.py:281 msgid "Subscription request" msgstr "Запит на підписку" -#: ../src/gui_interface.py:481 +#: ../src/gui_interface.py:486 msgid "Authorization accepted" msgstr "Уповноваження прийнято" -#: ../src/gui_interface.py:482 +#: ../src/gui_interface.py:487 #, python-format msgid "The contact \"%s\" has authorized you to see his or her status." msgstr "Контакт «%s» уповноважив вас на перегляд свого стану." -#: ../src/gui_interface.py:490 +#: ../src/gui_interface.py:495 #, python-format msgid "Contact \"%s\" removed subscription from you" msgstr "Контакт «%s» вилучив вашу підписку" -#: ../src/gui_interface.py:491 +#: ../src/gui_interface.py:496 msgid "" "You will always see him or her as offline.\n" "Do you want to remove him or her from your contact list?" @@ -9341,16 +9663,16 @@ msgstr "" "Цей контакт завжди буде показано зі станом «поза мережею».\n" "Бажаєте вилучити контакт з вашого списку контактів?" -#: ../src/gui_interface.py:512 ../src/notify.py:287 +#: ../src/gui_interface.py:517 ../src/notify.py:283 msgid "Unsubscribed" msgstr "_Непідписаний" -#: ../src/gui_interface.py:523 +#: ../src/gui_interface.py:528 #, python-format msgid "Contact with \"%s\" cannot be established" msgstr "Зв’язок з «%s» встановити не вдалося" -#: ../src/gui_interface.py:621 +#: ../src/gui_interface.py:626 msgid "" "You configured Gajim to use GPG agent, but there is no GPG agent running or " "it returned a wrong passphrase.\n" @@ -9358,32 +9680,32 @@ msgstr "" "Ви налаштували Gajim на використання агента GPG, але агент GPG не запущено " "або цей агент повернув помилковий пароль.\n" -#: ../src/gui_interface.py:623 ../src/gui_interface.py:631 +#: ../src/gui_interface.py:628 ../src/gui_interface.py:636 msgid "You are currently connected without your OpenPGP key." msgstr "Ви виконали з’єднання без вашого ключа OpenPGP." -#: ../src/gui_interface.py:625 +#: ../src/gui_interface.py:630 msgid "Your passphrase is incorrect" msgstr "Ваш пароль не є коректним" -#: ../src/gui_interface.py:630 +#: ../src/gui_interface.py:635 msgid "OpenGPG Passphrase Incorrect" msgstr "Ваш OpenPGP пароль не є коректним" -#: ../src/gui_interface.py:643 +#: ../src/gui_interface.py:648 msgid "Certificate Passphrase Required" msgstr "Потрібна кодова фраза для сертифікату" -#: ../src/gui_interface.py:644 +#: ../src/gui_interface.py:649 #, python-format msgid "Enter the passphrase for the certificate for account %s" msgstr "Введіть пароль ключа GPG для сертифікату від облікового запису %s" -#: ../src/gui_interface.py:666 +#: ../src/gui_interface.py:671 msgid "GPG key not trusted" msgstr "GPG непридатне для використання" -#: ../src/gui_interface.py:666 +#: ../src/gui_interface.py:671 msgid "" "The GPG key used to encrypt this chat is not trusted. Do you really want to " "encrypt this message?" @@ -9391,7 +9713,7 @@ msgstr "" "З цим контактом не пов’язано жодних ключів GPG. Отже шифрування повідомлень " "буде неможливим." -#: ../src/gui_interface.py:679 +#: ../src/gui_interface.py:684 msgid "" "Gnome Keyring is installed but not correctly started (environment variable " "probably not correctly set)" @@ -9399,12 +9721,24 @@ msgstr "" "Gnome Keyring встановлено, але не запущено належним чином (ймовірно, змінну " "середовища вказано неправильно)" -#: ../src/gui_interface.py:786 +#: ../src/gui_interface.py:722 +msgid "" +"Please copy / paste the refresh token from the website that has just been " +"opened." +msgstr "" +"Будь ласка, скопіюйте/вставте оновлений запис з веб-сторінки яка щойно " +"відкрилася." + +#: ../src/gui_interface.py:725 +msgid "Oauth2 Credentials" +msgstr "Облікові дані Oauth2" + +#: ../src/gui_interface.py:815 #, python-format msgid "New mail on %(gmail_mail_address)s" msgstr "Нові повідомлення у %(gmail_mail_address)s" -#: ../src/gui_interface.py:788 +#: ../src/gui_interface.py:817 #, python-format msgid "You have %d new mail conversation" msgid_plural "You have %d new mail conversations" @@ -9412,7 +9746,7 @@ msgstr[0] "Отримано %d новий лист" msgstr[1] "Отримано %d нових листи" msgstr[2] "Отримано %d нових листів" -#: ../src/gui_interface.py:801 +#: ../src/gui_interface.py:830 #, python-format msgid "" "\n" @@ -9427,60 +9761,52 @@ msgstr "" "Тема: %(subject)s\n" "%(snippet)s" -#: ../src/gui_interface.py:866 +#: ../src/gui_interface.py:895 #, python-format msgid "%s wants to send you a file." msgstr "%s бажає надіслати вам файл." -#: ../src/gui_interface.py:903 ../src/roster_window.py:1891 -msgid "Remote contact stopped transfer" -msgstr "Віддалений контакт зупинив передавання файлу" - -#: ../src/gui_interface.py:906 ../src/roster_window.py:1893 -msgid "Error opening file" -msgstr "Помилка під час спроби прочитати файл" - -#: ../src/gui_interface.py:938 +#: ../src/gui_interface.py:967 #, python-format msgid "You successfully received %(filename)s from %(name)s." msgstr "Ви успішно отримали %(filename)s від %(name)s." #. ft stopped -#: ../src/gui_interface.py:942 +#: ../src/gui_interface.py:971 #, python-format msgid "File transfer of %(filename)s from %(name)s stopped." msgstr "Передавання файлу·%(filename)s·від·%(name)s·зупинено." -#: ../src/gui_interface.py:955 +#: ../src/gui_interface.py:984 #, python-format msgid "You successfully sent %(filename)s to %(name)s." msgstr "Ви успішно надіслали %(filename)s до %(name)s." #. ft stopped -#: ../src/gui_interface.py:959 +#: ../src/gui_interface.py:988 #, python-format msgid "File transfer of %(filename)s to %(name)s stopped." msgstr "Надсилання файлу %(filename)s до %(name)s зупинено" -#: ../src/gui_interface.py:1034 +#: ../src/gui_interface.py:1063 msgid "Unable to decrypt message" msgstr "Не вдалося розшифрувати повідомлення" -#: ../src/gui_interface.py:1046 +#: ../src/gui_interface.py:1075 msgid "Username Conflict" msgstr "Конфлікт імен користувачів" -#: ../src/gui_interface.py:1047 +#: ../src/gui_interface.py:1076 msgid "Please type a new username for your local account" msgstr "" "Будь ласка, введіть нове ім'я користувача для вашого локального облікового " "запису" -#: ../src/gui_interface.py:1062 +#: ../src/gui_interface.py:1091 msgid "Resource Conflict" msgstr "Конфлікт ресурсів" -#: ../src/gui_interface.py:1063 +#: ../src/gui_interface.py:1092 msgid "" "You are already connected to this account with the same resource. Please " "type a new one" @@ -9489,20 +9815,20 @@ msgstr "" "ласка, вкажіть інший ресурс" #. TODO: we should use another pixmap ;-) -#: ../src/gui_interface.py:1108 +#: ../src/gui_interface.py:1137 #, python-format msgid "%s wants to start a voice chat." msgstr "%s бажає розпочати голосову розмову." -#: ../src/gui_interface.py:1111 +#: ../src/gui_interface.py:1140 msgid "Voice Chat Request" msgstr "Запит на голосову розмову" -#: ../src/gui_interface.py:1198 +#: ../src/gui_interface.py:1227 msgid "Error verifying SSL certificate" msgstr "Помилка під час перевірки сертифіката SSL" -#: ../src/gui_interface.py:1199 +#: ../src/gui_interface.py:1228 #, python-format msgid "" "There was an error verifying the SSL certificate of your jabber server: " @@ -9513,15 +9839,15 @@ msgstr "" "помилка: %(error)s\n" "Ви все ще маєте намір з’єднатися з сервером?" -#: ../src/gui_interface.py:1208 +#: ../src/gui_interface.py:1237 msgid "Ignore this error for this certificate." msgstr "Ігнорувати цю помилку для цього сертифіката." -#: ../src/gui_interface.py:1233 +#: ../src/gui_interface.py:1262 msgid "SSL certificate error" msgstr "Помилка сертифіката SSL" -#: ../src/gui_interface.py:1234 +#: ../src/gui_interface.py:1263 #, python-format msgid "" "It seems the SSL certificate of account %(account)s has changed or your " @@ -9538,28 +9864,34 @@ msgstr "" "\n" "Ви все ще маєте намір з’єднатися і оновити відбиток сертифіката?" -#: ../src/gui_interface.py:1270 ../src/gui_interface.py:1312 -#: ../src/gui_interface.py:1354 +#: ../src/gui_interface.py:1302 ../src/gui_interface.py:1346 +#: ../src/gui_interface.py:1388 msgid "Insecure connection" msgstr "Небезпечне з’єднання" -#: ../src/gui_interface.py:1271 +#: ../src/gui_interface.py:1303 #, python-format msgid "" "You are about to connect to the account %(account)s (%(server)s) with an " "insecure connection. This means all your conversations will be exchanged " -"unencrypted. Are you sure you want to do that?" +"unencrypted. This type of connection is really discouraged.\n" +"Are you sure you want to do that?" msgstr "" "Ви маєте намір надіслати з’єднатись з обліковим записом %(account)s " "(%(server)s) через незахищене з’єднання. Весь ваш обмін повідомленнями буде " -"незашифрованим. Ви справді бажаєте це зробити?" +"незашифрованим. Цей тип з’єднання справді ненадійний. " +"Ви справді бажаєте це зробити?" -#: ../src/gui_interface.py:1276 ../src/gui_interface.py:1316 -#: ../src/gui_interface.py:1357 +#: ../src/gui_interface.py:1309 ../src/gui_interface.py:1350 +#: ../src/gui_interface.py:1391 msgid "Yes, I really want to connect insecurely" msgstr "Так, я справді бажаю знехтувати безпекою" -#: ../src/gui_interface.py:1313 +#: ../src/gui_interface.py:1310 +msgid "Gajim will NOT connect unless you check this box" +msgstr "Gajim НЕ буде з’єднуватись доки ви не відмітите цю опцію" + +#: ../src/gui_interface.py:1347 msgid "" "You are about to send your password on an insecure connection. You should " "install PyOpenSSL to prevent that. Are you sure you want to do that?" @@ -9568,7 +9900,7 @@ msgstr "" "безпеку з’єднання, вам слід встановити PyOpenSSL. Виконати надсилання пароля " "зараз?" -#: ../src/gui_interface.py:1355 +#: ../src/gui_interface.py:1389 msgid "" "You are about to send your password unencrypted on an insecure connection. " "Are you sure you want to do that?" @@ -9577,17 +9909,17 @@ msgstr "" "вигляді. Виконати надсилання пароля?" #. theme doesn't exist, disable emoticons -#: ../src/gui_interface.py:1864 ../src/gui_interface.py:1887 +#: ../src/gui_interface.py:1898 ../src/gui_interface.py:1921 msgid "Emoticons disabled" msgstr "Емоційки вимкнено" -#: ../src/gui_interface.py:1865 +#: ../src/gui_interface.py:1899 msgid "" "Your configured emoticons theme has not been found, so emoticons have been " "disabled." msgstr "Вказаної вами теми емоційок не було знайдено, емоційки буде вимкнено." -#: ../src/gui_interface.py:1888 +#: ../src/gui_interface.py:1922 msgid "" "Your configured emoticons theme cannot been loaded. You maybe need to update " "the format of emoticons.py file. See http://trac.gajim.org/wiki/Emoticons " @@ -9597,40 +9929,40 @@ msgstr "" "формат файла emoticons.py. Докладніше про новий формат можна дізнатися за " "адресою http://trac.gajim.org/wiki/Emoticons." -#: ../src/gui_interface.py:1932 ../src/roster_window.py:3784 +#: ../src/gui_interface.py:1966 ../src/roster_window.py:3834 msgid "You cannot join a group chat while you are invisible" msgstr "Ви не можете приєднуватися до групової балачки зі станом «невидимий»" #. it is good to notify the user #. in case he or she cannot see the output of the console -#: ../src/gui_interface.py:2319 +#: ../src/gui_interface.py:2353 msgid "Could not save your settings and preferences" msgstr "Не вдалося зберегти ваші налаштування і параметри" -#: ../src/gui_interface.py:2869 +#: ../src/gui_interface.py:2915 msgid "Passphrase Required" msgstr "Слід вказати пароль" -#: ../src/gui_interface.py:2870 +#: ../src/gui_interface.py:2916 #, python-format msgid "Enter GPG key passphrase for key %(keyid)s (account %(account)s)." msgstr "Введіть пароль ключа GPG для ключа %(keyid)s (account %(account)s)." -#: ../src/gui_interface.py:2884 +#: ../src/gui_interface.py:2930 msgid "GPG key expired" msgstr "Немає ключа GPG" -#: ../src/gui_interface.py:2885 +#: ../src/gui_interface.py:2931 #, python-format msgid "Your GPG key has expired, you will be connected to %s without OpenPGP." msgstr "Ваш ключ GPG застарів. З’єднання з %s буде встановлено без OpenPGP." #. ask again -#: ../src/gui_interface.py:2894 +#: ../src/gui_interface.py:2940 msgid "Wrong Passphrase" msgstr "Вказано помилковий пароль" -#: ../src/gui_interface.py:2895 +#: ../src/gui_interface.py:2941 msgid "Please retype your GPG passphrase or press Cancel." msgstr "" "Будь ласка, введіть ще раз свій пароль GPG або натисніть кнопку «Скасувати»." @@ -9639,7 +9971,7 @@ msgstr "" msgid "_New Group Chat" msgstr "_Створити групову балачку" -#: ../src/gui_menu_builder.py:419 +#: ../src/gui_menu_builder.py:420 msgid "I would like to add you to my roster" msgstr "Я хочу додати вас до свого реєстру" @@ -9654,7 +9986,7 @@ msgstr "Контакти" #. holds time #: ../src/history_manager.py:169 ../src/history_manager.py:213 -#: ../src/history_window.py:98 +#: ../src/history_window.py:99 msgid "Date" msgstr "Дата" @@ -9665,7 +9997,7 @@ msgstr "Псевдонім" #. holds message #: ../src/history_manager.py:185 ../src/history_manager.py:220 -#: ../src/history_window.py:106 +#: ../src/history_window.py:107 msgid "Message" msgstr "Повідомлення" @@ -9734,48 +10066,40 @@ msgstr[0] "Ви справді бажаєте вилучити виділене msgstr[1] "Ви справді бажаєте вилучити виділені повідомлення?" msgstr[2] "Ви справді бажаєте вилучити виділені повідомлення?" -#: ../src/history_window.py:305 +#: ../src/history_window.py:306 #, python-format msgid "Conversation History with %s" msgstr "Журнал спілкування з %s" -#: ../src/history_window.py:355 +#: ../src/history_window.py:356 msgid "Disk Error" msgstr "Помилка роботи з диском" -#: ../src/history_window.py:443 +#: ../src/history_window.py:444 #, python-format msgid "%(nick)s is now %(status)s: %(status_msg)s" msgstr "%(nick)s тепер %(status)s: %(status_msg)s" -#: ../src/history_window.py:454 +#: ../src/history_window.py:455 #, python-format msgid "Error: %s" msgstr "Помилка: %s" -#: ../src/history_window.py:456 +#: ../src/history_window.py:457 msgid "Error" msgstr "Помилка." -#: ../src/history_window.py:458 +#: ../src/history_window.py:459 #, python-format msgid "Status is now: %(status)s: %(status_msg)s" msgstr "Поточний стан: %(status)s: %(status_msg)s" -#: ../src/history_window.py:461 +#: ../src/history_window.py:462 #, python-format msgid "Status is now: %(status)s" msgstr "Поточний стан: %(status)s" -#: ../src/htmltextview.py:523 ../src/htmltextview.py:533 -msgid "Timeout loading image" -msgstr "Перевищення часу очікування під час завантаження зображення" - -#: ../src/htmltextview.py:543 -msgid "Image is too big" -msgstr "Зображення є завеликим" - -#: ../src/htmltextview.py:576 +#: ../src/htmltextview.py:522 msgid "Loading" msgstr "Завантаження" @@ -9811,48 +10135,48 @@ msgstr "- вестиметься запис повідомлень" msgid "- messages will not be logged" msgstr "- не вестиметься запис повідомлень" -#: ../src/notify.py:326 +#: ../src/notify.py:322 msgid "Ignore" msgstr "_Ігнорувати" -#: ../src/plugins/gui.py:67 +#: ../src/plugins/gui.py:68 msgid "Plugin" msgstr "Додатки" -#: ../src/plugins/gui.py:161 +#: ../src/plugins/gui.py:162 msgid "Plugin failed" msgstr "Активація додатка невдалаДодаток" -#: ../src/plugins/gui.py:205 +#: ../src/plugins/gui.py:206 msgid "Unable to properly remove the plugin" msgstr "Не вдається коректно вилучити додаток лм" #. members not safe -#: ../src/plugins/gui.py:213 ../src/plugins/pluginmanager.py:508 -#: ../src/plugins/pluginmanager.py:516 +#: ../src/plugins/gui.py:214 ../src/plugins/pluginmanager.py:519 +#: ../src/plugins/pluginmanager.py:527 msgid "Archive is malformed" msgstr "Архів пошкоджений" -#: ../src/plugins/gui.py:236 ../src/plugins/gui.py:244 -#: ../src/plugins/pluginmanager.py:524 +#: ../src/plugins/gui.py:237 ../src/plugins/gui.py:245 +#: ../src/plugins/pluginmanager.py:535 msgid "Plugin already exists" msgstr "Додаток вже встановлено" -#: ../src/plugins/gui.py:236 +#: ../src/plugins/gui.py:237 msgid "Overwrite?" msgstr "Перезаписати?" -#: ../src/plugins/gui.py:265 +#: ../src/plugins/gui.py:266 msgid "Configuration" msgstr "Налаштування" #. it is not zip file #. CRC error -#: ../src/plugins/pluginmanager.py:494 ../src/plugins/pluginmanager.py:500 +#: ../src/plugins/pluginmanager.py:505 ../src/plugins/pluginmanager.py:511 msgid "Archive corrupted" msgstr "Архів пошкоджено" -#: ../src/plugins/pluginmanager.py:496 +#: ../src/plugins/pluginmanager.py:507 msgid "Archive empty" msgstr "Архів порожній " @@ -9860,18 +10184,18 @@ msgstr "Архів порожній " msgid "Retrieving profile..." msgstr "Отримання профілю..." -#: ../src/profile_window.py:125 ../src/roster_window.py:3137 +#: ../src/profile_window.py:125 ../src/roster_window.py:3184 msgid "File is empty" msgstr "Файл порожній" -#: ../src/profile_window.py:128 ../src/roster_window.py:3140 +#: ../src/profile_window.py:128 ../src/roster_window.py:3187 msgid "File does not exist" msgstr "Файла не існує" #. keep identation #. unknown format #: ../src/profile_window.py:142 ../src/profile_window.py:158 -#: ../src/roster_window.py:3142 ../src/roster_window.py:3153 +#: ../src/roster_window.py:3189 ../src/roster_window.py:3200 msgid "Could not load image" msgstr "Не вдалося завантажити зображення" @@ -9912,51 +10236,51 @@ msgid "" msgstr "" "Під час спроби оприлюднення ваших особистих відомостей, спробуйте пізніше." -#: ../src/roster_window.py:240 ../src/roster_window.py:1028 +#: ../src/roster_window.py:240 ../src/roster_window.py:1031 msgid "Merged accounts" msgstr "Об’єднані облікові записи" -#: ../src/roster_window.py:1956 +#: ../src/roster_window.py:1999 msgid "Authorization has been sent" msgstr "Було надіслано уповноваження" -#: ../src/roster_window.py:1957 +#: ../src/roster_window.py:2000 #, python-format msgid "Now \"%s\" will know your status." msgstr "Тепер «%s» буде відомий ваш стан." -#: ../src/roster_window.py:1980 +#: ../src/roster_window.py:2023 msgid "Subscription request has been sent" msgstr "Було надіслано запит на підписку" -#: ../src/roster_window.py:1981 +#: ../src/roster_window.py:2024 #, python-format msgid "If \"%s\" accepts this request you will know his or her status." msgstr "Якщо «%s» прийме цей запит, ви дізнаватиметеся про його або її стан." -#: ../src/roster_window.py:1995 +#: ../src/roster_window.py:2038 msgid "Authorization has been removed" msgstr "Уповноваження було вилучено" -#: ../src/roster_window.py:1996 +#: ../src/roster_window.py:2039 #, python-format msgid "Now \"%s\" will always see you as offline." msgstr "Тепер «%s» завжди бачитиме вас як «поза мережею»." -#: ../src/roster_window.py:2023 +#: ../src/roster_window.py:2066 msgid "GPG is not usable" msgstr "GPG непридатне для використання" -#: ../src/roster_window.py:2024 +#: ../src/roster_window.py:2067 #, python-format msgid "You will be connected to %s without OpenPGP." msgstr "З’єднання з %s буде встановлено без OpenPGP." -#: ../src/roster_window.py:2231 ../src/roster_window.py:3714 +#: ../src/roster_window.py:2274 ../src/roster_window.py:3764 msgid "You are participating in one or more group chats" msgstr "Ви берете участь у одній або декількох групових балачках" -#: ../src/roster_window.py:2232 ../src/roster_window.py:3715 +#: ../src/roster_window.py:2275 ../src/roster_window.py:3765 msgid "" "Changing your status to invisible will result in disconnection from those " "group chats. Are you sure you want to go invisible?" @@ -9964,27 +10288,27 @@ msgstr "" "Зміна стану на «невидимий» призведе до вашого виходу з наведених групових " "балачок. Ви справді бажаєте змінити стан на «невидимий»?" -#: ../src/roster_window.py:2258 +#: ../src/roster_window.py:2301 msgid "desync'ed" msgstr "розсинхронізація" -#: ../src/roster_window.py:2324 +#: ../src/roster_window.py:2367 msgid "Really quit Gajim?" msgstr "Справді вийти з Gajim?" -#: ../src/roster_window.py:2325 +#: ../src/roster_window.py:2368 msgid "Are you sure you want to quit Gajim?" msgstr "Ви справді бажаєте вийти з Gajim?" -#: ../src/roster_window.py:2326 +#: ../src/roster_window.py:2369 msgid "Always close Gajim" msgstr "Завжди закривати Gajim" -#: ../src/roster_window.py:2410 +#: ../src/roster_window.py:2455 msgid "You have running file transfers" msgstr "Ви маєте активні перенесення файлів" -#: ../src/roster_window.py:2411 +#: ../src/roster_window.py:2456 msgid "" "If you quit now, the file(s) being transferred will be stopped. Do you still " "want to quit?" @@ -9992,11 +10316,11 @@ msgstr "" "Якщо ви вийдете зараз, усі передачі файлів буде зупинено. Ви все ще бажаєте " "вийти?" -#: ../src/roster_window.py:2442 ../src/roster_window.py:2856 +#: ../src/roster_window.py:2487 ../src/roster_window.py:2903 msgid "You have unread messages" msgstr "У вас є непрочитані повідомлення" -#: ../src/roster_window.py:2443 +#: ../src/roster_window.py:2488 msgid "" "Messages will only be available for reading them later if you have history " "enabled and contact is in your roster." @@ -10004,16 +10328,16 @@ msgstr "" "Доступ для читання повідомлень буде можливим, лише якщо ви увімкнули журнал, " "а контакт наявний у вашому реєстрі." -#: ../src/roster_window.py:2857 +#: ../src/roster_window.py:2904 msgid "You must read them before removing this transport." msgstr "Вам слід прочитати їх, перш ніж вилучати цей транспорт." -#: ../src/roster_window.py:2860 +#: ../src/roster_window.py:2907 #, python-format msgid "Transport \"%s\" will be removed" msgstr "Транспорт \"%s\" буде вилучено" -#: ../src/roster_window.py:2861 +#: ../src/roster_window.py:2908 msgid "" "You will no longer be able to send and receive messages from contacts using " "this transport." @@ -10021,11 +10345,11 @@ msgstr "" "Ви більше не зможете надсилати і отримувати повідомлення від контактів за " "допомогою цього транспорту." -#: ../src/roster_window.py:2864 +#: ../src/roster_window.py:2911 msgid "Transports will be removed" msgstr "Транспорти буде вилучено" -#: ../src/roster_window.py:2869 +#: ../src/roster_window.py:2916 #, python-format msgid "" "You will no longer be able to send and receive messages to contacts from " @@ -10034,11 +10358,11 @@ msgstr "" "Ви більше не зможете надсилати і отримувати повідомлення від контактів за " "допомогою цих транспортів: %s" -#: ../src/roster_window.py:2937 +#: ../src/roster_window.py:2984 msgid "You are about to block a contact. Are you sure you want to continue?" msgstr "Ви маєте намір створити метаконтакт. Ви справді цього бажаєте?" -#: ../src/roster_window.py:2939 +#: ../src/roster_window.py:2986 msgid "" "This contact will see you offline and you will not receive messages he will " "send you." @@ -10047,56 +10371,56 @@ msgstr "" "від нього повідомлень." #. it's jid -#: ../src/roster_window.py:3029 +#: ../src/roster_window.py:3076 msgid "Rename Contact" msgstr "Перейменувати контакт" -#: ../src/roster_window.py:3030 +#: ../src/roster_window.py:3077 #, python-format msgid "Enter a new nickname for contact %s" msgstr "Введіть новий псевдонім для контакту %s" -#: ../src/roster_window.py:3037 +#: ../src/roster_window.py:3084 msgid "Rename Group" msgstr "Перейменувати групу" -#: ../src/roster_window.py:3038 +#: ../src/roster_window.py:3085 #, python-format msgid "Enter a new name for group %s" msgstr "Введіть нову назву для групи %s" -#: ../src/roster_window.py:3083 +#: ../src/roster_window.py:3130 msgid "Remove Group" msgstr "Вилучити групу" -#: ../src/roster_window.py:3084 +#: ../src/roster_window.py:3131 #, python-format msgid "Do you want to remove group %s from the roster?" msgstr "Бажаєте вилучити групу %s з реєстру?" -#: ../src/roster_window.py:3085 +#: ../src/roster_window.py:3132 msgid "Also remove all contacts in this group from your roster" msgstr "Крім того, вилучити всі контакти з цієї групи з вашого реєстру" -#: ../src/roster_window.py:3124 +#: ../src/roster_window.py:3171 msgid "Assign OpenPGP Key" msgstr "Призначити ключ OpenPGP" -#: ../src/roster_window.py:3125 +#: ../src/roster_window.py:3172 msgid "Select a key to apply to the contact" msgstr "Оберіть ключ для використання з цим контактом" -#: ../src/roster_window.py:3524 +#: ../src/roster_window.py:3574 #, python-format msgid "Contact \"%s\" will be removed from your roster" msgstr "Контакт «%s» буде вилучено з вашого реєстру" -#: ../src/roster_window.py:3526 +#: ../src/roster_window.py:3576 #, python-format msgid "You are about to remove \"%(name)s\" (%(jid)s) from your roster.\n" msgstr "Ви збираєтесь вилучити \"%(name)s\" (%(jid)s) з вашого реєстру.\n" -#: ../src/roster_window.py:3531 +#: ../src/roster_window.py:3581 msgid "" "By removing this contact you also remove authorization resulting in him or " "her always seeing you as offline." @@ -10105,11 +10429,11 @@ msgstr "" "вона не зможуть визначати, коли ви перебуватимете у мережі." #. Contact is not in roster -#: ../src/roster_window.py:3537 +#: ../src/roster_window.py:3587 msgid "Do you want to continue?" msgstr "Бажаєте продовжити виконання операції?" -#: ../src/roster_window.py:3541 +#: ../src/roster_window.py:3591 msgid "" "By removing this contact you also by default remove authorization resulting " "in him or her always seeing you as offline." @@ -10117,16 +10441,16 @@ msgstr "" "Вилучення цього контакту призведе до вилучення уповноваження, отже він або " "вона не зможуть визначати, коли ви перебуватимете у мережі." -#: ../src/roster_window.py:3544 +#: ../src/roster_window.py:3594 msgid "I want this contact to know my status after removal" msgstr "Я хочу, щоб цей контакт знав про мій стан після вилучення" #. several contact to remove at the same time -#: ../src/roster_window.py:3548 +#: ../src/roster_window.py:3598 msgid "Contacts will be removed from your roster" msgstr "Контакти буде вилучено з вашого реєстру" -#: ../src/roster_window.py:3553 +#: ../src/roster_window.py:3603 #, python-format msgid "" "By removing these contacts:%s\n" @@ -10136,12 +10460,12 @@ msgstr "" "призведе до вилучення уповноваження, отже для них ви завжди залишатиметеся " "поза мережею." -#: ../src/roster_window.py:3611 +#: ../src/roster_window.py:3661 msgid "" "You are about to send a custom status. Are you sure you want to continue?" msgstr "Ви маєте намір надіслати особливий статус. Ви справді цього бажаєте?" -#: ../src/roster_window.py:3613 +#: ../src/roster_window.py:3663 #, python-format msgid "" "This contact will temporarily see you as %(status)s, but only until you " @@ -10150,21 +10474,21 @@ msgstr "" "Цей контакт тимчасово бачитиме вас як %(status)s, но лише до зміни вашого " "статусу. Потім він бачитиме ваш глобальний статус." -#: ../src/roster_window.py:3632 +#: ../src/roster_window.py:3682 msgid "No account available" msgstr "Немає жодного облікового запису" -#: ../src/roster_window.py:3633 +#: ../src/roster_window.py:3683 msgid "You must create an account before you can chat with other contacts." msgstr "" "Перш ніж ви зможете розпочати балачку з контактами, вам слід створити " "обліковий запис." -#: ../src/roster_window.py:4286 +#: ../src/roster_window.py:4373 msgid "Metacontacts storage not supported by your server" msgstr "Збереження метаконтактів не підтримується вашим сервером" -#: ../src/roster_window.py:4288 +#: ../src/roster_window.py:4375 msgid "" "Your server does not support storing metacontacts information. So those " "information will not be saved on next reconnection." @@ -10172,12 +10496,12 @@ msgstr "" "Ваш сервер не підтримує збереження відомостей щодо метаконтактів. Отже ці " "відомості не буде збережено до наступного з’єднання." -#: ../src/roster_window.py:4380 +#: ../src/roster_window.py:4467 msgid "" "You are about to create a metacontact. Are you sure you want to continue?" msgstr "Ви маєте намір створити метаконтакт. Ви справді цього бажаєте?" -#: ../src/roster_window.py:4382 +#: ../src/roster_window.py:4469 msgid "" "Metacontacts are a way to regroup several contacts in one line. Generally it " "is used when the same person has several Jabber accounts or transport " @@ -10187,11 +10511,11 @@ msgstr "" "списку. Загалом кажучи, метаконтакти використовуються, якщо вашим контактом " "є особа з декількома обліковими записами або транспортами Jabber." -#: ../src/roster_window.py:4503 +#: ../src/roster_window.py:4590 msgid "Invalid file URI:" msgstr "Некоректна адреса файла:" -#: ../src/roster_window.py:4515 +#: ../src/roster_window.py:4602 #, python-format msgid "Do you want to send this file to %s:" msgid_plural "Do you want to send these files to %s:" @@ -10199,17 +10523,17 @@ msgstr[0] "Ви справді бажаєте надіслати цей файл msgstr[1] "Ви справді бажаєте надіслати ці файли до %s:" msgstr[2] "Ви справді бажаєте надіслати ці файли до %s:" -#: ../src/roster_window.py:4650 +#: ../src/roster_window.py:4737 #, python-format msgid "Send %s to %s" msgstr "Надіслати %s до %s" -#: ../src/roster_window.py:4661 +#: ../src/roster_window.py:4748 #, python-format msgid "Make %s first contact" msgstr "Зробити %s першим контактом." -#: ../src/roster_window.py:4664 +#: ../src/roster_window.py:4751 #, python-format msgid "Make %s and %s metacontacts" msgstr "Робить %s та %s метаконтактом." @@ -10219,129 +10543,129 @@ msgstr "Робить %s та %s метаконтактом." #. for chat_with #. for single message #. join gc -#: ../src/roster_window.py:5104 ../src/roster_window.py:5158 -#: ../src/roster_window.py:5167 ../src/statusicon.py:264 +#: ../src/roster_window.py:5190 ../src/roster_window.py:5244 +#: ../src/roster_window.py:5253 ../src/statusicon.py:264 #: ../src/statusicon.py:311 ../src/statusicon.py:317 #, python-format msgid "using account %s" msgstr "з облікового запису %s" #. add -#: ../src/roster_window.py:5174 +#: ../src/roster_window.py:5260 #, python-format msgid "to %s account" msgstr "до облікового запису %s" #. disco -#: ../src/roster_window.py:5179 +#: ../src/roster_window.py:5265 #, python-format msgid "using %s account" msgstr "з облікового запису %s" -#: ../src/roster_window.py:5218 ../src/statusicon.py:327 +#: ../src/roster_window.py:5304 ../src/statusicon.py:327 msgid "_Manage Bookmarks..." msgstr "_Керування закладками..." #. profile, avatar -#: ../src/roster_window.py:5238 +#: ../src/roster_window.py:5324 #, python-format msgid "of account %s" msgstr "облікового запису %s" -#: ../src/roster_window.py:5279 +#: ../src/roster_window.py:5365 #, python-format msgid "for account %s" msgstr "до облікового запису %s" -#: ../src/roster_window.py:5339 ../src/roster_window.py:5447 +#: ../src/roster_window.py:5425 ../src/roster_window.py:5533 msgid "_Change Status Message" msgstr "_Змінити повідомлення про стан" -#: ../src/roster_window.py:5372 +#: ../src/roster_window.py:5458 msgid "Publish Tune" msgstr "Оприлюднити музику" -#: ../src/roster_window.py:5374 +#: ../src/roster_window.py:5460 msgid "Publish Location" msgstr "Оприлюднити положення" -#: ../src/roster_window.py:5377 +#: ../src/roster_window.py:5463 msgid "Configure Services..." msgstr "Налаштувати служби..." -#: ../src/roster_window.py:5525 +#: ../src/roster_window.py:5611 msgid "_Maximize All" msgstr "_Максимізувати всі" -#: ../src/roster_window.py:5535 ../src/roster_window.py:5708 +#: ../src/roster_window.py:5621 ../src/roster_window.py:5794 msgid "Send Group M_essage" msgstr "Надіслати групове п_овідомлення" -#: ../src/roster_window.py:5543 +#: ../src/roster_window.py:5629 msgid "To all users" msgstr "Усім користувачам" -#: ../src/roster_window.py:5547 +#: ../src/roster_window.py:5633 msgid "To all online users" msgstr "Усім користувачам на зв'язку" #. Manage Transport submenu -#: ../src/roster_window.py:5728 +#: ../src/roster_window.py:5814 msgid "_Manage Contacts" msgstr "_Керування контактами" #. Edit Groups -#: ../src/roster_window.py:5737 +#: ../src/roster_window.py:5823 msgid "Edit _Groups" msgstr "Редагувати _групи" #. Send single message -#: ../src/roster_window.py:5792 +#: ../src/roster_window.py:5878 msgid "Send Single Message" msgstr "Надіслати окреме повідомлення" #. Execute Command -#: ../src/roster_window.py:5839 +#: ../src/roster_window.py:5925 msgid "Execute Command..." msgstr "Виконати команду..." #. Manage Transport submenu -#: ../src/roster_window.py:5849 +#: ../src/roster_window.py:5935 msgid "_Manage Transport" msgstr "_Керування транспортом" #. Modify Transport -#: ../src/roster_window.py:5858 +#: ../src/roster_window.py:5944 msgid "_Modify Transport" msgstr "_Змінити транспорт" #. Rename -#: ../src/roster_window.py:5868 +#: ../src/roster_window.py:5954 msgid "_Rename" msgstr "Пере_йменувати" -#: ../src/roster_window.py:5928 +#: ../src/roster_window.py:6014 msgid "_Maximize" msgstr "_Максимізувати" -#: ../src/roster_window.py:5937 +#: ../src/roster_window.py:6023 msgid "_Reconnect" msgstr "_Перез’єднати" -#: ../src/roster_window.py:5944 +#: ../src/roster_window.py:6030 msgid "_Disconnect" msgstr "_Роз'єднати" #. History manager -#: ../src/roster_window.py:6033 +#: ../src/roster_window.py:6119 msgid "History Manager" msgstr "Керування журналом" -#: ../src/roster_window.py:6044 +#: ../src/roster_window.py:6130 msgid "_Join New Group Chat" msgstr "_Приєднатись до нової групової балачки" -#: ../src/roster_window.py:6263 +#: ../src/roster_window.py:6349 msgid "Change Status Message..." msgstr "Змінити повідомлення про стан..." @@ -10358,15 +10682,15 @@ msgstr "Помилка у отриманих даних" msgid "No result" msgstr "Результату немає" -#: ../src/session.py:98 +#: ../src/session.py:97 msgid "Disk WriteError" msgstr "Помилка під час запису на диск" -#: ../src/session.py:407 ../src/session.py:466 +#: ../src/session.py:411 ../src/session.py:470 msgid "Confirm these session options" msgstr "Підтвердити параметри цих сеансів" -#: ../src/session.py:409 +#: ../src/session.py:413 #, python-format msgid "" "The remote client wants to negotiate a session with these features:\n" @@ -10381,7 +10705,7 @@ msgstr "" "\n" "Чи всі вказані параметри є прийнятними?" -#: ../src/session.py:468 +#: ../src/session.py:472 #, python-format msgid "" "The remote client selected these options:\n" @@ -10396,7 +10720,7 @@ msgstr "" "\n" "Продовжити цей сеанс?" -#: ../src/session.py:471 +#: ../src/session.py:475 msgid "Always accept for this contact" msgstr "Завжди приймати цей контакт" @@ -10412,134 +10736,134 @@ msgstr "Сховати реєстр" msgid "Hide this menu" msgstr "Сховати це меню" -#: ../src/tooltips.py:392 ../src/tooltips.py:604 +#: ../src/tooltips.py:393 ../src/tooltips.py:605 msgid "Jabber ID: " msgstr "Jabber ID: " -#: ../src/tooltips.py:395 ../src/tooltips.py:608 +#: ../src/tooltips.py:396 ../src/tooltips.py:609 msgid "Resource: " msgstr "Ресурс" -#: ../src/tooltips.py:401 +#: ../src/tooltips.py:402 #, python-format msgid "%(owner_or_admin_or_member)s of this group chat" msgstr "%(owner_or_admin_or_member)s цієї групової балачки" -#: ../src/tooltips.py:502 +#: ../src/tooltips.py:503 msgid " [blocked]" msgstr " [заблоковано]" -#: ../src/tooltips.py:506 +#: ../src/tooltips.py:507 msgid " [minimized]" msgstr " [мінімізовано]" -#: ../src/tooltips.py:521 ../src/tooltips.py:777 +#: ../src/tooltips.py:522 ../src/tooltips.py:778 msgid "Status: " msgstr "Стан: " -#: ../src/tooltips.py:565 +#: ../src/tooltips.py:566 #, python-format msgid "Last status: %s" msgstr "Попередній стан: %s" -#: ../src/tooltips.py:567 +#: ../src/tooltips.py:568 #, python-format msgid " since %s" msgstr " з %s" -#: ../src/tooltips.py:585 +#: ../src/tooltips.py:586 msgid "Connected" msgstr "З'єднано" -#: ../src/tooltips.py:587 +#: ../src/tooltips.py:588 msgid "Disconnected" msgstr "Роз'єднано" #. ('both' is the normal sub so we don't show it) -#: ../src/tooltips.py:615 +#: ../src/tooltips.py:616 msgid "Subscription: " msgstr "Підписка:" -#: ../src/tooltips.py:625 +#: ../src/tooltips.py:626 msgid "OpenPGP: " msgstr "OpenPGP: " -#: ../src/tooltips.py:646 +#: ../src/tooltips.py:647 #, python-format msgid "Idle since %s" msgstr "Відсутній з %s" -#: ../src/tooltips.py:647 +#: ../src/tooltips.py:648 #, python-format msgid "Idle for %s" msgstr "Відсутній %s" -#: ../src/tooltips.py:698 +#: ../src/tooltips.py:699 #, python-format msgid "Mood: %s" msgstr "Настрій: %s" -#: ../src/tooltips.py:702 +#: ../src/tooltips.py:703 #, python-format msgid "Activity: %s" msgstr "Заняття: %s" -#: ../src/tooltips.py:706 +#: ../src/tooltips.py:707 #, python-format msgid "Tune: %s" msgstr "Музика: %s" -#: ../src/tooltips.py:710 +#: ../src/tooltips.py:711 #, python-format msgid "Location: %s" msgstr "Положення: %s" -#: ../src/tooltips.py:735 +#: ../src/tooltips.py:736 msgid "Download" msgstr "Звантажити" -#: ../src/tooltips.py:741 +#: ../src/tooltips.py:742 msgid "Upload" msgstr "Вивантажити" -#: ../src/tooltips.py:748 +#: ../src/tooltips.py:749 msgid "Type: " msgstr "Тип: " -#: ../src/tooltips.py:752 +#: ../src/tooltips.py:753 msgid "Transferred: " msgstr "Передано:" -#: ../src/tooltips.py:755 ../src/tooltips.py:776 +#: ../src/tooltips.py:756 ../src/tooltips.py:777 msgid "Not started" msgstr "Не розпочато" -#: ../src/tooltips.py:759 +#: ../src/tooltips.py:760 msgid "Stopped" msgstr "Зупинено" -#: ../src/tooltips.py:761 ../src/tooltips.py:764 +#: ../src/tooltips.py:762 ../src/tooltips.py:765 msgid "Completed" msgstr "Завершено" -#: ../src/tooltips.py:768 +#: ../src/tooltips.py:769 msgid "?transfer status:Paused" msgstr "Призупинено" #. stalled is not paused. it is like 'frozen' it stopped alone -#: ../src/tooltips.py:772 +#: ../src/tooltips.py:773 msgid "Stalled" msgstr "Заблоковано" -#: ../src/tooltips.py:774 +#: ../src/tooltips.py:775 msgid "Transferring" msgstr "Перенесення" -#: ../src/tooltips.py:812 +#: ../src/tooltips.py:813 msgid "This service has not yet responded with detailed information" msgstr "Ця служба ще не надала докладних відомостей" -#: ../src/tooltips.py:815 +#: ../src/tooltips.py:816 msgid "" "This service could not respond with detailed information.\n" "It is most likely legacy or broken" @@ -10618,14 +10942,8 @@ msgstr "У черзі немає запитів на підписку." msgid " resource with priority " msgstr " пріоритетний ресурс" -#~ msgid "File transfer" -#~ msgstr "Перенесення файлів" - -#~ msgid "Size" -#~ msgstr "Розмір" - -#~ msgid "_Accept" -#~ msgstr "_Прийняти" +#~ msgid "Requires pybonjour (http://o2s.csail.mit.edu/o2s-wiki/pybonjour)." +#~ msgstr "Потрібен pybonjour (http://o2s.csail.mit.edu/o2s-wiki/pybonjour)." #~ msgid "Choose Client Cert" #~ msgstr "Оберіть клієнтський сертифікат" @@ -10724,9 +11042,6 @@ msgstr " пріоритетний ресурс" #~ msgid "_Inform me with a popup window" #~ msgstr "_Повідомити мене виринаючим вікном" -#~ msgid "_Open chat window with user" -#~ msgstr "_Відкрити вікно балачки з користувачем" - #~ msgid "_Show event in notification area" #~ msgstr "_Показати події у зоні сповіщень" @@ -10751,9 +11066,6 @@ msgstr " пріоритетний ресурс" #~ msgid "when I'm in" #~ msgstr "коли я у" -#~ msgid "Available" -#~ msgstr "Доступний" - #~ msgid "Descrition:" #~ msgstr "Опис: " diff --git a/setup_win32.py b/setup_win32.py index c65b62857..079c95942 100644 --- a/setup_win32.py +++ b/setup_win32.py @@ -1,6 +1,6 @@ ## setup_win32.py (run me as python setup_win32.py py2exe -O2) ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005-2006 Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org> ## diff --git a/src/adhoc_commands.py b/src/adhoc_commands.py index b0835b474..ec05d8dbf 100644 --- a/src/adhoc_commands.py +++ b/src/adhoc_commands.py @@ -3,7 +3,7 @@ ## ## Copyright (C) 2006 Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2006-2007 Tomasz Melcer <liori AT exroot.org> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org> ## Stephan Erb <steve-e AT h3c.de> ## @@ -99,7 +99,7 @@ class CommandWindow: self.stage1() # displaying the window - self.window.set_title('Ad-hoc Commands - Gajim') + self.window.set_title(_('Ad-hoc Commands - Gajim')) self.xml.connect_signals(self) self.window.show_all() @@ -415,7 +415,7 @@ class CommandWindow: return self.data_form_widget.show() if self.data_form_widget.title: - self.window.set_title('%s - Ad-hoc Commands - Gajim' % \ + self.window.set_title(_('%s - Ad-hoc Commands - Gajim') % \ self.data_form_widget.title) else: self.data_form_widget.hide() diff --git a/src/advanced_configuration_window.py b/src/advanced_configuration_window.py index d59ed09a1..5481d2aaa 100644 --- a/src/advanced_configuration_window.py +++ b/src/advanced_configuration_window.py @@ -3,7 +3,7 @@ ## ## Copyright (C) 2005 Travis Shirk <travis AT pobox.com> ## Vincent Hanquez <tab AT snarc.org> -## Copyright (C) 2005-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2005-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005-2007 Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2006 Dimitur Kirov <dkirov AT gmail.com> ## Copyright (C) 2006-2007 Jean-Marie Traissard <jim AT lapin.org> @@ -81,6 +81,7 @@ class AdvancedConfigurationWindow(object): self.entry = self.xml.get_object('advanced_entry') self.desc_label = self.xml.get_object('advanced_desc_label') self.restart_label = self.xml.get_object('restart_label') + self.reset_button = self.xml.get_object('reset_button') # Format: # key = option name (root/subopt/opt separated by \n then) @@ -174,6 +175,13 @@ class AdvancedConfigurationWindow(object): else: #we talk about option description in advanced configuration editor self.desc_label.set_text(_('(None)')) + if len(opt_path) == 3 or (len(opt_path) == 1 and not \ + model.iter_has_child(iter_)): + self.reset_button.set_sensitive(True) + else: + self.reset_button.set_sensitive(False) + else: + self.reset_button.set_sensitive(False) def remember_option(self, option, oldval, newval): if option in self.changed_opts: @@ -195,7 +203,6 @@ class AdvancedConfigurationWindow(object): optname = optnamerow[0].decode('utf-8') keyrow = self.model[modelpath[:2]] key = keyrow[0].decode('utf-8') - gajim.config.get_desc_per(optname, key, option) self.remember_option(option + '\n' + key + '\n' + optname, modelrow[1], newval) gajim.config.set_per(optname, key, option, newval) @@ -244,6 +251,42 @@ class AdvancedConfigurationWindow(object): def on_advanced_configuration_window_destroy(self, widget): del gajim.interface.instances['advanced_config'] + def on_reset_button_clicked(self, widget): + model, iter_ = self.treeview.get_selection().get_selected() + # Check for GtkTreeIter + if iter_: + path = model.get_path(iter_) + opt_path = self.get_option_path(model, iter_) + if len(opt_path) == 1: + default = gajim.config.get_default(opt_path[0]) + elif len(opt_path) == 3: + default = gajim.config.get_default_per(opt_path[2], opt_path[0]) + + if model[iter_][C_TYPE] == self.types['boolean']: + if self.right_true_dict[default] == model[iter_][C_VALUE]: + return + modelpath = self.modelfilter.convert_path_to_child_path(path) + modelrow = self.model[modelpath] + option = modelrow[0].decode('utf-8') + if len(modelpath) > 1: + optnamerow = self.model[modelpath[0]] + optname = optnamerow[0].decode('utf-8') + keyrow = self.model[modelpath[:2]] + key = keyrow[0].decode('utf-8') + self.remember_option(option + '\n' + key + '\n' + optname, + modelrow[C_VALUE], default) + gajim.config.set_per(optname, key, option, default) + else: + self.remember_option(option, modelrow[C_VALUE], default) + gajim.config.set(option, default) + gajim.interface.save_config() + modelrow[C_VALUE] = self.right_true_dict[default] + self.check_for_restart() + else: + if str(default) == model[iter_][C_VALUE]: + return + self.on_config_edited(None, path, str(default)) + def on_advanced_close_button_clicked(self, widget): self.window.destroy() @@ -254,14 +297,18 @@ class AdvancedConfigurationWindow(object): newparent = self.model.append(parent, [name, '', '']) self.fill_model(item, newparent) else: # Leaf - type_ = self.types[option[OPT_TYPE][0]] + if len(item) == 1: + type_ = self.types[gajim.config.get_type(name)] + elif len(item) == 3: + type_ = self.types[gajim.config.get_type_per(item[0], + item[2])] if name == 'password': value = _('Hidden') else: if type_ == self.types['boolean']: - value = self.right_true_dict[option[OPT_VAL]] + value = self.right_true_dict[option] else: - value = option[OPT_VAL] + value = option self.model.append(parent, [name, value, type_]) def visible_func(self, model, treeiter): diff --git a/src/atom_window.py b/src/atom_window.py index 70d47e2f2..6c9f9ec52 100644 --- a/src/atom_window.py +++ b/src/atom_window.py @@ -2,7 +2,7 @@ ## src/atom_window.py ## ## Copyright (C) 2006 Tomasz Melcer <liori AT exroot.org> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2007 Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org> ## diff --git a/src/cell_renderer_image.py b/src/cell_renderer_image.py index 1e5b4bb8e..d2e6c4a8b 100644 --- a/src/cell_renderer_image.py +++ b/src/cell_renderer_image.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/cell_renderer_image.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005 Vincent Hanquez <tab AT snarc.org> ## Copyright (C) 2005-2007 Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2006 Travis Shirk <travis AT pobox.com> diff --git a/src/chat_control.py b/src/chat_control.py index dac0224e9..d2201eb91 100644 --- a/src/chat_control.py +++ b/src/chat_control.py @@ -2,7 +2,7 @@ ## src/chat_control.py ## ## Copyright (C) 2006 Dimitur Kirov <dkirov AT gmail.com> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2006-2008 Jean-Marie Traissard <jim AT lapin.org> ## Nikos Kouremenos <kourem AT gmail.com> ## Travis Shirk <travis AT pobox.com> @@ -56,6 +56,7 @@ from common.xmpp.protocol import NS_RECEIPTS, NS_ESESSION from common.xmpp.protocol import NS_JINGLE_RTP_AUDIO, NS_JINGLE_RTP_VIDEO, NS_JINGLE_ICE_UDP, NS_JINGLE_FILE_TRANSFER from common.xmpp.protocol import NS_CHATSTATES from common.connection_handlers_events import MessageOutgoingEvent +from common.exceptions import GajimGeneralException from command_system.implementation.middleware import ChatCommandProcessor from command_system.implementation.middleware import CommandTools @@ -469,7 +470,6 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): self.user_nick = None self.smooth = True - self.msg_textview.grab_focus() self.command_hits = [] self.last_key_tabs = False @@ -864,7 +864,7 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): def send_message(self, message, keyID='', type_='chat', chatstate=None, msg_id=None, resource=None, xhtml=None, callback=None, callback_args=[], - process_commands=True): + process_commands=True, attention=False): """ Send the given message to the active tab. Doesn't return None if error """ @@ -881,7 +881,7 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): keyID=keyID, type_=type_, chatstate=chatstate, msg_id=msg_id, resource=resource, user_nick=self.user_nick, xhtml=xhtml, label=label, callback=callback, callback_args=callback_args, - control=self)) + control=self, attention=attention)) # Record the history of sent messages self.save_message(message, 'sent') @@ -920,10 +920,9 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): self.received_history_pos = pos def print_conversation_line(self, text, kind, name, tim, - other_tags_for_name=[], other_tags_for_time=[], - other_tags_for_text=[], count_as_new=True, subject=None, - old_kind=None, xhtml=None, simple=False, xep0184_id=None, - graphics=True, displaymarking=None): + other_tags_for_name=[], other_tags_for_time=[], other_tags_for_text=[], + count_as_new=True, subject=None, old_kind=None, xhtml=None, simple=False, + xep0184_id=None, graphics=True, displaymarking=None, msg_id=None): """ Print 'chat' type messages """ @@ -934,9 +933,9 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): if self.was_at_the_end or kind == 'outgoing': end = True textview.print_conversation_line(text, jid, kind, name, tim, - other_tags_for_name, other_tags_for_time, other_tags_for_text, - subject, old_kind, xhtml, simple=simple, graphics=graphics, - displaymarking=displaymarking) + other_tags_for_name, other_tags_for_time, other_tags_for_text, + subject, old_kind, xhtml, simple=simple, graphics=graphics, + displaymarking=displaymarking) if xep0184_id is not None: textview.show_xep0184_warning(xep0184_id) @@ -979,18 +978,18 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): type_ = 'printed_' + self.type_id event = 'message_received' show_in_roster = notify.get_show_in_roster(event, - self.account, self.contact, self.session) + self.account, self.contact, self.session) show_in_systray = notify.get_show_in_systray(event, - self.account, self.contact, type_) + self.account, self.contact, type_) - event = gajim.events.create_event(type_, (self,), - show_in_roster=show_in_roster, + event = gajim.events.create_event(type_, (text, subject, self, + msg_id), show_in_roster=show_in_roster, show_in_systray=show_in_systray) gajim.events.add_event(self.account, full_jid, event) # We need to redraw contact if we show in roster if show_in_roster: gajim.interface.roster.draw_contact(self.contact.jid, - self.account) + self.account) if not self.parent_win: return @@ -1437,22 +1436,22 @@ class ChatControl(ChatControlBase): def __init__(self, parent_win, contact, acct, session, resource=None): ChatControlBase.__init__(self, self.TYPE_ID, parent_win, - 'chat_control', contact, acct, resource) + 'chat_control', contact, acct, resource) self.gpg_is_active = False # for muc use: # widget = self.xml.get_object('muc_window_actions_button') self.actions_button = self.xml.get_object('message_window_actions_button') id_ = self.actions_button.connect('clicked', - self.on_actions_button_clicked) + self.on_actions_button_clicked) self.handlers[id_] = self.actions_button self._formattings_button = self.xml.get_object('formattings_button') self._add_to_roster_button = self.xml.get_object( - 'add_to_roster_button') + 'add_to_roster_button') id_ = self._add_to_roster_button.connect('clicked', - self._on_add_to_roster_menuitem_activate) + self._on_add_to_roster_menuitem_activate) self.handlers[id_] = self._add_to_roster_button self._audio_button = self.xml.get_object('audio_togglebutton') @@ -1460,14 +1459,14 @@ class ChatControl(ChatControlBase): self.handlers[id_] = self._audio_button # add a special img gtkgui_helpers.add_image_to_button(self._audio_button, - 'gajim-mic_inactive') + 'gajim-mic_inactive') self._video_button = self.xml.get_object('video_togglebutton') id_ = self._video_button.connect('toggled', self.on_video_button_toggled) self.handlers[id_] = self._video_button # add a special img gtkgui_helpers.add_image_to_button(self._video_button, - 'gajim-cam_inactive') + 'gajim-cam_inactive') self._send_file_button = self.xml.get_object('send_file_button') # add a special img for send file button @@ -1476,30 +1475,30 @@ class ChatControl(ChatControlBase): img.set_from_file(path_to_upload_img) self._send_file_button.set_image(img) id_ = self._send_file_button.connect('clicked', - self._on_send_file_menuitem_activate) + self._on_send_file_menuitem_activate) self.handlers[id_] = self._send_file_button self._convert_to_gc_button = self.xml.get_object( - 'convert_to_gc_button') + 'convert_to_gc_button') id_ = self._convert_to_gc_button.connect('clicked', - self._on_convert_to_gc_menuitem_activate) + self._on_convert_to_gc_menuitem_activate) self.handlers[id_] = self._convert_to_gc_button - contact_information_button = self.xml.get_object( - 'contact_information_button') - id_ = contact_information_button.connect('clicked', - self._on_contact_information_menuitem_activate) - self.handlers[id_] = contact_information_button + self._contact_information_button = self.xml.get_object( + 'contact_information_button') + id_ = self._contact_information_button.connect('clicked', + self._on_contact_information_menuitem_activate) + self.handlers[id_] = self._contact_information_button compact_view = gajim.config.get('compact_view') self.chat_buttons_set_visible(compact_view) self.widget_set_visible(self.xml.get_object('banner_eventbox'), - gajim.config.get('hide_chat_banner')) + gajim.config.get('hide_chat_banner')) self.authentication_button = self.xml.get_object( - 'authentication_button') + 'authentication_button') id_ = self.authentication_button.connect('clicked', - self._on_authentication_button_clicked) + self._on_authentication_button_clicked) self.handlers[id_] = self.authentication_button # Add lock image to show chat encryption @@ -1541,31 +1540,31 @@ class ChatControl(ChatControlBase): # Hook up signals id_ = self.parent_win.window.connect('motion-notify-event', - self._on_window_motion_notify) + self._on_window_motion_notify) self.handlers[id_] = self.parent_win.window message_tv_buffer = self.msg_textview.get_buffer() id_ = message_tv_buffer.connect('changed', - self._on_message_tv_buffer_changed) + self._on_message_tv_buffer_changed) self.handlers[id_] = message_tv_buffer widget = self.xml.get_object('avatar_eventbox') widget.set_property('height-request', gajim.config.get( - 'chat_avatar_height')) + 'chat_avatar_height')) id_ = widget.connect('enter-notify-event', - self.on_avatar_eventbox_enter_notify_event) + self.on_avatar_eventbox_enter_notify_event) self.handlers[id_] = widget id_ = widget.connect('leave-notify-event', - self.on_avatar_eventbox_leave_notify_event) + self.on_avatar_eventbox_leave_notify_event) self.handlers[id_] = widget id_ = widget.connect('button-press-event', - self.on_avatar_eventbox_button_press_event) + self.on_avatar_eventbox_button_press_event) self.handlers[id_] = widget widget = self.xml.get_object('location_eventbox') id_ = widget.connect('button-release-event', - self.on_location_eventbox_button_release_event) + self.on_location_eventbox_button_release_event) self.handlers[id_] = widget for key in ('1', '2', '3', '4', '5', '6', '7', '8', '9', '*', '0', '#'): @@ -1614,7 +1613,7 @@ class ChatControl(ChatControlBase): if not resource: resource = contact.resource session = gajim.connections[self.account].find_controlless_session( - self.contact.jid, resource) + self.contact.jid, resource) self.setup_seclabel(self.xml.get_object('label_selector')) if session: @@ -1627,8 +1626,7 @@ class ChatControl(ChatControlBase): # Enable encryption if needed self.no_autonegotiation = False e2e_is_active = self.session and self.session.enable_encryption - gpg_pref = gajim.config.get_per('contacts', contact.jid, - 'gpg_enabled') + gpg_pref = gajim.config.get_per('contacts', contact.jid, 'gpg_enabled') # try GPG first if not e2e_is_active and gpg_pref and \ @@ -1637,30 +1635,30 @@ class ChatControl(ChatControlBase): self.gpg_is_active = True gajim.encrypted_chats[self.account].append(contact.jid) msg = _('GPG encryption enabled') - ChatControlBase.print_conversation_line(self, msg, - 'status', '', None) + ChatControlBase.print_conversation_line(self, msg, 'status', '', + None) if self.session: self.session.loggable = gajim.config.get_per('accounts', - self.account, 'log_encrypted_sessions') + self.account, 'log_encrypted_sessions') # GPG is always authenticated as we use GPG's WoT self._show_lock_image(self.gpg_is_active, 'GPG', self.gpg_is_active, - self.session and self.session.is_loggable(), True) + self.session and self.session.is_loggable(), True) self.update_ui() # restore previous conversation self.restore_conversation() self.msg_textview.grab_focus() - # change tooltip text for audio and video buttons if python-farsight is + # change tooltip text for audio and video buttons if python-farstream is # not installed - if not gajim.HAVE_FARSIGHT: + if not gajim.HAVE_FARSTREAM: tooltip_text = self._audio_button.get_tooltip_text() self._audio_button.set_tooltip_text( - '%s\n%s' % (tooltip_text, _('Requires python-farsight.'))) + '%s\n%s' % (tooltip_text, _('Requires python-farstream.'))) tooltip_text = self._video_button.get_tooltip_text() self._video_button.set_tooltip_text( - '%s\n%s' % (tooltip_text, _('Requires python-farsight.'))) + '%s\n%s' % (tooltip_text, _('Requires python-farstream.'))) gajim.ged.register_event_handler('pep-received', ged.GUI1, self._nec_pep_received) @@ -1708,7 +1706,7 @@ class ChatControl(ChatControlBase): # Jingle detection if self.contact.supports(NS_JINGLE_ICE_UDP) and \ - gajim.HAVE_FARSIGHT and self.contact.resource: + gajim.HAVE_FARSTREAM and self.contact.resource: self.audio_available = self.contact.supports(NS_JINGLE_RTP_AUDIO) self.video_available = self.contact.supports(NS_JINGLE_RTP_VIDEO) else: @@ -1724,18 +1722,19 @@ class ChatControl(ChatControlBase): self._video_button.set_sensitive(self.video_available) # Send file - if (self.contact.supports(NS_FILE) or self.contact.supports(NS_JINGLE_FILE_TRANSFER)) and self.contact.resource: + if (self.contact.supports(NS_FILE) or self.contact.supports(NS_JINGLE_FILE_TRANSFER)) and (self.type_id == 'chat' or \ + self.gc_contact.resource): self._send_file_button.set_sensitive(True) self._send_file_button.set_tooltip_text('') else: self._send_file_button.set_sensitive(False) if not (self.contact.supports(NS_FILE) or self.contact.supports(NS_JINGLE_FILE_TRANSFER)): self._send_file_button.set_tooltip_text(_( - "This contact does not support file transfer.")) + "This contact does not support file transfer.")) else: self._send_file_button.set_tooltip_text( - _("You need to know the real JID of the contact to send him or " - "her a file.")) + _("You need to know the real JID of the contact to send " + "him or her a file.")) # Convert to GC if self.contact.supports(NS_MUC): @@ -1743,6 +1742,13 @@ class ChatControl(ChatControlBase): else: self._convert_to_gc_button.set_sensitive(False) + # Information + if gajim.account_is_disconnected(self.account): + self._contact_information_button.set_sensitive(False) + else: + self._contact_information_button.set_sensitive(True) + + def update_all_pep_types(self): for pep_type in self._pep_images: self.update_pep(pep_type) @@ -2230,7 +2236,7 @@ class ChatControl(ChatControlBase): dialogs.ESessionInfoWindow(self.session) def send_message(self, message, keyID='', chatstate=None, xhtml=None, - process_commands=True): + process_commands=True, attention=False): """ Send a message to contact """ @@ -2281,7 +2287,8 @@ class ChatControl(ChatControlBase): ChatControlBase.send_message(self, message, keyID, type_='chat', chatstate=chatstate_to_send, xhtml=xhtml, callback=_on_sent, callback_args=[contact, message, encrypted, xhtml, - self.get_seclabel()], process_commands=process_commands) + self.get_seclabel()], process_commands=process_commands, + attention=attention) def check_for_possible_paused_chatstate(self, arg): """ @@ -2391,8 +2398,8 @@ class ChatControl(ChatControlBase): return gajim.nicks[self.account] def print_conversation(self, text, frm='', tim=None, encrypted=False, - subject=None, xhtml=None, simple=False, xep0184_id=None, - displaymarking=None): + subject=None, xhtml=None, simple=False, xep0184_id=None, + displaymarking=None, msg_id=None): """ Print a line in the conversation @@ -2423,21 +2430,22 @@ class ChatControl(ChatControlBase): # ESessions if not encrypted: msg = _('The following message was NOT encrypted') - ChatControlBase.print_conversation_line(self, msg, 'status', '', - tim) + ChatControlBase.print_conversation_line(self, msg, 'status', + '', tim) else: # GPG encryption if encrypted and not self.gpg_is_active: msg = _('The following message was encrypted') - ChatControlBase.print_conversation_line(self, msg, 'status', '', - tim) - # turn on OpenPGP if this was in fact a XEP-0027 encrypted message + ChatControlBase.print_conversation_line(self, msg, 'status', + '', tim) + # turn on OpenPGP if this was in fact a XEP-0027 encrypted + # message if encrypted == 'xep27': self._toggle_gpg() elif not encrypted and self.gpg_is_active: msg = _('The following message was NOT encrypted') - ChatControlBase.print_conversation_line(self, msg, 'status', '', - tim) + ChatControlBase.print_conversation_line(self, msg, 'status', + '', tim) if not frm: kind = 'incoming' name = contact.get_shown_name() @@ -2454,8 +2462,9 @@ class ChatControl(ChatControlBase): if xhtml: xhtml = '<body xmlns="%s">%s</body>' % (NS_XHTML, xhtml) ChatControlBase.print_conversation_line(self, text, kind, name, tim, - subject=subject, old_kind=self.old_msg_kind, xhtml=xhtml, - simple=simple, xep0184_id=xep0184_id, displaymarking=displaymarking) + subject=subject, old_kind=self.old_msg_kind, xhtml=xhtml, + simple=simple, xep0184_id=xep0184_id, displaymarking=displaymarking, + msg_id=msg_id) if text.startswith('/me ') or text.startswith('/me\n'): self.old_msg_kind = None else: @@ -3238,6 +3247,36 @@ class ChatControl(ChatControlBase): b.connect('clicked', self._on_ok, file_props, type_) self._add_info_bar_message(markup, [b], file_props, gtk.MESSAGE_ERROR) + def _on_accept_gc_invitation(self, widget, event): + room_jid = event.parameters[0] + password = event.parameters[2] + is_continued = event.parameters[3] + try: + if is_continued: + gajim.interface.join_gc_room(self.account, room_jid, + gajim.nicks[self.account], password, is_continued=True) + else: + dialogs.JoinGroupchatWindow(self.account, room_jid) + except GajimGeneralException: + pass + gajim.events.remove_events(self.account, self.contact.jid, event=event) + + def _on_cancel_gc_invitation(self, widget, event): + gajim.events.remove_events(self.account, self.contact.jid, event=event) + + def _get_gc_invitation(self, event): + room_jid = event.parameters[0] + comment = event.parameters[1] + markup = '<b>%s:</b> %s' % (_('Groupchat Invitation'), room_jid) + if comment: + markup += ' (%s)' % comment + b1 = gtk.Button(_('_Join')) + b1.connect('clicked', self._on_accept_gc_invitation, event) + b2 = gtk.Button(stock=gtk.STOCK_CANCEL) + b2.connect('clicked', self._on_cancel_gc_invitation, event) + self._add_info_bar_message(markup, [b1, b2], event.parameters, + gtk.MESSAGE_QUESTION) + def on_event_added(self, event): if event.account != self.account: return @@ -3259,6 +3298,8 @@ class ChatControl(ChatControlBase): self._got_file_error(event.parameters, event.type_, _('File transfer cancelled'), _('Connection with peer cannot be established.')) + elif event.type_ == 'gc-invitation': + self._get_gc_invitation(event) def on_event_removed(self, event_list): """ @@ -3270,14 +3311,24 @@ class ChatControl(ChatControlBase): if ev.jid != self.contact.jid: continue if ev.type_ not in ('file-request', 'file-completed', 'file-error', - 'file-stopped', 'file-request-error', 'file-send-error'): + 'file-stopped', 'file-request-error', 'file-send-error', + 'gc-invitation'): continue i = 0 + removed = False for ib_msg in self.info_bar_queue: - if ib_msg[2] == ev.parameters: - self.info_bar_queue.remove(ib_msg) + if ev.type_ == 'gc-invitation': + if ev.parameters[0] == ib_msg[2][0]: + self.info_bar_queue.remove(ib_msg) + removed = True + else: # file-* + if ib_msg[2] == ev.parameters: + self.info_bar_queue.remove(ib_msg) + removed = True + if removed: if i == 0: # We are removing the one currently displayed + self.info_bar.set_no_show_all(True) self.info_bar.hide() # show next one? gobject.idle_add(self._info_bar_show_message) diff --git a/src/command_system/implementation/standard.py b/src/command_system/implementation/standard.py index 8f39e939a..af3ef675c 100644 --- a/src/command_system/implementation/standard.py +++ b/src/command_system/implementation/standard.py @@ -127,7 +127,7 @@ class StandardCommonCommands(CommandContainer): @command(raw=True, empty=True) @doc(_(""" - Set current the status + Set the current the status Status can be given as one of the following values: online, away, chat, xa, dnd. @@ -136,6 +136,11 @@ class StandardCommonCommands(CommandContainer): if status not in ('online', 'away', 'chat', 'xa', 'dnd'): raise CommandError("Invalid status given") for connection in gajim.connections.itervalues(): + if not gajim.config.get_per('accounts', connection.name, + 'sync_with_global_status'): + continue + if connection.connected < 2: + continue connection.change_status(status, message) @command(raw=True, empty=True) @@ -143,7 +148,13 @@ class StandardCommonCommands(CommandContainer): def away(self, message): if not message: message = _("Away") + for connection in gajim.connections.itervalues(): + if not gajim.config.get_per('accounts', connection.name, + 'sync_with_global_status'): + continue + if connection.connected < 2: + continue connection.change_status('away', message) @command('back', raw=True, empty=True) @@ -151,7 +162,13 @@ class StandardCommonCommands(CommandContainer): def online(self, message): if not message: message = _("Available") + for connection in gajim.connections.itervalues(): + if not gajim.config.get_per('accounts', connection.name, + 'sync_with_global_status'): + continue + if connection.connected < 2: + continue connection.change_status('online', message) class StandardCommonChatCommands(CommandContainer): @@ -213,6 +230,11 @@ class StandardCommonChatCommands(CommandContainer): state = self._video_button.get_active() self._video_button.set_active(not state) + @command(raw=True) + @doc(_("Send a message to the contact that will attract his (her) attention")) + def attention(self, message): + self.send_message(message, process_commands=False, attention=True) + class StandardChatCommands(CommandContainer): """ This command container contains standard commands which are unique diff --git a/src/common/atom.py b/src/common/atom.py index e8531274b..b642f8b52 100644 --- a/src/common/atom.py +++ b/src/common/atom.py @@ -3,7 +3,7 @@ ## ## Copyright (C) 2006 Jean-Marie Traissard <jim AT lapin.org> ## Tomasz Melcer <liori AT exroot.org> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## ## This file is part of Gajim. ## diff --git a/src/common/caps_cache.py b/src/common/caps_cache.py index c450fd3ab..33bdb6afd 100644 --- a/src/common/caps_cache.py +++ b/src/common/caps_cache.py @@ -3,7 +3,7 @@ ## ## Copyright (C) 2007 Tomasz Melcer <liori AT exroot.org> ## Travis Shirk <travis AT pobox.com> -## Copyright (C) 2007-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2007-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2008 Brendan Taylor <whateley AT gmail.com> ## Jonathan Schleifer <js-gajim AT webkeks.org> ## Copyright (C) 2008-2009 Stephan Erb <steve-e AT h3c.de> diff --git a/src/common/check_X509.py b/src/common/check_X509.py new file mode 100644 index 000000000..5a77eedcc --- /dev/null +++ b/src/common/check_X509.py @@ -0,0 +1,178 @@ +import logging +log = logging.getLogger('gajim.c.check_X509') + +try: + import OpenSSL.SSL + import OpenSSL.crypto + ver = OpenSSL.__version__ + if ver < '0.12': + raise ImportError + from pyasn1.type import univ, constraint, char, namedtype, tag + from pyasn1.codec.der.decoder import decode + from common.helpers import prep, InvalidFormat + + MAX = 64 + oid_xmppaddr = '(1, 3, 6, 1, 5, 5, 7, 8, 5)' + oid_dnssrv = '(1, 3, 6, 1, 5, 5, 7, 8, 7)' + + + + class DirectoryString(univ.Choice): + componentType = namedtype.NamedTypes( + namedtype.NamedType( + 'teletexString', char.TeletexString().subtype( + subtypeSpec=constraint.ValueSizeConstraint(1, MAX))), + namedtype.NamedType( + 'printableString', char.PrintableString().subtype( + subtypeSpec=constraint.ValueSizeConstraint(1, MAX))), + namedtype.NamedType( + 'universalString', char.UniversalString().subtype( + subtypeSpec=constraint.ValueSizeConstraint(1, MAX))), + namedtype.NamedType( + 'utf8String', char.UTF8String().subtype( + subtypeSpec=constraint.ValueSizeConstraint(1, MAX))), + namedtype.NamedType( + 'bmpString', char.BMPString().subtype( + subtypeSpec=constraint.ValueSizeConstraint(1, MAX))), + namedtype.NamedType( + 'ia5String', char.IA5String().subtype( + subtypeSpec=constraint.ValueSizeConstraint(1, MAX))), + namedtype.NamedType( + 'gString', univ.OctetString().subtype( + subtypeSpec=constraint.ValueSizeConstraint(1, MAX))), + ) + + class AttributeValue(DirectoryString): + pass + + class AttributeType(univ.ObjectIdentifier): + pass + + class AttributeTypeAndValue(univ.Sequence): + componentType = namedtype.NamedTypes( + namedtype.NamedType('type', AttributeType()), + namedtype.NamedType('value', AttributeValue()), + ) + + class RelativeDistinguishedName(univ.SetOf): + componentType = AttributeTypeAndValue() + + class RDNSequence(univ.SequenceOf): + componentType = RelativeDistinguishedName() + + class Name(univ.Choice): + componentType = namedtype.NamedTypes( + namedtype.NamedType('', RDNSequence()), + ) + + class GeneralName(univ.Choice): + componentType = namedtype.NamedTypes( + namedtype.NamedType('otherName', univ.Sequence().subtype( + implicitTag=tag.Tag(tag.tagClassContext, + tag.tagFormatConstructed, 0x0))), + namedtype.NamedType('rfc822Name', char.IA5String().subtype( + implicitTag=tag.Tag(tag.tagClassContext, + tag.tagFormatSimple, 1))), + namedtype.NamedType('dNSName', char.IA5String().subtype( + implicitTag=tag.Tag(tag.tagClassContext, + tag.tagFormatSimple, 2))), + namedtype.NamedType('x400Address', univ.Sequence().subtype( + implicitTag=tag.Tag(tag.tagClassContext, + tag.tagFormatConstructed, 0x3))), + namedtype.NamedType('directoryName', Name().subtype( + implicitTag=tag.Tag(tag.tagClassContext, + tag.tagFormatConstructed, 0x4))), + namedtype.NamedType('ediPartyName', univ.Sequence().subtype( + implicitTag=tag.Tag(tag.tagClassContext, + tag.tagFormatConstructed, 0x5))), + namedtype.NamedType('uniformResourceIdentifier', + char.IA5String().subtype( + implicitTag=tag.Tag(tag.tagClassContext, + tag.tagFormatSimple, 6))), + namedtype.NamedType('iPAddress', univ.OctetString().subtype( + implicitTag=tag.Tag(tag.tagClassContext, + tag.tagFormatSimple, 7))), + namedtype.NamedType('registeredID', univ.ObjectIdentifier().subtype( + implicitTag=tag.Tag(tag.tagClassContext, + tag.tagFormatSimple, 8))), + ) + + class GeneralNames(univ.SequenceOf): + componentType = GeneralName() + sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX) + + def _parse_asn1(asn1): + obj = decode(asn1, asn1Spec=GeneralNames())[0] + r = {} + for o in obj: + name = o.getName() + if name == 'dNSName': + if name not in r: + r[name] = [] + r[name].append(str(o.getComponent())) + if name == 'otherName': + if name not in r: + r[name] = {} + tag = str(tuple(o.getComponent())[0]) + val = str(tuple(o.getComponent())[1]) + if tag not in r[name]: + r[name][tag] = [] + r[name][tag].append(val) + if name == 'uniformResourceIdentifier': + r['uniformResourceIdentifier'] = True + return r + + def check_certificate(cert, domain): + cnt = cert.get_extension_count() + if '.' in domain: + compared_domain = domain.split('.', 1)[1] + else: + compared_domain = '' + srv_domain = '_xmpp-client.' + domain + compared_srv_domain = '_xmpp-client.' + compared_domain + for i in range(0, cnt): + ext = cert.get_extension(i) + if ext.get_short_name() == 'subjectAltName': + r = _parse_asn1(ext.get_data()) + if 'otherName' in r: + if oid_xmppaddr in r['otherName']: + for host in r['otherName'][oid_xmppaddr]: + try: + host = prep(None, host, None) + except InvalidFormat: + continue + if host == domain: + return True + if oid_dnssrv in r['otherName']: + for host in r['otherName'][oid_dnssrv]: + if host.startswith('_xmpp-client.*.'): + if host.replace('*.', '', 1) == compared_srv_domain: + return True + continue + if host == srv_domain: + return True + if 'dNSName' in r: + for host in r['dNSName']: + if host.startswith('*.'): + if host[2:] == compared_domain: + return True + continue + if host == domain: + return True + if r: + return False + break + + subject = cert.get_subject() + if subject.commonName == domain: + return True + return False +except ImportError: + log.warn('Import of PyOpenSSL or pyasn1 failed. Cannot correctly check ' + 'SSL certificate') + + def check_certificate(cert, domain): + subject = cert.get_subject() + if subject.commonName == domain: + return True + return False diff --git a/src/common/check_paths.py b/src/common/check_paths.py index 64b542bb7..3250f46a4 100644 --- a/src/common/check_paths.py +++ b/src/common/check_paths.py @@ -3,7 +3,7 @@ ## ## Copyright (C) 2005-2006 Travis Shirk <travis AT pobox.com> ## Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2005-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2005-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2006 Dimitur Kirov <dkirov AT gmail.com> ## Copyright (C) 2007 Tomasz Melcer <liori AT exroot.org> ## Copyright (C) 2008 Jean-Marie Traissard <jim AT lapin.org> diff --git a/src/common/commands.py b/src/common/commands.py index 2e831d9cb..969d0e81a 100644 --- a/src/common/commands.py +++ b/src/common/commands.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/common/commands.py ## -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2006-2007 Tomasz Melcer <liori AT exroot.org> ## Copyright (C) 2007 Jean-Marie Traissard <jim AT lapin.org> ## Copyright (C) 2008 Brendan Taylor <whateley AT gmail.com> @@ -56,10 +56,10 @@ class AdHocCommand: assert status in ('executing', 'completed', 'canceled') response = request.buildReply('result') - cmd = response.addChild('command', namespace=xmpp.NS_COMMANDS, attrs={ - 'sessionid': self.sessionid, - 'node': self.commandnode, - 'status': status}) + cmd = response.getTag('command', namespace=xmpp.NS_COMMANDS) + cmd.setAttr('sessionid', self.sessionid) + cmd.setAttr('node', self.commandnode) + cmd.setAttr('status', status) if defaultaction is not None or actions is not None: if defaultaction is not None: assert defaultaction in ('cancel', 'execute', 'prev', 'next', @@ -277,13 +277,17 @@ class ForwardMessagesCommand(AdHocCommand): def execute(self, request): account = self.connection.name # Forward messages - events = gajim.events.get_events(account, types=['chat', 'normal']) + events = gajim.events.get_events(account, types=['chat', 'normal', + 'printed_chat']) j, resource = gajim.get_room_and_nick_from_fjid(self.jid) for jid in events: for event in events[jid]: + ev_typ = event.type_ + if ev_typ == 'printed_chat': + ev_typ = 'chat' self.connection.send_message(j, event.parameters[0], '', - type_=event.type_, subject=event.parameters[1], - resource=resource, forward_from=jid, delayed=event.time_) + type_=ev_typ, subject=event.parameters[1], + resource=resource, forward_from=jid, delayed=event.time_) # Inform other client of completion response, cmd = self.buildResponse(request, status = 'completed') diff --git a/src/common/config.py b/src/common/config.py index 7de2de3e3..35078e3af 100644 --- a/src/common/config.py +++ b/src/common/config.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/common/config.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2004-2005 Vincent Hanquez <tab AT snarc.org> ## Copyright (C) 2005 Stéphan Kochen <stephan AT kochen.nl> ## Copyright (C) 2005-2006 Dimitur Kirov <dkirov AT gmail.com> @@ -65,7 +65,7 @@ class Config: DEFAULT_MAILAPP = 'mozilla-thunderbird -compose' DEFAULT_FILE_MANAGER = 'xffm' - __options = { + __options = ({ # name: [ type, default_value, help_string ] 'verbose': [ opt_bool, False, '', True ], 'autopopup': [ opt_bool, False ], @@ -99,6 +99,15 @@ class Config: 'statusmsgcolor': [ opt_color, '#4e9a06', _('Status message text color.'), True ], 'markedmsgcolor': [ opt_color, '#ff8080', '', True ], 'urlmsgcolor': [ opt_color, '#204a87', '', True ], + 'notif_signin_color': [ opt_color, '#32CD32', _('Contact signed in notification color.') ], # limegreen + 'notif_signout_color': [ opt_color, '#FF0000', _('Contact signout notification color') ], # red + 'notif_message_color': [ opt_color, '#1E90FF', _('New message/email notification color.') ], # dodgerblue + 'notif_ftrequest_color': [ opt_color, '#F0E68C', _('File transfer request notification color.') ], # khaki + 'notif_fterror_color': [ opt_color, '#B22222', _('File transfer error notification color.') ], # firebrick + 'notif_ftcomplete_color': [ opt_color, '#9ACD32', _('File transfer complete or stopped notification color.') ], # yellowgreen + 'notif_invite_color': [ opt_color, '#D2B48C', _('Groupchat invitation notification color') ], # tan1 + 'notif_status_color': [ opt_color, '#D8BFD8', _('Status changed notification background color') ], # thistle2 + 'notif_other_color': [ opt_color, '#FFFFFF', _('Other dialogs color.') ], # white 'inmsgfont': [ opt_str, '', _('Incoming nickname font.'), True ], 'outmsgfont': [ opt_str, '', _('Outgoing nickname font.'), True ], 'inmsgtxtfont': [ opt_str, '', _('Incoming text font.'), True ], @@ -169,7 +178,7 @@ class Config: 'change_roster_title': [ opt_bool, True, _('Add * and [n] in roster title?')], 'restore_lines': [opt_int, 4, _('How many lines to remember from previous conversation when a chat tab/window is reopened.')], 'restore_timeout': [opt_int, 60, _('How many minutes should last lines from previous conversation last.')], - 'muc_restore_lines': [opt_int, 20, _('How many lines to request to server when entering a groupchat. -1 means no limit')], + 'muc_restore_lines': [opt_int, 20, _('How many lines to request from server when entering a groupchat. -1 means no limit')], 'muc_restore_timeout': [opt_int, 60, _('How many minutes back to request logs when a entering a groupchat. -1 means no limit')], 'muc_autorejoin_timeout': [opt_int, 1, _('How many seconds to wait before trying to autorejoin to a conference you are being disconnected from. Set to 0 to disable autorejoining.')], 'muc_autorejoin_on_kick': [opt_bool, False, _('Should autorejoin be activated when we are being kicked from a conference?')], @@ -291,7 +300,8 @@ class Config: 'stun_server': [opt_str, '', _('STUN server to use when using jingle')], 'show_affiliation_in_groupchat': [opt_bool, True, _('If True, Gajim will show affiliation of groupchat occupants by adding a colored square to the status icon')], 'global_proxy': [opt_str, '', _('Proxy used for all outgoing connections if the account does not have a specific proxy configured')], - } + 'ignore_incoming_attention': [opt_bool, False, _('If True, Gajim will ignore incoming attention requestd ("wizz").')], + }, {}) __options_per_key = { 'accounts': ({ @@ -386,7 +396,7 @@ class Config: 'ft_send_local_ips': [ opt_bool, True, _('If enabled, Gajim will send your local IPs so your contact can connect to your machine to transfer files.')], 'oauth2_refresh_token': [ opt_str, '', _('Latest token for Oauth2 authentication.')], 'oauth2_client_id': [ opt_str, '0000000044077801', _('client_id for Oauth2 authentication.')], - 'oauth2_redirect_url': [ opt_str, 'http%3A%2F%2Fgajim.org%2Fmsnauth%2Findex.cgi', _('redirect_url for Oauth2 authentication.')], + 'oauth2_redirect_url': [ opt_str, 'https%3A%2F%2Fgajim.org%2Fmsnauth%2Findex.cgi', _('redirect_url for Oauth2 authentication.')], }, {}), 'statusmsg': ({ 'message': [ opt_str, '' ], @@ -456,7 +466,7 @@ class Config: 'speller_language': [ opt_str, '', _('Language for which we want to check misspelled words')], }, {}), 'plugins': ({ - 'active': [opt_bool, False, _('State whether plugins should be activated on exit (this is saved on Gajim exit). This option SHOULD NOT be used to (de)activate plug-ins. Use GUI instead.')], + 'active': [opt_bool, False, _('State whether plugins should be activated on startup (this is saved on Gajim exit). This option SHOULD NOT be used to (de)activate plug-ins. Use GUI instead.')], },{}), } @@ -488,6 +498,7 @@ class Config: } soundevents_default = { + 'attention_received': [True, 'attention.wav'], 'first_message_received': [ True, 'message1.wav' ], 'next_message_received_focused': [ True, 'message2.wav' ], 'next_message_received_unfocused': [ True, 'message2.wav' ], @@ -526,9 +537,9 @@ class Config: _('Tor'): ['socks5', 'localhost', 9050], } - def foreach(self, cb, data = None): - for opt in self.__options: - cb(data, opt, None, self.__options[opt]) + def foreach(self, cb, data=None): + for opt in self.__options[1]: + cb(data, opt, None, self.__options[1][opt]) for opt in self.__options_per_key: cb(data, opt, None, None) dict_ = self.__options_per_key[opt][1] @@ -542,7 +553,7 @@ class Config: Tree-like interface """ if node is None: - for child, option in self.__options.iteritems(): + for child, option in self.__options[1].iteritems(): yield (child, ), option for grandparent in self.__options_per_key: yield (grandparent, ), None @@ -598,35 +609,44 @@ class Config: return None def set(self, optname, value): - if optname not in self.__options: + if optname not in self.__options[1]: # raise RuntimeError, 'option %s does not exist' % optname return - opt = self.__options[optname] - value = self.is_valid(opt[OPT_TYPE], value) + value = self.is_valid(self.__options[0][optname][OPT_TYPE], value) if value is None: # raise RuntimeError, 'value of %s cannot be None' % optname return - opt[OPT_VAL] = value + self.__options[1][optname] = value - def get(self, optname = None): + def get(self, optname=None): if not optname: - return self.__options.keys() - if optname not in self.__options: + return self.__options[1].keys() + if optname not in self.__options[1]: + return None + return self.__options[1][optname] + + def get_default(self, optname): + if optname not in self.__options[0]: + return None + return self.__options[0][optname][OPT_VAL] + + def get_type(self, optname): + if optname not in self.__options[0]: return None - return self.__options[optname][OPT_VAL] + return self.__options[0][optname][OPT_TYPE][0] def get_desc(self, optname): - if optname not in self.__options: + if optname not in self.__options[0]: return None - if len(self.__options[optname]) > OPT_DESC: - return self.__options[optname][OPT_DESC] + if len(self.__options[0][optname]) > OPT_DESC: + return self.__options[0][optname][OPT_DESC] def get_restart(self, optname): - if optname not in self.__options: + if optname not in self.__options[0]: return None - if len(self.__options[optname]) > OPT_RESTART: - return self.__options[optname][OPT_RESTART] + if len(self.__options[0][optname]) > OPT_RESTART: + return self.__options[0][optname][OPT_RESTART] def add_per(self, typename, name): # per_group_of_option if typename not in self.__options_per_key: @@ -637,7 +657,9 @@ class Config: if name in opt[1]: # we already have added group name before return 'you already have added %s before' % name - opt[1][name] = copy.deepcopy(opt[0]) + opt[1][name] = {} + for o in opt[0]: + opt[1][name][o] = opt[0][o][OPT_VAL] def del_per(self, typename, name, subname = None): # per_group_of_option if typename not in self.__options_per_key: @@ -665,36 +687,50 @@ class Config: if subname not in obj: # raise RuntimeError, '%s is not a key of %s' % (subname, obj) return - subobj = obj[subname] - value = self.is_valid(subobj[OPT_TYPE], value) + typ = self.__options_per_key[optname][0][subname][OPT_TYPE] + value = self.is_valid(typ, value) if value is None: # raise RuntimeError, '%s of %s cannot be None' % optname return - subobj[OPT_VAL] = value + obj[subname] = value - def get_per(self, optname, key = None, subname = None): # per_group_of_option + def get_per(self, optname, key=None, subname=None): # per_group_of_option if optname not in self.__options_per_key: return None dict_ = self.__options_per_key[optname][1] if not key: return dict_.keys() if key not in dict_: - if optname in self.__options_per_key \ - and subname in self.__options_per_key[optname][0]: - return self.__options_per_key \ - [optname][0][subname][1] + if subname in self.__options_per_key[optname][0]: + return self.__options_per_key[optname][0][subname][1] return None obj = dict_[key] if not subname: return obj if subname not in obj: return None - return obj[subname][OPT_VAL] + return obj[subname] - def get_desc_per(self, optname, key = None, subname = None): + def get_default_per(self, optname, subname): if optname not in self.__options_per_key: return None - dict_ = self.__options_per_key[optname][1] + dict_ = self.__options_per_key[optname][0] + if subname not in dict_: + return None + return dict_[subname][OPT_VAL] + + def get_type_per(self, optname, subname): + if optname not in self.__options_per_key: + return None + dict_ = self.__options_per_key[optname][0] + if subname not in dict_: + return None + return dict_[subname][OPT_TYPE][0] + + def get_desc_per(self, optname, key=None, subname=None): + if optname not in self.__options_per_key: + return None + dict_ = self.__options_per_key[optname][0] if not key: return None if key not in dict_: @@ -708,10 +744,10 @@ class Config: return obj[subname][OPT_DESC] return None - def get_restart_per(self, optname, key = None, subname = None): + def get_restart_per(self, optname, key=None, subname=None): if optname not in self.__options_per_key: return False - dict_ = self.__options_per_key[optname][1] + dict_ = self.__options_per_key[optname][0] if not key: return False if key not in dict_: @@ -738,8 +774,13 @@ class Config: return (account not in no_log_for) and (jid not in no_log_for) + def _init_options(self): + for opt in self.__options[0]: + self.__options[1][opt] = self.__options[0][opt][OPT_VAL] + def __init__(self): #init default values + self._init_options() for event in self.soundevents_default: default = self.soundevents_default[event] self.add_per('soundevents', event) diff --git a/src/common/configpaths.py b/src/common/configpaths.py index 43ec05b9e..93c2b996b 100644 --- a/src/common/configpaths.py +++ b/src/common/configpaths.py @@ -3,7 +3,7 @@ ## ## Copyright (C) 2006 Jean-Marie Traissard <jim AT lapin.org> ## Junglecow J <junglecow AT gmail.com> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2007 Brendan Taylor <whateley AT gmail.com> ## Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org> ## diff --git a/src/common/connection.py b/src/common/connection.py index 2eaf4a2dc..4359fffff 100644 --- a/src/common/connection.py +++ b/src/common/connection.py @@ -2,7 +2,7 @@ ## src/common/connection.py ## ## Copyright (C) 2003-2005 Vincent Hanquez <tab AT snarc.org> -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005 Alex Mauer <hawke AT hawkesnest.net> ## Stéphan Kochen <stephan AT kochen.nl> ## Copyright (C) 2005-2006 Dimitur Kirov <dkirov AT gmail.com> @@ -58,6 +58,7 @@ from common import gajim from common import gpg from common import passwords from common import exceptions +from common import check_X509 from connection_handlers import * from xmpp import Smacks @@ -98,6 +99,7 @@ ssl_error = { 31: _("Authority and issuer serial number mismatch"), 32: _("Key usage does not include certificate signing"), 50: _("Application verification failure") +#100 is for internal usage: host not correct } class CommonConnection: @@ -251,7 +253,7 @@ class CommonConnection: def _prepare_message(self, jid, msg, keyID, type_='chat', subject='', chatstate=None, msg_id=None, resource=None, user_nick=None, xhtml=None, session=None, forward_from=None, form_node=None, label=None, - original_message=None, delayed=None, callback=None): + original_message=None, delayed=None, attention=False, callback=None): if not self.connection or self.connected < 2: return 1 try: @@ -302,7 +304,8 @@ class CommonConnection: msgtxt, original_message, fjid, resource, jid, xhtml, subject, chatstate, msg_id, label, forward_from, delayed, session, - form_node, user_nick, keyID, callback) + form_node, user_nick, keyID, attention, + callback) gajim.nec.push_incoming_event(GPGTrustKeyEvent(None, conn=self, callback=_on_always_trust)) else: @@ -310,7 +313,7 @@ class CommonConnection: original_message, fjid, resource, jid, xhtml, subject, chatstate, msg_id, label, forward_from, delayed, session, form_node, user_nick, keyID, - callback) + attention, callback) gajim.thread_interface(encrypt_thread, [msg, keyID, False], _on_encrypted, []) return @@ -318,18 +321,18 @@ class CommonConnection: self._message_encrypted_cb(('', error), type_, msg, msgtxt, original_message, fjid, resource, jid, xhtml, subject, chatstate, msg_id, label, forward_from, delayed, session, - form_node, user_nick, keyID, callback) + form_node, user_nick, keyID, attention, callback) return self._on_continue_message(type_, msg, msgtxt, original_message, fjid, resource, jid, xhtml, subject, msgenc, keyID, chatstate, msg_id, label, forward_from, delayed, session, form_node, user_nick, - callback) + attention, callback) def _message_encrypted_cb(self, output, type_, msg, msgtxt, original_message, fjid, resource, jid, xhtml, subject, chatstate, msg_id, label, forward_from, delayed, session, form_node, user_nick, keyID, - callback): + attention, callback): msgenc, error = output if msgenc and not error: @@ -342,7 +345,7 @@ class CommonConnection: self._on_continue_message(type_, msg, msgtxt, original_message, fjid, resource, jid, xhtml, subject, msgenc, keyID, chatstate, msg_id, label, forward_from, delayed, session, - form_node, user_nick, callback) + form_node, user_nick, attention, callback) return # Encryption failed, do not send message tim = localtime() @@ -351,7 +354,8 @@ class CommonConnection: def _on_continue_message(self, type_, msg, msgtxt, original_message, fjid, resource, jid, xhtml, subject, msgenc, keyID, chatstate, msg_id, - label, forward_from, delayed, session, form_node, user_nick, callback): + label, forward_from, delayed, session, form_node, user_nick, attention, + callback): if type_ == 'chat': msg_iq = common.xmpp.Message(to=fjid, body=msgtxt, typ=type_, xhtml=xhtml) @@ -422,6 +426,10 @@ class CommonConnection: if session.enable_encryption: msg_iq = session.encrypt_stanza(msg_iq) + # XEP-0224 + if attention: + msg_iq.setTag('attention', namespace=common.xmpp.NS_ATTENTION) + if callback: callback(jid, msg, keyID, forward_from, session, original_message, subject, type_, msg_iq, xhtml) @@ -808,6 +816,10 @@ class Connection(CommonConnection, ConnectionHandlers): if not (self.sm and self.sm.resumption): gajim.nec.push_incoming_event(OurShowEvent(None, conn=self, show='offline')) + else: + self.sm.enabled = False + gajim.nec.push_incoming_event(OurShowEvent(None, conn=self, + show='error')) self.disconnect() if gajim.config.get_per('accounts', self.name, 'autoreconnect'): self.connected = -1 @@ -1012,7 +1024,7 @@ class Connection(CommonConnection, ConnectionHandlers): proxy = {} proxyptr = gajim.config.get_per('proxies', p) for key in proxyptr.keys(): - proxy[key] = proxyptr[key][1] + proxy[key] = proxyptr[key] else: proxy = None use_srv = True @@ -1276,9 +1288,9 @@ class Connection(CommonConnection, ConnectionHandlers): except AttributeError: errnum = -1 # we don't have an errnum if errnum > 0 and str(errnum) not in gajim.config.get_per('accounts', - self.name, 'ignore_ssl_errors'): - text = _('The authenticity of the %s certificate could be invalid.') %\ - hostname + self.name, 'ignore_ssl_errors').split(): + text = _('The authenticity of the %s certificate could be invalid.' + ) % hostname if errnum in ssl_error: text += _('\nSSL Error: <b>%s</b>') % ssl_error[errnum] else: @@ -1290,7 +1302,8 @@ class Connection(CommonConnection, ConnectionHandlers): certificate=con.Connection.ssl_certificate)) return True if hasattr(con.Connection, 'ssl_fingerprint_sha1'): - saved_fingerprint = gajim.config.get_per('accounts', self.name, 'ssl_fingerprint_sha1') + saved_fingerprint = gajim.config.get_per('accounts', self.name, + 'ssl_fingerprint_sha1') if saved_fingerprint: # Check sha1 fingerprint if con.Connection.ssl_fingerprint_sha1 != saved_fingerprint: @@ -1299,15 +1312,24 @@ class Connection(CommonConnection, ConnectionHandlers): new_fingerprint=con.Connection.ssl_fingerprint_sha1)) return True else: - gajim.config.set_per('accounts', self.name, 'ssl_fingerprint_sha1', - con.Connection.ssl_fingerprint_sha1) + gajim.config.set_per('accounts', self.name, + 'ssl_fingerprint_sha1', con.Connection.ssl_fingerprint_sha1) + if not check_X509.check_certificate(con.Connection.ssl_certificate, + hostname) and '100' not in gajim.config.get_per('accounts', + self.name, 'ignore_ssl_errors').split(): + txt = _('The authenticity of the %s certificate could be ' + 'invalid.\nThe certificate does not cover this domain.') % \ + hostname + gajim.nec.push_incoming_event(SSLErrorEvent(None, conn=self, + error_text=txt, error_num=100, + cert=con.Connection.ssl_cert_pem, + fingerprint=con.Connection.ssl_fingerprint_sha1, + certificate=con.Connection.ssl_certificate)) + return True + self._register_handlers(con, con_type) - con.auth( - user=name, - password=self.password, - resource=self.server_resource, - sasl=1, - on_auth=self.__on_auth) + con.auth(user=name, password=self.password, + resource=self.server_resource, sasl=1, on_auth=self.__on_auth) def ssl_certificate_accepted(self): if not self.connection: @@ -1317,7 +1339,10 @@ class Connection(CommonConnection, ConnectionHandlers): msg=_('Connection with account %s has been lost. Retry ' 'connecting.') % self.name)) return - name = gajim.config.get_per('accounts', self.name, 'name') + if gajim.config.get_per('accounts', self.name, 'anonymous_auth'): + name = None + else: + name = gajim.config.get_per('accounts', self.name, 'name') self._register_handlers(self.connection, 'ssl') self.connection.auth(name, self.password, self.server_resource, 1, self.__on_auth) @@ -1372,7 +1397,7 @@ class Connection(CommonConnection, ConnectionHandlers): gajim.nec.push_incoming_event(InformationEvent(None, conn=self, level='error', pri_txt=_('Authentication failed with "%s"') % \ self._hostname, sec_txt=_('Please check your login and password' - 'for correctness.'))) + ' for correctness.'))) if self.on_connect_auth: self.on_connect_auth(None) self.on_connect_auth = None @@ -1449,7 +1474,7 @@ class Connection(CommonConnection, ConnectionHandlers): level='error', pri_txt=_('Error while removing privacy ' 'list'), sec_txt=_('Privacy list %s has not been removed. ' 'It is maybe active in one of your connected resources. ' - 'Deactivate it and tryagain.') % privacy_list)) + 'Deactivate it and try again.') % privacy_list)) common.xmpp.features_nb.delPrivacyList(self.connection, privacy_list, _on_del_privacy_list_result) @@ -1775,8 +1800,8 @@ class Connection(CommonConnection, ConnectionHandlers): def send_message(self, jid, msg, keyID=None, type_='chat', subject='', chatstate=None, msg_id=None, resource=None, user_nick=None, xhtml=None, label=None, session=None, forward_from=None, form_node=None, - original_message=None, delayed=None, callback=None, callback_args=[], - now=False): + original_message=None, delayed=None, attention=False, callback=None, + callback_args=[], now=False): def cb(jid, msg, keyID, forward_from, session, original_message, subject, type_, msg_iq, xhtml): @@ -1794,7 +1819,8 @@ class Connection(CommonConnection, ConnectionHandlers): chatstate=chatstate, msg_id=msg_id, resource=resource, user_nick=user_nick, xhtml=xhtml, label=label, session=session, forward_from=forward_from, form_node=form_node, - original_message=original_message, delayed=delayed, callback=cb) + original_message=original_message, delayed=delayed, + attention=attention, callback=cb) def _nec_message_outgoing(self, obj): if obj.account != self.name: @@ -1819,7 +1845,7 @@ class Connection(CommonConnection, ConnectionHandlers): resource=obj.resource, user_nick=obj.user_nick, xhtml=obj.xhtml, label=obj.label, session=obj.session, forward_from=obj.forward_from, form_node=obj.form_node, original_message=obj.original_message, - delayed=obj.delayed, callback=cb) + delayed=obj.delayed, attention=obj.attention, callback=cb) def send_contacts(self, contacts, jid): """ @@ -2289,7 +2315,8 @@ class Connection(CommonConnection, ConnectionHandlers): room_id=resp.getTag('unique').getData())) self.connection.SendAndCallForResponse(iq, _on_response) - def join_gc(self, nick, room_jid, password, change_nick=False): + def join_gc(self, nick, room_jid, password, change_nick=False, + rejoin=False): # FIXME: This room JID needs to be normalized; see #1364 if not gajim.account_is_connected(self.name): return @@ -2333,7 +2360,7 @@ class Connection(CommonConnection, ConnectionHandlers): last_date = self.last_history_time[room_jid] if last_date == 0: last_date = time.time() - timeout - else: + elif not rejoin: last_date = min(last_date, time.time() - timeout) last_date = time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime( last_date)) diff --git a/src/common/connection_handlers.py b/src/common/connection_handlers.py index 61f771fae..8a537e15e 100644 --- a/src/common/connection_handlers.py +++ b/src/common/connection_handlers.py @@ -6,7 +6,7 @@ ## Copyright (C) 2006-2007 Tomasz Melcer <liori AT exroot.org> ## Travis Shirk <travis AT pobox.com> ## Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2007 Julien Pivotto <roidelapluie AT gmail.com> ## Copyright (C) 2007-2008 Brendan Taylor <whateley AT gmail.com> ## Jean-Marie Traissard <jim AT lapin.org> @@ -869,7 +869,7 @@ class ConnectionHandlersBase: elif obj.contact.show in statuss: obj.old_show = statuss.index(obj.contact.show) if (resources != [''] and (len(obj.contact_list) != 1 or \ - obj.contact_list[0].show != 'offline')) and \ + obj.contact_list[0].show not in ('not in roster', 'offline'))) and \ not gajim.jid_is_transport(jid): # Another resource of an existing contact connected obj.old_show = 0 @@ -897,7 +897,13 @@ class ConnectionHandlersBase: obj.contact.show = obj.show obj.contact.status = obj.status obj.contact.priority = obj.prio - obj.contact.keyID = obj.keyID + attached_keys = gajim.config.get_per('accounts', account, + 'attached_gpg_keys').split() + if jid in attached_keys: + obj.contact.keyID = attached_keys[attached_keys.index(jid) + 1] + else: + # Do not override assigned key + obj.contact.keyID = obj.keyID if obj.timestamp: obj.contact.last_status_time = obj.timestamp elif not gajim.block_signed_in_notifications[account]: diff --git a/src/common/connection_handlers_events.py b/src/common/connection_handlers_events.py index e03a610f7..d08783817 100644 --- a/src/common/connection_handlers_events.py +++ b/src/common/connection_handlers_events.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/common/connection_handlers_events.py ## -## Copyright (C) 2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2010-2012 Yann Leboulanger <asterix AT lagaule.org> ## ## This file is part of Gajim. ## @@ -1017,15 +1017,20 @@ class MessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent): return self.jid = gajim.get_jid_without_resource(self.fjid) - forward_tag = self.stanza.getTag('forwarded', namespace=xmpp.NS_FORWARD) + carbon_marker = self.stanza.getTag('sent', namespace=xmpp.NS_CARBONS) + if not carbon_marker: + carbon_marker = self.stanza.getTag('received', namespace=xmpp.NS_CARBONS) # Be sure it comes from one of our resource, else ignore forward element - if forward_tag and self.jid == gajim.get_jid_from_account(account): - received_tag = forward_tag.getTag('received', - namespace=xmpp.NS_CARBONS) - sent_tag = forward_tag.getTag('sent', namespace=xmpp.NS_CARBONS) - if received_tag: + if carbon_marker and self.jid == gajim.get_jid_from_account(account): + forward_tag = self.stanza.getTag('forwarded', namespace=xmpp.NS_FORWARD) + if forward_tag: msg = forward_tag.getTag('message') self.stanza = xmpp.Message(node=msg) + if carbon_marker.getName() == 'sent': + to = self.stanza.getTo() + self.stanza.setTo(self.stanza.getFrom()) + self.stanza.setFrom(to) + self.sent = True try: self.get_jid_resource() except helpers.InvalidFormat: @@ -1036,23 +1041,6 @@ class MessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent): 'has been ignored.'))) return self.forwarded = True - elif sent_tag: - msg = forward_tag.getTag('message') - self.stanza = xmpp.Message(node=msg) - to = self.stanza.getTo() - self.stanza.setTo(self.stanza.getFrom()) - self.stanza.setFrom(to) - try: - self.get_jid_resource() - except helpers.InvalidFormat: - gajim.nec.push_incoming_event(InformationEvent(None, - conn=self.conn, level='error', - pri_txt=_('Invalid Jabber ID'), - sec_txt=_('A message from a non-valid JID arrived, it ' - 'has been ignored.'))) - return - self.forwarded = True - self.sent = True self.enc_tag = self.stanza.getTag('x', namespace=xmpp.NS_ENCRYPTED) @@ -1205,6 +1193,7 @@ class DecryptedMessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent): self.sent = self.msg_obj.sent self.popup = False self.msg_id = None # id in log database + self.attention = False # XEP-0224 self.receipt_request_tag = self.stanza.getTag('request', namespace=xmpp.NS_RECEIPTS) @@ -1219,6 +1208,9 @@ class DecryptedMessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent): if self.seclabel: self.displaymarking = self.seclabel.getTag('displaymarking') + if self.stanza.getTag('attention', namespace=xmpp.NS_ATTENTION): + self.attention = True + self.form_node = self.stanza.getTag('x', namespace=xmpp.NS_DATA) if gajim.config.get('ignore_incoming_xhtml'): @@ -1293,6 +1285,8 @@ class GcMessageReceivedEvent(nec.NetworkIncomingEvent): if self.status_code != []: gajim.nec.push_incoming_event(GcConfigChangedReceivedEvent( None, conn=self.conn, msg_event=self)) + if self.msg_obj.form_node: + return True return self.displaymarking = None @@ -2123,7 +2117,19 @@ class NotificationEvent(nec.NetworkIncomingEvent): # we're online or chat self.do_popup = True - if self.first_unread and helpers.allow_sound_notification( + if msg_obj.attention and not gajim.config.get( + 'ignore_incoming_attention'): + self.popup_timeout = 0 + self.do_popup = True + else: + self.popup_timeout = gajim.config.get('notification_timeout') + + if msg_obj.attention and not gajim.config.get( + 'ignore_incoming_attention') and gajim.config.get_per('soundevents', + 'attention_received', 'enabled'): + self.sound_event = 'attention_received' + self.do_sound = True + elif self.first_unread and helpers.allow_sound_notification( self.conn.name, 'first_message_received'): self.do_sound = True elif not self.first_unread and self.control_focused and \ @@ -2236,6 +2242,8 @@ class NotificationEvent(nec.NetworkIncomingEvent): self.popup_image = gtkgui_helpers.get_path_to_generic_or_avatar( img_path, jid=self.jid, suffix=suffix) + self.popup_timeout = gajim.config.get('notification_timeout') + if event == 'status_change': self.popup_title = _('%(nick)s Changed Status') % \ {'nick': gajim.get_name_from_jid(account, self.jid)} @@ -2280,6 +2288,7 @@ class NotificationEvent(nec.NetworkIncomingEvent): self.popup_event_type = '' self.popup_msg_type = '' self.popup_image = '' + self.popup_timeout = -1 self.do_command = False self.command = '' @@ -2322,6 +2331,7 @@ class MessageOutgoingEvent(nec.NetworkOutgoingEvent): self.now = False self.is_loggable = True self.control = None + self.attention = False def generate(self): return True diff --git a/src/common/contacts.py b/src/common/contacts.py index 8ddce5b45..b23e5a6cd 100644 --- a/src/common/contacts.py +++ b/src/common/contacts.py @@ -4,7 +4,7 @@ ## Copyright (C) 2006 Dimitur Kirov <dkirov AT gmail.com> ## Travis Shirk <travis AT pobox.com> ## Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Jean-Marie Traissard <jim AT lapin.org> ## Copyright (C) 2007 Lukas Petrovicky <lukas AT petrovicky.net> ## Tomasz Melcer <liori AT exroot.org> diff --git a/src/common/dataforms.py b/src/common/dataforms.py index 8cc5cc2b9..ca7ae513d 100644 --- a/src/common/dataforms.py +++ b/src/common/dataforms.py @@ -3,7 +3,7 @@ ## src/common/dataforms.py ## ## Copyright (C) 2006-2007 Tomasz Melcer <liori AT exroot.org> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2007 Stephan Erb <steve-e AT h3c.de> ## ## This file is part of Gajim. diff --git a/src/common/dbus_support.py b/src/common/dbus_support.py index 389c16f18..6cc90102b 100644 --- a/src/common/dbus_support.py +++ b/src/common/dbus_support.py @@ -4,7 +4,7 @@ ## Copyright (C) 2005 Andrew Sayman <lorien420 AT myrealbox.com> ## Dimitur Kirov <dkirov AT gmail.com> ## Copyright (C) 2005-2006 Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2005-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2005-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2006 Jean-Marie Traissard <jim AT lapin.org> ## Stefan Bethge <stefan AT lanpartei.de> ## Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org> diff --git a/src/common/defs.py b/src/common/defs.py index 6aa68c52d..7172021ca 100644 --- a/src/common/defs.py +++ b/src/common/defs.py @@ -2,7 +2,7 @@ ## src/common/defs.py ## ## Copyright (C) 2006 Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2006-2008 Jean-Marie Traissard <jim AT lapin.org> ## Copyright (C) 2007 Brendan Taylor <whateley AT gmail.com> ## Tomasz Melcer <liori AT exroot.org> @@ -27,12 +27,13 @@ docdir = '../' basedir = '../' localedir = '../po' -version = '0.15-beta3' +version = '0.15' import subprocess try: node = subprocess.Popen('hg tip --template "{node|short}"', shell=True, stdout=subprocess.PIPE).communicate()[0] - version += '-' + node + if node: + version += '-' + node except Exception: pass diff --git a/src/common/demandimport.py b/src/common/demandimport.py index 41ef3fa5c..e4394876f 100644 --- a/src/common/demandimport.py +++ b/src/common/demandimport.py @@ -27,6 +27,17 @@ These imports will not be delayed: import __builtin__ _origimport = __import__ +nothing = object() + +try: + _origimport(__builtin__.__name__, {}, {}, None, -1) +except TypeError: # no level argument + def _import(name, globals, locals, fromlist, level): + "call _origimport with no level argument" + return _origimport(name, globals, locals, fromlist) +else: + _import = _origimport + class _demandmod(object): """module demand-loader and proxy""" def __init__(self, name, globals, locals): @@ -50,7 +61,7 @@ class _demandmod(object): h, t = p, None if '.' in p: h, t = p.split('.', 1) - if not hasattr(mod, h): + if getattr(mod, h, nothing) is nothing: setattr(mod, h, _demandmod(p, mod.__dict__, mod.__dict__)) elif t: subload(getattr(mod, h), t) @@ -78,20 +89,17 @@ class _demandmod(object): self._load() setattr(self._module, attr, val) -def _demandimport(name, globals=None, locals=None, fromlist=None, level=None): +def _demandimport(name, globals=None, locals=None, fromlist=None, level=-1): if not locals or name in ignore or fromlist == ('*',): # these cases we can't really delay - if level is None: - return _origimport(name, globals, locals, fromlist) - else: - return _origimport(name, globals, locals, fromlist, level) + return _import(name, globals, locals, fromlist, level) elif not fromlist: # import a [as b] if '.' in name: # a.b base, rest = name.split('.', 1) # email.__init__ loading email.mime if globals and globals.get('__name__', None) == base: - return _origimport(name, globals, locals, fromlist) + return _import(name, globals, locals, fromlist, level) # if a is already demand-loaded, add b to its submodule list if base in locals: if isinstance(locals[base], _demandmod): @@ -99,19 +107,19 @@ def _demandimport(name, globals=None, locals=None, fromlist=None, level=None): return locals[base] return _demandmod(name, globals, locals) else: - if level is not None: + if level != -1: # from . import b,c,d or from .a import b,c,d return _origimport(name, globals, locals, fromlist, level) # from a import b,c,d mod = _origimport(name, globals, locals) # recurse down the module chain for comp in name.split('.')[1:]: - if not hasattr(mod, comp): + if getattr(mod, comp, nothing) is nothing: setattr(mod, comp, _demandmod(comp, mod.__dict__, mod.__dict__)) mod = getattr(mod, comp) for x in fromlist: # set requested submodules for demand load - if not hasattr(mod, x): + if getattr(mod, x, nothing) is nothing: setattr(mod, x, _demandmod(x, mod.__dict__, locals)) return mod @@ -134,6 +142,8 @@ ignore = [ # raise ImportError if x not defined '__main__', '_ssl', # conditional imports in the stdlib, issue1964 + 'rfc822', + 'mimetools', ] def enable(): diff --git a/src/common/dh.py b/src/common/dh.py index 827d87806..e482e1589 100644 --- a/src/common/dh.py +++ b/src/common/dh.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/common/dh.py ## -## Copyright (C) 2007-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2007-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2008 Brendan Taylor <whateley AT gmail.com> ## ## This file is part of Gajim. diff --git a/src/common/events.py b/src/common/events.py index cdfcbde7a..b1909a49c 100644 --- a/src/common/events.py +++ b/src/common/events.py @@ -3,7 +3,7 @@ ## ## Copyright (C) 2006 Jean-Marie Traissard <jim AT lapin.org> ## Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2007 Julien Pivotto <roidelapluie AT gmail.com> ## Copyright (C) 2007-2008 Stephan Erb <steve-e AT h3c.de> ## Copyright (C) 2008 Brendan Taylor <whateley AT gmail.com> @@ -45,7 +45,7 @@ class Event: where kind in error, incoming file-*: file_props gc_msg: None - printed_chat: control + printed_chat: [message, subject, control, msg_id] printed_*: None messages that are already printed in chat, but not read gc-invitation: [room_jid, reason, password, is_continued] diff --git a/src/common/exceptions.py b/src/common/exceptions.py index de8c3309d..3bc6b3643 100644 --- a/src/common/exceptions.py +++ b/src/common/exceptions.py @@ -2,7 +2,7 @@ ## src/common/exceptions.py ## ## Copyright (C) 2005-2006 Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2005-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2005-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2006 Jean-Marie Traissard <jim AT lapin.org> ## Copyright (C) 2007 Brendan Taylor <whateley AT gmail.com> ## diff --git a/src/common/fuzzyclock.py b/src/common/fuzzyclock.py index e997ec6bf..242c9da18 100755 --- a/src/common/fuzzyclock.py +++ b/src/common/fuzzyclock.py @@ -2,7 +2,7 @@ ## src/common/fuzzyclock.py ## ## Copyright (C) 2006 Christoph Neuroth <delmonico AT gmx.net> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2007 Jean-Marie Traissard <jim AT lapin.org> ## Copyright (C) 2009 Benjamin Richter <br AT waldteufel-online.net> ## diff --git a/src/common/gajim.py b/src/common/gajim.py index 6face0fbf..1a1c84e83 100644 --- a/src/common/gajim.py +++ b/src/common/gajim.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/common/gajim.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005-2006 Dimitur Kirov <dkirov AT gmail.com> ## Travis Shirk <travis AT pobox.com> ## Nikos Kouremenos <kourem AT gmail.com> @@ -171,21 +171,21 @@ else: # read. HAVE_LATEX = False -HAVE_FARSIGHT = True +HAVE_FARSTREAM = True try: - farsight = __import__('farsight') + farstream = __import__('farstream') import gst import glib try: conference = gst.element_factory_make('fsrtpconference') - session = conference.new_session(farsight.MEDIA_TYPE_AUDIO) + session = conference.new_session(farstream.MEDIA_TYPE_AUDIO) del session del conference except glib.GError: - HAVE_FARSIGHT = False + HAVE_FARSTREAM = False except ImportError: - HAVE_FARSIGHT = False + HAVE_FARSTREAM = False HAVE_UPNP_IGD = True try: diff --git a/src/common/ged.py b/src/common/ged.py index 72920f05e..0d8766c1f 100644 --- a/src/common/ged.py +++ b/src/common/ged.py @@ -27,6 +27,7 @@ Global Events Dispatcher module. import traceback +from common.xmpp import NodeProcessed import logging log = logging.getLogger('gajim.c.ged') @@ -86,11 +87,16 @@ class GlobalEventsDispatcher(object): def raise_event(self, event_name, *args, **kwargs): log.debug('%s\nArgs: %s'%(event_name, str(args))) if event_name in self.handlers: + node_processed = False for priority, handler in self.handlers[event_name]: try: if handler(*args, **kwargs): return True + except NodeProcessed: + node_processed = True except Exception, e: log.error('Error while running an even handler: %s' % \ handler) traceback.print_exc() + if node_processed: + raise NodeProcessed diff --git a/src/common/gnupg.py b/src/common/gnupg.py index e3bed526e..f5c703414 100644 --- a/src/common/gnupg.py +++ b/src/common/gnupg.py @@ -962,7 +962,7 @@ class Sign(object): def handle_status(self, key, value): if key in ("USERID_HINT", "NEED_PASSPHRASE", "BAD_PASSPHRASE", - "GOOD_PASSPHRASE", "BEGIN_SIGNING"): + "GOOD_PASSPHRASE", "BEGIN_SIGNING", "MISSING_PASSPHRASE"): pass elif key == "SIG_CREATED": (self.type, diff --git a/src/common/gpg.py b/src/common/gpg.py index 81272569e..7e78fdc0b 100644 --- a/src/common/gpg.py +++ b/src/common/gpg.py @@ -1,6 +1,6 @@ ## src/common/gpg.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005 Alex Mauer <hawke AT hawkesnest.net> ## Copyright (C) 2005-2006 Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2007 Stephan Erb <steve-e AT h3c.de> diff --git a/src/common/helpers.py b/src/common/helpers.py index e4deb3ee6..a4ce133f3 100644 --- a/src/common/helpers.py +++ b/src/common/helpers.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/common/helpers.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005-2006 Dimitur Kirov <dkirov AT gmail.com> ## Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2006 Alex Mauer <hawke AT hawkesnest.net> @@ -1330,7 +1330,7 @@ def update_optional_features(account = None): gajim.gajim_optional_features[a].append(xmpp.NS_ESESSION) if gajim.config.get_per('accounts', a, 'answer_receipts'): gajim.gajim_optional_features[a].append(xmpp.NS_RECEIPTS) - if gajim.HAVE_FARSIGHT: + if gajim.HAVE_FARSTREAM: gajim.gajim_optional_features[a].append(xmpp.NS_JINGLE) gajim.gajim_optional_features[a].append(xmpp.NS_JINGLE_RTP) gajim.gajim_optional_features[a].append(xmpp.NS_JINGLE_RTP_AUDIO) @@ -1436,8 +1436,10 @@ def get_proxy_info(account): if p: proxy = {} proxyptr = gajim.config.get_per('proxies', p) + if not proxyptr: + return proxy for key in proxyptr.keys(): - proxy[key] = proxyptr[key][1] + proxy[key] = proxyptr[key] return proxy def _get_img_direct(attrs): @@ -1546,4 +1548,4 @@ def download_image(account, attrs): proxy = get_proxy_info(account) if proxy and proxy['type'] in ('http', 'socks5'): return _get_img_proxy(attrs, proxy) - return _get_img_direct(attrs)
\ No newline at end of file + return _get_img_direct(attrs) diff --git a/src/common/i18n.py b/src/common/i18n.py index 3ff764c99..6de7eee31 100644 --- a/src/common/i18n.py +++ b/src/common/i18n.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/common/i18n.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2004 Vincent Hanquez <tab AT snarc.org> ## Copyright (C) 2005-2006 Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2009 Benjamin Richter <br AT waldteufel-online.net> diff --git a/src/common/jingle.py b/src/common/jingle.py index 5a9c39dee..4c2598487 100644 --- a/src/common/jingle.py +++ b/src/common/jingle.py @@ -35,7 +35,7 @@ import helpers import gajim from jingle_session import JingleSession, JingleStates -if gajim.HAVE_FARSIGHT: +if gajim.HAVE_FARSTREAM: from jingle_rtp import JingleAudio, JingleVideo from jingle_ft import JingleFileTransfer from jingle_transport import JingleTransportSocks5, JingleTransportIBB diff --git a/src/common/jingle_rtp.py b/src/common/jingle_rtp.py index 20f792f5f..4e552dbb1 100644 --- a/src/common/jingle_rtp.py +++ b/src/common/jingle_rtp.py @@ -21,7 +21,7 @@ import gobject import socket import xmpp -import farsight, gst +import farstream, gst from glib import GError import gajim @@ -42,8 +42,8 @@ class JingleRTPContent(JingleContent): JingleContent.__init__(self, session, transport) self.media = media self._dtmf_running = False - self.farsight_media = {'audio': farsight.MEDIA_TYPE_AUDIO, - 'video': farsight.MEDIA_TYPE_VIDEO}[media] + self.farstream_media = {'audio': farstream.MEDIA_TYPE_AUDIO, + 'video': farstream.MEDIA_TYPE_VIDEO}[media] self.pipeline = None self.src_bin = None @@ -59,7 +59,7 @@ class JingleRTPContent(JingleContent): self.callbacks['session-terminate'] += [self.__stop] self.callbacks['session-terminate-sent'] += [self.__stop] - def setup_stream(self): + def setup_stream(self, on_src_pad_added): # pipeline and bus self.pipeline = gst.Pipeline() bus = self.pipeline.get_bus() @@ -68,13 +68,12 @@ class JingleRTPContent(JingleContent): # conference self.conference = gst.element_factory_make('fsrtpconference') - self.conference.set_property('sdes-cname', self.session.ourjid) self.pipeline.add(self.conference) self.funnel = None - self.p2psession = self.conference.new_session(self.farsight_media) + self.p2psession = self.conference.new_session(self.farstream_media) - participant = self.conference.new_participant(self.session.peerjid) + participant = self.conference.new_participant() # FIXME: Consider a workaround, here... # pidgin and telepathy-gabble don't follow the XEP, and it won't work # due to bad controlling-mode @@ -93,7 +92,9 @@ class JingleRTPContent(JingleContent): params['stun-ip'] = ip self.p2pstream = self.p2psession.new_stream(participant, - farsight.DIRECTION_RECV, 'nice', params) + farstream.DIRECTION_RECV) + self.p2pstream.connect('src-pad-added', on_src_pad_added) + self.p2pstream.set_transmitter('nice', params) def is_ready(self): return (JingleContent.is_ready(self) and self.candidates_ready) @@ -117,7 +118,7 @@ class JingleRTPContent(JingleContent): # FIXME: connectivity should not be etablished yet # Instead, it should be etablished after session-accept! if self.sent: - self.p2pstream.set_remote_candidates(candidates) + self.p2pstream.add_remote_candidates(candidates) def batch_dtmf(self, events): """ @@ -140,15 +141,14 @@ class JingleRTPContent(JingleContent): def _start_dtmf(self, event): if event in ('*', '#'): - event = {'*': farsight.DTMF_EVENT_STAR, - '#': farsight.DTMF_EVENT_POUND}[event] + event = {'*': farstream.DTMF_EVENT_STAR, + '#': farstream.DTMF_EVENT_POUND}[event] else: event = int(event) - self.p2psession.start_telephony_event(event, 2, - farsight.DTMF_METHOD_RTP_RFC4733) + self.p2psession.start_telephony_event(event, 2) def _stop_dtmf(self): - self.p2psession.stop_telephony_event(farsight.DTMF_METHOD_RTP_RFC4733) + self.p2psession.stop_telephony_event() def _fill_content(self, content): content.addChild(xmpp.NS_JINGLE_RTP + ' description', @@ -170,34 +170,33 @@ class JingleRTPContent(JingleContent): if message.type == gst.MESSAGE_ELEMENT: name = message.structure.get_name() log.debug('gst element message: %s: %s' % (name, message)) - if name == 'farsight-new-active-candidate-pair': + if name == 'farstream-new-active-candidate-pair': pass - elif name == 'farsight-recv-codecs-changed': + elif name == 'farstream-recv-codecs-changed': pass - elif name == 'farsight-codecs-changed': - if self.sent and self.p2psession.get_property('codecs-ready'): + elif name == 'farstream-codecs-changed': + if self.sent and self.p2psession.get_property('codecs'): self.send_description_info() - elif name == 'farsight-local-candidates-prepared': + elif name == 'farstream-local-candidates-prepared': self.candidates_ready = True if self.is_ready(): self.session.on_session_state_changed(self) - elif name == 'farsight-new-local-candidate': + elif name == 'farstream-new-local-candidate': candidate = message.structure['candidate'] self.transport.candidates.append(candidate) if self.sent: # FIXME: Is this case even possible? self.send_candidate(candidate) - elif name == 'farsight-component-state-changed': + elif name == 'farstream-component-state-changed': state = message.structure['state'] - if state == farsight.STREAM_STATE_FAILED: + if state == farstream.STREAM_STATE_FAILED: reason = xmpp.Node('reason') reason.setTag('failed-transport') self.session.remove_content(self.creator, self.name, reason) - elif name == 'farsight-error': - log.error('Farsight error #%d!\nMessage: %s\nDebug: %s' % ( + elif name == 'farstream-error': + log.error('Farstream error #%d!\nMessage: %s' % ( message.structure['error-no'], - message.structure['error-msg'], - message.structure['debug-msg'])) + message.structure['error-msg'])) elif message.type == gst.MESSAGE_ERROR: # TODO: Fix it to fallback to videotestsrc anytime an error occur, # or raise an error, Jingle way @@ -236,10 +235,10 @@ class JingleRTPContent(JingleContent): def on_negotiated(self): if self.accepted: if self.transport.remote_candidates: - self.p2pstream.set_remote_candidates(self.transport.remote_candidates) + self.p2pstream.add_remote_candidates(self.transport.remote_candidates) self.transport.remote_candidates = [] - # TODO: farsight.DIRECTION_BOTH only if senders='both' - self.p2pstream.set_property('direction', farsight.DIRECTION_BOTH) + # TODO: farstream.DIRECTION_BOTH only if senders='both' + self.p2pstream.set_property('direction', farstream.DIRECTION_BOTH) JingleContent.on_negotiated(self) def __on_remote_codecs(self, stanza, content, error, action): @@ -252,8 +251,8 @@ class JingleRTPContent(JingleContent): if not codec['id'] or not codec['name'] or not codec['clockrate']: # ignore invalid payload-types continue - c = farsight.Codec(int(codec['id']), codec['name'], - self.farsight_media, int(codec['clockrate'])) + c = farstream.Codec(int(codec['id']), codec['name'], + self.farstream_media, int(codec['clockrate'])) if 'channels' in codec: c.channels = int(codec['channels']) else: @@ -318,7 +317,7 @@ class JingleAudio(JingleRTPContent): self.out_volume.set_property('volume', vol) def setup_stream(self): - JingleRTPContent.setup_stream(self) + JingleRTPContent.setup_stream(self, self._on_src_pad_added) # Configure SPEEX # Workaround for psi (not needed since rev @@ -326,10 +325,10 @@ class JingleAudio(JingleRTPContent): # place 16kHz before 8kHz, as buggy psi versions will take in # account only the first codec - codecs = [farsight.Codec(farsight.CODEC_ID_ANY, 'SPEEX', - farsight.MEDIA_TYPE_AUDIO, 16000), - farsight.Codec(farsight.CODEC_ID_ANY, 'SPEEX', - farsight.MEDIA_TYPE_AUDIO, 8000)] + codecs = [farstream.Codec(farstream.CODEC_ID_ANY, 'SPEEX', + farstream.MEDIA_TYPE_AUDIO, 16000), + farstream.Codec(farstream.CODEC_ID_ANY, 'SPEEX', + farstream.MEDIA_TYPE_AUDIO, 8000)] self.p2psession.set_codec_preferences(codecs) # the local parts @@ -348,9 +347,8 @@ class JingleAudio(JingleRTPContent): self.src_bin.get_pad('src').link(self.p2psession.get_property( 'sink-pad')) - self.p2pstream.connect('src-pad-added', self._on_src_pad_added) - # The following is needed for farsight to process ICE requests: + # The following is needed for farstream to process ICE requests: self.pipeline.set_state(gst.STATE_PLAYING) @@ -363,7 +361,7 @@ class JingleVideo(JingleRTPContent): # TODO: Everything is not working properly: # sometimes, one window won't show up, # sometimes it'll freeze... - JingleRTPContent.setup_stream(self) + JingleRTPContent.setup_stream(self, self._on_src_pad_added) # the local parts if gajim.config.get('video_framerate'): @@ -395,9 +393,8 @@ class JingleVideo(JingleRTPContent): self.src_bin.get_pad('src').link(self.p2psession.get_property( 'sink-pad')) - self.p2pstream.connect('src-pad-added', self._on_src_pad_added) - # The following is needed for farsight to process ICE requests: + # The following is needed for farstream to process ICE requests: self.pipeline.set_state(gst.STATE_PLAYING) def get_fallback_src(self): diff --git a/src/common/jingle_transport.py b/src/common/jingle_transport.py index f41c85042..ff736f718 100644 --- a/src/common/jingle_transport.py +++ b/src/common/jingle_transport.py @@ -323,7 +323,7 @@ class JingleTransportIBB(JingleTransport): return transport try: - import farsight + import farstream except Exception: pass @@ -332,11 +332,11 @@ class JingleTransportICEUDP(JingleTransport): JingleTransport.__init__(self, TransportType.ICEUDP) def make_candidate(self, candidate): - types = {farsight.CANDIDATE_TYPE_HOST: 'host', - farsight.CANDIDATE_TYPE_SRFLX: 'srflx', - farsight.CANDIDATE_TYPE_PRFLX: 'prflx', - farsight.CANDIDATE_TYPE_RELAY: 'relay', - farsight.CANDIDATE_TYPE_MULTICAST: 'multicast'} + types = {farstream.CANDIDATE_TYPE_HOST: 'host', + farstream.CANDIDATE_TYPE_SRFLX: 'srflx', + farstream.CANDIDATE_TYPE_PRFLX: 'prflx', + farstream.CANDIDATE_TYPE_RELAY: 'relay', + farstream.CANDIDATE_TYPE_MULTICAST: 'multicast'} attrs = { 'component': candidate.component_id, 'foundation': '1', # hack @@ -348,7 +348,7 @@ class JingleTransportICEUDP(JingleTransport): } if candidate.type in types: attrs['type'] = types[candidate.type] - if candidate.proto == farsight.NETWORK_PROTOCOL_UDP: + if candidate.proto == farstream.NETWORK_PROTOCOL_UDP: attrs['protocol'] = 'udp' else: # we actually don't handle properly different tcp options in jingle @@ -367,29 +367,29 @@ class JingleTransportICEUDP(JingleTransport): def parse_transport_stanza(self, transport): candidates = [] for candidate in transport.iterTags('candidate'): - cand = farsight.Candidate() + cand = farstream.Candidate() cand.component_id = int(candidate['component']) cand.ip = str(candidate['ip']) cand.port = int(candidate['port']) cand.foundation = str(candidate['foundation']) - #cand.type = farsight.CANDIDATE_TYPE_LOCAL + #cand.type = farstream.CANDIDATE_TYPE_LOCAL cand.priority = int(candidate['priority']) if candidate['protocol'] == 'udp': - cand.proto = farsight.NETWORK_PROTOCOL_UDP + cand.proto = farstream.NETWORK_PROTOCOL_UDP else: # we actually don't handle properly different tcp options in jingle - cand.proto = farsight.NETWORK_PROTOCOL_TCP + cand.proto = farstream.NETWORK_PROTOCOL_TCP cand.username = str(transport['ufrag']) cand.password = str(transport['pwd']) #FIXME: huh? - types = {'host': farsight.CANDIDATE_TYPE_HOST, - 'srflx': farsight.CANDIDATE_TYPE_SRFLX, - 'prflx': farsight.CANDIDATE_TYPE_PRFLX, - 'relay': farsight.CANDIDATE_TYPE_RELAY, - 'multicast': farsight.CANDIDATE_TYPE_MULTICAST} + types = {'host': farstream.CANDIDATE_TYPE_HOST, + 'srflx': farstream.CANDIDATE_TYPE_SRFLX, + 'prflx': farstream.CANDIDATE_TYPE_PRFLX, + 'relay': farstream.CANDIDATE_TYPE_RELAY, + 'multicast': farstream.CANDIDATE_TYPE_MULTICAST} if 'type' in candidate and candidate['type'] in types: cand.type = types[candidate['type']] else: diff --git a/src/common/latex.py b/src/common/latex.py index 75a1a699e..9a90fe861 100644 --- a/src/common/latex.py +++ b/src/common/latex.py @@ -5,7 +5,7 @@ ## Copyright (C) 2005-2006 Alex Mauer <hawke AT hawkesnest.net> ## Travis Shirk <travis AT pobox.com> ## Copyright (C) 2005-2007 Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2005-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2005-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2006 Dimitur Kirov <dkirov AT gmail.com> ## Copyright (C) 2006-2008 Jean-Marie Traissard <jim AT lapin.org> ## Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org> @@ -59,8 +59,21 @@ def check_blacklist(str_): def get_tmpfile_name(): random.seed() - int_ = random.randint(0, 100) - return os.path.join(gettempdir(), 'gajimtex_' + int_.__str__()) + nb = 0 + while(nb < 100): + int_ = random.randint(0, 10000) + filename = os.path.join(gettempdir(), 'gajimtex_' + int_.__str__()) + # Check if a file to not overwrite it + ok = True + extensions = ['.tex', '.log', '.aux', '.dvi'] + for ext in extensions: + if os.path.exists(filename + ext): + ok = False + break + if ok: + return filename + nb += 1 + return filename def write_latex(filename, str_): texstr = '\\documentclass[12pt]{article}\\usepackage[dvips]{graphicx}' diff --git a/src/common/location_listener.py b/src/common/location_listener.py index af0aca6eb..07aa11e68 100644 --- a/src/common/location_listener.py +++ b/src/common/location_listener.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- ## src/common/location_listener.py ## -## Copyright (C) 2009-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2009-2012 Yann Leboulanger <asterix AT lagaule.org> ## ## This file is part of Gajim. ## diff --git a/src/common/logger.py b/src/common/logger.py index ee7e647f1..8e929c4a5 100644 --- a/src/common/logger.py +++ b/src/common/logger.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/common/logger.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2004-2005 Vincent Hanquez <tab AT snarc.org> ## Copyright (C) 2005-2006 Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2006 Dimitur Kirov <dkirov AT gmail.com> @@ -34,6 +34,7 @@ import time import datetime from gzip import GzipFile from cStringIO import StringIO +import gobject import exceptions import gajim @@ -106,6 +107,7 @@ class Logger: def __init__(self): self.jids_already_in = [] # holds jids that we already have in DB self.con = None + self.commit_timout_id = None if not os.path.exists(LOG_DB_PATH): # this can happen only the first time (the time we create the db) @@ -163,15 +165,25 @@ class Logger: self.open_db() self.get_jids_already_in_db() + def _really_commit(self): + try: + self.con.commit() + except sqlite.OperationalError, e: + print >> sys.stderr, str(e) + self.commit_timout_id = None + return False + + def _timeout_commit(self): + if self.commit_timout_id: + return + self.commit_timout_id = gobject.timeout_add(500, self._really_commit) + def simple_commit(self, sql_to_commit): """ Helper to commit """ self.cur.execute(sql_to_commit) - try: - self.con.commit() - except sqlite.OperationalError, e: - print >> sys.stderr, str(e) + self._timeout_commit() def get_jids_already_in_db(self): try: @@ -398,12 +410,14 @@ class Logger: except sqlite.OperationalError, e: raise exceptions.PysqliteOperationalError(str(e)) message_id = None - try: - self.con.commit() - if write_unread: + if write_unread: + try: + self.con.commit() message_id = self.cur.lastrowid - except sqlite.OperationalError, e: - print >> sys.stderr, str(e) + except sqlite.OperationalError, e: + print >> sys.stderr, str(e) + else: + self._timeout_commit() if message_id: self.insert_unread_events(message_id, values[0]) return message_id @@ -922,10 +936,7 @@ class Logger: VALUES (?, ?, ?, ?); ''', (hash_method, hash_, buffer(data), int(time.time()))) # (1) -- note above - try: - self.con.commit() - except sqlite.OperationalError, e: - print >> sys.stderr, str(e) + self._timeout_commit() def update_caps_time(self, method, hash_): sql = '''UPDATE caps_cache SET last_seen = %d @@ -963,9 +974,9 @@ class Logger: # Fill roster tables with the new roster for jid in roster: self.add_or_update_contact(account_jid, jid, roster[jid]['name'], - roster[jid]['subscription'], roster[jid]['ask'], - roster[jid]['groups'], commit=False) - self.con.commit() + roster[jid]['subscription'], roster[jid]['ask'], + roster[jid]['groups'], commit=False) + self._timeout_commit() # At this point, we are sure the replacement works properly so we can # set the new roster_version value. @@ -987,7 +998,7 @@ class Logger: self.cur.execute( 'DELETE FROM roster_entry WHERE account_jid_id=? AND jid_id=?', (account_jid_id, jid_id)) - self.con.commit() + self._timeout_commit() def add_or_update_contact(self, account_jid, jid, name, sub, ask, groups, commit=True): @@ -1022,7 +1033,7 @@ class Logger: self.convert_human_subscription_values_to_db_api_values(sub), bool(ask))) if commit: - self.con.commit() + self._timeout_commit() def get_roster(self, account_jid): """ @@ -1075,7 +1086,7 @@ class Logger: (account_jid_id,)) self.cur.execute('DELETE FROM roster_group WHERE account_jid_id=?', (account_jid_id,)) - self.con.commit() + self._timeout_commit() def save_if_not_exists(self, with_, direction, tim, msg='', nick=None): if tim: diff --git a/src/common/optparser.py b/src/common/optparser.py index a0ed81578..fa270d748 100644 --- a/src/common/optparser.py +++ b/src/common/optparser.py @@ -2,7 +2,7 @@ ## src/common/optparser.py ## ## Copyright (C) 2003-2005 Vincent Hanquez <tab AT snarc.org> -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005-2006 Dimitur Kirov <dkirov AT gmail.com> ## Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2006-2008 Jean-Marie Traissard <jim AT lapin.org> @@ -50,7 +50,7 @@ class OptionsParser: except Exception: if os.path.exists(self.__filename): #we talk about a file - print _('error: cannot open %s for reading') % self.__filename + print _('Error: cannot open %s for reading') % self.__filename return False new_version = gajim.config.get('version') @@ -85,7 +85,6 @@ class OptionsParser: def write_line(self, fd, opt, parents, value): if value is None: return - value = value[1] # convert to utf8 before writing to file if needed if isinstance(value, unicode): value = value.encode('utf-8') diff --git a/src/common/passwords.py b/src/common/passwords.py index c6fcc36c6..55ec38bad 100644 --- a/src/common/passwords.py +++ b/src/common/passwords.py @@ -3,7 +3,7 @@ ## ## Copyright (C) 2006 Gustavo J. A. M. Carneiro <gjcarneiro AT gmail.com> ## Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2007 Jean-Marie Traissard <jim AT lapin.org> ## Julien Pivotto <roidelapluie AT gmail.com> ## Copyright (C) 2008 Stephan Erb <steve-e AT h3c.de> @@ -63,7 +63,7 @@ class GnomePasswordStorage(PasswordStorage): def __init__(self): self.keyring = gnomekeyring.get_default_keyring_sync() if self.keyring is None: - self.keyring = 'default' + self.keyring = 'login' try: gnomekeyring.create_sync(self.keyring, None) except gnomekeyring.AlreadyExistsError: diff --git a/src/common/pep.py b/src/common/pep.py index 07b2a6161..be94e9235 100644 --- a/src/common/pep.py +++ b/src/common/pep.py @@ -2,7 +2,7 @@ ## src/common/pep.py ## ## Copyright (C) 2007 Piotr Gaczkowski <doomhammerng AT gmail.com> -## Copyright (C) 2007-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2007-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2008 Brendan Taylor <whateley AT gmail.com> ## Jean-Marie Traissard <jim AT lapin.org> ## Jonathan Schleifer <js-common.gajim AT webkeks.org> diff --git a/src/common/protocol/bytestream.py b/src/common/protocol/bytestream.py index 6af6d1637..b370ec266 100644 --- a/src/common/protocol/bytestream.py +++ b/src/common/protocol/bytestream.py @@ -6,7 +6,7 @@ ## Copyright (C) 2006-2007 Tomasz Melcer <liori AT exroot.org> ## Travis Shirk <travis AT pobox.com> ## Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2007 Julien Pivotto <roidelapluie AT gmail.com> ## Copyright (C) 2007-2008 Brendan Taylor <whateley AT gmail.com> ## Jean-Marie Traissard <jim AT lapin.org> diff --git a/src/common/proxy65_manager.py b/src/common/proxy65_manager.py index 80d402e95..879458aea 100644 --- a/src/common/proxy65_manager.py +++ b/src/common/proxy65_manager.py @@ -3,7 +3,7 @@ ## ## Copyright (C) 2006 Dimitur Kirov <dkirov AT gmail.com> ## Jean-Marie Traissard <jim AT lapin.org> -## Copyright (C) 2007-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2007-2012 Yann Leboulanger <asterix AT lagaule.org> ## ## This file is part of Gajim. ## diff --git a/src/common/pubsub.py b/src/common/pubsub.py index 277926599..93aa9427e 100644 --- a/src/common/pubsub.py +++ b/src/common/pubsub.py @@ -2,7 +2,7 @@ ## src/common/pubsub.py ## ## Copyright (C) 2006 Tomasz Melcer <liori AT exroot.org> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2007 Jean-Marie Traissard <jim AT lapin.org> ## Copyright (C) 2008 Stephan Erb <steve-e AT h3c.de> ## diff --git a/src/common/rst_xhtml_generator.py b/src/common/rst_xhtml_generator.py index 45e07c72b..28f25c77e 100644 --- a/src/common/rst_xhtml_generator.py +++ b/src/common/rst_xhtml_generator.py @@ -3,7 +3,7 @@ ## ## Copyright (C) 2006 Santiago Gala ## Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2007 Jean-Marie Traissard <jim AT lapin.org> ## ## This file is part of Gajim. diff --git a/src/common/sleepy.py b/src/common/sleepy.py index 6fadd9dbd..14568cb5c 100644 --- a/src/common/sleepy.py +++ b/src/common/sleepy.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/common/sleepy.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005-2006 Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2007 Jean-Marie Traissard <jim AT lapin.org> ## Copyright (C) 2008 Mateusz Biliński <mateusz AT bilinski.it> diff --git a/src/common/socks5.py b/src/common/socks5.py index 2aa5f991d..89402e898 100644 --- a/src/common/socks5.py +++ b/src/common/socks5.py @@ -3,7 +3,7 @@ ## ## Copyright (C) 2005-2006 Dimitur Kirov <dkirov AT gmail.com> ## Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2005-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2005-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2006-2008 Jean-Marie Traissard <jim AT lapin.org> ## Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org> ## diff --git a/src/common/stanza_session.py b/src/common/stanza_session.py index 0cecfa512..618dd744a 100644 --- a/src/common/stanza_session.py +++ b/src/common/stanza_session.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/common/stanza_session.py ## -## Copyright (C) 2007-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2007-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2007 Julien Pivotto <roidelapluie AT gmail.com> ## Copyright (C) 2007-2008 Brendan Taylor <whateley AT gmail.com> ## Jean-Marie Traissard <jim AT lapin.org> @@ -99,7 +99,7 @@ class StanzaSession(object): for event in gajim.events.get_events(self.conn.name, j, types=types): # the event wasn't in this session if (event.type_ == 'chat' and event.parameters[8] != self) or \ - (event.type_ == 'printed_chat' and event.parameters[0].session != \ + (event.type_ == 'printed_chat' and event.parameters[2].session != \ self): continue diff --git a/src/common/xmpp/auth_nb.py b/src/common/xmpp/auth_nb.py index 1063ed9a7..10d65abed 100644 --- a/src/common/xmpp/auth_nb.py +++ b/src/common/xmpp/auth_nb.py @@ -577,8 +577,19 @@ class NonBlockingNonSASL(PlugIn): else: log.warn("Secure methods unsupported, performing plain text \ authentication") - query.setTagData('password', self.password) self._method = 'plain' + self._owner._caller.get_password(self._on_password, self._method) + return + resp = self.owner.Dispatcher.SendAndWaitForResponse(iq, + func=self._on_auth) + + def _on_password(self, password): + self.password = '' if password is None else password + iq=Iq('set', NS_AUTH) + query = iq.getTag('query') + query.setTagData('username', self.user) + query.setTagData('resource', self.resource) + query.setTagData('password', self.password) resp = self.owner.Dispatcher.SendAndWaitForResponse(iq, func=self._on_auth) diff --git a/src/common/xmpp/client_nb.py b/src/common/xmpp/client_nb.py index 608be0fa6..97d5ec567 100644 --- a/src/common/xmpp/client_nb.py +++ b/src/common/xmpp/client_nb.py @@ -530,6 +530,7 @@ class NonBlockingClient: sm.set_owner(self) self.Dispatcher.sm = sm nb_bind.PlugIn(self) + self.on_auth(self, 'sasl') return nb_bind.PlugIn(self) diff --git a/src/common/xmpp/protocol.py b/src/common/xmpp/protocol.py index 60a17d256..e0bd794a3 100644 --- a/src/common/xmpp/protocol.py +++ b/src/common/xmpp/protocol.py @@ -41,6 +41,7 @@ NS_ARCHIVE_MANAGE = NS_ARCHIVE + ':manage' # XEP-0136 NS_ARCHIVE_MANUAL = NS_ARCHIVE + ':manual' # XEP-0136 NS_ARCHIVE_PREF = NS_ARCHIVE + ':pref' NS_ATOM = 'http://www.w3.org/2005/Atom' +NS_ATTENTION = 'urn:xmpp:attention:0' # XEP-0224 NS_AUTH = 'jabber:iq:auth' NS_AVATAR = 'http://www.xmpp.org/extensions/xep-0084.html#ns-metadata' NS_BIND = 'urn:ietf:params:xml:ns:xmpp-bind' diff --git a/src/common/xmpp/smacks.py b/src/common/xmpp/smacks.py index e59b5d1b8..d82785ac4 100644 --- a/src/common/xmpp/smacks.py +++ b/src/common/xmpp/smacks.py @@ -103,6 +103,7 @@ class Smacks(): self.uqueue.pop(0) if stanza.getName() == 'resumed': + self.enabled = True self.resuming = True self.con.set_oldst() if self.uqueue != []: @@ -114,6 +115,7 @@ class Smacks(): # Ask for service discovery, etc.. if stanza.getTag('item-not-found'): self.resuming = False + self.enabled = False # we need to bind a resource self._owner.NonBlockingBind.resuming = False self._owner._on_auth_bind(None) diff --git a/src/common/xmpp/stringprepare.py b/src/common/xmpp/stringprepare.py index 657895c84..5e3d343b5 100644 --- a/src/common/xmpp/stringprepare.py +++ b/src/common/xmpp/stringprepare.py @@ -2,7 +2,7 @@ ## src/common/xmpp/stringprepare.py ## ## Copyright (C) 2001-2005 Twisted Matrix Laboratories -## Copyright (C) 2005-2011 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2005-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2006 Stefan Bethge <stefan AT lanpartei.de> ## Copyright (C) 2007 Jean-Marie Traissard <jim AT lapin.org> ## diff --git a/src/common/xmpp/tls_nb.py b/src/common/xmpp/tls_nb.py index cc8393d52..575960fca 100644 --- a/src/common/xmpp/tls_nb.py +++ b/src/common/xmpp/tls_nb.py @@ -451,8 +451,6 @@ class NonBlockingTLS(PlugIn): try: self._owner.ssl_fingerprint_sha1 = cert.digest('sha1') self._owner.ssl_certificate = cert - if errnum == 0: - return True self._owner.ssl_errnum = errnum self._owner.ssl_cert_pem = OpenSSL.crypto.dump_certificate( OpenSSL.crypto.FILETYPE_PEM, cert) diff --git a/src/common/zeroconf/client_zeroconf.py b/src/common/zeroconf/client_zeroconf.py index c5049c6fc..b91b98c21 100644 --- a/src/common/zeroconf/client_zeroconf.py +++ b/src/common/zeroconf/client_zeroconf.py @@ -803,11 +803,19 @@ class ClientZeroconf: def on_ok(_waitid): # if timeout: # self._owner.set_timeout(timeout) - to = stanza.getTo() + to = unicode(stanza.getTo()) + to = gajim.get_jid_without_resource(to) + + try: + item = self.roster[to] + except KeyError: + # Contact offline + item = None + conn = None if to in self.recipient_to_hash: conn = self.connections[self.recipient_to_hash[to]] - elif item['address'] in self.ip_to_hash: + elif item and item['address'] in self.ip_to_hash: hash_ = self.ip_to_hash[item['address']] if self.hash_to_port[hash_] == item['port']: conn = self.connections[hash_] diff --git a/src/common/zeroconf/connection_zeroconf.py b/src/common/zeroconf/connection_zeroconf.py index 9b8afd382..7e8a372a9 100644 --- a/src/common/zeroconf/connection_zeroconf.py +++ b/src/common/zeroconf/connection_zeroconf.py @@ -7,7 +7,7 @@ ## - Travis Shirk <travis@pobox.com> ## - Stefan Bethge <stefan@lanpartei.de> ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix@lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix@lagaule.org> ## Copyright (C) 2003-2004 Vincent Hanquez <tab@snarc.org> ## Copyright (C) 2006 Nikos Kouremenos <nkour@jabber.org> ## Dimitur Kirov <dkirov@gmail.com> @@ -336,8 +336,8 @@ class ConnectionZeroconf(CommonConnection, ConnectionHandlersZeroconf): def send_message(self, jid, msg, keyID, type_='chat', subject='', chatstate=None, msg_id=None, resource=None, user_nick=None, xhtml=None, label=None, session=None, forward_from=None, form_node=None, - original_message=None, delayed=None, callback=None, callback_args=[], - now=True): + original_message=None, delayed=None, attention=False, callback=None, + callback_args=[], now=True): def on_send_ok(msg_id): gajim.nec.push_incoming_event(MessageSentEvent(None, conn=self, @@ -370,7 +370,8 @@ class ConnectionZeroconf(CommonConnection, ConnectionHandlersZeroconf): chatstate=chatstate, msg_id=msg_id, resource=resource, user_nick=user_nick, xhtml=xhtml, session=session, forward_from=forward_from, form_node=form_node, - original_message=original_message, delayed=delayed, callback=cb) + original_message=original_message, delayed=delayed, + attention=attention, callback=cb) def _nec_message_outgoing(self, obj): if obj.account != self.name: @@ -411,7 +412,7 @@ class ConnectionZeroconf(CommonConnection, ConnectionHandlersZeroconf): resource=obj.resource, user_nick=obj.user_nick, xhtml=obj.xhtml, label=obj.label, session=obj.session, forward_from=obj.forward_from, form_node=obj.form_node, original_message=obj.original_message, - delayed=obj.delayed, callback=cb) + delayed=obj.delayed, attention=obj.attention, callback=cb) def send_stanza(self, stanza): # send a stanza untouched diff --git a/src/config.py b/src/config.py index 379877629..6f95fd215 100644 --- a/src/config.py +++ b/src/config.py @@ -2,7 +2,7 @@ ## src/config.py ## ## Copyright (C) 2003-2005 Vincent Hanquez <tab AT snarc.org> -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005 Alex Podaras <bigpod AT gmail.com> ## Stéphan Kochen <stephan AT kochen.nl> ## Copyright (C) 2005-2006 Dimitur Kirov <dkirov AT gmail.com> @@ -1485,8 +1485,7 @@ class ManageProxiesWindow: gajim.config.del_per('proxies', old_name) gajim.config.add_per('proxies', new_name) for option in config: - gajim.config.set_per('proxies', new_name, option, - config[option][common.config.OPT_VAL]) + gajim.config.set_per('proxies', new_name, option, config[option]) model.set_value(iter_, 0, new_name) def on_proxytype_combobox_changed(self, widget): @@ -2116,7 +2115,7 @@ class AccountsWindow: gajim.config.add_per('accounts', new_name) old_config = gajim.config.get_per('accounts', old_name) for opt in old_config: - gajim.config.set_per('accounts', new_name, opt, old_config[opt][1]) + gajim.config.set_per('accounts', new_name, opt, old_config[opt]) gajim.config.del_per('accounts', old_name) if self.current_account == old_name: self.current_account = new_name @@ -3655,7 +3654,11 @@ class AccountCreationWizardWindow: password = self.xml.get_object('password_entry').get_text().decode( 'utf-8') - jid = username + '@' + server + if anonymous: + jid = '' + else: + jid = username + '@' + jid += server # check if jid is conform to RFC and stringprep it try: jid = helpers.parse_jid(jid) @@ -3803,23 +3806,24 @@ class AccountCreationWizardWindow: self.back_button.show() self.forward_button.show() self.is_form = obj.is_form + empty_config = True if obj.is_form: dataform = dataforms.ExtendForm(node=obj.config) self.data_form_widget = dataforms_widget.DataFormWidget(dataform) + empty_config = False else: self.data_form_widget = FakeDataForm(obj.config) - empty_config = True for field in obj.config: if field in ('key', 'instructions', 'x', 'registered'): continue empty_config = False break - if empty_config: - self.forward_button.set_sensitive(False) - self.notebook.set_current_page(4) # show form page - return self.data_form_widget.show_all() self.xml.get_object('form_vbox').pack_start(self.data_form_widget) + if empty_config: + self.forward_button.set_sensitive(False) + self.notebook.set_current_page(4) # show form page + return self.ssl_fingerprint = obj.ssl_fingerprint self.ssl_cert = obj.ssl_cert if obj.ssl_msg: @@ -4183,6 +4187,7 @@ class ManageSoundsWindow: # NOTE: sounds_ui_names MUST have all items of # sounds = gajim.config.get_per('soundevents') as keys sounds_dict = { + 'attention_received': _('Attention Message Received'), 'first_message_received': _('First Message Received'), 'next_message_received_focused': _('Next Message Received Focused'), 'next_message_received_unfocused': diff --git a/src/conversation_textview.py b/src/conversation_textview.py index 7de98f317..eed90ecc1 100644 --- a/src/conversation_textview.py +++ b/src/conversation_textview.py @@ -5,7 +5,7 @@ ## Copyright (C) 2005-2006 Alex Mauer <hawke AT hawkesnest.net> ## Travis Shirk <travis AT pobox.com> ## Copyright (C) 2005-2007 Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2005-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2005-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2006 Dimitur Kirov <dkirov AT gmail.com> ## Copyright (C) 2006-2008 Jean-Marie Traissard <jim AT lapin.org> ## Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org> @@ -925,6 +925,9 @@ class ConversationTextview(gobject.GObject): childs[7].hide() # hide add to roster menuitem if kind == 'xmpp': + id_ = childs[0].connect('activate', self.on_copy_link_activate, + 'xmpp:' + text) + self.handlers[id_] = childs[0] childs[2].hide() # copy mail address childs[3].hide() # open mail composer childs[4].hide() # jid section separator @@ -934,7 +937,8 @@ class ConversationTextview(gobject.GObject): childs[6].hide() # join group chat childs[7].hide() # add to roster - childs[0].hide() # copy link location + if kind != 'xmpp': + childs[0].hide() # copy link location childs[1].hide() # open link in browser menu.popup(None, None, None, event.button, event.time) diff --git a/src/dataforms_widget.py b/src/dataforms_widget.py index e63ee5a51..8382bb75e 100644 --- a/src/dataforms_widget.py +++ b/src/dataforms_widget.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/dataforms_widget.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2006 Tomasz Melcer <liori AT exroot.org> ## Copyright (C) 2006-2007 Jean-Marie Traissard <jim AT lapin.org> ## diff --git a/src/dialogs.py b/src/dialogs.py index 8e0b80a36..d5456d663 100644 --- a/src/dialogs.py +++ b/src/dialogs.py @@ -2,7 +2,7 @@ ## src/dialogs.py ## ## Copyright (C) 2003-2005 Vincent Hanquez <tab AT snarc.org> -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005 Alex Mauer <hawke AT hawkesnest.net> ## Copyright (C) 2005-2006 Dimitur Kirov <dkirov AT gmail.com> ## Travis Shirk <travis AT pobox.com> @@ -233,7 +233,7 @@ class PassphraseDialog: cancelbutton.connect('clicked', self.on_cancelbutton_clicked) self.xml.connect_signals(self) - self.window.set_position(gtk.WIN_POS_CENTER_ON_PARENT) + self.window.set_transient_for(gajim.interface.roster.window) self.window.show_all() self.check = bool(checkbuttontext) @@ -1936,6 +1936,9 @@ class CommonInputDialog: def on_cancelbutton_clicked(self, widget): self.dialog.destroy() + def destroy(self): + self.dialog.destroy() + class InputDialog(CommonInputDialog): """ Class for Input dialog @@ -2464,8 +2467,9 @@ class JoinGroupchatWindow: 'groupchat.')) return nickname = self._nickname_entry.get_text().decode('utf-8') - server = self.server_comboboxentry.child.get_text().decode('utf-8') - room = self._room_jid_entry.get_text().decode('utf-8') + server = self.server_comboboxentry.child.get_text().decode('utf-8').\ + strip() + room = self._room_jid_entry.get_text().decode('utf-8').strip() room_jid = room + '@' + server password = self._password_entry.get_text().decode('utf-8') try: @@ -2740,7 +2744,7 @@ class ChangePasswordDialog: class PopupNotificationWindow: def __init__(self, event_type, jid, account, msg_type='', - path_to_image=None, title=None, text=None): + path_to_image=None, title=None, text=None, timeout=-1): self.account = account self.jid = jid self.msg_type = msg_type @@ -2760,8 +2764,8 @@ class PopupNotificationWindow: title = '' event_type_label.set_markup( - '<span foreground="black" weight="bold">%s</span>' % - gobject.markup_escape_text(title)) + '<span foreground="black" weight="bold">%s</span>' % + gobject.markup_escape_text(title)) # set colors [ http://www.pitt.edu/~nisg/cis/web/cgi/rgb.html ] self.window.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('black')) @@ -2771,25 +2775,25 @@ class PopupNotificationWindow: path_to_image = gtkgui_helpers.get_icon_path('gajim-chat_msg_recv', 48) if event_type == _('Contact Signed In'): - bg_color = 'limegreen' + bg_color = gajim.config.get('notif_signin_color') elif event_type == _('Contact Signed Out'): - bg_color = 'red' + bg_color = gajim.config.get('notif_signout_color') elif event_type in (_('New Message'), _('New Single Message'), _('New Private Message'), _('New E-mail')): - bg_color = 'dodgerblue' + bg_color = gajim.config.get('notif_message_color') elif event_type == _('File Transfer Request'): - bg_color = 'khaki' + bg_color = gajim.config.get('notif_ftrequest_color') elif event_type == _('File Transfer Error'): - bg_color = 'firebrick' + bg_color = gajim.config.get('notif_fterror_color') elif event_type in (_('File Transfer Completed'), - _('File Transfer Stopped')): - bg_color = 'yellowgreen' + _('File Transfer Stopped')): + bg_color = gajim.config.get('notif_ftcomplete_color') elif event_type == _('Groupchat Invitation'): - bg_color = 'tan1' + bg_color = gajim.config.get('notif_invite_color') elif event_type == _('Contact Changed Status'): - bg_color = 'thistle2' + bg_color = gajim.config.get('notif_status_color') else: # Unknown event! Shouldn't happen but deal with it - bg_color = 'white' + bg_color = gajim.config.get('notif_other_color') popup_bg_color = gtk.gdk.color_parse(bg_color) close_button.modify_bg(gtk.STATE_NORMAL, popup_bg_color) eventbox.modify_bg(gtk.STATE_NORMAL, popup_bg_color) @@ -2808,13 +2812,13 @@ class PopupNotificationWindow: pos_y = gajim.config.get('notification_position_y') if pos_y < 0: pos_y = gtk.gdk.screen_height() - \ - gajim.interface.roster.popups_notification_height + pos_y + 1 + gajim.interface.roster.popups_notification_height + pos_y + 1 self.window.move(pos_x, pos_y) xml.connect_signals(self) self.window.show_all() - timeout = gajim.config.get('notification_timeout') - gobject.timeout_add_seconds(timeout, self.on_timeout) + if timeout > 0: + gobject.timeout_add_seconds(timeout, self.on_timeout) def on_close_button_clicked(self, widget): self.adjust_height_and_move_popup_notification_windows() @@ -5154,6 +5158,7 @@ class VoIPCallReceivedDialog(object): session = gajim.connections[self.account].get_jingle_session(self.fjid, self.sid) if not session: + dialog.destroy() return if response == gtk.RESPONSE_YES: #TODO: Ensure that ctrl.contact.resource == resource diff --git a/src/disco.py b/src/disco.py index b6679d4e3..fdf652be5 100644 --- a/src/disco.py +++ b/src/disco.py @@ -3,7 +3,7 @@ ## ## Copyright (C) 2005-2006 Stéphan Kochen <stephan AT kochen.nl> ## Copyright (C) 2005-2007 Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2005-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2005-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2006 Dimitur Kirov <dkirov AT gmail.com> ## Copyright (C) 2006-2008 Jean-Marie Traissard <jim AT lapin.org> ## Copyright (C) 2007 Stephan Erb <steve-e AT h3c.de> diff --git a/src/features_window.py b/src/features_window.py index 79ffd6745..dff1135f9 100644 --- a/src/features_window.py +++ b/src/features_window.py @@ -5,7 +5,7 @@ ## Julien Pivotto <roidelapluie AT gmail.com> ## Stefan Bethge <stefan AT lanpartei.de> ## Stephan Erb <steve-e AT h3c.de> -## Copyright (C) 2007-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2007-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org> ## ## This file is part of Gajim. @@ -49,12 +49,12 @@ class FeaturesWindow: self.features = { _('SSL certificate validation'): (self.pyopenssl_available, _('A library used to validate server certificates to ensure a secure connection.'), - _('Requires python-pyopenssl.'), - _('Requires python-pyopenssl.')), + _('Requires python-pyopenssl > 0.12 and pyasn1.'), + _('Requires python-pyopenssl > 0.12 and pyasn1.')), _('Bonjour / Zeroconf'): (self.zeroconf_available, _('Serverless chatting with autodetected clients in a local network.'), _('Requires python-avahi.'), - _('Requires pybonjour (http://o2s.csail.mit.edu/o2s-wiki/pybonjour).')), + _('Requires pybonjour and bonjour SDK running (http://developer.apple.com/opensource/).')), _('Command line'): (self.dbus_available, _('A script to control Gajim via commandline.'), _('Requires python-dbus.'), @@ -103,9 +103,9 @@ class FeaturesWindow: _('Generate XHTML output from RST code (see http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html).'), _('Requires python-docutils.'), _('Requires python-docutils.')), - _('Audio / Video'): (self.farsight_available, + _('Audio / Video'): (self.farstream_available, _('Ability to start audio and video chat.'), - _('Requires python-farsight and gstreamer-plugins-bad.'), + _('Requires python-farstream and gstreamer-plugins-bad.'), _('Feature not available under Windows.')), _('UPnP-IGD'): (self.gupnp_igd_available, _('Ability to request your router to forward port for file transfer.'), @@ -169,6 +169,11 @@ class FeaturesWindow: try: import OpenSSL.SSL import OpenSSL.crypto + ver = OpenSSL.__version__ + ver_l = [int(i) for i in ver.split('.')] + if ver_l < [0, 12]: + raise ImportError + import pyasn1 except Exception: return False return True @@ -253,8 +258,8 @@ class FeaturesWindow: return False return True - def farsight_available(self): - return gajim.HAVE_FARSIGHT + def farstream_available(self): + return gajim.HAVE_FARSTREAM def gupnp_igd_available(self): return gajim.HAVE_UPNP_IGD diff --git a/src/filetransfers_window.py b/src/filetransfers_window.py index efe7c787f..4537c5141 100644 --- a/src/filetransfers_window.py +++ b/src/filetransfers_window.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/filetransfers_window.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005-2006 Dimitur Kirov <dkirov AT gmail.com> ## Copyright (C) 2005-2007 Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2006 Travis Shirk <travis AT pobox.com> diff --git a/src/gajim-remote.py b/src/gajim-remote.py index 7ad39f064..5316ee089 100644 --- a/src/gajim-remote.py +++ b/src/gajim-remote.py @@ -3,7 +3,7 @@ ## ## Copyright (C) 2005-2006 Dimitur Kirov <dkirov AT gmail.com> ## Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2005-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2005-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2006 Junglecow <junglecow AT gmail.com> ## Travis Shirk <travis AT pobox.com> ## Copyright (C) 2006-2008 Jean-Marie Traissard <jim AT lapin.org> diff --git a/src/gajim.py b/src/gajim.py index e02a1a8f4..329302467 100644 --- a/src/gajim.py +++ b/src/gajim.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/gajim.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2004-2005 Vincent Hanquez <tab AT snarc.org> ## Copyright (C) 2005 Alex Podaras <bigpod AT gmail.com> ## Norman Rasmussen <norman AT rasmussen.co.za> @@ -233,12 +233,12 @@ else: elif sysname in ('FreeBSD', 'OpenBSD', 'NetBSD'): libc.setproctitle('gajim') - if gtk.pygtk_version < (2, 16, 0): - pritext = _('Gajim needs PyGTK 2.16 or above') - sectext = _('Gajim needs PyGTK 2.16 or above to run. Quiting...') - elif gtk.gtk_version < (2, 16, 0): - pritext = _('Gajim needs GTK 2.16 or above') - sectext = _('Gajim needs GTK 2.16 or above to run. Quiting...') + if gtk.pygtk_version < (2, 22, 0): + pritext = _('Gajim needs PyGTK 2.22 or above') + sectext = _('Gajim needs PyGTK 2.22 or above to run. Quiting...') + elif gtk.gtk_version < (2, 22, 0): + pritext = _('Gajim needs GTK 2.22 or above') + sectext = _('Gajim needs GTK 2.22 or above to run. Quiting...') from common import check_paths diff --git a/src/gajim_themes_window.py b/src/gajim_themes_window.py index 15d2952a9..1c925817d 100644 --- a/src/gajim_themes_window.py +++ b/src/gajim_themes_window.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/gajim_themes_window.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005-2006 Dimitur Kirov <dkirov AT gmail.com> ## Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2006 Jean-Marie Traissard <jim AT lapin.org> diff --git a/src/groupchat_control.py b/src/groupchat_control.py index 2ee790155..d718ec67d 100644 --- a/src/groupchat_control.py +++ b/src/groupchat_control.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/groupchat_control.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005-2007 Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2006 Dimitur Kirov <dkirov AT gmail.com> ## Alex Mauer <hawke AT hawkesnest.net> @@ -212,7 +212,8 @@ class PrivateChatControl(ChatControl): self.parent_win.redraw_tab(self) self.update_ui() - def send_message(self, message, xhtml=None, process_commands=True): + def send_message(self, message, xhtml=None, process_commands=True, + attention=False): """ Call this method to send the message """ @@ -237,7 +238,7 @@ class PrivateChatControl(ChatControl): return ChatControl.send_message(self, message, xhtml=xhtml, - process_commands=process_commands) + process_commands=process_commands, attention=attention) def update_ui(self): if self.contact.show == 'offline': @@ -1274,7 +1275,7 @@ class GroupchatControl(ChatControlBase): gajim.gc_connected[obj.conn.name][self.room_jid]: return password = gajim.gc_passwords.get(self.room_jid, '') - obj.conn.join_gc(self.nick, self.room_jid, password) + obj.conn.join_gc(self.nick, self.room_jid, password, rejoin=True) def _nec_decrypted_message_received(self, obj): if obj.conn.name != self.account: @@ -1307,7 +1308,6 @@ class GroupchatControl(ChatControlBase): self._update_banner_state_image() if self.parent_win: self.parent_win.redraw_tab(self) - gobject.idle_add(self.msg_textview.grab_focus) def got_disconnected(self): self.list_treeview.set_model(None) @@ -1351,7 +1351,7 @@ class GroupchatControl(ChatControlBase): return False password = gajim.gc_passwords.get(self.room_jid, '') gajim.connections[self.account].join_gc(self.nick, self.room_jid, - password) + password, rejoin=True) return True def draw_roster(self): diff --git a/src/groups.py b/src/groups.py index 422950f58..21c5742c9 100644 --- a/src/groups.py +++ b/src/groups.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/groups.py ## -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2006 Tomasz Melcer <liori AT exroot.org> ## ## This file is part of Gajim. diff --git a/src/gtkexcepthook.py b/src/gtkexcepthook.py index 1b85e93bb..5a9bb3476 100644 --- a/src/gtkexcepthook.py +++ b/src/gtkexcepthook.py @@ -2,7 +2,7 @@ ## src/gtkexcepthook.py ## ## Copyright (C) 2005-2006 Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2005-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2005-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2008 Stephan Erb <steve-e AT h3c.de> ## ## This file is part of Gajim. diff --git a/src/gtkgui_helpers.py b/src/gtkgui_helpers.py index c2e1bf249..5588b3518 100644 --- a/src/gtkgui_helpers.py +++ b/src/gtkgui_helpers.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/gtkgui_helpers.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005-2006 Dimitur Kirov <dkirov AT gmail.com> ## Copyright (C) 2005-2007 Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2006 Travis Shirk <travis AT pobox.com> diff --git a/src/gui_interface.py b/src/gui_interface.py index a27c11914..c00b3283b 100644 --- a/src/gui_interface.py +++ b/src/gui_interface.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/gajim.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2004-2005 Vincent Hanquez <tab AT snarc.org> ## Copyright (C) 2005 Alex Podaras <bigpod AT gmail.com> ## Norman Rasmussen <norman AT rasmussen.co.za> @@ -330,6 +330,16 @@ class Interface: if gc_control and gc_control.autorejoin: gc_control.autorejoin = False + def handle_event_gc_message(self, obj): + if not obj.stanza.getTag('body'): # no <body> + # It could be a voice request. See + # http://www.xmpp.org/extensions/xep-0045.html#voiceapprove + if obj.msg_obj.form_node: + dialogs.SingleMessageWindow(obj.conn.name, obj.fjid, + action='receive', from_whom=obj.fjid, + subject='', message='', resource='', session=None, + form_node=obj.msg_obj.form_node) + def handle_event_presence(self, obj): # 'NOTIFY' (account, (jid, status, status message, resource, # priority, # keyID, timestamp, contact_nickname)) @@ -1490,6 +1500,7 @@ class Interface: 'fingerprint-error': [self.handle_event_fingerprint_error], 'gc-invitation-received': [self.handle_event_gc_invitation], 'gc-presence-received': [self.handle_event_gc_presence], + 'gc-message-received': [self.handle_event_gc_message], 'gmail-notify': [self.handle_event_gmail_notify], 'gpg-password-required': [self.handle_event_gpg_password_required], 'gpg-trust-key': [self.handle_event_gpg_trust_key], @@ -1625,7 +1636,7 @@ class Interface: return if type_ == 'printed_chat': - ctrl = event.parameters[0] + ctrl = event.parameters[2] elif type_ == 'chat': session = event.parameters[8] ctrl = session.control @@ -1663,7 +1674,7 @@ class Interface: event = gajim.events.get_first_event(account, jid, type_) if type_ == 'printed_pm': - ctrl = event.parameters[0] + ctrl = event.parameters[2] elif type_ == 'pm': session = event.parameters[8] diff --git a/src/gui_menu_builder.py b/src/gui_menu_builder.py index 440a7668d..9df948739 100644 --- a/src/gui_menu_builder.py +++ b/src/gui_menu_builder.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/gui_menu_builder.py ## -## Copyright (C) 2009-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2009-2012 Yann Leboulanger <asterix AT lagaule.org> ## ## This file is part of Gajim. ## @@ -272,8 +272,9 @@ control=None, gc_contact=None): # Unsensitive many items when account is offline if gajim.account_is_disconnected(account): - for widget in (start_chat_menuitem, rename_menuitem, - edit_groups_menuitem, send_file_menuitem, convert_to_gc_menuitem): + for widget in (start_chat_menuitem, rename_menuitem, + edit_groups_menuitem, send_file_menuitem, convert_to_gc_menuitem, + information_menuitem): widget.set_sensitive(False) if not show_start_chat: diff --git a/src/history_manager.py b/src/history_manager.py index 9e7f57ec1..37c7d7389 100644 --- a/src/history_manager.py +++ b/src/history_manager.py @@ -4,7 +4,7 @@ ## Copyright (C) 2006 Dimitur Kirov <dkirov AT gmail.com> ## Copyright (C) 2006-2007 Jean-Marie Traissard <jim AT lapin.org> ## Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2007 Stephan Erb <steve-e AT h3c.de> ## Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org> ## diff --git a/src/history_window.py b/src/history_window.py index 958cae331..2b3ad5742 100644 --- a/src/history_window.py +++ b/src/history_window.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/history_window.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005 Vincent Hanquez <tab AT snarc.org> ## Copyright (C) 2005-2006 Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2006 Dimitur Kirov <dkirov AT gmail.com> diff --git a/src/htmltextview.py b/src/htmltextview.py index 3f1b474c1..981dc5531 100644 --- a/src/htmltextview.py +++ b/src/htmltextview.py @@ -4,7 +4,7 @@ ## Copyright (C) 2005 Gustavo J. A. M. Carneiro ## Copyright (C) 2006 Santiago Gala ## Copyright (C) 2006-2007 Jean-Marie Traissard <jim AT lapin.org> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2007 Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org> ## Julien Pivotto <roidelapluie AT gmail.com> diff --git a/src/ipython_view.py b/src/ipython_view.py index 6ed52d236..c26a0bbf9 100644 --- a/src/ipython_view.py +++ b/src/ipython_view.py @@ -2,7 +2,7 @@ # -*- coding:utf-8 -*- ## src/ipython_view.py ## -## Copyright (C) 2008-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2008-2012 Yann Leboulanger <asterix AT lagaule.org> ## ## This file is part of Gajim. ## @@ -51,12 +51,6 @@ from StringIO import StringIO try: import IPython - import IPython.iplib - import IPython.prefilter - import IPython.Shell - import IPython.genutils - import IPython.shadowns - import IPython.history except ImportError: IPython = None @@ -96,33 +90,52 @@ class IterableIPShell: @type input_func: function """ if input_func: - IPython.iplib.raw_input_original = input_func + IPython.frontend.terminal.interactiveshell.raw_input_original = input_func if cin: - IPython.Shell.Term.cin = cin + IPython.utils.io.stdin = IPython.utils.io.IOStream(cin) if cout: - IPython.Shell.Term.cout = cout + IPython.utils.io.stdout = IPython.utils.io.IOStream(cout) if cerr: - IPython.Shell.Term.cerr = cerr + IPython.utils.io.stderr = IPython.utils.io.IOStream(cerr) # This is to get rid of the blockage that accurs during # IPython.Shell.InteractiveShell.user_setup() - IPython.iplib.raw_input = lambda x: None + IPython.utils.io.raw_input = lambda x: None - self.term = IPython.genutils.IOTerm(cin=cin, cout=cout, cerr=cerr) + self.term = IPython.utils.io.IOTerm(stdin=cin, stdout=cout, stderr=cerr) os.environ['TERM'] = 'dumb' excepthook = sys.excepthook - self.IP = IPython.Shell.make_IPython( - argv, user_ns=user_ns, - user_global_ns=user_global_ns, - embedded=True, - shell_class=IPython.Shell.InteractiveShell) + + from IPython.config.loader import Config + cfg = Config() + cfg.InteractiveShell.colors = "Linux" + + self.IP = IPython.frontend.terminal.embed.InteractiveShellEmbed(config=cfg, user_ns=user_ns) self.IP.system = lambda cmd: self.shell(self.IP.var_expand(cmd), header='IPython system call: ', - verbose=self.IP.rc.system_verbose) + local_ns=user_ns) + #global_ns=user_global_ns) + #verbose=self.IP.rc.system_verbose) + + self.IP.raw_input = input_func sys.excepthook = excepthook self.iter_more = 0 self.history_level = 0 self.complete_sep = re.compile('[\s\{\}\[\]\(\)]') + self.updateNamespace({'exit':lambda:None}) + self.updateNamespace({'quit':lambda:None}) + self.IP.readline_startup_hook(self.IP.pre_readline) + # Workaround for updating namespace with sys.modules + # + self.__update_namespace() + + def __update_namespace(self): + ''' + Update self.IP namespace for autocompletion with sys.modules + ''' + for k,v in sys.modules.items(): + if not '.' in k: + self.IP.user_ns.update({k:v}) def execute(self): """ @@ -130,34 +143,69 @@ class IterableIPShell: """ self.history_level = 0 orig_stdout = sys.stdout - sys.stdout = IPython.Shell.Term.cout - try: - line = self.IP.raw_input(None, self.iter_more) + sys.stdout = self.term.stdout + + orig_stdin = sys.stdin + sys.stdin = IPython.utils.io.stdin; + self.prompt = self.generatePrompt(self.iter_more) + + self.IP.hooks.pre_prompt_hook() + if self.iter_more: + try: + self.prompt = self.generatePrompt(True) + except: + self.IP.showtraceback() if self.IP.autoindent: - self.IP.readline_startup_hook(None) + self.IP.rl_do_indent = True + + try: + line = self.IP.raw_input(self.prompt) except KeyboardInterrupt: self.IP.write('\nKeyboardInterrupt\n') - self.IP.resetbuffer() - # keep cache in sync with the prompt counter: - self.IP.outputcache.prompt_count -= 1 - - if self.IP.autoindent: - self.IP.indent_current_nsp = 0 - self.iter_more = 0 + self.IP.input_splitter.reset() except: self.IP.showtraceback() else: - self.iter_more = self.IP.push(line) + self.IP.input_splitter.push(line) + self.iter_more = self.IP.input_splitter.push_accepts_more() + self.prompt = self.generatePrompt(self.iter_more) if (self.IP.SyntaxTB.last_syntax_error and - self.IP.rc.autoedit_syntax): + self.IP.autoedit_syntax): self.IP.edit_syntax_error() - if self.iter_more: - self.prompt = str(self.IP.outputcache.prompt2).strip() - if self.IP.autoindent: - self.IP.readline_startup_hook(self.IP.pre_readline) - else: - self.prompt = str(self.IP.outputcache.prompt1).strip() + if not self.iter_more: + source_raw = self.IP.input_splitter.source_raw_reset()[1] + self.IP.run_cell(source_raw, store_history=True) + else: + # TODO: Auto-indent + # + pass + sys.stdout = orig_stdout + sys.stdin = orig_stdin + def generatePrompt(self, is_continuation): + ''' + Generate prompt depending on is_continuation value + + @param is_continuation + @type is_continuation: boolean + + @return: The prompt string representation + @rtype: string + + ''' + + # Backwards compatibility with ipyton-0.11 + # + ver = IPython.__version__ + if '0.11' in ver: + prompt = self.IP.hooks.generate_prompt(is_continuation) + else: + if is_continuation: + prompt = self.IP.prompt_manager.render('in2') + else: + prompt = self.IP.prompt_manager.render('in') + + return prompt def historyBack(self): """ @@ -214,28 +262,37 @@ class IterableIPShell: @rtype: tuple """ split_line = self.complete_sep.split(line) - possibilities = self.IP.complete(split_line[-1]) - - try: - __builtins__.all() - except AttributeError: - def all(iterable): - for element in iterable: - if not element: - return False - return True - - def common_prefix(seq): - """ - Return the common prefix of a sequence of strings - """ - return "".join(c for i, c in enumerate(seq[0]) - if all(s.startswith(c, i) for s in seq)) + if split_line[-1]: + possibilities = self.IP.complete(split_line[-1]) + else: + completed = line + possibilities = ['',[]] if possibilities: - completed = line[:-len(split_line[-1])]+common_prefix(possibilities) + def _commonPrefix(str1, str2): + ''' + Reduction function. returns common prefix of two given strings. + + @param str1: First string. + @type str1: string + @param str2: Second string + @type str2: string + + @return: Common prefix to both strings. + @rtype: string + ''' + for i in range(len(str1)): + if not str2.startswith(str1[:i+1]): + return str1[:i] + return str1 + + if possibilities[1]: + common_prefix = reduce(_commonPrefix, possibilities[1]) or line[-1] + completed = line[:-len(split_line[-1])]+common_prefix + else: + completed = line else: completed = line - return completed, possibilities + return completed, possibilities[1] def shell(self, cmd,verbose=0,debug=0,header=''): @@ -332,7 +389,7 @@ class ConsoleView(gtk.TextView): for tag in ansi_tags: i = segments.index(tag) self.text_buffer.insert_with_tags_by_name(self.text_buffer.get_end_iter(), - segments[i+1], tag) + segments[i+1], str(tag)) segments.pop(i) if not editable: self.text_buffer.apply_tag_by_name('notouch', @@ -472,6 +529,7 @@ class IPythonView(ConsoleView, IterableIPShell): input_func=self.raw_input) # self.connect('key_press_event', self.keyPress) self.execute() + self.prompt = self.generatePrompt(False) self.cout.truncate(0) self.showPrompt(self.prompt) self.interrupt = False diff --git a/src/message_control.py b/src/message_control.py index be94ab3dd..e7a32fc09 100644 --- a/src/message_control.py +++ b/src/message_control.py @@ -5,7 +5,7 @@ ## Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2006-2007 Jean-Marie Traissard <jim AT lapin.org> ## Travis Shirk <travis AT pobox.com> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2007 Julien Pivotto <roidelapluie AT gmail.com> ## Stephan Erb <steve-e AT h3c.de> ## Copyright (C) 2007-2008 Brendan Taylor <whateley AT gmail.com> diff --git a/src/message_textview.py b/src/message_textview.py index 70cf3afea..6bc4a4c7d 100644 --- a/src/message_textview.py +++ b/src/message_textview.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/message_textview.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005-2007 Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2006 Dimitur Kirov <dkirov AT gmail.com> ## Copyright (C) 2008-2009 Julien Pivotto <roidelapluie AT gmail.com> diff --git a/src/message_window.py b/src/message_window.py index eeae4bbcd..57d4cc5bd 100644 --- a/src/message_window.py +++ b/src/message_window.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/message_window.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005-2008 Travis Shirk <travis AT pobox.com> ## Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2006 Geobert Quach <geobert AT gmail.com> @@ -307,7 +307,6 @@ class MessageWindow(object): # NOTE: we do not call set_control_active(True) since we don't know # whether the tab is the active one. self.show_title() - gobject.idle_add(control.msg_textview.grab_focus) def on_tab_eventbox_button_press_event(self, widget, event, child): if event.button == 3: # right click diff --git a/src/music_track_listener.py b/src/music_track_listener.py index 4d0df3bf8..bb2427c4a 100644 --- a/src/music_track_listener.py +++ b/src/music_track_listener.py @@ -3,7 +3,7 @@ ## ## Copyright (C) 2006 Gustavo Carneiro <gjcarneiro AT gmail.com> ## Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2008 Jean-Marie Traissard <jim AT lapin.org> ## Jonathan Schleifer <js-gajim AT webkeks.org> ## Stephan Erb <steve-e AT h3c.de> diff --git a/src/negotiation.py b/src/negotiation.py index 869e2fb8b..d6dd8b7c3 100644 --- a/src/negotiation.py +++ b/src/negotiation.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/negotiation.py ## -## Copyright (C) 2007-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2007-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2007-2008 Brendan Taylor <whateley AT gmail.com> ## ## This file is part of Gajim. diff --git a/src/network_manager_listener.py b/src/network_manager_listener.py index 303c1488b..ccb44ee83 100644 --- a/src/network_manager_listener.py +++ b/src/network_manager_listener.py @@ -4,7 +4,7 @@ ## Copyright (C) 2006 Jeffrey C. Ollie <jeff AT ocjtech.us> ## Nikos Kouremenos <kourem AT gmail.com> ## Stefan Bethge <stefan AT lanpartei.de> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## ## This file is part of Gajim. ## diff --git a/src/notify.py b/src/notify.py index 1f6eada51..b214caf8b 100644 --- a/src/notify.py +++ b/src/notify.py @@ -4,7 +4,7 @@ ## Copyright (C) 2005 Sebastian Estienne ## Copyright (C) 2005-2006 Andrew Sayman <lorien420 AT myrealbox.com> ## Copyright (C) 2005-2007 Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2005-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2005-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2006 Travis Shirk <travis AT pobox.com> ## Copyright (C) 2006-2008 Jean-Marie Traissard <jim AT lapin.org> ## Copyright (C) 2007 Julien Pivotto <roidelapluie AT gmail.com> @@ -73,7 +73,7 @@ def get_show_in_systray(event, account, contact, type_=None): return gajim.config.get('trayicon_notification_on_events') def popup(event_type, jid, account, msg_type='', path_to_image=None, title=None, -text=None): +text=None, timeout=-1): """ Notify a user of an event. It first tries to a valid implementation of the Desktop Notification Specification. If that fails, then we fall back to @@ -83,11 +83,14 @@ text=None): if not path_to_image: path_to_image = gtkgui_helpers.get_icon_path('gajim-chat_msg_recv', 48) + if timeout < 0: + timeout = gajim.config.get('notification_timeout') + # Try to show our popup via D-Bus and notification daemon if gajim.config.get('use_notif_daemon') and dbus_support.supported: try: DesktopNotification(event_type, jid, account, msg_type, - path_to_image, title, gobject.markup_escape_text(text)) + path_to_image, title, gobject.markup_escape_text(text), timeout) return # sucessfully did D-Bus Notification procedure! except dbus.DBusException, e: # Connection to D-Bus failed @@ -112,8 +115,7 @@ text=None): _title = title notification = pynotify.Notification(_title, _text) - timeout = gajim.config.get('notification_timeout') * 1000 # make it ms - notification.set_timeout(timeout) + notification.set_timeout(timeout*1000) notification.set_category(event_type) notification.set_data('event_type', event_type) @@ -134,7 +136,7 @@ text=None): # Either nothing succeeded or the user wants old-style notifications instance = PopupNotificationWindow(event_type, jid, account, msg_type, - path_to_image, title, text) + path_to_image, title, text, timeout) gajim.interface.roster.popup_notification_windows.append(instance) def on_pynotify_notification_clicked(notification, action): @@ -157,7 +159,8 @@ class Notification: if obj.do_popup: popup(obj.popup_event_type, obj.jid, obj.conn.name, obj.popup_msg_type, path_to_image=obj.popup_image, - title=obj.popup_title, text=obj.popup_text) + title=obj.popup_title, text=obj.popup_text, + timeout=obj.popup_timeout) if obj.do_sound: if obj.sound_file: @@ -235,11 +238,12 @@ class DesktopNotification: """ def __init__(self, event_type, jid, account, msg_type='', - path_to_image=None, title=None, text=None): + path_to_image=None, title=None, text=None, timeout=-1): self.path_to_image = os.path.abspath(path_to_image) self.event_type = event_type self.title = title self.text = text + self.timeout = timeout # 0.3.1 is the only version of notification daemon that has no way # to determine which version it is. If no method exists, it means # they're using that one. @@ -302,7 +306,6 @@ class DesktopNotification: self.get_version() def attempt_notify(self): - timeout = gajim.config.get('notification_timeout') # in seconds ntype = self.ntype if self.kde_notifications: notification_text = ('<html><img src="%(image)s" align=left />' \ @@ -320,8 +323,8 @@ class DesktopNotification: # actions (stringlist) (dbus.String('default'), dbus.String(self.event_type), dbus.String('ignore'), dbus.String(_('Ignore'))), - [], # hints (not used in KDE yet) - dbus.UInt32(timeout*1000), # timeout (int), in ms + [], # hints (not used in KDE yet) + dbus.UInt32(self.timeout*1000), # timeout (int), in ms reply_handler=self.attach_by_id, error_handler=self.notify_another_way) return @@ -345,7 +348,7 @@ class DesktopNotification: actions, [''], True, - dbus.UInt32(timeout), + dbus.UInt32(self.timeout), reply_handler=self.attach_by_id, error_handler=self.notify_another_way) except AttributeError: @@ -392,7 +395,7 @@ class DesktopNotification: dbus.String(text), actions, hints, - dbus.UInt32(timeout*1000), + dbus.UInt32(self.timeout*1000), reply_handler=self.attach_by_id, error_handler=self.notify_another_way) except Exception, e: @@ -407,7 +410,7 @@ class DesktopNotification: dbus.String(self.text), dbus.String(''), hints, - dbus.UInt32(timeout*1000), + dbus.UInt32(self.timeout*1000), reply_handler=self.attach_by_id, error_handler=self.notify_another_way) except Exception, e: @@ -422,7 +425,7 @@ class DesktopNotification: str(e)) instance = PopupNotificationWindow(self.event_type, self.jid, self.account, self.msg_type, self.path_to_image, self.title, - self.text) + self.text, self.timeout) gajim.interface.roster.popup_notification_windows.append(instance) def on_action_invoked(self, id_, reason): diff --git a/src/plugins/pluginmanager.py b/src/plugins/pluginmanager.py index 875c64356..71bf6c469 100644 --- a/src/plugins/pluginmanager.py +++ b/src/plugins/pluginmanager.py @@ -475,7 +475,10 @@ class PluginManager(object): except TypeError, type_error: # set plugin localization - module_attr._ = _ + try: + module_attr._ = _ + except AttributeError, type_error: + pass except ConfigParser.NoOptionError, type_error: # all fields are required log.debug('%s : %s' % (module_attr_name, diff --git a/src/profile_window.py b/src/profile_window.py index df4c6fd88..d5abb81a4 100644 --- a/src/profile_window.py +++ b/src/profile_window.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/profile_window.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005-2006 Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2006-2008 Jean-Marie Traissard <jim AT lapin.org> ## diff --git a/src/remote_control.py b/src/remote_control.py index 3f6a8b468..25160eb4f 100644 --- a/src/remote_control.py +++ b/src/remote_control.py @@ -4,7 +4,7 @@ ## Copyright (C) 2005-2006 Andrew Sayman <lorien420 AT myrealbox.com> ## Dimitur Kirov <dkirov AT gmail.com> ## Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2005-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2005-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2006-2007 Travis Shirk <travis AT pobox.com> ## Copyright (C) 2006-2008 Jean-Marie Traissard <jim AT lapin.org> ## Copyright (C) 2007 Lukas Petrovicky <lukas AT petrovicky.net> @@ -723,7 +723,7 @@ class SignalObject(dbus.service.Object): for node in path: key += node + '#' key += name - prefs_dict[DBUS_STRING(key)] = DBUS_STRING(value[1]) + prefs_dict[DBUS_STRING(key)] = DBUS_STRING(value) gajim.config.foreach(get_prefs) return prefs_dict diff --git a/src/roster_window.py b/src/roster_window.py index ce3af0a09..367ac3b52 100644 --- a/src/roster_window.py +++ b/src/roster_window.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- ## src/roster_window.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005 Alex Mauer <hawke AT hawkesnest.net> ## Stéphan Kochen <stephan AT kochen.nl> ## Copyright (C) 2005-2006 Dimitur Kirov <dkirov AT gmail.com> @@ -726,17 +726,9 @@ class RosterWindow: if not contact: return - if not force and (self.contact_has_pending_roster_events(contact, - account) or gajim.interface.msg_win_mgr.get_control(jid, account)): - # Contact has pending events or window - #TODO: or single message windows? Bur they are not listed for the - # moment - key = (jid, account) - if not key in self.contacts_to_be_removed: - self.contacts_to_be_removed[key] = {'backend': backend} - # if more pending event, don't remove from roster - if self.contact_has_pending_roster_events(contact, account): - return False + if not force and self.contact_has_pending_roster_events(contact, + account): + return False iters = self._get_contact_iter(jid, account, contact, self.model) if iters: @@ -749,25 +741,36 @@ class RosterWindow: else: self._remove_entity(contact, account) - if backend and (not gajim.interface.msg_win_mgr.get_control(jid, - account) or force): - # If a window is still opened: don't remove contact instance - # Remove contact before redrawing, otherwise the old - # numbers will still be show - gajim.contacts.remove_jid(account, jid, remove_meta=True) - if iters: - rest_of_family = [data for data in family - if account != data['account'] or jid != data['jid']] - if rest_of_family: - # reshow the rest of the family - brothers = self._add_metacontact_family(rest_of_family, - account) - for c, acc in brothers: - self.draw_completely(c.jid, acc) + old_grps = [] + if backend: + if not gajim.interface.msg_win_mgr.get_control(jid, account) or \ + force: + # If a window is still opened: don't remove contact instance + # Remove contact before redrawing, otherwise the old + # numbers will still be show + gajim.contacts.remove_jid(account, jid, remove_meta=True) + if iters: + rest_of_family = [data for data in family + if account != data['account'] or jid != data['jid']] + if rest_of_family: + # reshow the rest of the family + brothers = self._add_metacontact_family(rest_of_family, + account) + for c, acc in brothers: + self.draw_completely(c.jid, acc) + else: + for c in gajim.contacts.get_contacts(account, jid): + c.sub = 'none' + c.show = 'not in roster' + c.status = '' + old_grps = c.get_shown_groups() + c.groups = [_('Not in Roster')] + self._add_entity(c, account) + self.draw_contact(jid, account) if iters: # Draw all groups of the contact - for group in contact.get_shown_groups(): + for group in contact.get_shown_groups() + old_grps: self.draw_group(group, account) self.draw_account(account) @@ -1160,29 +1163,6 @@ class RosterWindow: name += i18n.paragraph_direction_mark(unicode(name)) name += u' (%d)' % nb_connected_contact - # show (account_name) if there are 2 contact with same jid - # in merged mode - if self.regroup: - add_acct = False - # look through all contacts of all accounts - for account_ in gajim.connections: - # useless to add account name - if account_ == account: - continue - for jid_ in gajim.contacts.get_jid_list(account_): - contact_ = gajim.contacts.get_first_contact_from_jid( - account_, jid_) - if contact_.get_shown_name() == contact.get_shown_name() \ - and (jid_, account_) != (jid, account): - add_acct = True - break - if add_acct: - # No need to continue in other account - # if we already found one - break - if add_acct: - name += ' (' + account + ')' - # add status msg, if not empty, under contact name in # the treeview if contact.status and gajim.config.get('show_status_msgs_in_roster'): @@ -1451,10 +1431,27 @@ class RosterWindow: self.tree.set_cursor(path) def _readjust_expand_collapse_state(self): - for account in gajim.connections: - self._adjust_account_expand_collapse_state(account) - for group in gajim.groups[account]: - self._adjust_group_expand_collapse_state(group, account) + def func(model, path, iter_): + type_ = model[iter_][C_TYPE] + acct = model[iter_][C_ACCOUNT].decode('utf-8') + jid = model[iter_][C_JID].decode('utf-8') + key = None + if type_ == 'account': + key = acct + elif type_ == 'group': + key = acct + jid + elif type_ == 'contact': + parent_iter = model.iter_parent(iter_) + ptype = model[parent_iter][C_TYPE] + if ptype == 'group': + grp = model[parent_iter][C_JID].decode('utf-8') + key = acct + grp + jid + if key: + if key in self.collapsed_rows: + self.tree.collapse_row(path) + else: + self.tree.expand_row(path, False) + self.modelfilter.foreach(func) def _adjust_account_expand_collapse_state(self, account): """ @@ -1869,6 +1866,18 @@ class RosterWindow: Only performed if removal was requested before but the contact still had pending events """ + + msg_ids = [] + for ev in event_list: + if ev.type_ != 'printed_chat': + continue + if len(ev.parameters) > 3 and ev.parameters[3]: + # There is a msg_id + msg_ids.append(ev.parameters[3]) + + if msg_ids: + gajim.logger.set_read_messages(msg_ids) + contact_list = ((event.jid.split('/')[0], event.account) for event in \ event_list) @@ -2615,9 +2624,14 @@ class RosterWindow: obj.session.control.print_conversation(obj.msgtxt, typ, tim=obj.timestamp, encrypted=obj.encrypted, subject=obj.subject, - xhtml=obj.xhtml, displaymarking=obj.displaymarking) + xhtml=obj.xhtml, displaymarking=obj.displaymarking, + msg_id=obj.msg_id) if obj.msg_id: - gajim.logger.set_read_messages([obj.msg_id]) + pw = obj.session.control.parent_win + end = obj.session.control.was_at_the_end + if not pw or (pw.get_active_control() and obj.session.control \ + == pw.get_active_control() and pw.is_active() and end): + gajim.logger.set_read_messages([obj.msg_id]) elif obj.popup: contact = gajim.contacts.get_contact(obj.conn.name, obj.jid) obj.session.control = gajim.interface.new_chat(contact, @@ -2757,9 +2771,9 @@ class RosterWindow: return if model[titer][C_TYPE] in ('contact', 'self_contact'): # we're on a contact entry in the roster - account = model[titer][C_ACCOUNT].decode('utf-8') - jid = model[titer][C_JID].decode('utf-8') if self.tooltip.timeout == 0 or self.tooltip.id != props[0]: + account = model[titer][C_ACCOUNT].decode('utf-8') + jid = model[titer][C_JID].decode('utf-8') self.tooltip.id = row contacts = gajim.contacts.get_contacts(account, jid) connected_contacts = [] @@ -2771,76 +2785,79 @@ class RosterWindow: connected_contacts = contacts self.tooltip.account = account self.tooltip.timeout = gobject.timeout_add(500, - self.show_tooltip, connected_contacts) + self.show_tooltip, connected_contacts) elif model[titer][C_TYPE] == 'groupchat': - account = model[titer][C_ACCOUNT].decode('utf-8') - jid = model[titer][C_JID].decode('utf-8') if self.tooltip.timeout == 0 or self.tooltip.id != props[0]: + account = model[titer][C_ACCOUNT].decode('utf-8') + jid = model[titer][C_JID].decode('utf-8') self.tooltip.id = row contact = gajim.contacts.get_contacts(account, jid) self.tooltip.account = account self.tooltip.timeout = gobject.timeout_add(500, - self.show_tooltip, contact) + self.show_tooltip, contact) elif model[titer][C_TYPE] == 'account': # we're on an account entry in the roster - account = model[titer][C_ACCOUNT].decode('utf-8') - if account == 'all': - if self.tooltip.timeout == 0 or self.tooltip.id != props[0]: + if self.tooltip.timeout == 0 or self.tooltip.id != props[0]: + account = model[titer][C_ACCOUNT].decode('utf-8') + if account == 'all': self.tooltip.id = row self.tooltip.account = None self.tooltip.timeout = gobject.timeout_add(500, - self.show_tooltip, []) - return - jid = gajim.get_jid_from_account(account) - contacts = [] - connection = gajim.connections[account] - # get our current contact info - - nbr_on, nbr_total = gajim.contacts.get_nb_online_total_contacts( - accounts = [account]) - account_name = account - if gajim.account_is_connected(account): - account_name += ' (%s/%s)' % (repr(nbr_on), repr(nbr_total)) - contact = gajim.contacts.create_self_contact(jid=jid, - account=account, name=account_name, - show=connection.get_status(), status=connection.status, - resource=connection.server_resource, - priority=connection.priority) - if gajim.connections[account].gpg: - contact.keyID = gajim.config.get_per('accounts', - connection.name, 'keyid') - contacts.append(contact) - # if we're online ... - if connection.connection: - roster = connection.connection.getRoster() - # in threadless connection when no roster stanza is sent, - # 'roster' is None - if roster and roster.getItem(jid): - resources = roster.getResources(jid) - # ...get the contact info for our other online resources - for resource in resources: - # Check if we already have this resource - found = False - for contact_ in contacts: - if contact_.resource == resource: - found = True - break - if found: - continue - show = roster.getShow(jid+'/'+resource) - if not show: - show = 'online' - contact = gajim.contacts.create_self_contact( - jid=jid, account=account, show=show, - status=roster.getStatus(jid + '/' + resource), - priority=roster.getPriority( - jid + '/' + resource), resource=resource) - contacts.append(contact) - if self.tooltip.timeout == 0 or self.tooltip.id != props[0]: + self.show_tooltip, []) + return + jid = gajim.get_jid_from_account(account) + contacts = [] + connection = gajim.connections[account] + # get our current contact info + + nbr_on, nbr_total = gajim.\ + contacts.get_nb_online_total_contacts( + accounts=[account]) + account_name = account + if gajim.account_is_connected(account): + account_name += ' (%s/%s)' % (repr(nbr_on), + repr(nbr_total)) + contact = gajim.contacts.create_self_contact(jid=jid, + account=account, name=account_name, + show=connection.get_status(), status=connection.status, + resource=connection.server_resource, + priority=connection.priority) + if gajim.connections[account].gpg: + contact.keyID = gajim.config.get_per('accounts', + connection.name, 'keyid') + contacts.append(contact) + # if we're online ... + if connection.connection: + roster = connection.connection.getRoster() + # in threadless connection when no roster stanza is sent + # 'roster' is None + if roster and roster.getItem(jid): + resources = roster.getResources(jid) + # ...get the contact info for our other online + # resources + for resource in resources: + # Check if we already have this resource + found = False + for contact_ in contacts: + if contact_.resource == resource: + found = True + break + if found: + continue + show = roster.getShow(jid+'/'+resource) + if not show: + show = 'online' + contact = gajim.contacts.create_self_contact( + jid=jid, account=account, show=show, + status=roster.getStatus( + jid + '/' + resource), + priority=roster.getPriority( + jid + '/' + resource), resource=resource) + contacts.append(contact) self.tooltip.id = row self.tooltip.account = None self.tooltip.timeout = gobject.timeout_add(500, - self.show_tooltip, contacts) + self.show_tooltip, contacts) def on_agent_logging(self, widget, jid, state, account): """ @@ -3401,10 +3418,37 @@ class RosterWindow: elif type_ == 'agent': self.on_remove_agent(widget, list_) - elif gtk.gdk.keyval_to_unicode(event.keyval): # if we got unicode symbol + elif not (event.state & (gtk.gdk.CONTROL_MASK | gtk.gdk.MOD1_MASK)) and\ + gtk.gdk.keyval_to_unicode(event.keyval): + # if we got unicode symbol without ctrl / alt num = gtk.gdk.keyval_to_unicode(event.keyval) self.enable_rfilter(unichr(num)) + elif event.state & gtk.gdk.CONTROL_MASK and event.state & gtk.gdk.SHIFT_MASK and event.keyval == gtk.keysyms.U: + self.enable_rfilter('') + self.rfilter_entry.emit('key_press_event', event) + + elif event.keyval == gtk.keysyms.Left: + treeselection = self.tree.get_selection() + model, list_of_paths = treeselection.get_selected_rows() + if len(list_of_paths) != 1: + return + path = list_of_paths[0] + iter_ = model.get_iter(path) + if model.iter_has_child(iter_): + self.tree.collapse_row(path) + return True + elif event.keyval == gtk.keysyms.Right: + treeselection = self.tree.get_selection() + model, list_of_paths = treeselection.get_selected_rows() + if len(list_of_paths) != 1: + return + path = list_of_paths[0] + iter_ = model.get_iter(path) + if model.iter_has_child(iter_): + self.tree.expand_row(path, False) + return True + def on_roster_treeview_button_release_event(self, widget, event): try: path = self.tree.get_path_at_pos(int(event.x), int(event.y))[0] @@ -4126,7 +4170,10 @@ class RosterWindow: jid = model[titer][C_JID].decode('utf-8') account = model[titer][C_ACCOUNT].decode('utf-8') contact = gajim.contacts.get_contact(account, jid) - for group in contact.groups: + groups = contact.groups + if not groups: + groups = [_('General')] + for group in groups: if account + group + jid not in self.collapsed_rows: self.collapsed_rows.append(account + group + jid) family = gajim.contacts.get_metacontacts_family(account, jid) @@ -4288,6 +4335,9 @@ class RosterWindow: elif event.keyval in (gtk.keysyms.Up, gtk.keysyms.Down): self.tree.grab_focus() self.tree.emit('key_press_event', event) + elif event.keyval == gtk.keysyms.BackSpace: + if widget.get_text() == '': + self.disable_rfilter() def enable_rfilter(self, search_string): if self.rfilter_enabled: @@ -4768,22 +4818,21 @@ class RosterWindow: """ Initialize opened and closed 'transport' iconset dict """ - if gajim.config.get('use_transports_iconsets'): - folder = os.path.join(helpers.get_transport_path(transport), - '16x16') - pixo, pixc = gtkgui_helpers.load_icons_meta() - self.transports_state_images['opened'][transport] = \ - gtkgui_helpers.load_iconset(folder, pixo, transport=True) - self.transports_state_images['closed'][transport] = \ - gtkgui_helpers.load_iconset(folder, pixc, transport=True) - folder = os.path.join(helpers.get_transport_path(transport), - '32x32') - self.transports_state_images['32'][transport] = \ - gtkgui_helpers.load_iconset(folder, transport=True) - folder = os.path.join(helpers.get_transport_path(transport), - '16x16') - self.transports_state_images['16'][transport] = \ - gtkgui_helpers.load_iconset(folder, transport=True) + if not gajim.config.get('use_transports_iconsets'): + return + + folder = os.path.join(helpers.get_transport_path(transport), '32x32') + self.transports_state_images['32'][transport] = \ + gtkgui_helpers.load_iconset(folder, transport=True) + folder = os.path.join(helpers.get_transport_path(transport), '16x16') + self.transports_state_images['16'][transport] = \ + gtkgui_helpers.load_iconset(folder, transport=True) + + pixo, pixc = gtkgui_helpers.load_icons_meta() + self.transports_state_images['opened'][transport] = \ + gtkgui_helpers.load_iconset(folder, pixo, transport=True) + self.transports_state_images['closed'][transport] = \ + gtkgui_helpers.load_iconset(folder, pixc, transport=True) def update_jabber_state_images(self): # Update the roster diff --git a/src/search_window.py b/src/search_window.py index 1bc2c8a46..2a0b41ad9 100644 --- a/src/search_window.py +++ b/src/search_window.py @@ -2,7 +2,7 @@ ## src/search_window.py ## ## Copyright (C) 2007 Stephan Erb <steve-e AT h3c.de> -## Copyright (C) 2007-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2007-2012 Yann Leboulanger <asterix AT lagaule.org> ## ## This file is part of Gajim. ## diff --git a/src/session.py b/src/session.py index b41cc9e24..efad61884 100644 --- a/src/session.py +++ b/src/session.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/session.py ## -## Copyright (C) 2008-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2008-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2008 Brendan Taylor <whateley AT gmail.com> ## Jonathan Schleifer <js-gajim AT webkeks.org> ## Stephan Erb <steve-e AT h3c.de> @@ -52,8 +52,6 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession): def detach_from_control(self): if self.control: self.control.set_session(None) - gajim.ged.remove_event_handler('decrypted-message-received', - ged.GUI1, self._nec_decrypted_message_received) def acknowledge_termination(self): self.detach_from_control() @@ -96,7 +94,7 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession): msg_to_log, tim=obj.timestamp, subject=obj.subject) except exceptions.PysqliteOperationalError, e: gajim.nec.push_incoming_event(InformationEvent(None, - conn=self.conn, level='error', pri_txt=_('Disk WriteError'), + conn=self.conn, level='error', pri_txt=_('Disk Write Error'), sec_txt=str(e))) except exceptions.DatabaseMalformed: pritext = _('Database Error') diff --git a/src/statusicon.py b/src/statusicon.py index f580f4238..a8a396228 100644 --- a/src/statusicon.py +++ b/src/statusicon.py @@ -3,7 +3,7 @@ ## ## Copyright (C) 2006 Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2006-2007 Jean-Marie Traissard <jim AT lapin.org> -## Copyright (C) 2006-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2007 Lukas Petrovicky <lukas AT petrovicky.net> ## Julien Pivotto <roidelapluie AT gmail.com> ## Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org> diff --git a/src/tooltips.py b/src/tooltips.py index f5ae2511a..db5064ad3 100644 --- a/src/tooltips.py +++ b/src/tooltips.py @@ -5,7 +5,7 @@ ## Stéphan Kochen <stephan AT kochen.nl> ## Copyright (C) 2005-2006 Dimitur Kirov <dkirov AT gmail.com> ## Copyright (C) 2005-2007 Nikos Kouremenos <kourem AT gmail.com> -## Copyright (C) 2005-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2005-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2006 Travis Shirk <travis AT pobox.com> ## Stefan Bethge <stefan AT lanpartei.de> ## Copyright (C) 2006-2007 Jean-Marie Traissard <jim AT lapin.org> @@ -498,6 +498,11 @@ class RosterTooltip(NotificationAreaTooltip): name_markup = u'<span weight="bold">' + \ gobject.markup_escape_text(prim_contact.get_shown_name())\ + '</span>' + if gajim.config.get('mergeaccounts'): + name_markup += u" <span foreground='#888A85'>(" + \ + gobject.markup_escape_text(prim_contact.account.name) \ + + ')</span>' + if self.account and helpers.jid_is_blocked(self.account, prim_contact.jid): name_markup += _(' [blocked]') diff --git a/src/upower_listener.py b/src/upower_listener.py index f8d6c79de..e5b489d57 100644 --- a/src/upower_listener.py +++ b/src/upower_listener.py @@ -1,6 +1,6 @@ ## src/upower_listener.py ## -## Copyright (C) 2006-2011 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2006-2012 Yann Leboulanger <asterix AT lagaule.org> ## ## This file is part of Gajim. ## diff --git a/src/vcard.py b/src/vcard.py index 21de59248..27c5dce42 100644 --- a/src/vcard.py +++ b/src/vcard.py @@ -1,7 +1,7 @@ # -*- coding:utf-8 -*- ## src/vcard.py ## -## Copyright (C) 2003-2010 Yann Leboulanger <asterix AT lagaule.org> +## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org> ## Copyright (C) 2005 Vincent Hanquez <tab AT snarc.org> ## Copyright (C) 2005-2006 Nikos Kouremenos <kourem AT gmail.com> ## Copyright (C) 2006 Junglecow J <junglecow AT gmail.com> @@ -242,7 +242,7 @@ class VcardWindow: return if obj.resource: # It's a muc occupant vcard - if obj.fjid != self.real_jid: + if obj.fjid != self.contact.jid: return else: if obj.jid != self.contact.jid: @@ -257,14 +257,18 @@ class VcardWindow: self.update_progressbar_timeout_id = None def set_last_status_time(self, obj): + if obj.conn.name != self.account: + return if obj.fjid != self.real_jid: return self.fill_status_label() def set_os_info(self, obj): + if obj.conn.name != self.account: + return if self.xml.get_object('information_notebook').get_n_pages() < 5: return - if obj.fjid != self.real_jid: + if obj.fjid != self.contact.jid and obj.fjid != self.real_jid: return i = 0 client = '' @@ -291,9 +295,11 @@ class VcardWindow: self.test_remove_progressbar() def set_entity_time(self, obj): + if obj.conn.name != self.account: + return if self.xml.get_object('information_notebook').get_n_pages() < 5: return - if obj.fjid != self.real_jid: + if obj.fjid != self.contact.jid and obj.fjid != self.real_jid: return i = 0 time_s = '' |