Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Melcer <liori@exroot.org>2006-09-13 20:47:58 +0400
committerTomasz Melcer <liori@exroot.org>2006-09-13 20:47:58 +0400
commit9b29c4c8b8a10ed96f55e9b54be0b2c64f8f69e5 (patch)
treef657996841c3b66d0a85c06d12470ca582839246
parent5824d3b873054e8aa923c54fe6e60e87858dd3df (diff)
Merging changes from trunk (6561:6774)
-rw-r--r--data/glade/account_context_menu.glade20
-rw-r--r--data/glade/add_new_contact_window.glade466
-rw-r--r--data/glade/edit_groups_dialog.glade5
-rw-r--r--data/glade/preferences_window.glade86
-rw-r--r--data/glade/profile_window.glade1968
-rw-r--r--data/glade/roster_contact_context_menu.glade46
-rw-r--r--data/glade/vcard_information_window.glade2745
-rw-r--r--data/iconsets/transports/gadu-gadu/16x16/away.png (renamed from data/iconsets/transports/gadugadu/16x16/away.png)bin919 -> 919 bytes
-rw-r--r--data/iconsets/transports/gadu-gadu/16x16/chat.png (renamed from data/iconsets/transports/gadugadu/16x16/chat.png)bin944 -> 944 bytes
-rw-r--r--data/iconsets/transports/gadu-gadu/16x16/dnd.png (renamed from data/iconsets/transports/gadugadu/16x16/dnd.png)bin919 -> 919 bytes
-rw-r--r--data/iconsets/transports/gadu-gadu/16x16/offline.png (renamed from data/iconsets/transports/gadugadu/16x16/offline.png)bin944 -> 944 bytes
-rw-r--r--data/iconsets/transports/gadu-gadu/16x16/online.png (renamed from data/iconsets/transports/gadugadu/16x16/online.png)bin944 -> 944 bytes
-rw-r--r--data/iconsets/transports/gadu-gadu/16x16/xa.png (renamed from data/iconsets/transports/gadugadu/16x16/xa.png)bin919 -> 919 bytes
-rw-r--r--data/iconsets/transports/gadu-gadu/32x32/away.png (renamed from data/iconsets/transports/gadugadu/32x32/away.png)bin2241 -> 2241 bytes
-rw-r--r--data/iconsets/transports/gadu-gadu/32x32/chat.png (renamed from data/iconsets/transports/gadugadu/32x32/chat.png)bin2274 -> 2274 bytes
-rw-r--r--data/iconsets/transports/gadu-gadu/32x32/dnd.png (renamed from data/iconsets/transports/gadugadu/32x32/dnd.png)bin2241 -> 2241 bytes
-rw-r--r--data/iconsets/transports/gadu-gadu/32x32/offline.png (renamed from data/iconsets/transports/gadugadu/32x32/offline.png)bin2328 -> 2328 bytes
-rw-r--r--data/iconsets/transports/gadu-gadu/32x32/online.png (renamed from data/iconsets/transports/gadugadu/32x32/online.png)bin2274 -> 2274 bytes
-rw-r--r--data/iconsets/transports/gadu-gadu/32x32/xa.png (renamed from data/iconsets/transports/gadugadu/32x32/xa.png)bin2241 -> 2241 bytes
-rw-r--r--data/iconsets/transports/gadu-gadu/48x48/offline.png (renamed from data/iconsets/transports/gadugadu/48x48/offline.png)bin3759 -> 3759 bytes
-rw-r--r--data/iconsets/transports/gadu-gadu/48x48/online.png (renamed from data/iconsets/transports/gadugadu/48x48/online.png)bin3759 -> 3759 bytes
-rw-r--r--data/pixmaps/events/connection_lost.pngbin0 -> 2873 bytes
-rw-r--r--data/pixmaps/person.pngbin0 -> 594 bytes
-rwxr-xr-xlaunch.sh4
-rw-r--r--po/Makefile4
-rw-r--r--po/POTFILES.in88
-rw-r--r--po/de.po2341
-rw-r--r--po/eo.po2
-rw-r--r--po/es.po1761
-rw-r--r--po/eu.po2000
-rw-r--r--po/hr.po5267
-rw-r--r--po/sk.po2
-rw-r--r--scripts/gajim4
-rw-r--r--src/Makefile11
-rw-r--r--src/advanced.py2
-rw-r--r--src/chat_control.py310
-rw-r--r--src/common/GnuPG.py2
-rw-r--r--src/common/Makefile12
-rw-r--r--src/common/check_paths.py5
-rw-r--r--src/common/config.py64
-rw-r--r--src/common/connection.py54
-rw-r--r--src/common/connection_handlers.py205
-rw-r--r--src/common/contacts.py2
-rw-r--r--src/common/events.py233
-rw-r--r--src/common/gajim.py33
-rw-r--r--src/common/helpers.py108
-rw-r--r--src/common/logger.py146
-rw-r--r--src/common/optparser.py29
-rw-r--r--src/common/xmpp/client_nb.py11
-rw-r--r--src/common/xmpp/dispatcher_nb.py1
-rw-r--r--src/common/xmpp/protocol.py3
-rw-r--r--src/common/xmpp/transports_nb.py14
-rw-r--r--src/config.py172
-rw-r--r--src/conversation_textview.py79
-rw-r--r--src/dialogs.py549
-rw-r--r--src/disco.py18
-rw-r--r--src/filetransfers_window.py15
-rwxr-xr-xsrc/gajim-remote.py51
-rwxr-xr-xsrc/gajim.py276
-rw-r--r--src/gajim_themes_window.py1
-rw-r--r--src/groupchat_control.py155
-rw-r--r--src/gtkgui_helpers.py13
-rwxr-xr-xsrc/history_manager.py4
-rw-r--r--src/message_control.py6
-rw-r--r--src/message_textview.py2
-rw-r--r--src/message_window.py23
-rwxr-xr-xsrc/migrate_logs_to_dot9_db.py267
-rw-r--r--src/notify.py135
-rw-r--r--src/profile_window.py283
-rw-r--r--src/remote_control.py117
-rw-r--r--src/roster_window.py786
-rw-r--r--src/systray.py81
-rw-r--r--src/systraywin32.py54
-rw-r--r--src/tooltips.py42
-rw-r--r--src/vcard.py281
75 files changed, 14878 insertions, 6586 deletions
diff --git a/data/glade/account_context_menu.glade b/data/glade/account_context_menu.glade
index 6e5726a76..4e424c5f3 100644
--- a/data/glade/account_context_menu.glade
+++ b/data/glade/account_context_menu.glade
@@ -12,7 +12,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image1241">
+ <widget class="GtkImage" id="image1235">
<property name="visible">True</property>
<property name="stock">gtk-network</property>
<property name="icon_size">1</property>
@@ -32,7 +32,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image1242">
+ <widget class="GtkImage" id="image1236">
<property name="visible">True</property>
<property name="stock">gtk-connect</property>
<property name="icon_size">1</property>
@@ -46,13 +46,21 @@
</child>
<child>
+ <widget class="GtkMenuItem" id="open_gmail_inbox_menuitem">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Open Gmail Inbox</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+
+ <child>
<widget class="GtkImageMenuItem" id="new_message_menuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">Send Single _Message...</property>
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image1243">
+ <widget class="GtkImage" id="image1237">
<property name="visible">True</property>
<property name="stock">gtk-new</property>
<property name="icon_size">1</property>
@@ -72,7 +80,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image1244">
+ <widget class="GtkImage" id="image1238">
<property name="visible">True</property>
<property name="stock">gtk-add</property>
<property name="icon_size">1</property>
@@ -92,7 +100,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image1245">
+ <widget class="GtkImage" id="image1239">
<property name="visible">True</property>
<property name="stock">gtk-find</property>
<property name="icon_size">1</property>
@@ -132,7 +140,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image1247">
+ <widget class="GtkImage" id="image1240">
<property name="visible">True</property>
<property name="stock">gtk-preferences</property>
<property name="icon_size">1</property>
diff --git a/data/glade/add_new_contact_window.glade b/data/glade/add_new_contact_window.glade
index 5203ca800..cf41eca13 100644
--- a/data/glade/add_new_contact_window.glade
+++ b/data/glade/add_new_contact_window.glade
@@ -17,7 +17,9 @@
<property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
<property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
<signal name="key_press_event" handler="on_add_new_contact_window_key_press_event" last_modification_time="Thu, 28 Apr 2005 12:59:51 GMT"/>
+ <signal name="destroy" handler="on_add_new_contact_window_destroy" last_modification_time="Thu, 03 Aug 2006 15:49:22 GMT"/>
<child>
<widget class="GtkVBox" id="vbox8">
@@ -51,100 +53,71 @@
</child>
<child>
- <widget class="GtkTable" id="table21">
- <property name="border_width">6</property>
+ <widget class="GtkHBox" id="account_hbox">
<property name="visible">True</property>
- <property name="n_rows">7</property>
- <property name="n_columns">2</property>
<property name="homogeneous">False</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">6</property>
+ <property name="spacing">6</property>
<child>
- <widget class="GtkCheckButton" id="auto_authorize_checkbutton">
+ <widget class="GtkLabel" id="account_label">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">A_llow this contact to view my status</property>
+ <property name="label" translatable="yes">A_ccount:</property>
<property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">True</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">6</property>
- <property name="bottom_attach">7</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
</packing>
</child>
<child>
- <widget class="GtkComboBoxEntry" id="group_comboboxentry">
+ <widget class="GtkComboBox" id="account_combobox">
<property name="visible">True</property>
<property name="items" translatable="yes"></property>
<property name="add_tearoffs">False</property>
- <property name="has_frame">True</property>
<property name="focus_on_click">True</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">5</property>
- <property name="bottom_attach">6</property>
- <property name="x_options">fill</property>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
</packing>
</child>
<child>
- <widget class="GtkEntry" id="nickname_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
- <property name="y_options"></property>
- </packing>
+ <placeholder/>
</child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
- <child>
- <widget class="GtkEntry" id="jid_entry">
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="y_options"></property>
- </packing>
- </child>
+ <child>
+ <widget class="GtkHBox" id="protocol_hbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
<child>
- <widget class="GtkLabel" id="label223">
+ <widget class="GtkLabel" id="protocol_label">
<property name="visible">True</property>
- <property name="label" translatable="yes">_Group:</property>
+ <property name="label" translatable="yes">_Protocol:</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -154,82 +127,69 @@
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
+ <property name="mnemonic_widget">uid_entry</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">5</property>
- <property name="bottom_attach">6</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label188">
+ <widget class="GtkComboBox" id="protocol_combobox">
<property name="visible">True</property>
- <property name="label" translatable="yes">_Nickname:</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">nickname_entry</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
+ <property name="items" translatable="yes"></property>
+ <property name="add_tearoffs">False</property>
+ <property name="focus_on_click">True</property>
+ <signal name="changed" handler="on_protocol_combobox_changed" last_modification_time="Wed, 23 Mar 2005 13:13:12 GMT"/>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label187">
+ <widget class="GtkComboBox" id="protocol_jid_combobox">
<property name="visible">True</property>
- <property name="label" translatable="yes">_Jabber ID:</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
+ <property name="items" translatable="yes"></property>
+ <property name="add_tearoffs">False</property>
+ <property name="focus_on_click">True</property>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
</packing>
</child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkTable" id="subscription_table">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="n_rows">4</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">6</property>
<child>
- <widget class="GtkLabel" id="account_label">
+ <widget class="GtkLabel" id="uid_label">
<property name="visible">True</property>
- <property name="label" translatable="yes">_Account:</property>
+ <property name="label" translatable="yes">_User ID:</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -239,6 +199,7 @@
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
+ <property name="mnemonic_widget">uid_entry</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
@@ -270,16 +231,16 @@
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label185">
+ <widget class="GtkLabel" id="label188">
<property name="visible">True</property>
- <property name="label" translatable="yes">_User ID:</property>
+ <property name="label" translatable="yes">_Nickname:</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -289,7 +250,7 @@
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
- <property name="mnemonic_widget">uid_entry</property>
+ <property name="mnemonic_widget">nickname_entry</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
@@ -298,17 +259,38 @@
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="protocol_label">
+ <widget class="GtkEntry" id="nickname_entry">
<property name="visible">True</property>
- <property name="label" translatable="yes">_Protocol:</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label223">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Group:</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -318,7 +300,6 @@
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
- <property name="mnemonic_widget">uid_entry</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
@@ -327,79 +308,49 @@
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkHBox" id="account_hbox">
+ <widget class="GtkComboBoxEntry" id="group_comboboxentry">
<property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkComboBox" id="account_combobox">
- <property name="visible">True</property>
- <property name="items" translatable="yes"></property>
- <property name="add_tearoffs">False</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <placeholder/>
- </child>
+ <property name="items" translatable="yes"></property>
+ <property name="add_tearoffs">False</property>
+ <property name="has_frame">True</property>
+ <property name="focus_on_click">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
<property name="x_options">fill</property>
- <property name="y_options">fill</property>
</packing>
</child>
<child>
- <widget class="GtkHBox" id="protocol_hbox">
+ <widget class="GtkCheckButton" id="auto_authorize_checkbutton">
<property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkComboBox" id="protocol_combobox">
- <property name="visible">True</property>
- <property name="items" translatable="yes"></property>
- <property name="add_tearoffs">False</property>
- <property name="focus_on_click">True</property>
- <signal name="changed" handler="on_protocol_combobox_changed" last_modification_time="Wed, 23 Mar 2005 13:13:12 GMT"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <placeholder/>
- </child>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">A_llow this contact to view my status</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">True</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
<property name="x_options">fill</property>
- <property name="y_options">fill</property>
+ <property name="y_options"></property>
</packing>
</child>
</widget>
@@ -411,7 +362,7 @@
</child>
<child>
- <widget class="GtkScrolledWindow" id="scrolledwindow6">
+ <widget class="GtkScrolledWindow" id="message_scrolledwindow">
<property name="border_width">6</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
@@ -448,6 +399,91 @@
</child>
<child>
+ <widget class="GtkHBox" id="register_hbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkLabel" id="label224">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">You have to register to this transport
+to be able to add a contact from this
+protocol. Click on register button to
+proceed.</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">True</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="register_button">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Register</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal name="clicked" handler="on_register_button_clicked" last_modification_time="Thu, 03 Aug 2006 14:29:57 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="connected_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">You must be connected to the transport to be able
+to add a contact from this protocol.</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
<widget class="GtkHButtonBox" id="hbuttonbox1">
<property name="border_width">5</property>
<property name="visible">True</property>
@@ -468,78 +504,16 @@
</child>
<child>
- <widget class="GtkButton" id="subscribe_button">
+ <widget class="GtkButton" id="add_button">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="can_focus">True</property>
+ <property name="label">gtk-add</property>
+ <property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_subscribe_button_clicked" last_modification_time="Mon, 28 Feb 2005 22:46:16 GMT"/>
-
- <child>
- <widget class="GtkAlignment" id="alignment39">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">0</property>
- <property name="yscale">0</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkHBox" id="hbox2915">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkImage" id="image280">
- <property name="visible">True</property>
- <property name="stock">gtk-ok</property>
- <property name="icon_size">4</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label192">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Subscribe</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
+ <signal name="clicked" handler="on_add_button_clicked" last_modification_time="Thu, 03 Aug 2006 14:27:55 GMT"/>
</widget>
</child>
</widget>
diff --git a/data/glade/edit_groups_dialog.glade b/data/glade/edit_groups_dialog.glade
index 5cbdf5947..9cedd08bc 100644
--- a/data/glade/edit_groups_dialog.glade
+++ b/data/glade/edit_groups_dialog.glade
@@ -9,7 +9,7 @@
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_NONE</property>
<property name="modal">True</property>
- <property name="default_height">260</property>
+ <property name="default_height">290</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">False</property>
<property name="decorated">True</property>
@@ -18,6 +18,7 @@
<property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
<property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
<property name="has_separator">True</property>
<signal name="response" handler="on_edit_groups_dialog_response" last_modification_time="Fri, 22 Jul 2005 22:28:44 GMT"/>
@@ -159,7 +160,7 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<property name="shadow_type">GTK_SHADOW_IN</property>
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
diff --git a/data/glade/preferences_window.glade b/data/glade/preferences_window.glade
index 5f31793a4..f5aceb5ff 100644
--- a/data/glade/preferences_window.glade
+++ b/data/glade/preferences_window.glade
@@ -18,6 +18,7 @@
<property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
<property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
<signal name="key_press_event" handler="on_preferences_window_key_press_event" last_modification_time="Fri, 08 Apr 2005 01:08:08 GMT"/>
<signal name="destroy" handler="on_preferences_window_destroy" last_modification_time="Sun, 05 Mar 2006 11:50:52 GMT"/>
@@ -899,6 +900,7 @@ Per type</property>
<widget class="GtkFontButton" id="conversation_fontbutton">
<property name="visible">True</property>
<property name="can_focus">True</property>
+ <property name="title" translatable="yes">Επιλογή μιας γραμματοσειράς</property>
<property name="show_style">True</property>
<property name="show_size">True</property>
<property name="use_font">False</property>
@@ -950,6 +952,7 @@ Per type</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="use_alpha">False</property>
+ <property name="title" translatable="yes">Επιλογή χρώματος</property>
<property name="focus_on_click">True</property>
<signal name="color_set" handler="on_outgoing_msg_colorbutton_color_set" last_modification_time="Sun, 06 Mar 2005 14:07:56 GMT"/>
</widget>
@@ -968,6 +971,7 @@ Per type</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="use_alpha">False</property>
+ <property name="title" translatable="yes">Επιλογή χρώματος</property>
<property name="focus_on_click">True</property>
<signal name="color_set" handler="on_url_msg_colorbutton_color_set" last_modification_time="Sun, 25 Dec 2005 15:22:17 GMT"/>
</widget>
@@ -1095,6 +1099,7 @@ Per type</property>
<property name="can_focus">True</property>
<property name="has_focus">True</property>
<property name="use_alpha">False</property>
+ <property name="title" translatable="yes">Επιλογή χρώματος</property>
<property name="focus_on_click">True</property>
<signal name="color_set" handler="on_incoming_msg_colorbutton_color_set" last_modification_time="Sun, 06 Mar 2005 14:07:44 GMT"/>
</widget>
@@ -1113,6 +1118,7 @@ Per type</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="use_alpha">False</property>
+ <property name="title" translatable="yes">Επιλογή χρώματος</property>
<property name="focus_on_click">True</property>
<signal name="color_set" handler="on_status_msg_colorbutton_color_set" last_modification_time="Sun, 06 Mar 2005 14:08:04 GMT"/>
</widget>
@@ -2538,6 +2544,78 @@ Disabled</property>
</child>
<child>
+ <widget class="GtkEventBox" id="eventbox6">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">An example: If you have enabled status message for away, Gajim won't ask you anymore for a status message when you change your status to away; it will use the default one set here</property>
+ <property name="visible_window">True</property>
+ <property name="above_child">False</property>
+
+ <child>
+ <widget class="GtkExpander" id="expander1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="expanded">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow24">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+ <child>
+ <widget class="GtkTreeView" id="default_msg_treeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">True</property>
+ <property name="rules_hint">False</property>
+ <property name="reorderable">False</property>
+ <property name="enable_search">True</property>
+ <property name="fixed_height_mode">False</property>
+ <property name="hover_selection">False</property>
+ <property name="hover_expand">False</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label384">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Default Status Messages</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
<widget class="GtkFrame" id="frame22">
<property name="visible">True</property>
<property name="label_xalign">0</property>
@@ -3128,7 +3206,8 @@ Custom</property>
<child>
<widget class="GtkCheckButton" id="notify_gmail_extra_checkbutton">
- <property name="visible">True</property>
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">If checked, Gajim will also include information about the sender of the new emails</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Display _extra email details</property>
<property name="use_underline">True</property>
@@ -3137,7 +3216,7 @@ Custom</property>
<property name="active">False</property>
<property name="inconsistent">False</property>
<property name="draw_indicator">True</property>
- <signal name="toggled" handler="on_notify_gmail_extra_checkbutton_toggled" last_modification_time="Wed, 06 Apr 2005 14:43:56 GMT"/>
+ <signal name="toggled" handler="on_notify_gmail_extra_checkbutton_toggled" last_modification_time="Wed, 06 Apr 2005 14:43:56 GMT"/>
</widget>
<packing>
<property name="padding">0</property>
@@ -3179,7 +3258,7 @@ Custom</property>
<property name="fill">False</property>
</packing>
</child>
-
+
<child>
<widget class="GtkFrame" id="frame27">
<property name="visible">True</property>
@@ -3245,7 +3324,6 @@ Custom</property>
<property name="fill">False</property>
</packing>
</child>
-
</widget>
</child>
</widget>
diff --git a/data/glade/profile_window.glade b/data/glade/profile_window.glade
new file mode 100644
index 000000000..aeaaa8518
--- /dev/null
+++ b/data/glade/profile_window.glade
@@ -0,0 +1,1968 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+
+<widget class="GtkWindow" id="profile_window">
+ <property name="border_width">12</property>
+ <property name="title">Personal Information</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+ <property name="resizable">False</property>
+ <property name="destroy_with_parent">False</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+ <signal name="key_press_event" handler="on_profile_window_key_press_event" last_modification_time="Fri, 08 Sep 2006 11:39:24 GMT"/>
+ <signal name="destroy" handler="on_profile_window_destroy" last_modification_time="Fri, 08 Sep 2006 11:39:32 GMT"/>
+
+ <child>
+ <widget class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">12</property>
+
+ <child>
+ <widget class="GtkNotebook" id="information_notebook">
+ <property name="visible">True</property>
+ <property name="show_tabs">True</property>
+ <property name="show_border">True</property>
+ <property name="tab_pos">GTK_POS_TOP</property>
+ <property name="scrollable">False</property>
+ <property name="enable_popup">False</property>
+
+ <child>
+ <widget class="GtkTable" id="table2">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="n_rows">7</property>
+ <property name="n_columns">4</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">12</property>
+
+ <child>
+ <widget class="GtkEntry" id="FN_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="EMAIL_HOME_USERID_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkExpander" id="expander1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="expanded">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkTable" id="table3">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">4</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">12</property>
+
+ <child>
+ <widget class="GtkEntry" id="N_FAMILY_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="N_GIVEN_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="N_MIDDLE_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="N_PREFIX_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="N_SUFFIX_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label18">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="Family Name">Family:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label16">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="Middle Name">Middle:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label15">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="Prefix in Name">Prefix:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label17">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="Given Name">Given:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label14">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="Suffix in Name">Suffix:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label19">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">More</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="NICKNAME_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkExpander" id="expander2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="expanded">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkTable" id="table_ADR_STREET">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">4</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">5</property>
+ <property name="column_spacing">5</property>
+
+ <child>
+ <widget class="GtkEntry" id="ADR_HOME_STREET_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="ADR_HOME_EXTADR_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="ADR_HOME_LOCALITY_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="ADR_HOME_PCODE_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="ADR_HOME_REGION_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="ADR_HOME_CTRY_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label31">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Street:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label28">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">City:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label27">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">State:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label29">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Extra Address:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label26">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Postal Code:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label25">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Country:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label30">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Address</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="BDAY_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label22">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Homepage:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options"></property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="URL_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="TEL_HOME_NUMBER_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label24">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Name:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label20">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Nickname:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label23">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Phone No.:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEventBox" id="eventbox1">
+ <property name="visible">True</property>
+ <property name="tooltip">Format: YYYY-MM-DD</property>
+ <property name="visible_window">True</property>
+ <property name="above_child">False</property>
+
+ <child>
+ <widget class="GtkLabel" id="label13">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Birthday:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label57">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">E-Mail:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="PHOTO_button">
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal name="button_press_event" handler="on_PHOTO_button_press_event" last_modification_time="Sun, 10 Sep 2006 10:44:01 GMT"/>
+
+ <child>
+ <widget class="GtkEventBox" id="PHOTO_eventbox3">
+ <property name="visible">True</property>
+ <property name="visible_window">False</property>
+ <property name="above_child">False</property>
+
+ <child>
+ <widget class="GtkImage" id="PHOTO_image">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
+ <property name="x_options"></property>
+ <property name="y_options">expand</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Personal Info</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkTable" id="table5">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="n_rows">5</property>
+ <property name="n_columns">4</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">12</property>
+
+ <child>
+ <widget class="GtkEntry" id="ORG_ORGNAME_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="ORG_ORGUNIT_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="TITLE_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="ROLE_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="EMAIL_WORK_USERID_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkExpander" id="expander3">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="expanded">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkTable" id="table6">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">4</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">5</property>
+ <property name="column_spacing">5</property>
+
+ <child>
+ <widget class="GtkEntry" id="ADR_WORK_STREET_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="ADR_WORK_EXTADR_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="ADR_WORK_LOCALITY_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="ADR_WORK_PCODE_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="ADR_WORK_REGION_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="ADR_WORK_CTRY_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label39">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Street:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label37">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">City:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label36">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">State:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label38">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Extra Address:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label35">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Postal Code:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label34">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Country:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label40">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Address</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="TEL_WORK_NUMBER_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label44">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Company:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label42">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Position:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label43">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Department:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label41">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Role:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label32">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">E-Mail:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label33">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Phone No.:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Work</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+ <child>
+ <widget class="GtkTextView" id="DESC_textview">
+ <property name="height_request">70</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="overwrite">False</property>
+ <property name="accepts_tab">True</property>
+ <property name="justification">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap_mode">GTK_WRAP_WORD</property>
+ <property name="cursor_visible">True</property>
+ <property name="pixels_above_lines">0</property>
+ <property name="pixels_below_lines">0</property>
+ <property name="pixels_inside_wrap">0</property>
+ <property name="left_margin">0</property>
+ <property name="right_margin">0</property>
+ <property name="indent">0</property>
+ <property name="text" translatable="yes"></property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label6">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="&quot;About&quot; is the text of a tab of vcard window">About</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHButtonBox" id="information_hbuttonbox">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <property name="spacing">12</property>
+
+ <child>
+ <widget class="GtkButton" id="publish_button">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal name="clicked" handler="on_publish_button_clicked"/>
+
+ <child>
+ <widget class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <property name="top_padding">0</property>
+ <property name="bottom_padding">0</property>
+ <property name="left_padding">0</property>
+ <property name="right_padding">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">2</property>
+
+ <child>
+ <widget class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="stock">gtk-go-up</property>
+ <property name="icon_size">4</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Publish</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="retrieve_button">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal name="clicked" handler="on_retrieve_button_clicked"/>
+
+ <child>
+ <widget class="GtkAlignment" id="alignment2">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <property name="top_padding">0</property>
+ <property name="bottom_padding">0</property>
+ <property name="left_padding">0</property>
+ <property name="right_padding">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox2">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">2</property>
+
+ <child>
+ <widget class="GtkImage" id="image2">
+ <property name="visible">True</property>
+ <property name="stock">gtk-go-down</property>
+ <property name="icon_size">4</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Retrieve</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+</widget>
+
+</glade-interface>
diff --git a/data/glade/roster_contact_context_menu.glade b/data/glade/roster_contact_context_menu.glade
index 3d9b4277a..2dddcefa6 100644
--- a/data/glade/roster_contact_context_menu.glade
+++ b/data/glade/roster_contact_context_menu.glade
@@ -12,7 +12,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image1447">
+ <widget class="GtkImage" id="image1511">
<property name="visible">True</property>
<property name="stock">gtk-jump-to</property>
<property name="icon_size">1</property>
@@ -32,7 +32,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image1448">
+ <widget class="GtkImage" id="image1512">
<property name="visible">True</property>
<property name="stock">gtk-new</property>
<property name="icon_size">1</property>
@@ -46,12 +46,32 @@
</child>
<child>
+ <widget class="GtkImageMenuItem" id="invite_menuitem">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">In_vite to</property>
+ <property name="use_underline">True</property>
+
+ <child internal-child="image">
+ <widget class="GtkImage" id="image1513">
+ <property name="visible">True</property>
+ <property name="stock">gtk-go-back</property>
+ <property name="icon_size">1</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
<widget class="GtkImageMenuItem" id="rename_menuitem">
<property name="label" translatable="yes">_Rename</property>
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image1449">
+ <widget class="GtkImage" id="image1514">
<property name="visible">True</property>
<property name="stock">gtk-refresh</property>
<property name="icon_size">1</property>
@@ -84,7 +104,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image1450">
+ <widget class="GtkImage" id="image1515">
<property name="visible">True</property>
<property name="stock">gtk-file</property>
<property name="icon_size">1</property>
@@ -104,7 +124,7 @@
<signal name="activate" handler="on_assign_openpgp_key_menuitem_activate" last_modification_time="Thu, 30 Jun 2005 22:57:59 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image1451">
+ <widget class="GtkImage" id="image1516">
<property name="visible">True</property>
<property name="stock">gtk-dialog-authentication</property>
<property name="icon_size">1</property>
@@ -124,7 +144,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image1452">
+ <widget class="GtkImage" id="image1517">
<property name="visible">True</property>
<property name="stock">gtk-info</property>
<property name="icon_size">1</property>
@@ -169,7 +189,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image1453">
+ <widget class="GtkImage" id="image1518">
<property name="visible">True</property>
<property name="stock">gtk-dialog-question</property>
<property name="icon_size">1</property>
@@ -190,7 +210,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image1454">
+ <widget class="GtkImage" id="image1519">
<property name="visible">True</property>
<property name="stock">gtk-go-up</property>
<property name="icon_size">1</property>
@@ -210,7 +230,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image1455">
+ <widget class="GtkImage" id="image1520">
<property name="visible">True</property>
<property name="stock">gtk-go-down</property>
<property name="icon_size">1</property>
@@ -230,7 +250,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image1456">
+ <widget class="GtkImage" id="image1521">
<property name="visible">True</property>
<property name="stock">gtk-stop</property>
<property name="icon_size">1</property>
@@ -253,7 +273,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image1457">
+ <widget class="GtkImage" id="image1522">
<property name="visible">True</property>
<property name="stock">gtk-add</property>
<property name="icon_size">1</property>
@@ -272,7 +292,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image1458">
+ <widget class="GtkImage" id="image1523">
<property name="visible">True</property>
<property name="stock">gtk-remove</property>
<property name="icon_size">1</property>
@@ -304,7 +324,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image1459">
+ <widget class="GtkImage" id="image1524">
<property name="visible">True</property>
<property name="stock">gtk-justify-fill</property>
<property name="icon_size">1</property>
diff --git a/data/glade/vcard_information_window.glade b/data/glade/vcard_information_window.glade
index de8069b69..7b9eed488 100644
--- a/data/glade/vcard_information_window.glade
+++ b/data/glade/vcard_information_window.glade
@@ -4,8 +4,8 @@
<glade-interface>
<widget class="GtkWindow" id="vcard_information_window">
- <property name="border_width">6</property>
- <property name="title" translatable="yes">Contact Information</property>
+ <property name="border_width">12</property>
+ <property name="title">Contact Information</property>
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_NONE</property>
<property name="modal">False</property>
@@ -18,14 +18,14 @@
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
<property name="focus_on_map">True</property>
<property name="urgency_hint">False</property>
- <signal name="destroy" handler="on_vcard_information_window_destroy" last_modification_time="Sun, 24 Jul 2005 19:35:15 GMT"/>
- <signal name="key_press_event" handler="on_vcard_information_window_key_press_event" last_modification_time="Thu, 07 Apr 2005 10:06:13 GMT"/>
+ <signal name="key_press_event" handler="on_vcard_information_window_key_press_event"/>
+ <signal name="destroy" handler="on_vcard_information_window_destroy"/>
<child>
- <widget class="GtkVBox" id="vbox17">
+ <widget class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="homogeneous">False</property>
- <property name="spacing">6</property>
+ <property name="spacing">12</property>
<child>
<widget class="GtkLabel" id="nickname_label">
@@ -37,7 +37,7 @@
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">True</property>
- <property name="xalign">0.00999999977648</property>
+ <property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
@@ -47,7 +47,7 @@
<property name="angle">0</property>
</widget>
<packing>
- <property name="padding">5</property>
+ <property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
@@ -56,7 +56,6 @@
<child>
<widget class="GtkNotebook" id="information_notebook">
<property name="visible">True</property>
- <property name="can_focus">True</property>
<property name="show_tabs">True</property>
<property name="show_border">True</property>
<property name="tab_pos">GTK_POS_TOP</property>
@@ -64,23 +63,23 @@
<property name="enable_popup">False</property>
<child>
- <widget class="GtkVBox" id="vbox113">
- <property name="border_width">6</property>
+ <widget class="GtkHBox" id="hbox3">
+ <property name="border_width">12</property>
<property name="visible">True</property>
<property name="homogeneous">False</property>
- <property name="spacing">6</property>
+ <property name="spacing">12</property>
<child>
- <widget class="GtkTable" id="table4">
+ <widget class="GtkTable" id="table7">
<property name="visible">True</property>
<property name="n_rows">7</property>
<property name="n_columns">2</property>
<property name="homogeneous">False</property>
- <property name="row_spacing">0</property>
- <property name="column_spacing">5</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">12</property>
<child>
- <widget class="GtkLabel" id="label56">
+ <widget class="GtkLabel" id="label51">
<property name="visible">True</property>
<property name="label" translatable="yes">Jabber ID:</property>
<property name="use_underline">False</property>
@@ -89,7 +88,7 @@
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -108,36 +107,35 @@
</child>
<child>
- <widget class="GtkLabel" id="jid_label">
+ <widget class="GtkLabel" id="label53">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes"></property>
+ <property name="label" translatable="yes">Resource:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
- <property name="selectable">True</property>
+ <property name="selectable">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">5</property>
- <property name="ypad">5</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label59">
+ <widget class="GtkLabel" id="label54">
<property name="visible">True</property>
<property name="label" translatable="yes">Status:</property>
<property name="use_underline">False</property>
@@ -146,7 +144,7 @@
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -157,24 +155,24 @@
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label58">
+ <widget class="GtkLabel" id="label55">
<property name="visible">True</property>
- <property name="label" translatable="yes">Nickname:</property>
+ <property name="label" translatable="yes">Client:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -185,24 +183,24 @@
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label62">
+ <widget class="GtkLabel" id="label56">
<property name="visible">True</property>
- <property name="label" translatable="yes">Resource:</property>
+ <property name="label" translatable="yes">OS:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -213,217 +211,89 @@
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label66">
+ <widget class="GtkLabel" id="jid_label">
<property name="visible">True</property>
- <property name="label" translatable="yes">Subscription:</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
- <property name="selectable">False</property>
+ <property name="selectable">True</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
- <property name="x_options">fill</property>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkHBox" id="hbox46">
+ <widget class="GtkEventBox" id="resource_prio_label_eventbox">
<property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkEventBox" id="subscription_label_eventbox">
- <property name="visible">True</property>
- <property name="visible_window">True</property>
- <property name="above_child">False</property>
-
- <child>
- <widget class="GtkLabel" id="subscription_label">
- <property name="width_request">100</property>
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">5</property>
- <property name="ypad">5</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
+ <property name="visible_window">False</property>
+ <property name="above_child">False</property>
<child>
- <widget class="GtkLabel" id="label172">
+ <widget class="GtkLabel" id="resource_prio_label">
<property name="visible">True</property>
- <property name="label" translatable="yes">Ask:</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEventBox" id="ask_label_eventbox">
- <property name="visible">True</property>
- <property name="visible_window">True</property>
- <property name="above_child">False</property>
-
- <child>
- <widget class="GtkLabel" id="ask_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
</child>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label236">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Client:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">5</property>
- <property name="bottom_attach">6</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label237">
- <property name="visible">True</property>
- <property name="label" translatable="yes">OS:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">6</property>
- <property name="bottom_attach">7</property>
- <property name="x_options">fill</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="os_label">
+ <widget class="GtkLabel" id="client_name_version_label">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
+ <property name="wrap">False</property>
<property name="selectable">True</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
+ <property name="yalign">0</property>
<property name="xpad">5</property>
<property name="ypad">5</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -434,24 +304,24 @@
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">6</property>
- <property name="bottom_attach">7</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="client_name_version_label">
+ <widget class="GtkLabel" id="os_label">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
+ <property name="wrap">True</property>
<property name="selectable">True</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
+ <property name="yalign">0</property>
<property name="xpad">5</property>
<property name="ypad">5</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -462,90 +332,229 @@
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">5</property>
- <property name="bottom_attach">6</property>
- <property name="x_options">fill</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkEntry" id="nickname_entry">
+ <widget class="GtkCheckButton" id="log_history_checkbutton">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes">_Log conversation history</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">True</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
</widget>
<packing>
- <property name="left_attach">1</property>
+ <property name="left_attach">0</property>
<property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_padding">2</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkEventBox" id="status_label_eventbox">
+ <widget class="GtkExpander" id="expander5">
<property name="visible">True</property>
- <property name="visible_window">False</property>
- <property name="above_child">False</property>
+ <property name="can_focus">True</property>
+ <property name="expanded">False</property>
+ <property name="spacing">0</property>
<child>
- <widget class="GtkLabel" id="status_label">
+ <widget class="GtkTable" id="table8">
+ <property name="border_width">6</property>
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes"></property>
+ <property name="n_rows">1</property>
+ <property name="n_columns">4</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">12</property>
+
+ <child>
+ <widget class="GtkEventBox" id="subscription_label_eventbox">
+ <property name="visible">True</property>
+ <property name="visible_window">False</property>
+ <property name="above_child">False</property>
+
+ <child>
+ <widget class="GtkLabel" id="subscription_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEventBox" id="ask_label_eventbox">
+ <property name="visible">True</property>
+ <property name="visible_window">False</property>
+ <property name="above_child">False</property>
+
+ <child>
+ <widget class="GtkLabel" id="ask_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label45">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="Family Name">Subscription:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label46">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="Given Name">Ask:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label47">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">More</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
- <property name="selectable">True</property>
+ <property name="selectable">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">5</property>
- <property name="ypad">5</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
</child>
</widget>
<packing>
- <property name="left_attach">1</property>
+ <property name="left_attach">0</property>
<property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">fill</property>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkEventBox" id="resource_prio_label_eventbox">
+ <widget class="GtkEventBox" id="status_label_eventbox">
<property name="visible">True</property>
- <property name="visible_window">False</property>
+ <property name="visible_window">True</property>
<property name="above_child">False</property>
<child>
- <widget class="GtkLabel" id="resource_prio_label">
+ <widget class="GtkLabel" id="status_label">
<property name="visible">True</property>
+ <property name="can_focus">True</property>
<property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
- <property name="selectable">False</property>
+ <property name="selectable">True</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
+ <property name="yalign">0</property>
<property name="xpad">5</property>
<property name="ypad">5</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -558,36 +567,58 @@
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
<property name="x_options">fill</property>
- <property name="y_options"></property>
+ <property name="y_options">fill</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
- <property name="expand">False</property>
+ <property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
- <widget class="GtkCheckButton" id="log_history_checkbutton">
+ <widget class="GtkVBox" id="vbox2">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Log conversation history</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">True</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkEventBox" id="PHOTO_eventbox">
+ <property name="visible">True</property>
+ <property name="visible_window">False</property>
+ <property name="above_child">False</property>
+ <signal name="button_press_event" handler="on_PHOTO_eventbox_button_press_event" last_modification_time="Fri, 08 Sep 2006 21:34:18 GMT"/>
+
+ <child>
+ <widget class="GtkImage" id="PHOTO_image">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <placeholder/>
+ </child>
</widget>
<packing>
<property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
</packing>
</child>
</widget>
@@ -598,16 +629,16 @@
</child>
<child>
- <widget class="GtkLabel" id="label54">
+ <widget class="GtkLabel" id="label3">
<property name="visible">True</property>
- <property name="label" translatable="yes">Jabber</property>
+ <property name="label" translatable="yes">Contact</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -621,300 +652,174 @@
</child>
<child>
- <widget class="GtkTable" id="table11">
- <property name="border_width">6</property>
+ <widget class="GtkTable" id="table2">
+ <property name="border_width">12</property>
<property name="visible">True</property>
- <property name="n_rows">7</property>
- <property name="n_columns">2</property>
+ <property name="n_rows">6</property>
+ <property name="n_columns">4</property>
<property name="homogeneous">False</property>
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
<child>
- <widget class="GtkLabel" id="label115">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Name:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="FN_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label120">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Phone No.:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">6</property>
- <property name="bottom_attach">7</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label119">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Homepage:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">5</property>
- <property name="bottom_attach">6</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label118">
- <property name="visible">True</property>
- <property name="label" translatable="yes">E-Mail:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label116">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Nickname:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="TEL_HOME_NUMBER_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">6</property>
- <property name="bottom_attach">7</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="URL_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">5</property>
- <property name="bottom_attach">6</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="EMAIL_HOME_USERID_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="BDAY_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="NICKNAME_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkExpander" id="expander4">
+ <widget class="GtkExpander" id="expander1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="expanded">False</property>
<property name="spacing">0</property>
<child>
- <widget class="GtkTable" id="table31">
+ <widget class="GtkTable" id="table3">
<property name="border_width">6</property>
<property name="visible">True</property>
- <property name="n_rows">5</property>
- <property name="n_columns">2</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">4</property>
<property name="homogeneous">False</property>
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
<child>
- <widget class="GtkLabel" id="label298">
+ <widget class="GtkLabel" id="N_FAMILY_label">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="N_GIVEN_label">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="N_MIDDLE_label">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="N_PREFIX_label">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="N_SUFFIX_label">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label18">
<property name="visible">True</property>
<property name="label" translatable="yes" comments="Family Name">Family:</property>
<property name="use_underline">False</property>
@@ -923,7 +828,7 @@
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -942,16 +847,16 @@
</child>
<child>
- <widget class="GtkLabel" id="label299">
+ <widget class="GtkLabel" id="label16">
<property name="visible">True</property>
- <property name="label" translatable="yes" comments="Given Name">Given:</property>
+ <property name="label" translatable="yes" comments="Middle Name">Middle:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -970,16 +875,16 @@
</child>
<child>
- <widget class="GtkLabel" id="label300">
+ <widget class="GtkLabel" id="label15">
<property name="visible">True</property>
- <property name="label" translatable="yes" comments="Middle Name">Middle:</property>
+ <property name="label" translatable="yes" comments="Prefix in Name">Prefix:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -998,16 +903,16 @@
</child>
<child>
- <widget class="GtkLabel" id="label301">
+ <widget class="GtkLabel" id="label17">
<property name="visible">True</property>
- <property name="label" translatable="yes" comments="Prefix in Name">Prefix:</property>
+ <property name="label" translatable="yes" comments="Given Name">Given:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -1016,17 +921,17 @@
<property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label302">
+ <widget class="GtkLabel" id="label14">
<property name="visible">True</property>
<property name="label" translatable="yes" comments="Suffix in Name">Suffix:</property>
<property name="use_underline">False</property>
@@ -1035,7 +940,7 @@
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -1044,26 +949,84 @@
<property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label19">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">More</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkExpander" id="expander2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="expanded">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkTable" id="table_ADR_STREET">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">4</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">5</property>
+ <property name="column_spacing">5</property>
<child>
- <widget class="GtkEntry" id="N_FAMILY_entry">
+ <widget class="GtkLabel" id="ADR_HOME_STREET_label">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">1</property>
@@ -1075,16 +1038,51 @@
</child>
<child>
- <widget class="GtkEntry" id="N_GIVEN_entry">
+ <widget class="GtkLabel" id="ADR_HOME_EXTADR_label">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="ADR_HOME_LOCALITY_label">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">1</property>
@@ -1096,16 +1094,51 @@
</child>
<child>
- <widget class="GtkEntry" id="N_MIDDLE_entry">
+ <widget class="GtkLabel" id="ADR_HOME_PCODE_label">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="ADR_HOME_REGION_label">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">1</property>
@@ -1117,43 +1150,197 @@
</child>
<child>
- <widget class="GtkEntry" id="N_PREFIX_entry">
+ <widget class="GtkLabel" id="ADR_HOME_CTRY_label">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkEntry" id="N_SUFFIX_entry">
+ <widget class="GtkLabel" id="label31">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes">Street:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label28">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">City:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label27">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">State:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label29">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Extra Address:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label26">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Postal Code:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label25">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Country:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
@@ -1161,16 +1348,16 @@
</child>
<child>
- <widget class="GtkLabel" id="label297">
+ <widget class="GtkLabel" id="label30">
<property name="visible">True</property>
- <property name="label" translatable="yes">More</property>
+ <property name="label" translatable="yes">Address</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -1185,101 +1372,24 @@
</widget>
<packing>
<property name="left_attach">0</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEventBox" id="eventbox2">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Format: YYYY-MM-DD</property>
- <property name="visible_window">True</property>
- <property name="above_child">False</property>
-
- <child>
- <widget class="GtkLabel" id="label117">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Birthday:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
</packing>
</child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label111">
- <property name="visible">True</property>
- <property name="label" translatable="yes">General</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table_ADR_STREET">
- <property name="border_width">6</property>
- <property name="visible">True</property>
- <property name="n_rows">6</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">5</property>
- <property name="column_spacing">5</property>
<child>
- <widget class="GtkLabel" id="label121">
+ <widget class="GtkLabel" id="label22">
<property name="visible">True</property>
- <property name="label" translatable="yes">Street:</property>
+ <property name="label" translatable="yes">Homepage:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -1290,24 +1400,24 @@
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options"></property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label122">
+ <widget class="GtkLabel" id="label24">
<property name="visible">True</property>
- <property name="label" translatable="yes">Extra Address:</property>
+ <property name="label" translatable="yes">Name:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -1318,24 +1428,24 @@
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label123">
+ <widget class="GtkLabel" id="label20">
<property name="visible">True</property>
- <property name="label" translatable="yes">City:</property>
+ <property name="label" translatable="yes">Nickname:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -1344,26 +1454,26 @@
<property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label124">
+ <widget class="GtkLabel" id="label23">
<property name="visible">True</property>
- <property name="label" translatable="yes">State:</property>
+ <property name="label" translatable="yes">Phone No.:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -1374,17 +1484,54 @@
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEventBox" id="eventbox1">
+ <property name="visible">True</property>
+ <property name="tooltip">Format: YYYY-MM-DD</property>
+ <property name="visible_window">True</property>
+ <property name="above_child">False</property>
+
+ <child>
+ <widget class="GtkLabel" id="label13">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Birthday:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label125">
+ <widget class="GtkLabel" id="label57">
<property name="visible">True</property>
- <property name="label" translatable="yes">Postal Code:</property>
+ <property name="label" translatable="yes">E-Mail:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -1410,48 +1557,27 @@
</child>
<child>
- <widget class="GtkLabel" id="label126">
+ <widget class="GtkLabel" id="NICKNAME_label">
<property name="visible">True</property>
- <property name="label" translatable="yes">Country:</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
- <property name="selectable">False</property>
+ <property name="selectable">True</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">5</property>
- <property name="bottom_attach">6</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="ADR_HOME_STREET_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="y_options"></property>
@@ -1459,62 +1585,83 @@
</child>
<child>
- <widget class="GtkEntry" id="ADR_HOME_EXTADR_entry">
+ <widget class="GtkLabel" id="FN_label">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkEntry" id="ADR_HOME_LOCALITY_entry">
+ <widget class="GtkLabel" id="EMAIL_HOME_USERID_label">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkEntry" id="ADR_HOME_REGION_entry">
+ <widget class="GtkLabel" id="URL_label">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">1</property>
- <property name="right_attach">2</property>
+ <property name="right_attach">4</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="y_options"></property>
@@ -1522,41 +1669,55 @@
</child>
<child>
- <widget class="GtkEntry" id="ADR_HOME_PCODE_entry">
+ <widget class="GtkLabel" id="TEL_HOME_NUMBER_label">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkEntry" id="ADR_HOME_CTRY_entry">
+ <widget class="GtkLabel" id="BDAY_label">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="y_options"></property>
@@ -1570,16 +1731,16 @@
</child>
<child>
- <widget class="GtkLabel" id="label112">
+ <widget class="GtkLabel" id="label4">
<property name="visible">True</property>
- <property name="label" translatable="yes">Location</property>
+ <property name="label" translatable="yes">Personal Info</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -1593,163 +1754,121 @@
</child>
<child>
- <widget class="GtkTable" id="table13">
- <property name="border_width">6</property>
+ <widget class="GtkTable" id="table5">
+ <property name="border_width">12</property>
<property name="visible">True</property>
- <property name="n_rows">7</property>
- <property name="n_columns">2</property>
+ <property name="n_rows">5</property>
+ <property name="n_columns">4</property>
<property name="homogeneous">False</property>
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
<child>
- <widget class="GtkLabel" id="label127">
+ <widget class="GtkLabel" id="ORG_ORGNAME_label">
<property name="visible">True</property>
- <property name="label" translatable="yes">Company:</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
- <property name="selectable">False</property>
+ <property name="selectable">True</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label128">
+ <widget class="GtkLabel" id="ORG_ORGUNIT_label">
<property name="visible">True</property>
- <property name="label" translatable="yes">Department:</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
- <property name="selectable">False</property>
+ <property name="selectable">True</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label129">
+ <widget class="GtkLabel" id="TITLE_label">
<property name="visible">True</property>
- <property name="label" translatable="yes">Position:</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
- <property name="selectable">False</property>
+ <property name="selectable">True</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label130">
+ <widget class="GtkLabel" id="ROLE_label">
<property name="visible">True</property>
- <property name="label" translatable="yes">Role:</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
- <property name="selectable">False</property>
+ <property name="selectable">True</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="ORG_ORGNAME_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="ORG_ORGUNIT_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"></property>
@@ -1757,41 +1876,27 @@
</child>
<child>
- <widget class="GtkEntry" id="TITLE_entry">
+ <widget class="GtkLabel" id="EMAIL_WORK_USERID_label">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="ROLE_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">1</property>
- <property name="right_attach">2</property>
+ <property name="right_attach">4</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="y_options"></property>
@@ -1799,312 +1904,354 @@
</child>
<child>
- <widget class="GtkExpander" id="expander5">
+ <widget class="GtkExpander" id="expander3">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="expanded">False</property>
<property name="spacing">0</property>
<child>
- <widget class="GtkTable" id="table32">
+ <widget class="GtkTable" id="table6">
<property name="border_width">6</property>
<property name="visible">True</property>
- <property name="n_rows">6</property>
- <property name="n_columns">2</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">4</property>
<property name="homogeneous">False</property>
<property name="row_spacing">5</property>
<property name="column_spacing">5</property>
<child>
- <widget class="GtkLabel" id="label304">
+ <widget class="GtkLabel" id="ADR_WORK_STREET_label">
<property name="visible">True</property>
- <property name="label" translatable="yes">Street:</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
- <property name="selectable">False</property>
+ <property name="selectable">True</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label305">
+ <widget class="GtkLabel" id="ADR_WORK_EXTADR_label">
<property name="visible">True</property>
- <property name="label" translatable="yes">Extra Address:</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
- <property name="selectable">False</property>
+ <property name="selectable">True</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label306">
+ <widget class="GtkLabel" id="ADR_WORK_LOCALITY_label">
<property name="visible">True</property>
- <property name="label" translatable="yes">City:</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
- <property name="selectable">False</property>
+ <property name="selectable">True</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label307">
+ <widget class="GtkLabel" id="ADR_WORK_PCODE_label">
<property name="visible">True</property>
- <property name="label" translatable="yes">State:</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
- <property name="selectable">False</property>
+ <property name="selectable">True</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">fill</property>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label308">
+ <widget class="GtkLabel" id="ADR_WORK_REGION_label">
<property name="visible">True</property>
- <property name="label" translatable="yes">Postal Code:</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
- <property name="selectable">False</property>
+ <property name="selectable">True</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
- <property name="x_options">fill</property>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label309">
+ <widget class="GtkLabel" id="ADR_WORK_CTRY_label">
<property name="visible">True</property>
- <property name="label" translatable="yes">Country:</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
- <property name="selectable">False</property>
+ <property name="selectable">True</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">5</property>
- <property name="bottom_attach">6</property>
- <property name="x_options">fill</property>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkEntry" id="ADR_WORK_STREET_entry">
+ <widget class="GtkLabel" id="label39">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes">Street:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkEntry" id="ADR_WORK_EXTADR_entry">
+ <widget class="GtkLabel" id="label37">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes">City:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkEntry" id="ADR_WORK_LOCALITY_entry">
+ <widget class="GtkLabel" id="label36">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes">State:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkEntry" id="ADR_WORK_REGION_entry">
+ <widget class="GtkLabel" id="label38">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes">Extra Address:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkEntry" id="ADR_WORK_PCODE_entry">
+ <widget class="GtkLabel" id="label35">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes">Postal Code:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkEntry" id="ADR_WORK_CTRY_entry">
+ <widget class="GtkLabel" id="label34">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes">Country:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">5</property>
- <property name="bottom_attach">6</property>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
@@ -2112,7 +2259,7 @@
</child>
<child>
- <widget class="GtkLabel" id="label303">
+ <widget class="GtkLabel" id="label40">
<property name="visible">True</property>
<property name="label" translatable="yes">Address</property>
<property name="use_underline">False</property>
@@ -2120,8 +2267,8 @@
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -2136,25 +2283,52 @@
</widget>
<packing>
<property name="left_attach">0</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="TEL_WORK_NUMBER_label">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">6</property>
- <property name="bottom_attach">7</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label311">
+ <widget class="GtkLabel" id="label44">
<property name="visible">True</property>
- <property name="label" translatable="yes">Phone No.:</property>
+ <property name="label" translatable="yes">Company:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -2165,24 +2339,24 @@
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label312">
+ <widget class="GtkLabel" id="label42">
<property name="visible">True</property>
- <property name="label" translatable="yes">E-Mail:</property>
+ <property name="label" translatable="yes">Position:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -2193,51 +2367,121 @@
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
- <property name="top_attach">5</property>
- <property name="bottom_attach">6</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkEntry" id="TEL_WORK_NUMBER_entry">
+ <widget class="GtkLabel" id="label43">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes">Department:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkEntry" id="EMAIL_WORK_USERID_entry">
+ <widget class="GtkLabel" id="label41">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
+ <property name="label" translatable="yes">Role:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">5</property>
- <property name="bottom_attach">6</property>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label32">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">E-Mail:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label33">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Phone No.:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
@@ -2249,7 +2493,7 @@
</child>
<child>
- <widget class="GtkLabel" id="label113">
+ <widget class="GtkLabel" id="label5">
<property name="visible">True</property>
<property name="label" translatable="yes">Work</property>
<property name="use_underline">False</property>
@@ -2257,8 +2501,8 @@
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -2272,121 +2516,34 @@
</child>
<child>
- <widget class="GtkVBox" id="vbox85">
+ <widget class="GtkScrolledWindow" id="scrolledwindow">
<property name="border_width">6</property>
<property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
<child>
- <widget class="GtkScrolledWindow" id="scrolledwindow33">
+ <widget class="GtkTextView" id="DESC_textview">
+ <property name="height_request">70</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <widget class="GtkTextView" id="DESC_textview">
- <property name="height_request">70</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="overwrite">False</property>
- <property name="accepts_tab">True</property>
- <property name="justification">GTK_JUSTIFY_LEFT</property>
- <property name="wrap_mode">GTK_WRAP_WORD</property>
- <property name="cursor_visible">False</property>
- <property name="pixels_above_lines">0</property>
- <property name="pixels_below_lines">0</property>
- <property name="pixels_inside_wrap">0</property>
- <property name="left_margin">0</property>
- <property name="right_margin">0</property>
- <property name="indent">0</property>
- <property name="text" translatable="yes"></property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox2963">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkEventBox" id="PHOTO_eventbox">
- <property name="visible">True</property>
- <property name="visible_window">True</property>
- <property name="above_child">False</property>
-
- <child>
- <widget class="GtkImage" id="PHOTO_image">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVButtonBox" id="photo_vbuttonbox">
- <property name="layout_style">GTK_BUTTONBOX_SPREAD</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkButton" id="set_avatar_button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Set _Avatar</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_set_avatar_button_clicked" last_modification_time="Mon, 06 Jun 2005 20:29:04 GMT"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="clear_button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-clear</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_clear_button_clicked" last_modification_time="Mon, 06 Jun 2005 20:28:59 GMT"/>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
+ <property name="editable">False</property>
+ <property name="overwrite">False</property>
+ <property name="accepts_tab">True</property>
+ <property name="justification">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap_mode">GTK_WRAP_WORD</property>
+ <property name="cursor_visible">False</property>
+ <property name="pixels_above_lines">0</property>
+ <property name="pixels_below_lines">0</property>
+ <property name="pixels_inside_wrap">0</property>
+ <property name="left_margin">0</property>
+ <property name="right_margin">0</property>
+ <property name="indent">0</property>
+ <property name="text" translatable="yes"></property>
</widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
</child>
</widget>
<packing>
@@ -2396,7 +2553,7 @@
</child>
<child>
- <widget class="GtkLabel" id="label114">
+ <widget class="GtkLabel" id="label6">
<property name="visible">True</property>
<property name="label" translatable="yes" comments="&quot;About&quot; is the text of a tab of vcard window">About</property>
<property name="use_underline">False</property>
@@ -2404,8 +2561,8 @@
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
@@ -2424,182 +2581,6 @@
<property name="fill">True</property>
</packing>
</child>
-
- <child>
- <widget class="GtkHButtonBox" id="information_hbuttonbox">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <property name="spacing">12</property>
-
- <child>
- <widget class="GtkButton" id="publish_button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_publish_button_clicked" last_modification_time="Wed, 06 Jul 2005 13:01:41 GMT"/>
-
- <child>
- <widget class="GtkAlignment" id="alignment84">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">0</property>
- <property name="yscale">0</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkHBox" id="hbox2984">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkImage" id="image879">
- <property name="visible">True</property>
- <property name="stock">gtk-go-up</property>
- <property name="icon_size">4</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label348">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Publish</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="retrieve_button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_retrieve_button_clicked" last_modification_time="Wed, 06 Jul 2005 12:53:55 GMT"/>
-
- <child>
- <widget class="GtkAlignment" id="alignment85">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">0</property>
- <property name="yscale">0</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkHBox" id="hbox2985">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkImage" id="image880">
- <property name="visible">True</property>
- <property name="stock">gtk-go-down</property>
- <property name="icon_size">4</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label349">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Retrieve</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="close_button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-close</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_close_button_clicked" last_modification_time="Thu, 23 Feb 2006 13:24:35 GMT"/>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">5</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
</widget>
</child>
</widget>
diff --git a/data/iconsets/transports/gadugadu/16x16/away.png b/data/iconsets/transports/gadu-gadu/16x16/away.png
index e84aea305..e84aea305 100644
--- a/data/iconsets/transports/gadugadu/16x16/away.png
+++ b/data/iconsets/transports/gadu-gadu/16x16/away.png
Binary files differ
diff --git a/data/iconsets/transports/gadugadu/16x16/chat.png b/data/iconsets/transports/gadu-gadu/16x16/chat.png
index 9d9b4fe4a..9d9b4fe4a 100644
--- a/data/iconsets/transports/gadugadu/16x16/chat.png
+++ b/data/iconsets/transports/gadu-gadu/16x16/chat.png
Binary files differ
diff --git a/data/iconsets/transports/gadugadu/16x16/dnd.png b/data/iconsets/transports/gadu-gadu/16x16/dnd.png
index e84aea305..e84aea305 100644
--- a/data/iconsets/transports/gadugadu/16x16/dnd.png
+++ b/data/iconsets/transports/gadu-gadu/16x16/dnd.png
Binary files differ
diff --git a/data/iconsets/transports/gadugadu/16x16/offline.png b/data/iconsets/transports/gadu-gadu/16x16/offline.png
index b8623f4b5..b8623f4b5 100644
--- a/data/iconsets/transports/gadugadu/16x16/offline.png
+++ b/data/iconsets/transports/gadu-gadu/16x16/offline.png
Binary files differ
diff --git a/data/iconsets/transports/gadugadu/16x16/online.png b/data/iconsets/transports/gadu-gadu/16x16/online.png
index 9d9b4fe4a..9d9b4fe4a 100644
--- a/data/iconsets/transports/gadugadu/16x16/online.png
+++ b/data/iconsets/transports/gadu-gadu/16x16/online.png
Binary files differ
diff --git a/data/iconsets/transports/gadugadu/16x16/xa.png b/data/iconsets/transports/gadu-gadu/16x16/xa.png
index e84aea305..e84aea305 100644
--- a/data/iconsets/transports/gadugadu/16x16/xa.png
+++ b/data/iconsets/transports/gadu-gadu/16x16/xa.png
Binary files differ
diff --git a/data/iconsets/transports/gadugadu/32x32/away.png b/data/iconsets/transports/gadu-gadu/32x32/away.png
index 5c46145eb..5c46145eb 100644
--- a/data/iconsets/transports/gadugadu/32x32/away.png
+++ b/data/iconsets/transports/gadu-gadu/32x32/away.png
Binary files differ
diff --git a/data/iconsets/transports/gadugadu/32x32/chat.png b/data/iconsets/transports/gadu-gadu/32x32/chat.png
index 05a95d49c..05a95d49c 100644
--- a/data/iconsets/transports/gadugadu/32x32/chat.png
+++ b/data/iconsets/transports/gadu-gadu/32x32/chat.png
Binary files differ
diff --git a/data/iconsets/transports/gadugadu/32x32/dnd.png b/data/iconsets/transports/gadu-gadu/32x32/dnd.png
index 5c46145eb..5c46145eb 100644
--- a/data/iconsets/transports/gadugadu/32x32/dnd.png
+++ b/data/iconsets/transports/gadu-gadu/32x32/dnd.png
Binary files differ
diff --git a/data/iconsets/transports/gadugadu/32x32/offline.png b/data/iconsets/transports/gadu-gadu/32x32/offline.png
index ef8d3a246..ef8d3a246 100644
--- a/data/iconsets/transports/gadugadu/32x32/offline.png
+++ b/data/iconsets/transports/gadu-gadu/32x32/offline.png
Binary files differ
diff --git a/data/iconsets/transports/gadugadu/32x32/online.png b/data/iconsets/transports/gadu-gadu/32x32/online.png
index 05a95d49c..05a95d49c 100644
--- a/data/iconsets/transports/gadugadu/32x32/online.png
+++ b/data/iconsets/transports/gadu-gadu/32x32/online.png
Binary files differ
diff --git a/data/iconsets/transports/gadugadu/32x32/xa.png b/data/iconsets/transports/gadu-gadu/32x32/xa.png
index 5c46145eb..5c46145eb 100644
--- a/data/iconsets/transports/gadugadu/32x32/xa.png
+++ b/data/iconsets/transports/gadu-gadu/32x32/xa.png
Binary files differ
diff --git a/data/iconsets/transports/gadugadu/48x48/offline.png b/data/iconsets/transports/gadu-gadu/48x48/offline.png
index 93729d4ff..93729d4ff 100644
--- a/data/iconsets/transports/gadugadu/48x48/offline.png
+++ b/data/iconsets/transports/gadu-gadu/48x48/offline.png
Binary files differ
diff --git a/data/iconsets/transports/gadugadu/48x48/online.png b/data/iconsets/transports/gadu-gadu/48x48/online.png
index 3f0937933..3f0937933 100644
--- a/data/iconsets/transports/gadugadu/48x48/online.png
+++ b/data/iconsets/transports/gadu-gadu/48x48/online.png
Binary files differ
diff --git a/data/pixmaps/events/connection_lost.png b/data/pixmaps/events/connection_lost.png
new file mode 100644
index 000000000..364b44174
--- /dev/null
+++ b/data/pixmaps/events/connection_lost.png
Binary files differ
diff --git a/data/pixmaps/person.png b/data/pixmaps/person.png
new file mode 100644
index 000000000..f2169a8a2
--- /dev/null
+++ b/data/pixmaps/person.png
Binary files differ
diff --git a/launch.sh b/launch.sh
index 29457c7c6..cb62f8549 100755
--- a/launch.sh
+++ b/launch.sh
@@ -1,3 +1,3 @@
-#!/bin/sh
+#!/bin/bash
cd `dirname $0`/src
-exec python -t gajim.py $@
+exec -a gajim python -t gajim.py $@
diff --git a/po/Makefile b/po/Makefile
index 1d750373d..2b10a9676 100644
--- a/po/Makefile
+++ b/po/Makefile
@@ -9,6 +9,9 @@ all: $(LANGS_MO)
%.mo: %.po
msgfmt $< -o $@
+%.glade.h: %.glade
+ intltool-extract --type=gettext/glade $<
+
gajim.pot: ../src/*py ../src/common/*py \
../data/glade/account_context_menu.glade.h \
../data/glade/account_creation_wizard_window.glade.h \
@@ -16,6 +19,7 @@ gajim.pot: ../src/*py ../src/common/*py \
../data/glade/accounts_window.glade.h \
../data/glade/add_new_contact_window.glade.h \
../data/glade/advanced_configuration_window.glade.h \
+ ../data/glade/advanced_notifications_window.glade.h \
../data/glade/advanced_menuitem_menu.glade.h \
../data/glade/change_password_dialog.glade.h \
../data/glade/change_status_message_dialog.glade.h \
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 733c16236..35ae4380c 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -4,50 +4,50 @@
[encoding: UTF-8]
gajim.desktop.in
-data/glade/account_context_menu.glade
-data/glade/account_creation_wizard_window.glade
-data/glade/account_modification_window.glade
-data/glade/accounts_window.glade
-data/glade/add_new_contact_window.glade
-data/glade/advanced_configuration_window.glade
-data/glade/advanced_menuitem_menu.glade
-data/glade/advanced_notifications_window.glade
-data/glade/change_password_dialog.glade
-data/glade/change_status_message_dialog.glade
-data/glade/chat_context_menu.glade
-data/glade/chat_control_popup_menu.glade
-data/glade/choose_gpg_key_dialog.glade
-data/glade/data_form_window.glade
-data/glade/edit_groups_dialog.glade
-data/glade/filetransfers.glade
-data/glade/gajim_themes_window.glade
-data/glade/gc_control_popup_menu.glade
-data/glade/gc_occupants_menu.glade
-data/glade/history_manager.glade
-data/glade/history_window.glade
-data/glade/input_dialog.glade
-data/glade/invitation_received_dialog.glade
-data/glade/join_groupchat_window.glade
-data/glade/manage_accounts_window.glade
-data/glade/manage_bookmarks_window.glade
-data/glade/manage_proxies_window.glade
-data/glade/message_window.glade
-data/glade/passphrase_dialog.glade
-data/glade/popup_notification_window.glade
-data/glade/preferences_window.glade
-data/glade/privacy_list_edit_window.glade
-data/glade/privacy_lists_first_window.glade
-data/glade/progress_dialog.glade
-data/glade/remove_account_window.glade
-data/glade/roster_contact_context_menu.glade
-data/glade/roster_window.glade
-data/glade/service_discovery_window.glade
-data/glade/service_registration_window.glade
-data/glade/single_message_window.glade
-data/glade/subscription_request_window.glade
-data/glade/systray_context_menu.glade
-data/glade/vcard_information_window.glade
-data/glade/xml_console_window.glade
+data/glade/account_context_menu.glade.h
+data/glade/account_creation_wizard_window.glade.h
+data/glade/account_modification_window.glade.h
+data/glade/accounts_window.glade.h
+data/glade/add_new_contact_window.glade.h
+data/glade/advanced_configuration_window.glade.h
+data/glade/advanced_menuitem_menu.glade.h
+data/glade/advanced_notifications_window.glade.h
+data/glade/change_password_dialog.glade.h
+data/glade/change_status_message_dialog.glade.h
+data/glade/chat_context_menu.glade.h
+data/glade/chat_control_popup_menu.glade.h
+data/glade/choose_gpg_key_dialog.glade.h
+data/glade/data_form_window.glade.h
+data/glade/edit_groups_dialog.glade.h
+data/glade/filetransfers.glade.h
+data/glade/gajim_themes_window.glade.h
+data/glade/gc_control_popup_menu.glade.h
+data/glade/gc_occupants_menu.glade.h
+data/glade/history_manager.glade.h
+data/glade/history_window.glade.h
+data/glade/input_dialog.glade.h
+data/glade/invitation_received_dialog.glade.h
+data/glade/join_groupchat_window.glade.h
+data/glade/manage_accounts_window.glade.h
+data/glade/manage_bookmarks_window.glade.h
+data/glade/manage_proxies_window.glade.h
+data/glade/message_window.glade.h
+data/glade/passphrase_dialog.glade.h
+data/glade/popup_notification_window.glade.h
+data/glade/preferences_window.glade.h
+data/glade/privacy_list_edit_window.glade.h
+data/glade/privacy_lists_first_window.glade.h
+data/glade/progress_dialog.glade.h
+data/glade/remove_account_window.glade.h
+data/glade/roster_contact_context_menu.glade.h
+data/glade/roster_window.glade.h
+data/glade/service_discovery_window.glade.h
+data/glade/service_registration_window.glade.h
+data/glade/single_message_window.glade.h
+data/glade/subscription_request_window.glade.h
+data/glade/systray_context_menu.glade.h
+data/glade/vcard_information_window.glade.h
+data/glade/xml_console_window.glade.h
src/advanced.py
src/cell_renderer_image.py
src/chat_control.py
diff --git a/po/de.po b/po/de.po
index 5ad25a178..0c265fdc8 100644
--- a/po/de.po
+++ b/po/de.po
@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: gajim 0.9\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-07-04 00:03+0200\n"
-"PO-Revision-Date: 2006-04-12 08:34+0200\n"
+"POT-Creation-Date: 2006-09-04 14:11+0200\n"
+"PO-Revision-Date: 2006-09-06 19:57+0200\n"
"Last-Translator: Fridtjof Busse <fridtjof@fbunet.de>\n"
"Language-Team: German <translators@gajim.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);"
#: ../gajim.desktop.in.h:1
msgid "A GTK+ Jabber client"
@@ -23,7 +23,7 @@ msgstr "Ein GTK+ Jabber-Client"
#: ../gajim.desktop.in.h:2
msgid "Gajim Instant Messenger"
-msgstr "Gajim·Instant·Messenger"
+msgstr "Gajim Instant Messenger"
#: ../gajim.desktop.in.h:3
msgid "Jabber IM Client"
@@ -31,11 +31,11 @@ msgstr "Jabber IM-Client"
#: ../data/glade/account_context_menu.glade.h:1
msgid "Send Single _Message..."
-msgstr "Einzelne _Nachricht senden"
+msgstr "Einzelne _Nachricht senden..."
#: ../data/glade/account_context_menu.glade.h:2
msgid "_Add Contact..."
-msgstr "Kontakt _Hinzufügen..."
+msgstr "Kontakt _hinzufügen ..."
#: ../data/glade/account_context_menu.glade.h:3
msgid "_Discover Services..."
@@ -76,12 +76,12 @@ msgstr "<b>Bitte geben Sie die Daten für Ihr neues Konto ein</b>"
#: ../data/glade/account_creation_wizard_window.glade.h:6
msgid "Click to see features (like MSN, ICQ transports) of jabber servers"
msgstr ""
-"Klicken, um die Fähigkeiten (z.B. MSN, ICQ Transporte) auf Jabber-Servern zu "
-"sehen."
+"Klicken, um die Fähigkeiten (z.B. MSN-, ICQ-Transporte) auf Jabber-Servern "
+"zu sehen."
#: ../data/glade/account_creation_wizard_window.glade.h:7
msgid "Connect when I press Finish"
-msgstr "verbinde, sobald ich Fertig klicke"
+msgstr "Verbinde, sobald ich Fertig klicke"
#: ../data/glade/account_creation_wizard_window.glade.h:8
msgid "Gajim: Account Creation Wizard"
@@ -123,8 +123,8 @@ msgid ""
"You need to have an account in order to connect\n"
"to the Jabber network."
msgstr ""
-"Sie müssen ein Konto erstellen, bevor Sie zum Jabber-Netzwerk verbinden\n"
-"können."
+"Sie müssen ein Konto erstellen, bevor Sie sich zum Jabber-Netzwerk \n"
+"verbinden können."
#: ../data/glade/account_creation_wizard_window.glade.h:18
msgid "Your JID:"
@@ -133,7 +133,7 @@ msgstr "Ihre JID:"
#: ../data/glade/account_creation_wizard_window.glade.h:19
#: ../data/glade/roster_window.glade.h:10
msgid "_Advanced"
-msgstr "Erweitert"
+msgstr "_Erweitert"
#: ../data/glade/account_creation_wizard_window.glade.h:20
msgid "_Finish"
@@ -233,16 +233,14 @@ msgid "Edit Personal Information..."
msgstr "Persönliche _Details bearbeiten..."
#: ../data/glade/account_modification_window.glade.h:14
-#: ../data/glade/roster_window.glade.h:5 ../src/notify.py:308
-#: ../src/notify.py:330 ../src/notify.py:342 ../src/tooltips.py:350
+#: ../data/glade/roster_window.glade.h:5 ../src/notify.py:406
+#: ../src/notify.py:428 ../src/notify.py:440 ../src/tooltips.py:330
msgid "Gajim"
msgstr "Gajim"
#: ../data/glade/account_modification_window.glade.h:15
-#: ../data/glade/preferences_window.glade.h:44
-#: ../data/glade/vcard_information_window.glade.h:17
-#: ../src/roster_window.py:290 ../src/roster_window.py:1184
-#: ../src/roster_window.py:1405
+#: ../data/glade/preferences_window.glade.h:46 ../src/roster_window.py:300
+#: ../src/roster_window.py:1256 ../src/roster_window.py:1640
msgid "General"
msgstr "Allgemein"
@@ -251,7 +249,6 @@ msgid "Hostname: "
msgstr "Hostname: "
#: ../data/glade/account_modification_window.glade.h:17
-#, fuzzy
msgid ""
"If checked, Gajim will also broadcast some more IPs except from just your "
"IP, so file transfer has higher chances of working."
@@ -265,22 +262,22 @@ msgid ""
"timeout which results in disconnection"
msgstr ""
"Wenn aktiviert, sendet Gajim regelmäßig keep-alive-Pakete, um den "
-"Verbindungsabbruch aufgrund einer Zeitüberschreitung zu verhindern"
+"Verbindungsabbruch durch eine Zeitüberschreitung zu verhindern"
#: ../data/glade/account_modification_window.glade.h:20
msgid ""
"If checked, Gajim will store the password in ~/.gajim/config with 'read' "
"permission only for you"
msgstr ""
-"Wenn Sie diese Option wählen, wird Gajim das Passwort in ~/.gajim/config mit "
-"'lese' -Rechten nur für Sie"
+"Wenn aktiviert, wird Gajim das Passwort in ~/.gajim/config mit "
+"Lese-Rechten nur für Sie speichern"
#: ../data/glade/account_modification_window.glade.h:21
msgid ""
"If checked, Gajim, when launched, will automatically connect to jabber using "
"this account"
msgstr ""
-"Wenn Sie diese Option wählen, wird Gajim während des Startvorgangs "
+"Wenn aktiviert, wird Gajim während des Startvorgangs "
"automatisch zu diesem Konto verbinden"
#: ../data/glade/account_modification_window.glade.h:22
@@ -289,7 +286,7 @@ msgid ""
"bottom of the roster window) will change the status of this account "
"accordingly"
msgstr ""
-"Wenn gewählt, wird jede Änderung des globalen Status (verwaltet von der "
+"Wenn aktiviert, wird jede Änderung des globalen Status (verwaltet von der "
"Combobox am Fuße des Kontaktfenster) auch den Status dieses Kontakts "
"entsprechend ändern"
@@ -299,22 +296,22 @@ msgstr "Informationen über Sie, wie sie auf dem Server gespeichert sind"
#: ../data/glade/account_modification_window.glade.h:24
msgid "Manage..."
-msgstr "Verwalten..."
+msgstr "Verwalten ..."
-#: ../data/glade/account_modification_window.glade.h:25 ../src/config.py:1448
+#: ../data/glade/account_modification_window.glade.h:25 ../src/config.py:1511
msgid "No key selected"
msgstr "Kein Schlüssel gewählt"
#. None means no proxy profile selected
-#: ../data/glade/account_modification_window.glade.h:27 ../src/config.py:1053
-#: ../src/config.py:1058 ../src/config.py:1230 ../src/config.py:1505
-#: ../src/config.py:1578 ../src/config.py:2282
+#: ../data/glade/account_modification_window.glade.h:27 ../src/config.py:1112
+#: ../src/config.py:1117 ../src/config.py:1289 ../src/config.py:1569
+#: ../src/config.py:1642 ../src/config.py:2351
msgid "None"
msgstr "Kein"
#: ../data/glade/account_modification_window.glade.h:28
msgid "Personal Information"
-msgstr "Persönliche Details bearbeiten..."
+msgstr "Persönliche Informationen"
#: ../data/glade/account_modification_window.glade.h:29
msgid "Port: "
@@ -387,7 +384,6 @@ msgid "Use file transfer proxies"
msgstr "Verwende Datentransfer-Proxies"
#: ../data/glade/account_modification_window.glade.h:43
-#: ../data/glade/add_new_contact_window.glade.h:6
msgid "_Jabber ID:"
msgstr "_Jabber ID:"
@@ -421,45 +417,61 @@ msgid "_Remove"
msgstr "_Entfernen"
#: ../data/glade/add_new_contact_window.glade.h:1
-#, fuzzy
-msgid "A_llow this contact to view my status"
-msgstr "Erlaube ihm/ihr meinen Status zu sehen"
+msgid "A_ccount:"
+msgstr "_Konto:"
#: ../data/glade/add_new_contact_window.glade.h:2
+msgid "A_llow this contact to view my status"
+msgstr "Er_laube diesem Kontakt, meinen Status zu sehen"
+
+#: ../data/glade/add_new_contact_window.glade.h:3
msgid "Add New Contact"
msgstr "Neuen Kontakt hinzufügen"
-#: ../data/glade/add_new_contact_window.glade.h:3
+#: ../data/glade/add_new_contact_window.glade.h:4
msgid "I would like to add you to my contact list."
msgstr "Ich würde Dich gerne zu meiner Kontaktliste hinzufügen."
-#: ../data/glade/add_new_contact_window.glade.h:4
-#, fuzzy
-msgid "_Account:"
-msgstr "Konto:"
-
#: ../data/glade/add_new_contact_window.glade.h:5
-#, fuzzy
+msgid ""
+"You have to register to this transport\n"
+"to be able to add a contact from this\n"
+"protocol. Click on register button to\n"
+"proceed."
+msgstr ""
+"Sie müssen sich bei diesem Transport\n"
+"registrieren, um einen Kontakt von\n"
+"diesem Protokoll hinzufügen zu können.\n"
+"Klicken Sie auf den Registrier-Knopf,\n"
+"um fortzufahren."
+
+#: ../data/glade/add_new_contact_window.glade.h:9
+msgid ""
+"You must be connected to the transport to be able\n"
+"to add a contact from this protocol."
+msgstr ""
+"Sie müssen mit dem Transport verbunden sein, um einen\n"
+"Kontakt von diesem Protokoll hinzufügen zu können."
+
+#: ../data/glade/add_new_contact_window.glade.h:11
msgid "_Group:"
-msgstr "Gruppe:"
+msgstr "_Gruppe:"
-#: ../data/glade/add_new_contact_window.glade.h:7
+#: ../data/glade/add_new_contact_window.glade.h:12
msgid "_Nickname:"
msgstr "_Spitzname:"
-#: ../data/glade/add_new_contact_window.glade.h:8
-#, fuzzy
+#: ../data/glade/add_new_contact_window.glade.h:13
msgid "_Protocol:"
-msgstr "Protokoll:"
+msgstr "_Protokoll:"
-#: ../data/glade/add_new_contact_window.glade.h:9
-msgid "_Subscribe"
-msgstr "_Abonnieren"
+#: ../data/glade/add_new_contact_window.glade.h:14
+msgid "_Register"
+msgstr "_Registrieren"
-#: ../data/glade/add_new_contact_window.glade.h:10
-#, fuzzy
+#: ../data/glade/add_new_contact_window.glade.h:15
msgid "_User ID:"
-msgstr "Benutzer-ID:"
+msgstr "_Benutzer-ID:"
#: ../data/glade/advanced_configuration_window.glade.h:1
msgid "<b>Description</b>"
@@ -517,7 +529,7 @@ msgstr "_Administrator"
#: ../data/glade/advanced_menuitem_menu.glade.h:10
msgid "_Privacy Lists"
-msgstr ""
+msgstr "Prviatlisten"
#: ../data/glade/advanced_menuitem_menu.glade.h:11
msgid "_Send Server Message"
@@ -529,17 +541,15 @@ msgstr "Sende _einzelne Nachricht"
#: ../data/glade/advanced_notifications_window.glade.h:1
msgid " a window/tab opened with that contact "
-msgstr ""
+msgstr " ein Fenster/Tab mit diesem Kontakt geöffnet "
#: ../data/glade/advanced_notifications_window.glade.h:2
-#, fuzzy
msgid "<b>Actions</b>"
-msgstr "<b>Anwendungen</b>"
+msgstr "<b>Aktionen</b>"
#: ../data/glade/advanced_notifications_window.glade.h:3
-#, fuzzy
msgid "<b>Conditions</b>"
-msgstr "<b>Klänge</b>"
+msgstr "<b>Ereignisse</b>"
#: ../data/glade/advanced_notifications_window.glade.h:4
#: ../data/glade/preferences_window.glade.h:10
@@ -547,83 +557,57 @@ msgid "<b>Sounds</b>"
msgstr "<b>Klänge</b>"
#: ../data/glade/advanced_notifications_window.glade.h:5
-#, fuzzy
-msgid "Add"
-msgstr "Adresse"
-
-#: ../data/glade/advanced_notifications_window.glade.h:6
-#, fuzzy
msgid "Advanced Actions"
-msgstr "Er_weiterte Aktionen"
+msgstr "Erweiterte Aktionen"
-#: ../data/glade/advanced_notifications_window.glade.h:7
-#, fuzzy
+#: ../data/glade/advanced_notifications_window.glade.h:6
msgid "Advanced Notifications Control"
-msgstr "Erweiterter Konfigurations-Editor"
+msgstr "Erweiterter Benachrichtigungs-Editor"
-#: ../data/glade/advanced_notifications_window.glade.h:8
-#, fuzzy
+#: ../data/glade/advanced_notifications_window.glade.h:7
msgid "All Status "
-msgstr "Status: "
-
-#: ../data/glade/advanced_notifications_window.glade.h:9
-msgid "And I "
-msgstr ""
+msgstr "Alle Status "
-#: ../data/glade/advanced_notifications_window.glade.h:10
-#, fuzzy
-msgid "Away "
+#: ../data/glade/advanced_notifications_window.glade.h:8
+#: ../src/common/helpers.py:230
+msgid "Away"
msgstr "Abwesend"
-#: ../data/glade/advanced_notifications_window.glade.h:11
-#, fuzzy
+#: ../data/glade/advanced_notifications_window.glade.h:9
msgid "Busy "
-msgstr "Beschäftigt"
+msgstr "Beschäftigt "
-#: ../data/glade/advanced_notifications_window.glade.h:12
+#: ../data/glade/advanced_notifications_window.glade.h:10
msgid "Don't have "
-msgstr ""
+msgstr "habe nicht "
-#: ../data/glade/advanced_notifications_window.glade.h:13
-#, fuzzy
-msgid "Down"
-msgstr "Download"
-
-#: ../data/glade/advanced_notifications_window.glade.h:14
+#: ../data/glade/advanced_notifications_window.glade.h:11
msgid "Have "
-msgstr ""
+msgstr "habe "
-#: ../data/glade/advanced_notifications_window.glade.h:15
-#: ../src/common/helpers.py:239
+#: ../data/glade/advanced_notifications_window.glade.h:12
+#: ../src/common/helpers.py:240
msgid "Invisible"
msgstr "Unsichtbar"
-#: ../data/glade/advanced_notifications_window.glade.h:16
-#, fuzzy
+#: ../data/glade/advanced_notifications_window.glade.h:13
msgid "Launch a command"
-msgstr "Kein Kommando: /%s"
-
-#: ../data/glade/advanced_notifications_window.glade.h:17
-#, fuzzy
-msgid "List of special notifications settings"
-msgstr "Füge speziellen Hinweis für %s hinzu"
+msgstr "Starte ein Kommando"
-#: ../data/glade/advanced_notifications_window.glade.h:18
-#, fuzzy
-msgid "Not Available "
+#: ../data/glade/advanced_notifications_window.glade.h:14
+#: ../src/common/helpers.py:213
+msgid "Not Available"
msgstr "Nicht verfügbar"
-#: ../data/glade/advanced_notifications_window.glade.h:19
-#, fuzzy
+#: ../data/glade/advanced_notifications_window.glade.h:15
msgid "Online / Free For Chat"
msgstr "Frei zum Chatten"
-#: ../data/glade/advanced_notifications_window.glade.h:20
-#, fuzzy
+#: ../data/glade/advanced_notifications_window.glade.h:16
msgid "Play a sound"
-msgstr "_Klänge abspielen"
+msgstr "Klänge abspielen"
-#: ../data/glade/advanced_notifications_window.glade.h:21
+#: ../data/glade/advanced_notifications_window.glade.h:17
msgid ""
"Receive a Message\n"
"Contact Connected\n"
@@ -635,78 +619,85 @@ msgid ""
"File Transfert Started\n"
"File Transfert Finished"
msgstr ""
-
-#: ../data/glade/advanced_notifications_window.glade.h:30
+"Nachricht empfangen\n"
+"Kontakt verbunden\n"
+"Kontakt nicht mehr verbunden\n"
+"Kontakt ändert Status\n"
+"Gruppenchat-Nachricht hervorgehoben\n"
+"Gruppenchat-Nachricht empfangen\n"
+"Anfrage zur Dateiübertragung\n"
+"Dateiübertragung begonnen\n"
+"Dateiübertragung beendet"
+
+#: ../data/glade/advanced_notifications_window.glade.h:26
msgid "Some special(s) status..."
-msgstr ""
-
-#: ../data/glade/advanced_notifications_window.glade.h:31
-msgid "Up"
-msgstr ""
+msgstr "Einen speziellen Status ..."
-#: ../data/glade/advanced_notifications_window.glade.h:32
+#: ../data/glade/advanced_notifications_window.glade.h:27
msgid "When "
-msgstr ""
+msgstr "Wenn "
-#: ../data/glade/advanced_notifications_window.glade.h:33
+#: ../data/glade/advanced_notifications_window.glade.h:28
msgid "_Activate Windows manager UrgencyHint to make chat taskbar to flash"
msgstr ""
-#: ../data/glade/advanced_notifications_window.glade.h:34
-#, fuzzy
+#: ../data/glade/advanced_notifications_window.glade.h:29
msgid "_Disable auto opening chat window"
-msgstr "Versteckt die Button im Gruppenchat-Fenster"
+msgstr "_Deaktiviere automatisch öffnendes Chatfenster"
-#: ../data/glade/advanced_notifications_window.glade.h:35
+#: ../data/glade/advanced_notifications_window.glade.h:30
msgid "_Disable existing popup window"
-msgstr ""
+msgstr "_Deaktivere existierendes Popup-Fenster"
-#: ../data/glade/advanced_notifications_window.glade.h:36
+#: ../data/glade/advanced_notifications_window.glade.h:31
msgid "_Disable existing sound for this event"
-msgstr ""
+msgstr "_Deaktivere existierenden Sound für dieses Ereignis"
-#: ../data/glade/advanced_notifications_window.glade.h:37
+#: ../data/glade/advanced_notifications_window.glade.h:32
msgid "_Disable showing event in roster"
-msgstr ""
+msgstr "_Deaktivere die Ereignisanzeige im Roster"
-#: ../data/glade/advanced_notifications_window.glade.h:38
+#: ../data/glade/advanced_notifications_window.glade.h:33
msgid "_Disable showing event in systray"
-msgstr ""
+msgstr "_Deaktiviere die Ereignisanzeige im Systry"
-#: ../data/glade/advanced_notifications_window.glade.h:39
+#: ../data/glade/advanced_notifications_window.glade.h:34
msgid "_Inform me with a popup window"
-msgstr ""
+msgstr "_Informiere mich mit einem Popup-Fenster"
-#: ../data/glade/advanced_notifications_window.glade.h:40
-#, fuzzy
+#: ../data/glade/advanced_notifications_window.glade.h:35
msgid "_Open chat window with user"
-msgstr "Ein einzelnes Chat-Fenster mit _Reitern verwenden"
+msgstr "Ein Chat-Fenster mit Benutzer öffnen"
-#: ../data/glade/advanced_notifications_window.glade.h:41
-#, fuzzy
+#: ../data/glade/advanced_notifications_window.glade.h:36
msgid "_Show event in roster"
-msgstr "Nur in der _Kontaktliste anzeigen"
+msgstr "Zeige Ereignis in der _Kontaktliste"
-#: ../data/glade/advanced_notifications_window.glade.h:42
-#, fuzzy
+#: ../data/glade/advanced_notifications_window.glade.h:37
msgid "_Show event in systray"
-msgstr "Nur in der _Kontaktliste anzeigen"
+msgstr "Zeige _Ereignisse im Systray"
-#: ../data/glade/advanced_notifications_window.glade.h:43
+#: ../data/glade/advanced_notifications_window.glade.h:38
+msgid "and I "
+msgstr "und ich "
+
+#: ../data/glade/advanced_notifications_window.glade.h:39
msgid ""
"contact(s)\n"
"group(s)\n"
"everybody"
msgstr ""
+"Kontakt(e)\n"
+"Gruppe(n)\n"
+"Alle"
-#: ../data/glade/advanced_notifications_window.glade.h:46
-#, fuzzy
+#: ../data/glade/advanced_notifications_window.glade.h:42
msgid "for "
-msgstr "Port: "
+msgstr "für "
-#: ../data/glade/advanced_notifications_window.glade.h:47
+#: ../data/glade/advanced_notifications_window.glade.h:43
msgid "when I'm "
-msgstr ""
+msgstr "wenn ich bin "
#: ../data/glade/change_password_dialog.glade.h:1
msgid "Change Password"
@@ -730,7 +721,7 @@ msgstr "Voreingestellte Nachrichten:"
#: ../data/glade/change_status_message_dialog.glade.h:3
msgid "Save as Preset..."
-msgstr "Speichere als Voreinstellung..."
+msgstr "Speichere als Voreinstellung ..."
#: ../data/glade/chat_context_menu.glade.h:1
msgid "Join _Group Chat"
@@ -739,7 +730,7 @@ msgstr "_Chatraum beitreten"
#: ../data/glade/chat_context_menu.glade.h:2
#: ../data/glade/chat_control_popup_menu.glade.h:4
#: ../data/glade/gc_occupants_menu.glade.h:2
-#: ../data/glade/roster_contact_context_menu.glade.h:8
+#: ../data/glade/roster_contact_context_menu.glade.h:9
msgid "_Add to Roster"
msgstr "Zur Kont_aktliste hinzufügen"
@@ -770,7 +761,7 @@ msgid "Click to see past conversations with this contact"
msgstr "Klicken, um die früheren Unterhaltungen mit diesem Kontakt zu sehen"
#: ../data/glade/chat_control_popup_menu.glade.h:2
-#: ../data/glade/roster_contact_context_menu.glade.h:6
+#: ../data/glade/roster_contact_context_menu.glade.h:7
msgid "Send _File"
msgstr "_Datei Senden"
@@ -786,7 +777,7 @@ msgstr "_Kompakte Ansicht Alt+C"
#: ../data/glade/chat_control_popup_menu.glade.h:6
#: ../data/glade/gc_control_popup_menu.glade.h:7
#: ../data/glade/gc_occupants_menu.glade.h:5
-#: ../data/glade/roster_contact_context_menu.glade.h:11
+#: ../data/glade/roster_contact_context_menu.glade.h:12
msgid "_History"
msgstr "_Verlauf"
@@ -855,7 +846,7 @@ msgstr ""
msgid "When a file transfer is complete show a popup notification"
msgstr "Zeige eine Benachrichtigung, wenn die Datei komplett übertragen wurde."
-#: ../data/glade/filetransfers.glade.h:13 ../src/filetransfers_window.py:753
+#: ../data/glade/filetransfers.glade.h:13 ../src/filetransfers_window.py:752
msgid "_Continue"
msgstr "_Fortsetzen"
@@ -891,8 +882,7 @@ msgstr ""
"Kontakt\n"
"Banner"
-#: ../data/glade/gajim_themes_window.glade.h:6
-#: ../data/glade/privacy_list_edit_window.glade.h:4 ../src/config.py:326
+#: ../data/glade/gajim_themes_window.glade.h:6 ../src/config.py:327
msgid "Active"
msgstr "Aktiv"
@@ -940,7 +930,7 @@ msgstr ""
"MUC gerichtete\n"
"Nachrichten"
-#: ../data/glade/gajim_themes_window.glade.h:18 ../src/tooltips.py:667
+#: ../data/glade/gajim_themes_window.glade.h:18 ../src/tooltips.py:649
msgid "Paused"
msgstr "Unterbrochen"
@@ -1057,7 +1047,7 @@ msgstr "Unterhaltungs-Verlauf"
#: ../data/glade/history_window.glade.h:3
msgid "Query Builder..."
-msgstr "Anfrage-Baukasten..."
+msgstr "Anfrage-Baukasten ..."
#: ../data/glade/history_window.glade.h:4
msgid "Search"
@@ -1080,13 +1070,13 @@ msgstr "Ablehnen"
msgid "Invitation Received"
msgstr "Einladung empfangen"
-#: ../data/glade/join_groupchat_window.glade.h:1 ../src/dialogs.py:941
+#: ../data/glade/join_groupchat_window.glade.h:1 ../src/dialogs.py:1067
msgid "Join Group Chat"
msgstr "Betrete Chatraum"
#: ../data/glade/join_groupchat_window.glade.h:2
#: ../data/glade/manage_bookmarks_window.glade.h:4
-#: ../data/glade/vcard_information_window.glade.h:28
+#: ../data/glade/vcard_information_window.glade.h:25
msgid "Nickname:"
msgstr "Spitzname:"
@@ -1110,7 +1100,7 @@ msgid "Server:"
msgstr "Server:"
#: ../data/glade/join_groupchat_window.glade.h:7 ../src/disco.py:1145
-#: ../src/disco.py:1507
+#: ../src/disco.py:1510
msgid "_Join"
msgstr "_Betreten"
@@ -1131,9 +1121,8 @@ msgid "Manage Bookmarks"
msgstr "Verwalte Bookmarks"
#: ../data/glade/manage_bookmarks_window.glade.h:6
-#, fuzzy
msgid "Print status:"
-msgstr "Zeit anzeigen:"
+msgstr "Status anzeigen:"
#: ../data/glade/manage_bookmarks_window.glade.h:9
msgid "Title:"
@@ -1156,7 +1145,7 @@ msgid "Manage Proxy Profiles"
msgstr "Proxy Verwaltung"
#: ../data/glade/manage_proxies_window.glade.h:5
-#: ../data/glade/vcard_information_window.glade.h:27
+#: ../data/glade/vcard_information_window.glade.h:24
msgid "Name:"
msgstr "Name:"
@@ -1172,7 +1161,7 @@ msgstr "Verwende Authentifizierung"
msgid "Click to insert an emoticon (Alt+M)"
msgstr "Klicken Sie, um ein Emoticon einzufügen (Alt+M)"
-#: ../data/glade/message_window.glade.h:2 ../src/chat_control.py:966
+#: ../data/glade/message_window.glade.h:2 ../src/chat_control.py:1066
msgid "OpenPGP Encryption"
msgstr "OpenPGP-Verschlüsselung"
@@ -1211,9 +1200,8 @@ msgid "<b>Format of a line</b>"
msgstr "<b>Format einer Zeile</b>"
#: ../data/glade/preferences_window.glade.h:6
-#, fuzzy
msgid "<b>GMail Options</b>"
-msgstr "<b>Anwendungen</b>"
+msgstr "<b>Gmail-Optionen</b>"
#: ../data/glade/preferences_window.glade.h:7
msgid "<b>Interface Customization</b>"
@@ -1260,18 +1248,25 @@ msgid "Also known as iChat style"
msgstr "Auch als iChat-Stil bekannt"
#: ../data/glade/preferences_window.glade.h:20
+msgid ""
+"An example: If you have enabled status message for away, Gajim won't ask you "
+"anymore for a status message when you change your status to away; it will "
+"use the default one set here"
+msgstr ""
+
+#: ../data/glade/preferences_window.glade.h:21
msgid "Ask status message when I:"
msgstr "Erfrage Status-Nachricht beim: "
-#: ../data/glade/preferences_window.glade.h:21
+#: ../data/glade/preferences_window.glade.h:22
msgid "Auto _away after:"
msgstr "Automatisch _abwesend nach:"
-#: ../data/glade/preferences_window.glade.h:22
+#: ../data/glade/preferences_window.glade.h:23
msgid "Auto _not available after:"
msgstr "Automatisch _nicht verfügbar nach:"
-#: ../data/glade/preferences_window.glade.h:23
+#: ../data/glade/preferences_window.glade.h:24
msgid ""
"Autodetect on every Gajim startup\n"
"Always use GNOME default applications\n"
@@ -1283,19 +1278,19 @@ msgstr ""
"Immer KDE Standard-Anwendungen verwenden\n"
"Benutzerdefiniert"
-#: ../data/glade/preferences_window.glade.h:27
+#: ../data/glade/preferences_window.glade.h:28
msgid "B_efore nickname:"
msgstr "Vor d_em Spitznamen:"
-#: ../data/glade/preferences_window.glade.h:28 ../src/chat_control.py:718
+#: ../data/glade/preferences_window.glade.h:29 ../src/chat_control.py:806
msgid "Chat"
msgstr "Chat"
-#: ../data/glade/preferences_window.glade.h:29
+#: ../data/glade/preferences_window.glade.h:30
msgid "Chat state noti_fications:"
msgstr "Sende Statusbenachrichtigungen:"
-#: ../data/glade/preferences_window.glade.h:30
+#: ../data/glade/preferences_window.glade.h:31
msgid ""
"Check this option, only if someone you don't have in the roster spams/annoys "
"you. Use with caution, cause it blocks all messages from any contact that is "
@@ -1305,35 +1300,39 @@ msgstr ""
"sie zuspammt oder belästigt. Verwenden Sie sie mit Vorsicht, da sie alle "
"Nachrichten von allen Kontakten blockiert, die nicht in ihrer Liste sind."
-#: ../data/glade/preferences_window.glade.h:31
+#: ../data/glade/preferences_window.glade.h:32
+msgid "Default Status Messages"
+msgstr "Vorgegebene Status-Nachrichten"
+
+#: ../data/glade/preferences_window.glade.h:33
msgid "Default status _iconset:"
msgstr "Standard Status-S_ymbole:"
-#: ../data/glade/preferences_window.glade.h:32
+#: ../data/glade/preferences_window.glade.h:34
msgid "Display _extra email details"
-msgstr ""
+msgstr "Zeige zusätzliche _Email-Details"
-#: ../data/glade/preferences_window.glade.h:33
+#: ../data/glade/preferences_window.glade.h:35
msgid "Display a_vatars of contacts in roster"
msgstr "Zeige A_vatare von Kontakten im Roster"
-#: ../data/glade/preferences_window.glade.h:34
+#: ../data/glade/preferences_window.glade.h:36
msgid "Display status _messages of contacts in roster"
msgstr "Zeige die Status_nachrichten von Kontakten im Roster"
-#: ../data/glade/preferences_window.glade.h:35
+#: ../data/glade/preferences_window.glade.h:37
msgid "E_very 5 minutes"
msgstr "Alle 5 _Minuten"
-#: ../data/glade/preferences_window.glade.h:36
+#: ../data/glade/preferences_window.glade.h:38
msgid "Emoticons:"
msgstr "Emoticons:"
-#: ../data/glade/preferences_window.glade.h:37
+#: ../data/glade/preferences_window.glade.h:39
msgid "Events"
msgstr "Ereignisse"
-#: ../data/glade/preferences_window.glade.h:38
+#: ../data/glade/preferences_window.glade.h:40
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 "
@@ -1343,14 +1342,14 @@ msgstr ""
"betrifft, empfangen und versenden. Hier können Sie definieren welche "
"Chatstates Sie Ihrem Gegenüber senden möchten."
-#: ../data/glade/preferences_window.glade.h:39
+#: ../data/glade/preferences_window.glade.h:41
msgid ""
"Gajim will automatically show new events by poping up the relative window"
msgstr ""
"Gajim zeigt neue Ereignisse automatisch anzeigen, indem das betreffende "
"Fenster geöffnet wird"
-#: ../data/glade/preferences_window.glade.h:40
+#: ../data/glade/preferences_window.glade.h:42
msgid ""
"Gajim will notify you for new events via a popup in the bottom right of the "
"screen"
@@ -1358,7 +1357,7 @@ msgstr ""
"Gajim wird Sie über neue Ereignisse mit einem Popup in der rechten unteren "
"Ecke des Bildschirms benachrichtigen"
-#: ../data/glade/preferences_window.glade.h:41
+#: ../data/glade/preferences_window.glade.h:43
msgid ""
"Gajim will notify you via a popup window in the bottom right of the screen "
"about contacts that just signed in"
@@ -1366,7 +1365,7 @@ msgstr ""
"Gajim wird Sie über ein Popup-Fenster in der rechten unteren Ecke des "
"Bildschirmes über Kontakte informieren, die sich gerade angemeldet haben"
-#: ../data/glade/preferences_window.glade.h:42
+#: ../data/glade/preferences_window.glade.h:44
msgid ""
"Gajim will notify you via a popup window in the bottom right of the screen "
"about contacts that just signed out"
@@ -1374,14 +1373,20 @@ msgstr ""
"Gajim wird Sie über ein Popup-Fenster in der rechten unteren Bildschirmecke "
"über Kontakte informieren, die sich gerade abgemeldet haben"
-#: ../data/glade/preferences_window.glade.h:43
+#: ../data/glade/preferences_window.glade.h:45
msgid ""
"Gajim will only change the icon of the contact that triggered the new event"
msgstr ""
"Gajim wird nur das Symbol des Kontaktes ändern, von dem die neue Nachricht "
"kommt"
-#: ../data/glade/preferences_window.glade.h:45
+#: ../data/glade/preferences_window.glade.h:47
+msgid ""
+"If checked, Gajim will also include information about the sender of the new "
+"emails"
+msgstr ""
+
+#: ../data/glade/preferences_window.glade.h:48
msgid ""
"If checked, Gajim will display avatars of contacts in roster window and in "
"group chats"
@@ -1389,7 +1394,7 @@ msgstr ""
"Wenn aktiviert, wird Gajim einen Avatar im Roster-Fenster und in "
"Gruppenchats einblenden"
-#: ../data/glade/preferences_window.glade.h:46
+#: ../data/glade/preferences_window.glade.h:49
msgid ""
"If checked, Gajim will display status messages of contacts under the contact "
"name in roster window and in group chats"
@@ -1397,7 +1402,7 @@ msgstr ""
"Wenn aktiviert, wird Gajim für jeden Kontakt unter dem Kontaktnamen im "
"Roster und im Gruppenchat-Fenster die Statusnachricht anzeigen"
-#: ../data/glade/preferences_window.glade.h:47
+#: ../data/glade/preferences_window.glade.h:50
msgid ""
"If checked, Gajim will remember the roster and chat window positions in the "
"screen and the sizes of them next time you run it"
@@ -1405,17 +1410,14 @@ msgstr ""
"Wenn gewählt, merkt sich Gajim die Position und Größe der Kontaktliste auf "
"dem Bildschirm"
-#: ../data/glade/preferences_window.glade.h:48
+#: ../data/glade/preferences_window.glade.h:51
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, "
"etc...)"
-msgstr ""
-"Wenn Sie diese Option aktivieren wird Gajim Protokoll-spezifische Symbole "
-"verwenden (Ein Kontakt aus MSN wird z.B. das äquivalente MSN-Symbol für den "
-"Status \"Anwesend\", \"Abwesend\", \"Beschäftigt\", etc... haben)"
+msgstr "Wenn Sie diese Option aktivieren wird Gajim Protokoll-spezifische Symbole verwenden (Ein Kontakt aus MSN wird z.B. das äquivalente MSN-Symbol für den Status \"Anwesend\", \"Abwesend\", \"Beschäftigt\", etc. haben)"
-#: ../data/glade/preferences_window.glade.h:49
+#: ../data/glade/preferences_window.glade.h:52
msgid ""
"If not disabled, Gajim will replace ascii smilies like ':)' with equivalent "
"animated or static graphical emoticons"
@@ -1423,11 +1425,11 @@ msgstr ""
"Wenn nicht deaktivert, wird Gajim ASCII-Smilies wie ':)' mit äquivalenten "
"graphischen Emoticons ersetzen"
-#: ../data/glade/preferences_window.glade.h:50
+#: ../data/glade/preferences_window.glade.h:53
msgid "Ma_nage..."
-msgstr "_Verwalte..."
+msgstr "_Verwalte ..."
-#: ../data/glade/preferences_window.glade.h:51
+#: ../data/glade/preferences_window.glade.h:54
msgid ""
"Never\n"
"Always\n"
@@ -1439,80 +1441,79 @@ msgstr ""
"Pro Account\n"
"Pro Typ"
-#: ../data/glade/preferences_window.glade.h:55
+#: ../data/glade/preferences_window.glade.h:58
msgid "Notify me about contacts that: "
msgstr "Über Kontakte benachrichtigen, die sich "
-#: ../data/glade/preferences_window.glade.h:56
-#, fuzzy
+#: ../data/glade/preferences_window.glade.h:59
msgid "Notify on new _GMail email"
msgstr "Über neue _Gmail E-Mail benachrichtigen"
-#: ../data/glade/preferences_window.glade.h:57
+#: ../data/glade/preferences_window.glade.h:60
msgid "On every _message"
msgstr "In jeder _Zeile"
-#: ../data/glade/preferences_window.glade.h:58
+#: ../data/glade/preferences_window.glade.h:61
msgid "One message _window:"
msgstr "Ein _Nachrichtenfenster:"
-#: ../data/glade/preferences_window.glade.h:59
+#: ../data/glade/preferences_window.glade.h:62
msgid "Play _sounds"
msgstr "_Klänge abspielen"
-#: ../data/glade/preferences_window.glade.h:60
+#: ../data/glade/preferences_window.glade.h:63
msgid "Preferences"
msgstr "Einstellungen"
-#: ../data/glade/preferences_window.glade.h:61
+#: ../data/glade/preferences_window.glade.h:64
msgid "Print time:"
msgstr "Zeit anzeigen:"
-#: ../data/glade/preferences_window.glade.h:62
+#: ../data/glade/preferences_window.glade.h:65
msgid "Save _position and size for roster and chat windows"
msgstr "Speichere _Position und Größe der Kontaktliste und Chatfenster"
-#: ../data/glade/preferences_window.glade.h:63
+#: ../data/glade/preferences_window.glade.h:66
msgid "Show only in _roster"
msgstr "Nur in der _Kontaktliste anzeigen"
-#: ../data/glade/preferences_window.glade.h:64
+#: ../data/glade/preferences_window.glade.h:67
msgid "Sign _in"
msgstr "_anmelden"
-#: ../data/glade/preferences_window.glade.h:65
+#: ../data/glade/preferences_window.glade.h:68
msgid "Sign _out"
msgstr "a_bmelden"
-#: ../data/glade/preferences_window.glade.h:66
+#: ../data/glade/preferences_window.glade.h:69
msgid "Status"
msgstr "Status"
-#: ../data/glade/preferences_window.glade.h:67
+#: ../data/glade/preferences_window.glade.h:70
msgid "T_heme:"
msgstr "T_hema:"
-#: ../data/glade/preferences_window.glade.h:68
+#: ../data/glade/preferences_window.glade.h:71
msgid "The auto away status message"
msgstr "Automatische Statusnachricht für Abwesend"
-#: ../data/glade/preferences_window.glade.h:69
+#: ../data/glade/preferences_window.glade.h:72
msgid "The auto not available status message"
msgstr "Automatische Statusnachricht für Nicht verfügbar"
-#: ../data/glade/preferences_window.glade.h:70
+#: ../data/glade/preferences_window.glade.h:73
msgid "Use _transports iconsets"
msgstr "_Transport-Symbole verwenden"
-#: ../data/glade/preferences_window.glade.h:71
+#: ../data/glade/preferences_window.glade.h:74
msgid "Use system _default"
-msgstr ""
+msgstr "Benutze System-_Voreinstellung"
-#: ../data/glade/preferences_window.glade.h:72
+#: ../data/glade/preferences_window.glade.h:75
msgid "Use t_rayicon (aka. notification area icon)"
msgstr "Verwende _Trayicon (Benachrichtigungs-Icon)"
-#: ../data/glade/preferences_window.glade.h:73
+#: ../data/glade/preferences_window.glade.h:76
msgid ""
"When a new event (message, file transfer request etc..) is received, the "
"following methods may be used to inform you about it. Please note that "
@@ -1525,149 +1526,153 @@ msgstr ""
"wenn Sie eine Nachricht von einem Kontakt erhalten, mit dem Sie nicht "
"bereits chatten"
-#: ../data/glade/preferences_window.glade.h:74
+#: ../data/glade/preferences_window.glade.h:77
msgid "When new event is received"
msgstr "Wenn neue Nachricht empfangen wird"
-#: ../data/glade/preferences_window.glade.h:75
-#, fuzzy
+#: ../data/glade/preferences_window.glade.h:78
msgid "_Advanced Notifications Control..."
-msgstr "Erweiterter Konfigurations-Editor"
+msgstr "_Erweiterter Konfigurations-Editor"
-#: ../data/glade/preferences_window.glade.h:76
+#: ../data/glade/preferences_window.glade.h:79
msgid "_After time:"
msgstr "_Nach der Zeit:"
-#: ../data/glade/preferences_window.glade.h:77
+#: ../data/glade/preferences_window.glade.h:80
msgid "_Before time:"
msgstr "_Vor der Zeit:"
-#: ../data/glade/preferences_window.glade.h:78
+#: ../data/glade/preferences_window.glade.h:81
msgid "_Browser:"
msgstr "_Browser:"
-#: ../data/glade/preferences_window.glade.h:79
+#: ../data/glade/preferences_window.glade.h:82
msgid "_File manager:"
msgstr "_Dateimanager:"
-#: ../data/glade/preferences_window.glade.h:80
+#: ../data/glade/preferences_window.glade.h:83
msgid "_Font:"
msgstr "_Schriftart:"
-#: ../data/glade/preferences_window.glade.h:81
+#: ../data/glade/preferences_window.glade.h:84
msgid "_Highlight misspelled words"
msgstr "Falsch geschriebene Wörter _hervorheben"
-#: ../data/glade/preferences_window.glade.h:82
+#: ../data/glade/preferences_window.glade.h:85
msgid "_Ignore events from contacts not in the roster"
msgstr "Ereignisse von Kontakten, die nicht in der Liste sind, _ignorieren"
-#: ../data/glade/preferences_window.glade.h:83
+#: ../data/glade/preferences_window.glade.h:86
msgid "_Incoming message:"
msgstr "_Eingehende Nachricht:"
-#: ../data/glade/preferences_window.glade.h:84
+#: ../data/glade/preferences_window.glade.h:87
msgid "_Log status changes of contacts"
msgstr "_Logge die Statusveränderungen von Kontakten"
-#: ../data/glade/preferences_window.glade.h:85
+#: ../data/glade/preferences_window.glade.h:88
msgid "_Mail client:"
msgstr "_Mail-Programm:"
-#: ../data/glade/preferences_window.glade.h:86
+#: ../data/glade/preferences_window.glade.h:89
msgid "_Never"
msgstr "_Nie"
-#: ../data/glade/preferences_window.glade.h:87
+#: ../data/glade/preferences_window.glade.h:90
msgid "_Notify me about it"
msgstr "Be_nachrichtigen"
-#: ../data/glade/preferences_window.glade.h:88
+#: ../data/glade/preferences_window.glade.h:91
msgid "_Open..."
-msgstr "Ö_ffnen..."
+msgstr "Ö_ffnen ..."
-#: ../data/glade/preferences_window.glade.h:89
+#: ../data/glade/preferences_window.glade.h:92
msgid "_Outgoing message:"
msgstr "_Ausgehende Nachricht:"
-#: ../data/glade/preferences_window.glade.h:90
+#: ../data/glade/preferences_window.glade.h:93
msgid "_Player:"
msgstr "_Player:"
-#: ../data/glade/preferences_window.glade.h:91
+#: ../data/glade/preferences_window.glade.h:94
msgid "_Pop it up"
msgstr "_Öffnen"
-#: ../data/glade/preferences_window.glade.h:92
+#: ../data/glade/preferences_window.glade.h:95
msgid "_Reset to Default Colors"
msgstr "Auf Standard-Farben zu_rücksetzen"
-#: ../data/glade/preferences_window.glade.h:93
+#: ../data/glade/preferences_window.glade.h:96
msgid "_Sort contacts by status"
msgstr "Kontakte nach Status _sortieren"
-#: ../data/glade/preferences_window.glade.h:94
+#: ../data/glade/preferences_window.glade.h:97
msgid "_Status message:"
msgstr "_Statusnachricht:"
-#: ../data/glade/preferences_window.glade.h:95
+#: ../data/glade/preferences_window.glade.h:98
msgid "_URL:"
msgstr "_URL:"
-#: ../data/glade/preferences_window.glade.h:96
+#: ../data/glade/preferences_window.glade.h:99
msgid "minutes"
msgstr "Minuten"
+#: ../data/glade/preferences_window.glade.h:100
+msgid "Επιλογή μιας γραμματοσειράς"
+msgstr ""
+
+#: ../data/glade/preferences_window.glade.h:101
+msgid "Επιλογή χρώματος"
+msgstr ""
+
#: ../data/glade/privacy_list_edit_window.glade.h:1
msgid "<b>Add / Edit a rule</b>"
-msgstr ""
+msgstr "<b>Hinzufügen / Ändern einer Regel</b>"
#: ../data/glade/privacy_list_edit_window.glade.h:2
-#, fuzzy
msgid "<b>List of rules</b>"
-msgstr "<b>Format einer Zeile</b>"
+msgstr "<b>Liste aller Regeln</b>"
#: ../data/glade/privacy_list_edit_window.glade.h:3
msgid "<i>Privacy List</i>"
msgstr ""
-#: ../data/glade/privacy_list_edit_window.glade.h:5 ../src/config.py:2281
-msgid "All"
-msgstr ""
+#: ../data/glade/privacy_list_edit_window.glade.h:4
+msgid "Active for this session"
+msgstr "Aktiviert für diese Sitzung"
-#: ../data/glade/privacy_list_edit_window.glade.h:6
-msgid "Allow"
-msgstr ""
+#: ../data/glade/privacy_list_edit_window.glade.h:5
+msgid "Active on each startup"
+msgstr "Bei jedem Programmstart aktiv"
+
+#: ../data/glade/privacy_list_edit_window.glade.h:6 ../src/config.py:2350
+msgid "All"
+msgstr "Alle"
#: ../data/glade/privacy_list_edit_window.glade.h:7
-#, fuzzy
-msgid "Default"
-msgstr "Löschen"
+msgid "Allow"
+msgstr "Erlauben"
#: ../data/glade/privacy_list_edit_window.glade.h:9
-#, fuzzy
msgid "JabberID"
msgstr "Jabber-ID:"
#: ../data/glade/privacy_list_edit_window.glade.h:10
-#, fuzzy
msgid "Order:"
-msgstr "Server:"
+msgstr "Reihenfolge:"
-#: ../data/glade/privacy_list_edit_window.glade.h:11 ../src/dialogs.py:1626
-#, fuzzy
+#: ../data/glade/privacy_list_edit_window.glade.h:11 ../src/dialogs.py:1761
msgid "Privacy List"
-msgstr "Sperrliste"
+msgstr "Privatliste"
#: ../data/glade/privacy_list_edit_window.glade.h:12
-#, fuzzy
msgid "all by subscription"
-msgstr "Abonnement"
+msgstr "alle nach Anmeldung"
#: ../data/glade/privacy_list_edit_window.glade.h:13
-#, fuzzy
msgid "all in the group"
-msgstr "In der Gruppe"
+msgstr "Alle in der Gruppe"
#: ../data/glade/privacy_list_edit_window.glade.h:14
msgid ""
@@ -1676,33 +1681,34 @@ msgid ""
"from\n"
"to"
msgstr ""
+"keine\n"
+"beide\n"
+"von\n"
+"an"
#: ../data/glade/privacy_list_edit_window.glade.h:18
-#, fuzzy
msgid "to send me messages"
-msgstr "Nachricht senden"
+msgstr "um mir Nachrichten zu senden"
#: ../data/glade/privacy_list_edit_window.glade.h:19
msgid "to send me queries"
msgstr ""
#: ../data/glade/privacy_list_edit_window.glade.h:20
-#, fuzzy
msgid "to send me status"
-msgstr "Darum bitten, seinen/ihren Status zu sehen"
+msgstr "um mir den Status zu senden"
#: ../data/glade/privacy_list_edit_window.glade.h:21
-#, fuzzy
msgid "to view my status"
-msgstr "Erlaube ihm/ihr meinen Status zu sehen"
+msgstr "um meinen Status zu sehen"
#: ../data/glade/privacy_lists_first_window.glade.h:1
msgid "Create your own Privacy Lists"
-msgstr ""
+msgstr "Erstelle eigene Privatliste"
#: ../data/glade/privacy_lists_first_window.glade.h:2
msgid "Server-based Privacy Lists"
-msgstr ""
+msgstr "Server-basierte Privatliste"
#: ../data/glade/remove_account_window.glade.h:1
msgid "<b>What do you want to do?</b>"
@@ -1717,9 +1723,8 @@ msgid "Remove account from Gajim and from _server"
msgstr "Konto _entfernen (in Gajim und auf dem Server)"
#: ../data/glade/roster_contact_context_menu.glade.h:1
-#, fuzzy
msgid "A_sk to see his/her status"
-msgstr "Darum bitten, seinen/ihren Status zu sehen"
+msgstr "Darum bitten, seinen/ihren _Status zu sehen"
#: ../data/glade/roster_contact_context_menu.glade.h:2
msgid "Add Special _Notification"
@@ -1730,39 +1735,43 @@ msgid "Assign Open_PGP Key"
msgstr "Open_PGP-Schlüssel zuweisen"
#: ../data/glade/roster_contact_context_menu.glade.h:4
+#: ../src/roster_window.py:1619
msgid "Edit _Groups"
msgstr "_Gruppen bearbeiten"
#: ../data/glade/roster_contact_context_menu.glade.h:5
+#: ../src/roster_window.py:1577
+msgid "In_vite to"
+msgstr "Einladen zu"
+
+#: ../data/glade/roster_contact_context_menu.glade.h:6
#: ../data/glade/systray_context_menu.glade.h:1
msgid "Send Single _Message"
msgstr "Einzelne Nachricht Senden"
-#: ../data/glade/roster_contact_context_menu.glade.h:7
+#: ../data/glade/roster_contact_context_menu.glade.h:8
msgid "Start _Chat"
msgstr "_Chat starten"
-#: ../data/glade/roster_contact_context_menu.glade.h:9
-#, fuzzy
+#: ../data/glade/roster_contact_context_menu.glade.h:10
msgid "_Allow him/her to see my status"
-msgstr "Erlaube ihm/ihr meinen Status zu sehen"
+msgstr "Er_laube ihm/ihr, meinen Status zu sehen"
-#: ../data/glade/roster_contact_context_menu.glade.h:10
-#, fuzzy
+#: ../data/glade/roster_contact_context_menu.glade.h:11
msgid "_Forbid him/her to see my status"
-msgstr "Verbiete ihm/ihr meinen Status zu sehen"
+msgstr "_Verbiete ihm/ihr, meinen Status zu sehen"
-#: ../data/glade/roster_contact_context_menu.glade.h:12
-#: ../src/roster_window.py:1482
+#: ../data/glade/roster_contact_context_menu.glade.h:13
+#: ../src/roster_window.py:1571 ../src/roster_window.py:1717
msgid "_Remove from Roster"
msgstr "Entfernen von _Kontaktliste"
-#: ../data/glade/roster_contact_context_menu.glade.h:13
-#: ../src/roster_window.py:1470
+#: ../data/glade/roster_contact_context_menu.glade.h:14
+#: ../src/roster_window.py:1705
msgid "_Rename"
msgstr "_Umbenennen"
-#: ../data/glade/roster_contact_context_menu.glade.h:14
+#: ../data/glade/roster_contact_context_menu.glade.h:15
msgid "_Subscription"
msgstr "Abonnement"
@@ -1802,8 +1811,8 @@ msgstr "In_halte"
msgid "_Discover Services"
msgstr "_Dienste durchsuchen"
-#: ../data/glade/roster_window.glade.h:13 ../src/disco.py:1252
-#: ../src/roster_window.py:1462
+#: ../data/glade/roster_window.glade.h:13 ../src/disco.py:1255
+#: ../src/roster_window.py:1697
msgid "_Edit"
msgstr "_Ändern"
@@ -1934,152 +1943,142 @@ msgstr "Über"
msgid "Address"
msgstr "Adresse"
-#: ../data/glade/vcard_information_window.glade.h:4
+#. Given Name
+#: ../data/glade/vcard_information_window.glade.h:5
msgid "Ask:"
msgstr "Frage:"
-#: ../data/glade/vcard_information_window.glade.h:5
+#: ../data/glade/vcard_information_window.glade.h:6
msgid "Birthday:"
msgstr "Geburtstag:"
-#: ../data/glade/vcard_information_window.glade.h:6
+#: ../data/glade/vcard_information_window.glade.h:7
msgid "City:"
msgstr "Stadt:"
-#: ../data/glade/vcard_information_window.glade.h:7
+#: ../data/glade/vcard_information_window.glade.h:8
msgid "Client:"
msgstr "Client:"
-#: ../data/glade/vcard_information_window.glade.h:8
+#: ../data/glade/vcard_information_window.glade.h:9
msgid "Company:"
msgstr "Firma:"
-#: ../data/glade/vcard_information_window.glade.h:9
-msgid "Contact Information"
-msgstr "Kontakt-Information"
-
#: ../data/glade/vcard_information_window.glade.h:10
+msgid "Contact"
+msgstr "Kontakt"
+
+#: ../data/glade/vcard_information_window.glade.h:11
msgid "Country:"
msgstr "Land:"
-#: ../data/glade/vcard_information_window.glade.h:11
+#: ../data/glade/vcard_information_window.glade.h:12
msgid "Department:"
msgstr "Abteilung:"
-#: ../data/glade/vcard_information_window.glade.h:12
+#: ../data/glade/vcard_information_window.glade.h:13
msgid "E-Mail:"
msgstr "E-Mail:"
-#: ../data/glade/vcard_information_window.glade.h:13
+#: ../data/glade/vcard_information_window.glade.h:14
msgid "Extra Address:"
msgstr "Zusatz-Adresse:"
#. Family Name
-#: ../data/glade/vcard_information_window.glade.h:15
+#: ../data/glade/vcard_information_window.glade.h:16
msgid "Family:"
msgstr "Nachname:"
-#: ../data/glade/vcard_information_window.glade.h:16
-msgid "Format: YYYY-MM-DD"
-msgstr "Format: JJJJ-MM-TT"
-
#. Given Name
-#: ../data/glade/vcard_information_window.glade.h:19
+#: ../data/glade/vcard_information_window.glade.h:18
msgid "Given:"
msgstr "Vorname:"
-#: ../data/glade/vcard_information_window.glade.h:20
+#: ../data/glade/vcard_information_window.glade.h:19
msgid "Homepage:"
msgstr "Homepage:"
-#: ../data/glade/vcard_information_window.glade.h:21
-msgid "Jabber"
-msgstr "Jabber"
-
-#: ../data/glade/vcard_information_window.glade.h:22
+#: ../data/glade/vcard_information_window.glade.h:20
msgid "Jabber ID:"
msgstr "Jabber-ID:"
-#: ../data/glade/vcard_information_window.glade.h:23
-msgid "Location"
-msgstr "Ort"
-
#. Middle Name
-#: ../data/glade/vcard_information_window.glade.h:25
+#: ../data/glade/vcard_information_window.glade.h:22
msgid "Middle:"
msgstr "Mittelname"
-#: ../data/glade/vcard_information_window.glade.h:26
+#: ../data/glade/vcard_information_window.glade.h:23
msgid "More"
msgstr "Mehr"
-#: ../data/glade/vcard_information_window.glade.h:29
+#: ../data/glade/vcard_information_window.glade.h:26
msgid "OS:"
msgstr "BS:"
-#: ../data/glade/vcard_information_window.glade.h:30
+#: ../data/glade/vcard_information_window.glade.h:27
+msgid "Personal Info"
+msgstr "Persönliche Details"
+
+#: ../data/glade/vcard_information_window.glade.h:28
msgid "Phone No.:"
msgstr "Telefon-Nr.:"
-#: ../data/glade/vcard_information_window.glade.h:31
+#: ../data/glade/vcard_information_window.glade.h:29
msgid "Position:"
msgstr "Position:"
-#: ../data/glade/vcard_information_window.glade.h:32
+#: ../data/glade/vcard_information_window.glade.h:30
msgid "Postal Code:"
msgstr "Postleitzahl:"
#. Prefix in Name
-#: ../data/glade/vcard_information_window.glade.h:34
+#: ../data/glade/vcard_information_window.glade.h:32
msgid "Prefix:"
msgstr "Präfix"
-#: ../data/glade/vcard_information_window.glade.h:35
+#: ../data/glade/vcard_information_window.glade.h:33
msgid "Resource:"
msgstr "Ressource:"
-#: ../data/glade/vcard_information_window.glade.h:36
+#: ../data/glade/vcard_information_window.glade.h:34
msgid "Role:"
msgstr "Rolle:"
-#: ../data/glade/vcard_information_window.glade.h:37
-msgid "Set _Avatar"
-msgstr "_Avatar wählen"
-
-#: ../data/glade/vcard_information_window.glade.h:38
+#: ../data/glade/vcard_information_window.glade.h:35
msgid "State:"
msgstr "Staat:"
-#: ../data/glade/vcard_information_window.glade.h:39
+#: ../data/glade/vcard_information_window.glade.h:36
msgid "Status:"
msgstr "Status:"
-#: ../data/glade/vcard_information_window.glade.h:40
+#: ../data/glade/vcard_information_window.glade.h:37
msgid "Street:"
msgstr "Straße:"
-#: ../data/glade/vcard_information_window.glade.h:41
+#. Family Name
+#: ../data/glade/vcard_information_window.glade.h:39
msgid "Subscription:"
msgstr "Abonnement:"
#. Suffix in Name
-#: ../data/glade/vcard_information_window.glade.h:43
+#: ../data/glade/vcard_information_window.glade.h:41
msgid "Suffix:"
msgstr "Suffix:"
-#: ../data/glade/vcard_information_window.glade.h:44
+#: ../data/glade/vcard_information_window.glade.h:42
msgid "Work"
msgstr "Arbeit"
-#: ../data/glade/vcard_information_window.glade.h:45
+#: ../data/glade/vcard_information_window.glade.h:43
msgid "_Log conversation history"
msgstr "Unterhaltungs-Ver_lauf"
-#: ../data/glade/vcard_information_window.glade.h:46
+#: ../data/glade/vcard_information_window.glade.h:44
msgid "_Publish"
msgstr "_Veröffentlichen"
-#: ../data/glade/vcard_information_window.glade.h:47
+#: ../data/glade/vcard_information_window.glade.h:45
msgid "_Retrieve"
msgstr "Ab_rufen"
@@ -2114,30 +2113,123 @@ msgstr "_Nachricht"
msgid "_Presence"
msgstr "_Anwesenheit"
-#: ../src/advanced.py:65
+#: ../src/advanced.py:67
msgid "Preference Name"
msgstr "Einstellungsname"
-#: ../src/advanced.py:71
+#: ../src/advanced.py:73
msgid "Value"
msgstr "Wert"
-#: ../src/advanced.py:80
+#: ../src/advanced.py:82
msgid "Type"
msgstr "Typ"
#. we talk about option description in advanced configuration editor
-#: ../src/advanced.py:136
+#: ../src/advanced.py:138
msgid "(None)"
-msgstr "(Kein"
+msgstr "(Kein)"
#. we talk about password
-#: ../src/advanced.py:235
+#: ../src/advanced.py:237
msgid "Hidden"
msgstr "Versteckt"
+#. the next script, executed in the "po" directory,
+#. generates the following list.
+#. #!/bin/sh
+#. LANG=$(for i in *.po; do j=${i/.po/}; echo -n "_('"$j"')":" '"$j"', " ; done)
+#. echo "{_('en'):'en'",$LANG"}"
+#: ../src/chat_control.py:50
+msgid "English"
+msgstr "Englisch"
+
+#: ../src/chat_control.py:50
+msgid "Bulgarian"
+msgstr "Bulgarisch"
+
+#: ../src/chat_control.py:50
+msgid "Briton"
+msgstr "Briton"
+
+#: ../src/chat_control.py:50
+msgid "Czech"
+msgstr "Tschechisch"
+
+#: ../src/chat_control.py:50
+msgid "German"
+msgstr "Deutsch"
+
+#: ../src/chat_control.py:50
+msgid "Greek"
+msgstr "Griechisch"
+
+#: ../src/chat_control.py:50
+msgid "Esperanto"
+msgstr "Esperanto"
+
+#: ../src/chat_control.py:50
+msgid "Spanish"
+msgstr "Spanisch"
+
+#: ../src/chat_control.py:50
+msgid "Basc"
+msgstr "Baskisch"
+
+#: ../src/chat_control.py:50
+msgid "French"
+msgstr "Französisch"
+
+#: ../src/chat_control.py:50
+msgid "Croatian"
+msgstr "Kroatisch"
+
+#: ../src/chat_control.py:50
+msgid "Italian"
+msgstr "Italienisch"
+
+#: ../src/chat_control.py:50
+msgid "Norvegian b"
+msgstr "Norwegisch (Bokmal)"
+
+#: ../src/chat_control.py:50
+msgid "Dutch"
+msgstr "Niederländisch"
+
+#: ../src/chat_control.py:50
+msgid "Norvegian"
+msgstr "Norwegisch"
+
+#: ../src/chat_control.py:50
+msgid "Polish"
+msgstr "Polnisch"
+
+#: ../src/chat_control.py:50
+msgid "Portuguese"
+msgstr "Portugiesisch"
+
+#: ../src/chat_control.py:50
+msgid "Brazilian Portuguese"
+msgstr "Brasilianisch"
+
+#: ../src/chat_control.py:50
+msgid "Russian"
+msgstr "Russsich"
+
+#: ../src/chat_control.py:50
+msgid "Slovak"
+msgstr "Slovakisch"
+
+#: ../src/chat_control.py:50
+msgid "Swedish"
+msgstr "Schwedisch"
+
+#: ../src/chat_control.py:50
+msgid "Chinese (Ch)"
+msgstr "Chinesisch"
+
#. FIXME: add a ui for this use spell.set_language()
-#: ../src/chat_control.py:163 ../src/dialogs.py:1291
+#: ../src/chat_control.py:194 ../src/dialogs.py:1424
msgid ""
"If that is not your language for which you want to highlight misspelled "
"words, then please set your $LANG as appropriate. Eg. for French do export "
@@ -2153,53 +2245,62 @@ msgstr ""
"\n"
"Falschgeschriebene Wörter werden nicht hervorgehoben"
+#: ../src/chat_control.py:220
+msgid "Spelling language"
+msgstr ""
+
#. we are not connected
-#: ../src/chat_control.py:186 ../src/chat_control.py:391
+#: ../src/chat_control.py:249 ../src/chat_control.py:454
msgid "A connection is not available"
msgstr "Keine Verbindung verfügbar"
-#: ../src/chat_control.py:187 ../src/chat_control.py:392
+#: ../src/chat_control.py:250 ../src/chat_control.py:455
msgid "Your message can not be sent until you are connected."
msgstr "Ihre Nachricht kann erst gesendet werden, wenn Sie verbunden sind."
-#: ../src/chat_control.py:718
+#: ../src/chat_control.py:806
msgid "Chats"
msgstr "Chats"
+#: ../src/chat_control.py:994
+#, python-format
+msgid "%s from room %s"
+msgstr ""
+
#. we talk about a contact here
-#: ../src/chat_control.py:980
+#: ../src/chat_control.py:1080
#, python-format
msgid "%s has not broadcast an OpenPGP key, nor has one been assigned"
msgstr ""
"%s hat keinen OpenPGP-Schlüssel verbreitet und es wurde keiner zugewiesen"
-#: ../src/chat_control.py:1106
+#: ../src/chat_control.py:1206
msgid "Encryption enabled"
msgstr "Verschlüsselung aktiviert"
-#: ../src/chat_control.py:1111
+#: ../src/chat_control.py:1211
msgid "Encryption disabled"
msgstr "Verschlüsselung deaktiviert"
#. add_to_roster_menuitem
-#: ../src/chat_control.py:1239 ../src/conversation_textview.py:407
-#: ../src/dialogs.py:512 ../src/gajim.py:635 ../src/gajim.py:636
-#: ../src/gajim.py:955 ../src/roster_window.py:276
-#: ../src/roster_window.py:1335 ../src/roster_window.py:1645
-#: ../src/roster_window.py:1806 ../src/roster_window.py:1817
-#: ../src/roster_window.py:2123 ../src/roster_window.py:2179
-#: ../src/roster_window.py:2977 ../src/roster_window.py:2979
-#: ../src/common/helpers.py:39 ../src/common/helpers.py:241
+#: ../src/chat_control.py:1349 ../src/conversation_textview.py:475
+#: ../src/dialogs.py:604 ../src/gajim.py:657 ../src/gajim.py:658
+#: ../src/gajim.py:983 ../src/roster_window.py:286
+#: ../src/roster_window.py:1446 ../src/roster_window.py:1880
+#: ../src/roster_window.py:2081 ../src/roster_window.py:2092
+#: ../src/roster_window.py:2414 ../src/roster_window.py:2470
+#: ../src/roster_window.py:3275 ../src/roster_window.py:3277
+#: ../src/common/helpers.py:40 ../src/common/helpers.py:242
msgid "Not in Roster"
msgstr "Nicht in der Liste"
#. %s is being replaced in the code with JID
-#: ../src/chat_control.py:1383
+#: ../src/chat_control.py:1492
#, python-format
msgid "You just received a new message from \"%s\""
msgstr "Sie haben eine neue Nachricht von \"%s\""
-#: ../src/chat_control.py:1384
+#: ../src/chat_control.py:1493
msgid ""
"If you close this tab and you have history disabled, this message will be "
"lost."
@@ -2207,80 +2308,80 @@ msgstr ""
"Wenn sie das Fenster schließen und die History abgeschaltet haben, geht die "
"Nachricht verloren."
-#: ../src/config.py:120 ../src/config.py:511
+#: ../src/config.py:121 ../src/config.py:541
msgid "Disabled"
msgstr "Deaktiviert"
-#: ../src/config.py:199
+#: ../src/config.py:200
#, python-format
msgid "Every %s _minutes"
msgstr "Alle %s _Minuten"
-#: ../src/config.py:334
+#: ../src/config.py:335
msgid "Event"
msgstr "Ereignis"
-#: ../src/config.py:881
+#: ../src/config.py:940
msgid "status message title"
msgstr "Statusbetreff"
-#: ../src/config.py:881
+#: ../src/config.py:940
msgid "status message text"
msgstr "Statusnachricht"
-#: ../src/config.py:916
+#: ../src/config.py:975
msgid "First Message Received"
msgstr "Erste empfangene Nachricht"
-#: ../src/config.py:917
+#: ../src/config.py:976
msgid "Next Message Received"
msgstr "Nächste empfangene Nachricht"
-#: ../src/config.py:918
+#: ../src/config.py:977
msgid "Contact Connected"
msgstr "Kontakt verbunden"
-#: ../src/config.py:919
+#: ../src/config.py:978
msgid "Contact Disconnected"
msgstr "Kontakt nicht verbunden"
-#: ../src/config.py:920
+#: ../src/config.py:979
msgid "Message Sent"
msgstr "Nachricht gesendet"
-#: ../src/config.py:921
+#: ../src/config.py:980
msgid "Group Chat Message Highlight"
msgstr "Gruppenchat Nachrichten-Hervorhebung"
-#: ../src/config.py:922
+#: ../src/config.py:981
msgid "Group Chat Message Received"
msgstr "Gruppenchat-Nachricht empfangen"
-#: ../src/config.py:1112
+#: ../src/config.py:1171
msgid "OpenPGP is not usable in this computer"
msgstr "OpenPGP kann auf diesem Computer nicht genutzt werden"
-#: ../src/config.py:1154
+#: ../src/config.py:1213
msgid "You are currently connected to the server"
msgstr "Sie sind mit dem Server verbunden"
-#: ../src/config.py:1155
+#: ../src/config.py:1214
msgid "To change the account name, you must be disconnected."
msgstr "Verbindung muss beendet werden, um Kontonamen zu ändern."
-#: ../src/config.py:1158 ../src/config.py:1715
+#: ../src/config.py:1217 ../src/config.py:1780
msgid "Unread events"
msgstr "Ungelesene Ereignisse"
-#: ../src/config.py:1159
+#: ../src/config.py:1218
msgid "To change the account name, you must read all pending events."
msgstr "Um Kontonamen zu ändern, müssen Sie alle neunen Ereignisse lesen."
-#: ../src/config.py:1163
+#: ../src/config.py:1222
msgid "Account Name Already Used"
msgstr "Kontoname wird bereits verwendet"
-#: ../src/config.py:1164
+#: ../src/config.py:1223
msgid ""
"This name is already used by another of your accounts. Please choose another "
"name."
@@ -2288,149 +2389,157 @@ msgstr ""
"Dieser Name wird bereits für einen anderen Ihrer Accounts verwendet. Bitte "
"wählenSie einen anderen Namen."
-#: ../src/config.py:1168 ../src/config.py:1172
+#: ../src/config.py:1227 ../src/config.py:1231
msgid "Invalid account name"
msgstr "Ungültiger Kontoname"
-#: ../src/config.py:1169
+#: ../src/config.py:1228
msgid "Account name cannot be empty."
msgstr "Kontoname darf nicht leer sein."
-#: ../src/config.py:1173
+#: ../src/config.py:1232
msgid "Account name cannot contain spaces."
msgstr "Kontoname darf keine Leerzeichen enthalten."
-#: ../src/config.py:1181 ../src/config.py:1187 ../src/config.py:1196
-#: ../src/config.py:2662
+#: ../src/config.py:1240 ../src/config.py:1246 ../src/config.py:1255
+#: ../src/config.py:2731
msgid "Invalid Jabber ID"
msgstr "Ungültige Jabber ID"
-#: ../src/config.py:1188
+#: ../src/config.py:1247
msgid "A Jabber ID must be in the form \"user@servername\"."
msgstr "Jabber ID muss in der Form \"user@servername\" sein."
-#: ../src/config.py:1244
+#: ../src/config.py:1303
msgid "Invalid entry"
msgstr "Ungültiger Eintrag"
-#: ../src/config.py:1245
+#: ../src/config.py:1304
msgid "Custom port must be a port number."
msgstr "Proxy Port muss eine Portnummer sein."
-#: ../src/config.py:1366
+#: ../src/config.py:1424
msgid "Be right back."
msgstr "Bin gleich zurück."
-#: ../src/config.py:1376
+#: ../src/config.py:1434
msgid "Relogin now?"
msgstr "Jetzt neu einloggen?"
-#: ../src/config.py:1377
+#: ../src/config.py:1435
msgid "If you want all the changes to apply instantly, you must relogin."
msgstr ""
"Wenn die Änderungen sofort übernommen werden sollen, müssen Sie sich neu "
"einloggen."
-#: ../src/config.py:1403
+#: ../src/config.py:1461
msgid "No such account available"
msgstr "Account nicht verfügbar"
-#: ../src/config.py:1404
+#: ../src/config.py:1462
msgid "You must create your account before editing your personal information."
msgstr ""
"Sie müssen ein Konto erstellen bevor Sie die persönlichen Informationen "
"ändern können"
-#: ../src/config.py:1410 ../src/dialogs.py:925 ../src/dialogs.py:1099
-#: ../src/disco.py:410 ../src/vcard.py:457 ../src/vcard.py:490
+#: ../src/config.py:1468 ../src/dialogs.py:1051 ../src/dialogs.py:1229
+#: ../src/disco.py:411 ../src/vcard.py:478 ../src/vcard.py:511
msgid "You are not connected to the server"
msgstr "Sie sind nicht mit dem Server verbunden"
-#: ../src/config.py:1411
+#: ../src/config.py:1469
msgid "Without a connection, you can not edit your personal information."
msgstr ""
"Sie müssen angemeldet sein, um Ihre persönlichen Informationen zu bearbeiten"
-#: ../src/config.py:1435
+#: ../src/config.py:1473
+msgid "Your server doesn't support Vcard"
+msgstr "Ihr Server unterstützt vCard nicht"
+
+#: ../src/config.py:1474
+msgid "Your server can't save your personal information."
+msgstr "Ihr Server kann keine persönlichen Informationen speichern."
+
+#: ../src/config.py:1498
msgid "Failed to get secret keys"
msgstr "Holen der geheimen Schlüssel fehlgeschlagen"
-#: ../src/config.py:1436
+#: ../src/config.py:1499
msgid "There was a problem retrieving your OpenPGP secret keys."
-msgstr "Es gab ein Problem beim Holen ihres geheimen OpenPGP Schlüssels."
+msgstr "Es gab ein Problem beim Holen ihres geheimen OpenPGP-Schlüssels."
-#: ../src/config.py:1439
+#: ../src/config.py:1502
msgid "OpenPGP Key Selection"
msgstr "OpenPGP Schlüssel-Auswahl"
-#: ../src/config.py:1440
+#: ../src/config.py:1503
msgid "Choose your OpenPGP key"
-msgstr "Wählen Sie ihren OpenPGP Schlüssel"
+msgstr "Wählen Sie Ihren OpenPGP Schlüssel"
#. Name column
-#: ../src/config.py:1667 ../src/disco.py:727 ../src/disco.py:1466
+#: ../src/config.py:1732 ../src/disco.py:727 ../src/disco.py:1469
#: ../src/history_window.py:77
msgid "Name"
msgstr "Name"
-#: ../src/config.py:1670
+#: ../src/config.py:1735
msgid "Server"
msgstr "Server"
-#: ../src/config.py:1716
+#: ../src/config.py:1781
msgid "Read all pending events before removing this account."
msgstr "Alle ungelesenen Ereignisse lesen, bevor der Account entfernt wird."
-#: ../src/config.py:1911
+#: ../src/config.py:1978
#, python-format
msgid "Edit %s"
msgstr "%s ändern"
-#: ../src/config.py:1913
+#: ../src/config.py:1980
#, python-format
msgid "Register to %s"
msgstr "Auf %s registrieren"
-#: ../src/config.py:1984
+#: ../src/config.py:2051
msgid "Ban List"
msgstr "Sperrliste"
-#: ../src/config.py:1985
+#: ../src/config.py:2052
msgid "Member List"
msgstr "Mitgliedsliste"
-#: ../src/config.py:1986
+#: ../src/config.py:2053
msgid "Owner List"
msgstr "Listenbesitzer"
-#: ../src/config.py:1987
+#: ../src/config.py:2054
msgid "Administrator List"
msgstr "Administratorliste"
#. Address column
#. holds JID (who said this)
-#: ../src/config.py:2020 ../src/disco.py:734 ../src/history_manager.py:151
+#: ../src/config.py:2087 ../src/disco.py:734 ../src/history_manager.py:151
msgid "JID"
msgstr "JID"
-#: ../src/config.py:2028
+#: ../src/config.py:2095
msgid "Reason"
msgstr "Grund"
-#: ../src/config.py:2033
+#: ../src/config.py:2100
msgid "Nick"
msgstr "Spitzname"
-#: ../src/config.py:2037
+#: ../src/config.py:2104
msgid "Role"
msgstr "Rolle"
-#: ../src/config.py:2058
+#: ../src/config.py:2125
msgid "Banning..."
-msgstr "Verbanne..."
+msgstr "Verbanne ..."
#. You can move '\n' before user@domain if that line is TOO BIG
-#: ../src/config.py:2060
+#: ../src/config.py:2127
msgid ""
"<b>Whom do you want to ban?</b>\n"
"\n"
@@ -2438,11 +2547,11 @@ msgstr ""
"<b>Wen möchten Sie verbannen?</b>\n"
"\n"
-#: ../src/config.py:2062
+#: ../src/config.py:2129
msgid "Adding Member..."
-msgstr "Füge Mitglied hinzu..."
+msgstr "Füge Mitglied hinzu ..."
-#: ../src/config.py:2063
+#: ../src/config.py:2130
msgid ""
"<b>Whom do you want to make a member?</b>\n"
"\n"
@@ -2450,11 +2559,11 @@ msgstr ""
"<b>Wen möchten Sie zum Mitglied machen?</b>\n"
"\n"
-#: ../src/config.py:2065
+#: ../src/config.py:2132
msgid "Adding Owner..."
-msgstr "Füge Besitzer hinzu..."
+msgstr "Füge Besitzer hinzu ..."
-#: ../src/config.py:2066
+#: ../src/config.py:2133
msgid ""
"<b>Whom do you want to make a owner?</b>\n"
"\n"
@@ -2462,11 +2571,11 @@ msgstr ""
"<b>Wen möchten Sie zum Besitzer machen?</b>\n"
"\n"
-#: ../src/config.py:2068
+#: ../src/config.py:2135
msgid "Adding Administrator..."
-msgstr "Füge Administrator hinzu..."
+msgstr "Füge Administrator hinzu ..."
-#: ../src/config.py:2069
+#: ../src/config.py:2136
msgid ""
"<b>Whom do you want to make an administrator?</b>\n"
"\n"
@@ -2474,7 +2583,7 @@ msgstr ""
"<b>Wen möchten Sie zum Administrator machen?</b>\n"
"\n"
-#: ../src/config.py:2070
+#: ../src/config.py:2137
msgid ""
"Can be one of the following:\n"
"1. user@domain/resource (only that resource matches).\n"
@@ -2489,88 +2598,88 @@ msgstr ""
"3 domain (die Domain selbst trifft zu, als auch jeder benutzer@domain,\n"
"jede domain/resource oder Adresse, die eine Subdomain enthält."
-#: ../src/config.py:2166
+#: ../src/config.py:2234
#, python-format
msgid "Removing %s account"
msgstr "Entferne Konto %s"
-#: ../src/config.py:2183 ../src/roster_window.py:1857
+#: ../src/config.py:2251 ../src/roster_window.py:2145
msgid "Password Required"
msgstr "Passwort benötigt"
-#: ../src/config.py:2184 ../src/roster_window.py:1858
+#: ../src/config.py:2252 ../src/roster_window.py:2146
#, python-format
msgid "Enter your password for account %s"
msgstr "Geben Sie ihr Passwort für %s ein"
-#: ../src/config.py:2185 ../src/roster_window.py:1859
+#: ../src/config.py:2253 ../src/roster_window.py:2147
msgid "Save password"
msgstr "Passwort speichern"
-#: ../src/config.py:2198
+#: ../src/config.py:2266
#, python-format
msgid "Account \"%s\" is connected to the server"
msgstr "Konto \"%s\" ist mit Server verbunden"
-#: ../src/config.py:2199
+#: ../src/config.py:2267
msgid "If you remove it, the connection will be lost."
msgstr "Wenn Sie es entfernen, wird die Verbindung beendet."
-#: ../src/config.py:2282
+#: ../src/config.py:2351
msgid "Enter and leave only"
-msgstr ""
+msgstr "Nur betreten und verlassen"
-#: ../src/config.py:2352
+#: ../src/config.py:2421
msgid "New Room"
msgstr "Neuer Raum"
-#: ../src/config.py:2383
+#: ../src/config.py:2452
msgid "This bookmark has invalid data"
msgstr "Dieser Bookmark hat ungültige Daten"
-#: ../src/config.py:2384
+#: ../src/config.py:2453
msgid ""
"Please be sure to fill out server and room fields or remove this bookmark."
msgstr "Bitte Serverfeld und Raumfeld ausfüllen oder Bookmark löschen."
-#: ../src/config.py:2638
+#: ../src/config.py:2707
msgid "Invalid username"
msgstr "Ungültiger Benutzername"
-#: ../src/config.py:2639
+#: ../src/config.py:2708
msgid "You must provide a username to configure this account."
msgstr ""
"Sie müssen einen Benutzernamen angeben, um diesen Account zu konfigurieren."
-#: ../src/config.py:2648 ../src/dialogs.py:1118
+#: ../src/config.py:2717 ../src/dialogs.py:1248
msgid "Invalid password"
msgstr "Ungültiges Passwort"
-#: ../src/config.py:2649
+#: ../src/config.py:2718
msgid "You must enter a password for the new account."
msgstr "Sie müssen ein Passwort für das neue Konto eingeben."
-#: ../src/config.py:2653 ../src/dialogs.py:1123
+#: ../src/config.py:2722 ../src/dialogs.py:1253
msgid "Passwords do not match"
msgstr "Passwörter stimmen nicht überein"
-#: ../src/config.py:2654 ../src/dialogs.py:1124
+#: ../src/config.py:2723 ../src/dialogs.py:1254
msgid "The passwords typed in both fields must be identical."
msgstr "Die Passwörter in beiden Feldern müssen identisch sein."
-#: ../src/config.py:2673
+#: ../src/config.py:2742
msgid "Duplicate Jabber ID"
msgstr "Doppelte Jabber ID"
-#: ../src/config.py:2674
+#: ../src/config.py:2743
msgid "This account is already configured in Gajim."
msgstr "Dieser Kontakt bwurde in Gajim bereits konfiguriert."
-#: ../src/config.py:2691
+#: ../src/config.py:2760
msgid "Account has been added successfully"
msgstr "Account wurde erfolgreich hinzugefügt"
-#: ../src/config.py:2692 ../src/config.py:2725
+#: ../src/config.py:2761 ../src/config.py:2794
msgid ""
"You can set advanced account options by pressing Advanced button, or later "
"by clicking in Accounts menuitem under Edit menu from the main window."
@@ -2579,23 +2688,23 @@ msgstr ""
"oder durchklicken des Konto-Menüpunktes im Bearbeiten-Menü des Hauptfensters "
"erreichen."
-#: ../src/config.py:2724
+#: ../src/config.py:2793
msgid "Your new account has been created successfully"
msgstr "Ihr neues Konto wurde erfolgreich erstellt"
-#: ../src/config.py:2740
+#: ../src/config.py:2809
msgid "An error occured during account creation"
msgstr "Während der Konto-Erstellung ist ein Fehler aufgetreten"
-#: ../src/config.py:2797
+#: ../src/config.py:2866
msgid "Account name is in use"
msgstr "Kontoname ist schon vergeben"
-#: ../src/config.py:2798
+#: ../src/config.py:2867
msgid "You already have an account using this name."
msgstr "Sie haben bereits ein Konto mit diesem Namen."
-#: ../src/conversation_textview.py:205
+#: ../src/conversation_textview.py:272
msgid ""
"Text below this line is what has been said since the last time you paid "
"attention to this group chat"
@@ -2603,48 +2712,48 @@ msgstr ""
"Text unterhalb dieser Linie stellt dar, was seit ihrem letzten Besuch in "
"diesem Gruppenchat gesagt wurde"
-#: ../src/conversation_textview.py:263
+#: ../src/conversation_textview.py:331
#, python-format
msgid "Actions for \"%s\""
msgstr "Aktionen für \"%s\""
-#: ../src/conversation_textview.py:275
+#: ../src/conversation_textview.py:343
msgid "Read _Wikipedia Article"
msgstr "_Wikipedia-Artikel lesen"
-#: ../src/conversation_textview.py:280
+#: ../src/conversation_textview.py:348
msgid "Look it up in _Dictionary"
msgstr "Im Wörterbuch _suchen"
#. we must have %s in the url if not WIKTIONARY
-#: ../src/conversation_textview.py:296
+#: ../src/conversation_textview.py:364
#, python-format
msgid "Dictionary URL is missing an \"%s\" and it is not WIKTIONARY"
msgstr "In Wörterbuch URL fehlt ein \"%s\" und ist nicht Wiktionary"
#. we must have %s in the url
-#: ../src/conversation_textview.py:308
+#: ../src/conversation_textview.py:376
#, python-format
msgid "Web Search URL is missing an \"%s\""
msgstr "In Websuche URL fehlt ein \"%s\""
-#: ../src/conversation_textview.py:311
+#: ../src/conversation_textview.py:379
msgid "Web _Search for it"
msgstr "Im _Internet suchen"
-#: ../src/conversation_textview.py:607
+#: ../src/conversation_textview.py:675
msgid "Yesterday"
msgstr "Gestern"
#. the number is >= 2
#. %i is day in year (1-365), %d (1-31) we want %i
-#: ../src/conversation_textview.py:611
+#: ../src/conversation_textview.py:679
#, python-format
msgid "%i days ago"
msgstr "Vor %i Tagen"
#. if we have subject, show it too!
-#: ../src/conversation_textview.py:686
+#: ../src/conversation_textview.py:755
#, python-format
msgid "Subject: %s\n"
msgstr "Thema: %s\n"
@@ -2658,381 +2767,419 @@ msgstr "Auf diesem Computer fehlen die Python Bibliotheken für D-Bus"
msgid "D-Bus capabilities of Gajim cannot be used"
msgstr "Gajims D-BUS-Möglichkeiten können nicht genutzt werden"
-#: ../src/dialogs.py:55
+#: ../src/dialogs.py:57
#, python-format
-msgid "Contact's name: <i>%s</i>"
+msgid "Contact name: <i>%s</i>"
msgstr "Kontaktname: <i>%s</i>"
-#: ../src/dialogs.py:57
+#: ../src/dialogs.py:59
#, python-format
msgid "JID: <i>%s</i>"
msgstr "JID: <i>%s</i> "
-#. Group name
-#. In group boolean
-#: ../src/dialogs.py:173
+#: ../src/dialogs.py:204
msgid "Group"
msgstr "Gruppe"
-#: ../src/dialogs.py:180
+#: ../src/dialogs.py:211
msgid "In the group"
msgstr "In der Gruppe"
-#: ../src/dialogs.py:230
+#: ../src/dialogs.py:261
msgid "KeyID"
msgstr "Schlüssel-ID"
-#: ../src/dialogs.py:233
+#: ../src/dialogs.py:264
msgid "Contact name"
msgstr "Name des Kontakts"
-#: ../src/dialogs.py:266
+#: ../src/dialogs.py:298
#, python-format
msgid "%s Status Message"
msgstr "%s Status-Nachricht"
-#: ../src/dialogs.py:268
+#: ../src/dialogs.py:300
msgid "Status Message"
msgstr "Status-Nachricht"
-#: ../src/dialogs.py:343
+#: ../src/dialogs.py:375
msgid "Save as Preset Status Message"
msgstr "Als derzeitige Statusnachricht speichern"
-#: ../src/dialogs.py:344
+#: ../src/dialogs.py:376
msgid "Please type a name for this status message"
msgstr "Bitte geben Sie einen Namen für diese Statusnachricht ein:"
-#: ../src/dialogs.py:391
+#: ../src/dialogs.py:396
+msgid "Jabber ID"
+msgstr "Jabber-ID"
+
+#: ../src/dialogs.py:397
+msgid "AIM Address"
+msgstr "AIM-Adresse"
+
+#: ../src/dialogs.py:398
+msgid "GG Number"
+msgstr "GG Nummer"
+
+#: ../src/dialogs.py:399
+msgid "ICQ Number"
+msgstr "ICQ-Nummer"
+
+#: ../src/dialogs.py:400
+msgid "MSN Address"
+msgstr "MSN-Adresse"
+
+#: ../src/dialogs.py:401
+msgid "Yahoo! Address"
+msgstr "Yahoo!-Adresse"
+
+#: ../src/dialogs.py:436
#, python-format
msgid "Please fill in the data of the contact you want to add in account %s"
msgstr ""
"Bitte füllen Sie die Daten aus für den Kontakt, den Sie dem Konto %s "
"hinzufügen wollen"
-#: ../src/dialogs.py:393
+#: ../src/dialogs.py:438
msgid "Please fill in the data of the contact you want to add"
msgstr "Bitte geben sie die Daten des neuen Kontakts ein"
-#: ../src/dialogs.py:403 ../src/disco.py:109 ../src/disco.py:110
-#: ../src/disco.py:1249 ../src/roster_window.py:207
-#: ../src/roster_window.py:273 ../src/roster_window.py:309
-#: ../src/roster_window.py:329 ../src/roster_window.py:353
-#: ../src/roster_window.py:2973 ../src/roster_window.py:2975
-#: ../src/common/helpers.py:39
+#: ../src/dialogs.py:446 ../src/disco.py:109 ../src/disco.py:110
+#: ../src/disco.py:1252 ../src/roster_window.py:217
+#: ../src/roster_window.py:283 ../src/roster_window.py:319
+#: ../src/roster_window.py:371 ../src/roster_window.py:398
+#: ../src/roster_window.py:3271 ../src/roster_window.py:3273
+#: ../src/common/helpers.py:40
msgid "Transports"
msgstr "Transports"
-#: ../src/dialogs.py:493 ../src/dialogs.py:499
+#: ../src/dialogs.py:584 ../src/dialogs.py:590
msgid "Invalid User ID"
msgstr "Ungültige Benutzer ID"
-#: ../src/dialogs.py:500
+#: ../src/dialogs.py:591
msgid "The user ID must not contain a resource."
msgstr "Die Benutzer-ID darf keine resource enthalten."
-#: ../src/dialogs.py:513
+#: ../src/dialogs.py:605
msgid "Contact already in roster"
msgstr "Kontakt bereits im Roster"
-#: ../src/dialogs.py:514
+#: ../src/dialogs.py:606
msgid "This contact is already listed in your roster."
msgstr "Der Kontakt befindet sich bereit in Ihrem Roster."
-#: ../src/dialogs.py:576
+#: ../src/dialogs.py:638
+msgid "User ID"
+msgstr "Benutzer-ID"
+
+#: ../src/dialogs.py:692
msgid "A GTK+ jabber client"
msgstr "Ein GTK+ Jabber-Client"
-#: ../src/dialogs.py:577
+#: ../src/dialogs.py:693
msgid "GTK+ Version:"
-msgstr ""
+msgstr "GTK+-Version:"
-#: ../src/dialogs.py:578
+#: ../src/dialogs.py:694
msgid "PyGTK Version:"
-msgstr ""
+msgstr "PyGTK-Version"
-#: ../src/dialogs.py:586
-#, fuzzy
+#: ../src/dialogs.py:702
msgid "Current Developers:"
-msgstr "Frühere Entwickler:"
+msgstr "Derzeitige Entwickler:"
-#: ../src/dialogs.py:588
+#: ../src/dialogs.py:704
msgid "Past Developers:"
msgstr "Frühere Entwickler:"
-#: ../src/dialogs.py:592
+#: ../src/dialogs.py:708
msgid "THANKS:"
msgstr "DANKE:"
#. remove one english sentence
#. and add it manually as translatable
-#: ../src/dialogs.py:598
+#: ../src/dialogs.py:714
msgid "Last but not least, we would like to thank all the package maintainers."
msgstr "Zuletzt möchten wird gerne allen Paket-Verwaltern danken."
#. here you write your name in the form Name FamilyName <someone@somewhere>
-#: ../src/dialogs.py:612
+#: ../src/dialogs.py:728
msgid "translator-credits"
msgstr "Ins Deutsche übersetzt von Fridtjof Busse"
-#: ../src/dialogs.py:738
-#, fuzzy, python-format
+#: ../src/dialogs.py:854
+#, python-format
msgid "Unable to bind to port %s."
-msgstr "Fehler beim Betreten des Raum"
+msgstr "Konnte nicht mit Port %s verbinden."
-#: ../src/dialogs.py:739
+#: ../src/dialogs.py:855
msgid ""
"Maybe you have another running instance of Gajim. File Transfer will be "
"canceled."
msgstr ""
+"Möglicherweise läuft bei Ihnen bereits ein Gajim. Der Dateitransfer\n"
+"wird abgebrochen."
-#: ../src/dialogs.py:881
+#: ../src/dialogs.py:997
#, python-format
msgid "Subscription request for account %s from %s"
msgstr "Abonnement-Anforderung für Konto %s von %s"
-#: ../src/dialogs.py:884
+#: ../src/dialogs.py:1000
#, python-format
msgid "Subscription request from %s"
msgstr "Abonnement-Anforderung von %s"
-#: ../src/dialogs.py:926
+#: ../src/dialogs.py:1044 ../src/roster_window.py:591
+#, python-format
+msgid "You are already in room %s"
+msgstr "Sie sind bereits im Raum %s"
+
+#: ../src/dialogs.py:1052
msgid "You can not join a group chat unless you are connected."
msgstr "Sie können einem Chatraum erst beitreten, wenn Sie verbunden sind."
-#: ../src/dialogs.py:939
+#: ../src/dialogs.py:1065
#, python-format
msgid "Join Group Chat with account %s"
msgstr "Betrete Chatraum mit Account %s"
-#: ../src/dialogs.py:1030
+#: ../src/dialogs.py:1158
msgid "Invalid room or server name"
msgstr "Ungültiger Raum oder Servername"
-#: ../src/dialogs.py:1031
+#: ../src/dialogs.py:1159
msgid "The room name or server name has not allowed characters."
msgstr "Der Raum- oder Servername enthält ungültige Zeichen."
-#: ../src/dialogs.py:1050
+#: ../src/dialogs.py:1180
#, python-format
msgid "Start Chat with account %s"
msgstr "Starte Chat mit Account %s"
-#: ../src/dialogs.py:1052
+#: ../src/dialogs.py:1182
msgid "Start Chat"
msgstr "Chat starten"
-#: ../src/dialogs.py:1053
-#, fuzzy
+#: ../src/dialogs.py:1183
msgid ""
"Fill in the jid, or nick of the contact you would like\n"
"to send a chat message to:"
msgstr ""
-"Geben Sie die Benutzer-ID des Kontaktes ein,\n"
+"Geben Sie die JID oder den Spitznamen des Kontaktes ein,\n"
"an den Sie eine Chat-Nachricht schicken wollen:"
#. if offline or connecting
-#: ../src/dialogs.py:1078 ../src/dialogs.py:1427 ../src/dialogs.py:1551
+#: ../src/dialogs.py:1208 ../src/dialogs.py:1562 ../src/dialogs.py:1686
msgid "Connection not available"
msgstr "Verbindung nicht verfügbar"
-#: ../src/dialogs.py:1079 ../src/dialogs.py:1428 ../src/dialogs.py:1552
+#: ../src/dialogs.py:1209 ../src/dialogs.py:1563 ../src/dialogs.py:1687
#, python-format
msgid "Please make sure you are connected with \"%s\"."
msgstr "Vergewissern Sie sich, dass Sie mit \"%s\" verbunden sind."
-#: ../src/dialogs.py:1088 ../src/dialogs.py:1091
-#, fuzzy
+#: ../src/dialogs.py:1218 ../src/dialogs.py:1221
msgid "Invalid JID"
-msgstr "Ungültige Jabber ID"
+msgstr "Ungültige JID"
-#: ../src/dialogs.py:1091
-#, fuzzy, python-format
+#: ../src/dialogs.py:1221
+#, python-format
msgid "Unable to parse \"%s\"."
-msgstr "Kann Datei nicht in %s schreiben"
+msgstr "Kann \"%s\" nicht parsen."
-#: ../src/dialogs.py:1100
+#: ../src/dialogs.py:1230
msgid "Without a connection, you can not change your password."
msgstr "Sie müssen verbunden sein, um Ihr Passwort zu ändern"
-#: ../src/dialogs.py:1119
+#: ../src/dialogs.py:1249
msgid "You must enter a password."
msgstr "Sie müssen ein Passwort eingeben."
#. img to display
#. default value
-#: ../src/dialogs.py:1165 ../src/notify.py:126 ../src/notify.py:268
+#: ../src/dialogs.py:1295 ../src/notify.py:205 ../src/notify.py:366
msgid "Contact Signed In"
msgstr "Kontakt hat sich angemeldet"
-#: ../src/dialogs.py:1167 ../src/notify.py:134 ../src/notify.py:270
+#: ../src/dialogs.py:1297 ../src/notify.py:213 ../src/notify.py:368
msgid "Contact Signed Out"
msgstr "Kontakt hat sich abgemeldet"
#. chat message
-#: ../src/dialogs.py:1169 ../src/notify.py:154 ../src/notify.py:272
+#: ../src/dialogs.py:1299 ../src/notify.py:232 ../src/notify.py:370
msgid "New Message"
msgstr "Neue Nachricht"
#. single message
-#: ../src/dialogs.py:1169 ../src/notify.py:138 ../src/notify.py:272
+#: ../src/dialogs.py:1299 ../src/notify.py:217 ../src/notify.py:370
msgid "New Single Message"
msgstr "Neue einzelne Nachricht"
#. private message
-#: ../src/dialogs.py:1170 ../src/notify.py:145 ../src/notify.py:273
+#: ../src/dialogs.py:1300 ../src/notify.py:224 ../src/notify.py:371
msgid "New Private Message"
msgstr "Neue private Nachricht"
-#: ../src/dialogs.py:1170 ../src/gajim.py:1044 ../src/notify.py:281
+#: ../src/dialogs.py:1300 ../src/gajim.py:1072 ../src/notify.py:379
msgid "New E-mail"
msgstr "Neue E-Mail"
-#: ../src/dialogs.py:1172 ../src/gajim.py:1187 ../src/notify.py:275
+#: ../src/dialogs.py:1302 ../src/gajim.py:1204 ../src/notify.py:373
msgid "File Transfer Request"
msgstr "Dateitransfer Anfrage"
-#: ../src/dialogs.py:1174 ../src/gajim.py:1022 ../src/gajim.py:1164
-#: ../src/notify.py:277
+#: ../src/dialogs.py:1304 ../src/gajim.py:1050 ../src/gajim.py:1180
+#: ../src/notify.py:375
msgid "File Transfer Error"
msgstr "Dateitransfer-Fehler"
-#: ../src/dialogs.py:1176 ../src/gajim.py:1222 ../src/gajim.py:1244
-#: ../src/gajim.py:1261 ../src/notify.py:279
+#: ../src/dialogs.py:1306 ../src/gajim.py:1240 ../src/gajim.py:1262
+#: ../src/gajim.py:1279 ../src/notify.py:377
msgid "File Transfer Completed"
msgstr "Dateitransfer beendet"
-#: ../src/dialogs.py:1177 ../src/gajim.py:1225 ../src/notify.py:279
+#: ../src/dialogs.py:1307 ../src/gajim.py:1243 ../src/notify.py:377
msgid "File Transfer Stopped"
msgstr "Dateitransfer gestoppt"
-#: ../src/dialogs.py:1179 ../src/gajim.py:920 ../src/notify.py:283
+#: ../src/dialogs.py:1309 ../src/gajim.py:948 ../src/notify.py:381
msgid "Groupchat Invitation"
msgstr "Gruppenchat-Einladung"
-#: ../src/dialogs.py:1181 ../src/notify.py:118 ../src/notify.py:285
-#, fuzzy
+#: ../src/dialogs.py:1311 ../src/notify.py:197 ../src/notify.py:383
msgid "Contact Changed Status"
-msgstr "Kontakt hat sich abgemeldet"
+msgstr "Kontakt hat Status verändert"
-#. FIXME: for Received with should become 'in'
-#: ../src/dialogs.py:1359
+#: ../src/dialogs.py:1492
#, python-format
-msgid "Single Message with account %s"
+msgid "Single Message using account %s"
msgstr "Einzelne Nachricht mit Account %s"
-#: ../src/dialogs.py:1361
+#: ../src/dialogs.py:1494
+#, python-format
+msgid "Single Message in account %s"
+msgstr "Einzelne Nachricht in Account %s"
+
+#: ../src/dialogs.py:1496
msgid "Single Message"
msgstr "Einzelne Nachricht"
#. prepare UI for Sending
-#: ../src/dialogs.py:1364
+#: ../src/dialogs.py:1499
#, python-format
msgid "Send %s"
msgstr "Sende %s"
#. prepare UI for Receiving
-#: ../src/dialogs.py:1387
+#: ../src/dialogs.py:1522
#, python-format
msgid "Received %s"
msgstr "%s empfangen"
#. we create a new blank window to send and we preset RE: and to jid
-#: ../src/dialogs.py:1454
+#: ../src/dialogs.py:1589
#, python-format
msgid "RE: %s"
msgstr "RE: %s"
-#: ../src/dialogs.py:1455
+#: ../src/dialogs.py:1590
#, python-format
msgid "%s wrote:\n"
msgstr "%s schrieb:\n"
-#: ../src/dialogs.py:1499
+#: ../src/dialogs.py:1634
#, python-format
msgid "XML Console for %s"
msgstr "XML Konsole für %s"
-#: ../src/dialogs.py:1501
+#: ../src/dialogs.py:1636
msgid "XML Console"
msgstr "XML Konsole"
-#: ../src/dialogs.py:1620
+#: ../src/dialogs.py:1755
#, python-format
msgid "Privacy List <b><i>%s</i></b>"
-msgstr ""
+msgstr "Privatliste <b><i>%s</i></b>"
-#: ../src/dialogs.py:1624
+#: ../src/dialogs.py:1759
#, python-format
msgid "Privacy List for %s"
msgstr ""
-#: ../src/dialogs.py:1716
-#, fuzzy
+#: ../src/dialogs.py:1851
msgid "<b>Edit a rule</b>"
-msgstr "<b>Format einer Zeile</b>"
+msgstr "<b>Eine Regel bearbeiten</b>"
-#: ../src/dialogs.py:1801
-#, fuzzy
+#: ../src/dialogs.py:1936
msgid "<b>Add a rule</b>"
-msgstr "<b>Format einer Zeile</b>"
+msgstr "<b>Eine Regel hinzufügen</b>"
-#: ../src/dialogs.py:1897
+#: ../src/dialogs.py:2033
#, python-format
msgid "Privacy Lists for %s"
-msgstr ""
+msgstr "Privatliste für %s"
-#: ../src/dialogs.py:1899
-#, fuzzy
+#: ../src/dialogs.py:2035
msgid "Privacy Lists"
-msgstr "Private Chats"
+msgstr "Privatlist"
#. FIXME: use nickname instead of contact_jid
-#: ../src/dialogs.py:1988
+#: ../src/dialogs.py:2124
#, python-format
msgid "%(contact_jid)s has invited you to %(room_jid)s room"
msgstr "%(contact_jid)s hat Sie in %(room_jid)s eingeladen"
#. only if not None and not ''
-#: ../src/dialogs.py:1994
+#: ../src/dialogs.py:2130
#, python-format
msgid "Comment: %s"
msgstr "Kommentar: %s"
-#: ../src/dialogs.py:2054
+#: ../src/dialogs.py:2193
msgid "Choose Sound"
msgstr "Sound wählen"
-#: ../src/dialogs.py:2064 ../src/dialogs.py:2107
+#: ../src/dialogs.py:2203 ../src/dialogs.py:2248
msgid "All files"
msgstr "Alle Dateien"
-#: ../src/dialogs.py:2069
+#: ../src/dialogs.py:2208
msgid "Wav Sounds"
msgstr "Wav Dateien"
-#: ../src/dialogs.py:2097
+#: ../src/dialogs.py:2238
msgid "Choose Image"
msgstr "Bild auswählen"
-#: ../src/dialogs.py:2112
+#: ../src/dialogs.py:2253
msgid "Images"
msgstr "Bilder"
-#: ../src/dialogs.py:2157
+#: ../src/dialogs.py:2298
#, python-format
msgid "When %s becomes:"
msgstr "Wenn %s wird:"
-#: ../src/dialogs.py:2159
+#: ../src/dialogs.py:2300
#, python-format
msgid "Adding Special Notification for %s"
msgstr "Füge speziellen Hinweis für %s hinzu"
-#: ../src/dialogs.py:2232
-#, fuzzy
+#. # means number
+#: ../src/dialogs.py:2371
+msgid "#"
+msgstr "Nr."
+
+#: ../src/dialogs.py:2377
msgid "Condition"
-msgstr "Verbindung"
+msgstr "Bedingung"
+
+#: ../src/dialogs.py:2498
+msgid "when I am "
+msgstr "wenn Ich bin "
#: ../src/disco.py:108
msgid "Others"
@@ -3043,7 +3190,7 @@ msgstr "Andere"
msgid "Conference"
msgstr "Konferenz"
-#: ../src/disco.py:411
+#: ../src/disco.py:412
msgid "Without a connection, you can not browse available services"
msgstr "Sie müssen angemeldet sein um Dienste zu durchsuchen"
@@ -3089,22 +3236,22 @@ msgstr "_Durchsuche"
msgid "This service does not contain any items to browse."
msgstr "Dieser Dienst enthält keine keine durchsuchbaren Objekte."
-#: ../src/disco.py:1137 ../src/disco.py:1254
+#: ../src/disco.py:1137 ../src/disco.py:1257
msgid "Re_gister"
msgstr "Re_gistrieren"
-#: ../src/disco.py:1291
+#: ../src/disco.py:1294
#, python-format
msgid "Scanning %d / %d.."
msgstr "Durchsuche %d / %d.."
#. Users column
-#: ../src/disco.py:1473
+#: ../src/disco.py:1476
msgid "Users"
msgstr "Benutzer"
#. Description column
-#: ../src/disco.py:1480
+#: ../src/disco.py:1483
msgid "Description"
msgstr "Beschreibung"
@@ -3137,13 +3284,13 @@ msgstr "Größe: %s"
msgid "You"
msgstr "Sie"
-#: ../src/filetransfers_window.py:174 ../src/filetransfers_window.py:224
+#: ../src/filetransfers_window.py:174
#, python-format
msgid "Sender: %s"
msgstr "Gespeichert in: %s"
-#: ../src/filetransfers_window.py:175 ../src/filetransfers_window.py:556
-#: ../src/tooltips.py:639
+#: ../src/filetransfers_window.py:175 ../src/filetransfers_window.py:555
+#: ../src/tooltips.py:621
msgid "Recipient: "
msgstr "Empfänger: "
@@ -3164,13 +3311,18 @@ msgstr "Dateitranfer abgebrochen"
msgid "Connection with peer cannot be established."
msgstr "Verbindung zum Teilnehmer kann nicht hergestellt werden"
+#: ../src/filetransfers_window.py:224
+#, python-format
+msgid "Recipient: %s"
+msgstr "Empfänger: %s"
+
#: ../src/filetransfers_window.py:225
msgid "File transfer stopped by the contact of the other side"
msgstr "Gegenseite hat Dateitransfer gestoppt"
#: ../src/filetransfers_window.py:242
msgid "Choose File to Send..."
-msgstr "Datei auswählen..."
+msgstr "Datei auswählen ..."
#: ../src/filetransfers_window.py:256
msgid "Gajim cannot access this file"
@@ -3203,13 +3355,13 @@ msgstr "%s möchte ihnen eine Datei senden:"
#: ../src/filetransfers_window.py:311
#, python-format
msgid "Cannot overwrite existing file \"%s\""
-msgstr ""
+msgstr "Kann existierende Datei \"%s\" nicht überschreiben"
#: ../src/filetransfers_window.py:312
msgid ""
"A file with this name already exists and you do not have permission to "
"overwrite it."
-msgstr ""
+msgstr "Eine Datei dieses Namens existiert bereits, und Sie haben nicht die Rechte, sie zu überschreiben."
#: ../src/filetransfers_window.py:319 ../src/gtkgui_helpers.py:685
msgid "This file already exists"
@@ -3222,15 +3374,15 @@ msgstr "Was möchten Sie tun?"
#: ../src/filetransfers_window.py:331
#, python-format
msgid "Directory \"%s\" is not writable"
-msgstr ""
+msgstr "Verzeichnis \"%s\" ist nicht schreibbar"
#: ../src/filetransfers_window.py:331
msgid "You do not have permission to create files in this directory."
-msgstr ""
+msgstr "Ihre Benutzerrechte erlauben es Ihnen nicht, in diesem Verzeichnis Dateien anzulegen."
#: ../src/filetransfers_window.py:341
msgid "Save File as..."
-msgstr "Datei speichern unter..."
+msgstr "Datei speichern unter ..."
#. Print remaining time in format 00:00:00
#. You can change the places of (hours), (minutes), (seconds) -
@@ -3243,33 +3395,33 @@ 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:492
+#: ../src/filetransfers_window.py:491
#, python-format
msgid "(%(filesize_unit)s/s)"
msgstr "(%(filesize_unit)s/s)"
-#: ../src/filetransfers_window.py:528 ../src/filetransfers_window.py:531
+#: ../src/filetransfers_window.py:527 ../src/filetransfers_window.py:530
msgid "Invalid File"
msgstr "Ungültige Datei"
-#: ../src/filetransfers_window.py:528
+#: ../src/filetransfers_window.py:527
msgid "File: "
msgstr "Datei: "
-#: ../src/filetransfers_window.py:532
+#: ../src/filetransfers_window.py:531
msgid "It is not possible to send empty files"
msgstr "Es nicht möglich, leere Dateien zu versenden"
-#: ../src/filetransfers_window.py:552 ../src/tooltips.py:511
-#: ../src/tooltips.py:629
+#: ../src/filetransfers_window.py:551 ../src/tooltips.py:492
+#: ../src/tooltips.py:611
msgid "Name: "
msgstr "Name: "
-#: ../src/filetransfers_window.py:554 ../src/tooltips.py:633
+#: ../src/filetransfers_window.py:553 ../src/tooltips.py:615
msgid "Sender: "
msgstr "Absender: "
-#: ../src/filetransfers_window.py:742
+#: ../src/filetransfers_window.py:741
msgid "Pause"
msgstr "Pause"
@@ -3363,15 +3515,11 @@ msgid "if specified, contact is taken from the contact list of this account"
msgstr "falls angegeben, wird der Kontakt von der Liste dieses Kontos gewählt"
#: ../src/gajim-remote.py:129
-#, fuzzy
msgid ""
"Sends new chat message to a contact in the roster. Both OpenPGP key and "
"account are optional. If you want to set only 'account', without 'OpenPGP "
"key', just set 'OpenPGP key' to ''."
-msgstr ""
-"Sende neue Nachricht zu einem Kontakt im Roster. OpenPGP-Schlüssel und Konto "
-"sind optional. Falls nur 'Konto' gesetzt werden soll, ohne OpenGPG-"
-"Schlüssel, setzen Sie 'OpenGPG-Schlüssel' einfach auf ''."
+msgstr "Sende neue Chat-Nachricht zu einem Kontakt im Roster. OpenPGP-Schlüssel und Konto sind optional. Falls nur 'Konto' gesetzt werden soll, ohne OpenGPG-Schlüssel, setzen Sie 'OpenGPG-Schlüssel' einfach auf ''."
#: ../src/gajim-remote.py:133 ../src/gajim-remote.py:146
msgid "JID of the contact that will receive the message"
@@ -3394,25 +3542,21 @@ msgid "if specified, the message will be sent using this account"
msgstr "falls angegeben, wird die Nachricht über dieses Konto gesendet"
#: ../src/gajim-remote.py:142
-#, fuzzy
msgid ""
"Sends new single message to a contact in the roster. Both OpenPGP key and "
"account are optional. If you want to set only 'account', without 'OpenPGP "
"key', just set 'OpenPGP key' to ''."
-msgstr ""
-"Sende neue Nachricht zu einem Kontakt im Roster. OpenPGP-Schlüssel und Konto "
-"sind optional. Falls nur 'Konto' gesetzt werden soll, ohne OpenGPG-"
-"Schlüssel, setzen Sie 'OpenGPG-Schlüssel' einfach auf ''."
+msgstr "Sende neue Einzel-Nachricht zu einem Kontakt im Roster. OpenPGP-Schlüssel und "
+"Konto sind optional. Falls nur 'Konto' gesetzt werden soll, ohne OpenGPG-Schlüssel, "
+"lassen Sie 'OpenGPG-Schlüssel' einfach leer."
#: ../src/gajim-remote.py:147
-#, fuzzy
msgid "subject"
msgstr "Betreff"
#: ../src/gajim-remote.py:147
-#, fuzzy
msgid "message subject"
-msgstr "Nachricht gesendet"
+msgstr "Nachrichten-Betreff"
#: ../src/gajim-remote.py:156
msgid "Gets detailed info on a contact"
@@ -3491,10 +3635,9 @@ msgstr "Fügt Kontakt zum Roster hinzu"
#: ../src/gajim-remote.py:210
msgid "jid"
-msgstr ""
+msgstr "JID"
#: ../src/gajim-remote.py:211
-#, fuzzy
msgid "Adds new contact to this account"
msgstr "Fügt neuen Kontakt zu diesem Konto hinzu"
@@ -3520,9 +3663,8 @@ msgid "Open 'Start Chat' dialog"
msgstr ""
#: ../src/gajim-remote.py:236
-#, fuzzy
msgid "Starts chat, using this account"
-msgstr "Starte Chat mit Account %s"
+msgstr "Starte Chat mit diesem Account"
#: ../src/gajim-remote.py:256
msgid "Missing argument \"contact_jid\""
@@ -3582,31 +3724,31 @@ msgstr ""
"Argument \"%s\" wurde nicht angegeben. \n"
"Geben Sie \"%s help %s\" ein für Hilfe"
-#: ../src/gajim.py:48
+#: ../src/gajim.py:56
msgid "Gajim needs Xserver to run. Quiting..."
-msgstr "Gajim benötigt einen laufenden Xserver. Breche ab..."
+msgstr "Gajim benötigt einen laufenden Xserver. Breche ab ..."
-#: ../src/gajim.py:52
+#: ../src/gajim.py:60
msgid "Gajim needs PyGTK 2.6 or above"
msgstr "Gajim benötigt PyGTK 2.6 oder höher"
-#: ../src/gajim.py:53
+#: ../src/gajim.py:61
msgid "Gajim needs PyGTK 2.6 or above to run. Quiting..."
-msgstr "Gajim benötigt PyGTK 2.6 oder höher. Beende..."
+msgstr "Gajim benötigt PyGTK 2.6 oder höher. Beende ..."
-#: ../src/gajim.py:55
+#: ../src/gajim.py:63
msgid "Gajim needs GTK 2.6 or above"
msgstr "Gajim benötigt GTK 2.6 oder höher"
-#: ../src/gajim.py:56
+#: ../src/gajim.py:64
msgid "Gajim needs GTK 2.6 or above to run. Quiting..."
-msgstr "Gajim benötigt GTK 2.6+. Breche ab..."
+msgstr "Gajim benötigt GTK 2.6+. Breche ab ..."
-#: ../src/gajim.py:61
+#: ../src/gajim.py:69
msgid "GTK+ runtime is missing libglade support"
msgstr "GTK+ runtine fehlt libglade-Unterstützung"
-#: ../src/gajim.py:63
+#: ../src/gajim.py:71
#, python-format
msgid ""
"Please remove your current GTK+ runtime and install the latest stable "
@@ -3615,90 +3757,97 @@ msgstr ""
"Bitte entfernen Sie Ihre derzeitige GTK+ Laufzeitumgebung und installieren "
"Siedie aktuelle Version von %s"
-#: ../src/gajim.py:65
+#: ../src/gajim.py:73
msgid ""
"Please make sure that GTK+ and PyGTK have libglade support in your system."
msgstr ""
"Bitte stellen Sie sicher, dass GTK+ und PyGTK auf Ihrem System libglade-"
"Unterstützung besitzen."
-#: ../src/gajim.py:70
+#: ../src/gajim.py:78
msgid "Gajim needs PySQLite2 to run"
msgstr "Gajim benötigt PySQLite2 zum Starten"
#. set the icon to all newly opened wind
-#: ../src/gajim.py:151
+#: ../src/gajim.py:159
msgid "Gajim is already running"
-msgstr ""
+msgstr "Gajim läuft bereits"
-#: ../src/gajim.py:152
+#: ../src/gajim.py:160
msgid ""
"Another instance of Gajim seems to be running\n"
"Run anyway?"
msgstr ""
+"Eine andere Instanz von Gajim schein bereits zu laufen\n"
+"Trotzdem starten?"
-#: ../src/gajim.py:267
+#: ../src/gajim.py:261
#, python-format
msgid "HTTP (%s) Authorization for %s (id: %s)"
msgstr "HTTP (%s) Autorisierung für %s (id: %s)"
-#: ../src/gajim.py:268
+#: ../src/gajim.py:262
msgid "Do you accept this request?"
msgstr "Akzeptieren Sie diese Anfrage?"
-#: ../src/gajim.py:611
+#: ../src/gajim.py:590
+#, python-format
+msgid "Subject: %s"
+msgstr "Thema: %s"
+
+#: ../src/gajim.py:633
#, python-format
msgid "error while sending %s ( %s )"
msgstr "Fehler beim Senden von %s ( %s )"
-#: ../src/gajim.py:651
+#: ../src/gajim.py:673
msgid "Authorization accepted"
msgstr "Autorisierung akzeptiert"
-#: ../src/gajim.py:652
+#: ../src/gajim.py:674
#, python-format
msgid "The contact \"%s\" has authorized you to see his or her status."
msgstr "Kontakt \"%s\" hat Sie autorisiert seinen oder ihren Staus zu sehen."
-#: ../src/gajim.py:660
+#: ../src/gajim.py:682
#, python-format
msgid "Contact \"%s\" removed subscription from you"
msgstr "Kontakt \"%s\" hat das Abonnement zurückgezogen"
-#: ../src/gajim.py:661
+#: ../src/gajim.py:683
msgid "You will always see him or her as offline."
msgstr "Sie werden den Kontakt ab sofort als offline sehen."
-#: ../src/gajim.py:704
+#: ../src/gajim.py:726
#, python-format
msgid "Contact with \"%s\" cannot be established"
msgstr "Kontakt mit \"%s\" konnte nicht hergestellt werden"
-#: ../src/gajim.py:705 ../src/common/connection.py:398
+#: ../src/gajim.py:727 ../src/common/connection.py:402
msgid "Check your connection or try again later."
msgstr ""
"Überprüfen Sie die Verbindung oder versuchen Sie es später noch einmal."
-#: ../src/gajim.py:849 ../src/roster_window.py:1025
+#: ../src/gajim.py:871 ../src/roster_window.py:1082
#, python-format
msgid "%s is now %s (%s)"
msgstr "%s ist jetzt %s (%s)"
-#: ../src/gajim.py:930
+#: ../src/gajim.py:958
msgid "Your passphrase is incorrect"
msgstr "Ihre Passphrase ist falsch"
-#: ../src/gajim.py:931
+#: ../src/gajim.py:959
msgid "You are currently connected without your OpenPGP key."
msgstr "Sie wurden ohne ihren GPG-Schlüssel verbunden"
#. FIXME: find a better image
-#: ../src/gajim.py:1033
+#: ../src/gajim.py:1061
#, python-format
msgid "New E-mail on %(gmail_mail_address)s"
msgstr "Neue E-Mail auf %(gmail_mail_address)s"
-#: ../src/gajim.py:1035
+#: ../src/gajim.py:1063
#, python-format
msgid "You have %d new E-mail message"
msgid_plural "You have %d new E-mail messages"
@@ -3706,53 +3855,53 @@ msgstr[0] "Sie haben %d ungelesene E-Mail-Nachricht"
msgstr[1] "Sie haben %d ungelesene E-Mail-Nachrichten"
#. each message has a 'From', 'Subject' and 'Snippet' field
-#: ../src/gajim.py:1040
+#: ../src/gajim.py:1068
#, python-format
msgid ""
"\n"
"From: %(from_address)s"
-msgstr ""
+msgstr "\nVon: %(from_address)s"
-#: ../src/gajim.py:1185
+#: ../src/gajim.py:1201
#, python-format
msgid "%s wants to send you a file."
msgstr "%s möchte ihnen eine Datei senden."
-#: ../src/gajim.py:1245
+#: ../src/gajim.py:1263
#, python-format
msgid "You successfully received %(filename)s from %(name)s."
msgstr "Sie haben %(filename)s erfolgreich von %(name)s erhalten."
#. ft stopped
-#: ../src/gajim.py:1249
+#: ../src/gajim.py:1267
#, python-format
msgid "File transfer of %(filename)s from %(name)s stopped."
msgstr "Dateitransfer %(filename)s von %(name)s wurde gestoppt."
-#: ../src/gajim.py:1262
+#: ../src/gajim.py:1280
#, python-format
msgid "You successfully sent %(filename)s to %(name)s."
msgstr "Sie haben%(filename)s erfolgreich an %(name)s gesendet."
#. ft stopped
-#: ../src/gajim.py:1266
+#: ../src/gajim.py:1284
#, python-format
msgid "File transfer of %(filename)s to %(name)s stopped."
msgstr "Dateitransfer von %(filename)s an %(name)s wurde gestoppt."
-#: ../src/gajim.py:1295
+#: ../src/gajim.py:1313
msgid "vCard publication succeeded"
msgstr "vCard erfolgreich veröffentlicht"
-#: ../src/gajim.py:1295
+#: ../src/gajim.py:1313
msgid "Your personal information has been published successfully."
msgstr "Ihre persönlichen Informationen wurden erfolgreich veröffentlicht."
-#: ../src/gajim.py:1304
+#: ../src/gajim.py:1322
msgid "vCard publication failed"
msgstr "vCard Veröffentlichung fehlgeschlagen"
-#: ../src/gajim.py:1304
+#: ../src/gajim.py:1322
msgid ""
"There was an error while publishing your personal information, try again "
"later."
@@ -3762,37 +3911,29 @@ msgstr ""
#. it is good to notify the user
#. in case he or she cannot see the output of the console
-#: ../src/gajim.py:1683
+#: ../src/gajim.py:1701
msgid "Could not save your settings and preferences"
msgstr "Konnte Einstellungen nicht speichern"
-#: ../src/gajim.py:1903
+#: ../src/gajim.py:1923
msgid "Session Management support not available (missing gnome.ui module)"
msgstr ""
"Sitzungsmanagment-Unterstützung nicht verfügbar (fehlendes gnome.ui Modul)"
-#: ../src/gajim.py:1932
-msgid "Migrating Logs..."
-msgstr "Migriere Logs..."
-
-#: ../src/gajim.py:1933
-msgid "Please wait while logs are being migrated..."
-msgstr "Bitte warten Sie, während die Logs migriert werden..."
-
-#: ../src/gajim_themes_window.py:59
+#: ../src/gajim_themes_window.py:60
msgid "Theme"
msgstr "Thema"
#. don't confuse translators
-#: ../src/gajim_themes_window.py:141
+#: ../src/gajim_themes_window.py:142
msgid "theme name"
msgstr "Name des Themas"
-#: ../src/gajim_themes_window.py:158
+#: ../src/gajim_themes_window.py:159
msgid "You cannot delete your current theme"
msgstr "Sie können ihr derzeitiges Theme nicht löschen"
-#: ../src/gajim_themes_window.py:159
+#: ../src/gajim_themes_window.py:160
msgid "Please first choose another for your current theme."
msgstr "Bitte wählen Sie zuerst einen anderen Namen für ihr derzeitiges Theme."
@@ -3814,100 +3955,99 @@ msgstr "Senden privater Nachricht fehlgeschlagen"
msgid "You are no longer in room \"%s\" or \"%s\" has left."
msgstr "Sie sind nicht mehr im Raum \"%s\" oder \"%s\" hat den Raum verlassen."
-#: ../src/groupchat_control.py:129
+#: ../src/groupchat_control.py:136
msgid "Group Chat"
msgstr "Gruppenchat"
-#: ../src/groupchat_control.py:129
+#: ../src/groupchat_control.py:136
msgid "Group Chats"
msgstr "Gruppenchat"
-#: ../src/groupchat_control.py:308
-#, fuzzy
+#: ../src/groupchat_control.py:305
msgid "Insert Nickname"
-msgstr "_Spitzname ändern"
+msgstr "Spitzname einfügen"
-#: ../src/groupchat_control.py:702
+#: ../src/groupchat_control.py:641
msgid "This room has no subject"
msgstr "Dieser Raum hat kein Thema"
#. do not print 'kicked by None'
-#: ../src/groupchat_control.py:801
+#: ../src/groupchat_control.py:740
#, python-format
msgid "%(nick)s has been kicked: %(reason)s"
msgstr "%(nick)s wurde rausgeschmissen: %(reason)s"
-#: ../src/groupchat_control.py:805
+#: ../src/groupchat_control.py:744
#, python-format
msgid "%(nick)s has been kicked by %(who)s: %(reason)s"
msgstr "%(nick)s wurde von %(who)s rausgeschmissen: %(reason)s"
#. do not print 'banned by None'
-#: ../src/groupchat_control.py:812
+#: ../src/groupchat_control.py:751
#, python-format
msgid "%(nick)s has been banned: %(reason)s"
msgstr "%(nick)s wurde gebannt: %(reason)s"
-#: ../src/groupchat_control.py:816
+#: ../src/groupchat_control.py:755
#, python-format
msgid "%(nick)s has been banned by %(who)s: %(reason)s"
msgstr "%(nick)s wurde von %(who)s gebannt: %(reason)s"
-#: ../src/groupchat_control.py:824
+#: ../src/groupchat_control.py:763
#, python-format
msgid "You are now known as %s"
msgstr "Sie heißen nun %s"
-#: ../src/groupchat_control.py:826
+#: ../src/groupchat_control.py:765
#, python-format
msgid "%s is now known as %s"
msgstr "%s heißt jetzt %s"
-#: ../src/groupchat_control.py:897
+#: ../src/groupchat_control.py:843
#, python-format
msgid "%s has left"
msgstr "%s hat den Raum verlassen"
-#: ../src/groupchat_control.py:902
+#: ../src/groupchat_control.py:848
#, python-format
msgid "%s has joined the room"
msgstr ""
#. No status message
-#: ../src/groupchat_control.py:904 ../src/roster_window.py:1028
+#: ../src/groupchat_control.py:850 ../src/roster_window.py:1085
#, python-format
msgid "%s is now %s"
msgstr "%s ist jetzt %s"
-#: ../src/groupchat_control.py:1022 ../src/groupchat_control.py:1039
-#: ../src/groupchat_control.py:1132 ../src/groupchat_control.py:1148
+#: ../src/groupchat_control.py:968 ../src/groupchat_control.py:986
+#: ../src/groupchat_control.py:1079 ../src/groupchat_control.py:1095
#, python-format
msgid "Nickname not found: %s"
msgstr "Spitzname nicht gefunden: %s"
-#: ../src/groupchat_control.py:1066
+#: ../src/groupchat_control.py:1013
#, python-format
msgid "Invited %(contact_jid)s to %(room_jid)s."
msgstr "%(contact_jid)s in %(room_jid)s eingeladen"
#. %s is something the user wrote but it is not a jid so we inform
-#: ../src/groupchat_control.py:1073 ../src/groupchat_control.py:1103
+#: ../src/groupchat_control.py:1020 ../src/groupchat_control.py:1050
#, python-format
msgid "%s does not appear to be a valid JID"
msgstr "%s scheint keine gültige JID zu sein"
-#: ../src/groupchat_control.py:1185
+#: ../src/groupchat_control.py:1132
#, python-format
msgid "No such command: /%s (if you want to send this, prefix it with /say)"
msgstr ""
"Kein Kommando: /%s (wenn Sie dies senden wollen, setzen Sie /say voran)"
-#: ../src/groupchat_control.py:1207
+#: ../src/groupchat_control.py:1154
#, python-format
msgid "Commands: %s"
msgstr "Kommandos: %s"
-#: ../src/groupchat_control.py:1209
+#: ../src/groupchat_control.py:1156
#, python-format
msgid ""
"Usage: /%s <nickname|JID> [reason], bans the JID from the room. The nickname "
@@ -3920,7 +4060,7 @@ msgstr ""
"\" enthält. Wenn die JIDderzeit im Raum ist, wird er/sie/es ebenfalls "
"gebannt. Unterstützt KEINE Leerzeichen im Spitznamen."
-#: ../src/groupchat_control.py:1215
+#: ../src/groupchat_control.py:1162
#, python-format
msgid ""
"Usage: /%s <nickname>, opens a private chat window to the specified occupant."
@@ -3928,26 +4068,24 @@ msgstr ""
"Bedienung: /%s <Spitzname>, öffnet ein privates Chatfenster mit dem "
"spezifierten Inhaber."
-#: ../src/groupchat_control.py:1219
+#: ../src/groupchat_control.py:1166
#, python-format
msgid "Usage: /%s, clears the text window."
msgstr "Bedienung: /%s, leert das Textfenster."
-#: ../src/groupchat_control.py:1221
+#: ../src/groupchat_control.py:1168
#, python-format
msgid ""
"Usage: /%s [reason], closes the current window or tab, displaying reason if "
"specified."
-msgstr ""
-"Bedienung: /%s [Grund], schließt das aktuelle Fenster oder Tab, mit Anzeige "
-"eines Grundes falls angegeben."
+msgstr "Bedienung: /%s [Grund], schließt das aktuelle Fenster oder Tab, mit Anzeige eines Grundes falls angegeben."
-#: ../src/groupchat_control.py:1224
+#: ../src/groupchat_control.py:1171
#, python-format
msgid "Usage: /%s, hide the chat buttons."
msgstr "Verwendung: /%s, versteckt die Chatbuttons."
-#: ../src/groupchat_control.py:1226
+#: ../src/groupchat_control.py:1173
#, python-format
msgid ""
"Usage: /%s <JID> [reason], invites JID to the current room, optionally "
@@ -3956,7 +4094,7 @@ msgstr ""
"Bedienung: /%s <JID> [Grund], lädt die JID in den aktuellen Raum, optional "
"mit der Angabe eines Grundes."
-#: ../src/groupchat_control.py:1230
+#: ../src/groupchat_control.py:1177
#, python-format
msgid ""
"Usage: /%s <room>@<server>[/nickname], offers to join room@server optionally "
@@ -3965,7 +4103,7 @@ msgstr ""
"Bedienung: /%s <Raum>@<Server> [/Spitzname], bietet den Beitritt zu "
"Raum@Server an, optional mit Spitznamen."
-#: ../src/groupchat_control.py:1234
+#: ../src/groupchat_control.py:1181
#, python-format
msgid ""
"Usage: /%s <nickname> [reason], removes the occupant specified by nickname "
@@ -3976,7 +4114,7 @@ msgstr ""
"Raumes und zeigt optional einen Grund. Unterstützt KEINE Leerzeichen im "
"Spitznamen."
-#: ../src/groupchat_control.py:1239
+#: ../src/groupchat_control.py:1186
#, python-format
msgid ""
"Usage: /%s <action>, sends action to the current room. Use third person. (e."
@@ -3985,7 +4123,7 @@ msgstr ""
"Bedienung: /%s <Aktion>, sendet die Aktion im aktuellen Raum. Verwende "
"dritte Person, z.B. /%s explodiert)."
-#: ../src/groupchat_control.py:1243
+#: ../src/groupchat_control.py:1190
#, python-format
msgid ""
"Usage: /%s <nickname> [message], opens a private message windowand sends "
@@ -3995,24 +4133,24 @@ msgstr ""
"Nachrichtenfenster und sendet die Nachricht zum Inhaber des angegebenen "
"Spitznamen."
-#: ../src/groupchat_control.py:1248
+#: ../src/groupchat_control.py:1195
#, python-format
msgid "Usage: /%s <nickname>, changes your nickname in current room."
msgstr "Bedienung: /%s <Spitzname>, ändert den Spitznamen im aktuellen Raum."
-#: ../src/groupchat_control.py:1252
-#, fuzzy, python-format
+#: ../src/groupchat_control.py:1199
+#, python-format
msgid "Usage: /%s , display the names of room occupants."
msgstr ""
-"Benutzung: /%s [topic], zeigt oder aktualisiert das derzeitige Raumthema."
+"Benutzung: /%s , zeigt die Namen der Raumbesucher."
-#: ../src/groupchat_control.py:1256
+#: ../src/groupchat_control.py:1203
#, python-format
msgid "Usage: /%s [topic], displays or updates the current room topic."
msgstr ""
"Benutzung: /%s [topic], zeigt oder aktualisiert das derzeitige Raumthema."
-#: ../src/groupchat_control.py:1259
+#: ../src/groupchat_control.py:1206
#, python-format
msgid ""
"Usage: /%s <message>, sends a message without looking for other commands."
@@ -4020,73 +4158,73 @@ msgstr ""
"Benutzung: /%s <Nachricht>, sendet eine Nachricht ohne andere Befehle zu "
"beachten."
-#: ../src/groupchat_control.py:1262
+#: ../src/groupchat_control.py:1209
#, python-format
msgid "No help info for /%s"
msgstr "Keine Hilfe vorhanden für /%s"
-#: ../src/groupchat_control.py:1304
+#: ../src/groupchat_control.py:1251
#, python-format
msgid "Are you sure you want to leave room \"%s\"?"
msgstr "Möchten Sie den Raum \"%s\" wirklich verlassen?g"
-#: ../src/groupchat_control.py:1305
+#: ../src/groupchat_control.py:1252
msgid "If you close this window, you will be disconnected from this room."
msgstr ""
"Wenn Sie dieses Fenster schließen, wird die Verbindung zu diesem Raum "
"geschlossen."
-#: ../src/groupchat_control.py:1309
+#: ../src/groupchat_control.py:1256
msgid "Do _not ask me again"
msgstr "_Nicht noch einmal fragen"
-#: ../src/groupchat_control.py:1343
+#: ../src/groupchat_control.py:1289
msgid "Changing Subject"
msgstr "Thema ändern"
-#: ../src/groupchat_control.py:1344
+#: ../src/groupchat_control.py:1290
msgid "Please specify the new subject:"
msgstr "Bitte bestimmen Sie ein neues Thema"
-#: ../src/groupchat_control.py:1352
+#: ../src/groupchat_control.py:1298
msgid "Changing Nickname"
msgstr "Spitzname ändern"
-#: ../src/groupchat_control.py:1353
+#: ../src/groupchat_control.py:1299
msgid "Please specify the new nickname you want to use:"
msgstr "Bitte geben Sie an, welchen Spitznamen Sie verwenden möchten:"
-#: ../src/groupchat_control.py:1379
+#: ../src/groupchat_control.py:1325
msgid "Bookmark already set"
msgstr "Bookmark existiert schon"
-#: ../src/groupchat_control.py:1380
+#: ../src/groupchat_control.py:1326
#, python-format
msgid "Room \"%s\" is already in your bookmarks."
msgstr "Der Raum \"%s\" ist schon in den Bookmarks."
-#: ../src/groupchat_control.py:1389
+#: ../src/groupchat_control.py:1335
msgid "Bookmark has been added successfully"
msgstr "Bookmark wurde erfolgreich hinzugefügt"
-#: ../src/groupchat_control.py:1390
+#: ../src/groupchat_control.py:1336
msgid "You can manage your bookmarks via Actions menu in your roster."
msgstr ""
"Sie können ihre Bookmarks über das Aktionen-Menü in der Kontaktliste "
"bearbeiten"
#. ask for reason
-#: ../src/groupchat_control.py:1500
+#: ../src/groupchat_control.py:1446
#, python-format
msgid "Kicking %s"
msgstr "%s rausschmeißen"
-#: ../src/groupchat_control.py:1501 ../src/groupchat_control.py:1779
+#: ../src/groupchat_control.py:1447 ../src/groupchat_control.py:1725
msgid "You may specify a reason below:"
msgstr "Sie können eine Begründung angeben:"
#. ask for reason
-#: ../src/groupchat_control.py:1778
+#: ../src/groupchat_control.py:1724
#, python-format
msgid "Banning %s"
msgstr "%s verbannen"
@@ -4135,19 +4273,17 @@ msgstr ""
"funktionieren"
#: ../src/gtkgui_helpers.py:717
-#, fuzzy
msgid "Extension not supported"
-msgstr "Dbus wird nicht unterstützt."
+msgstr "Erweiterung wird nicht unterstützt."
#: ../src/gtkgui_helpers.py:718
#, python-format
msgid "Image cannot be saved in %(type)s format. Save as %(new_filename)s?"
-msgstr ""
+msgstr "Bild kann nicht im %(type)s-Format gespeichert werden. Als %(new_filename)s speichern?"
#: ../src/gtkgui_helpers.py:727
-#, fuzzy
msgid "Save Image as..."
-msgstr "Datei speichern unter..."
+msgstr "Bild speichern unter ..."
#: ../src/history_manager.py:61
msgid "Cannot find history logs database"
@@ -4195,15 +4331,13 @@ msgid ""
"\n"
"In case you click YES, please wait..."
msgstr ""
-"Der allozierte Datenbankspeicherplatz wird nicht freigegeben, er wird nur "
-"wiederverwendbar. Wenn Sie wirklich den Speicherplatz reduzieren möchten, "
-"klicken Sie JA, ansonsten NEIN.\n"
+"Der allozierte Datenbankspeicherplatz wird nicht freigegeben, er wird nur wiederverwendbar. Wenn Sie wirklich den Speicherplatz reduzieren möchten, klicken Sie JA, ansonsten NEIN.\n"
"\n"
-"Falls Sie JA klicken, warten Sie bitte einen Augenblick..."
+"Falls Sie JA klicken, warten Sie bitte einen Augenblick ..."
#: ../src/history_manager.py:391
msgid "Exporting History Logs..."
-msgstr "Exportiere Verlaufslog..."
+msgstr "Exportiere Verlaufslog ..."
#: ../src/history_manager.py:467
#, python-format
@@ -4240,7 +4374,7 @@ msgstr "Unterhaltungs-Verlauf mit %s"
msgid "%(nick)s is now %(status)s: %(status_msg)s"
msgstr "%(nick)s ist jezt %(status)s: %(status_msg)s"
-#: ../src/history_window.py:262 ../src/notify.py:113
+#: ../src/history_window.py:262 ../src/notify.py:192
#, python-format
msgid "%(nick)s is now %(status)s"
msgstr "%(nick)s ist jetzt %(status)s"
@@ -4255,77 +4389,72 @@ msgstr "Status ist jetzt: %(status)s: %(status_msg)s"
msgid "Status is now: %(status)s"
msgstr "Status ist jetzt: %(status)s"
-#: ../src/message_window.py:244
+#: ../src/message_window.py:254
msgid "Messages"
msgstr "Nachrichten"
-#: ../src/message_window.py:245
+#: ../src/message_window.py:255
#, python-format
msgid "%s - Gajim"
msgstr "%s - Gajim"
-#: ../src/notify.py:111
-#, fuzzy, python-format
+#: ../src/notify.py:190
+#, python-format
msgid "%(nick)s Changed Status"
-msgstr "%(nick)s ist jetzt %(status)s"
+msgstr "%(nick)s änderte Status"
-#: ../src/notify.py:121
+#: ../src/notify.py:200
#, python-format
msgid "%(nickname)s Signed In"
msgstr "%(nickname)s angemeldet"
-#: ../src/notify.py:129
+#: ../src/notify.py:208
#, python-format
msgid "%(nickname)s Signed Out"
msgstr "%(nickname)s abgemeldet"
-#: ../src/notify.py:141
+#: ../src/notify.py:220
#, python-format
msgid "New Single Message from %(nickname)s"
msgstr "Neue einzelne Nachricht von %(nickname)s"
-#: ../src/notify.py:150
+#: ../src/notify.py:228
#, python-format
msgid "New Private Message from room %s"
msgstr "Neue private Nachricht von Raum %s"
-#: ../src/notify.py:151
+#: ../src/notify.py:229
#, python-format
msgid "%(nickname)s: %(message)s"
msgstr "%(nickname)s:·%(message)s"
-#: ../src/notify.py:157
+#: ../src/notify.py:235
#, python-format
msgid "New Message from %(nickname)s"
msgstr "Neue Nachricht von %(nickname)s"
-#: ../src/roster_window.py:131
+#: ../src/roster_window.py:138
msgid "Merged accounts"
-msgstr "Konten zusammenführen"
+msgstr "Alle Konten"
-#: ../src/roster_window.py:288 ../src/common/helpers.py:39
+#: ../src/roster_window.py:298 ../src/common/helpers.py:40
msgid "Observers"
msgstr "Beobachter"
-#: ../src/roster_window.py:544
-#, python-format
-msgid "You are already in room %s"
-msgstr "Sie sind bereits im Raum %s"
-
-#: ../src/roster_window.py:548 ../src/roster_window.py:2280
+#: ../src/roster_window.py:595 ../src/roster_window.py:2570
msgid "You cannot join a room while you are invisible"
msgstr "Sie können einem Chatraum nicht beitreten, wenn Sie unsichtbar sind."
#. the 'manage gc bookmarks' item is showed
#. below to avoid duplicate code
#. add
-#: ../src/roster_window.py:748
+#: ../src/roster_window.py:791
#, python-format
msgid "to %s account"
msgstr "an %s Konto"
#. disco
-#: ../src/roster_window.py:755
+#: ../src/roster_window.py:796
#, python-format
msgid "using %s account"
msgstr "mit %s Konto"
@@ -4333,41 +4462,41 @@ msgstr "mit %s Konto"
#. new chat
#. for chat_with
#. for single message
-#: ../src/roster_window.py:763 ../src/systray.py:193 ../src/systray.py:198
+#: ../src/roster_window.py:802 ../src/systray.py:181 ../src/systray.py:186
#, python-format
msgid "using account %s"
msgstr "mit Konto %s"
#. profile, avatar
-#: ../src/roster_window.py:772
+#: ../src/roster_window.py:868
#, python-format
msgid "of account %s"
msgstr "von Konto %s"
-#: ../src/roster_window.py:831
+#: ../src/roster_window.py:888
msgid "Manage Bookmarks..."
-msgstr "Verwalte Bookmarks..."
+msgstr "Verwalte Bookmarks ..."
-#: ../src/roster_window.py:855
+#: ../src/roster_window.py:912
#, python-format
msgid "for account %s"
msgstr "für Konto %s"
#. History manager
-#: ../src/roster_window.py:876
+#: ../src/roster_window.py:933
msgid "History Manager"
msgstr "Verlaufmanager"
-#: ../src/roster_window.py:885
+#: ../src/roster_window.py:942
msgid "_Join New Room"
msgstr "_Neuen Raum betreten"
-#: ../src/roster_window.py:1159
+#: ../src/roster_window.py:1221
#, python-format
msgid "Transport \"%s\" will be removed"
msgstr "Transport \"%s\" wird entfernt"
-#: ../src/roster_window.py:1159
+#: ../src/roster_window.py:1222
msgid ""
"You will no longer be able to send and receive messages to contacts from "
"this transport."
@@ -4375,67 +4504,84 @@ msgstr ""
"Sie können nun keine Nachrichten mehr mit Kontakten von diesem Transport "
"austauschen."
-#: ../src/roster_window.py:1201
+#: ../src/roster_window.py:1224
+msgid "Transports will be removed"
+msgstr "Transporte werden entfernt"
+
+#: ../src/roster_window.py:1229
+#, python-format
+msgid ""
+"You will no longer be able to send and receive messages to contacts from "
+"these transports:%s"
+msgstr ""
+"Sie können nun keine Nachrichten mehr mit Kontakten von diesen Transporten "
+"austauschen:%s"
+
+#: ../src/roster_window.py:1273
msgid "Assign OpenPGP Key"
msgstr "OpenPGP-Schlüssel Zuweisen"
-#: ../src/roster_window.py:1202
+#: ../src/roster_window.py:1274
msgid "Select a key to apply to the contact"
msgstr "Weisen Sie dem Kontakt einen Schüssel zu"
-#: ../src/roster_window.py:1358
+#: ../src/roster_window.py:1411 ../src/roster_window.py:1586
+msgid "_New room"
+msgstr "_Neuer Raum"
+
+#: ../src/roster_window.py:1469
msgid "I would like to add you to my roster"
msgstr "Ich würde dich gerne in meine Liste aufnehmen"
-#: ../src/roster_window.py:1410
+#: ../src/roster_window.py:1645
msgid "Re_name"
msgstr "_Umbenennen"
-#: ../src/roster_window.py:1441
+#: ../src/roster_window.py:1676
msgid "_Log on"
msgstr "_Anmelden"
-#: ../src/roster_window.py:1450
+#: ../src/roster_window.py:1685
msgid "Log _off"
msgstr "_Abmelden"
-#: ../src/roster_window.py:1545
+#: ../src/roster_window.py:1780
msgid "_Change Status Message"
msgstr "Ändere _Statusnachricht"
-#: ../src/roster_window.py:1621
+#: ../src/roster_window.py:1856
msgid "Authorization has been sent"
msgstr "Autorisierung wurde erneut gesendet"
-#: ../src/roster_window.py:1622
+#: ../src/roster_window.py:1857
#, python-format
msgid "Now \"%s\" will know your status."
msgstr "\"%s\" kennt jetzt ihren Status."
-#: ../src/roster_window.py:1646
+#: ../src/roster_window.py:1881
msgid "Subscription request has been sent"
msgstr "Abonnement-Anforderung wurde gesendet"
-#: ../src/roster_window.py:1647
+#: ../src/roster_window.py:1882
#, python-format
msgid "If \"%s\" accepts this request you will know his or her status."
msgstr "Wenn d\"%s\" diese Anfrage akzeptiert, erfahren Sie dessen Status."
-#: ../src/roster_window.py:1658
+#: ../src/roster_window.py:1893
msgid "Authorization has been removed"
msgstr "Autorisierung wurde entfernt"
-#: ../src/roster_window.py:1659
+#: ../src/roster_window.py:1894
#, python-format
msgid "Now \"%s\" will always see you as offline."
msgstr "\"%s\" wird Sie nun immer als offline sehen."
-#: ../src/roster_window.py:1822
+#: ../src/roster_window.py:2100
#, python-format
msgid "Contact \"%s\" will be removed from your roster"
msgstr "Kontakt \"%s\" wird von ihrer Kontaktliste entfernt"
-#: ../src/roster_window.py:1826
+#: ../src/roster_window.py:2104
msgid ""
"By removing this contact you also remove authorization resulting in him or "
"her always seeing you as offline."
@@ -4443,7 +4589,7 @@ msgstr ""
"Durch die Entfernung dieses Kontaktes entziehen Sie ihm auch die "
"Authorisation, wodurch der Kontakt sie nur noch als offline sehen wird."
-#: ../src/roster_window.py:1830
+#: ../src/roster_window.py:2108
msgid ""
"By removing this contact you also by default remove authorization resulting "
"in him or her always seeing you as offline."
@@ -4451,39 +4597,54 @@ msgstr ""
"Durch die Entfernung dieses Kontaktes entziehen Sie ihm auch die "
"Authorisation, wodurch der Kontakt sie nur noch als offline sehen wird."
-#: ../src/roster_window.py:1831
+#: ../src/roster_window.py:2109
msgid "I want this contact to know my status after removal"
msgstr ""
"I möchte, dass dieser Kontakt meinen Status auch nach der Entfernung sieht"
-#: ../src/roster_window.py:1899
+#. several contact to remove at the same time
+#: ../src/roster_window.py:2113
+msgid "Contacts will be removed from your roster"
+msgstr "Kontakte werden von ihrer Kontaktliste entfernt"
+
+#: ../src/roster_window.py:2117
+#, python-format
+msgid ""
+"By removing these contacts:%s\n"
+"you also remove authorization resulting in them always seeing you as offline."
+msgstr ""
+"Durch die Entfernung dieser Kontakte:%s\n"
+"entziehen Sie ihnen auch die Authorisation, wodurch die Kontakte Sie nur "
+"noch als offline sehen werden."
+
+#: ../src/roster_window.py:2187
msgid "Passphrase Required"
msgstr "Passphrase benötigt"
-#: ../src/roster_window.py:1900
+#: ../src/roster_window.py:2188
#, python-format
msgid "Enter GPG key passphrase for account %s."
msgstr "Geben Sie die GPG-Passphrase für das Konto %s ein."
-#: ../src/roster_window.py:1905
+#: ../src/roster_window.py:2193
msgid "Save passphrase"
msgstr "Passphrase speichern"
-#: ../src/roster_window.py:1913
+#: ../src/roster_window.py:2201
msgid "Wrong Passphrase"
msgstr "Falsche Passphrase"
-#: ../src/roster_window.py:1914
+#: ../src/roster_window.py:2202
msgid "Please retype your GPG passphrase or press Cancel."
msgstr ""
"Bitte geben Sie Ihre GPG-Passphrase erneut ein oder klicken Sie auf "
"Abbrechen."
-#: ../src/roster_window.py:1963 ../src/roster_window.py:2020
+#: ../src/roster_window.py:2254 ../src/roster_window.py:2311
msgid "You are participating in one or more group chats"
msgstr "Sie nehmen an einem oder mehreren Gruppenchats teil"
-#: ../src/roster_window.py:1964 ../src/roster_window.py:2021
+#: ../src/roster_window.py:2255 ../src/roster_window.py:2312
msgid ""
"Changing your status to invisible will result in disconnection from those "
"group chats. Are you sure you want to go invisible?"
@@ -4491,165 +4652,165 @@ msgstr ""
"Wenn Sie Ihren Status auf unsichtbar setzen, werden sie von diesen "
"Gruppenchats getrennt. Sind Sie sicher, dass sie unsichtbar werden möchten?"
-#: ../src/roster_window.py:1980
+#: ../src/roster_window.py:2271
msgid "No account available"
msgstr "Kein Konto vorhanden"
-#: ../src/roster_window.py:1981
+#: ../src/roster_window.py:2272
msgid "You must create an account before you can chat with other contacts."
msgstr ""
"Sie müssen ein Konto erstellen, bevor Sie zum Jabber-Netzwerk verbinden "
"können."
-#: ../src/roster_window.py:2452 ../src/roster_window.py:2458
+#: ../src/roster_window.py:2748 ../src/roster_window.py:2754
msgid "You have unread messages"
msgstr "Sie haben ungelesene Nachrichten"
-#: ../src/roster_window.py:2453 ../src/roster_window.py:2459
+#: ../src/roster_window.py:2749 ../src/roster_window.py:2755
msgid ""
"Messages will only be available for reading them later if you have history "
"enabled."
msgstr "Um Nachrichten später lesen zu können, muss der Verlauf aktiv sein."
-#: ../src/roster_window.py:3231
+#: ../src/roster_window.py:3540
#, python-format
msgid "Drop %s in group %s"
msgstr "Setze %s in Gruppe %s"
-#: ../src/roster_window.py:3238
+#: ../src/roster_window.py:3547
#, python-format
msgid "Make %s and %s metacontacts"
msgstr "Mache %s und %s Metakontakte"
-#: ../src/roster_window.py:3408
+#: ../src/roster_window.py:3729
msgid "Change Status Message..."
-msgstr "Ändere Statusnachricht..."
+msgstr "Ändere Statusnachricht ..."
-#: ../src/systray.py:154
+#: ../src/systray.py:142
msgid "_Change Status Message..."
-msgstr "Ändere _Statusnachricht..."
+msgstr "Ändere _Statusnachricht ..."
-#: ../src/systray.py:231
+#: ../src/systray.py:219
msgid "Hide this menu"
msgstr "Versteckt dieses Menü"
-#: ../src/systraywin32.py:261 ../src/systraywin32.py:280
+#: ../src/systraywin32.py:269
#, python-format
msgid "Gajim - %d unread message"
msgid_plural "Gajim - %d unread messages"
msgstr[0] "Gajim - %d ungelesene Nachricht"
msgstr[1] "Gajim - %d ungelesene Nachrichten"
-#: ../src/tooltips.py:326
-#, fuzzy, python-format
+#: ../src/tooltips.py:306
+#, python-format
msgid " %d unread message"
msgid_plural " %d unread messages"
-msgstr[0] "Gajim - %d ungelesene Nachricht"
-msgstr[1] "Gajim - %d ungelesene Nachrichten"
+msgstr[0] " %d ungelesene Nachricht"
+msgstr[1] " %d ungelesene Nachrichten"
-#: ../src/tooltips.py:332
-#, fuzzy, python-format
+#: ../src/tooltips.py:312
+#, python-format
msgid " %d unread single message"
msgid_plural " %d unread single messages"
-msgstr[0] "Gajim - %d ungelesene Einzel-Nachricht"
-msgstr[1] "Gajim - %d ungelesene Einzel-Nachrichten"
+msgstr[0] " %d ungelesene Einzel-Nachricht"
+msgstr[1] " %d ungelesene Einzel-Nachrichten"
-#: ../src/tooltips.py:338
-#, fuzzy, python-format
+#: ../src/tooltips.py:318
+#, python-format
msgid " %d unread group chat message"
msgid_plural " %d unread group chat messages"
-msgstr[0] "Gajim - %d ungelesene Gruppenchat-Nachricht"
-msgstr[1] "Gajim - %d ungelesene Gruppenchat-Nachrichten"
+msgstr[0] " %d ungelesene Gruppenchat-Nachricht"
+msgstr[1] " %d ungelesene Gruppenchat-Nachrichten"
-#: ../src/tooltips.py:344
-#, fuzzy, python-format
+#: ../src/tooltips.py:324
+#, python-format
msgid " %d unread private message"
msgid_plural " %d unread private messages"
-msgstr[0] "Gajim - %d ungelesene private Nachricht"
-msgstr[1] "Gajim - %d ungelesene private Nachrichten"
+msgstr[0] " %d ungelesene private Nachricht"
+msgstr[1] " %d ungelesene private Nachrichten"
-#: ../src/tooltips.py:359 ../src/tooltips.py:361
+#: ../src/tooltips.py:339 ../src/tooltips.py:341
#, python-format
msgid "Gajim - %s"
msgstr "Gajim - %s"
-#: ../src/tooltips.py:395
+#: ../src/tooltips.py:375
msgid "Role: "
msgstr "Rolle:"
-#: ../src/tooltips.py:396
+#: ../src/tooltips.py:376
msgid "Affiliation: "
msgstr "Zugehörigkeit: "
-#: ../src/tooltips.py:398 ../src/tooltips.py:537
+#: ../src/tooltips.py:378 ../src/tooltips.py:518
msgid "Resource: "
msgstr "Ressource: "
-#: ../src/tooltips.py:407 ../src/tooltips.py:540 ../src/tooltips.py:565
-#: ../src/tooltips.py:676
+#: ../src/tooltips.py:387 ../src/tooltips.py:522 ../src/tooltips.py:547
+#: ../src/tooltips.py:658
msgid "Status: "
msgstr "Status: "
-#: ../src/tooltips.py:514
+#: ../src/tooltips.py:495
msgid "Subscription: "
msgstr "Abonnement: "
-#: ../src/tooltips.py:523
+#: ../src/tooltips.py:504
msgid "OpenPGP: "
msgstr "OpenPGP: "
-#: ../src/tooltips.py:570
+#: ../src/tooltips.py:552
#, python-format
msgid "Last status on %s"
msgstr "Letzter Status auf %s"
-#: ../src/tooltips.py:572
+#: ../src/tooltips.py:554
#, python-format
msgid "Since %s"
msgstr "Seit %s"
-#: ../src/tooltips.py:632
+#: ../src/tooltips.py:614
msgid "Download"
msgstr "Download"
-#: ../src/tooltips.py:638
+#: ../src/tooltips.py:620
msgid "Upload"
msgstr "Upload"
-#: ../src/tooltips.py:645
+#: ../src/tooltips.py:627
msgid "Type: "
msgstr "Typ: "
-#: ../src/tooltips.py:651
+#: ../src/tooltips.py:633
msgid "Transferred: "
msgstr "Übertragen: "
-#: ../src/tooltips.py:654 ../src/tooltips.py:675
+#: ../src/tooltips.py:636 ../src/tooltips.py:657
msgid "Not started"
msgstr "Nicht gestartet"
-#: ../src/tooltips.py:658
+#: ../src/tooltips.py:640
msgid "Stopped"
msgstr "Angehalten"
-#: ../src/tooltips.py:660 ../src/tooltips.py:663
+#: ../src/tooltips.py:642 ../src/tooltips.py:645
msgid "Completed"
msgstr "Abgeschlossen"
#. stalled is not paused. it is like 'frozen' it stopped alone
-#: ../src/tooltips.py:671
+#: ../src/tooltips.py:653
msgid "Stalled"
msgstr "Steht still"
-#: ../src/tooltips.py:673
+#: ../src/tooltips.py:655
msgid "Transferring"
msgstr "Übertrage"
-#: ../src/tooltips.py:705
+#: ../src/tooltips.py:687
msgid "This service has not yet responded with detailed information"
msgstr "Dieser Dienst hat nicht mit detaillierten Informationen geantwortet"
-#: ../src/tooltips.py:708
+#: ../src/tooltips.py:690
msgid ""
"This service could not respond with detailed information.\n"
"It is most likely legacy or broken"
@@ -4658,24 +4819,24 @@ msgstr ""
"Er ist wahrscheinlich verwaltet oder defekt"
#. keep identation
-#: ../src/vcard.py:188
+#: ../src/vcard.py:193
msgid "Could not load image"
msgstr "Konnte Bild nicht laden"
-#: ../src/vcard.py:289
+#: ../src/vcard.py:305
msgid "?Client:Unknown"
msgstr "Unbekannt"
-#: ../src/vcard.py:291
+#: ../src/vcard.py:307
msgid "?OS:Unknown"
msgstr "Unbekannt"
-#: ../src/vcard.py:308
+#: ../src/vcard.py:326
#, python-format
msgid "since %s"
msgstr "seit %s"
-#: ../src/vcard.py:332
+#: ../src/vcard.py:352
msgid ""
"This contact is interested in your presence information, but you are not "
"interested in his/her presence"
@@ -4683,7 +4844,7 @@ msgstr ""
"Dieser Kontakt ist an Ihren Anwesenheitsinformationen interessiert, aber Sie "
"sindnicht an seiner/ihrer Anwesenheit interessiert"
-#: ../src/vcard.py:334
+#: ../src/vcard.py:354
msgid ""
"You are interested in the contact's presence information, but he/she is not "
"interested in yours"
@@ -4691,14 +4852,14 @@ msgstr ""
"Sie sind an den Anwesenheitsinformationen des Kontakts interessiert, aber er/"
"sieist nicht an ihren interessiert"
-#: ../src/vcard.py:336
+#: ../src/vcard.py:356
msgid "You and the contact are interested in each other's presence information"
msgstr ""
"Sie und der Kontakt sind an den Anwesenheitsinformationen des anderen "
"interessiert"
#. None
-#: ../src/vcard.py:338
+#: ../src/vcard.py:358
msgid ""
"You are not interested in the contact's presence, and neither he/she is "
"interested in yours"
@@ -4706,24 +4867,24 @@ msgstr ""
"Sie sind nicht an der Anwesenheit des Kontakts interessiert, und er/sie "
"istnicht interessiert an ihrer"
-#: ../src/vcard.py:347
+#: ../src/vcard.py:367
msgid "You are waiting contact's answer about your subscription request"
msgstr "Sie warten auf die Antwort des Kontaktes auf ihre Abonnement-Anfrage"
-#: ../src/vcard.py:359 ../src/vcard.py:382
+#: ../src/vcard.py:379 ../src/vcard.py:402
msgid " resource with priority "
msgstr " resource mit Priorität "
-#: ../src/vcard.py:458
+#: ../src/vcard.py:479
msgid "Without a connection you can not publish your contact information."
msgstr ""
"Sie müssen angemeldet sein, um Kontakt-Informationen zu veröffentlichen"
-#: ../src/vcard.py:491
+#: ../src/vcard.py:512
msgid "Without a connection, you can not get your contact information."
msgstr "Sie müssen angemeldet sein, um Kontakt-Informationen abzurufen"
-#: ../src/vcard.py:495
+#: ../src/vcard.py:518
msgid "Personal details"
msgstr "Persönliche Details"
@@ -4731,31 +4892,30 @@ msgstr "Persönliche Details"
msgid "creating logs database"
msgstr "Erstelle Log-Datenbank"
-#: ../src/common/check_paths.py:82 ../src/common/check_paths.py:93
-#: ../src/common/check_paths.py:100
+#: ../src/common/check_paths.py:87 ../src/common/check_paths.py:98
+#: ../src/common/check_paths.py:105
#, python-format
msgid "%s is file but it should be a directory"
msgstr "%s ist eine Datei, kein Verzeichnis"
-#: ../src/common/check_paths.py:83 ../src/common/check_paths.py:94
-#: ../src/common/check_paths.py:101 ../src/common/check_paths.py:109
+#: ../src/common/check_paths.py:88 ../src/common/check_paths.py:99
+#: ../src/common/check_paths.py:106 ../src/common/check_paths.py:114
msgid "Gajim will now exit"
msgstr "Gajim wird nun beendet"
-#: ../src/common/check_paths.py:108
+#: ../src/common/check_paths.py:113
#, python-format
msgid "%s is directory but should be file"
msgstr "%s ist ein Verzeichnis, sollte aber eine Datei sein"
-#: ../src/common/check_paths.py:124
+#: ../src/common/check_paths.py:129
#, python-format
msgid "creating %s directory"
msgstr "Erstelle Verzeichnis %s"
#: ../src/common/exceptions.py:32
msgid "pysqlite2 (aka python-pysqlite2) dependency is missing. Exiting..."
-msgstr ""
-"pysqlite2 (auch python-pysqlite2 genannt) Abhängigkeit fehlt. Beende..."
+msgstr "pysqlite2 (auch python-pysqlite2 genannt) Abhängigkeit fehlt. Beende ..."
#: ../src/common/exceptions.py:40
msgid "Service not available: Gajim is not running, or remote_control is False"
@@ -4801,46 +4961,50 @@ msgid "List (space separated) of rows (accounts and groups) that are collapsed"
msgstr ""
#: ../src/common/config.py:83
+msgid "Language used by speller"
+msgstr "Sprache der Rechtschreib-Prüfung"
+
+#: ../src/common/config.py:84
msgid ""
"'always' - print time for every message.\n"
"'sometimes' - print time every print_ichat_every_foo_minutes minute.\n"
"'never' - never print time."
msgstr ""
-#: ../src/common/config.py:84
+#: ../src/common/config.py:85
msgid ""
"Value of fuzziness from 1 to 4 or 0 to disable fuzzyclock. 1 is the most "
"precise clock, 4 the less precise one."
msgstr ""
-#: ../src/common/config.py:87
+#: ../src/common/config.py:88
msgid "Treat * / _ pairs as possible formatting characters."
msgstr "Behandle * / _ Paare als mögliche Formatierungszeichen."
-#: ../src/common/config.py:88
+#: ../src/common/config.py:89
msgid ""
"If True, do not remove */_ . So *abc* will be bold but with * * not removed."
msgstr ""
"Falls wahr, entferne */_ nicht. So wird *abc* fett aber * * wird nicht "
"entfernt."
-#: ../src/common/config.py:98
+#: ../src/common/config.py:99
msgid ""
"Character to add after nickname when using nick completion (tab) in group "
"chat"
msgstr ""
-#: ../src/common/config.py:99
+#: ../src/common/config.py:100
msgid ""
"Character to propose to add after desired nickname when desired nickname is "
"used by someone else in group chat"
msgstr ""
-#: ../src/common/config.py:131
+#: ../src/common/config.py:132
msgid "Add * and [n] in roster title?"
msgstr "Füge * und [n] in die Kontaktleiste?"
-#: ../src/common/config.py:132
+#: ../src/common/config.py:133
msgid ""
"How many lines to remember from previous conversation when a chat tab/window "
"is reopened."
@@ -4848,12 +5012,12 @@ msgstr ""
"Wie viele Zeilen von der vorherigen Unterhaltung gespeichert werden, wenn "
"ein Chat Tab/Fenster wieder geöffnet wird."
-#: ../src/common/config.py:133
+#: ../src/common/config.py:134
msgid "How many minutes should last lines from previous conversation last."
msgstr ""
"Wie viele Minuten die Zeilen vom vorherigen Chat angezeigt werden sollen."
-#: ../src/common/config.py:134
+#: ../src/common/config.py:135
msgid ""
"Send message on Ctrl+Enter and with Enter make new line (Mirabilis ICQ "
"Client default behaviour)."
@@ -4861,11 +5025,11 @@ msgstr ""
"Sende Nachricht mit Strg+Enter und mache bei Enter einen Zeilenumbruch "
"(Mirabilis ICQ-Client Standardeinstellung)."
-#: ../src/common/config.py:136
+#: ../src/common/config.py:137
msgid "How many lines to store for Ctrl+KeyUP."
msgstr "Wie viele Zeilen für Strg+BildAuf gespeichert werden."
-#: ../src/common/config.py:139
+#: ../src/common/config.py:140
#, python-format
msgid ""
"Either custom url with %s in it where %s is the word/phrase or 'WIKTIONARY' "
@@ -4874,23 +5038,23 @@ msgstr ""
"Entweder eine spezielle URL mit %s, wobei %s das Word/Phrase ist oder "
"'WIKTIONARY', was bedeutet, dass ein Wörterbuch verwendet wird."
-#: ../src/common/config.py:142
+#: ../src/common/config.py:143
msgid "If checked, Gajim can be controlled remotely using gajim-remote."
msgstr ""
"Falls aktiviert kann Gajim aus der Ferne mittels gajim-remote kontrolliert "
"werden."
-#: ../src/common/config.py:145
+#: ../src/common/config.py:146
msgid ""
"When not printing time for every message (print_time==sometimes), print it "
"every x minutes"
msgstr ""
-#: ../src/common/config.py:146
+#: ../src/common/config.py:147
msgid "Ask before closing a group chat tab/window."
msgstr "Fragen, bevor ein Gruppenchat Tab/Fenster geschlossen wird."
-#: ../src/common/config.py:147
+#: ../src/common/config.py:148
msgid ""
"Always ask before closing group chat tab/window in this space separated list "
"of room jids."
@@ -4898,7 +5062,7 @@ msgstr ""
"Immer fragen, bevor ein Gruppenchat-Fenster/Tab aus der Leerzeichen-"
"seperierten\"Liste von Raumnamen geschlossen wird."
-#: ../src/common/config.py:148
+#: ../src/common/config.py:149
msgid ""
"Never ask before closing group chat tab/window in this space separated list "
"of room jids."
@@ -4906,7 +5070,7 @@ msgstr ""
"Niemals fragen, bevor ein Gruppenchat-Fenster/Tab aus der Leerzeichen-"
"seperiertenListe von Raumnamen geschlossen wird."
-#: ../src/common/config.py:151
+#: ../src/common/config.py:152
msgid ""
"Overrides the host we send for File Transfer in case of address translation/"
"port forwarding."
@@ -4914,24 +5078,23 @@ msgstr ""
"Überschreibt den Host für Datenübertragung für den Fall von NAT/Port-"
"Forwarding"
-#: ../src/common/config.py:153
+#: ../src/common/config.py:154
msgid "IEC standard says KiB = 1024 bytes, KB = 1000 bytes."
msgstr "IEC-Standard sagt KiB = 1024 Byte, KB = 1000 Byte."
-#: ../src/common/config.py:161
+#: ../src/common/config.py:162
msgid "Show tab when only one conversation?"
msgstr "Tab bei einer einzelnen Unterhaltung anzeigen?"
-#: ../src/common/config.py:162
-#, fuzzy
+#: ../src/common/config.py:163
msgid "Show tabbed notebook border in chat windows?"
-msgstr "Tab-Grenze bei nur einer Konversation anzeigen?"
+msgstr "Tab-Grenze im Chat-Fenster anzeigen?"
-#: ../src/common/config.py:163
+#: ../src/common/config.py:164
msgid "Show close button in tab?"
msgstr "Schließen-Button im Tab anzeigen?"
-#: ../src/common/config.py:176
+#: ../src/common/config.py:177
msgid ""
"A semicolon-separated list of words that will be highlighted in multi-user "
"chat."
@@ -4939,7 +5102,7 @@ msgstr ""
"Eine mit Semilkolon getrennte List von Worten, die in einem Gruppenchat "
"hervorgehoben werden."
-#: ../src/common/config.py:177
+#: ../src/common/config.py:178
msgid ""
"If True, quits Gajim when X button of Window Manager is clicked. This "
"setting is taken into account only if trayicon is used."
@@ -4948,11 +5111,11 @@ msgstr ""
"geklickt wird.Diese Option wird nur beachtet, wenn die Trayicon-"
"Unterstützung aktiv ist."
-#: ../src/common/config.py:178
+#: ../src/common/config.py:179
msgid "If True, Gajim registers for xmpp:// on each startup."
msgstr "Falls wahr, registriert Gajim bei jedem Start für xmpp://."
-#: ../src/common/config.py:179
+#: ../src/common/config.py:180
msgid ""
"If True, Gajim will display an icon on each tab containing unread messages. "
"Depending on the theme, this icon may be animated."
@@ -4960,7 +5123,7 @@ msgstr ""
"Falls wahr. wird Gajim ein Icon auf jedem Tab mit ungelesenen Nachrichten "
"anzeigen.Abhängig vom Theme ist dieses Icon animiert."
-#: ../src/common/config.py:180
+#: ../src/common/config.py:181
msgid ""
"If True, Gajim will display the status message, if not empty, for every "
"contact under the contact name in roster window"
@@ -4968,7 +5131,7 @@ msgstr ""
"Falls aktiviert, wird Gajim für jeden Kontakt die Statusnachricht, falls "
"nicht leer, unter dem jeweiligen Kontaktnamen im Roster anzeigen"
-#: ../src/common/config.py:182
+#: ../src/common/config.py:183
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."
@@ -4976,16 +5139,15 @@ msgstr ""
"Falls aktiviert fragt Gajim nach einem Avatar für jeden Kontakt, der beim "
"letzten Mal keinen hatte oder einen veralteten hat."
-#: ../src/common/config.py:183
-#, fuzzy
+#: ../src/common/config.py:184
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."
msgstr ""
"Falls deaktiviert, werden Sie keine Statuszeile im Chat sehen, wenn ein "
-"Kontaktseinen Status und/oder seine Statusnachricht ändert."
+"Kontakt seinen Status und/oder seine Statusnachricht ändert."
-#: ../src/common/config.py:184
+#: ../src/common/config.py:185
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 "
@@ -4994,11 +5156,17 @@ msgid ""
"room"
msgstr ""
-#: ../src/common/config.py:187
-msgid "Don't show avatar for the transport itself."
+#: ../src/common/config.py:188
+msgid ""
+"If True, restored messages will use a smaller font than the default one."
msgstr ""
+"Falls aktiv, werden wiederhergestellte Nachrichten mit einer kleineren Schrift als der Standard dargestellt."
#: ../src/common/config.py:189
+msgid "Don't show avatar for the transport itself."
+msgstr "Zeige keinen Avatar für den Transport selber."
+
+#: ../src/common/config.py:191
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 "
@@ -5008,7 +5176,7 @@ msgstr ""
"sind, lasse das Fenster bei neuen Ereignissen aufblitzen (Standardverhalten "
"in den meisten Window-Managers) "
-#: ../src/common/config.py:191
+#: ../src/common/config.py:193
msgid ""
"Jabberd1.4 does not like sha info when one join a password protected room. "
"Turn this option to False to stop sending sha info in groupchat presences"
@@ -5018,7 +5186,7 @@ msgstr ""
"senden"
#. always, never, peracct, pertype should not be translated
-#: ../src/common/config.py:194
+#: ../src/common/config.py:196
msgid ""
"Controls the window where new messages are placed.\n"
"'always' - All messages are sent to a single window.\n"
@@ -5037,53 +5205,57 @@ msgstr ""
"einem speziellen Fenster. Falls Sie diese Option ändern, muss Gajim neu "
"gestartet werden, damit die Änderungen übernommen werden"
-#: ../src/common/config.py:195
+#: ../src/common/config.py:197
msgid "If False, you will no longer see the avatar in the chat window"
msgstr ""
"Wenn deaktiviert, werden Sie den Avatar nicht mehr im Chatfenster sehen"
-#: ../src/common/config.py:196
+#: ../src/common/config.py:198
msgid "If True, pressing the escape key closes a tab/window"
msgstr "Wenn aktiviert, schließt die Escape-Taste ein Tab/Fenster"
-#: ../src/common/config.py:197
+#: ../src/common/config.py:199
msgid "Hides the buttons in group chat window"
msgstr "Versteckt die Button im Gruppenchat-Fenster"
-#: ../src/common/config.py:198
+#: ../src/common/config.py:200
msgid "Hides the buttons in two persons chat window"
msgstr "Versteckt die Buttons im Zwei-Personen-Chatfenster"
-#: ../src/common/config.py:199
+#: ../src/common/config.py:201
msgid "Hides the banner in a group chat window"
msgstr "Versteckt das Banner im Gruppenchat-Fenster"
-#: ../src/common/config.py:200
+#: ../src/common/config.py:202
msgid "Hides the banner in two persons chat window"
msgstr "Versteckt das Banner im Zwei-Personen-Chatfenster"
-#: ../src/common/config.py:201
+#: ../src/common/config.py:203
msgid "Hides the room occupants list in groupchat window"
msgstr "Versteckt die Raumbenutzerliste im Gruppenchat-Fenster"
-#: ../src/common/config.py:202
+#: ../src/common/config.py:204
msgid "Merge consecutive nickname in chat window"
msgstr ""
-#: ../src/common/config.py:203
+#: ../src/common/config.py:205
msgid "Indentation when using merge consecutive nickame"
msgstr ""
-#: ../src/common/config.py:204
+#: ../src/common/config.py:206
msgid "List of colors that will be used to color nicknames in groupchats"
-msgstr ""
+msgstr "Farbliste, die für die Einfärbung von Spitzenamen im Gruppenchat verwendet wird"
+
+#: ../src/common/config.py:207
+msgid "Ctrl-Tab go to next composing tab when none is unread"
+msgstr "Strg-Tab, um zum nächsten Verfassen-Fenster zu gehen wenn keines ungelesen ist"
#. yes, no, ask
-#: ../src/common/config.py:237
+#: ../src/common/config.py:240
msgid "Jabberd2 workaround"
msgstr "Jabberd2 Workaround"
-#: ../src/common/config.py:241
+#: ../src/common/config.py:244
msgid ""
"If checked, Gajim will use your IP and proxies defined in "
"file_transfer_proxies option for file transfer."
@@ -5091,59 +5263,97 @@ msgstr ""
"Wenn aktiviert, wird Gajim Ihre IP und die in der file_transfer_proxies "
"Optiondefinierten Proxies für den Datentransfer verwenden."
-#: ../src/common/config.py:297
+#: ../src/common/config.py:305
+msgid "all or space separated status"
+msgstr "alle oder Leerzeichen-getrennter Status"
+
+#: ../src/common/config.py:306
+msgid "'yes', 'no', or 'both'"
+msgstr "'ja', 'nein' oder 'beide'"
+
+#: ../src/common/config.py:307 ../src/common/config.py:309
+#: ../src/common/config.py:310 ../src/common/config.py:313
+#: ../src/common/config.py:314
+msgid "'yes', 'no' or ''"
+msgstr "'ja, 'nein' oder ''"
+
+#: ../src/common/config.py:320
msgid "Sleeping"
msgstr "Schlafen"
-#: ../src/common/config.py:298
+#: ../src/common/config.py:321
msgid "Back soon"
msgstr "Bin gleich wieder da"
-#: ../src/common/config.py:298
+#: ../src/common/config.py:321
msgid "Back in some minutes."
msgstr "Bin in ein paar Minuten zurück."
-#: ../src/common/config.py:299
+#: ../src/common/config.py:322
msgid "Eating"
msgstr "Essen"
-#: ../src/common/config.py:299
+#: ../src/common/config.py:322
msgid "I'm eating, so leave me a message."
msgstr "Ich esse gerade, also hinterlasst eine Nachricht."
-#: ../src/common/config.py:300
+#: ../src/common/config.py:323
msgid "Movie"
msgstr "Film"
-#: ../src/common/config.py:300
+#: ../src/common/config.py:323
msgid "I'm watching a movie."
msgstr "Ich sehe mir einen Film an."
-#: ../src/common/config.py:301
+#: ../src/common/config.py:324
msgid "Working"
msgstr "Arbeit"
-#: ../src/common/config.py:301
+#: ../src/common/config.py:324
msgid "I'm working."
msgstr "Ich arbeite."
-#: ../src/common/config.py:302
+#: ../src/common/config.py:325
msgid "Phone"
msgstr "Telefon"
-#: ../src/common/config.py:302
+#: ../src/common/config.py:325
msgid "I'm on the phone."
msgstr "Ich telefoniere."
-#: ../src/common/config.py:303
+#: ../src/common/config.py:326
msgid "Out"
msgstr "Draußen"
-#: ../src/common/config.py:303
+#: ../src/common/config.py:326
msgid "I'm out enjoying life"
msgstr "Ich bin draußen und genieße das Leben"
-#: ../src/common/config.py:312
+#: ../src/common/config.py:330
+msgid "I'm avavilable"
+msgstr "Ich bin angemeldet"
+
+#: ../src/common/config.py:331
+msgid "I'm free for chat"
+msgstr "Ich bin frei zum Chatten"
+
+#: ../src/common/config.py:332
+msgid "Be right back"
+msgstr "Bin gleich zurück"
+
+#: ../src/common/config.py:333
+msgid "I'm not available"
+msgstr "Ich bin nicht da"
+
+#: ../src/common/config.py:334
+msgid "Do not disturb"
+msgstr "Bitte nicht stören"
+
+#: ../src/common/config.py:335 ../src/common/config.py:336
+msgid "Bye !"
+msgstr "Auf Wiedersehen!"
+
+#: ../src/common/config.py:345
msgid ""
"Sound to play when a MUC message contains one of the words in "
"muc_highlight_words, or when a MUC message contains your nickname."
@@ -5152,7 +5362,7 @@ msgstr ""
"muc_highlights_works-Liste enthält oder wenn die Nachricht Ihren Nickname "
"erhält."
-#: ../src/common/config.py:313
+#: ../src/common/config.py:346
msgid ""
"Sound to play when any MUC message arrives. (This setting is taken into "
"account only if notify_on_all_muc_messages is True)"
@@ -5160,97 +5370,97 @@ msgstr ""
"Abzuspielender Ton, falls eine MUC-Nachricht ankommt. (Diese Einstellung "
"wirdnur beachtet, wenn notify_on_all_muc_messages aktiviert ist)"
-#: ../src/common/config.py:321 ../src/common/optparser.py:185
+#: ../src/common/config.py:354 ../src/common/optparser.py:188
msgid "green"
msgstr "grün"
-#: ../src/common/config.py:325 ../src/common/optparser.py:171
+#: ../src/common/config.py:358 ../src/common/optparser.py:174
msgid "grocery"
msgstr "gemüse"
-#: ../src/common/config.py:329
+#: ../src/common/config.py:362
msgid "human"
msgstr "menschlich"
-#: ../src/common/config.py:333
+#: ../src/common/config.py:366
msgid "marine"
msgstr "Marine"
-#: ../src/common/connection.py:172
+#: ../src/common/connection.py:176
#, python-format
msgid "Connection with account \"%s\" has been lost"
msgstr "Verbindung mit Konto \"%s\" abgebrochen"
-#: ../src/common/connection.py:173
+#: ../src/common/connection.py:177
msgid "To continue sending and receiving messages, you will need to reconnect."
msgstr ""
"Um weiter Senden um Empfangen zu können, müssen Sie sich erneut verbinden."
-#: ../src/common/connection.py:185 ../src/common/connection.py:211
+#: ../src/common/connection.py:189 ../src/common/connection.py:215
#, python-format
msgid "Transport %s answered wrongly to register request."
msgstr "Transport %s beantwortete unsere Registrierungsanfrage nicht korrekt."
#. wrong answer
-#: ../src/common/connection.py:210
+#: ../src/common/connection.py:214
msgid "Invalid answer"
msgstr "Ungültige Antwort"
-#: ../src/common/connection.py:397 ../src/common/connection.py:433
-#: ../src/common/connection.py:857
+#: ../src/common/connection.py:401 ../src/common/connection.py:437
+#: ../src/common/connection.py:860
#, python-format
msgid "Could not connect to \"%s\""
msgstr "Konnte nicht mit %s verbinden"
-#: ../src/common/connection.py:411
+#: ../src/common/connection.py:415
#, python-format
msgid "Connected to server %s:%s with %s"
msgstr "Verbunden mit Server %s:%s mit %s"
-#: ../src/common/connection.py:434
+#: ../src/common/connection.py:438
msgid "Check your connection or try again later"
msgstr "Überprüfen Sie die Verbindung oder versuchen Sie es später noch einmal"
-#: ../src/common/connection.py:459
+#: ../src/common/connection.py:463
#, python-format
msgid "Authentication failed with \"%s\""
msgstr "Authentifizierung mit \"%s\" fehlgeschlagen"
-#: ../src/common/connection.py:460
+#: ../src/common/connection.py:464
msgid "Please check your login and password for correctness."
msgstr "Bitte überprüfen Sie ihren Benutzernamen und Passwort."
#. We didn't set a passphrase
-#: ../src/common/connection.py:573
+#: ../src/common/connection.py:577
msgid "OpenPGP passphrase was not given"
msgstr "Keine OpenPGP-Passphrase gewählt"
#. %s is the account name here
-#: ../src/common/connection.py:575
+#: ../src/common/connection.py:579
#, python-format
msgid "You will be connected to %s without OpenPGP."
msgstr "Sie werden ohne OpenPGP mit %s verbunden."
#. do not show I'm invisible!
-#: ../src/common/connection.py:612
+#: ../src/common/connection.py:616
msgid "invisible"
msgstr "unsichtbar"
-#: ../src/common/connection.py:613
+#: ../src/common/connection.py:617
msgid "offline"
msgstr "abgemeldet"
-#: ../src/common/connection.py:614
+#: ../src/common/connection.py:618
#, python-format
msgid "I'm %s"
msgstr "Ich bin %s"
#. we're not english
-#: ../src/common/connection.py:699
+#: ../src/common/connection.py:703
msgid "[This message is encrypted]"
msgstr "[Diese Nachricht ist verschlüsselt]"
-#: ../src/common/connection.py:742
+#: ../src/common/connection.py:746
#, python-format
msgid ""
"Subject: %s\n"
@@ -5259,58 +5469,75 @@ msgstr ""
"Thema: %s\n"
"%s"
-#: ../src/common/connection.py:795 ../src/common/connection_handlers.py:1511
-msgid "I would like to add you to my roster."
-msgstr "Ich würde dich gerne zu meiner Liste hinzufügen."
+#: ../src/common/connection.py:884
+msgid "Not fetched because of invisible status"
+msgstr "Nicht abgeholt aufgrund eines Unsichtbar-Status"
-#: ../src/common/connection_handlers.py:49
+#: ../src/common/connection_handlers.py:51
msgid "Unable to load idle module"
msgstr "Fehler beim Betreten des Raum"
-#: ../src/common/connection_handlers.py:581
+#: ../src/common/connection_handlers.py:176
+msgid "Wrong host"
+msgstr "Falscher Host"
+
+#: ../src/common/connection_handlers.py:176
+msgid ""
+"The host you configured as the ft_override_host_to_send advanced option is "
+"not valid, so ignored."
+msgstr ""
+"Der Host, den Sie für die erweiterte Option ft_override_host_to_send angeben "
+"haben ist ungültig und wird ignoriert."
+
+#: ../src/common/connection_handlers.py:588
#, python-format
msgid "Registration information for transport %s has not arrived in time"
msgstr ""
"Registrierungsinformation für Transport %s sind nicht rechtzeitig angekommen"
+#: ../src/common/connection_handlers.py:1438
+#, python-format
+msgid "Nickname not allowed: %s"
+msgstr "Spitzname nicht erlaubt: %s"
+
#. password required to join
#. we are banned
#. room does not exist
-#: ../src/common/connection_handlers.py:1450
-#: ../src/common/connection_handlers.py:1453
-#: ../src/common/connection_handlers.py:1456
-#: ../src/common/connection_handlers.py:1459
-#: ../src/common/connection_handlers.py:1462
-#: ../src/common/connection_handlers.py:1465
-#: ../src/common/connection_handlers.py:1473
+#: ../src/common/connection_handlers.py:1507
+#: ../src/common/connection_handlers.py:1510
+#: ../src/common/connection_handlers.py:1513
+#: ../src/common/connection_handlers.py:1516
+#: ../src/common/connection_handlers.py:1519
+#: ../src/common/connection_handlers.py:1522
+#: ../src/common/connection_handlers.py:1530
msgid "Unable to join room"
msgstr "Fehler beim Betreten des Raum"
-#: ../src/common/connection_handlers.py:1451
+#: ../src/common/connection_handlers.py:1508
msgid "A password is required to join this room."
msgstr "Für das Betreten dieses Raumes ist ein Passwort nötig."
-#: ../src/common/connection_handlers.py:1454
+#: ../src/common/connection_handlers.py:1511
msgid "You are banned from this room."
msgstr "Sie sind aus diesem Raum gebannt"
-#: ../src/common/connection_handlers.py:1457
+#: ../src/common/connection_handlers.py:1514
msgid "Such room does not exist."
msgstr "Dieser Raum existiert nicht."
-#: ../src/common/connection_handlers.py:1460
+#: ../src/common/connection_handlers.py:1517
msgid "Room creation is restricted."
msgstr "Raumerstellung ist beschränkt"
-#: ../src/common/connection_handlers.py:1463
+#: ../src/common/connection_handlers.py:1520
msgid "Your registered nickname must be used."
msgstr "Sie müssen Ihren registrierten Spitznamen verwenden"
-#: ../src/common/connection_handlers.py:1466
+#: ../src/common/connection_handlers.py:1523
msgid "You are not in the members list."
msgstr "Sie sind nicht in der Mitgliedliste"
-#: ../src/common/connection_handlers.py:1474
+#: ../src/common/connection_handlers.py:1531
msgid ""
"Your desired nickname is in use or registered by another occupant.\n"
"Please specify another nickname below:"
@@ -5319,226 +5546,222 @@ msgstr ""
"Benutzer registriert.\n"
"Bitte geben Sie einen anderen Benutzernamen an:"
+#: ../src/common/connection_handlers.py:1577
+msgid "I would like to add you to my roster."
+msgstr "Ich würde dich gerne zu meiner Liste hinzufügen."
+
#. BE CAREFUL: no con.updateRosterItem() in a callback
-#: ../src/common/connection_handlers.py:1519
+#: ../src/common/connection_handlers.py:1598
#, python-format
msgid "we are now subscribed to %s"
msgstr "wir haben jetzt %s abonniert"
-#: ../src/common/connection_handlers.py:1521
+#: ../src/common/connection_handlers.py:1600
#, python-format
msgid "unsubscribe request from %s"
msgstr "Anfrage zur Kündigung des Abonnements von %s"
-#: ../src/common/connection_handlers.py:1523
+#: ../src/common/connection_handlers.py:1602
#, python-format
msgid "we are now unsubscribed from %s"
msgstr "%s hat das Abonnement beendet"
-#: ../src/common/connection_handlers.py:1680
-#, fuzzy, python-format
+#: ../src/common/connection_handlers.py:1772
+#, 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 % ist nicht RfC-konform. Sie wird nicht zu ihrem Roster hinzugefügt. "
-"VerwendenSie ein Roster-Managmenttool wie http://jru.jabberstudio.org/ um "
-"ihn zu entfernen."
+"Jid %s ist nicht RFC-konform. Sie wird nicht zu ihrem Roster hinzugefügt. "
+"Verwenden Sie ein Roster-Managment-Tool wie <http://jru.jabberstudio.org/>, "
+"um ihn zu entfernen"
-#: ../src/common/helpers.py:100
+#: ../src/common/helpers.py:101
msgid "Invalid character in username."
msgstr "Ungültiges Zeichen im Benutzernamen"
-#: ../src/common/helpers.py:105
+#: ../src/common/helpers.py:106
msgid "Server address required."
msgstr "Server-Adresse wird benötigt."
-#: ../src/common/helpers.py:110
+#: ../src/common/helpers.py:111
msgid "Invalid character in hostname."
msgstr "Ungültiges Zeichen in Hostname."
-#: ../src/common/helpers.py:116
+#: ../src/common/helpers.py:117
msgid "Invalid character in resource."
msgstr "Ungültiges Zeichen in Resource."
#. GiB means gibibyte
-#: ../src/common/helpers.py:156
+#: ../src/common/helpers.py:157
#, python-format
msgid "%s GiB"
msgstr "%s GiB"
#. GB means gigabyte
-#: ../src/common/helpers.py:159
+#: ../src/common/helpers.py:160
#, python-format
msgid "%s GB"
msgstr "%s GB"
#. MiB means mibibyte
-#: ../src/common/helpers.py:163
+#: ../src/common/helpers.py:164
#, python-format
msgid "%s MiB"
msgstr "%s MiB"
#. MB means megabyte
-#: ../src/common/helpers.py:166
+#: ../src/common/helpers.py:167
#, python-format
msgid "%s MB"
msgstr "%s MB"
#. KiB means kibibyte
-#: ../src/common/helpers.py:170
+#: ../src/common/helpers.py:171
#, python-format
msgid "%s KiB"
msgstr "%s KiB"
#. KB means kilo bytes
-#: ../src/common/helpers.py:173
+#: ../src/common/helpers.py:174
#, python-format
msgid "%s KB"
msgstr "%s KB"
#. B means bytes
-#: ../src/common/helpers.py:176
+#: ../src/common/helpers.py:177
#, python-format
msgid "%s B"
msgstr "%s B"
-#: ../src/common/helpers.py:205
+#: ../src/common/helpers.py:206
msgid "_Busy"
msgstr "_Beschäftigt"
-#: ../src/common/helpers.py:207
+#: ../src/common/helpers.py:208
msgid "Busy"
msgstr "Beschäftigt"
-#: ../src/common/helpers.py:210
+#: ../src/common/helpers.py:211
msgid "_Not Available"
msgstr "_Nicht verfügbar"
-#: ../src/common/helpers.py:212
-msgid "Not Available"
-msgstr "Nicht verfügbar"
-
-#: ../src/common/helpers.py:215
+#: ../src/common/helpers.py:216
msgid "_Free for Chat"
msgstr "_Frei zum Chatten"
-#: ../src/common/helpers.py:217
+#: ../src/common/helpers.py:218
msgid "Free for Chat"
msgstr "Frei zum Chatten"
-#: ../src/common/helpers.py:220
+#: ../src/common/helpers.py:221
msgid "_Available"
msgstr "_Angemeldet"
-#: ../src/common/helpers.py:222
+#: ../src/common/helpers.py:223
msgid "Available"
msgstr "Angemeldet"
-#: ../src/common/helpers.py:224
+#: ../src/common/helpers.py:225
msgid "Connecting"
msgstr "Verbinde"
-#: ../src/common/helpers.py:227
+#: ../src/common/helpers.py:228
msgid "A_way"
msgstr "_Abwesend"
-#: ../src/common/helpers.py:229
-msgid "Away"
-msgstr "Abwesend"
-
-#: ../src/common/helpers.py:232
+#: ../src/common/helpers.py:233
msgid "_Offline"
msgstr "A_bgemeldet"
-#: ../src/common/helpers.py:234
+#: ../src/common/helpers.py:235
msgid "Offline"
msgstr "Abgemeldet"
-#: ../src/common/helpers.py:237
+#: ../src/common/helpers.py:238
msgid "_Invisible"
msgstr "_Unsichtbar"
-#: ../src/common/helpers.py:243
+#: ../src/common/helpers.py:244
msgid "?contact has status:Unknown"
msgstr "Unbekannt"
-#: ../src/common/helpers.py:245
+#: ../src/common/helpers.py:246
msgid "?contact has status:Has errors"
msgstr "Hat Fehler"
-#: ../src/common/helpers.py:250
+#: ../src/common/helpers.py:251
msgid "?Subscription we already have:None"
msgstr "Keine"
-#: ../src/common/helpers.py:252
+#: ../src/common/helpers.py:253
msgid "To"
msgstr "An"
-#: ../src/common/helpers.py:254
+#: ../src/common/helpers.py:255
msgid "From"
msgstr "Von"
-#: ../src/common/helpers.py:256
+#: ../src/common/helpers.py:257
msgid "Both"
msgstr "Beide"
-#: ../src/common/helpers.py:264
+#: ../src/common/helpers.py:265
msgid "?Ask (for Subscription):None"
msgstr "Keine:"
-#: ../src/common/helpers.py:266
+#: ../src/common/helpers.py:267
msgid "Subscribe"
msgstr "Abonnieren"
-#: ../src/common/helpers.py:275
+#: ../src/common/helpers.py:276
msgid "?Group Chat Contact Role:None"
msgstr "Keine"
-#: ../src/common/helpers.py:278
+#: ../src/common/helpers.py:279
msgid "Moderators"
msgstr "Moderatoren"
-#: ../src/common/helpers.py:280
+#: ../src/common/helpers.py:281
msgid "Moderator"
msgstr "Moderator"
-#: ../src/common/helpers.py:283
+#: ../src/common/helpers.py:284
msgid "Participants"
msgstr "Teilnehmer"
-#: ../src/common/helpers.py:285
+#: ../src/common/helpers.py:286
msgid "Participant"
msgstr "Teilnehmer"
-#: ../src/common/helpers.py:288
+#: ../src/common/helpers.py:289
msgid "Visitors"
msgstr "Besucher"
-#: ../src/common/helpers.py:290
+#: ../src/common/helpers.py:291
msgid "Visitor"
msgstr "Besucher"
-#: ../src/common/helpers.py:326
+#: ../src/common/helpers.py:327
msgid "is paying attention to the conversation"
msgstr "beobachtet diese Unterhaltung"
-#: ../src/common/helpers.py:328
+#: ../src/common/helpers.py:329
msgid "is doing something else"
msgstr "tut etwas anderes"
-#: ../src/common/helpers.py:330
+#: ../src/common/helpers.py:331
msgid "is composing a message..."
-msgstr "schreibt im Moment..."
+msgstr "schreibt im Moment ..."
#. paused means he or she was compoing but has stopped for a while
-#: ../src/common/helpers.py:333
+#: ../src/common/helpers.py:334
msgid "paused composing a message"
-msgstr "schreibt im Moment nicht mehr..."
+msgstr "schreibt im Moment nicht mehr ..."
-#: ../src/common/helpers.py:335
+#: ../src/common/helpers.py:336
msgid "has closed the chat window or tab"
-msgstr "hat das Chatfenster oder den Reiter geschlossen"
+msgstr "hat das Chatfenster oder den Tab geschlossen"
#. we talk about a file
#: ../src/common/optparser.py:60
@@ -5546,14 +5769,63 @@ msgstr "hat das Chatfenster oder den Reiter geschlossen"
msgid "error: cannot open %s for reading"
msgstr "Fehler: %s kann nicht zum Lesen geöffnet werden"
-#: ../src/common/optparser.py:171
+#: ../src/common/optparser.py:174
msgid "gtk+"
msgstr "gtk+"
-#: ../src/common/optparser.py:180 ../src/common/optparser.py:181
+#: ../src/common/optparser.py:183 ../src/common/optparser.py:184
msgid "cyan"
msgstr "cyan"
+#, fuzzy
+#~ msgid "_Account:"
+#~ msgstr "Konto:"
+
+#~ msgid "_Subscribe"
+#~ msgstr "_Abonnieren"
+
+#, fuzzy
+#~ msgid "Add"
+#~ msgstr "Adresse"
+
+#, fuzzy
+#~ msgid "Away "
+#~ msgstr "Abwesend"
+
+#, fuzzy
+#~ msgid "Down"
+#~ msgstr "Download"
+
+#, fuzzy
+#~ msgid "List of special notifications settings"
+#~ msgstr "Füge speziellen Hinweis für %s hinzu"
+
+#, fuzzy
+#~ msgid "Not Available "
+#~ msgstr "Nicht verfügbar"
+
+#, fuzzy
+#~ msgid "Default"
+#~ msgstr "Löschen"
+
+#~ msgid "Contact Information"
+#~ msgstr "Kontakt-Information"
+
+#~ msgid "Format: YYYY-MM-DD"
+#~ msgstr "Format: JJJJ-MM-TT"
+
+#~ msgid "Jabber"
+#~ msgstr "Jabber"
+
+#~ msgid "Set _Avatar"
+#~ msgstr "_Avatar wählen"
+
+#~ msgid "Migrating Logs..."
+#~ msgstr "Migriere Logs..."
+
+#~ msgid "Please wait while logs are being migrated..."
+#~ msgstr "Bitte warten Sie, während die Logs migriert werden..."
+
#~ msgid "Automatically authorize contact"
#~ msgstr "Kontakt automatisch autorisieren"
@@ -5760,9 +6032,6 @@ msgstr "cyan"
#~ msgid "(%s/s)"
#~ msgstr "(%s/s)"
-#~ msgid "Service not available"
-#~ msgstr "Dienst nicht verfügbar"
-
#~ msgid "Session bus is not available."
#~ msgstr "Session-Bus nicht verfügbar."
diff --git a/po/eo.po b/po/eo.po
index d027108ff..3f8bbaf9c 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -2622,7 +2622,7 @@ msgstr "Fine ne malpli ol aliajn ni dankas ĉiujn pakaĵvartistojn."
#. here you write your name in the form Name FamilyName <someone@somewhere>
#: ../src/dialogs.py:610
msgid "translator-credits"
-msgstr "tradukistoj"
+msgstr "Segrio Ĥliutĉin <Sergey.Khlutchin@gmail.com>"
#: ../src/dialogs.py:873
#, python-format
diff --git a/po/es.po b/po/es.po
index 90df8f6e3..82ec8ea51 100644
--- a/po/es.po
+++ b/po/es.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gajim 2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-07-04 00:03+0200\n"
+"POT-Creation-Date: 2006-09-03 01:19+0200\n"
"PO-Revision-Date: 2005-05-21 20:03+0100\n"
"Last-Translator: Membris Khan <membriskhan@gmail.com>\n"
"Language-Team: none\n"
@@ -24,7 +24,7 @@ msgstr "Un cliente de Jabber en GTK"
#: ../gajim.desktop.in.h:2
msgid "Gajim Instant Messenger"
-msgstr ""
+msgstr "Mensajero Gajim"
#: ../gajim.desktop.in.h:3
msgid "Jabber IM Client"
@@ -63,7 +63,7 @@ msgid ""
"\n"
"Please wait..."
msgstr ""
-"<b>La cuenta está siendo creada</b>\n"
+"<b>Se está creando La cuenta</b>\n"
"\n"
"Por favor espera..."
@@ -143,7 +143,7 @@ msgstr "_Finalizar"
#: ../data/glade/account_creation_wizard_window.glade.h:21
#: ../data/glade/manage_proxies_window.glade.h:9
msgid "_Host:"
-msgstr ""
+msgstr "_Servidor"
#: ../data/glade/account_creation_wizard_window.glade.h:22
#: ../data/glade/account_modification_window.glade.h:45
@@ -158,7 +158,7 @@ msgstr "_Puerto:"
#: ../data/glade/account_creation_wizard_window.glade.h:24
#, fuzzy
msgid "_Retype Password:"
-msgstr "C_ontraseña:"
+msgstr "Con_traseña:"
#: ../data/glade/account_creation_wizard_window.glade.h:25
msgid "_Server:"
@@ -234,16 +234,16 @@ msgid "Edit Personal Information..."
msgstr "_Editar información personal personales..."
#: ../data/glade/account_modification_window.glade.h:14
-#: ../data/glade/roster_window.glade.h:5 ../src/notify.py:308
-#: ../src/notify.py:330 ../src/notify.py:342 ../src/tooltips.py:350
+#: ../data/glade/roster_window.glade.h:5 ../src/notify.py:395
+#: ../src/notify.py:417 ../src/notify.py:429 ../src/tooltips.py:350
msgid "Gajim"
msgstr "Gajim"
#: ../data/glade/account_modification_window.glade.h:15
-#: ../data/glade/preferences_window.glade.h:44
+#: ../data/glade/preferences_window.glade.h:45
#: ../data/glade/vcard_information_window.glade.h:17
-#: ../src/roster_window.py:290 ../src/roster_window.py:1184
-#: ../src/roster_window.py:1405
+#: ../src/roster_window.py:299 ../src/roster_window.py:1258
+#: ../src/roster_window.py:1642
msgid "General"
msgstr "General"
@@ -299,14 +299,14 @@ msgstr "Información acerca de tí a guardar en el servidor"
msgid "Manage..."
msgstr "Gestionar..."
-#: ../data/glade/account_modification_window.glade.h:25 ../src/config.py:1448
+#: ../data/glade/account_modification_window.glade.h:25 ../src/config.py:1515
msgid "No key selected"
msgstr "Ninguna clave seleccionada"
#. None means no proxy profile selected
-#: ../data/glade/account_modification_window.glade.h:27 ../src/config.py:1053
-#: ../src/config.py:1058 ../src/config.py:1230 ../src/config.py:1505
-#: ../src/config.py:1578 ../src/config.py:2282
+#: ../data/glade/account_modification_window.glade.h:27 ../src/config.py:1112
+#: ../src/config.py:1117 ../src/config.py:1289 ../src/config.py:1573
+#: ../src/config.py:1646 ../src/config.py:2356
msgid "None"
msgstr "Ninguno"
@@ -385,7 +385,6 @@ msgid "Use file transfer proxies"
msgstr "lista de transferencias"
#: ../data/glade/account_modification_window.glade.h:43
-#: ../data/glade/add_new_contact_window.glade.h:6
msgid "_Jabber ID:"
msgstr "ID de _Jabber: "
@@ -420,41 +419,56 @@ msgstr "_Eliminar"
#: ../data/glade/add_new_contact_window.glade.h:1
#, fuzzy
+msgid "A_ccount:"
+msgstr "Cuentas:"
+
+#: ../data/glade/add_new_contact_window.glade.h:2
+#, fuzzy
msgid "A_llow this contact to view my status"
msgstr "Permitirle ver mi estado"
-#: ../data/glade/add_new_contact_window.glade.h:2
+#: ../data/glade/add_new_contact_window.glade.h:3
msgid "Add New Contact"
msgstr "Añadir un contacto"
-#: ../data/glade/add_new_contact_window.glade.h:3
+#: ../data/glade/add_new_contact_window.glade.h:4
msgid "I would like to add you to my contact list."
msgstr "Me gustaría añadirte a mi lista de contactos."
-#: ../data/glade/add_new_contact_window.glade.h:4
-#, fuzzy
-msgid "_Account:"
-msgstr "Cuentas:"
-
#: ../data/glade/add_new_contact_window.glade.h:5
+msgid ""
+"You have to register to this transport\n"
+"to be able to add a contact from this\n"
+"protocol. Click on register button to\n"
+"proceed."
+msgstr ""
+
+#: ../data/glade/add_new_contact_window.glade.h:9
+msgid ""
+"You must be connected to the transport to be able\n"
+"to add a contact from this protocol."
+msgstr ""
+
+#: ../data/glade/add_new_contact_window.glade.h:11
#, fuzzy
msgid "_Group:"
msgstr "Grupo:"
-#: ../data/glade/add_new_contact_window.glade.h:7
+#: ../data/glade/add_new_contact_window.glade.h:12
msgid "_Nickname:"
msgstr "_Alias:"
-#: ../data/glade/add_new_contact_window.glade.h:8
+#: ../data/glade/add_new_contact_window.glade.h:13
#, fuzzy
msgid "_Protocol:"
msgstr "Protocolo:"
-#: ../data/glade/add_new_contact_window.glade.h:9
-msgid "_Subscribe"
-msgstr "_Añadir"
+#: ../data/glade/add_new_contact_window.glade.h:14
+#, fuzzy
+msgid "_Register"
+msgstr "_Suscribir"
-#: ../data/glade/add_new_contact_window.glade.h:10
+#: ../data/glade/add_new_contact_window.glade.h:15
#, fuzzy
msgid "_User ID:"
msgstr "Identificador:"
@@ -544,82 +558,63 @@ msgstr "<b>Sonidos</b>"
#: ../data/glade/advanced_notifications_window.glade.h:5
#, fuzzy
-msgid "Add"
-msgstr "Dirección"
-
-#: ../data/glade/advanced_notifications_window.glade.h:6
-#, fuzzy
msgid "Advanced Actions"
msgstr "Acciones A_vanzadas"
-#: ../data/glade/advanced_notifications_window.glade.h:7
+#: ../data/glade/advanced_notifications_window.glade.h:6
#, fuzzy
msgid "Advanced Notifications Control"
msgstr "Editor avanzado de configurción"
-#: ../data/glade/advanced_notifications_window.glade.h:8
+#: ../data/glade/advanced_notifications_window.glade.h:7
#, fuzzy
msgid "All Status "
msgstr "Estado: "
-#: ../data/glade/advanced_notifications_window.glade.h:9
-msgid "And I "
-msgstr ""
-
-#: ../data/glade/advanced_notifications_window.glade.h:10
-#, fuzzy
-msgid "Away "
+#: ../data/glade/advanced_notifications_window.glade.h:8
+#: ../src/common/helpers.py:230
+msgid "Away"
msgstr "Ausente"
-#: ../data/glade/advanced_notifications_window.glade.h:11
+#: ../data/glade/advanced_notifications_window.glade.h:9
#, fuzzy
msgid "Busy "
msgstr "Ocupado"
-#: ../data/glade/advanced_notifications_window.glade.h:12
+#: ../data/glade/advanced_notifications_window.glade.h:10
msgid "Don't have "
msgstr ""
-#: ../data/glade/advanced_notifications_window.glade.h:13
-#, fuzzy
-msgid "Down"
-msgstr "Descarga"
-
-#: ../data/glade/advanced_notifications_window.glade.h:14
+#: ../data/glade/advanced_notifications_window.glade.h:11
msgid "Have "
msgstr ""
-#: ../data/glade/advanced_notifications_window.glade.h:15
-#: ../src/common/helpers.py:239
+#: ../data/glade/advanced_notifications_window.glade.h:12
+#: ../src/common/helpers.py:240
msgid "Invisible"
msgstr "Invisible"
-#: ../data/glade/advanced_notifications_window.glade.h:16
+#: ../data/glade/advanced_notifications_window.glade.h:13
#, fuzzy
msgid "Launch a command"
msgstr "comando"
-#: ../data/glade/advanced_notifications_window.glade.h:17
-#, fuzzy
-msgid "List of special notifications settings"
-msgstr "<b>Notificationes Visuales</b>"
-
-#: ../data/glade/advanced_notifications_window.glade.h:18
-#, fuzzy
-msgid "Not Available "
+#: ../data/glade/advanced_notifications_window.glade.h:14
+#: ../src/common/helpers.py:213
+msgid "Not Available"
msgstr "No disponible"
-#: ../data/glade/advanced_notifications_window.glade.h:19
+#: ../data/glade/advanced_notifications_window.glade.h:15
#, fuzzy
msgid "Online / Free For Chat"
msgstr "Libre para hablar"
-#: ../data/glade/advanced_notifications_window.glade.h:20
+#: ../data/glade/advanced_notifications_window.glade.h:16
#, fuzzy
msgid "Play a sound"
msgstr "Reproducir _sonidos"
-#: ../data/glade/advanced_notifications_window.glade.h:21
+#: ../data/glade/advanced_notifications_window.glade.h:17
msgid ""
"Receive a Message\n"
"Contact Connected\n"
@@ -632,75 +627,75 @@ msgid ""
"File Transfert Finished"
msgstr ""
-#: ../data/glade/advanced_notifications_window.glade.h:30
+#: ../data/glade/advanced_notifications_window.glade.h:26
msgid "Some special(s) status..."
msgstr ""
-#: ../data/glade/advanced_notifications_window.glade.h:31
-msgid "Up"
-msgstr ""
-
-#: ../data/glade/advanced_notifications_window.glade.h:32
+#: ../data/glade/advanced_notifications_window.glade.h:27
msgid "When "
-msgstr ""
+msgstr "Cuando"
-#: ../data/glade/advanced_notifications_window.glade.h:33
+#: ../data/glade/advanced_notifications_window.glade.h:28
msgid "_Activate Windows manager UrgencyHint to make chat taskbar to flash"
msgstr ""
-#: ../data/glade/advanced_notifications_window.glade.h:34
+#: ../data/glade/advanced_notifications_window.glade.h:29
#, fuzzy
msgid "_Disable auto opening chat window"
msgstr "Preguntar antes de cerrar una ventana/petaña de salón de charla."
-#: ../data/glade/advanced_notifications_window.glade.h:35
+#: ../data/glade/advanced_notifications_window.glade.h:30
msgid "_Disable existing popup window"
msgstr ""
-#: ../data/glade/advanced_notifications_window.glade.h:36
+#: ../data/glade/advanced_notifications_window.glade.h:31
msgid "_Disable existing sound for this event"
msgstr ""
-#: ../data/glade/advanced_notifications_window.glade.h:37
+#: ../data/glade/advanced_notifications_window.glade.h:32
msgid "_Disable showing event in roster"
msgstr ""
-#: ../data/glade/advanced_notifications_window.glade.h:38
+#: ../data/glade/advanced_notifications_window.glade.h:33
msgid "_Disable showing event in systray"
msgstr ""
-#: ../data/glade/advanced_notifications_window.glade.h:39
+#: ../data/glade/advanced_notifications_window.glade.h:34
msgid "_Inform me with a popup window"
msgstr ""
-#: ../data/glade/advanced_notifications_window.glade.h:40
+#: ../data/glade/advanced_notifications_window.glade.h:35
#, fuzzy
msgid "_Open chat window with user"
msgstr "Usar una sola ventana de conversación con pestañas"
-#: ../data/glade/advanced_notifications_window.glade.h:41
+#: ../data/glade/advanced_notifications_window.glade.h:36
#, fuzzy
msgid "_Show event in roster"
msgstr "Sólo mostrar en la _lista de contactos"
-#: ../data/glade/advanced_notifications_window.glade.h:42
+#: ../data/glade/advanced_notifications_window.glade.h:37
#, fuzzy
msgid "_Show event in systray"
msgstr "Sólo mostrar en la _lista de contactos"
-#: ../data/glade/advanced_notifications_window.glade.h:43
+#: ../data/glade/advanced_notifications_window.glade.h:38
+msgid "and I "
+msgstr ""
+
+#: ../data/glade/advanced_notifications_window.glade.h:39
msgid ""
"contact(s)\n"
"group(s)\n"
"everybody"
msgstr ""
-#: ../data/glade/advanced_notifications_window.glade.h:46
+#: ../data/glade/advanced_notifications_window.glade.h:42
#, fuzzy
msgid "for "
msgstr "Puerto: "
-#: ../data/glade/advanced_notifications_window.glade.h:47
+#: ../data/glade/advanced_notifications_window.glade.h:43
msgid "when I'm "
msgstr ""
@@ -738,7 +733,7 @@ msgstr "Entrar a un grupo de charla"
#: ../data/glade/chat_context_menu.glade.h:2
#: ../data/glade/chat_control_popup_menu.glade.h:4
#: ../data/glade/gc_occupants_menu.glade.h:2
-#: ../data/glade/roster_contact_context_menu.glade.h:8
+#: ../data/glade/roster_contact_context_menu.glade.h:9
msgid "_Add to Roster"
msgstr "_Añadir a la lista de contactos"
@@ -769,7 +764,7 @@ msgid "Click to see past conversations with this contact"
msgstr "Click para ver anteriores conversaciones con este contacto"
#: ../data/glade/chat_control_popup_menu.glade.h:2
-#: ../data/glade/roster_contact_context_menu.glade.h:6
+#: ../data/glade/roster_contact_context_menu.glade.h:7
msgid "Send _File"
msgstr "Enviar archivo"
@@ -785,7 +780,7 @@ msgstr "Vista _compacta Alt+C"
#: ../data/glade/chat_control_popup_menu.glade.h:6
#: ../data/glade/gc_control_popup_menu.glade.h:7
#: ../data/glade/gc_occupants_menu.glade.h:5
-#: ../data/glade/roster_contact_context_menu.glade.h:11
+#: ../data/glade/roster_contact_context_menu.glade.h:12
msgid "_History"
msgstr "_Histórico"
@@ -889,8 +884,7 @@ msgstr ""
"Contacto\n"
"Banner"
-#: ../data/glade/gajim_themes_window.glade.h:6
-#: ../data/glade/privacy_list_edit_window.glade.h:4 ../src/config.py:326
+#: ../data/glade/gajim_themes_window.glade.h:6 ../src/config.py:327
msgid "Active"
msgstr "Activo"
@@ -1072,7 +1066,7 @@ msgstr "Denegar"
msgid "Invitation Received"
msgstr "Invitación recibida"
-#: ../data/glade/join_groupchat_window.glade.h:1 ../src/dialogs.py:941
+#: ../data/glade/join_groupchat_window.glade.h:1 ../src/dialogs.py:1067
msgid "Join Group Chat"
msgstr "Entrar a un salón de chat"
@@ -1102,7 +1096,7 @@ msgid "Server:"
msgstr "Servidor:"
#: ../data/glade/join_groupchat_window.glade.h:7 ../src/disco.py:1145
-#: ../src/disco.py:1507
+#: ../src/disco.py:1510
msgid "_Join"
msgstr "_Entrar"
@@ -1165,7 +1159,7 @@ msgstr "Usar autentificación"
msgid "Click to insert an emoticon (Alt+M)"
msgstr "Haz click para insertar un emoticono (Alt+E)"
-#: ../data/glade/message_window.glade.h:2 ../src/chat_control.py:966
+#: ../data/glade/message_window.glade.h:2 ../src/chat_control.py:1026
msgid "OpenPGP Encryption"
msgstr "Encriptación OpenPGP"
@@ -1282,7 +1276,7 @@ msgstr ""
msgid "B_efore nickname:"
msgstr "Antes del nombre:"
-#: ../data/glade/preferences_window.glade.h:28 ../src/chat_control.py:718
+#: ../data/glade/preferences_window.glade.h:28 ../src/chat_control.py:773
msgid "Chat"
msgstr "Charla"
@@ -1302,38 +1296,43 @@ msgstr ""
#: ../data/glade/preferences_window.glade.h:31
#, fuzzy
+msgid "Default Status Messages"
+msgstr "Mensaje de estado"
+
+#: ../data/glade/preferences_window.glade.h:32
+#, fuzzy
msgid "Default status _iconset:"
msgstr "_Iconos de estado por defecto:"
-#: ../data/glade/preferences_window.glade.h:32
+#: ../data/glade/preferences_window.glade.h:33
msgid "Display _extra email details"
msgstr ""
-#: ../data/glade/preferences_window.glade.h:33
+#: ../data/glade/preferences_window.glade.h:34
#, fuzzy
msgid "Display a_vatars of contacts in roster"
msgstr "Mostrar en el roster los avatares de los contactos"
-#: ../data/glade/preferences_window.glade.h:34
+#: ../data/glade/preferences_window.glade.h:35
#, fuzzy
msgid "Display status _messages of contacts in roster"
msgstr "Mostrar en el roster los mensajes de estado de los contactos"
-#: ../data/glade/preferences_window.glade.h:35
+#: ../data/glade/preferences_window.glade.h:36
#, fuzzy
msgid "E_very 5 minutes"
msgstr "Cada 5 _minutos"
-#: ../data/glade/preferences_window.glade.h:36
+#: ../data/glade/preferences_window.glade.h:37
#, fuzzy
msgid "Emoticons:"
msgstr "Gestionar emoticonos"
-#: ../data/glade/preferences_window.glade.h:37
+#: ../data/glade/preferences_window.glade.h:38
msgid "Events"
msgstr "Eventos"
-#: ../data/glade/preferences_window.glade.h:38
+#: ../data/glade/preferences_window.glade.h:39
#, fuzzy
msgid ""
"Gajim can send and receive meta-information related to a conversation you "
@@ -1343,7 +1342,7 @@ msgstr ""
"Gajim puede enviar y recibir meta-información relacionada con una "
"conversación que puedas tener con un contacto"
-#: ../data/glade/preferences_window.glade.h:39
+#: ../data/glade/preferences_window.glade.h:40
#, fuzzy
msgid ""
"Gajim will automatically show new events by poping up the relative window"
@@ -1351,7 +1350,7 @@ msgstr ""
"Gajim mostrará automáticamente los nuevos mensajes recibidos en una ventana "
"de charla o pestaña en una ventana de chat existente"
-#: ../data/glade/preferences_window.glade.h:40
+#: ../data/glade/preferences_window.glade.h:41
#, fuzzy
msgid ""
"Gajim will notify you for new events via a popup in the bottom right of the "
@@ -1360,7 +1359,7 @@ msgstr ""
"Gajim te notificará de nuevos mensajes a través de un mensaje emergente en "
"la esquina inferior derecha de la pantalla"
-#: ../data/glade/preferences_window.glade.h:41
+#: ../data/glade/preferences_window.glade.h:42
msgid ""
"Gajim will notify you via a popup window in the bottom right of the screen "
"about contacts that just signed in"
@@ -1368,7 +1367,7 @@ msgstr ""
"Gajim notificará con un mensaje emergente en la parte inferior derecha de la "
"pantalla cuando un contacto se conecte"
-#: ../data/glade/preferences_window.glade.h:42
+#: ../data/glade/preferences_window.glade.h:43
msgid ""
"Gajim will notify you via a popup window in the bottom right of the screen "
"about contacts that just signed out"
@@ -1376,13 +1375,13 @@ msgstr ""
"Gajim notificará con un mensaje emergente en la parte inferior derecha de la "
"pantalla cuando un contacto se desconecte"
-#: ../data/glade/preferences_window.glade.h:43
+#: ../data/glade/preferences_window.glade.h:44
#, fuzzy
msgid ""
"Gajim will only change the icon of the contact that triggered the new event"
msgstr "Gajim sólo cambiará el icono del contacto que envía el nuevo mensaje"
-#: ../data/glade/preferences_window.glade.h:45
+#: ../data/glade/preferences_window.glade.h:46
#, fuzzy
msgid ""
"If checked, Gajim will display avatars of contacts in roster window and in "
@@ -1390,7 +1389,7 @@ msgid ""
msgstr ""
"Si está marcado, Gajim mostrará los avatares de los usuarios en el roster"
-#: ../data/glade/preferences_window.glade.h:46
+#: ../data/glade/preferences_window.glade.h:47
#, fuzzy
msgid ""
"If checked, Gajim will display status messages of contacts under the contact "
@@ -1399,7 +1398,7 @@ msgstr ""
"Si está marcado, Gajim mostrará los mensajes de estado de los contactos "
"debajo de cada nombre en el roster"
-#: ../data/glade/preferences_window.glade.h:47
+#: ../data/glade/preferences_window.glade.h:48
msgid ""
"If checked, Gajim will remember the roster and chat window positions in the "
"screen and the sizes of them next time you run it"
@@ -1407,7 +1406,7 @@ msgstr ""
"Si está marcado, Gajim recordará la posición y tamaño de la ventana de "
"contactos para futuras ejecuciones"
-#: ../data/glade/preferences_window.glade.h:48
+#: ../data/glade/preferences_window.glade.h:49
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, "
@@ -1417,7 +1416,7 @@ msgstr ""
"un contacto de MSN tendrá el icono de msn equivalente para su estado en "
"línea, ausente, ocupado, etc...)"
-#: ../data/glade/preferences_window.glade.h:49
+#: ../data/glade/preferences_window.glade.h:50
#, fuzzy
msgid ""
"If not disabled, Gajim will replace ascii smilies like ':)' with equivalent "
@@ -1426,12 +1425,12 @@ msgstr ""
"Si está marcado, Gajim reemplazará emoticonos de texto como ':)' por su "
"equivalente en iconos"
-#: ../data/glade/preferences_window.glade.h:50
+#: ../data/glade/preferences_window.glade.h:51
#, fuzzy
msgid "Ma_nage..."
msgstr "Gestionar..."
-#: ../data/glade/preferences_window.glade.h:51
+#: ../data/glade/preferences_window.glade.h:52
msgid ""
"Never\n"
"Always\n"
@@ -1439,84 +1438,84 @@ msgid ""
"Per type"
msgstr ""
-#: ../data/glade/preferences_window.glade.h:55
+#: ../data/glade/preferences_window.glade.h:56
msgid "Notify me about contacts that: "
msgstr "Notificar cuand un contacto: "
-#: ../data/glade/preferences_window.glade.h:56
+#: ../data/glade/preferences_window.glade.h:57
msgid "Notify on new _GMail email"
msgstr ""
-#: ../data/glade/preferences_window.glade.h:57
+#: ../data/glade/preferences_window.glade.h:58
msgid "On every _message"
msgstr "En cada _mensaje"
-#: ../data/glade/preferences_window.glade.h:58
+#: ../data/glade/preferences_window.glade.h:59
#, fuzzy
msgid "One message _window:"
msgstr "Enviar mensaje y cerrar ventana"
-#: ../data/glade/preferences_window.glade.h:59
+#: ../data/glade/preferences_window.glade.h:60
msgid "Play _sounds"
msgstr "Reproducir _sonidos"
-#: ../data/glade/preferences_window.glade.h:60
+#: ../data/glade/preferences_window.glade.h:61
msgid "Preferences"
msgstr "Preferencias"
-#: ../data/glade/preferences_window.glade.h:61
+#: ../data/glade/preferences_window.glade.h:62
msgid "Print time:"
msgstr "Insertar la hora:"
-#: ../data/glade/preferences_window.glade.h:62
+#: ../data/glade/preferences_window.glade.h:63
msgid "Save _position and size for roster and chat windows"
msgstr ""
"Guarda _posición y tamaño para las ventanas de conversaciones y lista de "
"contactos"
-#: ../data/glade/preferences_window.glade.h:63
+#: ../data/glade/preferences_window.glade.h:64
msgid "Show only in _roster"
msgstr "Sólo mostrar en la _lista de contactos"
-#: ../data/glade/preferences_window.glade.h:64
+#: ../data/glade/preferences_window.glade.h:65
msgid "Sign _in"
msgstr "Conectar"
-#: ../data/glade/preferences_window.glade.h:65
+#: ../data/glade/preferences_window.glade.h:66
msgid "Sign _out"
msgstr "_Desconectar"
-#: ../data/glade/preferences_window.glade.h:66
+#: ../data/glade/preferences_window.glade.h:67
msgid "Status"
msgstr "Estado"
-#: ../data/glade/preferences_window.glade.h:67
+#: ../data/glade/preferences_window.glade.h:68
#, fuzzy
msgid "T_heme:"
msgstr "Tema:"
-#: ../data/glade/preferences_window.glade.h:68
+#: ../data/glade/preferences_window.glade.h:69
msgid "The auto away status message"
msgstr "El mensaje de estado de auto-ausencia"
-#: ../data/glade/preferences_window.glade.h:69
+#: ../data/glade/preferences_window.glade.h:70
msgid "The auto not available status message"
msgstr "El mensaje de estado de no auto-no disponible"
-#: ../data/glade/preferences_window.glade.h:70
+#: ../data/glade/preferences_window.glade.h:71
msgid "Use _transports iconsets"
msgstr "_Usar los iconos del transporte"
-#: ../data/glade/preferences_window.glade.h:71
+#: ../data/glade/preferences_window.glade.h:72
msgid "Use system _default"
msgstr ""
-#: ../data/glade/preferences_window.glade.h:72
+#: ../data/glade/preferences_window.glade.h:73
#, fuzzy
msgid "Use t_rayicon (aka. notification area icon)"
msgstr "_Icono en el área de notificación"
-#: ../data/glade/preferences_window.glade.h:73
+#: ../data/glade/preferences_window.glade.h:74
#, fuzzy
msgid ""
"When a new event (message, file transfer request etc..) is received, the "
@@ -1529,106 +1528,106 @@ msgstr ""
"nuevo mensaje sólo aparecen cuando proceden de un contacto con el que no se "
"está hablando ya"
-#: ../data/glade/preferences_window.glade.h:74
+#: ../data/glade/preferences_window.glade.h:75
msgid "When new event is received"
msgstr "Cuando se reciba un nuevo evento"
-#: ../data/glade/preferences_window.glade.h:75
+#: ../data/glade/preferences_window.glade.h:76
#, fuzzy
msgid "_Advanced Notifications Control..."
msgstr "Editor avanzado de configurción"
-#: ../data/glade/preferences_window.glade.h:76
+#: ../data/glade/preferences_window.glade.h:77
#, fuzzy
msgid "_After time:"
msgstr "Después de la hora:"
-#: ../data/glade/preferences_window.glade.h:77
+#: ../data/glade/preferences_window.glade.h:78
#, fuzzy
msgid "_Before time:"
msgstr "Antes de la hora:"
-#: ../data/glade/preferences_window.glade.h:78
+#: ../data/glade/preferences_window.glade.h:79
msgid "_Browser:"
msgstr "_Navegador:"
-#: ../data/glade/preferences_window.glade.h:79
+#: ../data/glade/preferences_window.glade.h:80
#, fuzzy
msgid "_File manager:"
msgstr "Administrador de archivos:"
-#: ../data/glade/preferences_window.glade.h:80
+#: ../data/glade/preferences_window.glade.h:81
#, fuzzy
msgid "_Font:"
msgstr "Fuente:"
-#: ../data/glade/preferences_window.glade.h:81
+#: ../data/glade/preferences_window.glade.h:82
msgid "_Highlight misspelled words"
msgstr "_Resaltar errores ortográficos"
-#: ../data/glade/preferences_window.glade.h:82
+#: ../data/glade/preferences_window.glade.h:83
msgid "_Ignore events from contacts not in the roster"
msgstr "_Ignorar mensajes de contactos que no están en la lista de contactos"
-#: ../data/glade/preferences_window.glade.h:83
+#: ../data/glade/preferences_window.glade.h:84
#, fuzzy
msgid "_Incoming message:"
msgstr "Mensaje entrante:"
-#: ../data/glade/preferences_window.glade.h:84
+#: ../data/glade/preferences_window.glade.h:85
msgid "_Log status changes of contacts"
msgstr "_Registrar cambios de estado de los contactos"
-#: ../data/glade/preferences_window.glade.h:85
+#: ../data/glade/preferences_window.glade.h:86
msgid "_Mail client:"
msgstr "_Cliente de correo:"
-#: ../data/glade/preferences_window.glade.h:86
+#: ../data/glade/preferences_window.glade.h:87
msgid "_Never"
msgstr "_Nunca"
-#: ../data/glade/preferences_window.glade.h:87
+#: ../data/glade/preferences_window.glade.h:88
msgid "_Notify me about it"
msgstr "_Notificarme"
-#: ../data/glade/preferences_window.glade.h:88
+#: ../data/glade/preferences_window.glade.h:89
#, fuzzy
msgid "_Open..."
msgstr "Abrir..."
-#: ../data/glade/preferences_window.glade.h:89
+#: ../data/glade/preferences_window.glade.h:90
#, fuzzy
msgid "_Outgoing message:"
msgstr "Mensaje saliente:"
-#: ../data/glade/preferences_window.glade.h:90
+#: ../data/glade/preferences_window.glade.h:91
msgid "_Player:"
msgstr "_Reproductor:"
-#: ../data/glade/preferences_window.glade.h:91
+#: ../data/glade/preferences_window.glade.h:92
msgid "_Pop it up"
msgstr "_Emerger"
-#: ../data/glade/preferences_window.glade.h:92
+#: ../data/glade/preferences_window.glade.h:93
#, fuzzy
msgid "_Reset to Default Colors"
msgstr "Restablecer colores por defecto"
-#: ../data/glade/preferences_window.glade.h:93
+#: ../data/glade/preferences_window.glade.h:94
#, fuzzy
msgid "_Sort contacts by status"
msgstr "Ordenar contactos por estado"
-#: ../data/glade/preferences_window.glade.h:94
+#: ../data/glade/preferences_window.glade.h:95
#, fuzzy
msgid "_Status message:"
msgstr "Mensaje de estado:"
-#: ../data/glade/preferences_window.glade.h:95
+#: ../data/glade/preferences_window.glade.h:96
msgid "_URL:"
msgstr ""
-#: ../data/glade/preferences_window.glade.h:96
+#: ../data/glade/preferences_window.glade.h:97
msgid "minutes"
msgstr "minutos"
@@ -1645,18 +1644,22 @@ msgstr "<b>Formato del renglón</b>"
msgid "<i>Privacy List</i>"
msgstr ""
-#: ../data/glade/privacy_list_edit_window.glade.h:5 ../src/config.py:2281
-msgid "All"
+#: ../data/glade/privacy_list_edit_window.glade.h:4
+msgid "Active for this session"
msgstr ""
-#: ../data/glade/privacy_list_edit_window.glade.h:6
-msgid "Allow"
+#: ../data/glade/privacy_list_edit_window.glade.h:5
+#, fuzzy
+msgid "Active on each startup"
+msgstr "C_onectar al inicio de Gajim"
+
+#: ../data/glade/privacy_list_edit_window.glade.h:6 ../src/config.py:2355
+msgid "All"
msgstr ""
#: ../data/glade/privacy_list_edit_window.glade.h:7
-#, fuzzy
-msgid "Default"
-msgstr "Eliminar MOTD"
+msgid "Allow"
+msgstr ""
#: ../data/glade/privacy_list_edit_window.glade.h:9
#, fuzzy
@@ -1668,7 +1671,7 @@ msgstr "ID de Jabber:"
msgid "Order:"
msgstr "Servidor:"
-#: ../data/glade/privacy_list_edit_window.glade.h:11 ../src/dialogs.py:1626
+#: ../data/glade/privacy_list_edit_window.glade.h:11 ../src/dialogs.py:1761
msgid "Privacy List"
msgstr ""
@@ -1744,39 +1747,45 @@ msgid "Assign Open_PGP Key"
msgstr "Asignar clave OpenPGP"
#: ../data/glade/roster_contact_context_menu.glade.h:4
+#: ../src/roster_window.py:1621
msgid "Edit _Groups"
msgstr "Editar grupos"
#: ../data/glade/roster_contact_context_menu.glade.h:5
+#: ../src/roster_window.py:1579
+msgid "In_vite to"
+msgstr ""
+
+#: ../data/glade/roster_contact_context_menu.glade.h:6
#: ../data/glade/systray_context_menu.glade.h:1
msgid "Send Single _Message"
msgstr "Enviar mensaje"
-#: ../data/glade/roster_contact_context_menu.glade.h:7
+#: ../data/glade/roster_contact_context_menu.glade.h:8
msgid "Start _Chat"
msgstr "Iniciar conversación"
-#: ../data/glade/roster_contact_context_menu.glade.h:9
+#: ../data/glade/roster_contact_context_menu.glade.h:10
#, fuzzy
msgid "_Allow him/her to see my status"
msgstr "Permitirle ver mi estado"
-#: ../data/glade/roster_contact_context_menu.glade.h:10
+#: ../data/glade/roster_contact_context_menu.glade.h:11
#, fuzzy
msgid "_Forbid him/her to see my status"
msgstr "Prohibirle ver mi estado"
-#: ../data/glade/roster_contact_context_menu.glade.h:12
-#: ../src/roster_window.py:1482
+#: ../data/glade/roster_contact_context_menu.glade.h:13
+#: ../src/roster_window.py:1573 ../src/roster_window.py:1719
msgid "_Remove from Roster"
msgstr "_Eliminar del Roster"
-#: ../data/glade/roster_contact_context_menu.glade.h:13
-#: ../src/roster_window.py:1470
+#: ../data/glade/roster_contact_context_menu.glade.h:14
+#: ../src/roster_window.py:1707
msgid "_Rename"
msgstr "Renombrar"
-#: ../data/glade/roster_contact_context_menu.glade.h:14
+#: ../data/glade/roster_contact_context_menu.glade.h:15
msgid "_Subscription"
msgstr "_Subscripción"
@@ -1816,8 +1825,8 @@ msgstr "_Contenidos"
msgid "_Discover Services"
msgstr "_Descubrir servicios"
-#: ../data/glade/roster_window.glade.h:13 ../src/disco.py:1252
-#: ../src/roster_window.py:1462
+#: ../data/glade/roster_window.glade.h:13 ../src/disco.py:1255
+#: ../src/roster_window.py:1699
msgid "_Edit"
msgstr "_Editar"
@@ -2128,30 +2137,123 @@ msgstr "_Mensaje"
msgid "_Presence"
msgstr "_Presencia"
-#: ../src/advanced.py:65
+#: ../src/advanced.py:67
msgid "Preference Name"
msgstr "Nombre de la opción"
-#: ../src/advanced.py:71
+#: ../src/advanced.py:73
msgid "Value"
msgstr "Valor"
-#: ../src/advanced.py:80
+#: ../src/advanced.py:82
msgid "Type"
msgstr "Tipo"
#. we talk about option description in advanced configuration editor
-#: ../src/advanced.py:136
+#: ../src/advanced.py:138
msgid "(None)"
msgstr "(Ninguno)"
#. we talk about password
-#: ../src/advanced.py:235
+#: ../src/advanced.py:237
msgid "Hidden"
msgstr "Oculta"
+#. the next script, executed in the "po" directory,
+#. generates the following list.
+#. #!/bin/sh
+#. LANG=$(for i in *.po; do j=${i/.po/}; echo -n "_('"$j"')":"'"$j"'", ; done)
+#. echo "{_('en'):'en'",$LANG"}"
+#: ../src/chat_control.py:48
+msgid "en"
+msgstr "inglés"
+
+#: ../src/chat_control.py:48
+msgid "bg"
+msgstr "búlgaro"
+
+#: ../src/chat_control.py:48
+msgid "br"
+msgstr "bretón"
+
+#: ../src/chat_control.py:48
+msgid "cs"
+msgstr "checo"
+
+#: ../src/chat_control.py:48
+msgid "de"
+msgstr "alemán"
+
+#: ../src/chat_control.py:48
+msgid "el"
+msgstr "Griego"
+
+#: ../src/chat_control.py:48
+msgid "eo"
+msgstr "esperanto"
+
+#: ../src/chat_control.py:48
+msgid "es"
+msgstr "español"
+
+#: ../src/chat_control.py:48
+msgid "eu"
+msgstr "euskera"
+
+#: ../src/chat_control.py:48
+msgid "fr"
+msgstr "francés"
+
+#: ../src/chat_control.py:48
+msgid "hr"
+msgstr "croata"
+
+#: ../src/chat_control.py:48
+msgid "it"
+msgstr "italiano"
+
+#: ../src/chat_control.py:48
+msgid "nb"
+msgstr "noruego (2)"
+
+#: ../src/chat_control.py:48
+msgid "nl"
+msgstr "holandés"
+
+#: ../src/chat_control.py:48
+msgid "no"
+msgstr "noruego (of)"
+
+#: ../src/chat_control.py:48
+msgid "pl"
+msgstr "polaco"
+
+#: ../src/chat_control.py:48
+msgid "pt"
+msgstr "portugués"
+
+#: ../src/chat_control.py:48
+msgid "pt_BR"
+msgstr "portugués (Br)"
+
+#: ../src/chat_control.py:48
+msgid "ru"
+msgstr "ruso"
+
+#: ../src/chat_control.py:48
+msgid "sk"
+msgstr "eslovaco"
+
+#: ../src/chat_control.py:48
+msgid "sv"
+msgstr "sueco"
+
+#: ../src/chat_control.py:48
+msgid "zh_CN"
+msgstr "chino (China)"
+
#. FIXME: add a ui for this use spell.set_language()
-#: ../src/chat_control.py:163 ../src/dialogs.py:1291
+#: ../src/chat_control.py:180 ../src/dialogs.py:1424
msgid ""
"If that is not your language for which you want to highlight misspelled "
"words, then please set your $LANG as appropriate. Eg. for French do export "
@@ -2168,52 +2270,61 @@ msgstr ""
"El resalto de palabras mal escritas no será usado"
#. we are not connected
-#: ../src/chat_control.py:186 ../src/chat_control.py:391
+#: ../src/chat_control.py:208 ../src/chat_control.py:445
msgid "A connection is not available"
msgstr "No hay disponible una conexión"
-#: ../src/chat_control.py:187 ../src/chat_control.py:392
+#: ../src/chat_control.py:209 ../src/chat_control.py:446
msgid "Your message can not be sent until you are connected."
msgstr "Tu mensaje no será enviado mientras no estés conectado."
-#: ../src/chat_control.py:718
+#: ../src/chat_control.py:342
+msgid "Spelling language"
+msgstr ""
+
+#: ../src/chat_control.py:773
#, fuzzy
msgid "Chats"
msgstr "Charla"
+#: ../src/chat_control.py:959
+#, python-format
+msgid "%s from room %s"
+msgstr ""
+
#. we talk about a contact here
-#: ../src/chat_control.py:980
+#: ../src/chat_control.py:1040
#, fuzzy, python-format
msgid "%s has not broadcast an OpenPGP key, nor has one been assigned"
msgstr "%s no ha revelado su clave OpenPGP ni tú le has asignado una"
-#: ../src/chat_control.py:1106
+#: ../src/chat_control.py:1166
msgid "Encryption enabled"
msgstr "Encriptación activada"
-#: ../src/chat_control.py:1111
+#: ../src/chat_control.py:1171
msgid "Encryption disabled"
msgstr "Encriptación desactivada"
#. add_to_roster_menuitem
-#: ../src/chat_control.py:1239 ../src/conversation_textview.py:407
-#: ../src/dialogs.py:512 ../src/gajim.py:635 ../src/gajim.py:636
-#: ../src/gajim.py:955 ../src/roster_window.py:276
-#: ../src/roster_window.py:1335 ../src/roster_window.py:1645
-#: ../src/roster_window.py:1806 ../src/roster_window.py:1817
-#: ../src/roster_window.py:2123 ../src/roster_window.py:2179
-#: ../src/roster_window.py:2977 ../src/roster_window.py:2979
-#: ../src/common/helpers.py:39 ../src/common/helpers.py:241
+#: ../src/chat_control.py:1299 ../src/conversation_textview.py:475
+#: ../src/dialogs.py:604 ../src/gajim.py:657 ../src/gajim.py:658
+#: ../src/gajim.py:983 ../src/roster_window.py:285
+#: ../src/roster_window.py:1448 ../src/roster_window.py:1882
+#: ../src/roster_window.py:2083 ../src/roster_window.py:2094
+#: ../src/roster_window.py:2416 ../src/roster_window.py:2472
+#: ../src/roster_window.py:3277 ../src/roster_window.py:3279
+#: ../src/common/helpers.py:40 ../src/common/helpers.py:242
msgid "Not in Roster"
msgstr "no está en el roster"
#. %s is being replaced in the code with JID
-#: ../src/chat_control.py:1383
+#: ../src/chat_control.py:1443
#, python-format
msgid "You just received a new message from \"%s\""
msgstr "Acabas de recibir un nuevo mensaje de \"%s\""
-#: ../src/chat_control.py:1384
+#: ../src/chat_control.py:1444
msgid ""
"If you close this tab and you have history disabled, this message will be "
"lost."
@@ -2221,277 +2332,286 @@ msgstr ""
"Si cierras esta pestaña y tienes el regstro desactivado, este mensaje se "
"perderá."
-#: ../src/config.py:120 ../src/config.py:511
+#: ../src/config.py:121 ../src/config.py:541
msgid "Disabled"
msgstr ""
-#: ../src/config.py:199
+#: ../src/config.py:200
#, python-format
msgid "Every %s _minutes"
msgstr "Cada %s _minutos"
-#: ../src/config.py:334
+#: ../src/config.py:335
msgid "Event"
msgstr "Evento"
-#: ../src/config.py:881
+#: ../src/config.py:940
msgid "status message title"
msgstr "título del mensaje de estado"
-#: ../src/config.py:881
+#: ../src/config.py:940
msgid "status message text"
msgstr "texto del mensaje de estado"
-#: ../src/config.py:916
+#: ../src/config.py:975
msgid "First Message Received"
msgstr ""
-#: ../src/config.py:917
+#: ../src/config.py:976
#, fuzzy
msgid "Next Message Received"
msgstr "Nuevo mensaje"
-#: ../src/config.py:918
+#: ../src/config.py:977
#, fuzzy
msgid "Contact Connected"
msgstr "Nombre de contacto"
-#: ../src/config.py:919
+#: ../src/config.py:978
#, fuzzy
msgid "Contact Disconnected"
msgstr "Contacto conectado"
-#: ../src/config.py:920
+#: ../src/config.py:979
#, fuzzy
msgid "Message Sent"
msgstr "Mensaje"
-#: ../src/config.py:921
+#: ../src/config.py:980
msgid "Group Chat Message Highlight"
msgstr ""
-#: ../src/config.py:922
+#: ../src/config.py:981
msgid "Group Chat Message Received"
msgstr ""
-#: ../src/config.py:1112
+#: ../src/config.py:1171
msgid "OpenPGP is not usable in this computer"
msgstr "GPG no es usable en este ordenador"
-#: ../src/config.py:1154
+#: ../src/config.py:1213
msgid "You are currently connected to the server"
msgstr "Debes estar conectado para navegar los servicios"
-#: ../src/config.py:1155
+#: ../src/config.py:1214
msgid "To change the account name, you must be disconnected."
msgstr "Para cambiar el nombre de la cuenta, debes estar desconectado"
-#: ../src/config.py:1158 ../src/config.py:1715
+#: ../src/config.py:1217 ../src/config.py:1784
msgid "Unread events"
msgstr ""
-#: ../src/config.py:1159
+#: ../src/config.py:1218
#, fuzzy
msgid "To change the account name, you must read all pending events."
msgstr "Para cambiar el nombre de la cuenta, debes estar desconectado"
-#: ../src/config.py:1163
+#: ../src/config.py:1222
#, fuzzy
msgid "Account Name Already Used"
msgstr "El nombre de la cuenta está en uso"
-#: ../src/config.py:1164
+#: ../src/config.py:1223
msgid ""
"This name is already used by another of your accounts. Please choose another "
"name."
msgstr ""
-#: ../src/config.py:1168 ../src/config.py:1172
+#: ../src/config.py:1227 ../src/config.py:1231
msgid "Invalid account name"
msgstr "Nombre de cuenta no válido"
-#: ../src/config.py:1169
+#: ../src/config.py:1228
msgid "Account name cannot be empty."
msgstr "El nombre de la cuenta no puede estar vacío."
-#: ../src/config.py:1173
+#: ../src/config.py:1232
msgid "Account name cannot contain spaces."
msgstr "El nombre de la cuenta no puede contener espacios."
-#: ../src/config.py:1181 ../src/config.py:1187 ../src/config.py:1196
-#: ../src/config.py:2662
+#: ../src/config.py:1240 ../src/config.py:1246 ../src/config.py:1255
+#: ../src/config.py:2736
msgid "Invalid Jabber ID"
msgstr "ID de Jabber no válida"
-#: ../src/config.py:1188
+#: ../src/config.py:1247
msgid "A Jabber ID must be in the form \"user@servername\"."
msgstr "Una ID de Jabber debe estar en la forma \"usuario@nombreservidor\"."
-#: ../src/config.py:1244
+#: ../src/config.py:1303
msgid "Invalid entry"
msgstr "Entrada no válida"
-#: ../src/config.py:1245
+#: ../src/config.py:1304
msgid "Custom port must be a port number."
msgstr "El puerto personalizado debe ser un número de puerto"
-#: ../src/config.py:1366
+#: ../src/config.py:1428
msgid "Be right back."
msgstr ""
-#: ../src/config.py:1376
+#: ../src/config.py:1438
msgid "Relogin now?"
msgstr ""
-#: ../src/config.py:1377
+#: ../src/config.py:1439
msgid "If you want all the changes to apply instantly, you must relogin."
msgstr ""
-#: ../src/config.py:1403
+#: ../src/config.py:1465
msgid "No such account available"
msgstr "No está disponible dicha cuenta"
-#: ../src/config.py:1404
+#: ../src/config.py:1466
msgid "You must create your account before editing your personal information."
msgstr "Debes crear una cuenta antes de editar tu información personal"
-#: ../src/config.py:1410 ../src/dialogs.py:925 ../src/dialogs.py:1099
-#: ../src/disco.py:410 ../src/vcard.py:457 ../src/vcard.py:490
+#: ../src/config.py:1472 ../src/dialogs.py:1051 ../src/dialogs.py:1229
+#: ../src/disco.py:411 ../src/vcard.py:462 ../src/vcard.py:495
msgid "You are not connected to the server"
msgstr "No estás conectado al servidor"
-#: ../src/config.py:1411
+#: ../src/config.py:1473
msgid "Without a connection, you can not edit your personal information."
msgstr "Sin una conexión, no puedes editar tu información personal"
-#: ../src/config.py:1435
+#: ../src/config.py:1477
+msgid "Your server doesn't support Vcard"
+msgstr ""
+
+#: ../src/config.py:1478
+#, fuzzy
+msgid "Your server can't save your personal information."
+msgstr "Debes crear una cuenta antes de editar tu información personal"
+
+#: ../src/config.py:1502
msgid "Failed to get secret keys"
msgstr "Error obteniendo las claves secretas"
-#: ../src/config.py:1436
+#: ../src/config.py:1503
msgid "There was a problem retrieving your OpenPGP secret keys."
msgstr "Ha habido un problema recuperando tus claves secretas OpenPGP"
-#: ../src/config.py:1439
+#: ../src/config.py:1506
#, fuzzy
msgid "OpenPGP Key Selection"
msgstr "Encriptación OpenPGP"
-#: ../src/config.py:1440
+#: ../src/config.py:1507
msgid "Choose your OpenPGP key"
msgstr "Elige tu clave OpenPGP"
#. Name column
-#: ../src/config.py:1667 ../src/disco.py:727 ../src/disco.py:1466
+#: ../src/config.py:1736 ../src/disco.py:727 ../src/disco.py:1469
#: ../src/history_window.py:77
msgid "Name"
msgstr "Nombre"
-#: ../src/config.py:1670
+#: ../src/config.py:1739
msgid "Server"
msgstr "Servidor"
-#: ../src/config.py:1716
+#: ../src/config.py:1785
msgid "Read all pending events before removing this account."
msgstr ""
-#: ../src/config.py:1911
+#: ../src/config.py:1982
#, python-format
msgid "Edit %s"
msgstr "Editar %s"
-#: ../src/config.py:1913
+#: ../src/config.py:1984
#, python-format
msgid "Register to %s"
msgstr "Registrar a %s"
-#: ../src/config.py:1984
+#: ../src/config.py:2055
msgid "Ban List"
msgstr ""
-#: ../src/config.py:1985
+#: ../src/config.py:2056
#, fuzzy
msgid "Member List"
msgstr "_Miembro"
-#: ../src/config.py:1986
+#: ../src/config.py:2057
#, fuzzy
msgid "Owner List"
msgstr "_Propietario"
-#: ../src/config.py:1987
+#: ../src/config.py:2058
#, fuzzy
msgid "Administrator List"
msgstr "_Administrador"
#. Address column
#. holds JID (who said this)
-#: ../src/config.py:2020 ../src/disco.py:734 ../src/history_manager.py:151
+#: ../src/config.py:2091 ../src/disco.py:734 ../src/history_manager.py:151
msgid "JID"
msgstr ""
-#: ../src/config.py:2028
+#: ../src/config.py:2099
msgid "Reason"
msgstr ""
-#: ../src/config.py:2033
+#: ../src/config.py:2104
#, fuzzy
msgid "Nick"
msgstr "_Expulsar"
-#: ../src/config.py:2037
+#: ../src/config.py:2108
#, fuzzy
msgid "Role"
msgstr "Puesto:"
-#: ../src/config.py:2058
+#: ../src/config.py:2129
#, fuzzy
msgid "Banning..."
msgstr "Expulsando a %s"
#. You can move '\n' before user@domain if that line is TOO BIG
-#: ../src/config.py:2060
+#: ../src/config.py:2131
#, fuzzy
msgid ""
"<b>Whom do you want to ban?</b>\n"
"\n"
msgstr "<b>¿Qué quieres hacer?</b>"
-#: ../src/config.py:2062
+#: ../src/config.py:2133
msgid "Adding Member..."
msgstr ""
-#: ../src/config.py:2063
+#: ../src/config.py:2134
#, fuzzy
msgid ""
"<b>Whom do you want to make a member?</b>\n"
"\n"
msgstr "<b>¿Qué quieres hacer?</b>"
-#: ../src/config.py:2065
+#: ../src/config.py:2136
msgid "Adding Owner..."
msgstr ""
-#: ../src/config.py:2066
+#: ../src/config.py:2137
#, fuzzy
msgid ""
"<b>Whom do you want to make a owner?</b>\n"
"\n"
msgstr "<b>¿Qué quieres hacer?</b>"
-#: ../src/config.py:2068
+#: ../src/config.py:2139
#, fuzzy
msgid "Adding Administrator..."
msgstr "_Administrador"
-#: ../src/config.py:2069
+#: ../src/config.py:2140
#, fuzzy
msgid ""
"<b>Whom do you want to make an administrator?</b>\n"
"\n"
msgstr "<b>¿Qué quieres hacer?</b>"
-#: ../src/config.py:2070
+#: ../src/config.py:2141
msgid ""
"Can be one of the following:\n"
"1. user@domain/resource (only that resource matches).\n"
@@ -2501,91 +2621,91 @@ msgid ""
"domain/resource, or address containing a subdomain."
msgstr ""
-#: ../src/config.py:2166
+#: ../src/config.py:2238
#, python-format
msgid "Removing %s account"
msgstr "Eliminando la cuenta %s"
-#: ../src/config.py:2183 ../src/roster_window.py:1857
+#: ../src/config.py:2255 ../src/roster_window.py:2147
msgid "Password Required"
msgstr "Contraseña requerida"
-#: ../src/config.py:2184 ../src/roster_window.py:1858
+#: ../src/config.py:2256 ../src/roster_window.py:2148
#, python-format
msgid "Enter your password for account %s"
msgstr "Introduce contraseña para la cuenta %s"
-#: ../src/config.py:2185 ../src/roster_window.py:1859
+#: ../src/config.py:2257 ../src/roster_window.py:2149
msgid "Save password"
msgstr "Guardar contraseña"
-#: ../src/config.py:2198
+#: ../src/config.py:2270
#, python-format
msgid "Account \"%s\" is connected to the server"
msgstr "La cuenta \"%s\" está conectada al servidor"
-#: ../src/config.py:2199
+#: ../src/config.py:2271
msgid "If you remove it, the connection will be lost."
msgstr "Si la eliminas, se perderá la conexión con el servidor"
-#: ../src/config.py:2282
+#: ../src/config.py:2356
msgid "Enter and leave only"
msgstr ""
-#: ../src/config.py:2352
+#: ../src/config.py:2426
msgid "New Room"
msgstr "Nuevo salón"
-#: ../src/config.py:2383
+#: ../src/config.py:2457
msgid "This bookmark has invalid data"
msgstr "Este marcador tiene información no válida"
-#: ../src/config.py:2384
+#: ../src/config.py:2458
msgid ""
"Please be sure to fill out server and room fields or remove this bookmark."
msgstr ""
"Por favor, asegúrate de rellenar los campos de servidor y salón o elimina "
"este marcador."
-#: ../src/config.py:2638
+#: ../src/config.py:2712
msgid "Invalid username"
msgstr "Nombre de usuario no válido"
-#: ../src/config.py:2639
+#: ../src/config.py:2713
msgid "You must provide a username to configure this account."
msgstr "Debes proporcionar un nombre para configurar esta cuenta."
-#: ../src/config.py:2648 ../src/dialogs.py:1118
+#: ../src/config.py:2722 ../src/dialogs.py:1248
msgid "Invalid password"
msgstr "Contraseña no válida"
-#: ../src/config.py:2649
+#: ../src/config.py:2723
msgid "You must enter a password for the new account."
msgstr "Debes introducir una contraseña para la nueva cuenta"
-#: ../src/config.py:2653 ../src/dialogs.py:1123
+#: ../src/config.py:2727 ../src/dialogs.py:1253
msgid "Passwords do not match"
msgstr "Las contraseñas no coinciden"
-#: ../src/config.py:2654 ../src/dialogs.py:1124
+#: ../src/config.py:2728 ../src/dialogs.py:1254
msgid "The passwords typed in both fields must be identical."
msgstr "Las contraseñas escritas en ambos campos deben ser idénticas."
-#: ../src/config.py:2673
+#: ../src/config.py:2747
#, fuzzy
msgid "Duplicate Jabber ID"
msgstr "ID de Jabber no válida"
-#: ../src/config.py:2674
+#: ../src/config.py:2748
#, fuzzy
msgid "This account is already configured in Gajim."
msgstr "Este contacto ya está listado en tu roster."
-#: ../src/config.py:2691
+#: ../src/config.py:2765
msgid "Account has been added successfully"
msgstr "La cuenta ha sido añadida con éxito"
-#: ../src/config.py:2692 ../src/config.py:2725
+#: ../src/config.py:2766 ../src/config.py:2799
msgid ""
"You can set advanced account options by pressing Advanced button, or later "
"by clicking in Accounts menuitem under Edit menu from the main window."
@@ -2594,23 +2714,23 @@ msgstr ""
"Avanzado, o más tarde mediante el submenú Cuentas del menú Editar de la "
"ventana principal."
-#: ../src/config.py:2724
+#: ../src/config.py:2798
msgid "Your new account has been created successfully"
msgstr "Tu nueva cuenta ha sido creada con éxito"
-#: ../src/config.py:2740
+#: ../src/config.py:2814
msgid "An error occured during account creation"
msgstr "Ha ocurrido un error durante la creación de la cuenta"
-#: ../src/config.py:2797
+#: ../src/config.py:2871
msgid "Account name is in use"
msgstr "El nombre de la cuenta está en uso"
-#: ../src/config.py:2798
+#: ../src/config.py:2872
msgid "You already have an account using this name."
msgstr "Ya tienes una cuenta usando este nombre"
-#: ../src/conversation_textview.py:205
+#: ../src/conversation_textview.py:272
msgid ""
"Text below this line is what has been said since the last time you paid "
"attention to this group chat"
@@ -2618,48 +2738,48 @@ msgstr ""
"El texto bajo esta línea es lo que ha sido dicho desde la última vez que "
"prestaste atención a este salón de charla"
-#: ../src/conversation_textview.py:263
+#: ../src/conversation_textview.py:331
#, python-format
msgid "Actions for \"%s\""
msgstr "Acciones para \"%s\""
-#: ../src/conversation_textview.py:275
+#: ../src/conversation_textview.py:343
msgid "Read _Wikipedia Article"
msgstr "Leer artículo de _Wikipedia"
-#: ../src/conversation_textview.py:280
+#: ../src/conversation_textview.py:348
msgid "Look it up in _Dictionary"
msgstr "Buscarlo en el _Diccionario"
#. we must have %s in the url if not WIKTIONARY
-#: ../src/conversation_textview.py:296
+#: ../src/conversation_textview.py:364
#, python-format
msgid "Dictionary URL is missing an \"%s\" and it is not WIKTIONARY"
msgstr "Falta un \"%s\" en la URL del Diccionario y no está en WIKTIONARY"
#. we must have %s in the url
-#: ../src/conversation_textview.py:308
+#: ../src/conversation_textview.py:376
#, python-format
msgid "Web Search URL is missing an \"%s\""
msgstr "Falta un \"%s\" en la URL de la búsqueda web"
-#: ../src/conversation_textview.py:311
+#: ../src/conversation_textview.py:379
msgid "Web _Search for it"
msgstr "_Buscarlo en la web"
-#: ../src/conversation_textview.py:607
+#: ../src/conversation_textview.py:675
msgid "Yesterday"
msgstr "Ayer"
#. the number is >= 2
#. %i is day in year (1-365), %d (1-31) we want %i
-#: ../src/conversation_textview.py:611
+#: ../src/conversation_textview.py:679
#, python-format
msgid "%i days ago"
msgstr "hace %i días"
#. if we have subject, show it too!
-#: ../src/conversation_textview.py:686
+#: ../src/conversation_textview.py:755
#, python-format
msgid "Subject: %s\n"
msgstr "Tema: %s\n"
@@ -2673,174 +2793,210 @@ msgstr "Los enlaces D-Bus de python no se encuentran en este ordenador"
msgid "D-Bus capabilities of Gajim cannot be used"
msgstr "Las capacidades D-Bus de Gajim no pueden ser usadas"
-#: ../src/dialogs.py:55
-#, python-format
-msgid "Contact's name: <i>%s</i>"
+#: ../src/dialogs.py:57
+#, fuzzy, python-format
+msgid "Contact name: <i>%s</i>"
msgstr "Nombre del contacto : <i>%s</i>"
-#: ../src/dialogs.py:57
+#: ../src/dialogs.py:59
#, python-format
msgid "JID: <i>%s</i>"
msgstr "JID : <i>%s</i>"
-#. Group name
-#. In group boolean
-#: ../src/dialogs.py:173
+#: ../src/dialogs.py:204
msgid "Group"
msgstr "Grupo"
-#: ../src/dialogs.py:180
+#: ../src/dialogs.py:211
msgid "In the group"
msgstr "En el grupo"
-#: ../src/dialogs.py:230
+#: ../src/dialogs.py:261
msgid "KeyID"
msgstr "KeyID"
-#: ../src/dialogs.py:233
+#: ../src/dialogs.py:264
msgid "Contact name"
msgstr "Nombre de contacto"
-#: ../src/dialogs.py:266
+#: ../src/dialogs.py:298
#, python-format
msgid "%s Status Message"
msgstr "Mensaje de estado %s"
-#: ../src/dialogs.py:268
+#: ../src/dialogs.py:300
msgid "Status Message"
msgstr "Mensaje de estado"
-#: ../src/dialogs.py:343
+#: ../src/dialogs.py:375
#, fuzzy
msgid "Save as Preset Status Message"
msgstr "<b>Mensajes de estado predefinidos</b>"
-#: ../src/dialogs.py:344
+#: ../src/dialogs.py:376
#, fuzzy
msgid "Please type a name for this status message"
msgstr "Escribe tu nuevo mensaje de estado:"
-#: ../src/dialogs.py:391
+#: ../src/dialogs.py:396
+#, fuzzy
+msgid "Jabber ID"
+msgstr "ID de Jabber:"
+
+#: ../src/dialogs.py:397
+#, fuzzy
+msgid "AIM Address"
+msgstr "Dirección"
+
+#: ../src/dialogs.py:398
+msgid "GG Number"
+msgstr ""
+
+#: ../src/dialogs.py:399
+msgid "ICQ Number"
+msgstr ""
+
+#: ../src/dialogs.py:400
+#, fuzzy
+msgid "MSN Address"
+msgstr "Dirección"
+
+#: ../src/dialogs.py:401
+#, fuzzy
+msgid "Yahoo! Address"
+msgstr "Dirección"
+
+#: ../src/dialogs.py:436
#, python-format
msgid "Please fill in the data of the contact you want to add in account %s"
msgstr ""
"Por favor, introduce la inforamción del contacto que quieres añadir a la "
"cuenta %s"
-#: ../src/dialogs.py:393
+#: ../src/dialogs.py:438
msgid "Please fill in the data of the contact you want to add"
msgstr "Por favor, rellena la información del contacto que quieres añadir"
-#: ../src/dialogs.py:403 ../src/disco.py:109 ../src/disco.py:110
-#: ../src/disco.py:1249 ../src/roster_window.py:207
-#: ../src/roster_window.py:273 ../src/roster_window.py:309
-#: ../src/roster_window.py:329 ../src/roster_window.py:353
-#: ../src/roster_window.py:2973 ../src/roster_window.py:2975
-#: ../src/common/helpers.py:39
+#: ../src/dialogs.py:446 ../src/disco.py:109 ../src/disco.py:110
+#: ../src/disco.py:1252 ../src/roster_window.py:216
+#: ../src/roster_window.py:282 ../src/roster_window.py:318
+#: ../src/roster_window.py:370 ../src/roster_window.py:397
+#: ../src/roster_window.py:3273 ../src/roster_window.py:3275
+#: ../src/common/helpers.py:40
msgid "Transports"
msgstr "Transportes"
-#: ../src/dialogs.py:493 ../src/dialogs.py:499
+#: ../src/dialogs.py:584 ../src/dialogs.py:590
msgid "Invalid User ID"
msgstr "ID de Usuario no válida"
-#: ../src/dialogs.py:500
+#: ../src/dialogs.py:591
#, fuzzy
msgid "The user ID must not contain a resource."
msgstr "Este servicio no contiene elementos para navegar."
-#: ../src/dialogs.py:513
+#: ../src/dialogs.py:605
msgid "Contact already in roster"
msgstr "Contacto ya presente en el roster"
-#: ../src/dialogs.py:514
+#: ../src/dialogs.py:606
msgid "This contact is already listed in your roster."
msgstr "Este contacto ya está listado en tu roster."
-#: ../src/dialogs.py:576
+#: ../src/dialogs.py:638
+#, fuzzy
+msgid "User ID"
+msgstr "Identificador:"
+
+#: ../src/dialogs.py:692
msgid "A GTK+ jabber client"
msgstr "Un cliente de Jabber en GTK"
-#: ../src/dialogs.py:577
+#: ../src/dialogs.py:693
msgid "GTK+ Version:"
msgstr ""
-#: ../src/dialogs.py:578
+#: ../src/dialogs.py:694
msgid "PyGTK Version:"
msgstr ""
-#: ../src/dialogs.py:586
+#: ../src/dialogs.py:702
msgid "Current Developers:"
msgstr ""
-#: ../src/dialogs.py:588
+#: ../src/dialogs.py:704
msgid "Past Developers:"
msgstr ""
-#: ../src/dialogs.py:592
+#: ../src/dialogs.py:708
msgid "THANKS:"
msgstr ""
#. remove one english sentence
#. and add it manually as translatable
-#: ../src/dialogs.py:598
+#: ../src/dialogs.py:714
msgid "Last but not least, we would like to thank all the package maintainers."
msgstr ""
#. here you write your name in the form Name FamilyName <someone@somewhere>
-#: ../src/dialogs.py:612
+#: ../src/dialogs.py:728
msgid "translator-credits"
-msgstr "créditos de traducción"
+msgstr "Membris Khan <membriskhan@gmail.com>"
-#: ../src/dialogs.py:738
+#: ../src/dialogs.py:854
#, fuzzy, python-format
msgid "Unable to bind to port %s."
msgstr "No se pudo entrar al salón"
-#: ../src/dialogs.py:739
+#: ../src/dialogs.py:855
msgid ""
"Maybe you have another running instance of Gajim. File Transfer will be "
"canceled."
msgstr ""
-#: ../src/dialogs.py:881
+#: ../src/dialogs.py:997
#, python-format
msgid "Subscription request for account %s from %s"
msgstr "Petición de adición para la cuenta %s de %s"
-#: ../src/dialogs.py:884
+#: ../src/dialogs.py:1000
#, python-format
msgid "Subscription request from %s"
msgstr "Petición de adición de %s"
-#: ../src/dialogs.py:926
+#: ../src/dialogs.py:1044 ../src/roster_window.py:590
+#, python-format
+msgid "You are already in room %s"
+msgstr "Ya estás en el salón %s"
+
+#: ../src/dialogs.py:1052
msgid "You can not join a group chat unless you are connected."
msgstr "No puedes entrar a un salón de chat hasta que no estés conectado."
-#: ../src/dialogs.py:939
+#: ../src/dialogs.py:1065
#, python-format
msgid "Join Group Chat with account %s"
msgstr "Entrar a un salón de chat con la cuenta %s"
-#: ../src/dialogs.py:1030
+#: ../src/dialogs.py:1158
#, fuzzy
msgid "Invalid room or server name"
msgstr "Nombre de usuario no válido"
-#: ../src/dialogs.py:1031
+#: ../src/dialogs.py:1159
msgid "The room name or server name has not allowed characters."
msgstr ""
-#: ../src/dialogs.py:1050
+#: ../src/dialogs.py:1180
#, python-format
msgid "Start Chat with account %s"
msgstr "Iniciar conversación con la cuenta %s"
-#: ../src/dialogs.py:1052
+#: ../src/dialogs.py:1182
msgid "Start Chat"
msgstr "Iniciar conversación"
-#: ../src/dialogs.py:1053
+#: ../src/dialogs.py:1183
#, fuzzy
msgid ""
"Fill in the jid, or nick of the contact you would like\n"
@@ -2850,210 +3006,223 @@ msgstr ""
"un mensaje de charla:"
#. if offline or connecting
-#: ../src/dialogs.py:1078 ../src/dialogs.py:1427 ../src/dialogs.py:1551
+#: ../src/dialogs.py:1208 ../src/dialogs.py:1562 ../src/dialogs.py:1686
msgid "Connection not available"
msgstr "Conexión no disponible"
-#: ../src/dialogs.py:1079 ../src/dialogs.py:1428 ../src/dialogs.py:1552
+#: ../src/dialogs.py:1209 ../src/dialogs.py:1563 ../src/dialogs.py:1687
#, python-format
msgid "Please make sure you are connected with \"%s\"."
msgstr "Por favor, asegúrate de estar conectado con \"%s\"."
-#: ../src/dialogs.py:1088 ../src/dialogs.py:1091
+#: ../src/dialogs.py:1218 ../src/dialogs.py:1221
#, fuzzy
msgid "Invalid JID"
msgstr "ID de Jabber no válida"
-#: ../src/dialogs.py:1091
+#: ../src/dialogs.py:1221
#, fuzzy, python-format
msgid "Unable to parse \"%s\"."
msgstr "No se puede escribir el archivo en %s"
-#: ../src/dialogs.py:1100
+#: ../src/dialogs.py:1230
msgid "Without a connection, you can not change your password."
msgstr "Sin una conexión, no puedes cambiar tu contraseña."
-#: ../src/dialogs.py:1119
+#: ../src/dialogs.py:1249
msgid "You must enter a password."
msgstr "Debes introducir una contraseña."
#. img to display
#. default value
-#: ../src/dialogs.py:1165 ../src/notify.py:126 ../src/notify.py:268
+#: ../src/dialogs.py:1295 ../src/notify.py:194 ../src/notify.py:355
msgid "Contact Signed In"
msgstr "Contacto conectado"
-#: ../src/dialogs.py:1167 ../src/notify.py:134 ../src/notify.py:270
+#: ../src/dialogs.py:1297 ../src/notify.py:202 ../src/notify.py:357
msgid "Contact Signed Out"
msgstr "Contacto desconectado"
#. chat message
-#: ../src/dialogs.py:1169 ../src/notify.py:154 ../src/notify.py:272
+#: ../src/dialogs.py:1299 ../src/notify.py:221 ../src/notify.py:359
msgid "New Message"
msgstr "Nuevo mensaje"
#. single message
-#: ../src/dialogs.py:1169 ../src/notify.py:138 ../src/notify.py:272
+#: ../src/dialogs.py:1299 ../src/notify.py:206 ../src/notify.py:359
msgid "New Single Message"
msgstr "Nuevo mensaje"
#. private message
-#: ../src/dialogs.py:1170 ../src/notify.py:145 ../src/notify.py:273
+#: ../src/dialogs.py:1300 ../src/notify.py:213 ../src/notify.py:360
msgid "New Private Message"
msgstr "Nuevo mensaje privado"
-#: ../src/dialogs.py:1170 ../src/gajim.py:1044 ../src/notify.py:281
+#: ../src/dialogs.py:1300 ../src/gajim.py:1072 ../src/notify.py:368
#, fuzzy
msgid "New E-mail"
msgstr "Correo-e"
-#: ../src/dialogs.py:1172 ../src/gajim.py:1187 ../src/notify.py:275
+#: ../src/dialogs.py:1302 ../src/gajim.py:1215 ../src/notify.py:362
msgid "File Transfer Request"
msgstr "Petición de transferencia de archivo"
-#: ../src/dialogs.py:1174 ../src/gajim.py:1022 ../src/gajim.py:1164
-#: ../src/notify.py:277
+#: ../src/dialogs.py:1304 ../src/gajim.py:1050 ../src/gajim.py:1192
+#: ../src/notify.py:364
msgid "File Transfer Error"
msgstr "Error en la transferencia del archivo"
-#: ../src/dialogs.py:1176 ../src/gajim.py:1222 ../src/gajim.py:1244
-#: ../src/gajim.py:1261 ../src/notify.py:279
+#: ../src/dialogs.py:1306 ../src/gajim.py:1250 ../src/gajim.py:1272
+#: ../src/gajim.py:1289 ../src/notify.py:366
msgid "File Transfer Completed"
msgstr "Transferencia del archivo finalizada"
-#: ../src/dialogs.py:1177 ../src/gajim.py:1225 ../src/notify.py:279
+#: ../src/dialogs.py:1307 ../src/gajim.py:1253 ../src/notify.py:366
msgid "File Transfer Stopped"
msgstr "Transferencia del archivo detenida"
-#: ../src/dialogs.py:1179 ../src/gajim.py:920 ../src/notify.py:283
+#: ../src/dialogs.py:1309 ../src/gajim.py:948 ../src/notify.py:370
#, fuzzy
msgid "Groupchat Invitation"
msgstr "Ninguno"
-#: ../src/dialogs.py:1181 ../src/notify.py:118 ../src/notify.py:285
+#: ../src/dialogs.py:1311 ../src/notify.py:186 ../src/notify.py:372
#, fuzzy
msgid "Contact Changed Status"
msgstr "Contacto desconectado"
-#. FIXME: for Received with should become 'in'
-#: ../src/dialogs.py:1359
-#, python-format
-msgid "Single Message with account %s"
+#: ../src/dialogs.py:1492
+#, fuzzy, python-format
+msgid "Single Message using account %s"
+msgstr "Nuevo mensaje con la cuenta %s"
+
+#: ../src/dialogs.py:1494
+#, fuzzy, python-format
+msgid "Single Message in account %s"
msgstr "Nuevo mensaje con la cuenta %s"
-#: ../src/dialogs.py:1361
+#: ../src/dialogs.py:1496
msgid "Single Message"
msgstr "Mensaje:"
#. prepare UI for Sending
-#: ../src/dialogs.py:1364
+#: ../src/dialogs.py:1499
#, python-format
msgid "Send %s"
msgstr "Enviar %s"
#. prepare UI for Receiving
-#: ../src/dialogs.py:1387
+#: ../src/dialogs.py:1522
#, python-format
msgid "Received %s"
msgstr "Recibido %s"
#. we create a new blank window to send and we preset RE: and to jid
-#: ../src/dialogs.py:1454
+#: ../src/dialogs.py:1589
#, python-format
msgid "RE: %s"
msgstr "RE: %s"
-#: ../src/dialogs.py:1455
+#: ../src/dialogs.py:1590
#, python-format
msgid "%s wrote:\n"
msgstr "%s escribió:\n"
-#: ../src/dialogs.py:1499
+#: ../src/dialogs.py:1634
#, python-format
msgid "XML Console for %s"
msgstr "Consola XML para %s"
-#: ../src/dialogs.py:1501
+#: ../src/dialogs.py:1636
msgid "XML Console"
msgstr "Consola XML"
-#: ../src/dialogs.py:1620
+#: ../src/dialogs.py:1755
#, python-format
msgid "Privacy List <b><i>%s</i></b>"
msgstr ""
-#: ../src/dialogs.py:1624
+#: ../src/dialogs.py:1759
#, python-format
msgid "Privacy List for %s"
msgstr ""
-#: ../src/dialogs.py:1716
+#: ../src/dialogs.py:1851
#, fuzzy
msgid "<b>Edit a rule</b>"
msgstr "<b>Formato del renglón</b>"
-#: ../src/dialogs.py:1801
+#: ../src/dialogs.py:1936
#, fuzzy
msgid "<b>Add a rule</b>"
msgstr "<b>Formato del renglón</b>"
-#: ../src/dialogs.py:1897
+#: ../src/dialogs.py:2033
#, python-format
msgid "Privacy Lists for %s"
msgstr ""
-#: ../src/dialogs.py:1899
+#: ../src/dialogs.py:2035
#, fuzzy
msgid "Privacy Lists"
msgstr "Iniciar conversación"
#. FIXME: use nickname instead of contact_jid
-#: ../src/dialogs.py:1988
+#: ../src/dialogs.py:2124
#, fuzzy, python-format
msgid "%(contact_jid)s has invited you to %(room_jid)s room"
msgstr "%(contact_jid)s invitado a %(room_jid)s."
#. only if not None and not ''
-#: ../src/dialogs.py:1994
+#: ../src/dialogs.py:2130
#, python-format
msgid "Comment: %s"
msgstr "Comentario: %s"
-#: ../src/dialogs.py:2054
+#: ../src/dialogs.py:2193
msgid "Choose Sound"
msgstr "Elegir sonido"
-#: ../src/dialogs.py:2064 ../src/dialogs.py:2107
+#: ../src/dialogs.py:2203 ../src/dialogs.py:2248
msgid "All files"
msgstr "Todos los archivos"
-#: ../src/dialogs.py:2069
+#: ../src/dialogs.py:2208
msgid "Wav Sounds"
msgstr "Sonidos Wav"
-#: ../src/dialogs.py:2097
+#: ../src/dialogs.py:2238
msgid "Choose Image"
msgstr "Elegir Imagen"
-#: ../src/dialogs.py:2112
+#: ../src/dialogs.py:2253
msgid "Images"
msgstr "Imágenes"
-#: ../src/dialogs.py:2157
+#: ../src/dialogs.py:2298
#, python-format
msgid "When %s becomes:"
msgstr ""
-#: ../src/dialogs.py:2159
+#: ../src/dialogs.py:2300
#, python-format
msgid "Adding Special Notification for %s"
msgstr ""
-#: ../src/dialogs.py:2232
+#. # means number
+#: ../src/dialogs.py:2371
+msgid "#"
+msgstr ""
+
+#: ../src/dialogs.py:2377
#, fuzzy
msgid "Condition"
msgstr "Conexión"
+#: ../src/dialogs.py:2498
+msgid "when I am "
+msgstr ""
+
#: ../src/disco.py:108
msgid "Others"
msgstr "Others"
@@ -3063,7 +3232,7 @@ msgstr "Others"
msgid "Conference"
msgstr "Conferencia"
-#: ../src/disco.py:411
+#: ../src/disco.py:412
msgid "Without a connection, you can not browse available services"
msgstr "Sin una conexión no puedes navegar los servicios disponibles"
@@ -3109,22 +3278,22 @@ msgstr "_Navegar"
msgid "This service does not contain any items to browse."
msgstr "Este servicio no contiene elementos para navegar."
-#: ../src/disco.py:1137 ../src/disco.py:1254
+#: ../src/disco.py:1137 ../src/disco.py:1257
msgid "Re_gister"
msgstr "_Suscribir"
-#: ../src/disco.py:1291
+#: ../src/disco.py:1294
#, python-format
msgid "Scanning %d / %d.."
msgstr "Escaneando %d / %d.."
#. Users column
-#: ../src/disco.py:1473
+#: ../src/disco.py:1476
msgid "Users"
msgstr "Usuarios"
#. Description column
-#: ../src/disco.py:1480
+#: ../src/disco.py:1483
msgid "Description"
msgstr "Descripción"
@@ -3157,7 +3326,7 @@ msgstr "Tamaño: %s"
msgid "You"
msgstr "Tú"
-#: ../src/filetransfers_window.py:174 ../src/filetransfers_window.py:224
+#: ../src/filetransfers_window.py:174
#, python-format
msgid "Sender: %s"
msgstr "Sender: %s"
@@ -3184,6 +3353,11 @@ msgstr "Transferencia de archivo cancelada"
msgid "Connection with peer cannot be established."
msgstr "La conexión con el cliente no se pudo establecer."
+#: ../src/filetransfers_window.py:224
+#, fuzzy, python-format
+msgid "Recipient: %s"
+msgstr "Recipiente: "
+
#: ../src/filetransfers_window.py:225
msgid "File transfer stopped by the contact of the other side"
msgstr "Transferencia de archivo detenida por el contacto de la otra parte"
@@ -3606,31 +3780,31 @@ msgstr ""
"El argumento \"%s\" no se ha especificado. \n"
"Escribe \"%s help %s\" para más información"
-#: ../src/gajim.py:48
+#: ../src/gajim.py:56
msgid "Gajim needs Xserver to run. Quiting..."
msgstr "Gajim necesita Xserver para funcionar. Abortando..."
-#: ../src/gajim.py:52
+#: ../src/gajim.py:60
msgid "Gajim needs PyGTK 2.6 or above"
msgstr "Gajim necesita PyGTK 2.6 o superior"
-#: ../src/gajim.py:53
+#: ../src/gajim.py:61
msgid "Gajim needs PyGTK 2.6 or above to run. Quiting..."
msgstr "Gajim necesita PyGTK 2.6 o superior para funcionar. Abortando..."
-#: ../src/gajim.py:55
+#: ../src/gajim.py:63
msgid "Gajim needs GTK 2.6 or above"
msgstr "Gajim necesita GTK 2.6 o superior"
-#: ../src/gajim.py:56
+#: ../src/gajim.py:64
msgid "Gajim needs GTK 2.6 or above to run. Quiting..."
msgstr "Gajim necesita GTK 2.6 o superior para funcionar. Abortando..."
-#: ../src/gajim.py:61
+#: ../src/gajim.py:69
msgid "GTK+ runtime is missing libglade support"
msgstr "La biblioteca GTK+ necesita soporte de libglade"
-#: ../src/gajim.py:63
+#: ../src/gajim.py:71
#, python-format
msgid ""
"Please remove your current GTK+ runtime and install the latest stable "
@@ -3639,7 +3813,7 @@ msgstr ""
"Por favor elimina tu actual biblioteca GTK+ e instala la última versión "
"estable desde %s"
-#: ../src/gajim.py:65
+#: ../src/gajim.py:73
#, fuzzy
msgid ""
"Please make sure that GTK+ and PyGTK have libglade support in your system."
@@ -3647,82 +3821,87 @@ msgstr ""
"Por favor, asegúrate de que gtk y pygtk tienen soporte de libglade en este "
"sistema."
-#: ../src/gajim.py:70
+#: ../src/gajim.py:78
msgid "Gajim needs PySQLite2 to run"
msgstr "Gajim necesita PySQLite2 para funcionar"
#. set the icon to all newly opened wind
-#: ../src/gajim.py:151
+#: ../src/gajim.py:159
msgid "Gajim is already running"
msgstr ""
-#: ../src/gajim.py:152
+#: ../src/gajim.py:160
msgid ""
"Another instance of Gajim seems to be running\n"
"Run anyway?"
msgstr ""
-#: ../src/gajim.py:267
+#: ../src/gajim.py:261
#, python-format
msgid "HTTP (%s) Authorization for %s (id: %s)"
msgstr "Autorización HTTP (%s) para %s (id: %s)"
-#: ../src/gajim.py:268
+#: ../src/gajim.py:262
msgid "Do you accept this request?"
msgstr "¿Aceptas esta petición?"
-#: ../src/gajim.py:611
+#: ../src/gajim.py:590
+#, fuzzy, python-format
+msgid "Subject: %s"
+msgstr "Tema: %s\n"
+
+#: ../src/gajim.py:633
#, fuzzy, python-format
msgid "error while sending %s ( %s )"
msgstr "error durante el envío"
-#: ../src/gajim.py:651
+#: ../src/gajim.py:673
msgid "Authorization accepted"
msgstr "Autorización aceptada"
-#: ../src/gajim.py:652
+#: ../src/gajim.py:674
#, python-format
msgid "The contact \"%s\" has authorized you to see his or her status."
msgstr "El contacto \"%s\" te ha autorizado a ver su estado."
-#: ../src/gajim.py:660
+#: ../src/gajim.py:682
#, python-format
msgid "Contact \"%s\" removed subscription from you"
msgstr "El contacto \"%s\" eliminó su subscripción de tí"
-#: ../src/gajim.py:661
+#: ../src/gajim.py:683
msgid "You will always see him or her as offline."
msgstr "Siempre le verás desconectado."
-#: ../src/gajim.py:704
+#: ../src/gajim.py:726
#, python-format
msgid "Contact with \"%s\" cannot be established"
msgstr "No se ha podido establecer contacto con \"%s\""
-#: ../src/gajim.py:705 ../src/common/connection.py:398
+#: ../src/gajim.py:727 ../src/common/connection.py:402
msgid "Check your connection or try again later."
msgstr "Comprueba tu conexión o reinténtalo más tarde."
-#: ../src/gajim.py:849 ../src/roster_window.py:1025
+#: ../src/gajim.py:871 ../src/roster_window.py:1084
#, python-format
msgid "%s is now %s (%s)"
msgstr "%s está ahora %s (%s)"
-#: ../src/gajim.py:930
+#: ../src/gajim.py:958
msgid "Your passphrase is incorrect"
msgstr "Contraseña incorrecta"
-#: ../src/gajim.py:931
+#: ../src/gajim.py:959
msgid "You are currently connected without your OpenPGP key."
msgstr "Estás actualmente conectado sin tu clave GPG"
#. FIXME: find a better image
-#: ../src/gajim.py:1033
+#: ../src/gajim.py:1061
#, python-format
msgid "New E-mail on %(gmail_mail_address)s"
msgstr ""
-#: ../src/gajim.py:1035
+#: ../src/gajim.py:1063
#, fuzzy, python-format
msgid "You have %d new E-mail message"
msgid_plural "You have %d new E-mail messages"
@@ -3730,53 +3909,53 @@ msgstr[0] "Tienes mensajes sin leer"
msgstr[1] "Tienes mensajes sin leer"
#. each message has a 'From', 'Subject' and 'Snippet' field
-#: ../src/gajim.py:1040
+#: ../src/gajim.py:1068
#, python-format
msgid ""
"\n"
"From: %(from_address)s"
msgstr ""
-#: ../src/gajim.py:1185
+#: ../src/gajim.py:1213
#, python-format
msgid "%s wants to send you a file."
msgstr "%s quiere enviarte un archivo."
-#: ../src/gajim.py:1245
+#: ../src/gajim.py:1273
#, python-format
msgid "You successfully received %(filename)s from %(name)s."
msgstr "Has recibido con éxito el archivo %(filename)s de %(name)s."
#. ft stopped
-#: ../src/gajim.py:1249
+#: ../src/gajim.py:1277
#, python-format
msgid "File transfer of %(filename)s from %(name)s stopped."
msgstr "Transferencia del archivo %(filename)s de %(name)s detenida."
-#: ../src/gajim.py:1262
+#: ../src/gajim.py:1290
#, python-format
msgid "You successfully sent %(filename)s to %(name)s."
msgstr "Has enviado con éxito el archivo %(filename)s a %(name)s."
#. ft stopped
-#: ../src/gajim.py:1266
+#: ../src/gajim.py:1294
#, python-format
msgid "File transfer of %(filename)s to %(name)s stopped."
msgstr "Transferencia de %(filename)s a %(name)s detenida."
-#: ../src/gajim.py:1295
+#: ../src/gajim.py:1323
msgid "vCard publication succeeded"
msgstr "vCard publicada con éxito"
-#: ../src/gajim.py:1295
+#: ../src/gajim.py:1323
msgid "Your personal information has been published successfully."
msgstr "Tu información personal ha sido publicada con éxito"
-#: ../src/gajim.py:1304
+#: ../src/gajim.py:1332
msgid "vCard publication failed"
msgstr "falló la publicación de la vCard"
-#: ../src/gajim.py:1304
+#: ../src/gajim.py:1332
msgid ""
"There was an error while publishing your personal information, try again "
"later."
@@ -3786,36 +3965,28 @@ msgstr ""
#. it is good to notify the user
#. in case he or she cannot see the output of the console
-#: ../src/gajim.py:1683
+#: ../src/gajim.py:1711
msgid "Could not save your settings and preferences"
msgstr "No se pueden guardar las preferencias"
-#: ../src/gajim.py:1903
+#: ../src/gajim.py:1935
msgid "Session Management support not available (missing gnome.ui module)"
msgstr "Soporte de manejo de sesión no disponible (falta el módulo gnome.ui)"
-#: ../src/gajim.py:1932
-msgid "Migrating Logs..."
-msgstr "Migrando el registro..."
-
-#: ../src/gajim.py:1933
-msgid "Please wait while logs are being migrated..."
-msgstr "Por favor, espera mientras el registro está siendo migrado..."
-
-#: ../src/gajim_themes_window.py:59
+#: ../src/gajim_themes_window.py:60
msgid "Theme"
msgstr "Tema"
#. don't confuse translators
-#: ../src/gajim_themes_window.py:141
+#: ../src/gajim_themes_window.py:142
msgid "theme name"
msgstr "nombre del tema"
-#: ../src/gajim_themes_window.py:158
+#: ../src/gajim_themes_window.py:159
msgid "You cannot delete your current theme"
msgstr "No puedes eliminar el tema actual"
-#: ../src/gajim_themes_window.py:159
+#: ../src/gajim_themes_window.py:160
msgid "Please first choose another for your current theme."
msgstr "Por favor, primero elige otro distinto como tema actual."
@@ -3839,100 +4010,100 @@ msgstr "Falló el envío del mensaje privado"
msgid "You are no longer in room \"%s\" or \"%s\" has left."
msgstr "Ya no estás en el salón \"%s\" o \"%s\" ya no existe."
-#: ../src/groupchat_control.py:129
+#: ../src/groupchat_control.py:136
msgid "Group Chat"
msgstr "Grupos de charla"
-#: ../src/groupchat_control.py:129
+#: ../src/groupchat_control.py:136
#, fuzzy
msgid "Group Chats"
msgstr "Grupos de charla"
-#: ../src/groupchat_control.py:308
+#: ../src/groupchat_control.py:307
#, fuzzy
msgid "Insert Nickname"
msgstr "Cambiar _Alias"
-#: ../src/groupchat_control.py:702
+#: ../src/groupchat_control.py:649
msgid "This room has no subject"
msgstr "Este salón no tiene tema"
#. do not print 'kicked by None'
-#: ../src/groupchat_control.py:801
+#: ../src/groupchat_control.py:748
#, python-format
msgid "%(nick)s has been kicked: %(reason)s"
msgstr "%(nick)s ha sido expulsado por %(reason)s"
-#: ../src/groupchat_control.py:805
+#: ../src/groupchat_control.py:752
#, python-format
msgid "%(nick)s has been kicked by %(who)s: %(reason)s"
msgstr "%(nick)s ha sido expulsado por %(who)s: %(reason)s"
#. do not print 'banned by None'
-#: ../src/groupchat_control.py:812
+#: ../src/groupchat_control.py:759
#, python-format
msgid "%(nick)s has been banned: %(reason)s"
msgstr "%(nick)s ha sido expulsado: %(reason)s"
-#: ../src/groupchat_control.py:816
+#: ../src/groupchat_control.py:763
#, python-format
msgid "%(nick)s has been banned by %(who)s: %(reason)s"
msgstr "%(nick)s ha sido expulsado por %(who)s: %(reason)s"
-#: ../src/groupchat_control.py:824
+#: ../src/groupchat_control.py:771
#, python-format
msgid "You are now known as %s"
msgstr "Eres ahora conocido como %s"
-#: ../src/groupchat_control.py:826
+#: ../src/groupchat_control.py:773
#, python-format
msgid "%s is now known as %s"
msgstr "%s es ahora conocido como %s"
-#: ../src/groupchat_control.py:897
+#: ../src/groupchat_control.py:850
#, python-format
msgid "%s has left"
msgstr "%s ha salido"
-#: ../src/groupchat_control.py:902
+#: ../src/groupchat_control.py:855
#, python-format
msgid "%s has joined the room"
msgstr ""
#. No status message
-#: ../src/groupchat_control.py:904 ../src/roster_window.py:1028
+#: ../src/groupchat_control.py:857 ../src/roster_window.py:1087
#, python-format
msgid "%s is now %s"
msgstr "%s está ahora %s"
-#: ../src/groupchat_control.py:1022 ../src/groupchat_control.py:1039
-#: ../src/groupchat_control.py:1132 ../src/groupchat_control.py:1148
+#: ../src/groupchat_control.py:975 ../src/groupchat_control.py:993
+#: ../src/groupchat_control.py:1086 ../src/groupchat_control.py:1102
#, python-format
msgid "Nickname not found: %s"
msgstr "Alias no encontrado: %s"
-#: ../src/groupchat_control.py:1066
+#: ../src/groupchat_control.py:1020
#, python-format
msgid "Invited %(contact_jid)s to %(room_jid)s."
msgstr "%(contact_jid)s invitado a %(room_jid)s."
#. %s is something the user wrote but it is not a jid so we inform
-#: ../src/groupchat_control.py:1073 ../src/groupchat_control.py:1103
+#: ../src/groupchat_control.py:1027 ../src/groupchat_control.py:1057
#, python-format
msgid "%s does not appear to be a valid JID"
msgstr "%s no parece ser un JID válido"
-#: ../src/groupchat_control.py:1185
+#: ../src/groupchat_control.py:1139
#, fuzzy, python-format
msgid "No such command: /%s (if you want to send this, prefix it with /say)"
msgstr "No existe el comando: /%s (si quieres enviar este prefijo con /say)"
-#: ../src/groupchat_control.py:1207
+#: ../src/groupchat_control.py:1161
#, python-format
msgid "Commands: %s"
msgstr "Comandos: %s"
-#: ../src/groupchat_control.py:1209
+#: ../src/groupchat_control.py:1163
#, python-format
msgid ""
"Usage: /%s <nickname|JID> [reason], bans the JID from the room. The nickname "
@@ -3945,7 +4116,7 @@ msgstr ""
"actualmente en el salón, el/ella puede ser también expulsado. NO soporta "
"espacio en el alias."
-#: ../src/groupchat_control.py:1215
+#: ../src/groupchat_control.py:1169
#, python-format
msgid ""
"Usage: /%s <nickname>, opens a private chat window to the specified occupant."
@@ -3953,12 +4124,12 @@ msgstr ""
"Uso: /%s <alias>, abre una ventana de conversación con el ocupante "
"especificado."
-#: ../src/groupchat_control.py:1219
+#: ../src/groupchat_control.py:1173
#, python-format
msgid "Usage: /%s, clears the text window."
msgstr "Uso: /%s, limpia de texto la ventana."
-#: ../src/groupchat_control.py:1221
+#: ../src/groupchat_control.py:1175
#, python-format
msgid ""
"Usage: /%s [reason], closes the current window or tab, displaying reason if "
@@ -3967,12 +4138,12 @@ msgstr ""
"Uso: /%s [motivo], cierra la ventana o pestaña actual, mostrando el motivo "
"si se especifica."
-#: ../src/groupchat_control.py:1224
+#: ../src/groupchat_control.py:1178
#, fuzzy, python-format
msgid "Usage: /%s, hide the chat buttons."
msgstr "Uso: /%s, limpia de texto la ventana."
-#: ../src/groupchat_control.py:1226
+#: ../src/groupchat_control.py:1180
#, python-format
msgid ""
"Usage: /%s <JID> [reason], invites JID to the current room, optionally "
@@ -3981,7 +4152,7 @@ msgstr ""
"Uso: /%s <JID> [reason], invita al JID al salón actual, opcionalmente "
"proveyendo un motivo."
-#: ../src/groupchat_control.py:1230
+#: ../src/groupchat_control.py:1184
#, python-format
msgid ""
"Usage: /%s <room>@<server>[/nickname], offers to join room@server optionally "
@@ -3990,7 +4161,7 @@ msgstr ""
"Uso: /%s <salón>@<servidor>[/alias], ofrece la entrada a salón@servidor "
"opcionalmente usando el alias especificado"
-#: ../src/groupchat_control.py:1234
+#: ../src/groupchat_control.py:1188
#, python-format
msgid ""
"Usage: /%s <nickname> [reason], removes the occupant specified by nickname "
@@ -4000,7 +4171,7 @@ msgstr ""
"Uso: /%s <alias> [motivo], elimina del salón al ocupante especificado por el "
"alias y opcionalmente muestra un motivo. NO soporta espacios en el alias."
-#: ../src/groupchat_control.py:1239
+#: ../src/groupchat_control.py:1193
#, python-format
msgid ""
"Usage: /%s <action>, sends action to the current room. Use third person. (e."
@@ -4009,7 +4180,7 @@ msgstr ""
"Uso: /%s <acción>, envía una acción al salón actual. Usa la tercera persona. "
"(p.ej. /%s grita.)"
-#: ../src/groupchat_control.py:1243
+#: ../src/groupchat_control.py:1197
#, fuzzy, python-format
msgid ""
"Usage: /%s <nickname> [message], opens a private message windowand sends "
@@ -4018,91 +4189,91 @@ msgstr ""
"Uso: /%s <alias> [message], abre una ventana de conversación privada y envía "
"un mensaje al ocupante especificado por el alias."
-#: ../src/groupchat_control.py:1248
+#: ../src/groupchat_control.py:1202
#, python-format
msgid "Usage: /%s <nickname>, changes your nickname in current room."
msgstr "Uso: /%s <alias>, cambia tu alias en el salón actual."
-#: ../src/groupchat_control.py:1252
+#: ../src/groupchat_control.py:1206
#, fuzzy, python-format
msgid "Usage: /%s , display the names of room occupants."
msgstr "Uso: /%s [tema], muestra o actualiza el tema actual del salón."
-#: ../src/groupchat_control.py:1256
+#: ../src/groupchat_control.py:1210
#, python-format
msgid "Usage: /%s [topic], displays or updates the current room topic."
msgstr "Uso: /%s [tema], muestra o actualiza el tema actual del salón."
-#: ../src/groupchat_control.py:1259
+#: ../src/groupchat_control.py:1213
#, python-format
msgid ""
"Usage: /%s <message>, sends a message without looking for other commands."
msgstr "Uso: /%s <mensaje>, envía un mensaje sin buscar otros comandos."
-#: ../src/groupchat_control.py:1262
+#: ../src/groupchat_control.py:1216
#, python-format
msgid "No help info for /%s"
msgstr "No hay información de ayuda para /%s"
-#: ../src/groupchat_control.py:1304
+#: ../src/groupchat_control.py:1258
#, python-format
msgid "Are you sure you want to leave room \"%s\"?"
msgstr "¿Estás seguro de querer abandonar el salón \"%s\"?"
-#: ../src/groupchat_control.py:1305
+#: ../src/groupchat_control.py:1259
msgid "If you close this window, you will be disconnected from this room."
msgstr "Si cierras esta ventana, serás desconectado de este salón."
-#: ../src/groupchat_control.py:1309
+#: ../src/groupchat_control.py:1263
#, fuzzy
msgid "Do _not ask me again"
msgstr "_No preguntarme otra vez"
-#: ../src/groupchat_control.py:1343
+#: ../src/groupchat_control.py:1297
msgid "Changing Subject"
msgstr "Cambiando el tema"
-#: ../src/groupchat_control.py:1344
+#: ../src/groupchat_control.py:1298
msgid "Please specify the new subject:"
msgstr "Especifica el nuevo tema:"
-#: ../src/groupchat_control.py:1352
+#: ../src/groupchat_control.py:1306
msgid "Changing Nickname"
msgstr "Cambiando alias"
-#: ../src/groupchat_control.py:1353
+#: ../src/groupchat_control.py:1307
msgid "Please specify the new nickname you want to use:"
msgstr "Especifica el nuevo alias que quieres usar:"
-#: ../src/groupchat_control.py:1379
+#: ../src/groupchat_control.py:1333
msgid "Bookmark already set"
msgstr "Marcador ya definido"
-#: ../src/groupchat_control.py:1380
+#: ../src/groupchat_control.py:1334
#, python-format
msgid "Room \"%s\" is already in your bookmarks."
msgstr "El salón \"%s\" ya se encuentra en tus marcadores."
-#: ../src/groupchat_control.py:1389
+#: ../src/groupchat_control.py:1343
msgid "Bookmark has been added successfully"
msgstr "Marcador añadido con éxito"
-#: ../src/groupchat_control.py:1390
+#: ../src/groupchat_control.py:1344
msgid "You can manage your bookmarks via Actions menu in your roster."
msgstr "Puedes gestionar tus marcadores mediante el menú Acciones de tu roster"
#. ask for reason
-#: ../src/groupchat_control.py:1500
+#: ../src/groupchat_control.py:1454
#, python-format
msgid "Kicking %s"
msgstr "Expulsando a %s"
-#: ../src/groupchat_control.py:1501 ../src/groupchat_control.py:1779
+#: ../src/groupchat_control.py:1455 ../src/groupchat_control.py:1733
msgid "You may specify a reason below:"
msgstr "Debes especificar un motivo debajo:"
#. ask for reason
-#: ../src/groupchat_control.py:1778
+#: ../src/groupchat_control.py:1732
#, python-format
msgid "Banning %s"
msgstr "Expulsando a %s"
@@ -4223,10 +4394,6 @@ msgstr "Migrando el registro..."
msgid "%(who)s on %(time)s said: %(message)s\n"
msgstr ""
-#: ../src/history_manager.py:467
-msgid "who"
-msgstr ""
-
#: ../src/history_manager.py:505
msgid "Do you really want to delete logs of the selected contact?"
msgid_plural "Do you really want to delete logs of the selected contacts?"
@@ -4253,7 +4420,7 @@ msgstr "Histórico de conversaciones con %s"
msgid "%(nick)s is now %(status)s: %(status_msg)s"
msgstr "%(nick)s está ahora %(status)s: %(status_msg)s"
-#: ../src/history_window.py:262 ../src/notify.py:113
+#: ../src/history_window.py:262 ../src/notify.py:181
#, python-format
msgid "%(nick)s is now %(status)s"
msgstr "%(nick)s está ahora %(status)s"
@@ -4268,79 +4435,74 @@ msgstr "El estado es ahora: %(status)s: %(status_msg)s "
msgid "Status is now: %(status)s"
msgstr "El estado es ahora: %(status)s"
-#: ../src/message_window.py:244
+#: ../src/message_window.py:254
#, fuzzy
msgid "Messages"
msgstr "Mensaje"
-#: ../src/message_window.py:245
+#: ../src/message_window.py:255
#, fuzzy, python-format
msgid "%s - Gajim"
msgstr "Gajim"
-#: ../src/notify.py:111
+#: ../src/notify.py:179
#, fuzzy, python-format
msgid "%(nick)s Changed Status"
msgstr "%(nick)s está ahora %(status)s"
-#: ../src/notify.py:121
+#: ../src/notify.py:189
#, fuzzy, python-format
msgid "%(nickname)s Signed In"
msgstr "Contacto conectado"
-#: ../src/notify.py:129
+#: ../src/notify.py:197
#, fuzzy, python-format
msgid "%(nickname)s Signed Out"
msgstr "Contacto desconectado"
-#: ../src/notify.py:141
+#: ../src/notify.py:209
#, fuzzy, python-format
msgid "New Single Message from %(nickname)s"
msgstr "Nuevo mensaje"
-#: ../src/notify.py:150
+#: ../src/notify.py:217
#, fuzzy, python-format
msgid "New Private Message from room %s"
msgstr "Nuevo mensaje privado"
-#: ../src/notify.py:151
+#: ../src/notify.py:218
#, python-format
msgid "%(nickname)s: %(message)s"
msgstr ""
-#: ../src/notify.py:157
+#: ../src/notify.py:224
#, fuzzy, python-format
msgid "New Message from %(nickname)s"
msgstr "Nuevo mensaje como %s "
-#: ../src/roster_window.py:131
+#: ../src/roster_window.py:137
msgid "Merged accounts"
msgstr "Cuentas combinadas"
-#: ../src/roster_window.py:288 ../src/common/helpers.py:39
+#: ../src/roster_window.py:297 ../src/common/helpers.py:40
#, fuzzy
msgid "Observers"
msgstr "Servidor"
-#: ../src/roster_window.py:544
-#, python-format
-msgid "You are already in room %s"
-msgstr "Ya estás en el salón %s"
-
-#: ../src/roster_window.py:548 ../src/roster_window.py:2280
+#: ../src/roster_window.py:594 ../src/roster_window.py:2574
msgid "You cannot join a room while you are invisible"
msgstr "No puedes entrar a un salón de chat estando invisible"
#. the 'manage gc bookmarks' item is showed
#. below to avoid duplicate code
#. add
-#: ../src/roster_window.py:748
+#: ../src/roster_window.py:793
#, python-format
msgid "to %s account"
msgstr "a la cuenta %s"
#. disco
-#: ../src/roster_window.py:755
+#: ../src/roster_window.py:798
#, python-format
msgid "using %s account"
msgstr "usando la cuenta %s"
@@ -4348,109 +4510,127 @@ msgstr "usando la cuenta %s"
#. new chat
#. for chat_with
#. for single message
-#: ../src/roster_window.py:763 ../src/systray.py:193 ../src/systray.py:198
+#: ../src/roster_window.py:804 ../src/systray.py:199 ../src/systray.py:204
#, python-format
msgid "using account %s"
msgstr "usando la cuenta %s"
#. profile, avatar
-#: ../src/roster_window.py:772
+#: ../src/roster_window.py:870
#, fuzzy, python-format
msgid "of account %s"
msgstr "para la cuenta %s"
-#: ../src/roster_window.py:831
+#: ../src/roster_window.py:890
msgid "Manage Bookmarks..."
msgstr "Gestionar marcadores..."
-#: ../src/roster_window.py:855
+#: ../src/roster_window.py:914
#, python-format
msgid "for account %s"
msgstr "para la cuenta %s"
#. History manager
-#: ../src/roster_window.py:876
+#: ../src/roster_window.py:935
#, fuzzy
msgid "History Manager"
msgstr "_Histórico"
-#: ../src/roster_window.py:885
+#: ../src/roster_window.py:944
msgid "_Join New Room"
msgstr "_Entrar en un nuevo salón"
-#: ../src/roster_window.py:1159
+#: ../src/roster_window.py:1223
#, python-format
msgid "Transport \"%s\" will be removed"
msgstr "El transporte \"%s\" será eliminado"
-#: ../src/roster_window.py:1159
+#: ../src/roster_window.py:1224
msgid ""
"You will no longer be able to send and receive messages to contacts from "
"this transport."
msgstr ""
"Ya no podrás enviar y recibir mensajes a contactos desde este transporte"
-#: ../src/roster_window.py:1201
+#: ../src/roster_window.py:1226
+#, fuzzy
+msgid "Transports will be removed"
+msgstr "El transporte \"%s\" será eliminado"
+
+#: ../src/roster_window.py:1231
+#, fuzzy, python-format
+msgid ""
+"You will no longer be able to send and receive messages to contacts from "
+"these transports:%s"
+msgstr ""
+"Ya no podrás enviar y recibir mensajes a contactos desde este transporte"
+
+#: ../src/roster_window.py:1275
msgid "Assign OpenPGP Key"
msgstr "Asignar clave OpenPGP"
-#: ../src/roster_window.py:1202
+#: ../src/roster_window.py:1276
msgid "Select a key to apply to the contact"
msgstr "Selecciona una clave para ser aplicada al contacto"
-#: ../src/roster_window.py:1358
+#: ../src/roster_window.py:1413 ../src/roster_window.py:1588
+#, fuzzy
+msgid "_New room"
+msgstr "Nuevo salón"
+
+#: ../src/roster_window.py:1471
msgid "I would like to add you to my roster"
msgstr "Me gustaría añadirte a mi lista de contactos"
-#: ../src/roster_window.py:1410
+#: ../src/roster_window.py:1647
msgid "Re_name"
msgstr "Re_nombrar"
-#: ../src/roster_window.py:1441
+#: ../src/roster_window.py:1678
msgid "_Log on"
msgstr "_Conectar"
-#: ../src/roster_window.py:1450
+#: ../src/roster_window.py:1687
msgid "Log _off"
msgstr "_Desconectar"
-#: ../src/roster_window.py:1545
+#: ../src/roster_window.py:1782
msgid "_Change Status Message"
msgstr "_Cambiar mensaje de estado"
-#: ../src/roster_window.py:1621
+#: ../src/roster_window.py:1858
msgid "Authorization has been sent"
msgstr "La autorización ha sido enviada"
-#: ../src/roster_window.py:1622
+#: ../src/roster_window.py:1859
#, python-format
msgid "Now \"%s\" will know your status."
msgstr "Ahora \"%s\" podrá saber tu estado."
-#: ../src/roster_window.py:1646
+#: ../src/roster_window.py:1883
msgid "Subscription request has been sent"
msgstr "La petición de subscripción ha sido enviada"
-#: ../src/roster_window.py:1647
+#: ../src/roster_window.py:1884
#, python-format
msgid "If \"%s\" accepts this request you will know his or her status."
msgstr "Si \"%s\" acepta esta petición podrás saber su estado."
-#: ../src/roster_window.py:1658
+#: ../src/roster_window.py:1895
msgid "Authorization has been removed"
msgstr "La autorización ha sido eliminada"
-#: ../src/roster_window.py:1659
+#: ../src/roster_window.py:1896
#, python-format
msgid "Now \"%s\" will always see you as offline."
msgstr "Ahora \"%s\" siempre te verá desconectado."
-#: ../src/roster_window.py:1822
+#: ../src/roster_window.py:2102
#, python-format
msgid "Contact \"%s\" will be removed from your roster"
msgstr "El contacto \"%s\" será eliminado de tu roster"
-#: ../src/roster_window.py:1826
+#: ../src/roster_window.py:2106
#, fuzzy
msgid ""
"By removing this contact you also remove authorization resulting in him or "
@@ -4459,7 +4639,7 @@ msgstr ""
"Eliminando este contacto también se está eliminando la autorización. Este "
"contacto siempre te verá desconectado."
-#: ../src/roster_window.py:1830
+#: ../src/roster_window.py:2110
msgid ""
"By removing this contact you also by default remove authorization resulting "
"in him or her always seeing you as offline."
@@ -4467,37 +4647,52 @@ msgstr ""
"Eliminando este contacto también se está eliminando la autorización. Este "
"contacto siempre te verá desconectado."
-#: ../src/roster_window.py:1831
+#: ../src/roster_window.py:2111
msgid "I want this contact to know my status after removal"
msgstr "Quiero que este contacto conozca mi estado después de la eliminación"
-#: ../src/roster_window.py:1899
+#. several contact to remove at the same time
+#: ../src/roster_window.py:2115
+#, fuzzy
+msgid "Contacts will be removed from your roster"
+msgstr "El contacto \"%s\" será eliminado de tu roster"
+
+#: ../src/roster_window.py:2119
+#, fuzzy, python-format
+msgid ""
+"By removing these contacts:%s\n"
+"you also remove authorization resulting in them always seeing you as offline."
+msgstr ""
+"Eliminando este contacto también se está eliminando la autorización. Este "
+"contacto siempre te verá desconectado."
+
+#: ../src/roster_window.py:2189
msgid "Passphrase Required"
msgstr "Contraseña requerida"
-#: ../src/roster_window.py:1900
+#: ../src/roster_window.py:2190
#, fuzzy, python-format
msgid "Enter GPG key passphrase for account %s."
msgstr "Introduce contraseña GPG para la cuenta %s"
-#: ../src/roster_window.py:1905
+#: ../src/roster_window.py:2195
msgid "Save passphrase"
msgstr "Guardar contraseña"
-#: ../src/roster_window.py:1913
+#: ../src/roster_window.py:2203
#, fuzzy
msgid "Wrong Passphrase"
msgstr "Contraseña"
-#: ../src/roster_window.py:1914
+#: ../src/roster_window.py:2204
msgid "Please retype your GPG passphrase or press Cancel."
msgstr ""
-#: ../src/roster_window.py:1963 ../src/roster_window.py:2020
+#: ../src/roster_window.py:2256 ../src/roster_window.py:2313
msgid "You are participating in one or more group chats"
msgstr "Estás participando en uno o más grupos de charla"
-#: ../src/roster_window.py:1964 ../src/roster_window.py:2021
+#: ../src/roster_window.py:2257 ../src/roster_window.py:2314
msgid ""
"Changing your status to invisible will result in disconnection from those "
"group chats. Are you sure you want to go invisible?"
@@ -4505,19 +4700,19 @@ msgstr ""
"Cambiando tu estado a invisible provocará tu desconexión de los grupos de "
"charla. ¿Estás seguro de querer ser invisible?"
-#: ../src/roster_window.py:1980
+#: ../src/roster_window.py:2273
msgid "No account available"
msgstr "Cuenta no disponible"
-#: ../src/roster_window.py:1981
+#: ../src/roster_window.py:2274
msgid "You must create an account before you can chat with other contacts."
msgstr "Debes crear una cuenta antes de poder conversar con otros contactos."
-#: ../src/roster_window.py:2452 ../src/roster_window.py:2458
+#: ../src/roster_window.py:2746 ../src/roster_window.py:2752
msgid "You have unread messages"
msgstr "Tienes mensajes sin leer"
-#: ../src/roster_window.py:2453 ../src/roster_window.py:2459
+#: ../src/roster_window.py:2747 ../src/roster_window.py:2753
msgid ""
"Messages will only be available for reading them later if you have history "
"enabled."
@@ -4525,25 +4720,25 @@ msgstr ""
"Los mensajes sólo estarán disponibles para lectura posterior si tienes el "
"histórico activado"
-#: ../src/roster_window.py:3231
+#: ../src/roster_window.py:3542
#, fuzzy, python-format
msgid "Drop %s in group %s"
msgstr "De %s en el salón %s"
-#: ../src/roster_window.py:3238
+#: ../src/roster_window.py:3549
#, fuzzy, python-format
msgid "Make %s and %s metacontacts"
msgstr "Enviar archivo a un contacto"
-#: ../src/roster_window.py:3408
+#: ../src/roster_window.py:3726
msgid "Change Status Message..."
msgstr "Cambiar mensaje de estado..."
-#: ../src/systray.py:154
+#: ../src/systray.py:160
msgid "_Change Status Message..."
msgstr "_Cambiar mensaje de estado..."
-#: ../src/systray.py:231
+#: ../src/systray.py:237
msgid "Hide this menu"
msgstr "Oculta este menú"
@@ -4676,20 +4871,20 @@ msgstr ""
msgid "Could not load image"
msgstr ""
-#: ../src/vcard.py:289
+#: ../src/vcard.py:291
msgid "?Client:Unknown"
msgstr "Desconocido"
-#: ../src/vcard.py:291
+#: ../src/vcard.py:293
msgid "?OS:Unknown"
msgstr "Desconocido"
-#: ../src/vcard.py:308
+#: ../src/vcard.py:312
#, fuzzy, python-format
msgid "since %s"
msgstr "Navegando %s"
-#: ../src/vcard.py:332
+#: ../src/vcard.py:336
msgid ""
"This contact is interested in your presence information, but you are not "
"interested in his/her presence"
@@ -4697,7 +4892,7 @@ msgstr ""
"Este contacto está interesado en la información de tu presencia, pero tú no "
"lo estás en la suya"
-#: ../src/vcard.py:334
+#: ../src/vcard.py:338
msgid ""
"You are interested in the contact's presence information, but he/she is not "
"interested in yours"
@@ -4705,14 +4900,14 @@ msgstr ""
"Estás interesado en la información de la presencia del contacto, pero él/"
"ella no lo está en la tuya"
-#: ../src/vcard.py:336
+#: ../src/vcard.py:340
msgid "You and the contact are interested in each other's presence information"
msgstr ""
"Tanto tú como el contacto estáis interesados en la información de la "
"presencia del otro"
#. None
-#: ../src/vcard.py:338
+#: ../src/vcard.py:342
msgid ""
"You are not interested in the contact's presence, and neither he/she is "
"interested in yours"
@@ -4720,24 +4915,24 @@ msgstr ""
"No estás interesado en la presencia del contacto y el/ella tampoco lo está "
"en el tuyuo"
-#: ../src/vcard.py:347
+#: ../src/vcard.py:351
msgid "You are waiting contact's answer about your subscription request"
msgstr ""
"Estás esperando la respuesta del contacto acerca de tu petición de adición"
-#: ../src/vcard.py:359 ../src/vcard.py:382
+#: ../src/vcard.py:363 ../src/vcard.py:386
msgid " resource with priority "
msgstr " recurso con prioridad "
-#: ../src/vcard.py:458
+#: ../src/vcard.py:463
msgid "Without a connection you can not publish your contact information."
msgstr "Sin una conexión no puedes publicar tu información de contacto."
-#: ../src/vcard.py:491
+#: ../src/vcard.py:496
msgid "Without a connection, you can not get your contact information."
msgstr "Sin una conexión, no puedes obtener tu información de contacto."
-#: ../src/vcard.py:495
+#: ../src/vcard.py:500
#, fuzzy
msgid "Personal details"
msgstr "Información personal"
@@ -4746,23 +4941,23 @@ msgstr "Información personal"
msgid "creating logs database"
msgstr "creando base de datos de registros"
-#: ../src/common/check_paths.py:82 ../src/common/check_paths.py:93
-#: ../src/common/check_paths.py:100
+#: ../src/common/check_paths.py:87 ../src/common/check_paths.py:98
+#: ../src/common/check_paths.py:105
#, python-format
msgid "%s is file but it should be a directory"
msgstr "%s es un archivo pero podría ser un directorio"
-#: ../src/common/check_paths.py:83 ../src/common/check_paths.py:94
-#: ../src/common/check_paths.py:101 ../src/common/check_paths.py:109
+#: ../src/common/check_paths.py:88 ../src/common/check_paths.py:99
+#: ../src/common/check_paths.py:106 ../src/common/check_paths.py:114
msgid "Gajim will now exit"
msgstr "Gajim se cerrará ahora"
-#: ../src/common/check_paths.py:108
+#: ../src/common/check_paths.py:113
#, python-format
msgid "%s is directory but should be file"
msgstr "%s es un directorio pero podría ser un archivo"
-#: ../src/common/check_paths.py:124
+#: ../src/common/check_paths.py:129
#, python-format
msgid "creating %s directory"
msgstr "creando directorio %s"
@@ -4812,46 +5007,54 @@ msgid "List (space separated) of rows (accounts and groups) that are collapsed"
msgstr ""
#: ../src/common/config.py:83
+msgid "Language used by speller"
+msgstr ""
+
+#: ../src/common/config.py:88
+msgid "Languages available in speller"
+msgstr ""
+
+#: ../src/common/config.py:89
msgid ""
"'always' - print time for every message.\n"
"'sometimes' - print time every print_ichat_every_foo_minutes minute.\n"
"'never' - never print time."
msgstr ""
-#: ../src/common/config.py:84
+#: ../src/common/config.py:90
msgid ""
"Value of fuzziness from 1 to 4 or 0 to disable fuzzyclock. 1 is the most "
"precise clock, 4 the less precise one."
msgstr ""
-#: ../src/common/config.py:87
+#: ../src/common/config.py:93
msgid "Treat * / _ pairs as possible formatting characters."
msgstr ""
-#: ../src/common/config.py:88
+#: ../src/common/config.py:94
msgid ""
"If True, do not remove */_ . So *abc* will be bold but with * * not removed."
msgstr ""
"Si es True, no elimiina */_ . Entonces *abc* será negrita, pero sin eliminar "
"* *"
-#: ../src/common/config.py:98
+#: ../src/common/config.py:104
msgid ""
"Character to add after nickname when using nick completion (tab) in group "
"chat"
msgstr ""
-#: ../src/common/config.py:99
+#: ../src/common/config.py:105
msgid ""
"Character to propose to add after desired nickname when desired nickname is "
"used by someone else in group chat"
msgstr ""
-#: ../src/common/config.py:131
+#: ../src/common/config.py:137
msgid "Add * and [n] in roster title?"
msgstr "¿Añadir * y [n] en el título del roster?"
-#: ../src/common/config.py:132
+#: ../src/common/config.py:138
msgid ""
"How many lines to remember from previous conversation when a chat tab/window "
"is reopened."
@@ -4859,12 +5062,12 @@ msgstr ""
"Cuántas líneas recordar de la última conversación cuando se vuelve a abrir "
"una pestaña/ventana de conversación"
-#: ../src/common/config.py:133
+#: ../src/common/config.py:139
msgid "How many minutes should last lines from previous conversation last."
msgstr ""
"Cuántos minutos debe durar la última línea de la conversación anterior."
-#: ../src/common/config.py:134
+#: ../src/common/config.py:140
msgid ""
"Send message on Ctrl+Enter and with Enter make new line (Mirabilis ICQ "
"Client default behaviour)."
@@ -4872,11 +5075,11 @@ msgstr ""
"Envía un mensaje con Ctrl+Intro y con Intro hace un nuevo renglón (Al estilo "
"del cliente Mirabilis ICQ)"
-#: ../src/common/config.py:136
+#: ../src/common/config.py:142
msgid "How many lines to store for Ctrl+KeyUP."
msgstr "Cuántas líneas almacenar para Ctrl+Arriba."
-#: ../src/common/config.py:139
+#: ../src/common/config.py:145
#, python-format
msgid ""
"Either custom url with %s in it where %s is the word/phrase or 'WIKTIONARY' "
@@ -4885,36 +5088,36 @@ msgstr ""
"URL personalizada con %s donde %s es la palabra/frase o 'WIKTIONARY' que "
"significa usar wiktionary"
-#: ../src/common/config.py:142
+#: ../src/common/config.py:148
msgid "If checked, Gajim can be controlled remotely using gajim-remote."
msgstr ""
"Si está marcado, Gajim puede ser controlado remotamente usando gajim-remote."
-#: ../src/common/config.py:145
+#: ../src/common/config.py:151
msgid ""
"When not printing time for every message (print_time==sometimes), print it "
"every x minutes"
msgstr ""
-#: ../src/common/config.py:146
+#: ../src/common/config.py:152
msgid "Ask before closing a group chat tab/window."
msgstr "Preguntar antes de cerrar una ventana/petaña de salón de charla."
-#: ../src/common/config.py:147
+#: ../src/common/config.py:153
#, fuzzy
msgid ""
"Always ask before closing group chat tab/window in this space separated list "
"of room jids."
msgstr "Preguntar antes de cerrar una ventana/petaña de salón de charla."
-#: ../src/common/config.py:148
+#: ../src/common/config.py:154
#, fuzzy
msgid ""
"Never ask before closing group chat tab/window in this space separated list "
"of room jids."
msgstr "Preguntar antes de cerrar una ventana/petaña de salón de charla."
-#: ../src/common/config.py:151
+#: ../src/common/config.py:157
msgid ""
"Overrides the host we send for File Transfer in case of address translation/"
"port forwarding."
@@ -4922,24 +5125,24 @@ msgstr ""
"Se elimina el host que enviamos para la transferencia de un archivo en caso "
"de traducción de la dirección o redirección de puertos."
-#: ../src/common/config.py:153
+#: ../src/common/config.py:159
msgid "IEC standard says KiB = 1024 bytes, KB = 1000 bytes."
msgstr "Según el estándar IEC, KiB = 1024 bytes, KB = 1000 bytes."
-#: ../src/common/config.py:161
+#: ../src/common/config.py:167
msgid "Show tab when only one conversation?"
msgstr "¿Mostrar pestaña cuando sólo hay una conversación?"
-#: ../src/common/config.py:162
+#: ../src/common/config.py:168
#, fuzzy
msgid "Show tabbed notebook border in chat windows?"
msgstr "¿Mostrar borde de la pestaña cuando sólo hay una conversación?"
-#: ../src/common/config.py:163
+#: ../src/common/config.py:169
msgid "Show close button in tab?"
msgstr "¿Mostrar botón de cerrar en la pestaña?"
-#: ../src/common/config.py:176
+#: ../src/common/config.py:182
msgid ""
"A semicolon-separated list of words that will be highlighted in multi-user "
"chat."
@@ -4947,7 +5150,7 @@ msgstr ""
"Una lista de palabras separadas por ';' que serán resaltadas en las "
"conversaciones de varios usuarios."
-#: ../src/common/config.py:177
+#: ../src/common/config.py:183
msgid ""
"If True, quits Gajim when X button of Window Manager is clicked. This "
"setting is taken into account only if trayicon is used."
@@ -4956,11 +5159,11 @@ msgstr ""
"pulsado. Esta preferencia sólo se activa si se usa el icono del área de "
"notificación. "
-#: ../src/common/config.py:178
+#: ../src/common/config.py:184
msgid "If True, Gajim registers for xmpp:// on each startup."
msgstr "Si es True, Gajim registra xmpp:// en cada inicio."
-#: ../src/common/config.py:179
+#: ../src/common/config.py:185
msgid ""
"If True, Gajim will display an icon on each tab containing unread messages. "
"Depending on the theme, this icon may be animated."
@@ -4968,7 +5171,7 @@ msgstr ""
"Si es True, Gajim mostrará un icono en cada pestaña que contenga mensajes "
"sin leer. Dependiendo del tema, este icono puede ser animado."
-#: ../src/common/config.py:180
+#: ../src/common/config.py:186
msgid ""
"If True, Gajim will display the status message, if not empty, for every "
"contact under the contact name in roster window"
@@ -4976,7 +5179,7 @@ msgstr ""
"Si es True, Gajim mostrará el mensaje de estado, si no está vacío, para cada "
"contacto bajo su nombre en la lista de contactos."
-#: ../src/common/config.py:182
+#: ../src/common/config.py:188
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."
@@ -4984,7 +5187,7 @@ msgstr ""
"Si es True, Gajim pedirá un avatar a cada contacto que no tuvo un avatar la "
"última vez o se tiene guardado uno demasiado antiguo."
-#: ../src/common/config.py:183
+#: ../src/common/config.py:189
#, fuzzy
msgid ""
"If False, Gajim will no longer print status line in chats when a contact "
@@ -4993,7 +5196,7 @@ msgstr ""
"Si es False, no verás más la línea de estado en las conversaciones cuando un "
"contacto cambia su estado y/o su mensaje de estado."
-#: ../src/common/config.py:184
+#: ../src/common/config.py:190
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 "
@@ -5002,25 +5205,30 @@ msgid ""
"room"
msgstr ""
-#: ../src/common/config.py:187
+#: ../src/common/config.py:193
+msgid ""
+"If True, restored messages will use a smaller font than the default one."
+msgstr ""
+
+#: ../src/common/config.py:194
msgid "Don't show avatar for the transport itself."
msgstr ""
-#: ../src/common/config.py:189
+#: ../src/common/config.py:196
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 "
"pending events."
msgstr ""
-#: ../src/common/config.py:191
+#: ../src/common/config.py:198
msgid ""
"Jabberd1.4 does not like sha info when one join a password protected room. "
"Turn this option to False to stop sending sha info in groupchat presences"
msgstr ""
#. always, never, peracct, pertype should not be translated
-#: ../src/common/config.py:194
+#: ../src/common/config.py:201
msgid ""
"Controls the window where new messages are placed.\n"
"'always' - All messages are sent to a single window.\n"
@@ -5031,112 +5239,158 @@ msgid ""
"the changes will take effect"
msgstr ""
-#: ../src/common/config.py:195
+#: ../src/common/config.py:202
msgid "If False, you will no longer see the avatar in the chat window"
msgstr ""
-#: ../src/common/config.py:196
+#: ../src/common/config.py:203
msgid "If True, pressing the escape key closes a tab/window"
msgstr ""
-#: ../src/common/config.py:197
+#: ../src/common/config.py:204
#, fuzzy
msgid "Hides the buttons in group chat window"
msgstr "Preguntar antes de cerrar una ventana/petaña de salón de charla."
-#: ../src/common/config.py:198
+#: ../src/common/config.py:205
msgid "Hides the buttons in two persons chat window"
msgstr ""
-#: ../src/common/config.py:199
+#: ../src/common/config.py:206
#, fuzzy
msgid "Hides the banner in a group chat window"
msgstr "Preguntar antes de cerrar una ventana/petaña de salón de charla."
-#: ../src/common/config.py:200
+#: ../src/common/config.py:207
msgid "Hides the banner in two persons chat window"
msgstr ""
-#: ../src/common/config.py:201
+#: ../src/common/config.py:208
msgid "Hides the room occupants list in groupchat window"
msgstr ""
-#: ../src/common/config.py:202
+#: ../src/common/config.py:209
msgid "Merge consecutive nickname in chat window"
msgstr ""
-#: ../src/common/config.py:203
+#: ../src/common/config.py:210
msgid "Indentation when using merge consecutive nickame"
msgstr ""
-#: ../src/common/config.py:204
+#: ../src/common/config.py:211
msgid "List of colors that will be used to color nicknames in groupchats"
msgstr ""
+#: ../src/common/config.py:212
+msgid "Ctrl-Tab go to next composing tab when none is unread"
+msgstr ""
+
#. yes, no, ask
-#: ../src/common/config.py:237
+#: ../src/common/config.py:245
msgid "Jabberd2 workaround"
msgstr ""
-#: ../src/common/config.py:241
+#: ../src/common/config.py:249
msgid ""
"If checked, Gajim will use your IP and proxies defined in "
"file_transfer_proxies option for file transfer."
msgstr ""
-#: ../src/common/config.py:297
+#: ../src/common/config.py:310
+msgid "all or space separated status"
+msgstr ""
+
+#: ../src/common/config.py:311
+msgid "'yes', 'no', or 'both'"
+msgstr ""
+
+#: ../src/common/config.py:312 ../src/common/config.py:314
+#: ../src/common/config.py:315 ../src/common/config.py:318
+#: ../src/common/config.py:319
+msgid "'yes', 'no' or ''"
+msgstr ""
+
+#: ../src/common/config.py:325
msgid "Sleeping"
msgstr "Durmiendo"
-#: ../src/common/config.py:298
+#: ../src/common/config.py:326
msgid "Back soon"
msgstr "Vuelvo pronto"
-#: ../src/common/config.py:298
+#: ../src/common/config.py:326
msgid "Back in some minutes."
msgstr "Vuelvo en unos minutos."
-#: ../src/common/config.py:299
+#: ../src/common/config.py:327
msgid "Eating"
msgstr "Comiendo"
-#: ../src/common/config.py:299
+#: ../src/common/config.py:327
msgid "I'm eating, so leave me a message."
msgstr "Estoy comiendo, déjame un mensaje."
-#: ../src/common/config.py:300
+#: ../src/common/config.py:328
msgid "Movie"
msgstr "Película"
-#: ../src/common/config.py:300
+#: ../src/common/config.py:328
msgid "I'm watching a movie."
msgstr "Estoy viendo una película."
-#: ../src/common/config.py:301
+#: ../src/common/config.py:329
msgid "Working"
msgstr "Trabajando"
-#: ../src/common/config.py:301
+#: ../src/common/config.py:329
msgid "I'm working."
msgstr "Estoy trabajando."
-#: ../src/common/config.py:302
+#: ../src/common/config.py:330
msgid "Phone"
msgstr "Teléfono"
-#: ../src/common/config.py:302
+#: ../src/common/config.py:330
msgid "I'm on the phone."
msgstr "Estoy al teléfono."
-#: ../src/common/config.py:303
+#: ../src/common/config.py:331
msgid "Out"
msgstr "Fuera"
-#: ../src/common/config.py:303
+#: ../src/common/config.py:331
msgid "I'm out enjoying life"
msgstr "Estoy disfrutando la vida"
-#: ../src/common/config.py:312
+#: ../src/common/config.py:335
+#, fuzzy
+msgid "I'm avavilable"
+msgstr "En línea"
+
+#: ../src/common/config.py:336
+#, fuzzy
+msgid "I'm free for chat"
+msgstr "Libre para hablar"
+
+#: ../src/common/config.py:337
+msgid "Be right back"
+msgstr ""
+
+#: ../src/common/config.py:338
+#, fuzzy
+msgid "I'm not available"
+msgstr "Servicio no disponible"
+
+#: ../src/common/config.py:339
+msgid "Do not disturb"
+msgstr ""
+
+#: ../src/common/config.py:340 ../src/common/config.py:341
+#, fuzzy
+msgid "Bye !"
+msgstr "Ocupado"
+
+#: ../src/common/config.py:350
msgid ""
"Sound to play when a MUC message contains one of the words in "
"muc_highlight_words, or when a MUC message contains your nickname."
@@ -5144,7 +5398,7 @@ msgstr ""
"Sonido a reproducir cuando un mensaje MUC contiene una de las palabras "
"listadas en muc_highlight_words, o cuando un mensaje MUC contiene tu alias."
-#: ../src/common/config.py:313
+#: ../src/common/config.py:351
msgid ""
"Sound to play when any MUC message arrives. (This setting is taken into "
"account only if notify_on_all_muc_messages is True)"
@@ -5152,99 +5406,99 @@ msgstr ""
"Sonido a reproducir cuando se recibe cualquier mensaje MUC. (Esta "
"preferencia sólo se activa si notify_on_all_muc_messages es False)"
-#: ../src/common/config.py:321 ../src/common/optparser.py:185
+#: ../src/common/config.py:359 ../src/common/optparser.py:188
msgid "green"
msgstr ""
-#: ../src/common/config.py:325 ../src/common/optparser.py:171
+#: ../src/common/config.py:363 ../src/common/optparser.py:174
msgid "grocery"
msgstr ""
-#: ../src/common/config.py:329
+#: ../src/common/config.py:367
msgid "human"
msgstr ""
-#: ../src/common/config.py:333
+#: ../src/common/config.py:371
msgid "marine"
msgstr ""
-#: ../src/common/connection.py:172
+#: ../src/common/connection.py:176
#, python-format
msgid "Connection with account \"%s\" has been lost"
msgstr "Se ha perdido la conexión de la cuenta \"%s\""
-#: ../src/common/connection.py:173
+#: ../src/common/connection.py:177
msgid "To continue sending and receiving messages, you will need to reconnect."
msgstr ""
"Para continuar enviando y reciviendo mensajes, necesitarás volver a conectar."
-#: ../src/common/connection.py:185 ../src/common/connection.py:211
+#: ../src/common/connection.py:189 ../src/common/connection.py:215
#, python-format
msgid "Transport %s answered wrongly to register request."
msgstr ""
#. wrong answer
-#: ../src/common/connection.py:210
+#: ../src/common/connection.py:214
#, fuzzy
msgid "Invalid answer"
msgstr "Contraseña no válida"
-#: ../src/common/connection.py:397 ../src/common/connection.py:433
-#: ../src/common/connection.py:857
+#: ../src/common/connection.py:401 ../src/common/connection.py:437
+#: ../src/common/connection.py:860
#, python-format
msgid "Could not connect to \"%s\""
msgstr "No se puede conectar a \"%s\""
-#: ../src/common/connection.py:411
+#: ../src/common/connection.py:415
#, python-format
msgid "Connected to server %s:%s with %s"
msgstr "Conectado al servidor %s:%s con %s"
-#: ../src/common/connection.py:434
+#: ../src/common/connection.py:438
msgid "Check your connection or try again later"
msgstr "Comprueba tu conexión o inténtalo más tarde"
-#: ../src/common/connection.py:459
+#: ../src/common/connection.py:463
#, python-format
msgid "Authentication failed with \"%s\""
msgstr "Falló la autentificación con \"%s\""
-#: ../src/common/connection.py:460
+#: ../src/common/connection.py:464
msgid "Please check your login and password for correctness."
msgstr ""
"Por favor, comprueba que tu nombre de usuario y contraseña sean correctos."
#. We didn't set a passphrase
-#: ../src/common/connection.py:573
+#: ../src/common/connection.py:577
msgid "OpenPGP passphrase was not given"
msgstr "No se ha facilitado la clave OpenPGP"
#. %s is the account name here
-#: ../src/common/connection.py:575
+#: ../src/common/connection.py:579
#, python-format
msgid "You will be connected to %s without OpenPGP."
msgstr "Te conectarás a %s sin OpenPGP"
#. do not show I'm invisible!
-#: ../src/common/connection.py:612
+#: ../src/common/connection.py:616
msgid "invisible"
msgstr "invisible"
-#: ../src/common/connection.py:613
+#: ../src/common/connection.py:617
msgid "offline"
msgstr "desconectado"
-#: ../src/common/connection.py:614
+#: ../src/common/connection.py:618
#, python-format
msgid "I'm %s"
msgstr "Estoy %s"
#. we're not english
-#: ../src/common/connection.py:699
+#: ../src/common/connection.py:703
msgid "[This message is encrypted]"
msgstr "[Este mensaje está encriptado]"
-#: ../src/common/connection.py:742
+#: ../src/common/connection.py:746
#, python-format
msgid ""
"Subject: %s\n"
@@ -5253,58 +5507,74 @@ msgstr ""
"Tema: %s\n"
"%s"
-#: ../src/common/connection.py:795 ../src/common/connection_handlers.py:1511
-msgid "I would like to add you to my roster."
-msgstr "Me gustaría añadirte a mi lista de contactos"
+#: ../src/common/connection.py:884
+msgid "Not fetched because of invisible status"
+msgstr ""
-#: ../src/common/connection_handlers.py:49
+#: ../src/common/connection_handlers.py:51
#, fuzzy
msgid "Unable to load idle module"
msgstr "No se pudo entrar al salón"
-#: ../src/common/connection_handlers.py:581
+#: ../src/common/connection_handlers.py:176
+#, fuzzy
+msgid "Wrong host"
+msgstr "Contraseña"
+
+#: ../src/common/connection_handlers.py:176
+msgid ""
+"The host you configured as the ft_override_host_to_send advanced option is "
+"not valid, so ignored."
+msgstr ""
+
+#: ../src/common/connection_handlers.py:588
#, python-format
msgid "Registration information for transport %s has not arrived in time"
msgstr "La información de registro para el transporte %s no llegó a tiempo"
+#: ../src/common/connection_handlers.py:1438
+#, fuzzy, python-format
+msgid "Nickname not allowed: %s"
+msgstr "Alias no encontrado: %s"
+
#. password required to join
#. we are banned
#. room does not exist
-#: ../src/common/connection_handlers.py:1450
-#: ../src/common/connection_handlers.py:1453
-#: ../src/common/connection_handlers.py:1456
-#: ../src/common/connection_handlers.py:1459
-#: ../src/common/connection_handlers.py:1462
-#: ../src/common/connection_handlers.py:1465
-#: ../src/common/connection_handlers.py:1473
+#: ../src/common/connection_handlers.py:1507
+#: ../src/common/connection_handlers.py:1510
+#: ../src/common/connection_handlers.py:1513
+#: ../src/common/connection_handlers.py:1516
+#: ../src/common/connection_handlers.py:1519
+#: ../src/common/connection_handlers.py:1522
+#: ../src/common/connection_handlers.py:1530
msgid "Unable to join room"
msgstr "No se pudo entrar al salón"
-#: ../src/common/connection_handlers.py:1451
+#: ../src/common/connection_handlers.py:1508
msgid "A password is required to join this room."
msgstr "Se requiere una contraseña para entrar a este salón"
-#: ../src/common/connection_handlers.py:1454
+#: ../src/common/connection_handlers.py:1511
msgid "You are banned from this room."
msgstr "Estás expulsado de este salón"
-#: ../src/common/connection_handlers.py:1457
+#: ../src/common/connection_handlers.py:1514
msgid "Such room does not exist."
msgstr "No existe el salón."
-#: ../src/common/connection_handlers.py:1460
+#: ../src/common/connection_handlers.py:1517
msgid "Room creation is restricted."
msgstr "La creación de salones está restringida."
-#: ../src/common/connection_handlers.py:1463
+#: ../src/common/connection_handlers.py:1520
msgid "Your registered nickname must be used."
msgstr "Es necesario usar el alias registrado."
-#: ../src/common/connection_handlers.py:1466
+#: ../src/common/connection_handlers.py:1523
msgid "You are not in the members list."
msgstr "No estás en la lista de miembros"
-#: ../src/common/connection_handlers.py:1474
+#: ../src/common/connection_handlers.py:1531
msgid ""
"Your desired nickname is in use or registered by another occupant.\n"
"Please specify another nickname below:"
@@ -5312,23 +5582,27 @@ msgstr ""
"Tu alias deseado está en uso o registrado por otro ocupante. \n"
"Por favor, especifica otro alias abajo:"
+#: ../src/common/connection_handlers.py:1577
+msgid "I would like to add you to my roster."
+msgstr "Me gustaría añadirte a mi lista de contactos"
+
#. BE CAREFUL: no con.updateRosterItem() in a callback
-#: ../src/common/connection_handlers.py:1519
+#: ../src/common/connection_handlers.py:1598
#, python-format
msgid "we are now subscribed to %s"
msgstr "estamos ahora suscritos a %s"
-#: ../src/common/connection_handlers.py:1521
+#: ../src/common/connection_handlers.py:1600
#, python-format
msgid "unsubscribe request from %s"
msgstr "petición de eliminación de suscripción de %s"
-#: ../src/common/connection_handlers.py:1523
+#: ../src/common/connection_handlers.py:1602
#, python-format
msgid "we are now unsubscribed from %s"
msgstr "ya no estamos suscritos a %s"
-#: ../src/common/connection_handlers.py:1680
+#: ../src/common/connection_handlers.py:1772
#, fuzzy, python-format
msgid ""
"JID %s is not RFC compliant. It will not be added to your roster. Use roster "
@@ -5338,198 +5612,190 @@ msgstr ""
"herramientas de gestión del roster como http://jru.jabberstudio.org/ para "
"eliminarlo"
-#: ../src/common/helpers.py:100
+#: ../src/common/helpers.py:101
msgid "Invalid character in username."
msgstr "Caracter no válido en el nombre de usuario."
-#: ../src/common/helpers.py:105
+#: ../src/common/helpers.py:106
msgid "Server address required."
msgstr "Se requiere la dirección del servidor."
-#: ../src/common/helpers.py:110
+#: ../src/common/helpers.py:111
msgid "Invalid character in hostname."
msgstr "Carácter no válido en el nombre del host."
-#: ../src/common/helpers.py:116
+#: ../src/common/helpers.py:117
msgid "Invalid character in resource."
msgstr "Carácter no válido en el recurso."
#. GiB means gibibyte
-#: ../src/common/helpers.py:156
+#: ../src/common/helpers.py:157
#, python-format
msgid "%s GiB"
msgstr ""
#. GB means gigabyte
-#: ../src/common/helpers.py:159
+#: ../src/common/helpers.py:160
#, python-format
msgid "%s GB"
msgstr ""
#. MiB means mibibyte
-#: ../src/common/helpers.py:163
+#: ../src/common/helpers.py:164
#, python-format
msgid "%s MiB"
msgstr ""
#. MB means megabyte
-#: ../src/common/helpers.py:166
+#: ../src/common/helpers.py:167
#, python-format
msgid "%s MB"
msgstr ""
#. KiB means kibibyte
-#: ../src/common/helpers.py:170
+#: ../src/common/helpers.py:171
#, python-format
msgid "%s KiB"
msgstr ""
#. KB means kilo bytes
-#: ../src/common/helpers.py:173
+#: ../src/common/helpers.py:174
#, python-format
msgid "%s KB"
msgstr ""
#. B means bytes
-#: ../src/common/helpers.py:176
+#: ../src/common/helpers.py:177
#, python-format
msgid "%s B"
msgstr ""
-#: ../src/common/helpers.py:205
+#: ../src/common/helpers.py:206
msgid "_Busy"
msgstr "_Ocupado"
-#: ../src/common/helpers.py:207
+#: ../src/common/helpers.py:208
msgid "Busy"
msgstr "Ocupado"
-#: ../src/common/helpers.py:210
+#: ../src/common/helpers.py:211
msgid "_Not Available"
msgstr "_No Disponible"
-#: ../src/common/helpers.py:212
-msgid "Not Available"
-msgstr "No disponible"
-
-#: ../src/common/helpers.py:215
+#: ../src/common/helpers.py:216
msgid "_Free for Chat"
msgstr "_Libre para hablar"
-#: ../src/common/helpers.py:217
+#: ../src/common/helpers.py:218
msgid "Free for Chat"
msgstr "Libre para hablar"
-#: ../src/common/helpers.py:220
+#: ../src/common/helpers.py:221
msgid "_Available"
msgstr "En líne_a"
-#: ../src/common/helpers.py:222
+#: ../src/common/helpers.py:223
msgid "Available"
msgstr "En línea"
-#: ../src/common/helpers.py:224
+#: ../src/common/helpers.py:225
msgid "Connecting"
msgstr "Conectando"
-#: ../src/common/helpers.py:227
+#: ../src/common/helpers.py:228
msgid "A_way"
msgstr "A_usente"
-#: ../src/common/helpers.py:229
-msgid "Away"
-msgstr "Ausente"
-
-#: ../src/common/helpers.py:232
+#: ../src/common/helpers.py:233
msgid "_Offline"
msgstr "D_esconectado"
-#: ../src/common/helpers.py:234
+#: ../src/common/helpers.py:235
msgid "Offline"
msgstr "Desconectado"
-#: ../src/common/helpers.py:237
+#: ../src/common/helpers.py:238
msgid "_Invisible"
msgstr "_Invisible"
-#: ../src/common/helpers.py:243
+#: ../src/common/helpers.py:244
msgid "?contact has status:Unknown"
msgstr "Desconocido"
-#: ../src/common/helpers.py:245
+#: ../src/common/helpers.py:246
msgid "?contact has status:Has errors"
msgstr "Tiene errores"
-#: ../src/common/helpers.py:250
+#: ../src/common/helpers.py:251
msgid "?Subscription we already have:None"
msgstr "Ninguna"
-#: ../src/common/helpers.py:252
+#: ../src/common/helpers.py:253
msgid "To"
msgstr "A"
-#: ../src/common/helpers.py:254
+#: ../src/common/helpers.py:255
msgid "From"
msgstr "Salón:"
-#: ../src/common/helpers.py:256
+#: ../src/common/helpers.py:257
msgid "Both"
msgstr "Ambos"
-#: ../src/common/helpers.py:264
+#: ../src/common/helpers.py:265
msgid "?Ask (for Subscription):None"
msgstr "Ninguna"
-#: ../src/common/helpers.py:266
+#: ../src/common/helpers.py:267
msgid "Subscribe"
msgstr "_Añadir"
-#: ../src/common/helpers.py:275
+#: ../src/common/helpers.py:276
msgid "?Group Chat Contact Role:None"
msgstr "Ninguno"
-#: ../src/common/helpers.py:278
+#: ../src/common/helpers.py:279
msgid "Moderators"
msgstr "Moderadores"
-#: ../src/common/helpers.py:280
+#: ../src/common/helpers.py:281
msgid "Moderator"
msgstr "Moderador"
-#: ../src/common/helpers.py:283
+#: ../src/common/helpers.py:284
msgid "Participants"
msgstr "Participantes"
-#: ../src/common/helpers.py:285
+#: ../src/common/helpers.py:286
msgid "Participant"
msgstr "Participante"
-#: ../src/common/helpers.py:288
+#: ../src/common/helpers.py:289
msgid "Visitors"
msgstr "Visitantes"
-#: ../src/common/helpers.py:290
+#: ../src/common/helpers.py:291
msgid "Visitor"
msgstr "Visitante"
-#: ../src/common/helpers.py:326
+#: ../src/common/helpers.py:327
msgid "is paying attention to the conversation"
msgstr "está prestando atención a la conversación"
-#: ../src/common/helpers.py:328
+#: ../src/common/helpers.py:329
msgid "is doing something else"
msgstr "está haciendo algo más"
-#: ../src/common/helpers.py:330
+#: ../src/common/helpers.py:331
msgid "is composing a message..."
msgstr "está escribiendo..."
#. paused means he or she was compoing but has stopped for a while
-#: ../src/common/helpers.py:333
+#: ../src/common/helpers.py:334
msgid "paused composing a message"
msgstr "ha parado de escribir"
-#: ../src/common/helpers.py:335
+#: ../src/common/helpers.py:336
msgid "has closed the chat window or tab"
msgstr "ha cerrado la ventana de chat"
@@ -5539,14 +5805,50 @@ msgstr "ha cerrado la ventana de chat"
msgid "error: cannot open %s for reading"
msgstr "error: no se puede abrir %s para lectura"
-#: ../src/common/optparser.py:171
+#: ../src/common/optparser.py:174
msgid "gtk+"
msgstr ""
-#: ../src/common/optparser.py:180 ../src/common/optparser.py:181
+#: ../src/common/optparser.py:183 ../src/common/optparser.py:184
msgid "cyan"
msgstr ""
+#~ msgid "_Subscribe"
+#~ msgstr "_Añadir"
+
+#, fuzzy
+#~ msgid "Add"
+#~ msgstr "Dirección"
+
+#, fuzzy
+#~ msgid "Away "
+#~ msgstr "Ausente"
+
+#, fuzzy
+#~ msgid "Down"
+#~ msgstr "Descarga"
+
+#, fuzzy
+#~ msgid "List of special notifications settings"
+#~ msgstr "<b>Notificationes Visuales</b>"
+
+#, fuzzy
+#~ msgid "Not Available "
+#~ msgstr "No disponible"
+
+#~ msgid "Up"
+#~ msgstr "Arriba"
+
+#, fuzzy
+#~ msgid "Default"
+#~ msgstr "Eliminar MOTD"
+
+#~ msgid "Migrating Logs..."
+#~ msgstr "Migrando el registro..."
+
+#~ msgid "Please wait while logs are being migrated..."
+#~ msgstr "Por favor, espera mientras el registro está siendo migrado..."
+
#~ msgid "Automatically authorize contact"
#~ msgstr "Autorizar contactos automáticamente"
@@ -5754,9 +6056,6 @@ msgstr ""
#~ msgid "Open Download Page"
#~ msgstr "Abrir página de descarga"
-#~ msgid "Service not available"
-#~ msgstr "Servicio no disponible"
-
#~ msgid "Session bus is not available."
#~ msgstr "El bus de la sesión no está disponible."
@@ -5854,9 +6153,6 @@ msgstr ""
#~ msgid "Service"
#~ msgstr "Servicio"
-#~ msgid "Node"
-#~ msgstr "Nodo"
-
#~ msgid ""
#~ "Your new account has been created and added to your gajim configuration.\n"
#~ "You can set advanced account options using \"Edit->Accounts\" in the main "
@@ -5889,9 +6185,6 @@ msgstr ""
#~ msgid "theme_name"
#~ msgstr "nombre_del_tema"
-#~ msgid "Edit"
-#~ msgstr "Editar"
-
#~ msgid "<b>Please fill in the data for your existing account</b>"
#~ msgstr "Por favor, introduce los datos de tu cuenta actual"
diff --git a/po/eu.po b/po/eu.po
index 951756f09..25b7e5d96 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -3,13 +3,12 @@
# This file is distributed under the same license as the gajim package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2005.
#
-#: ../src/gajim-remote.py:218 ../src/gajim-remote.py:225
msgid ""
msgstr ""
"Project-Id-Version: gajim\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-07-04 00:03+0200\n"
-"PO-Revision-Date: 2006-06-05 11:11+0100\n"
+"POT-Creation-Date: 2006-04-13 12:52+0200\n"
+"PO-Revision-Date: 2006-07-19 22:02+0100\n"
"Last-Translator: Urtzi Alfaro <urtzi@altza.net>\n"
"Language-Team: Basque <urtzi@altza.net>\n"
"MIME-Version: 1.0\n"
@@ -76,8 +75,7 @@ msgstr "<b>Mesedez bete zure kontu berrirako informazioa</b>"
#: ../data/glade/account_creation_wizard_window.glade.h:6
msgid "Click to see features (like MSN, ICQ transports) of jabber servers"
-msgstr ""
-"Sakatu Jabber zerbitzariaren zenbait aukera(Msn ,ICQ, transport) ikusteko"
+msgstr "Sakatu Jabber zerbitzariaren zenbait aukera(Msn ,ICQ, transport) ikusteko"
#: ../data/glade/account_creation_wizard_window.glade.h:7
msgid "Connect when I press Finish"
@@ -205,16 +203,8 @@ msgid "Chan_ge Password"
msgstr "Al_datu Pasahitza"
#: ../data/glade/account_modification_window.glade.h:9
-msgid ""
-"Check this so Gajim will connect in port 5223 where legacy servers are "
-"expected to have SSL capabilities. Note that Gajim uses TLS encryption by "
-"default if broadcasted by the server, and with this option enabled TLS will "
-"be disabled"
-msgstr ""
-"Check this so Gajim will connect in port 5223 where legacy servers are "
-"expected to have SSL capabilities. Note that Gajim uses TLS encryption by "
-"default if broadcasted by the server, and with this option enabled TLS will "
-"be disabled"
+msgid "Check this so Gajim will connect in port 5223 where legacy servers are expected to have SSL capabilities. Note that Gajim uses TLS encryption by default if broadcasted by the server, and with this option enabled TLS will be disabled"
+msgstr "Check this so Gajim will connect in port 5223 where legacy servers are expected to have SSL capabilities. Note that Gajim uses TLS encryption by default if broadcasted by the server, and with this option enabled TLS will be disabled"
#: ../data/glade/account_modification_window.glade.h:10
msgid "Choose _Key..."
@@ -233,15 +223,19 @@ msgid "Edit Personal Information..."
msgstr "Informazio Pertsonala Editatu..."
#: ../data/glade/account_modification_window.glade.h:14
-#: ../data/glade/roster_window.glade.h:5 ../src/notify.py:308
-#: ../src/notify.py:330 ../src/notify.py:342 ../src/tooltips.py:350
+#: ../data/glade/roster_window.glade.h:5
+#: ../src/notify.py:308
+#: ../src/notify.py:330
+#: ../src/notify.py:342
+#: ../src/tooltips.py:350
msgid "Gajim"
msgstr "Gajim"
#: ../data/glade/account_modification_window.glade.h:15
#: ../data/glade/preferences_window.glade.h:44
#: ../data/glade/vcard_information_window.glade.h:17
-#: ../src/roster_window.py:290 ../src/roster_window.py:1184
+#: ../src/roster_window.py:290
+#: ../src/roster_window.py:1184
#: ../src/roster_window.py:1405
msgid "General"
msgstr "Orokorra"
@@ -251,47 +245,24 @@ msgid "Hostname: "
msgstr "Hostname: "
#: ../data/glade/account_modification_window.glade.h:17
-#, fuzzy
-msgid ""
-"If checked, Gajim will also broadcast some more IPs except from just your "
-"IP, so file transfer has higher chances of working."
-msgstr ""
-"If checked, Gajim will also broadcast some more IPs except from just your "
-"IP, so file transfer has higher chances of working right."
+msgid "If checked, Gajim will also broadcast some more IPs except from just your IP, so file transfer has higher chances of working."
+msgstr "If checked, Gajim will also broadcast some more IPs except from just your IP, so file transfer has higher chances of working."
#: ../data/glade/account_modification_window.glade.h:19
-msgid ""
-"If checked, Gajim will send keep-alive packets so it prevents connection "
-"timeout which results in disconnection"
-msgstr ""
-"Hautatua badago, Gajim-ek keep-alive paketeak bidaliko ditu deskonexioa "
-"gerta ez dadin"
+msgid "If checked, Gajim will send keep-alive packets so it prevents connection timeout which results in disconnection"
+msgstr "Hautatua badago, Gajim-ek keep-alive paketeak bidaliko ditu deskonexioa gerta ez dadin"
#: ../data/glade/account_modification_window.glade.h:20
-msgid ""
-"If checked, Gajim will store the password in ~/.gajim/config with 'read' "
-"permission only for you"
-msgstr ""
-"Hautatua badago, Gajim-ek pasahitzak ~/.gajim/config gordeko ditu "
-"irakurtzeko baimena zuk bakarrik izanik"
+msgid "If checked, Gajim will store the password in ~/.gajim/config with 'read' permission only for you"
+msgstr "Hautatua badago, Gajim-ek pasahitzak ~/.gajim/config gordeko ditu irakurtzeko baimena zuk bakarrik izanik"
#: ../data/glade/account_modification_window.glade.h:21
-msgid ""
-"If checked, Gajim, when launched, will automatically connect to jabber using "
-"this account"
-msgstr ""
-"Hautatua badago, abiaraztean, automatikoki jabber-era konektatuko da kontu "
-"hau erabiliz"
+msgid "If checked, Gajim, when launched, will automatically connect to jabber using this account"
+msgstr "Hautatua badago, abiaraztean, automatikoki jabber-era konektatuko da kontu hau erabiliz"
#: ../data/glade/account_modification_window.glade.h:22
-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 "
-"accordingly"
-msgstr ""
-"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 "
-"accordingly"
+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 accordingly"
+msgstr "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 accordingly"
#: ../data/glade/account_modification_window.glade.h:23
msgid "Information about you, as stored in the server"
@@ -301,14 +272,19 @@ msgstr "Zuri buzuzko informazioa zerbitzarian gordea izango da"
msgid "Manage..."
msgstr "Moldatu..."
-#: ../data/glade/account_modification_window.glade.h:25 ../src/config.py:1448
+#: ../data/glade/account_modification_window.glade.h:25
+#: ../src/config.py:1448
msgid "No key selected"
msgstr "Ez da koderik aukeratu"
#. None means no proxy profile selected
-#: ../data/glade/account_modification_window.glade.h:27 ../src/config.py:1053
-#: ../src/config.py:1058 ../src/config.py:1230 ../src/config.py:1505
-#: ../src/config.py:1578 ../src/config.py:2282
+#: ../data/glade/account_modification_window.glade.h:27
+#: ../src/config.py:1053
+#: ../src/config.py:1058
+#: ../src/config.py:1230
+#: ../src/config.py:1505
+#: ../src/config.py:1578
+#: ../src/config.py:2282
msgid "None"
msgstr "Ezer ez"
@@ -325,14 +301,8 @@ msgid "Priori_ty:"
msgstr "Lehentas_una:"
#: ../data/glade/account_modification_window.glade.h:31
-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 "
-"client with the highest priority gets the events"
-msgstr ""
-"Jabber-en lehentasuna, bi bezero edo gehiago konektatuta daudenean kontu "
-"berdinarekin, zeinek jaso behar duen informazioa determinatzen du; "
-"Lehentasun handiena duen bezeroak jasotzen ditu mezuak"
+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 client with the highest priority gets the events"
+msgstr "Jabber-en lehentasuna, bi bezero edo gehiago konektatuta daudenean kontu berdinarekin, zeinek jaso behar duen informazioa determinatzen du; Lehentasun handiena duen bezeroak jasotzen ditu mezuak"
#: ../data/glade/account_modification_window.glade.h:32
msgid "Proxy:"
@@ -343,18 +313,8 @@ msgid "Resour_ce: "
msgstr "Baliabid_ea: "
#: ../data/glade/account_modification_window.glade.h:34
-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 "
-"same server with the same account. So you might be connected in the same "
-"account with resource 'Home' and 'Work' at the same time. The resource which "
-"has the highest priority will get the events. (see below)"
-msgstr ""
-"Baliabidea Jabber-eko zerbitzarira bidaltzen da JID berdineko eta zerbitzari "
-"berdinera konektatutako kontua bi zati desberdinetan edo gehiagotan "
-"banatzeko asmoarekin. Hau horrela dabil: kontu bat `Lana` baliabidearekin "
-"jarrita eta kontu berdera `etxea` baliabidearekin jarria baduzu, mezua "
-"lehentasun handiena duenera bidaliko da. (Behean ikusi) "
+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 same server with the same account. So you might be connected in the same account with resource 'Home' and 'Work' at the same time. The resource which has the highest priority will get the events. (see below)"
+msgstr "Baliabidea Jabber-eko zerbitzarira bidaltzen da JID berdineko eta zerbitzari berdinera konektatutako kontua bi zati desberdinetan edo gehiagotan banatzeko asmoarekin. Hau horrela dabil: kontu bat `Lana` baliabidearekin jarrita eta kontu berdera `etxea` baliabidearekin jarria baduzu, mezua lehentasun handiena duenera bidaliko da. (Behean ikusi) "
#: ../data/glade/account_modification_window.glade.h:35
msgid "Save _passphrase (insecure)"
@@ -398,12 +358,8 @@ msgid "Accounts"
msgstr "Kontuak"
#: ../data/glade/accounts_window.glade.h:2
-msgid ""
-"If you have 2 or more accounts and it is checked, Gajim will list all "
-"contacts as if you had one account"
-msgstr ""
-"Bi kontu edo gehiago badituzu eta aukera hau hautatua badago, Gajim-ek "
-"kontaktu guztiak kontu bat izango bazenu bezala jarriko lituzke zerrendan"
+msgid "If you have 2 or more accounts and it is checked, Gajim will list all contacts as if you had one account"
+msgstr "Bi kontu edo gehiago badituzu eta aukera hau hautatua badago, Gajim-ek kontaktu guztiak kontu bat izango bazenu bezala jarriko lituzke zerrendan"
#: ../data/glade/accounts_window.glade.h:3
msgid "_Merge accounts"
@@ -419,9 +375,8 @@ msgid "_Remove"
msgstr "_Ezabatu"
#: ../data/glade/add_new_contact_window.glade.h:1
-#, fuzzy
msgid "A_llow this contact to view my status"
-msgstr "Baimendu nire egoera ikustea"
+msgstr "Baimendu kontaktu honi nire egoera ikustea"
#: ../data/glade/add_new_contact_window.glade.h:2
msgid "Add New Contact"
@@ -432,32 +387,28 @@ msgid "I would like to add you to my contact list."
msgstr "Nire kontaktu zerrendara nahi zaitut sartu."
#: ../data/glade/add_new_contact_window.glade.h:4
-#, fuzzy
msgid "_Account:"
-msgstr "Kontua:"
+msgstr "Kontu_a:"
#: ../data/glade/add_new_contact_window.glade.h:5
-#, fuzzy
msgid "_Group:"
-msgstr "Taldea:"
+msgstr "Ta_ldea:"
#: ../data/glade/add_new_contact_window.glade.h:7
msgid "_Nickname:"
-msgstr "_Nick-a:"
+msgstr "_Izengoitia:"
#: ../data/glade/add_new_contact_window.glade.h:8
-#, fuzzy
msgid "_Protocol:"
-msgstr "Protokoloa:"
+msgstr "_Protokoloa:"
#: ../data/glade/add_new_contact_window.glade.h:9
msgid "_Subscribe"
msgstr "_Harpidetu"
#: ../data/glade/add_new_contact_window.glade.h:10
-#, fuzzy
msgid "_User ID:"
-msgstr "Erabiltzailearen ID:"
+msgstr "E_rabiltzailearen ID:"
#: ../data/glade/advanced_configuration_window.glade.h:1
msgid "<b>Description</b>"
@@ -465,9 +416,7 @@ msgstr "<b>Deskribapena</b>"
#: ../data/glade/advanced_configuration_window.glade.h:2
msgid "<b>NOTE:</b> You should restart gajim for some setting to take effect"
-msgstr ""
-"<b>OHARRA:</b> Gajim berriro abiarazi beharko duzu aldagai batzuek efektua "
-"sor dezaten"
+msgstr "<b>OHARRA:</b> Gajim berriro abiarazi beharko duzu aldagai batzuek efektua sor dezaten"
#: ../data/glade/advanced_configuration_window.glade.h:3
msgid "Advanced Configuration Editor"
@@ -487,8 +436,7 @@ msgstr "Eguneko Mezuak Ezabatu"
#: ../data/glade/advanced_menuitem_menu.glade.h:3
msgid "Sends a message to currently connected users to this server"
-msgstr ""
-"Bidali mezu bat zerbitzari honetara orain konektatuta dauden kontaktuei"
+msgstr "Bidali mezu bat zerbitzari honetara orain konektatuta dauden kontaktuei"
#: ../data/glade/advanced_menuitem_menu.glade.h:4
msgid "Set MOTD"
@@ -516,7 +464,7 @@ msgstr "_Administratzailea"
#: ../data/glade/advanced_menuitem_menu.glade.h:10
msgid "_Privacy Lists"
-msgstr ""
+msgstr "_Debekatze Zerrenda"
#: ../data/glade/advanced_menuitem_menu.glade.h:11
msgid "_Send Server Message"
@@ -528,17 +476,15 @@ msgstr "_Bidali Mezu Bakarra"
#: ../data/glade/advanced_notifications_window.glade.h:1
msgid " a window/tab opened with that contact "
-msgstr ""
+msgstr "leiho/tab bat kontaktu batekin irekia"
#: ../data/glade/advanced_notifications_window.glade.h:2
-#, fuzzy
msgid "<b>Actions</b>"
-msgstr "<b>Aplikazioak</b>"
+msgstr "<b>Ekintzak</b>"
#: ../data/glade/advanced_notifications_window.glade.h:3
-#, fuzzy
msgid "<b>Conditions</b>"
-msgstr "<b>Soinuak</b>"
+msgstr "<b>Baldintzak</b>"
#: ../data/glade/advanced_notifications_window.glade.h:4
#: ../data/glade/preferences_window.glade.h:10
@@ -546,51 +492,44 @@ msgid "<b>Sounds</b>"
msgstr "<b>Soinuak</b>"
#: ../data/glade/advanced_notifications_window.glade.h:5
-#, fuzzy
msgid "Add"
-msgstr "Helbidea"
+msgstr "Gehitu"
#: ../data/glade/advanced_notifications_window.glade.h:6
-#, fuzzy
msgid "Advanced Actions"
-msgstr "Aukera Aurre_ratuak"
+msgstr "Ekintza Aurreratuak"
#: ../data/glade/advanced_notifications_window.glade.h:7
-#, fuzzy
msgid "Advanced Notifications Control"
-msgstr "Konfigurazio Aurreratuaren Editorea"
+msgstr "Notifikazio Aurreratuaren Kontrola"
#: ../data/glade/advanced_notifications_window.glade.h:8
-#, fuzzy
msgid "All Status "
-msgstr "Egoera: "
+msgstr "Egoera Guztiak"
#: ../data/glade/advanced_notifications_window.glade.h:9
msgid "And I "
-msgstr ""
+msgstr "eta nik"
#: ../data/glade/advanced_notifications_window.glade.h:10
-#, fuzzy
msgid "Away "
msgstr "Kanpoan"
#: ../data/glade/advanced_notifications_window.glade.h:11
-#, fuzzy
msgid "Busy "
msgstr "Lanpetuta"
#: ../data/glade/advanced_notifications_window.glade.h:12
msgid "Don't have "
-msgstr ""
+msgstr "Ez daukadanean"
#: ../data/glade/advanced_notifications_window.glade.h:13
-#, fuzzy
msgid "Down"
-msgstr "Deskargatu"
+msgstr "Bera"
#: ../data/glade/advanced_notifications_window.glade.h:14
msgid "Have "
-msgstr ""
+msgstr "daukadanean"
#: ../data/glade/advanced_notifications_window.glade.h:15
#: ../src/common/helpers.py:239
@@ -598,29 +537,24 @@ msgid "Invisible"
msgstr "Ikusezin"
#: ../data/glade/advanced_notifications_window.glade.h:16
-#, fuzzy
msgid "Launch a command"
-msgstr "No such command: /%s"
+msgstr "Abiarazi agindua"
#: ../data/glade/advanced_notifications_window.glade.h:17
-#, fuzzy
msgid "List of special notifications settings"
-msgstr "Jakinarazketa Berezia Gehitzen %s-entzat"
+msgstr "Notifikazio berezien aldaketen zerrenda"
#: ../data/glade/advanced_notifications_window.glade.h:18
-#, fuzzy
msgid "Not Available "
msgstr "Ez Erabilgarri"
#: ../data/glade/advanced_notifications_window.glade.h:19
-#, fuzzy
msgid "Online / Free For Chat"
-msgstr "Libre Hitz Egiteko"
+msgstr "Libre / Libre Hitz Egiteko"
#: ../data/glade/advanced_notifications_window.glade.h:20
-#, fuzzy
msgid "Play a sound"
-msgstr "Soinuak _entzun"
+msgstr "Soinua ezarri"
#: ../data/glade/advanced_notifications_window.glade.h:21
msgid ""
@@ -634,62 +568,67 @@ msgid ""
"File Transfert Started\n"
"File Transfert Finished"
msgstr ""
+"Mezu bat Jasotzean\n"
+"Kontaktua Konektatzean\n"
+"Kontaktua Deskonektatzean\n"
+"Kontaktuak Egoeraz Aldatzean\n"
+"Txat Taldeko Mezu bat Bistaratzean\n"
+"Txat Taldeko Mezu bat Jasotzean\n"
+"Fitxero Transferentzia Eskatzean\n"
+"Fitxero Transferentzia Hastean\n"
+"Fitxero Transferentzia Bukatzean"
#: ../data/glade/advanced_notifications_window.glade.h:30
msgid "Some special(s) status..."
-msgstr ""
+msgstr "Egorera berezi bat(zuk)..."
#: ../data/glade/advanced_notifications_window.glade.h:31
msgid "Up"
-msgstr ""
+msgstr "Gora"
#: ../data/glade/advanced_notifications_window.glade.h:32
msgid "When "
-msgstr ""
+msgstr "Denean"
#: ../data/glade/advanced_notifications_window.glade.h:33
msgid "_Activate Windows manager UrgencyHint to make chat taskbar to flash"
-msgstr ""
+msgstr "_Activate Windows manager UrgencyHint to make chat taskbar to flash"
#: ../data/glade/advanced_notifications_window.glade.h:34
-#, fuzzy
msgid "_Disable auto opening chat window"
-msgstr "Ezkutatu botoiak txat taldeko leihoan"
+msgstr "_Ezindu automatikoki elkarrizketa leihoa irikitzea"
#: ../data/glade/advanced_notifications_window.glade.h:35
msgid "_Disable existing popup window"
-msgstr ""
+msgstr "_Kendu esistitzen den popup leihoa "
#: ../data/glade/advanced_notifications_window.glade.h:36
msgid "_Disable existing sound for this event"
-msgstr ""
+msgstr "_Ezindu esistitzen den soinua gertaera hontarako "
#: ../data/glade/advanced_notifications_window.glade.h:37
msgid "_Disable showing event in roster"
-msgstr ""
+msgstr "_Ezindu gertaeran zerrendan ikustea"
#: ../data/glade/advanced_notifications_window.glade.h:38
msgid "_Disable showing event in systray"
-msgstr ""
+msgstr "_Ezindu gertaerak systray-en ikustea"
#: ../data/glade/advanced_notifications_window.glade.h:39
msgid "_Inform me with a popup window"
-msgstr ""
+msgstr "_Jakinarazi popup leiho batekin"
#: ../data/glade/advanced_notifications_window.glade.h:40
-#, fuzzy
msgid "_Open chat window with user"
-msgstr "Erabili txat leiho bakarra _tab-arekin"
+msgstr "_Ireki elkarrizketa leihoa erabiltzailearekin"
#: ../data/glade/advanced_notifications_window.glade.h:41
-#, fuzzy
msgid "_Show event in roster"
-msgstr "Ikusi _zerrendan bakarrik"
+msgstr "_Ikusarazi gertaera zerrendan"
#: ../data/glade/advanced_notifications_window.glade.h:42
-#, fuzzy
msgid "_Show event in systray"
-msgstr "Ikusi _zerrendan bakarrik"
+msgstr "Iku_si gertaerak systray-ean"
#: ../data/glade/advanced_notifications_window.glade.h:43
msgid ""
@@ -697,15 +636,17 @@ msgid ""
"group(s)\n"
"everybody"
msgstr ""
+"kontaktua(k)\n"
+"taldea(k)\n"
+"denak"
#: ../data/glade/advanced_notifications_window.glade.h:46
-#, fuzzy
msgid "for "
-msgstr "Portua: "
+msgstr "norentzat"
#: ../data/glade/advanced_notifications_window.glade.h:47
msgid "when I'm "
-msgstr ""
+msgstr "Nagoenean"
#: ../data/glade/change_password_dialog.glade.h:1
msgid "Change Password"
@@ -811,9 +752,7 @@ msgstr "Kantzelatu aukeratutako fitxategi transferentzia"
#: ../data/glade/filetransfers.glade.h:4
msgid "Cancels the selected file transfer and removes incomplete file"
-msgstr ""
-"Kantzelatu aukeratutako fitxategi transferentzia eta ezabatu bukatu gabeko "
-"fitxeroa "
+msgstr "Kantzelatu aukeratutako fitxategi transferentzia eta ezabatu bukatu gabeko fitxeroa "
#: ../data/glade/filetransfers.glade.h:5
msgid "Clean _up"
@@ -833,27 +772,22 @@ msgstr "Listatik fitxero tranferentzia ezabatu."
#: ../data/glade/filetransfers.glade.h:9
msgid "Removes completed, canceled and failed file transfers from the list"
-msgstr ""
-"Ezabatu kantzelatuak, osorik eta huts egin dutenak fitxero transferentzia "
-"zerrendatik"
+msgstr "Ezabatu kantzelatuak, osorik eta huts egin dutenak fitxero transferentzia zerrendatik"
#: ../data/glade/filetransfers.glade.h:10
msgid "Shows a list of file transfers between you and other"
msgstr "Erakutsi zu eta beste baten arteko fitxero transferentzia"
#: ../data/glade/filetransfers.glade.h:11
-msgid ""
-"This action removes single file transfer from the list. If the transfer is "
-"active, it is first stopped and then removed"
-msgstr ""
-"Aukera honek fitxero transferentzia bakar bat kantzelatzen du. "
-"Transferentzia martxan badago, lehenik gelditu egingo da eta ondoren ezabatu."
+msgid "This action removes single file transfer from the list. If the transfer is active, it is first stopped and then removed"
+msgstr "Aukera honek fitxero transferentzia bakar bat kantzelatzen du. Transferentzia martxan badago, lehenik gelditu egingo da eta ondoren ezabatu."
#: ../data/glade/filetransfers.glade.h:12
msgid "When a file transfer is complete show a popup notification"
msgstr "Fitxero transferentzia bukatzean erakutsi popup jakinarazte bat"
-#: ../data/glade/filetransfers.glade.h:13 ../src/filetransfers_window.py:753
+#: ../data/glade/filetransfers.glade.h:13
+#: ../src/filetransfers_window.py:753
msgid "_Continue"
msgstr "_Jarraitu"
@@ -861,7 +795,8 @@ msgstr "_Jarraitu"
msgid "_Notify me when a file transfer is complete"
msgstr "_Jakinarazi fitxeroa transferitu denean"
-#: ../data/glade/filetransfers.glade.h:15 ../src/filetransfers_window.py:190
+#: ../data/glade/filetransfers.glade.h:15
+#: ../src/filetransfers_window.py:190
msgid "_Open Containing Folder"
msgstr "_Ireki Fitxeroaren Edukia"
@@ -890,7 +825,8 @@ msgstr ""
"Banner"
#: ../data/glade/gajim_themes_window.glade.h:6
-#: ../data/glade/privacy_list_edit_window.glade.h:4 ../src/config.py:326
+#: ../data/glade/privacy_list_edit_window.glade.h:4
+#: ../src/config.py:326
msgid "Active"
msgstr "Aktibatuta"
@@ -938,7 +874,8 @@ msgstr ""
"MUC Zuzendua\n"
"Mezuak"
-#: ../data/glade/gajim_themes_window.glade.h:18 ../src/tooltips.py:667
+#: ../data/glade/gajim_themes_window.glade.h:18
+#: ../src/tooltips.py:667
msgid "Paused"
msgstr "Etena"
@@ -956,7 +893,7 @@ msgstr "A_tzealdeko kolorea:"
#: ../data/glade/gc_control_popup_menu.glade.h:1
msgid "Change _Nickname"
-msgstr "Aldatu _Nick-a"
+msgstr "Aldatu _Izengoitia"
#: ../data/glade/gc_control_popup_menu.glade.h:2
msgid "Change _Subject"
@@ -1017,16 +954,14 @@ msgid ""
"You can select logs from the left and/or search database from below.\n"
"\n"
"<b>WARNING:</b>\n"
-"If you plan to do massive deletions, please make sure Gajim is not running. "
-"Generally avoid deletions with contacts you currently chat with."
+"If you plan to do massive deletions, please make sure Gajim is not running. Generally avoid deletions with contacts you currently chat with."
msgstr ""
"<big><b>Ongi Etorri Gajim Log Historial Administratzailera</b></big>\n"
"\n"
"Eskubian log-ak hautatu ditzakezu edo/eta behean datu basean bilatu.\n"
"\n"
"<b>OHARRA:</b>\n"
-"Ezabatze handia egin behar baduzu, Gajim abiarazita ez dagoela begira ezazu. "
-"Normalean hitz egiten ari zaren kontaktuaen ezabaketak arbuilatzen ditu."
+"Ezabatze handia egin behar baduzu, Gajim abiarazita ez dagoela begira ezazu. Normalean hitz egiten ari zaren kontaktuaen ezabaketak arbuilatzen ditu."
#: ../data/glade/history_manager.glade.h:7
msgid "Delete"
@@ -1077,7 +1012,8 @@ msgstr "Ukatu"
msgid "Invitation Received"
msgstr "Gonbidapena Jasoa"
-#: ../data/glade/join_groupchat_window.glade.h:1 ../src/dialogs.py:941
+#: ../data/glade/join_groupchat_window.glade.h:1
+#: ../src/dialogs.py:941
msgid "Join Group Chat"
msgstr "Txat Taldean Sartu"
@@ -1085,7 +1021,7 @@ msgstr "Txat Taldean Sartu"
#: ../data/glade/manage_bookmarks_window.glade.h:4
#: ../data/glade/vcard_information_window.glade.h:28
msgid "Nickname:"
-msgstr "Nick-a:"
+msgstr "Izengoitia:"
#: ../data/glade/join_groupchat_window.glade.h:3
#: ../data/glade/manage_bookmarks_window.glade.h:5
@@ -1106,7 +1042,8 @@ msgstr "Gela:"
msgid "Server:"
msgstr "Zerbitzaria:"
-#: ../data/glade/join_groupchat_window.glade.h:7 ../src/disco.py:1145
+#: ../data/glade/join_groupchat_window.glade.h:7
+#: ../src/disco.py:1145
#: ../src/disco.py:1507
msgid "_Join"
msgstr "_Sartu"
@@ -1128,9 +1065,8 @@ msgid "Manage Bookmarks"
msgstr "Talde Agenda Moldatu"
#: ../data/glade/manage_bookmarks_window.glade.h:6
-#, fuzzy
msgid "Print status:"
-msgstr "Imprimatu ordua:"
+msgstr "Inprimatu egoera:"
#: ../data/glade/manage_bookmarks_window.glade.h:9
msgid "Title:"
@@ -1169,7 +1105,8 @@ msgstr "Erabili autentifikazioa"
msgid "Click to insert an emoticon (Alt+M)"
msgstr "Sakatu emoticon bat ezartzeko (Alt+M)"
-#: ../data/glade/message_window.glade.h:2 ../src/chat_control.py:966
+#: ../data/glade/message_window.glade.h:2
+#: ../src/chat_control.py:966
msgid "OpenPGP Encryption"
msgstr "Ireki OpenPGP Enkriptazioa"
@@ -1208,9 +1145,8 @@ msgid "<b>Format of a line</b>"
msgstr "<b>Lerroaren Formatua</b>"
#: ../data/glade/preferences_window.glade.h:6
-#, fuzzy
msgid "<b>GMail Options</b>"
-msgstr "<b>Aplikazioak</b>"
+msgstr "<b>GMail Aukerak</b>"
#: ../data/glade/preferences_window.glade.h:7
msgid "<b>Interface Customization</b>"
@@ -1226,7 +1162,7 @@ msgstr "<b>Ikusizko Jakinarazketa</b>"
#: ../data/glade/preferences_window.glade.h:12
msgid "A_fter nickname:"
-msgstr "Nick-aren on_doren:"
+msgstr "Izengoitiaren on_doren:"
#: ../data/glade/preferences_window.glade.h:13
msgid "Advanced"
@@ -1248,9 +1184,7 @@ msgstr "Baimena _OS informazioa bidaltzeko"
#: ../data/glade/preferences_window.glade.h:18
msgid "Allow popup/notifications when I'm _away/na/busy/invisible"
-msgstr ""
-"Baimendu Popup/Jakinarazteak nagoenean: Kanpoan/Ez Erabilgarri/Lanpetuta/"
-"Ikusezin"
+msgstr "Baimendu Popup/Jakinarazteak nagoenean: Kanpoan/Ez Erabilgarri/Lanpetuta/Ikusezin"
#: ../data/glade/preferences_window.glade.h:19
msgid "Also known as iChat style"
@@ -1282,9 +1216,10 @@ msgstr ""
#: ../data/glade/preferences_window.glade.h:27
msgid "B_efore nickname:"
-msgstr "Nick-a baino l_ehen:"
+msgstr "Izengoitia baino l_ehen:"
-#: ../data/glade/preferences_window.glade.h:28 ../src/chat_control.py:718
+#: ../data/glade/preferences_window.glade.h:28
+#: ../src/chat_control.py:718
msgid "Chat"
msgstr "Txat"
@@ -1293,13 +1228,8 @@ msgid "Chat state noti_fications:"
msgstr "Txateko egoeraren ja_kinaraztea:"
#: ../data/glade/preferences_window.glade.h:30
-msgid ""
-"Check this option, only if someone you don't have in the roster spams/annoys "
-"you. Use with caution, cause it blocks all messages from any contact that is "
-"not in the roster"
-msgstr ""
-"Bakarrik hautatu aukera hau zerrendan ez duzun norbaitek zirikatzen bazaitu. "
-"Kontu handiz erabili, zerrendan ez dagoen edonoren mezuak blokeatzen ditu"
+msgid "Check this option, only if someone you don't have in the roster spams/annoys you. Use with caution, cause it blocks all messages from any contact that is not in the roster"
+msgstr "Bakarrik hautatu aukera hau zerrendan ez duzun norbaitek zirikatzen bazaitu. Kontu handiz erabili, zerrendan ez dagoen edonoren mezuak blokeatzen ditu"
#: ../data/glade/preferences_window.glade.h:31
msgid "Default status _iconset:"
@@ -1307,11 +1237,11 @@ msgstr "Berezko egoera _ikurra:"
#: ../data/glade/preferences_window.glade.h:32
msgid "Display _extra email details"
-msgstr ""
+msgstr "Erakutsarazi epostaren g_ehigarrizko xehetasunak"
#: ../data/glade/preferences_window.glade.h:33
msgid "Display a_vatars of contacts in roster"
-msgstr "Kontaktuen a_batereak erakuts arazizerrendan"
+msgstr "Kontaktuen a_batereak erakutsi zerrendan"
#: ../data/glade/preferences_window.glade.h:34
msgid "Display status _messages of contacts in roster"
@@ -1330,91 +1260,48 @@ msgid "Events"
msgstr "Gertaerak"
#: ../data/glade/preferences_window.glade.h:38
-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 "
-"send to the other party."
-msgstr ""
-"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 "
-"send to the other party."
+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 send to the other party."
+msgstr "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 send to the other party."
#: ../data/glade/preferences_window.glade.h:39
-msgid ""
-"Gajim will automatically show new events by poping up the relative window"
-msgstr ""
-"Gajim-ek automatikoki gertaera berriak ikusi araziko ditu hautatutako "
-"leihoan "
+msgid "Gajim will automatically show new events by poping up the relative window"
+msgstr "Gajim-ek automatikoki gertaera berriak agertaraziko ditu hautatutako leihoan "
#: ../data/glade/preferences_window.glade.h:40
-msgid ""
-"Gajim will notify you for new events via a popup in the bottom right of the "
-"screen"
-msgstr ""
-"Gajim-ek gertaera berriez jakinaraziko dizu popup bidez pantailaren beheko "
-"eskubiko aldean"
+msgid "Gajim will notify you for new events via a popup in the bottom right of the screen"
+msgstr "Gajim-ek gertaera berriez jakinaraziko dizu popup bidez pantailaren beheko eskubiko aldean"
#: ../data/glade/preferences_window.glade.h:41
-msgid ""
-"Gajim will notify you via a popup window in the bottom right of the screen "
-"about contacts that just signed in"
+msgid "Gajim will notify you via a popup window in the bottom right of the screen about contacts that just signed in"
msgstr "Sartu berri diren kontaktuez jakinaraziko dizu Gajim-ek popup bidez"
#: ../data/glade/preferences_window.glade.h:42
-msgid ""
-"Gajim will notify you via a popup window in the bottom right of the screen "
-"about contacts that just signed out"
-msgstr ""
-"Deskonektatu diren kontaktuez Gajim-ek jakinaraziko dizu popup bidez "
-"pantailako beheko eskubiko aldean"
+msgid "Gajim will notify you via a popup window in the bottom right of the screen about contacts that just signed out"
+msgstr "Deskonektatu diren kontaktuez Gajim-ek jakinaraziko dizu popup bidez pantailako beheko eskubiko aldean"
#: ../data/glade/preferences_window.glade.h:43
-msgid ""
-"Gajim will only change the icon of the contact that triggered the new event"
-msgstr ""
-"Gajim-ek bakarrik kontaktuaren ikonoa aldatuko du gertaera berri bat duenean"
+msgid "Gajim will only change the icon of the contact that triggered the new event"
+msgstr "Gajim-ek bakarrik kontaktuaren ikonoa aldatuko du gertaera berri bat duenean"
#: ../data/glade/preferences_window.glade.h:45
-msgid ""
-"If checked, Gajim will display avatars of contacts in roster window and in "
-"group chats"
-msgstr ""
-"Hautatua badago, Gajim-ek zerrendan eta txat taldeetan kontaktuen abatereak "
-"azalaraziko ditu"
+msgid "If checked, Gajim will display avatars of contacts in roster window and in group chats"
+msgstr "Hautatua badago, Gajim-ek zerrendan eta txat taldeetan kontaktuen abatereak azalaraziko ditu"
#: ../data/glade/preferences_window.glade.h:46
-msgid ""
-"If checked, Gajim will display status messages of contacts under the contact "
-"name in roster window and in group chats"
-msgstr ""
-"Hautatua badago, Gajim-ek egoera mezua zerrendan erakutsaraziko du izenen "
-"azpian eta txat taldeetan"
+msgid "If checked, Gajim will display status messages of contacts under the contact name in roster window and in group chats"
+msgstr "Hautatua badago, Gajim-ek egoera mezua zerrendan erakutsaraziko du izenen azpian eta txat taldeetan"
#: ../data/glade/preferences_window.glade.h:47
-msgid ""
-"If checked, Gajim will remember the roster and chat window positions in the "
-"screen and the sizes of them next time you run it"
-msgstr ""
-"Hautatua badago, Gajim-ek abiarazten duzun hurrengoan zerrenda gogoraraziko "
-"du eta txateko leihoaren pantailako lekua eta tamaina ere"
+msgid "If checked, Gajim will remember the roster and chat window positions in the screen and the sizes of them next time you run it"
+msgstr "Hautatua badago, Gajim-ek berriz abiarazten duzunean zerrendako eta baita txat leihoaren pantailako lekua eta tamaina gogoraraziko dizu"
#: ../data/glade/preferences_window.glade.h:48
-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, "
-"etc...)"
-msgstr ""
-"Hautatua badago, Gajim-ek protokolo bakoitzaren egoera ikurrak irabiliko "
-"ditu (Adibidez: MSN bada, protokolo honek erabiltzen dituen berezko ikurrak "
-"jarriko dira)"
+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, etc...)"
+msgstr "Hautatua badago, Gajim-ek protokolo bakoitzaren egoera ikurrak irabiliko ditu (Adibidez: MSN bada, protokolo honek erabiltzen dituen berezko ikurrak jarriko dira)"
#: ../data/glade/preferences_window.glade.h:49
-msgid ""
-"If not disabled, Gajim will replace ascii smilies like ':)' with equivalent "
-"animated or static graphical emoticons"
-msgstr ""
-"Ez badago ezeztatuta, Gajim-ek ´:)´ ascii hauek bere irudi grafiko estatiko "
-"edo animatura eraldatuko ditu"
+msgid "If not disabled, Gajim will replace ascii smilies like ':)' with equivalent animated or static graphical emoticons"
+msgstr "Ez badago ezeztatuta, Gajim-ek ´:)´ ascii hauek bere irudi grafiko estatiko edo animatura eraldatuko ditu"
#: ../data/glade/preferences_window.glade.h:50
msgid "Ma_nage..."
@@ -1437,9 +1324,8 @@ msgid "Notify me about contacts that: "
msgstr "Jakinarazi kontaktuek hau egitean: "
#: ../data/glade/preferences_window.glade.h:56
-#, fuzzy
msgid "Notify on new _GMail email"
-msgstr "Gmail-eko E-posta berri batez jakinarazi"
+msgstr "_Gmail-eko E-posta berri batez jakinarazi"
#: ../data/glade/preferences_window.glade.h:57
msgid "On every _message"
@@ -1499,32 +1385,23 @@ msgstr "Erabili _transporteen ikurrak"
#: ../data/glade/preferences_window.glade.h:71
msgid "Use system _default"
-msgstr ""
+msgstr "_Sistemaren berezkoa erabili"
#: ../data/glade/preferences_window.glade.h:72
msgid "Use t_rayicon (aka. notification area icon)"
msgstr "E_rabili ikonifikazioa (aka. notification area)"
#: ../data/glade/preferences_window.glade.h:73
-msgid ""
-"When a new event (message, file transfer request etc..) is received, the "
-"following methods may be used to inform you about it. Please note that "
-"events about new messages only occur if it is a new message from a contact "
-"you are not already chatting with"
-msgstr ""
-"Gertaera berri bat (mezu bat, fitxero trasferentzia eskaera...) jasotzean, "
-"metodo honekin horiei buruz jakinarazteko balio dizu. Mezu berri baten "
-"jakinaraztea, bakarrik, dagoeneko hitz egiten ari zaren pertsona batekin "
-"izan ezik izango da"
+msgid "When a new event (message, file transfer request etc..) is received, the following methods may be used to inform you about it. Please note that events about new messages only occur if it is a new message from a contact you are not already chatting with"
+msgstr "Metodo honekin, gertaera berri bat (mezu bat, fitxero trasferentzia eskaera...) jasotzean, horiei buruz jakinaraziko zaizu. Mezu berri baten jakinaraztea, bakarrik, dagoeneko hitz egiten ari zaren pertsona batekin izan ezik izango da"
#: ../data/glade/preferences_window.glade.h:74
msgid "When new event is received"
msgstr "Ekintza berri bat jasotzean."
#: ../data/glade/preferences_window.glade.h:75
-#, fuzzy
msgid "_Advanced Notifications Control..."
-msgstr "Konfigurazio Aurreratuaren Editorea"
+msgstr "Notifikazio _Aurreratuaren Kontrola..."
#: ../data/glade/preferences_window.glade.h:76
msgid "_After time:"
@@ -1588,7 +1465,7 @@ msgstr "_Entzun"
#: ../data/glade/preferences_window.glade.h:91
msgid "_Pop it up"
-msgstr "_Pop it up"
+msgstr "_Agertarazi"
#: ../data/glade/preferences_window.glade.h:92
msgid "_Reset to Default Colors"
@@ -1612,54 +1489,49 @@ msgstr "minutu"
#: ../data/glade/privacy_list_edit_window.glade.h:1
msgid "<b>Add / Edit a rule</b>"
-msgstr ""
+msgstr "<b>Ezarri / Editatu arau bat</b>"
#: ../data/glade/privacy_list_edit_window.glade.h:2
-#, fuzzy
msgid "<b>List of rules</b>"
-msgstr "<b>Lerroaren Formatua</b>"
+msgstr "<b>Arauen zerrenda</b>"
#: ../data/glade/privacy_list_edit_window.glade.h:3
msgid "<i>Privacy List</i>"
-msgstr ""
+msgstr "<i>Debekatze Zerrenda</i>"
-#: ../data/glade/privacy_list_edit_window.glade.h:5 ../src/config.py:2281
+#: ../data/glade/privacy_list_edit_window.glade.h:5
+#: ../src/config.py:2281
msgid "All"
-msgstr ""
+msgstr "Dena"
#: ../data/glade/privacy_list_edit_window.glade.h:6
msgid "Allow"
-msgstr ""
+msgstr "Baimendu"
#: ../data/glade/privacy_list_edit_window.glade.h:7
-#, fuzzy
msgid "Default"
-msgstr "Ezabatu"
+msgstr "Berezkoa"
#: ../data/glade/privacy_list_edit_window.glade.h:9
-#, fuzzy
msgid "JabberID"
-msgstr "Jabber ID:"
+msgstr "JabberID"
#: ../data/glade/privacy_list_edit_window.glade.h:10
-#, fuzzy
msgid "Order:"
-msgstr "Zerbitzaria:"
+msgstr "Ordena:"
-#: ../data/glade/privacy_list_edit_window.glade.h:11 ../src/dialogs.py:1626
-#, fuzzy
+#: ../data/glade/privacy_list_edit_window.glade.h:11
+#: ../src/dialogs.py:1626
msgid "Privacy List"
-msgstr "Debekatutako Zerrenda"
+msgstr "Debekatze Zerrenda"
#: ../data/glade/privacy_list_edit_window.glade.h:12
-#, fuzzy
msgid "all by subscription"
-msgstr "_Harpidetza"
+msgstr "harpidetza honekin"
#: ../data/glade/privacy_list_edit_window.glade.h:13
-#, fuzzy
msgid "all in the group"
-msgstr "Taldean"
+msgstr "talde hontakoak"
#: ../data/glade/privacy_list_edit_window.glade.h:14
msgid ""
@@ -1668,33 +1540,34 @@ msgid ""
"from\n"
"to"
msgstr ""
+"ezer\n"
+"biak\n"
+"nondik\n"
+"norentzat"
#: ../data/glade/privacy_list_edit_window.glade.h:18
-#, fuzzy
msgid "to send me messages"
-msgstr "Bidali mezua"
+msgstr "niri mezuak bidaltzea"
#: ../data/glade/privacy_list_edit_window.glade.h:19
msgid "to send me queries"
-msgstr ""
+msgstr "niri galderak bidaltzeko"
#: ../data/glade/privacy_list_edit_window.glade.h:20
-#, fuzzy
msgid "to send me status"
-msgstr "Bere egoera ikusteko esan"
+msgstr "niri egoera bidaltzeko"
#: ../data/glade/privacy_list_edit_window.glade.h:21
-#, fuzzy
msgid "to view my status"
-msgstr "Baimendu nire egoera ikustea"
+msgstr "nire egoera ikustea"
#: ../data/glade/privacy_lists_first_window.glade.h:1
msgid "Create your own Privacy Lists"
-msgstr ""
+msgstr "Sortu zure debekatze zerrenda"
#: ../data/glade/privacy_lists_first_window.glade.h:2
msgid "Server-based Privacy Lists"
-msgstr ""
+msgstr "Zerbitzarian oinarritutako Debekatze Zerrenda"
#: ../data/glade/remove_account_window.glade.h:1
msgid "<b>What do you want to do?</b>"
@@ -1709,7 +1582,6 @@ msgid "Remove account from Gajim and from _server"
msgstr "Ezabatu kontua Gajim-etik eta baita _zerbitzaritik"
#: ../data/glade/roster_contact_context_menu.glade.h:1
-#, fuzzy
msgid "A_sk to see his/her status"
msgstr "Bere egoera ikusteko esan"
@@ -1735,12 +1607,10 @@ msgid "Start _Chat"
msgstr "Elkarrizketa _Hasi"
#: ../data/glade/roster_contact_context_menu.glade.h:9
-#, fuzzy
msgid "_Allow him/her to see my status"
msgstr "Baimendu nire egoera ikustea"
#: ../data/glade/roster_contact_context_menu.glade.h:10
-#, fuzzy
msgid "_Forbid him/her to see my status"
msgstr "Debekatu nire egoera ikustea"
@@ -1794,7 +1664,8 @@ msgstr "_Edukiak"
msgid "_Discover Services"
msgstr "_Zerbitzuak Aurkitu"
-#: ../data/glade/roster_window.glade.h:13 ../src/disco.py:1252
+#: ../data/glade/roster_window.glade.h:13
+#: ../src/disco.py:1252
#: ../src/roster_window.py:1462
msgid "_Edit"
msgstr "_Editatu"
@@ -1976,7 +1847,7 @@ msgstr "Formatua: YYYY-MM-DD"
#. Given Name
#: ../data/glade/vcard_information_window.glade.h:19
msgid "Given:"
-msgstr "Eman izena:"
+msgstr "Emandako izena:"
#: ../data/glade/vcard_information_window.glade.h:20
msgid "Homepage:"
@@ -1997,7 +1868,7 @@ msgstr "Kokapena"
#. Middle Name
#: ../data/glade/vcard_information_window.glade.h:25
msgid "Middle:"
-msgstr "Izen erdia:"
+msgstr "Erdi izena:"
#: ../data/glade/vcard_information_window.glade.h:26
msgid "More"
@@ -2022,7 +1893,7 @@ msgstr "Posta Kodea:"
#. Prefix in Name
#: ../data/glade/vcard_information_window.glade.h:34
msgid "Prefix:"
-msgstr "Izeneko aurreizkia:"
+msgstr "Aurreizkia izenean:"
#: ../data/glade/vcard_information_window.glade.h:35
msgid "Resource:"
@@ -2127,28 +1998,25 @@ msgid "Hidden"
msgstr "Ikusezin"
#. FIXME: add a ui for this use spell.set_language()
-#: ../src/chat_control.py:163 ../src/dialogs.py:1291
+#: ../src/chat_control.py:163
+#: ../src/dialogs.py:1291
msgid ""
-"If that is not your language for which you want to highlight misspelled "
-"words, then please set your $LANG as appropriate. Eg. for French do export "
-"LANG=fr_FR or export LANG=fr_FR.UTF-8 in ~/.bash_profile or to make it "
-"global in /etc/profile.\n"
+"If that is not your language for which you want to highlight misspelled words, then please set your $LANG as appropriate. Eg. for French do export LANG=fr_FR or export LANG=fr_FR.UTF-8 in ~/.bash_profile or to make it global in /etc/profile.\n"
"\n"
"Highlighting misspelled words feature will not be used"
msgstr ""
-"If that is not your language for which you want to highlight misspelled "
-"words, then please set your $LANG as appropriate. Eg. for French do export "
-"LANG=fr_FR or export LANG=fr_FR.UTF-8 in ~/.bash_profile or to make it "
-"global in /etc/profile.\n"
+"If that is not your language for which you want to highlight misspelled words, then please set your $LANG as appropriate. Eg. for French do export LANG=fr_FR or export LANG=fr_FR.UTF-8 in ~/.bash_profile or to make it global in /etc/profile.\n"
"\n"
"Highlighting misspelled words feature will not be used"
#. we are not connected
-#: ../src/chat_control.py:186 ../src/chat_control.py:391
+#: ../src/chat_control.py:186
+#: ../src/chat_control.py:391
msgid "A connection is not available"
msgstr "Konexioa ez dago erabilgarri"
-#: ../src/chat_control.py:187 ../src/chat_control.py:392
+#: ../src/chat_control.py:187
+#: ../src/chat_control.py:392
msgid "Your message can not be sent until you are connected."
msgstr "Zure mezua ezin da bidali konektatu harte"
@@ -2171,14 +2039,23 @@ msgid "Encryption disabled"
msgstr "Enkriptazioa desaktibatuta"
#. add_to_roster_menuitem
-#: ../src/chat_control.py:1239 ../src/conversation_textview.py:407
-#: ../src/dialogs.py:512 ../src/gajim.py:635 ../src/gajim.py:636
-#: ../src/gajim.py:955 ../src/roster_window.py:276
-#: ../src/roster_window.py:1335 ../src/roster_window.py:1645
-#: ../src/roster_window.py:1806 ../src/roster_window.py:1817
-#: ../src/roster_window.py:2123 ../src/roster_window.py:2179
-#: ../src/roster_window.py:2977 ../src/roster_window.py:2979
-#: ../src/common/helpers.py:39 ../src/common/helpers.py:241
+#: ../src/chat_control.py:1239
+#: ../src/conversation_textview.py:407
+#: ../src/dialogs.py:512
+#: ../src/gajim.py:635
+#: ../src/gajim.py:636
+#: ../src/gajim.py:955
+#: ../src/roster_window.py:276
+#: ../src/roster_window.py:1335
+#: ../src/roster_window.py:1645
+#: ../src/roster_window.py:1806
+#: ../src/roster_window.py:1817
+#: ../src/roster_window.py:2123
+#: ../src/roster_window.py:2179
+#: ../src/roster_window.py:2977
+#: ../src/roster_window.py:2979
+#: ../src/common/helpers.py:39
+#: ../src/common/helpers.py:241
msgid "Not in Roster"
msgstr "Ez dago zerrendan"
@@ -2189,14 +2066,11 @@ msgid "You just received a new message from \"%s\""
msgstr "\"%s\" -tik mezu berri bat jaso duzu"
#: ../src/chat_control.py:1384
-msgid ""
-"If you close this tab and you have history disabled, this message will be "
-"lost."
-msgstr ""
-"Leiho hau isten baduzu eta ez baduzu historiala aktibatua mezu hau galduko "
-"duzu."
+msgid "If you close this tab and you have history disabled, this message will be lost."
+msgstr "Leiho hau isten baduzu eta ez baduzu historiala aktibatua mezu hau galduko duzu."
-#: ../src/config.py:120 ../src/config.py:511
+#: ../src/config.py:120
+#: ../src/config.py:511
msgid "Disabled"
msgstr "Ezindu"
@@ -2257,29 +2131,25 @@ msgstr "Zerbitzarira konektatu zaude dagoeneko"
msgid "To change the account name, you must be disconnected."
msgstr "Kontuko izena aldatzeko deskonektatuta egon behar zara."
-#: ../src/config.py:1158 ../src/config.py:1715
+#: ../src/config.py:1158
+#: ../src/config.py:1715
msgid "Unread events"
msgstr "Irakurri gabeko gertaerak"
#: ../src/config.py:1159
msgid "To change the account name, you must read all pending events."
-msgstr ""
-"Kontuko izena aldatzeko, irakurri gabeko gertaera guztiak irakurri behar "
-"dituzu."
+msgstr "Kontuko izena aldatzeko, irakurri gabeko gertaera guztiak irakurri behar dituzu."
#: ../src/config.py:1163
msgid "Account Name Already Used"
msgstr "Kontu Izena Jadanik Erabilia"
#: ../src/config.py:1164
-msgid ""
-"This name is already used by another of your accounts. Please choose another "
-"name."
-msgstr ""
-"Izen hau jadanik zure kontaktu batengatik erabilita dago. Mesedez aukeratu "
-"beste izen bat."
+msgid "This name is already used by another of your accounts. Please choose another name."
+msgstr "Izen hau jadanik zure kontaktu batengatik erabilita dago. Mesedez aukeratu beste izen bat."
-#: ../src/config.py:1168 ../src/config.py:1172
+#: ../src/config.py:1168
+#: ../src/config.py:1172
msgid "Invalid account name"
msgstr "Kontu izen baliogabea"
@@ -2291,7 +2161,9 @@ msgstr "Kontu izena ezin da hustu."
msgid "Account name cannot contain spaces."
msgstr "Kontuko izenak ezin du espaziorik izan."
-#: ../src/config.py:1181 ../src/config.py:1187 ../src/config.py:1196
+#: ../src/config.py:1181
+#: ../src/config.py:1187
+#: ../src/config.py:1196
#: ../src/config.py:2662
msgid "Invalid Jabber ID"
msgstr "Jabber ID baliogabea"
@@ -2318,8 +2190,7 @@ msgstr "Birkargatu orain?"
#: ../src/config.py:1377
msgid "If you want all the changes to apply instantly, you must relogin."
-msgstr ""
-"Momentuan aldaturiko aukerak ezarri nahi badituzu, birkargatu beharko duzu."
+msgstr "Momentuan aldaturiko aukerak ezarri nahi badituzu, birkargatu beharko duzu."
#: ../src/config.py:1403
msgid "No such account available"
@@ -2329,8 +2200,12 @@ msgstr "Horrelako konturik ez erabilgarri"
msgid "You must create your account before editing your personal information."
msgstr "Kontu bat sortu behar duzu informazio petsonala editatu baino lehen."
-#: ../src/config.py:1410 ../src/dialogs.py:925 ../src/dialogs.py:1099
-#: ../src/disco.py:410 ../src/vcard.py:457 ../src/vcard.py:490
+#: ../src/config.py:1410
+#: ../src/dialogs.py:925
+#: ../src/dialogs.py:1099
+#: ../src/disco.py:410
+#: ../src/vcard.py:457
+#: ../src/vcard.py:490
msgid "You are not connected to the server"
msgstr "Ez zaude zerbitzarira konektatuta"
@@ -2355,7 +2230,9 @@ msgid "Choose your OpenPGP key"
msgstr "Aukeratu zure OpenPGP kodea"
#. Name column
-#: ../src/config.py:1667 ../src/disco.py:727 ../src/disco.py:1466
+#: ../src/config.py:1667
+#: ../src/disco.py:727
+#: ../src/disco.py:1466
#: ../src/history_window.py:77
msgid "Name"
msgstr "Izena"
@@ -2366,8 +2243,7 @@ msgstr "Zerbitzaria"
#: ../src/config.py:1716
msgid "Read all pending events before removing this account."
-msgstr ""
-"Irakurri pendiente dituzun gertaera guztiak kontu hau ezabatu baino lehen. "
+msgstr "Irakurri pendiente dituzun gertaera guztiak kontu hau ezabatu baino lehen. "
#: ../src/config.py:1911
#, python-format
@@ -2397,7 +2273,9 @@ msgstr "Administratzaile Zerrenda"
#. Address column
#. holds JID (who said this)
-#: ../src/config.py:2020 ../src/disco.py:734 ../src/history_manager.py:151
+#: ../src/config.py:2020
+#: ../src/disco.py:734
+#: ../src/history_manager.py:151
msgid "JID"
msgstr "JID"
@@ -2407,7 +2285,7 @@ msgstr "Arrazoia"
#: ../src/config.py:2033
msgid "Nick"
-msgstr "Nick"
+msgstr "Izengoitia"
#: ../src/config.py:2037
msgid "Role"
@@ -2483,16 +2361,19 @@ msgstr ""
msgid "Removing %s account"
msgstr "%s kontua ezabatzen"
-#: ../src/config.py:2183 ../src/roster_window.py:1857
+#: ../src/config.py:2183
+#: ../src/roster_window.py:1857
msgid "Password Required"
msgstr "Pasahitza behar da"
-#: ../src/config.py:2184 ../src/roster_window.py:1858
+#: ../src/config.py:2184
+#: ../src/roster_window.py:1858
#, python-format
msgid "Enter your password for account %s"
msgstr "%s kontuaren pasahitza sartu"
-#: ../src/config.py:2185 ../src/roster_window.py:1859
+#: ../src/config.py:2185
+#: ../src/roster_window.py:1859
msgid "Save password"
msgstr "Gorde pasahitza"
@@ -2507,7 +2388,7 @@ msgstr "Hau ezabatzen baduzu, konexioa galdu egingo da."
#: ../src/config.py:2282
msgid "Enter and leave only"
-msgstr ""
+msgstr "Sarrerak eta irteerak bakarrik"
#: ../src/config.py:2352
msgid "New Room"
@@ -2518,11 +2399,8 @@ msgid "This bookmark has invalid data"
msgstr "Talde agenda honek datu-banku baliogabea du"
#: ../src/config.py:2384
-msgid ""
-"Please be sure to fill out server and room fields or remove this bookmark."
-msgstr ""
-"Mesedez ziurtatu ezazu zerbitzariaren eta gelaren informazioa betetzeaz edo "
-"talde agenda hau ezabatzeaz"
+msgid "Please be sure to fill out server and room fields or remove this bookmark."
+msgstr "Mesedez ziurtatu ezazu zerbitzariaren eta gelaren informazioa betetzeaz edo talde agenda hau ezabatzeaz"
#: ../src/config.py:2638
msgid "Invalid username"
@@ -2532,7 +2410,8 @@ msgstr "Baliogabeko izena"
msgid "You must provide a username to configure this account."
msgstr "Izen bat sartu behar duzu kontu bat sortzeko."
-#: ../src/config.py:2648 ../src/dialogs.py:1118
+#: ../src/config.py:2648
+#: ../src/dialogs.py:1118
msgid "Invalid password"
msgstr "Pasahitz baliogabea"
@@ -2540,11 +2419,13 @@ msgstr "Pasahitz baliogabea"
msgid "You must enter a password for the new account."
msgstr "Kontu berrirako pasahitz bat sartu behar duzu."
-#: ../src/config.py:2653 ../src/dialogs.py:1123
+#: ../src/config.py:2653
+#: ../src/dialogs.py:1123
msgid "Passwords do not match"
msgstr "Pasahitzak desberdinak dira"
-#: ../src/config.py:2654 ../src/dialogs.py:1124
+#: ../src/config.py:2654
+#: ../src/dialogs.py:1124
msgid "The passwords typed in both fields must be identical."
msgstr "Bi lekuetan pasahitza berdina izan behar du."
@@ -2560,10 +2441,9 @@ msgstr "Kontaktu hau dagoeneko Gajim-en konfiguratua dago."
msgid "Account has been added successfully"
msgstr "Kontua egoki sartua izan da"
-#: ../src/config.py:2692 ../src/config.py:2725
-msgid ""
-"You can set advanced account options by pressing Advanced button, or later "
-"by clicking in Accounts menuitem under Edit menu from the main window."
+#: ../src/config.py:2692
+#: ../src/config.py:2725
+msgid "You can set advanced account options by pressing Advanced button, or later by clicking in Accounts menuitem under Edit menu from the main window."
msgstr "Kontuko aukera aurreratuak ezarri ditzakezu Aurreratu botoila sakatuz."
#: ../src/config.py:2724
@@ -2583,9 +2463,7 @@ msgid "You already have an account using this name."
msgstr "Jadanik baduzu kontu izen hau erabilgarri."
#: ../src/conversation_textview.py:205
-msgid ""
-"Text below this line is what has been said since the last time you paid "
-"attention to this group chat"
+msgid "Text below this line is what has been said since the last time you paid attention to this group chat"
msgstr "Beheko testua adi zeuden azken uneko txat taldeko mezuak dira"
#: ../src/conversation_textview.py:263
@@ -2691,23 +2569,29 @@ msgstr "Mesedez ezarri izen bat egoera mezu honetarako"
#: ../src/dialogs.py:391
#, python-format
msgid "Please fill in the data of the contact you want to add in account %s"
-msgstr ""
-"Mesedez bete sartu nahi duzun kontaktuaren informazioa %s kontuan sartzeko"
+msgstr "Mesedez ezarri sartu nahi duzun kontaktuaren informazioa %s kontuarako"
#: ../src/dialogs.py:393
msgid "Please fill in the data of the contact you want to add"
msgstr "Mesedez bete sartu nahi duzun kontaktuaren informazioa"
-#: ../src/dialogs.py:403 ../src/disco.py:109 ../src/disco.py:110
-#: ../src/disco.py:1249 ../src/roster_window.py:207
-#: ../src/roster_window.py:273 ../src/roster_window.py:309
-#: ../src/roster_window.py:329 ../src/roster_window.py:353
-#: ../src/roster_window.py:2973 ../src/roster_window.py:2975
+#: ../src/dialogs.py:403
+#: ../src/disco.py:109
+#: ../src/disco.py:110
+#: ../src/disco.py:1249
+#: ../src/roster_window.py:207
+#: ../src/roster_window.py:273
+#: ../src/roster_window.py:309
+#: ../src/roster_window.py:329
+#: ../src/roster_window.py:353
+#: ../src/roster_window.py:2973
+#: ../src/roster_window.py:2975
#: ../src/common/helpers.py:39
msgid "Transports"
msgstr "Transportea"
-#: ../src/dialogs.py:493 ../src/dialogs.py:499
+#: ../src/dialogs.py:493
+#: ../src/dialogs.py:499
msgid "Invalid User ID"
msgstr "Bezero ID Baliogabea"
@@ -2729,16 +2613,15 @@ msgstr "GTK+ jabber bezeroa"
#: ../src/dialogs.py:577
msgid "GTK+ Version:"
-msgstr ""
+msgstr "GTK+ Bertsioa:"
#: ../src/dialogs.py:578
msgid "PyGTK Version:"
-msgstr ""
+msgstr "PyGTK Bertsioa:"
#: ../src/dialogs.py:586
-#, fuzzy
msgid "Current Developers:"
-msgstr "Aurre diseinatzaileak: "
+msgstr "Egungo diseinatzaileak: "
#: ../src/dialogs.py:588
msgid "Past Developers:"
@@ -2754,7 +2637,7 @@ msgstr "ESKERRAK:"
msgid "Last but not least, we would like to thank all the package maintainers."
msgstr ""
"Azkenak baina ez gutxien merezitakoak,\n"
-"eskerrak eman nahi diegu paketeak mantentzen dituztenei."
+"eskerrak eman nahi dzkiegu paketeak mantentzen dituztenei."
#. here you write your name in the form Name FamilyName <someone@somewhere>
#: ../src/dialogs.py:612
@@ -2762,15 +2645,13 @@ msgid "translator-credits"
msgstr "Urtzi Alfaro <urtzi@altza.net>"
#: ../src/dialogs.py:738
-#, fuzzy, python-format
+#, python-format
msgid "Unable to bind to port %s."
-msgstr "Ezin da gela honetara sartu"
+msgstr "Unable to bind to port %s."
#: ../src/dialogs.py:739
-msgid ""
-"Maybe you have another running instance of Gajim. File Transfer will be "
-"canceled."
-msgstr ""
+msgid "Maybe you have another running instance of Gajim. File Transfer will be canceled."
+msgstr "Beharbada beste Gajim prozesu bat abiarazita duzu. Fitxero transferentzia bertan behera utziko da."
#: ../src/dialogs.py:881
#, python-format
@@ -2809,33 +2690,36 @@ msgid "Start Chat"
msgstr "Elkarrizketa Hasi"
#: ../src/dialogs.py:1053
-#, fuzzy
msgid ""
"Fill in the jid, or nick of the contact you would like\n"
"to send a chat message to:"
msgstr ""
-"Txat mezu bat bidali nahi diozun kontaktuaren\n"
-"kontaktu ID-a ezarri:"
+"Idatzi mezua bidali nahi diozun\n"
+"kontaktuaren jid-a edota izengoitia:"
#. if offline or connecting
-#: ../src/dialogs.py:1078 ../src/dialogs.py:1427 ../src/dialogs.py:1551
+#: ../src/dialogs.py:1078
+#: ../src/dialogs.py:1427
+#: ../src/dialogs.py:1551
msgid "Connection not available"
msgstr "Konexioa ez erablgarri"
-#: ../src/dialogs.py:1079 ../src/dialogs.py:1428 ../src/dialogs.py:1552
+#: ../src/dialogs.py:1079
+#: ../src/dialogs.py:1428
+#: ../src/dialogs.py:1552
#, python-format
msgid "Please make sure you are connected with \"%s\"."
msgstr "Mesedez begiratu \"%s\" -rekin konektatuta zauden."
-#: ../src/dialogs.py:1088 ../src/dialogs.py:1091
-#, fuzzy
+#: ../src/dialogs.py:1088
+#: ../src/dialogs.py:1091
msgid "Invalid JID"
-msgstr "Jabber ID baliogabea"
+msgstr "JID Baliogabea"
#: ../src/dialogs.py:1091
-#, fuzzy, python-format
+#, python-format
msgid "Unable to parse \"%s\"."
-msgstr "Ezin da %s -ean idatzi"
+msgstr "Unable to parse \"%s\"."
#: ../src/dialogs.py:1100
msgid "Without a connection, you can not change your password."
@@ -2847,59 +2731,83 @@ msgstr "Pasahitza sartu behar duzu."
#. img to display
#. default value
-#: ../src/dialogs.py:1165 ../src/notify.py:126 ../src/notify.py:268
+#: ../src/dialogs.py:1165
+#: ../src/notify.py:126
+#: ../src/notify.py:268
msgid "Contact Signed In"
msgstr "Kontaktua konektatuta"
-#: ../src/dialogs.py:1167 ../src/notify.py:134 ../src/notify.py:270
+#: ../src/dialogs.py:1167
+#: ../src/notify.py:134
+#: ../src/notify.py:270
msgid "Contact Signed Out"
msgstr "Kontaktua deskonektatuta"
#. chat message
-#: ../src/dialogs.py:1169 ../src/notify.py:154 ../src/notify.py:272
+#: ../src/dialogs.py:1169
+#: ../src/notify.py:154
+#: ../src/notify.py:272
msgid "New Message"
msgstr "Mezu Berria Bat"
#. single message
-#: ../src/dialogs.py:1169 ../src/notify.py:138 ../src/notify.py:272
+#: ../src/dialogs.py:1169
+#: ../src/notify.py:138
+#: ../src/notify.py:272
msgid "New Single Message"
msgstr "Mezu Berri Bat"
#. private message
-#: ../src/dialogs.py:1170 ../src/notify.py:145 ../src/notify.py:273
+#: ../src/dialogs.py:1170
+#: ../src/notify.py:145
+#: ../src/notify.py:273
msgid "New Private Message"
msgstr "Mezu Pribatu Berri Bat"
-#: ../src/dialogs.py:1170 ../src/gajim.py:1044 ../src/notify.py:281
+#: ../src/dialogs.py:1170
+#: ../src/gajim.py:1044
+#: ../src/notify.py:281
msgid "New E-mail"
msgstr "E-Posta Berria"
-#: ../src/dialogs.py:1172 ../src/gajim.py:1187 ../src/notify.py:275
+#: ../src/dialogs.py:1172
+#: ../src/gajim.py:1187
+#: ../src/notify.py:275
msgid "File Transfer Request"
msgstr "Fitxeroa Transferitzeko Baimena"
-#: ../src/dialogs.py:1174 ../src/gajim.py:1022 ../src/gajim.py:1164
+#: ../src/dialogs.py:1174
+#: ../src/gajim.py:1022
+#: ../src/gajim.py:1164
#: ../src/notify.py:277
msgid "File Transfer Error"
msgstr "Fitxero Transferitze Errorea"
-#: ../src/dialogs.py:1176 ../src/gajim.py:1222 ../src/gajim.py:1244
-#: ../src/gajim.py:1261 ../src/notify.py:279
+#: ../src/dialogs.py:1176
+#: ../src/gajim.py:1222
+#: ../src/gajim.py:1244
+#: ../src/gajim.py:1261
+#: ../src/notify.py:279
msgid "File Transfer Completed"
msgstr "Fitxero Transferitzea Egina"
-#: ../src/dialogs.py:1177 ../src/gajim.py:1225 ../src/notify.py:279
+#: ../src/dialogs.py:1177
+#: ../src/gajim.py:1225
+#: ../src/notify.py:279
msgid "File Transfer Stopped"
msgstr "Fitxero Transferentzia Gelditua"
-#: ../src/dialogs.py:1179 ../src/gajim.py:920 ../src/notify.py:283
+#: ../src/dialogs.py:1179
+#: ../src/gajim.py:920
+#: ../src/notify.py:283
msgid "Groupchat Invitation"
msgstr "Txat Taldeko Gonbidapena"
-#: ../src/dialogs.py:1181 ../src/notify.py:118 ../src/notify.py:285
-#, fuzzy
+#: ../src/dialogs.py:1181
+#: ../src/notify.py:118
+#: ../src/notify.py:285
msgid "Contact Changed Status"
-msgstr "Kontaktua deskonektatuta"
+msgstr "Kontaktu Egoera Aldaketa"
#. FIXME: for Received with should become 'in'
#: ../src/dialogs.py:1359
@@ -2946,32 +2854,29 @@ msgstr " XML Konsola"
#: ../src/dialogs.py:1620
#, python-format
msgid "Privacy List <b><i>%s</i></b>"
-msgstr ""
+msgstr "Debekatze Zerrenda <b><i>%s</i></b>"
#: ../src/dialogs.py:1624
#, python-format
msgid "Privacy List for %s"
-msgstr ""
+msgstr "Debekatze Zerrenda %s-entzat"
#: ../src/dialogs.py:1716
-#, fuzzy
msgid "<b>Edit a rule</b>"
-msgstr "<b>Lerroaren Formatua</b>"
+msgstr "<b>Arau bat editatu</b>"
#: ../src/dialogs.py:1801
-#, fuzzy
msgid "<b>Add a rule</b>"
-msgstr "<b>Lerroaren Formatua</b>"
+msgstr "<b>Ezarri Araua</b>"
#: ../src/dialogs.py:1897
#, python-format
msgid "Privacy Lists for %s"
-msgstr ""
+msgstr "Debekatze Zerrenda %s-entzat"
#: ../src/dialogs.py:1899
-#, fuzzy
msgid "Privacy Lists"
-msgstr "Txat Pribatuak"
+msgstr "Debekatze Zerrenda"
#. FIXME: use nickname instead of contact_jid
#: ../src/dialogs.py:1988
@@ -2989,7 +2894,8 @@ msgstr "Azalpenak: %s"
msgid "Choose Sound"
msgstr "Aukeratu Soinua"
-#: ../src/dialogs.py:2064 ../src/dialogs.py:2107
+#: ../src/dialogs.py:2064
+#: ../src/dialogs.py:2107
msgid "All files"
msgstr "Fitxategi guztiak"
@@ -3016,9 +2922,8 @@ msgid "Adding Special Notification for %s"
msgstr "Jakinarazketa Berezia Gehitzen %s-entzat"
#: ../src/dialogs.py:2232
-#, fuzzy
msgid "Condition"
-msgstr "Konektatu"
+msgstr "Condition"
#: ../src/disco.py:108
msgid "Others"
@@ -3047,14 +2952,11 @@ msgid "The service could not be found"
msgstr "Zerbitzua ezin izan da aurkitu"
#: ../src/disco.py:629
-msgid ""
-"There is no service at the address you entered, or it is not responding. "
-"Check the address and try again."
-msgstr ""
-"Ez dago zerbitzurik zuk sartu duzun helbidean edo ez du erantzuten. Begiratu "
-"helbidea eta saiatu berriro."
+msgid "There is no service at the address you entered, or it is not responding. Check the address and try again."
+msgstr "Ez dago zerbitzurik zuk sartu duzun helbidean edo ez du erantzuten. Begiratu helbidea eta saiatu berriro."
-#: ../src/disco.py:633 ../src/disco.py:915
+#: ../src/disco.py:633
+#: ../src/disco.py:915
msgid "The service is not browsable"
msgstr "Zerbitzua erabilezina"
@@ -3075,7 +2977,8 @@ msgstr "_Bilatu"
msgid "This service does not contain any items to browse."
msgstr "Zerbitzari honek ez du begiratzeko menurik."
-#: ../src/disco.py:1137 ../src/disco.py:1254
+#: ../src/disco.py:1137
+#: ../src/disco.py:1254
msgid "Re_gister"
msgstr "Erre_gistratu"
@@ -3106,29 +3009,34 @@ msgstr "Denbora"
msgid "Progress"
msgstr "Prozesua"
-#: ../src/filetransfers_window.py:163 ../src/filetransfers_window.py:223
+#: ../src/filetransfers_window.py:163
+#: ../src/filetransfers_window.py:223
#, python-format
msgid "Filename: %s"
msgstr "Fitxeroaren izena: %s"
-#: ../src/filetransfers_window.py:164 ../src/filetransfers_window.py:291
+#: ../src/filetransfers_window.py:164
+#: ../src/filetransfers_window.py:291
#, python-format
msgid "Size: %s"
msgstr "Tamaina: %s"
#. You is a reply of who sent a file
#. You is a reply of who received a file
-#: ../src/filetransfers_window.py:173 ../src/filetransfers_window.py:183
+#: ../src/filetransfers_window.py:173
+#: ../src/filetransfers_window.py:183
#: ../src/history_manager.py:454
msgid "You"
msgstr "Zu"
-#: ../src/filetransfers_window.py:174 ../src/filetransfers_window.py:224
+#: ../src/filetransfers_window.py:174
+#: ../src/filetransfers_window.py:224
#, python-format
msgid "Sender: %s"
msgstr "Bidaltzaile: %s"
-#: ../src/filetransfers_window.py:175 ../src/filetransfers_window.py:556
+#: ../src/filetransfers_window.py:175
+#: ../src/filetransfers_window.py:556
#: ../src/tooltips.py:639
msgid "Recipient: "
msgstr "Hartzailea: "
@@ -3142,11 +3050,13 @@ msgstr "%s gordea"
msgid "File transfer completed"
msgstr "Fitxero transferentzia osatua"
-#: ../src/filetransfers_window.py:204 ../src/filetransfers_window.py:212
+#: ../src/filetransfers_window.py:204
+#: ../src/filetransfers_window.py:212
msgid "File transfer canceled"
msgstr "Fitxero transferentzia ezeztatua"
-#: ../src/filetransfers_window.py:204 ../src/filetransfers_window.py:213
+#: ../src/filetransfers_window.py:204
+#: ../src/filetransfers_window.py:213
msgid "Connection with peer cannot be established."
msgstr "Connection with peer cannot be established."
@@ -3189,30 +3099,30 @@ msgstr "%s fitxero bat bidali nahi dizu:"
#: ../src/filetransfers_window.py:311
#, python-format
msgid "Cannot overwrite existing file \"%s\""
-msgstr ""
+msgstr "Ezin izan da gainarazi \"%s\" fitxeroa"
#: ../src/filetransfers_window.py:312
-msgid ""
-"A file with this name already exists and you do not have permission to "
-"overwrite it."
-msgstr ""
+msgid "A file with this name already exists and you do not have permission to overwrite it."
+msgstr "Izen honekin dagoeneko badago fitxerorik eta ez duzu baimenik gainarazteko."
-#: ../src/filetransfers_window.py:319 ../src/gtkgui_helpers.py:685
+#: ../src/filetransfers_window.py:319
+#: ../src/gtkgui_helpers.py:685
msgid "This file already exists"
msgstr "Fitxero hau jadanik badago"
-#: ../src/filetransfers_window.py:319 ../src/gtkgui_helpers.py:685
+#: ../src/filetransfers_window.py:319
+#: ../src/gtkgui_helpers.py:685
msgid "What do you want to do?"
msgstr "Zer nahi duzu egitea?"
#: ../src/filetransfers_window.py:331
#, python-format
msgid "Directory \"%s\" is not writable"
-msgstr ""
+msgstr "\"%s\" kokapena ez da idazgarria"
#: ../src/filetransfers_window.py:331
msgid "You do not have permission to create files in this directory."
-msgstr ""
+msgstr "Ez duzu baimenik kokapen honetan fitxerorik sortzeko."
#: ../src/filetransfers_window.py:341
msgid "Save File as..."
@@ -3234,7 +3144,8 @@ msgstr "%(hours)02.d:%(minutes)02.d:%(seconds)02.d"
msgid "(%(filesize_unit)s/s)"
msgstr "(%(filesize_unit)s/s)"
-#: ../src/filetransfers_window.py:528 ../src/filetransfers_window.py:531
+#: ../src/filetransfers_window.py:528
+#: ../src/filetransfers_window.py:531
msgid "Invalid File"
msgstr "Fitxero Baliogabea"
@@ -3246,12 +3157,14 @@ msgstr "Fitxeroa:"
msgid "It is not possible to send empty files"
msgstr "Ez da posible hutsik dauden artxiboak bidaltzea"
-#: ../src/filetransfers_window.py:552 ../src/tooltips.py:511
+#: ../src/filetransfers_window.py:552
+#: ../src/tooltips.py:511
#: ../src/tooltips.py:629
msgid "Name: "
msgstr "Izena: "
-#: ../src/filetransfers_window.py:554 ../src/tooltips.py:633
+#: ../src/filetransfers_window.py:554
+#: ../src/tooltips.py:633
msgid "Sender: "
msgstr "Bidaltzailea: "
@@ -3278,21 +3191,22 @@ msgstr "Erakutsi edo ezkutatu zerrenda leihoa"
#: ../src/gajim-remote.py:94
msgid "Popups a window with the next unread message"
-msgstr "Popup leihoa hurrengo mezu irakurri gabearekin"
+msgstr "Agertarazi leiho bat irakurri gabeko hurrengo mezuarekin"
#: ../src/gajim-remote.py:98
-msgid ""
-"Prints a list of all contacts in the roster. Each contact appear on a "
-"separate line"
-msgstr ""
-"Zerrendan inprimatu kontaktu guztien lista. Kontaktu horiek hainbat lerrotan "
-"agertuko dira."
-
-#: ../src/gajim-remote.py:100 ../src/gajim-remote.py:114
-#: ../src/gajim-remote.py:124 ../src/gajim-remote.py:137
-#: ../src/gajim-remote.py:151 ../src/gajim-remote.py:172
-#: ../src/gajim-remote.py:202 ../src/gajim-remote.py:211
-#: ../src/gajim-remote.py:218 ../src/gajim-remote.py:225
+msgid "Prints a list of all contacts in the roster. Each contact appear on a separate line"
+msgstr "Zerrendan inprimatu kontaktu guztien lista. Kontaktu horiek hainbat lerrotan agertuko dira."
+
+#: ../src/gajim-remote.py:100
+#: ../src/gajim-remote.py:114
+#: ../src/gajim-remote.py:124
+#: ../src/gajim-remote.py:137
+#: ../src/gajim-remote.py:151
+#: ../src/gajim-remote.py:172
+#: ../src/gajim-remote.py:202
+#: ../src/gajim-remote.py:211
+#: ../src/gajim-remote.py:218
+#: ../src/gajim-remote.py:225
#: ../src/gajim-remote.py:236
msgid "account"
msgstr "kontua"
@@ -3318,7 +3232,8 @@ msgstr "egoera"
msgid "one of: offline, online, chat, away, xa, dnd, invisible "
msgstr "hauetako bat: offline, online, chat, away, xa, dnd, invisible "
-#: ../src/gajim-remote.py:113 ../src/gajim-remote.py:134
+#: ../src/gajim-remote.py:113
+#: ../src/gajim-remote.py:134
#: ../src/gajim-remote.py:148
msgid "message"
msgstr "mezua"
@@ -3328,13 +3243,8 @@ msgid "status message"
msgstr "egoera mezua"
#: ../src/gajim-remote.py:114
-msgid ""
-"change status of account \"account\". If not specified, try to change status "
-"of all accounts that have \"sync with global status\" option set"
-msgstr ""
-"\"kontua\" kontuaren egoera aldatu. Ez badago zehaztua, saiatu "
-"\"Sinkronizatu egoera globalarekin\" aukera hautatua duten kontu guztien "
-"egoera aldatzen"
+msgid "change status of account \"account\". If not specified, try to change status of all accounts that have \"sync with global status\" option set"
+msgstr "\"kontua\" kontuaren egoera aldatu. Ez badago zehaztua, saiatu \"Sinkronizatu egoera globalarekin\" aukera hautatua duten kontu guztien egoera aldatzen"
#: ../src/gajim-remote.py:120
msgid "Shows the chat dialog so that you can send messages to a contact"
@@ -3344,68 +3254,60 @@ msgstr "Txat leihoa erakutsi, honela, kontaktuari mezua bidali diezaiokezu"
msgid "JID of the contact that you want to chat with"
msgstr "Txateatu nahi duzun pertsonaren JID-a"
-#: ../src/gajim-remote.py:124 ../src/gajim-remote.py:202
+#: ../src/gajim-remote.py:124
+#: ../src/gajim-remote.py:202
msgid "if specified, contact is taken from the contact list of this account"
msgstr "hautatua badago, kontaktua kontu honen kontaktu listatik lortuko da."
#: ../src/gajim-remote.py:129
-#, fuzzy
-msgid ""
-"Sends new chat message to a contact in the roster. Both OpenPGP key and "
-"account are optional. If you want to set only 'account', without 'OpenPGP "
-"key', just set 'OpenPGP key' to ''."
-msgstr ""
-"Zerrendako kontaktu bati mezu berri bat bidali. Bai OpenPGP kodea eta baita "
-"kontua dira aukerazkoak.´Kontua´ bakarrik zehaztu nahi baduzu, ´OpenPGP "
-"koderik´ gabe, bakarrik ´OpenPGP kodea´ -entzat zehaztu."
+msgid "Sends new chat message to a contact in the roster. Both OpenPGP key and account are optional. If you want to set only 'account', without 'OpenPGP key', just set 'OpenPGP key' to ''."
+msgstr "Zerrendako kontaktu bati mezu berri bat bidali. Bai OpenPGP kodea eta baita kontua dira aukerazkoak. `Kontua` bakarrik zehaztu nahi baduzu, `OpenPGP koderik` gabe, bakarrik `OpenPGP kodea` -entzat zehaztu."
-#: ../src/gajim-remote.py:133 ../src/gajim-remote.py:146
+#: ../src/gajim-remote.py:133
+#: ../src/gajim-remote.py:146
msgid "JID of the contact that will receive the message"
msgstr "Mezua jaso dugun kontuaren JID-a"
-#: ../src/gajim-remote.py:134 ../src/gajim-remote.py:148
+#: ../src/gajim-remote.py:134
+#: ../src/gajim-remote.py:148
msgid "message contents"
msgstr "mezuaren edukia"
-#: ../src/gajim-remote.py:135 ../src/gajim-remote.py:149
+#: ../src/gajim-remote.py:135
+#: ../src/gajim-remote.py:149
msgid "pgp key"
msgstr "pgp giltza"
-#: ../src/gajim-remote.py:135 ../src/gajim-remote.py:149
+#: ../src/gajim-remote.py:135
+#: ../src/gajim-remote.py:149
msgid "if specified, the message will be encrypted using this public key"
msgstr "hautatua badago, kode publikoa erabiliz enkriptatuko da mezua"
-#: ../src/gajim-remote.py:137 ../src/gajim-remote.py:151
+#: ../src/gajim-remote.py:137
+#: ../src/gajim-remote.py:151
msgid "if specified, the message will be sent using this account"
msgstr "hautatua badago, mezua kontu hau erabiliz bidaliko da"
#: ../src/gajim-remote.py:142
-#, fuzzy
-msgid ""
-"Sends new single message to a contact in the roster. Both OpenPGP key and "
-"account are optional. If you want to set only 'account', without 'OpenPGP "
-"key', just set 'OpenPGP key' to ''."
-msgstr ""
-"Zerrendako kontaktu bati mezu berri bat bidali. Bai OpenPGP kodea eta baita "
-"kontua dira aukerazkoak.´Kontua´ bakarrik zehaztu nahi baduzu, ´OpenPGP "
-"koderik´ gabe, bakarrik ´OpenPGP kodea´ -entzat zehaztu."
+msgid "Sends new single message to a contact in the roster. Both OpenPGP key and account are optional. If you want to set only 'account', without 'OpenPGP key', just set 'OpenPGP key' to ''."
+msgstr "Zerrendako kontaktu bati mezu berri bat bidali. Bai OpenPGP kodea eta baita kontua dira aukerazkoak. `Kontua` bakarrik zehaztu nahi baduzu, `OpenPGP koderik` gabe, bakarrik `OpenPGP kodea` -entzat zehaztu."
#: ../src/gajim-remote.py:147
-#, fuzzy
msgid "subject"
-msgstr "Gaia"
+msgstr "gaia"
#: ../src/gajim-remote.py:147
-#, fuzzy
msgid "message subject"
-msgstr "Mezua Bidaltzean"
+msgstr "mezuaren gaia"
#: ../src/gajim-remote.py:156
msgid "Gets detailed info on a contact"
msgstr "Kontaktu baten informazioa lortu"
-#: ../src/gajim-remote.py:158 ../src/gajim-remote.py:171
-#: ../src/gajim-remote.py:201 ../src/gajim-remote.py:210
+#: ../src/gajim-remote.py:158
+#: ../src/gajim-remote.py:171
+#: ../src/gajim-remote.py:201
+#: ../src/gajim-remote.py:210
msgid "JID of the contact"
msgstr "Kontaktuaren JID-a"
@@ -3475,22 +3377,19 @@ msgstr "Zerrendara kontaktua sartu"
#: ../src/gajim-remote.py:210
msgid "jid"
-msgstr ""
+msgstr "jid"
#: ../src/gajim-remote.py:211
-#, fuzzy
msgid "Adds new contact to this account"
-msgstr "Kontu honetara kontaktu berri bat sartu."
+msgstr "Sartu kontaktu berria kontu honetara"
#: ../src/gajim-remote.py:216
msgid "Returns current status (the global one unless account is specified)"
msgstr "Oraingo egoera itzuli (Globala, ez badago kontu bat aukeratuta)"
#: ../src/gajim-remote.py:223
-msgid ""
-"Returns current status message(the global one unless account is specified)"
-msgstr ""
-"Oraingo egoera mezua itzuli(Globala aukeratu ez badago kontu bat aukeratuta)"
+msgid "Returns current status message(the global one unless account is specified)"
+msgstr "Oraingo egoera mezua itzuli(Globala aukeratu ez badago kontu bat aukeratuta)"
#: ../src/gajim-remote.py:230
msgid "Returns number of unreaded messages"
@@ -3498,12 +3397,11 @@ msgstr "Irakurri gabeko mezuen kontaketa itzuli"
#: ../src/gajim-remote.py:234
msgid "Open 'Start Chat' dialog"
-msgstr ""
+msgstr "Ireki 'Txat-a Hasi' leiho"
#: ../src/gajim-remote.py:236
-#, fuzzy
msgid "Starts chat, using this account"
-msgstr "Elkarrizketa Hasi %s kontuarekin"
+msgstr "Elkarrizketa hasi, kontu hau rabiliz"
#: ../src/gajim-remote.py:256
msgid "Missing argument \"contact_jid\""
@@ -3589,15 +3487,11 @@ msgstr "GTK+ rutinak ez du libglade sostengatzen"
#: ../src/gajim.py:63
#, python-format
-msgid ""
-"Please remove your current GTK+ runtime and install the latest stable "
-"version from %s"
-msgstr ""
-"GTK+ rutina ezabatu eta instalatu ezazu azken bertsio establea %s hemendik"
+msgid "Please remove your current GTK+ runtime and install the latest stable version from %s"
+msgstr "GTK+ rutina ezabatu eta instalatu ezazu azken bertsio establea %s hemendik"
#: ../src/gajim.py:65
-msgid ""
-"Please make sure that GTK+ and PyGTK have libglade support in your system."
+msgid "Please make sure that GTK+ and PyGTK have libglade support in your system."
msgstr "Konproba ezazu GTK+ eta PyGTK libglade onartzen dutea zure sistemak."
#: ../src/gajim.py:70
@@ -3607,13 +3501,15 @@ msgstr "Gajim-ek PySQLite2 behar du abiarazteko"
#. set the icon to all newly opened wind
#: ../src/gajim.py:151
msgid "Gajim is already running"
-msgstr ""
+msgstr "Gajim dagoeneko abiarazi da"
#: ../src/gajim.py:152
msgid ""
"Another instance of Gajim seems to be running\n"
"Run anyway?"
msgstr ""
+"Beste Gajim prozesu bat abiarazita dagoela dirudi\n"
+"Abiarazi dena den?"
#: ../src/gajim.py:267
#, python-format
@@ -3652,14 +3548,16 @@ msgstr "Beti deskonektatuta ikusiko duzu."
msgid "Contact with \"%s\" cannot be established"
msgstr "\"%s\" ezin izan da kontaktuan jarri"
-#: ../src/gajim.py:705 ../src/common/connection.py:398
+#: ../src/gajim.py:705
+#: ../src/common/connection.py:398
msgid "Check your connection or try again later."
msgstr "Begiratu zure konexioa edo saiatu berriro beranduago."
-#: ../src/gajim.py:849 ../src/roster_window.py:1025
+#: ../src/gajim.py:849
+#: ../src/roster_window.py:1025
#, python-format
msgid "%s is now %s (%s)"
-msgstr "%s orain %s da:(%s)"
+msgstr "%s orain %s dago: (%s)"
#: ../src/gajim.py:930
msgid "Your passphrase is incorrect"
@@ -3689,6 +3587,8 @@ msgid ""
"\n"
"From: %(from_address)s"
msgstr ""
+"\n"
+"Norengandik: %(from_address)s"
#: ../src/gajim.py:1185
#, python-format
@@ -3704,8 +3604,7 @@ msgstr "Ondo jasoa izan da %(name)s-ren %(filename)s fitxeroa."
#: ../src/gajim.py:1249
#, python-format
msgid "File transfer of %(filename)s from %(name)s stopped."
-msgstr ""
-"%(name)s -eko %(filename)s -ren fitxero trasferentzia gelditua izan da."
+msgstr "%(name)s -eko %(filename)s -ren fitxero trasferentzia gelditua izan da."
#: ../src/gajim.py:1262
#, python-format
@@ -3731,12 +3630,8 @@ msgid "vCard publication failed"
msgstr "vCard argitarapenak hust egin du"
#: ../src/gajim.py:1304
-msgid ""
-"There was an error while publishing your personal information, try again "
-"later."
-msgstr ""
-"Errore bat agertu da zure informazio pertsonala argitaratzen zen bitartean, "
-"saiatu berriro beranduago."
+msgid "There was an error while publishing your personal information, try again later."
+msgstr "Errore bat agertu da zure informazio pertsonala argitaratzen zen bitartean, saiatu berriro beranduago."
#. it is good to notify the user
#. in case he or she cannot see the output of the console
@@ -3800,9 +3695,8 @@ msgid "Group Chats"
msgstr "Txat Taldeak"
#: ../src/groupchat_control.py:308
-#, fuzzy
msgid "Insert Nickname"
-msgstr "Aldatu _Nick-a"
+msgstr "Sartu Izengoitia"
#: ../src/groupchat_control.py:702
msgid "This room has no subject"
@@ -3848,19 +3742,22 @@ msgstr "%s deskonektatu da"
#: ../src/groupchat_control.py:902
#, python-format
msgid "%s has joined the room"
-msgstr ""
+msgstr "%s gelan sartu da"
#. No status message
-#: ../src/groupchat_control.py:904 ../src/roster_window.py:1028
+#: ../src/groupchat_control.py:904
+#: ../src/roster_window.py:1028
#, python-format
msgid "%s is now %s"
msgstr "%s orain %s da"
-#: ../src/groupchat_control.py:1022 ../src/groupchat_control.py:1039
-#: ../src/groupchat_control.py:1132 ../src/groupchat_control.py:1148
+#: ../src/groupchat_control.py:1022
+#: ../src/groupchat_control.py:1039
+#: ../src/groupchat_control.py:1132
+#: ../src/groupchat_control.py:1148
#, python-format
msgid "Nickname not found: %s"
-msgstr "Nick-a aurkitugabea: %s"
+msgstr "Izengoitia aurkitugabea: %s"
#: ../src/groupchat_control.py:1066
#, python-format
@@ -3868,7 +3765,8 @@ msgid "Invited %(contact_jid)s to %(room_jid)s."
msgstr "Gonbidatu %(contact_jid)s %(room_jid)s. gelara."
#. %s is something the user wrote but it is not a jid so we inform
-#: ../src/groupchat_control.py:1073 ../src/groupchat_control.py:1103
+#: ../src/groupchat_control.py:1073
+#: ../src/groupchat_control.py:1103
#, python-format
msgid "%s does not appear to be a valid JID"
msgstr "%s ez du ematen baliozko JID bat denik"
@@ -3885,24 +3783,13 @@ msgstr "Azalpenak: %s"
#: ../src/groupchat_control.py:1209
#, python-format
-msgid ""
-"Usage: /%s <nickname|JID> [reason], bans the JID from the room. The nickname "
-"of an occupant may be substituted, but not if it contains \"@\". If the JID "
-"is currently in the room, he/she/it will also be kicked. Does NOT support "
-"spaces in nickname."
-msgstr ""
-"Erabilera: /%s <nickname|JID> [reason], debekatua JID-a gelatik. Erabiltzen "
-"ari den baten nick-a aldatu egin beharko da, baina ez da aldatu beharko \"@"
-"\" -rik badu. JID-a jadanik gelan bada, bera botatata izango da. Nick-ak EZ "
-"du onartzen tarterik. "
+msgid "Usage: /%s <nickname|JID> [reason], bans the JID from the room. The nickname of an occupant may be substituted, but not if it contains \"@\". If the JID is currently in the room, he/she/it will also be kicked. Does NOT support spaces in nickname."
+msgstr "Erabilera: /%s <nickname|JID> [reason], debekatua JID-a gelatik. Erabiltzen ari den baten izengoitia aldatu egin beharko da, baina ez da aldatu beharko \"@\" -rik badu. JID-a jadanik gelan bada, bera botatata izango da. Izengoitiak EZ du onartzen tarterik. "
#: ../src/groupchat_control.py:1215
#, python-format
-msgid ""
-"Usage: /%s <nickname>, opens a private chat window to the specified occupant."
-msgstr ""
-"Erabilera: /%s <nickname>,, ireki txat pribatu bat espezifikatutako "
-"erabiltzaileari."
+msgid "Usage: /%s <nickname>, opens a private chat window to the specified occupant."
+msgstr "Erabilera: /%s <nickname>, ireki txat pribatu bat espezifikatutako erabiltzaileari."
#: ../src/groupchat_control.py:1219
#, python-format
@@ -3911,9 +3798,7 @@ msgstr "Erabilera: %s, testu leihoa itxi."
#: ../src/groupchat_control.py:1221
#, python-format
-msgid ""
-"Usage: /%s [reason], closes the current window or tab, displaying reason if "
-"specified."
+msgid "Usage: /%s [reason], closes the current window or tab, displaying reason if specified."
msgstr "Erabilera: /%s [reason], itxi leihoa, zergatia erakutsiz behar bada."
#: ../src/groupchat_control.py:1224
@@ -3923,74 +3808,48 @@ msgstr "Erabilera:/%s, ezkutatu txat-eko botoilak."
#: ../src/groupchat_control.py:1226
#, python-format
-msgid ""
-"Usage: /%s <JID> [reason], invites JID to the current room, optionally "
-"providing a reason."
-msgstr ""
-"Erabilera: /%s <JID> [reason], gonbidatu JID-a oraingo gelara, aukerazko "
-"arrazoi bat emanez. "
+msgid "Usage: /%s <JID> [reason], invites JID to the current room, optionally providing a reason."
+msgstr "Erabilera: /%s <JID> [reason], gonbidatu JID-a oraingo gelara, aukerazko arrazoi bat emanez. "
#: ../src/groupchat_control.py:1230
#, python-format
-msgid ""
-"Usage: /%s <room>@<server>[/nickname], offers to join room@server optionally "
-"using specified nickname."
-msgstr ""
-"Erabilera: /%s <room>@<server>[/nickname], eskaini room@server-era sartzen "
-"aukeraz nick bat ezarriz."
+msgid "Usage: /%s <room>@<server>[/nickname], offers to join room@server optionally using specified nickname."
+msgstr "Erabilera: /%s <room>@<server>[/nickname], eskaini room@server-era sartzen aukeraz izengoiti bat ezarriz."
#: ../src/groupchat_control.py:1234
#, python-format
-msgid ""
-"Usage: /%s <nickname> [reason], removes the occupant specified by nickname "
-"from the room and optionally displays a reason. Does NOT support spaces in "
-"nickname."
-msgstr ""
-"Erabilera: /%s <nickname> [reason], ezabatu nick-aren bidez aukeratutako "
-"erabiltzailea gelatik eta nahi bada arrazoi bat adierazi. EZ da onartzen "
-"espazioak nick-an."
+msgid "Usage: /%s <nickname> [reason], removes the occupant specified by nickname from the room and optionally displays a reason. Does NOT support spaces in nickname."
+msgstr "Erabilera: /%s <nickname> [reason], ezabatu izengoitiaren bidez aukeratutako erabiltzailea gelatik eta nahi bada arrazoi bat adierazi. EZ da onartzen espazioak nick-an."
#: ../src/groupchat_control.py:1239
#, python-format
-msgid ""
-"Usage: /%s <action>, sends action to the current room. Use third person. (e."
-"g. /%s explodes.)"
-msgstr ""
-"Erabilera: /%s <action>, bidali aukeratutako ekintza daukazun oraingo "
-"gelara. Erabili 3. pertsona. (e.g. /%s explodes.)"
+msgid "Usage: /%s <action>, sends action to the current room. Use third person. (e.g. /%s explodes.)"
+msgstr "Erabilera: /%s <action>, bidali aukeratutako ekintza daukazun oraingo gelara. Erabili 3. pertsona. (e.g. /%s explodes.)"
#: ../src/groupchat_control.py:1243
#, python-format
-msgid ""
-"Usage: /%s <nickname> [message], opens a private message windowand sends "
-"message to the occupant specified by nickname."
-msgstr ""
-"Erabilera: /%s <nickname> [message], ireki mezu pribatuko leiho bat eta "
-"bidali zehaztutako nick-aren erabiltzailera."
+msgid "Usage: /%s <nickname> [message], opens a private message windowand sends message to the occupant specified by nickname."
+msgstr "Erabilera: /%s <nickname> [message], ireki mezu pribatuko leiho bat eta bidali zehaztutako izengoitiaren erabiltzailera."
#: ../src/groupchat_control.py:1248
#, python-format
msgid "Usage: /%s <nickname>, changes your nickname in current room."
-msgstr "Erabilera: /%s <nickname>, aldatu zure nick-a oraingo gelan."
+msgstr "Erabilera: /%s <nickname>, aldatu zure izengoitia gela hontan."
#: ../src/groupchat_control.py:1252
-#, fuzzy, python-format
+#, python-format
msgid "Usage: /%s , display the names of room occupants."
-msgstr ""
-"Erabilera: /%s [topic], erakuts arazi edo aktualizatu oraingo gelako gaia."
+msgstr "Erabilera:/%s , erakutsarazi gelako pertsonen izenak."
#: ../src/groupchat_control.py:1256
#, python-format
msgid "Usage: /%s [topic], displays or updates the current room topic."
-msgstr ""
-"Erabilera: /%s [topic], erakuts arazi edo aktualizatu oraingo gelako gaia."
+msgstr "Erabilera: /%s [topic], erakuts arazi edo aktualizatu oraingo gelako gaia."
#: ../src/groupchat_control.py:1259
#, python-format
-msgid ""
-"Usage: /%s <message>, sends a message without looking for other commands."
-msgstr ""
-"Erabilera: /%s <message>, mezu bat bidali beste komandoak bilatu gabe."
+msgid "Usage: /%s <message>, sends a message without looking for other commands."
+msgstr "Erabilera: /%s <message>, mezu bat bidali beste komandoak bilatu gabe."
#: ../src/groupchat_control.py:1262
#, python-format
@@ -4020,11 +3879,11 @@ msgstr "Gai berria zehaztu:"
#: ../src/groupchat_control.py:1352
msgid "Changing Nickname"
-msgstr "Nick-a Aldatu"
+msgstr "Izengoitia Aldatu"
#: ../src/groupchat_control.py:1353
msgid "Please specify the new nickname you want to use:"
-msgstr "Mesedez zehaztu ezazu erabili nahi duzun nick berria:"
+msgstr "Mesedez zehaztu ezazu erabili nahi duzun izengoiti berria:"
#: ../src/groupchat_control.py:1379
msgid "Bookmark already set"
@@ -4041,8 +3900,7 @@ msgstr "Talde agenda egoki sortu da"
#: ../src/groupchat_control.py:1390
msgid "You can manage your bookmarks via Actions menu in your roster."
-msgstr ""
-"Zure talde agenda moldatu dezakezu zure zerrendako aukera menuaren bidez."
+msgstr "Zure talde agenda moldatu dezakezu zure zerrendako aukera menuaren bidez."
#. ask for reason
#: ../src/groupchat_control.py:1500
@@ -4050,7 +3908,8 @@ msgstr ""
msgid "Kicking %s"
msgstr "Botatzen %s"
-#: ../src/groupchat_control.py:1501 ../src/groupchat_control.py:1779
+#: ../src/groupchat_control.py:1501
+#: ../src/groupchat_control.py:1779
msgid "You may specify a reason below:"
msgstr "Arrazoia zehaztu behar duzu behean:"
@@ -4065,12 +3924,8 @@ msgid "A programming error has been detected"
msgstr "Programazio errore bat detektatu da"
#: ../src/gtkexcepthook.py:52
-msgid ""
-"It probably is not fatal, but should be reported to the developers "
-"nonetheless."
-msgstr ""
-"Seguraski ez da garrantzitsua, baina diseinatzailei abisatu beharko "
-"litzateke."
+msgid "It probably is not fatal, but should be reported to the developers nonetheless."
+msgstr "Seguraski ez da garrantzitsua, baina diseinatzailei abisatu beharko litzateke."
#: ../src/gtkexcepthook.py:58
msgid "_Report Bug"
@@ -4081,7 +3936,8 @@ msgid "Details"
msgstr "Zehaztapenak"
#. we talk about file
-#: ../src/gtkgui_helpers.py:154 ../src/gtkgui_helpers.py:169
+#: ../src/gtkgui_helpers.py:154
+#: ../src/gtkgui_helpers.py:169
#, python-format
msgid "Error: cannot open %s for reading"
msgstr "Errorea: ezin da %s ireki irakurtzeko"
@@ -4099,23 +3955,20 @@ msgstr "Errorea fitxeroa analizatzean:"
#: ../src/gtkgui_helpers.py:339
#, python-format
msgid "Could not write to %s. Session Management support will not work"
-msgstr ""
-"ezin izan da %s-ri idatzi. Sesio administratzailea euskarria ez dago lanean."
+msgstr "ezin izan da %s-ri idatzi. Sesio administratzailea euskarria ez dago lanean."
#: ../src/gtkgui_helpers.py:717
-#, fuzzy
msgid "Extension not supported"
-msgstr "Dbus ez da onartzen."
+msgstr "Gehigarriak ez eskuragarri"
#: ../src/gtkgui_helpers.py:718
#, python-format
msgid "Image cannot be saved in %(type)s format. Save as %(new_filename)s?"
-msgstr ""
+msgstr "Irudia ezin izan da %(type)s formatuan gorde. Gorde %(new_filename)s bezala?"
#: ../src/gtkgui_helpers.py:727
-#, fuzzy
msgid "Save Image as..."
-msgstr "Gorde Bezala..."
+msgstr "Gorde Irudia Bezala..."
#: ../src/history_manager.py:61
msgid "Cannot find history logs database"
@@ -4127,45 +3980,42 @@ msgid "Contacts"
msgstr "Kontaktua"
#. holds time
-#: ../src/history_manager.py:117 ../src/history_manager.py:157
+#: ../src/history_manager.py:117
+#: ../src/history_manager.py:157
#: ../src/history_window.py:85
msgid "Date"
msgstr "Data"
#. holds nickname
-#: ../src/history_manager.py:123 ../src/history_manager.py:175
+#: ../src/history_manager.py:123
+#: ../src/history_manager.py:175
msgid "Nickname"
-msgstr "Nickname"
+msgstr "Izengoitia"
#. holds message
-#: ../src/history_manager.py:131 ../src/history_manager.py:163
+#: ../src/history_manager.py:131
+#: ../src/history_manager.py:163
#: ../src/history_window.py:93
msgid "Message"
msgstr "Mezua"
#. holds subject
-#: ../src/history_manager.py:138 ../src/history_manager.py:169
+#: ../src/history_manager.py:138
+#: ../src/history_manager.py:169
msgid "Subject"
msgstr "Gaia"
#: ../src/history_manager.py:183
-msgid ""
-"Do you want to clean up the database? (STRONGLY NOT RECOMMENDED IF GAJIM IS "
-"RUNNING)"
-msgstr ""
-"Garbitu nahi al duzu datu basea?(EZ DA GOMENDATZEN GAJIM ABIARAZIA BADAGO)"
+msgid "Do you want to clean up the database? (STRONGLY NOT RECOMMENDED IF GAJIM IS RUNNING)"
+msgstr "Garbitu nahi al duzu datu basea?(EZ DA GOMENDATZEN GAJIM ABIARAZIA BADAGO)"
#: ../src/history_manager.py:185
msgid ""
-"Normally allocated database size will not be freed, it will just become "
-"reusable. If you really want to reduce database filesize, click YES, else "
-"click NO.\n"
+"Normally allocated database size will not be freed, it will just become reusable. If you really want to reduce database filesize, click YES, else click NO.\n"
"\n"
"In case you click YES, please wait..."
msgstr ""
-"Normalean hautaturiko datu basearen tamaina ez da libratuko, ezta ere "
-"berrerabilgarri bihurtuko. Datu basearen tamaina gutxitu nahi baduzu, BAI "
-"sakatu, bestela EZ.\n"
+"Normalean hautaturiko datu basearen tamaina ez da libratuko, ezta ere berrerabilgarri bihurtuko. Datu basearen tamaina gutxitu nahi baduzu, BAI sakatu, bestela EZ.\n"
"\n"
"BAI sakatu baduzu, mesedez itxoin..."
@@ -4186,10 +4036,10 @@ msgstr "zein"
msgid "Do you really want to delete logs of the selected contact?"
msgid_plural "Do you really want to delete logs of the selected contacts?"
msgstr[0] "Ziur al zaude hautaturiko kontaktuaren log-a ezabatu nahi duzula?"
-msgstr[1] ""
-"Ziur al zaude hautaturiko kontaktuaren log-ak ezabatu nahi dituzula?"
+msgstr[1] "Ziur al zaude hautaturiko kontaktuaren log-ak ezabatu nahi dituzula?"
-#: ../src/history_manager.py:509 ../src/history_manager.py:545
+#: ../src/history_manager.py:509
+#: ../src/history_manager.py:545
msgid "This is an irreversible operation."
msgstr "Itzulgaitza den operazio bat da hau."
@@ -4199,7 +4049,8 @@ msgid_plural "Do you really want to delete the selected messages?"
msgstr[0] "Ziur al zaude hautaturiko mezua ezabatu nahi duzula?"
msgstr[1] "Ziur al zaude hautaturiko mezuak ezabatu nahi dituzula?"
-#: ../src/history_window.py:102 ../src/history_window.py:104
+#: ../src/history_window.py:102
+#: ../src/history_window.py:104
#, python-format
msgid "Conversation History with %s"
msgstr "Elkarrizketa Historiala %s-rekin"
@@ -4209,7 +4060,8 @@ msgstr "Elkarrizketa Historiala %s-rekin"
msgid "%(nick)s is now %(status)s: %(status_msg)s"
msgstr "%(nick)s orain %(status)s dago: %(status_msg)s"
-#: ../src/history_window.py:262 ../src/notify.py:113
+#: ../src/history_window.py:262
+#: ../src/notify.py:113
#, python-format
msgid "%(nick)s is now %(status)s"
msgstr "%(nick)s orain dago %(status)s"
@@ -4234,9 +4086,9 @@ msgid "%s - Gajim"
msgstr "%s - Gajim"
#: ../src/notify.py:111
-#, fuzzy, python-format
+#, python-format
msgid "%(nick)s Changed Status"
-msgstr "%(nick)s orain dago %(status)s"
+msgstr "%(nick)s Egoera Aldatu du"
#: ../src/notify.py:121
#, python-format
@@ -4272,7 +4124,8 @@ msgstr "Mezu Berria %(nickname)s -etik"
msgid "Merged accounts"
msgstr "Batu kontuak"
-#: ../src/roster_window.py:288 ../src/common/helpers.py:39
+#: ../src/roster_window.py:288
+#: ../src/common/helpers.py:39
msgid "Observers"
msgstr "Begiratzaileak"
@@ -4281,7 +4134,8 @@ msgstr "Begiratzaileak"
msgid "You are already in room %s"
msgstr "%s gelan zaude dagoeneko"
-#: ../src/roster_window.py:548 ../src/roster_window.py:2280
+#: ../src/roster_window.py:548
+#: ../src/roster_window.py:2280
msgid "You cannot join a room while you are invisible"
msgstr "Ezin duzu txat talde batera sartu ikusezin zauden bitartean"
@@ -4302,7 +4156,9 @@ msgstr "%s kontua erabiliz"
#. new chat
#. for chat_with
#. for single message
-#: ../src/roster_window.py:763 ../src/systray.py:193 ../src/systray.py:198
+#: ../src/roster_window.py:763
+#: ../src/systray.py:193
+#: ../src/systray.py:198
#, python-format
msgid "using account %s"
msgstr "%s kontua erabiliz "
@@ -4337,12 +4193,8 @@ msgid "Transport \"%s\" will be removed"
msgstr "\"%s\" transportea ezabatu da"
#: ../src/roster_window.py:1159
-msgid ""
-"You will no longer be able to send and receive messages to contacts from "
-"this transport."
-msgstr ""
-"You will no longer be able to send and receive messages to contacts from "
-"this transport."
+msgid "You will no longer be able to send and receive messages to contacts from this transport."
+msgstr "You will no longer be able to send and receive messages to contacts from this transport."
#: ../src/roster_window.py:1201
msgid "Assign OpenPGP Key"
@@ -4405,20 +4257,12 @@ msgid "Contact \"%s\" will be removed from your roster"
msgstr "\"%s\" kontaktua ezabatua izango da zure zerrendatik"
#: ../src/roster_window.py:1826
-msgid ""
-"By removing this contact you also remove authorization resulting in him or "
-"her always seeing you as offline."
-msgstr ""
-"Kontaktua ezabatuz bere autorizazioa ere ezabatzen duzu. Beraz, kontaktuak "
-"deskonektatuta ikusiko zaitu beti."
+msgid "By removing this contact you also remove authorization resulting in him or her always seeing you as offline."
+msgstr "Kontaktua ezabatuz bere autorizazioa ere ezabatzen duzu. Beraz, kontaktuak deskonektatuta ikusiko zaitu beti."
#: ../src/roster_window.py:1830
-msgid ""
-"By removing this contact you also by default remove authorization resulting "
-"in him or her always seeing you as offline."
-msgstr ""
-"Kontaktua ezabatuz bere autorizazioa ere borratzen duzu. Beraz, kontaktuak "
-"deskonektatuta ikusiko zaitu beti."
+msgid "By removing this contact you also by default remove authorization resulting in him or her always seeing you as offline."
+msgstr "Kontaktua ezabatuz bere autorizazioa ere borratzen duzu. Beraz, kontaktuak deskonektatuta ikusiko zaitu beti."
#: ../src/roster_window.py:1831
msgid "I want this contact to know my status after removal"
@@ -4445,17 +4289,15 @@ msgstr "Pasa-esaldi okerra"
msgid "Please retype your GPG passphrase or press Cancel."
msgstr "Mesedez berridatzi zure GPG pasa-esaldia edo kantzelatu."
-#: ../src/roster_window.py:1963 ../src/roster_window.py:2020
+#: ../src/roster_window.py:1963
+#: ../src/roster_window.py:2020
msgid "You are participating in one or more group chats"
msgstr "Txat talde bat baino gehiegotan parte hartzen ari zara."
-#: ../src/roster_window.py:1964 ../src/roster_window.py:2021
-msgid ""
-"Changing your status to invisible will result in disconnection from those "
-"group chats. Are you sure you want to go invisible?"
-msgstr ""
-"Zure egoera ikusezinera pasatzen baduzu deskonektatu egingo zara txat talde "
-"honetatik. Ziur al zaude ikusezin jarri nahi duzula?"
+#: ../src/roster_window.py:1964
+#: ../src/roster_window.py:2021
+msgid "Changing your status to invisible will result in disconnection from those group chats. Are you sure you want to go invisible?"
+msgstr "Zure egoera ikusezinera pasatzen baduzu deskonektatu egingo zara txat talde honetatik. Ziur al zaude ikusezin jarri nahi duzula?"
#: ../src/roster_window.py:1980
msgid "No account available"
@@ -4463,17 +4305,16 @@ msgstr "Ez dago konturik erabilgarri"
#: ../src/roster_window.py:1981
msgid "You must create an account before you can chat with other contacts."
-msgstr ""
-"Kontu bat sortu behar duzu norbaitekin txateatzeko aukera izan baino lehen."
+msgstr "Kontu bat sortu behar duzu norbaitekin txateatzeko aukera izan baino lehen."
-#: ../src/roster_window.py:2452 ../src/roster_window.py:2458
+#: ../src/roster_window.py:2452
+#: ../src/roster_window.py:2458
msgid "You have unread messages"
msgstr "Irakurri gabeko mezu bat duzu"
-#: ../src/roster_window.py:2453 ../src/roster_window.py:2459
-msgid ""
-"Messages will only be available for reading them later if you have history "
-"enabled."
+#: ../src/roster_window.py:2453
+#: ../src/roster_window.py:2459
+msgid "Messages will only be available for reading them later if you have history enabled."
msgstr "Mezuak gero irakurri ahalko dira historiala aktibatua baduzu."
#: ../src/roster_window.py:3231
@@ -4498,7 +4339,8 @@ msgstr "_Egoera Mezua Aldatu..."
msgid "Hide this menu"
msgstr "Ezkutatu Menua"
-#: ../src/systraywin32.py:261 ../src/systraywin32.py:280
+#: ../src/systraywin32.py:261
+#: ../src/systraywin32.py:280
#, python-format
msgid "Gajim - %d unread message"
msgid_plural "Gajim - %d unread messages"
@@ -4506,34 +4348,35 @@ msgstr[0] "Gajim - %d mezu irakurri gabe"
msgstr[1] "Gajim - %d irakurri gabeko mezuak"
#: ../src/tooltips.py:326
-#, fuzzy, python-format
+#, python-format
msgid " %d unread message"
msgid_plural " %d unread messages"
-msgstr[0] "Gajim - %d mezu irakurri gabe"
-msgstr[1] "Gajim - %d irakurri gabeko mezuak"
+msgstr[0] "%d mezu irakurri gabe"
+msgstr[1] "%d mezu irakurri gabe"
#: ../src/tooltips.py:332
-#, fuzzy, python-format
+#, python-format
msgid " %d unread single message"
msgid_plural " %d unread single messages"
-msgstr[0] "Gajim - %d mezu irakurri gabe"
-msgstr[1] "Gajim - %d irakurri gabeko mezuak"
+msgstr[0] "%d mezu irakurri gabe"
+msgstr[1] "%d irakurri gabeko mezuak"
#: ../src/tooltips.py:338
-#, fuzzy, python-format
+#, python-format
msgid " %d unread group chat message"
msgid_plural " %d unread group chat messages"
-msgstr[0] "Gajim - %d txat taldeko mezua irakurri gabe"
-msgstr[1] "Gajim - %d txat taldeko mezuak irakurri gabe"
+msgstr[0] "%d txat taldeko mezua irakurri gabe"
+msgstr[1] "%d txat taldeko mezuak irakurri gabe"
#: ../src/tooltips.py:344
-#, fuzzy, python-format
+#, python-format
msgid " %d unread private message"
msgid_plural " %d unread private messages"
-msgstr[0] "Gajim - %d mezu pribatu irakurri gabe"
-msgstr[1] "Gajim - %d mezu pribatu irakurri gabe"
+msgstr[0] "%d mezu pribatu irakurri gabe"
+msgstr[1] "%d mezu pribatu irakurri gabe"
-#: ../src/tooltips.py:359 ../src/tooltips.py:361
+#: ../src/tooltips.py:359
+#: ../src/tooltips.py:361
#, python-format
msgid "Gajim - %s"
msgstr "Gajim - %s"
@@ -4546,11 +4389,14 @@ msgstr "Eginkizun:"
msgid "Affiliation: "
msgstr "Afizioak: "
-#: ../src/tooltips.py:398 ../src/tooltips.py:537
+#: ../src/tooltips.py:398
+#: ../src/tooltips.py:537
msgid "Resource: "
msgstr "Baliabideak: "
-#: ../src/tooltips.py:407 ../src/tooltips.py:540 ../src/tooltips.py:565
+#: ../src/tooltips.py:407
+#: ../src/tooltips.py:540
+#: ../src/tooltips.py:565
#: ../src/tooltips.py:676
msgid "Status: "
msgstr "Egoera: "
@@ -4589,7 +4435,8 @@ msgstr "Mota: "
msgid "Transferred: "
msgstr "Transferitua:"
-#: ../src/tooltips.py:654 ../src/tooltips.py:675
+#: ../src/tooltips.py:654
+#: ../src/tooltips.py:675
msgid "Not started"
msgstr "Hasigabea"
@@ -4597,7 +4444,8 @@ msgstr "Hasigabea"
msgid "Stopped"
msgstr "Gelditua"
-#: ../src/tooltips.py:660 ../src/tooltips.py:663
+#: ../src/tooltips.py:660
+#: ../src/tooltips.py:663
msgid "Completed"
msgstr "Osatua"
@@ -4641,20 +4489,12 @@ msgid "since %s"
msgstr "noiztik %s"
#: ../src/vcard.py:332
-msgid ""
-"This contact is interested in your presence information, but you are not "
-"interested in his/her presence"
-msgstr ""
-"Kontu hau zure egoera informazioan interesatuta dago , baina zu ez zaude "
-"haren egoera informazioan interesatuta"
+msgid "This contact is interested in your presence information, but you are not interested in his/her presence"
+msgstr "Kontu hau zure egoera informazioan interesatuta dago , baina zu ez zaude haren egoera informazioan interesatuta"
#: ../src/vcard.py:334
-msgid ""
-"You are interested in the contact's presence information, but he/she is not "
-"interested in yours"
-msgstr ""
-"Kontaktuaren egoera informazioan interesatuta zaude, baina berak ez du zugan "
-"interesik"
+msgid "You are interested in the contact's presence information, but he/she is not interested in yours"
+msgstr "Kontaktuaren egoera informazioan interesatuta zaude, baina berak ez du zugan interesik"
#: ../src/vcard.py:336
msgid "You and the contact are interested in each other's presence information"
@@ -4662,18 +4502,15 @@ msgstr "Zu eta kontaktua, bien egoera informazioetan interesatuta zaudete"
#. None
#: ../src/vcard.py:338
-msgid ""
-"You are not interested in the contact's presence, and neither he/she is "
-"interested in yours"
-msgstr ""
-"Zu ez zaude haren egoera informazioan interesatuta, bera zugan interesa du"
+msgid "You are not interested in the contact's presence, and neither he/she is interested in yours"
+msgstr "Zu ez zaude haren egoera informazioan interesatuta, bera zugan interesa du"
#: ../src/vcard.py:347
msgid "You are waiting contact's answer about your subscription request"
-msgstr ""
-"Zure harpidetza eskariaren erantzunaren zain zaude kontaktuaren aldetik"
+msgstr "Zure harpidetza eskariaren erantzunaren zain zaude kontaktuaren aldetik"
-#: ../src/vcard.py:359 ../src/vcard.py:382
+#: ../src/vcard.py:359
+#: ../src/vcard.py:382
msgid " resource with priority "
msgstr "baliabidea lehentasunarekin: "
@@ -4693,14 +4530,17 @@ msgstr "Informazio pertsonala"
msgid "creating logs database"
msgstr "logs-en datu basea sortzen"
-#: ../src/common/check_paths.py:82 ../src/common/check_paths.py:93
+#: ../src/common/check_paths.py:82
+#: ../src/common/check_paths.py:93
#: ../src/common/check_paths.py:100
#, python-format
msgid "%s is file but it should be a directory"
msgstr "%s fitxero bat da baina direktorio bat izan daiteke"
-#: ../src/common/check_paths.py:83 ../src/common/check_paths.py:94
-#: ../src/common/check_paths.py:101 ../src/common/check_paths.py:109
+#: ../src/common/check_paths.py:83
+#: ../src/common/check_paths.py:94
+#: ../src/common/check_paths.py:101
+#: ../src/common/check_paths.py:109
msgid "Gajim will now exit"
msgstr "Gajim orain badago"
@@ -4720,14 +4560,11 @@ msgstr "pysqlite2 (aka python-pysqlite2) dependency is missing. Exiting..."
#: ../src/common/exceptions.py:40
msgid "Service not available: Gajim is not running, or remote_control is False"
-msgstr ""
-"Zerbitzua ez erabilgarri: Gajim ez dago abiarazita edota remote_control "
-"False egoeran dago"
+msgstr "Zerbitzua ez erabilgarri: Gajim ez dago abiarazita edota remote_control False egoeran dago"
#: ../src/common/exceptions.py:48
msgid "D-Bus is not present on this machine or python module is missing"
-msgstr ""
-"D-bus ez dago ordenagailu honetan edo python moduloak ez daude erabilgarri"
+msgstr "D-bus ez dago ordenagailu honetan edo python moduloak ez daude erabilgarri"
#: ../src/common/exceptions.py:56
msgid ""
@@ -4759,7 +4596,7 @@ msgstr "Ez erabilgarri beste zerbaitetan egoteagatik"
#: ../src/common/config.py:77
msgid "List (space separated) of rows (accounts and groups) that are collapsed"
-msgstr ""
+msgstr "List (space separated) of rows (accounts and groups) that are collapsed"
#: ../src/common/config.py:83
msgid ""
@@ -4767,58 +4604,45 @@ msgid ""
"'sometimes' - print time every print_ichat_every_foo_minutes minute.\n"
"'never' - never print time."
msgstr ""
+"'always' - inprimatu ordua mezuko.\n"
+"'sometimes' - inprimatu ordua print_ichat_every_foo_minutes minutuko.\n"
+"'never' - inoiz ez inprimatu ordua."
#: ../src/common/config.py:84
-msgid ""
-"Value of fuzziness from 1 to 4 or 0 to disable fuzzyclock. 1 is the most "
-"precise clock, 4 the less precise one."
-msgstr ""
+msgid "Value of fuzziness from 1 to 4 or 0 to disable fuzzyclock. 1 is the most precise clock, 4 the less precise one."
+msgstr "1-tik 4-rako baloreak eman fuzziness-ri eta 0 fuzzyclock ezintzeko. 1 ordu zehatzena da, 4 berriz, zehaztasun gutxienekoa."
#: ../src/common/config.py:87
msgid "Treat * / _ pairs as possible formatting characters."
msgstr "Treat * / _ pairs as possible formatting characters."
#: ../src/common/config.py:88
-msgid ""
-"If True, do not remove */_ . So *abc* will be bold but with * * not removed."
-msgstr ""
-"If True, do not remove */_ . So *abc* will be bold but with * * not removed."
+msgid "If True, do not remove */_ . So *abc* will be bold but with * * not removed."
+msgstr "If True, do not remove */_ . So *abc* will be bold but with * * not removed."
#: ../src/common/config.py:98
-msgid ""
-"Character to add after nickname when using nick completion (tab) in group "
-"chat"
-msgstr ""
+msgid "Character to add after nickname when using nick completion (tab) in group chat"
+msgstr "Izengoitiaren ondoren ezartzeko karakterea txat talde batean tab-a erabiltzen bada"
#: ../src/common/config.py:99
-msgid ""
-"Character to propose to add after desired nickname when desired nickname is "
-"used by someone else in group chat"
-msgstr ""
+msgid "Character to propose to add after desired nickname when desired nickname is used by someone else in group chat"
+msgstr "Izengoitiaren ondoren jartzeko proposatzen den karakterea, txat taldean beste pertsona batek izengoiti berbera badu"
#: ../src/common/config.py:131
msgid "Add * and [n] in roster title?"
msgstr "Sartu * eta [n] zerrendako izenburuan?"
#: ../src/common/config.py:132
-msgid ""
-"How many lines to remember from previous conversation when a chat tab/window "
-"is reopened."
+msgid "How many lines to remember from previous conversation when a chat tab/window is reopened."
msgstr "Zenbat lerro gogoarazteko lehengo elkarrizketatik leihoa irikitzean."
#: ../src/common/config.py:133
msgid "How many minutes should last lines from previous conversation last."
-msgstr ""
-"Zenbat minutu izan behar ditu azken lerroak lehengo elkarrizketaren "
-"azkenetik."
+msgstr "Zenbat minutu izan behar ditu azken lerroak lehengo elkarrizketaren azkenetik."
#: ../src/common/config.py:134
-msgid ""
-"Send message on Ctrl+Enter and with Enter make new line (Mirabilis ICQ "
-"Client default behaviour)."
-msgstr ""
-"Bidali mezua Ctrl+Enter -rekin eta Enter-ekin lerro berria egin. (Mirabilis "
-"ICQ Client default behaviour)."
+msgid "Send message on Ctrl+Enter and with Enter make new line (Mirabilis ICQ Client default behaviour)."
+msgstr "Bidali mezua Ctrl+Enter -rekin eta Enter-ekin lerro berria egin. (Mirabilis ICQ Client default behaviour)."
#: ../src/common/config.py:136
msgid "How many lines to store for Ctrl+KeyUP."
@@ -4826,50 +4650,32 @@ msgstr "How many lines to store for Ctrl+KeyUP."
#: ../src/common/config.py:139
#, python-format
-msgid ""
-"Either custom url with %s in it where %s is the word/phrase or 'WIKTIONARY' "
-"which means use wiktionary."
-msgstr ""
-"Either custom url with %s in it where %s is the word/phrase or 'WIKTIONARY' "
-"which means use wiktionary."
+msgid "Either custom url with %s in it where %s is the word/phrase or 'WIKTIONARY' which means use wiktionary."
+msgstr "Either custom url with %s in it where %s is the word/phrase or 'WIKTIONARY' which means use wiktionary."
#: ../src/common/config.py:142
msgid "If checked, Gajim can be controlled remotely using gajim-remote."
msgstr "Hautatua badago, Gajim gajim-remote erabiliz kontrolatu daiteke."
#: ../src/common/config.py:145
-msgid ""
-"When not printing time for every message (print_time==sometimes), print it "
-"every x minutes"
-msgstr ""
+msgid "When not printing time for every message (print_time==sometimes), print it every x minutes"
+msgstr "Ez denean ordua mezu bakoitzeko inprimatzen (print_time==sometimes), imprimatu x minuturo"
#: ../src/common/config.py:146
msgid "Ask before closing a group chat tab/window."
msgstr "Galdetu leiho bat itxi baino lehen."
#: ../src/common/config.py:147
-msgid ""
-"Always ask before closing group chat tab/window in this space separated list "
-"of room jids."
-msgstr ""
-"Always ask before closing group chat tab/window in this space separated list "
-"of room jids."
+msgid "Always ask before closing group chat tab/window in this space separated list of room jids."
+msgstr "Always ask before closing group chat tab/window in this space separated list of room jids."
#: ../src/common/config.py:148
-msgid ""
-"Never ask before closing group chat tab/window in this space separated list "
-"of room jids."
-msgstr ""
-"Never ask before closing group chat tab/window in this space separated list "
-"of room jids."
+msgid "Never ask before closing group chat tab/window in this space separated list of room jids."
+msgstr "Never ask before closing group chat tab/window in this space separated list of room jids."
#: ../src/common/config.py:151
-msgid ""
-"Overrides the host we send for File Transfer in case of address translation/"
-"port forwarding."
-msgstr ""
-"Overrides the host we send for File Transfer in case of address translation/"
-"port forwarding."
+msgid "Overrides the host we send for File Transfer in case of address translation/port forwarding."
+msgstr "Overrides the host we send for File Transfer in case of address translation/port forwarding."
#: ../src/common/config.py:153
msgid "IEC standard says KiB = 1024 bytes, KB = 1000 bytes."
@@ -4880,97 +4686,56 @@ msgid "Show tab when only one conversation?"
msgstr "Erakutsi tab-a bakarrik elkarrizketa bat dagoenean?"
#: ../src/common/config.py:162
-#, fuzzy
msgid "Show tabbed notebook border in chat windows?"
-msgstr "Show tab border if one conversation?"
+msgstr "Show tabbed notebook border in chat windows?"
#: ../src/common/config.py:163
msgid "Show close button in tab?"
msgstr "Isteko botoila erakutsi tab-ean?"
#: ../src/common/config.py:176
-msgid ""
-"A semicolon-separated list of words that will be highlighted in multi-user "
-"chat."
-msgstr ""
-"A semicolon-separated list of words that will be highlighted in multi-user "
-"chat."
+msgid "A semicolon-separated list of words that will be highlighted in multi-user chat."
+msgstr "A semicolon-separated list of words that will be highlighted in multi-user chat."
#: ../src/common/config.py:177
-msgid ""
-"If True, quits Gajim when X button of Window Manager is clicked. This "
-"setting is taken into account only if trayicon is used."
-msgstr ""
-"If True, quits Gajim when X button of Window Manager is clicked. This "
-"setting is taken into account only if trayicon is used."
+msgid "If True, quits Gajim when X button of Window Manager is clicked. This setting is taken into account only if trayicon is used."
+msgstr "If True, quits Gajim when X button of Window Manager is clicked. This setting is taken into account only if trayicon is used."
#: ../src/common/config.py:178
msgid "If True, Gajim registers for xmpp:// on each startup."
msgstr "Egia bada, Gajim-ek erregistratuko du xmpp:/ abiaraztean."
#: ../src/common/config.py:179
-msgid ""
-"If True, Gajim will display an icon on each tab containing unread messages. "
-"Depending on the theme, this icon may be animated."
-msgstr ""
-"Egia bada, Gajim-ek ikono bat azalaraziko du leiho horretan irakurri gabeko "
-"mezuak adieraziz. Gaiaren arabera ikonoa animatua izan daiteke."
+msgid "If True, Gajim will display an icon on each tab containing unread messages. Depending on the theme, this icon may be animated."
+msgstr "Egia bada, Gajim-ek ikono bat azalaraziko du leiho horretan irakurri gabeko mezuak adieraziz. Gaiaren arabera ikonoa animatua izan daiteke."
#: ../src/common/config.py:180
-msgid ""
-"If True, Gajim will display the status message, if not empty, for every "
-"contact under the contact name in roster window"
-msgstr ""
-"Egia bada, Gajim-ek egoera mezua azalaraziko du, hutsik ez badago, zerrendan "
-"kontaktuaren izenaren azpian azalduko dira."
+msgid "If True, Gajim will display the status message, if not empty, for every contact under the contact name in roster window"
+msgstr "Egia bada, Gajim-ek egoera mezua azalaraziko du, hutsik ez badago, zerrendan kontaktuaren izenaren azpian azalduko dira."
#: ../src/common/config.py:182
-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."
-msgstr ""
-"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."
+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."
+msgstr "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."
#: ../src/common/config.py:183
-#, fuzzy
-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."
-msgstr ""
-"Gezurra bada, ez duzu egoera lerroa ikusiko kontaktu batek bere egoera "
-"aldaketa egiten duenean edota bere egoera mezua."
+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."
+msgstr "Gezurra bada, ez da egoera lerroa inprimatuko kontaktu batek bere egoera aldaketa egiten duenean edo/eta bere egoera mezua."
#: ../src/common/config.py:184
-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 "
-"status and/or his or her status message. If \"all\" Gajim will print all "
-"status messages. If \"in_and_out\", gajim will only print FOO enters/leaves "
-"room"
-msgstr ""
+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 status and/or his or her status message. If \"all\" Gajim will print all status messages. If \"in_and_out\", gajim will only print FOO enters/leaves room"
+msgstr "izan daiteke \"none\", \"all\" edo \"in_and_out\". If \"none\", Gajim-ek ez du inprimatuko egoera lerroa txat talde batean partaide batek bere egoera edo egoera mezua aldatzean. \"all\" bada Gajim-ek egoera guztiak inprimatuko ditu. \"in_and_out\" bada, Gajim-ek sarrera/irteerak inprimatuko ditu bakarrik"
#: ../src/common/config.py:187
msgid "Don't show avatar for the transport itself."
-msgstr ""
+msgstr "Ez erakutsarazi transporteen ikurrak."
#: ../src/common/config.py:189
-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 "
-"pending events."
-msgstr ""
-"Hautatu badago eta GTK+ eta PyGTK bertsioak gutxienez 2.8 bertsiokoak "
-"badira, make the window flash (the default behaviour in most Window "
-"Managers) when holding pending events."
+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 pending events."
+msgstr "Hautatu badago eta GTK+ eta PyGTK bertsioak gutxienez 2.8 bertsiokoak badira, make the window flash (the default behaviour in most Window Managers) when holding pending events."
#: ../src/common/config.py:191
-msgid ""
-"Jabberd1.4 does not like sha info when one join a password protected room. "
-"Turn this option to False to stop sending sha info in groupchat presences"
-msgstr ""
-"Jabberd1.4 does not like sha info when one join a password protected room. "
-"Turn this option to False to stop sending sha info in groupchat presences"
+msgid "Jabberd1.4 does not like sha info when one join a password protected room. Turn this option to False to stop sending sha info in groupchat presences"
+msgstr "Jabberd1.4 does not like sha info when one join a password protected room. Turn this option to False to stop sending sha info in groupchat presences"
#. always, never, peracct, pertype should not be translated
#: ../src/common/config.py:194
@@ -4979,20 +4744,17 @@ msgid ""
"'always' - All messages are sent to a single window.\n"
"'never' - All messages get their own window.\n"
"'peracct' - Messages for each account are sent to a specific window.\n"
-"'pertype' - Each message type (e.g., chats vs. groupchats) are sent to a "
-"specific window. Note, changing this option requires restarting Gajim before "
-"the changes will take effect"
+"'pertype' - Each message type (e.g., chats vs. groupchats) are sent to a specific window. Note, changing this option requires restarting Gajim before the changes will take effect"
msgstr ""
"Kontrolatu leihoa mezu berri bat dagoenean.\n"
"'always' - Leiho bakarrean jarriko dira mezu guztiak.\n"
"'never' - Mezu bakoitzak bere leihoa izango du.\n"
"'peracct' - Kontaktu baten mezuak leiho berera bidaliko dira.\n"
-"'pertype' - Mezuko gaiak(txat edo txat taldekoena adibidez) leiho konkretu "
-"batera bidaliko dira. Kontuz, funtziona dezan Gajim berriarazi behar da"
+"'pertype' - Mezuko gaiak(txat edo txat taldekoena adibidez) leiho konkretu batera bidaliko dira. Kontuz, funtziona dezan Gajim berriarazi behar da"
#: ../src/common/config.py:195
msgid "If False, you will no longer see the avatar in the chat window"
-msgstr "Ez badago hautatuta, txat leihoan ez duzu abatererik ikusiko "
+msgstr "Gezurra bada, txat leihoan ez duzu abatererik ikusiko "
#: ../src/common/config.py:196
msgid "If True, pressing the escape key closes a tab/window"
@@ -5020,15 +4782,15 @@ msgstr "Ezkutatu gelako jendearen zerrenda txat taldeko leihoan"
#: ../src/common/config.py:202
msgid "Merge consecutive nickname in chat window"
-msgstr ""
+msgstr "Elkartu hurren hurreneko izengoitia elkarrizketa leihoan"
#: ../src/common/config.py:203
msgid "Indentation when using merge consecutive nickame"
-msgstr ""
+msgstr "Indentation when using merge consecutive nickame"
#: ../src/common/config.py:204
msgid "List of colors that will be used to color nicknames in groupchats"
-msgstr ""
+msgstr "Txat taldeko izengoitietan erabiliko diren koloreen zerrenda"
#. yes, no, ask
#: ../src/common/config.py:237
@@ -5036,12 +4798,8 @@ msgid "Jabberd2 workaround"
msgstr "Jabberd2 workaround"
#: ../src/common/config.py:241
-msgid ""
-"If checked, Gajim will use your IP and proxies defined in "
-"file_transfer_proxies option for file transfer."
-msgstr ""
-"Hautatuta badago, Gajim-ek zure IP eta definituriko proxy-ak erabiliko ditu "
-"file_transfer_proxies-en fitxero transferentziarako."
+msgid "If checked, Gajim will use your IP and proxies defined in file_transfer_proxies option for file transfer."
+msgstr "Hautatuta badago, Gajim-ek zure IP eta definituriko proxy-ak erabiliko ditu file_transfer_proxies-en fitxero transferentziarako."
#: ../src/common/config.py:297
msgid "Sleeping"
@@ -5096,26 +4854,20 @@ msgid "I'm out enjoying life"
msgstr "Kanpoan naiz bizitza disfrutatzen"
#: ../src/common/config.py:312
-msgid ""
-"Sound to play when a MUC message contains one of the words in "
-"muc_highlight_words, or when a MUC message contains your nickname."
-msgstr ""
-"Soinua bat entzun MUC-ak muc_highlight_words-eko hitz bat agertzean edota "
-"MUC-aren mezu batek zure nick-a duenean."
+msgid "Sound to play when a MUC message contains one of the words in muc_highlight_words, or when a MUC message contains your nickname."
+msgstr "Soinua bat entzun MUC-ak muc_highlight_words-eko hitz bat agertzean edota MUC-aren mezu batek zure izengoitia duenean."
#: ../src/common/config.py:313
-msgid ""
-"Sound to play when any MUC message arrives. (This setting is taken into "
-"account only if notify_on_all_muc_messages is True)"
-msgstr ""
-"Soinu bat entzun MUC mezu bat jasotzean. (Aukera hau bakarrik kontuan "
-"hartzen da kontuaren notify_on_all_muc_messages True bada)"
+msgid "Sound to play when any MUC message arrives. (This setting is taken into account only if notify_on_all_muc_messages is True)"
+msgstr "Soinu bat entzun MUC mezu bat jasotzean. (Aukera hau bakarrik kontuan hartzen da kontuaren notify_on_all_muc_messages True bada)"
-#: ../src/common/config.py:321 ../src/common/optparser.py:185
+#: ../src/common/config.py:321
+#: ../src/common/optparser.py:185
msgid "green"
msgstr "berdea"
-#: ../src/common/config.py:325 ../src/common/optparser.py:171
+#: ../src/common/config.py:325
+#: ../src/common/optparser.py:171
msgid "grocery"
msgstr "grocery"
@@ -5134,10 +4886,10 @@ msgstr "\"%s\" kontuarekin konexioa galdu da"
#: ../src/common/connection.py:173
msgid "To continue sending and receiving messages, you will need to reconnect."
-msgstr ""
-"Mezuak jasotzen eta bidaltzen jarraitzeko berriro konektatu beharko zara."
+msgstr "Mezuak jasotzen eta bidaltzen jarraitzeko berriro konektatu beharko zara."
-#: ../src/common/connection.py:185 ../src/common/connection.py:211
+#: ../src/common/connection.py:185
+#: ../src/common/connection.py:211
#, python-format
msgid "Transport %s answered wrongly to register request."
msgstr "%s transporteak harpidetza baimenari errore batez erantzun dio."
@@ -5147,7 +4899,8 @@ msgstr "%s transporteak harpidetza baimenari errore batez erantzun dio."
msgid "Invalid answer"
msgstr "Erantzun baliogabea"
-#: ../src/common/connection.py:397 ../src/common/connection.py:433
+#: ../src/common/connection.py:397
+#: ../src/common/connection.py:433
#: ../src/common/connection.py:857
#, python-format
msgid "Could not connect to \"%s\""
@@ -5210,7 +4963,8 @@ msgstr ""
"Gaia: %s\n"
"%s"
-#: ../src/common/connection.py:795 ../src/common/connection_handlers.py:1511
+#: ../src/common/connection.py:795
+#: ../src/common/connection_handlers.py:1511
msgid "I would like to add you to my roster."
msgstr "Nire zerrendara gehitu nahi zaitut."
@@ -5254,7 +5008,7 @@ msgstr "Gela sortzea mugatua dago."
#: ../src/common/connection_handlers.py:1463
msgid "Your registered nickname must be used."
-msgstr "Erregistratutako nick-a erabilia izan behar da."
+msgstr "Erregistratutako izengoitia erabilia izan behar da."
#: ../src/common/connection_handlers.py:1466
msgid "You are not in the members list."
@@ -5265,8 +5019,8 @@ msgid ""
"Your desired nickname is in use or registered by another occupant.\n"
"Please specify another nickname below:"
msgstr ""
-"Zuk aukeratutako nick-a erregistratuta dago jadanik.\n"
-"Mesedez ezarri beste nick bat:"
+"Zuk aukeratutako izengoitia erregistratuta dago jadanik.\n"
+"Mesedez ezarri beste izengoiti bat:"
#. BE CAREFUL: no con.updateRosterItem() in a callback
#: ../src/common/connection_handlers.py:1519
@@ -5286,12 +5040,8 @@ msgstr "%s -ren harpidetzatik kenduta gaude"
#: ../src/common/connection_handlers.py:1680
#, 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 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"
+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 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"
#: ../src/common/helpers.py:100
msgid "Invalid character in username."
@@ -5498,476 +5248,8 @@ msgstr "errorea: ezin da %s ireki irakurtzeko"
msgid "gtk+"
msgstr "gtk+"
-#: ../src/common/optparser.py:180 ../src/common/optparser.py:181
+#: ../src/common/optparser.py:180
+#: ../src/common/optparser.py:181
msgid "cyan"
msgstr "cyan"
-#~ msgid "Automatically authorize contact"
-#~ msgstr "Automatikoki baimendutako kontaktua"
-
-#~ msgid "Send File"
-#~ msgstr "Bidali Fitxeroa"
-
-#~ msgid "Underline"
-#~ msgstr "Azpimarratu"
-
-#~ msgid "Would you like to overwrite it?"
-#~ msgstr "Nahi al duzu berridatzi?"
-
-#~ msgid "_Join New Room..."
-#~ msgstr "Gela Berrian _Sartu..."
-
-#~ msgid "Usage: /%s, sets the groupchat window to compact mode."
-#~ msgstr "Erabilera: /%s, talde txat-eko leihoa compact moduan jarri."
-
-#~ msgid "<b>Please modify your special notification below</b>"
-#~ msgstr "<b>Mesedez eraldatu jakinarazketa bereziaren aukerak hemen:</b>"
-
-#~ msgid "Delete Message of the Day"
-#~ msgstr "Eguneko Mezua Ezabatu"
-
-#~ msgid "I want a notification popup:"
-#~ msgstr "Jakinarazketa popup nahi dut:"
-
-#~ msgid "I want to listen to:"
-#~ msgstr "Honi entzun nahi diot:"
-
-#~ msgid "Send _New Message..."
-#~ msgstr "Mezu _Berri bat Bidali ..."
-
-#~ msgid "Set Message of the Day"
-#~ msgstr "Ezarri Eguneko Mezua"
-
-#~ msgid "Update Message of the Day"
-#~ msgstr "Eguneko Mezua Gaurkotu"
-
-#~ msgid "_XML Console..."
-#~ msgstr "_XML Konsola..."
-
-#~ msgid "Choose Avatar"
-#~ msgstr "Aukeratu Abatereak"
-
-#~ msgid "Use compact view when you open a chat window"
-#~ msgstr "Erabili modu konpaktua txat leiho bat irikitzean"
-
-#~ msgid "Use compact view when you open a group chat window"
-#~ msgstr "Erabili bista konpaktua txat talde leiho bat irikitzean."
-
-#~ msgid "plain"
-#~ msgstr "plain"
-
-#~ msgid "Send"
-#~ msgstr "Bidali"
-
-#~ msgid "%(nickname)s in room %(room_name)s has sent you a new message."
-#~ msgstr "%(room_name)s-eko %(nickname)s -ek mezu berri bat bidali dizu."
-
-#~ msgid "%s has sent you a new message."
-#~ msgstr "%s mezu berri bat bidali dizu."
-
-#~ msgid "GUI Migration failed"
-#~ msgstr "GUI Migrazioak Huts egin du"
-
-#~ msgid ""
-#~ "Logs migration through graphical interface failed. The migration process "
-#~ "will start in the background. Please wait a few minutes for Gajim to "
-#~ "start."
-#~ msgstr ""
-#~ "Log eraldaketak huts egin du du interfaz grafikoaren bidez. Eraldaketa "
-#~ "prozesua beste prozesuen azpian hasiko da. Mesedez itxoin minutu batzuk "
-#~ "Gajim abiarazteko."
-
-#~ msgid "Logs have been successfully migrated to the database."
-#~ msgstr "Log-ak egoki eraldatu dira datu basera."
-
-#~ msgid "If checked, Gajim will also have a trayicon"
-#~ msgstr "If checked, Gajim will also have a trayicon"
-
-#~ msgid "_Online Users"
-#~ msgstr "_Konektatutako Jendea"
-
-#~ msgid "Start Chat with Contact"
-#~ msgstr "Elkarrizketa Hasi Kontaktuarekin"
-
-#~ msgid "All contacts in this group are offline or have errors"
-#~ msgstr "Talde honetako guztiak deskonektatuta daude edo erroreak dituzte"
-
-#~ msgid "Size: "
-#~ msgstr "Tamaina: "
-
-#~ msgid "Session bus is not available"
-#~ msgstr "Bus sesioa ez da eskuragarri"
-
-#~ msgid "Sound"
-#~ msgstr "Soinua"
-
-#~ msgid "Text"
-#~ msgstr "Testua"
-
-#~ msgid "Image"
-#~ msgstr "Irudia"
-
-#~ msgid "Read AUTHORS file for full list including past developers"
-#~ msgstr ""
-#~ "Irakurri AUTHORS fitxategia zerrenda osoarako,\n"
-#~ "aurrez egondako diseinatzaileak sartuta ere"
-
-#~ msgid "From %s"
-#~ msgstr "%s -etik"
-
-#~ msgid "To %s"
-#~ msgstr "%s -entzat"
-
-#~ msgid "You have been invited to the %(room_jid)s room by %(contact_jid)s"
-#~ msgstr "%(room_jid)s gelara gonbidatua izan zara %(contact_jid)s -rengatik"
-
-#~ msgid "Browsing %s"
-#~ msgstr "Begiratzen %s"
-
-#~ msgid ""
-#~ "Animated\n"
-#~ "Static"
-#~ msgstr ""
-#~ "Animatua\n"
-#~ "Estatikoa"
-
-#~ msgid "Manage Emoticons"
-#~ msgstr "Emoticonoak Moldatu"
-
-#~ msgid "Or choose a preset message:"
-#~ msgstr "Edo ezarritako egoera mezu bat aukeratu:"
-
-#~ msgid "Use _emoticons"
-#~ msgstr "Emoticon-ak erabili"
-
-#~ msgid "_Set Image..."
-#~ msgstr "_Ezarri Irudia"
-
-#~ msgid "Switch to %s"
-#~ msgstr "Aldatu %s -ra"
-
-#~ msgid "using account "
-#~ msgstr "kontua erabiliz"
-
-#~ msgid "The filesize of image \"%s\" is too large"
-#~ msgstr "\"%s\" irudiaren tamaina handiegia da"
-
-#~ msgid "The file must not be more than 32 kilobytes."
-#~ msgstr "Fitxategiak ez du 32 kilobytes baino gehiago izan behar."
-
-#~ msgid "A list of rooms that do not require confirmation before closing"
-#~ msgstr "Itxi baino lehen baieztapenik behar ez duten txat gelen zerrenda"
-
-#~ msgid "Timeout"
-#~ msgstr "Denbora bukatua"
-
-#~ msgid "A protocol error has occured:"
-#~ msgstr "Protokolo errore bat gertatu da:"
-
-#~ msgid "account: "
-#~ msgstr "kontua: "
-
-#~ msgid "Are you sure you want to leave rooms \"%s\"?"
-#~ msgstr "Ziur al zaude \"%s\" geletatik atera nahi duzula?"
-
-#~ msgid "If you close this window, you will be disconnected from these rooms."
-#~ msgstr "Leiho hau isten baduzu, gela honetatik deskonektatuko zara."
-
-#~ msgid "Activate/Disable notification for when a file transfer is complete"
-#~ msgstr "Aktibatu/Desaktibatu fitxategi bat tranferitzen deneko jakinaraztea"
-
-#~ msgid "Removing selected file transfer"
-#~ msgstr "Ezabatu fitxero transferentzia hautatua"
-
-#~ msgid "Stoping selected file transfer"
-#~ msgstr "Gelditu hautatutako fitxero transferentzia"
-
-#~ msgid ""
-#~ "If you close this tab and you have history disabled, the message will be "
-#~ "lost."
-#~ msgstr ""
-#~ "Leiho hau isten baduzu eta historiala ez baduzu aktibatua, mezua galdu "
-#~ "egingo da."
-
-#~ msgid "Cannot remove last group"
-#~ msgstr "Ezin izan da ezabatu azken taldea"
-
-#~ msgid "At least one contact group must be present."
-#~ msgstr "Gutxienez kontaktu talde bat egon behar da."
-
-#~ msgid ""
-#~ "pysqlite2 (aka python-pysqlite2) dependency is missing. After you install "
-#~ "pysqlite3, if you want to migrate your logs to the new database, please "
-#~ "read: http://trac.gajim.org/wiki/MigrateLogToDot9DB Exiting..."
-#~ msgstr ""
-#~ "pysqlite2 (aka python-pysqlite2) dependency is missing. After you install "
-#~ "pysqlite3, if you want to migrate your logs to the new database, please "
-#~ "read: http://trac.gajim.org/wiki/MigrateLogToDot9DB Exiting..."
-
-#~ msgid "Image is too big"
-#~ msgstr "Irudia handiegia da"
-
-#~ msgid ""
-#~ "Image for emoticon has to be less than or equal to 24 pixels in width and "
-#~ "24 in height."
-#~ msgstr ""
-#~ "24x24 tamainako berdina edo gutxiagoko emoticon-ak jarri daitezke "
-#~ "bakarrik."
-
-#~ msgid "<b>Changes in latest version</b>"
-#~ msgstr "<b>Aldaketak azken bertsioan</b>"
-
-#~ msgid "Check for new _version on Gajim startup"
-#~ msgstr "Begiratu bertsio b_erria Gajim abiaraztean"
-
-#~ msgid "Log history"
-#~ msgstr "Historialaren log-a"
-
-#~ msgid "New version of Gajim available"
-#~ msgstr "Gajim-en bertsio berri bat eskuragarri"
-
-#~ msgid "Open Download Page"
-#~ msgstr "Deskarga Orria Ireki"
-
-#~ msgid "(%s/s)"
-#~ msgstr "(%s/s)"
-
-#~ msgid ""
-#~ "It is the first time you run Gajim since the way logs are stored has "
-#~ "changed. Gajim can migrate your logs at this state. Migrate?"
-#~ msgstr ""
-#~ "Hau da Gajim abiarazten duzun lehen aldia log-en artxibatzeko tokia "
-#~ "aldatu zenetik. Gajim-ek zure log-ak eralda ditzake. Eraldatu?"
-
-#~ msgid "Service not available"
-#~ msgstr "Zerbitzua erabilezina"
-
-#~ msgid "Session bus is not available."
-#~ msgstr "Bus sesioa ez dago erabilgarri."
-
-#~ msgid "with account %s"
-#~ msgstr "%s kontuarekin"
-
-#~ msgid "with account "
-#~ msgstr "kontuarekin"
-
-#~ msgid "Chat with"
-#~ msgstr "Txateatu honekin"
-
-#~ msgid "Send New Message"
-#~ msgstr "Mezu Berri bat Bidali"
-
-#~ msgid "as %s"
-#~ msgstr "%s kontua bezala"
-
-#~ msgid "as "
-#~ msgstr "bezala "
-
-#~ msgid "Send _New Message"
-#~ msgstr "Mezu _Berri bat Bidali"
-
-#~ msgid "Re_quest Authorization from"
-#~ msgstr "Autor_izazio baimena kontu honetatik"
-
-#~ msgid "Send Authorization to"
-#~ msgstr "Bidali Autorizazioa honi"
-
-#~ msgid "<b>Log</b>"
-#~ msgstr "<b>Log-a</b>"
-
-#~ msgid "Log presences in _contact's log file"
-#~ msgstr "Presentzien historiala _kontaktuen log-an"
-
-#~ msgid "Log presences in an _external file"
-#~ msgstr "Presentzien log-a _kanpo fitxero batean"
-
-#~ msgid ""
-#~ "You can set advanced account options by pressing Advanced button,or later "
-#~ "by clicking in Accounts menuitem under Edit menu from the main window."
-#~ msgstr ""
-#~ "Kontuko aukera aurreratuak ezarri ditzakezu Aurreratu botoila sakatuz."
-
-#~ msgid ""
-#~ "Set value of 'key' to 'value'. If there is no such key, new item in the "
-#~ "preferences is inserted."
-#~ msgstr ""
-#~ "Set value of 'key' to 'value'. If there is no such key, new item in the "
-#~ "preferences is inserted."
-
-#~ msgid ""
-#~ "When a new message is received which is not from a contact already in a "
-#~ "chat window, the three following actions may happen in order for you to "
-#~ "be informed about it"
-#~ msgstr ""
-#~ "Mezu bat jasotzean eta ez dagoenean jadanik txat leihoan, jasotako azken "
-#~ "hiru esaldiak azalduko zaizkizu informatu zaitezen."
-
-#~ msgid "_Earliest"
-#~ msgstr "_Lehena"
-
-#~ msgid "_Latest"
-#~ msgstr "_Azkena"
-
-#~ msgid "_Previous"
-#~ msgstr "_Aurrekoa"
-
-#~ msgid "Filter query too short"
-#~ msgstr "Filter query too short"
-
-#~ msgid "Query must be at least 3 characters long."
-#~ msgstr "Galdera gutxienez 3 karakterekoa izan behar du."
-
-#~ msgid "%s is now %s: %s"
-#~ msgstr "%s orain %s da: %s"
-
-#~ msgid "Allow controlling Gajim via D-Bus service."
-#~ msgstr "Baimendua Gajim erabiltzea D-Bus zerbitzuaren bidez."
-
-#~ msgid ""
-#~ "\n"
-#~ "\n"
-#~ "\n"
-#~ "== Original Message ==\n"
-#~ "%s"
-#~ msgstr ""
-#~ "\n"
-#~ "\n"
-#~ "\n"
-#~ "==Mezua originala==\n"
-#~ "%s"
-
-#~ msgid ""
-#~ "Your new account has been created successfully.\n"
-#~ "You can set advanced account options by pressing Advanced button,\n"
-#~ "or later by clicking in Accounts menuitem under Edit menu from the main "
-#~ "window."
-#~ msgstr ""
-#~ "Kontua ondo erregistratu da.\n"
-#~ "Aukera zehatzagoak eraldatu ditzakezu \"Editatu->kontua\" leihoan."
-
-#~ msgid "Error:"
-#~ msgstr "Errorea:"
-
-#~ msgid "error appeared while processing xmpp:"
-#~ msgstr "errorea atera da xmpp prozesatzen ari zen bitartean"
-
-#~ msgid "Service"
-#~ msgstr "Zerbitzua"
-
-#~ msgid "Node"
-#~ msgstr "Nodoa"
-
-#~ msgid ""
-#~ "Your new account has been created and added to your gajim configuration.\n"
-#~ "You can set advanced account options using \"Edit->Accounts\" in the main "
-#~ "window menu."
-#~ msgstr ""
-#~ "Zure kontu berria sortu da eta gajim-eko konfigurazioan sartu da.\n"
-#~ "Aukera zehatzagoak \"Editatu->kontua\" leihoan."
-
-#~ msgid "You need to enter a valid server address to add an account."
-#~ msgstr "Zerbitzari baliagarri bat sartu behar duzu kontua sortzeko."
-
-#~ msgid "Contact names must be of the form \"user@servername\"."
-#~ msgstr "Kontaktuaren izena horrela izan behar da \"izena@zerbitzaria\"."
-
-#~ msgid "Gajim - a GTK+ Jabber client"
-#~ msgstr "Gajim - a GTK+ Jabber bezeroa"
-
-#~ msgid "Invalid contact ID"
-#~ msgstr "ID kontaktu okerra"
-
-#~ msgid "Contact ID must be of the form \"username@servername\"."
-#~ msgstr "Kontaktuaren ID-a horrela jarri behar da \"izena@zerbitzria\"."
-
-#~ msgid "Account registration successful"
-#~ msgstr "Kontuaren erregistroa eginda"
-
-#~ msgid "The account \"%s\" has been registered with the Jabber server."
-#~ msgstr "\"%s\" kontua jabber zerbitzariarekin sortu da"
-
-#~ msgid "theme_name"
-#~ msgstr "gaiaren _izena"
-
-#~ msgid "You just received a new message in room \"%s\""
-#~ msgstr "Mezu berri bat jaso duzu \"%s\" gelan"
-
-#~ msgid ""
-#~ "If you close this window and you have history disabled, this message will "
-#~ "be lost."
-#~ msgstr ""
-#~ "Leiho hau isten baduzu eta historiala ez baduzu aktibatuta, mezu hau "
-#~ "galdu egingo da."
-
-#~ msgid "New _Room"
-#~ msgstr "Gela B_erria"
-
-#~ msgid "Edit"
-#~ msgstr "Editatu"
-
-#~ msgid "Always use compact _view"
-#~ msgstr "Bista _trinkoa erabili beti"
-
-#~ msgid "Banner:"
-#~ msgstr "Banner:"
-
-#~ msgid ""
-#~ "Cancels the selected file transfer. If there is an incomplete file, kept "
-#~ "in the file system it will be removed. This operation is not reversable"
-#~ msgstr ""
-#~ "Hautatutako fitxero transferentzia kantzelatu. Osorik ez dagoen fitxero "
-#~ "bat badago, Fitxeroa sistematik ezabatuko da. Aukera hau ez da "
-#~ "itzulgarria."
-
-#~ msgid "Chan_ge"
-#~ msgstr "Al_datu"
-
-#~ msgid "Check if you want to register for a new jabber account"
-#~ msgstr "Hautatu hau jabber kontu berri bat erregistratzeko"
-
-#~ msgid "Click to get contact's extended information"
-#~ msgstr "Sakatu kontaktuaren informazio zabalagoa lortzeko"
-
-#~ msgid "Enter your message:"
-#~ msgstr "Sartu zure mezua:"
-
-#~ msgid ""
-#~ "If checked, all chat and group chat windows will have the information "
-#~ "area in the top and the buttons area in the bottom hidden. You can quick "
-#~ "toggle compact view with Alt+C. NOTE: The last state you leave a window/"
-#~ "tab is not a permanent one"
-#~ msgstr ""
-#~ "If checked, all chat and group chat windows will have the information "
-#~ "area in the top and the buttons area in the bottom hidden. You can quick "
-#~ "toggle compact view with Alt+C. NOTE: The last state you leave a window/"
-#~ "tab is not a permanent one"
-
-#~ msgid "Join _Group Chat..."
-#~ msgstr "Txat taldean _Sartu..."
-
-#~ msgid "Please fill in the data for your existing account"
-#~ msgstr "Mesedez bete dagoeneko daukazun kontuaren informazioa"
-
-#~ msgid "Show roster window on Gajim startup"
-#~ msgstr "Ikusi zerrenda leihoa Gajim abiaraztean"
-
-#~ msgid "_Compact View"
-#~ msgstr "_Bista Trinkoa"
-
-#~ msgid "_Join Group Chat"
-#~ msgstr "_Sartu Txat Talde Batean"
-
-#~ msgid "_Refresh"
-#~ msgstr "_Garbitu"
-
-#~ msgid "_Register new account"
-#~ msgstr "_Erregistratu kontu berri bat"
-
-#~ msgid "_Service Discovery"
-#~ msgstr "_Zerbitzaria Aurkitua"
-
-#~ msgid "_Service Discovery..."
-#~ msgstr "_Zerbiztaria Aurkitua..."
-
-#~ msgid "Unknown type %s "
-#~ msgstr "Mota aurkitugabea %s "
diff --git a/po/hr.po b/po/hr.po
new file mode 100644
index 000000000..64bd5fc68
--- /dev/null
+++ b/po/hr.po
@@ -0,0 +1,5267 @@
+# Croatian translations for gajim.
+# Copyright (C) 2006 RiLinux
+# This file is distributed under the same license as the gajim package.
+# Adrian C. <anrxc@sysphere.org>, 2006.
+# Deni B. <baccic@gmail.com>, 2006.
+# Armando V. <synan@rilinux.hr> 2006.
+# Vedran M. <rivanvx@gmail.com> 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gajim 0.10.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-07-04 00:03+0200\n"
+"PO-Revision-Date: 2006-08-12 21:05+0100\n"
+"Last-Translator: Adrian C. <anrxc@sysphere.org>\n"
+"Language-Team: Croatian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n==1?0:1);\n"
+
+#: ../gajim.desktop.in.h:1
+msgid "A GTK+ Jabber client"
+msgstr "GTK+ Jabber klijent"
+
+#: ../gajim.desktop.in.h:2
+msgid "Gajim Instant Messenger"
+msgstr "Gajim Instant Messenger"
+
+#: ../gajim.desktop.in.h:3
+msgid "Jabber IM Client"
+msgstr "Jabber IM Klijent"
+
+#: ../data/glade/account_context_menu.glade.h:1
+msgid "Send Single _Message..."
+msgstr "Pošalji Jednu _Poruku..."
+
+#: ../data/glade/account_context_menu.glade.h:2
+msgid "_Add Contact..."
+msgstr "_Dodavanje Kontakta..."
+
+#: ../data/glade/account_context_menu.glade.h:3
+msgid "_Discover Services..."
+msgstr "_Otkrivanje Usluga..."
+
+#: ../data/glade/account_context_menu.glade.h:4
+#: ../data/glade/roster_window.glade.h:15
+#: ../data/glade/systray_context_menu.glade.h:5
+msgid "_Group Chat"
+msgstr "_Grupni Razgovor"
+
+#: ../data/glade/account_context_menu.glade.h:5
+msgid "_Modify Account..."
+msgstr "_Izmjeni Račun..."
+
+#: ../data/glade/account_context_menu.glade.h:6
+msgid "_Status"
+msgstr "_Status"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:1
+msgid ""
+"<b>Account is being created</b>\n"
+"\n"
+"Please wait..."
+msgstr ""
+"<b>Korisnički račun je u procesu stvaranja</b>\n"
+"\n"
+"Molimo pričekajte..."
+
+#: ../data/glade/account_creation_wizard_window.glade.h:4
+msgid "<b>Please choose one of the options below:</b>"
+msgstr "<b>Molimo odaberite jednu od opcija ispod:</b>"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:5
+msgid "<b>Please fill in the data for your new account</b>"
+msgstr "<b>Molimo popunite podatke za vaš novi korisnički račun</b>"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:6
+msgid "Click to see features (like MSN, ICQ transports) of jabber servers"
+msgstr "Kliknite da vidite mogućnosti (kao što su MSN, ICQ transporti od jabber servera"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:7
+msgid "Connect when I press Finish"
+msgstr "Spoji se kada pritisnem Završi"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:8
+msgid "Gajim: Account Creation Wizard"
+msgstr "Gajim: Čarobnjak za Stvaranje Računa"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:9
+msgid "I already have an account I want to use"
+msgstr "Već imam račun koji želim koristiti"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:10
+msgid "I want to _register for a new account"
+msgstr "Želim se _registrirati novi račun"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:11
+#: ../data/glade/account_modification_window.glade.h:18
+msgid "If checked, Gajim will remember the password for this account"
+msgstr "Ako je označeno, Gajim će pamtiti lozinku za ovaj račun"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:12
+#: ../data/glade/manage_proxies_window.glade.h:6
+msgid "Pass_word:"
+msgstr "Lo_zinka:"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:13
+#: ../data/glade/account_modification_window.glade.h:37
+msgid "Save pass_word"
+msgstr "Snimi lo_zinku"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:14
+msgid "Servers Features"
+msgstr "Mogućnosti Poslužitelja"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:15
+msgid "Set my profile when I connect"
+msgstr "Postavi moj profil pri spajanju"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:16
+msgid ""
+"You need to have an account in order to connect\n"
+"to the Jabber network."
+msgstr ""
+"Morate imati račun kako bi se mogli spojiti\n"
+"na Jabber mrežu."
+
+#: ../data/glade/account_creation_wizard_window.glade.h:18
+msgid "Your JID:"
+msgstr "Vaš JID:"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:19
+#: ../data/glade/roster_window.glade.h:10
+msgid "_Advanced"
+msgstr "_Napredno"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:20
+msgid "_Finish"
+msgstr "_Završi"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:21
+#: ../data/glade/manage_proxies_window.glade.h:9
+msgid "_Host:"
+msgstr "_Poslužitelj:"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:22
+#: ../data/glade/account_modification_window.glade.h:45
+msgid "_Password:"
+msgstr "_Lozinka:"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:23
+#: ../data/glade/manage_proxies_window.glade.h:10
+msgid "_Port:"
+msgstr "_Port:"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:24
+msgid "_Retype Password:"
+msgstr "_Ponovo utipkajte Password:"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:25
+msgid "_Server:"
+msgstr "_Poslužitelj:"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:26
+msgid "_Use proxy"
+msgstr "_Koristi proxy"
+
+#: ../data/glade/account_creation_wizard_window.glade.h:27
+#: ../data/glade/manage_proxies_window.glade.h:11
+msgid "_Username:"
+msgstr "_Korisničko ime:"
+
+#: ../data/glade/account_modification_window.glade.h:1
+#: ../data/glade/preferences_window.glade.h:8
+msgid "<b>Miscellaneous</b>"
+msgstr "<b>Ostalo</b>"
+
+#: ../data/glade/account_modification_window.glade.h:2
+msgid "<b>OpenPGP</b>"
+msgstr "<b>OpenPGP</b>"
+
+#: ../data/glade/account_modification_window.glade.h:3
+msgid "<b>Personal Information</b>"
+msgstr "<b>Osobne informacije</b>"
+
+#: ../data/glade/account_modification_window.glade.h:4
+msgid "Account"
+msgstr "Korisnički račun"
+
+#: ../data/glade/account_modification_window.glade.h:5
+msgid "Account Modification"
+msgstr "Modifikacija Korisničkog Računa"
+
+#: ../data/glade/account_modification_window.glade.h:6
+msgid "Autoreconnect when connection is lost"
+msgstr "Automatsko ponovno spajanje kada je veza izgubljena"
+
+#: ../data/glade/account_modification_window.glade.h:7
+msgid "C_onnect on Gajim startup"
+msgstr "Sp_oji se prilikom pokretanja Gajima"
+
+#: ../data/glade/account_modification_window.glade.h:8
+msgid "Chan_ge Password"
+msgstr "P_romijeni Lozinku"
+
+#: ../data/glade/account_modification_window.glade.h:9
+msgid "Check this so Gajim will connect in port 5223 where legacy servers are expected to have SSL capabilities. Note that Gajim uses TLS encryption by default if broadcasted by the server, and with this option enabled TLS will be disabled"
+msgstr "Označite ovo kako bi se Gajim spajao na port 5223 gdje se od starijih poslužitelja očekuju SSL mogućnosti. Primjetite da Gajim koristi TLS enkripciju ukoliko to server podržava, te će sa ovom opcijom uključenom TLS biti onemogućen"
+
+#: ../data/glade/account_modification_window.glade.h:10
+msgid "Choose _Key..."
+msgstr "Odaberi _Ključ"
+
+#: ../data/glade/account_modification_window.glade.h:11
+msgid "Click to change account's password"
+msgstr "Kliknite za promjenu lozinke korisničkog računa"
+
+#: ../data/glade/account_modification_window.glade.h:12
+msgid "Connection"
+msgstr "Veza"
+
+#: ../data/glade/account_modification_window.glade.h:13
+msgid "Edit Personal Information..."
+msgstr "Izmjeni Osobne Informacije"
+
+#: ../data/glade/account_modification_window.glade.h:14
+#: ../data/glade/roster_window.glade.h:5
+#: ../src/notify.py:308
+#: ../src/notify.py:330
+#: ../src/notify.py:342
+#: ../src/tooltips.py:350
+msgid "Gajim"
+msgstr "Gajim"
+
+#: ../data/glade/account_modification_window.glade.h:15
+#: ../data/glade/preferences_window.glade.h:44
+#: ../data/glade/vcard_information_window.glade.h:17
+#: ../src/roster_window.py:290
+#: ../src/roster_window.py:1184
+#: ../src/roster_window.py:1405
+msgid "General"
+msgstr "Općenito"
+
+#: ../data/glade/account_modification_window.glade.h:16
+msgid "Hostname: "
+msgstr "Ime poslužitelja:"
+
+#: ../data/glade/account_modification_window.glade.h:17
+msgid "If checked, Gajim will also broadcast some more IPs except from just your IP, so file transfer has higher chances of working."
+msgstr "Ako je označeno, Gajim će odašiljati još neke IP adrese osim vaše, kako bi prijenosi datoteka imali veću šansu uspjeha."
+
+#: ../data/glade/account_modification_window.glade.h:19
+msgid "If checked, Gajim will send keep-alive packets so it prevents connection timeout which results in disconnection"
+msgstr "Ako je označeno, Gajim će slati keep-alive pakete kako bi spriječio prekid veze zbog preduge neaktivnosti"
+
+#: ../data/glade/account_modification_window.glade.h:20
+msgid "If checked, Gajim will store the password in ~/.gajim/config with 'read' permission only for you"
+msgstr "Ako je označeno, Gajim će spremiti lozinku u ~/.gajim/config sa 'čitaj' dozvolom samo za vas"
+
+#: ../data/glade/account_modification_window.glade.h:21
+msgid "If checked, Gajim, when launched, will automatically connect to jabber using this account"
+msgstr "Ako je označeno, Gajim će se pri pokretanju automatski spojiti na jabber koristeći ovaj račun"
+
+#: ../data/glade/account_modification_window.glade.h:22
+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 accordingly"
+msgstr "Ako je označeno, svaka promjena globalnog statusa (koji se mjenja padajućim izbornikom na dnu prozora kontaktne liste) promjenit će status i ovog računa"
+
+#: ../data/glade/account_modification_window.glade.h:23
+msgid "Information about you, as stored in the server"
+msgstr "Informacije o vama, kako stoji na poslužitelju"
+
+#: ../data/glade/account_modification_window.glade.h:24
+msgid "Manage..."
+msgstr "Podesi..."
+
+#: ../data/glade/account_modification_window.glade.h:25
+#: ../src/config.py:1448
+msgid "No key selected"
+msgstr "Niti jedan ključ nije odabran"
+
+#. None means no proxy profile selected
+#: ../data/glade/account_modification_window.glade.h:27
+#: ../src/config.py:1053
+#: ../src/config.py:1058
+#: ../src/config.py:1230
+#: ../src/config.py:1505
+#: ../src/config.py:1578
+#: ../src/config.py:2282
+msgid "None"
+msgstr "Ništa"
+
+#: ../data/glade/account_modification_window.glade.h:28
+msgid "Personal Information"
+msgstr "Osobne Informacije"
+
+#: ../data/glade/account_modification_window.glade.h:29
+msgid "Port: "
+msgstr "Port:"
+
+#: ../data/glade/account_modification_window.glade.h:30
+msgid "Priori_ty:"
+msgstr "Priori_tet:"
+
+#: ../data/glade/account_modification_window.glade.h:31
+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 client with the highest priority gets the events"
+msgstr "Prioritet se u Jabberu koristi kako bi se odredilo tko dobiva događaje sa jabber servera kada su spojena 2 ili više klijenta koristeći isti račun; klijent sa najvišim prioritetom dobiva te događaje"
+
+#: ../data/glade/account_modification_window.glade.h:32
+msgid "Proxy:"
+msgstr "Proxy:"
+
+#: ../data/glade/account_modification_window.glade.h:33
+msgid "Resour_ce: "
+msgstr "Resur_s"
+
+#: ../data/glade/account_modification_window.glade.h:34
+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 same server with the same account. So you might be connected in the same account with resource 'Home' and 'Work' at the same time. The resource which has the highest priority will get the events. (see below)"
+msgstr "Resurs se šalje Jabber serveru kako bi se razlikovao isti JID kod 2 ili više klijenata spojena u isto vrijeme na isti server sa istim računom. Dakle, možete biti spojeni sa resursom 'Posao' ili 'Kuća', klijent sa najvišim prioritetom dobivat će obavijesti o događajima"
+
+#: ../data/glade/account_modification_window.glade.h:35
+msgid "Save _passphrase (insecure)"
+msgstr "Snimi _lozinku (nesigurno)"
+
+#: ../data/glade/account_modification_window.glade.h:36
+msgid "Save conversation _logs for all contacts"
+msgstr "Snimi _dnevnik razgovora za sve kontakte"
+
+#: ../data/glade/account_modification_window.glade.h:38
+msgid "Send keep-alive packets"
+msgstr "Šalji keep-alive pakete"
+
+#: ../data/glade/account_modification_window.glade.h:39
+msgid "Synch_ronize account status with global status"
+msgstr "Sink_roniziraj status računa sa globalnim statusom"
+
+#: ../data/glade/account_modification_window.glade.h:40
+msgid "Use _SSL (legacy)"
+msgstr "Koristi _SSL (zastarjelo)"
+
+#: ../data/glade/account_modification_window.glade.h:41
+msgid "Use custom hostname/port"
+msgstr "Koristi vlastito ime poslužitelja/port"
+
+#: ../data/glade/account_modification_window.glade.h:42
+msgid "Use file transfer proxies"
+msgstr "Koristi proxy za prijenos datoteka"
+
+#: ../data/glade/account_modification_window.glade.h:43
+#: ../data/glade/add_new_contact_window.glade.h:6
+msgid "_Jabber ID:"
+msgstr "_Jabber ID:"
+
+#: ../data/glade/account_modification_window.glade.h:44
+msgid "_Name: "
+msgstr "_Ime:"
+
+#: ../data/glade/accounts_window.glade.h:1
+msgid "Accounts"
+msgstr "Korisnički Račun"
+
+#: ../data/glade/accounts_window.glade.h:2
+msgid "If you have 2 or more accounts and it is checked, Gajim will list all contacts as if you had one account"
+msgstr "Ako imate 2 ili više računa i ovo je označeno, Gajim će prikazivati sve kontakte kao da imate jedan račun"
+
+#: ../data/glade/accounts_window.glade.h:3
+msgid "_Merge accounts"
+msgstr "_Spoji račune"
+
+#: ../data/glade/accounts_window.glade.h:4
+msgid "_Modify"
+msgstr "_Izmjeni"
+
+#: ../data/glade/accounts_window.glade.h:5
+#: ../data/glade/remove_account_window.glade.h:4
+msgid "_Remove"
+msgstr "_Ukloni"
+
+#: ../data/glade/add_new_contact_window.glade.h:1
+msgid "A_llow this contact to view my status"
+msgstr "D_ozvoli njemu/njoj da vidi moj status"
+
+#: ../data/glade/add_new_contact_window.glade.h:2
+msgid "Add New Contact"
+msgstr "Dodaj Novi Kontakt"
+
+#: ../data/glade/add_new_contact_window.glade.h:3
+msgid "I would like to add you to my contact list."
+msgstr "Želio bih Vas dodati na moju listu kontakata."
+
+#: ../data/glade/add_new_contact_window.glade.h:4
+msgid "_Account:"
+msgstr "_Korisnički račun"
+
+#: ../data/glade/add_new_contact_window.glade.h:5
+msgid "_Group:"
+msgstr "_Grupa:"
+
+#: ../data/glade/add_new_contact_window.glade.h:7
+msgid "_Nickname:"
+msgstr "_Nadimak:"
+
+#: ../data/glade/add_new_contact_window.glade.h:8
+msgid "_Protocol:"
+msgstr "_Protokol:"
+
+#: ../data/glade/add_new_contact_window.glade.h:9
+msgid "_Subscribe"
+msgstr "_Pretplatiti se"
+
+#: ../data/glade/add_new_contact_window.glade.h:10
+msgid "_User ID:"
+msgstr "_ID Korisnika:"
+
+#: ../data/glade/advanced_configuration_window.glade.h:1
+msgid "<b>Description</b>"
+msgstr "<b>Opis</b>"
+
+#: ../data/glade/advanced_configuration_window.glade.h:2
+msgid "<b>NOTE:</b> You should restart gajim for some setting to take effect"
+msgstr "<b>NAPOMENA:</b> Trebali biste ponovno pokrenuti gajim da bi neke postavke postale aktivne"
+
+#: ../data/glade/advanced_configuration_window.glade.h:3
+msgid "Advanced Configuration Editor"
+msgstr "Editor Naprednih Postavki"
+
+#: ../data/glade/advanced_configuration_window.glade.h:4
+msgid "Filter:"
+msgstr "Filter:"
+
+#: ../data/glade/advanced_menuitem_menu.glade.h:1
+msgid "Delete MOTD"
+msgstr "Izbriši MOTD"
+
+#: ../data/glade/advanced_menuitem_menu.glade.h:2
+msgid "Deletes Message of the Day"
+msgstr "Briše Poruku Dana"
+
+#: ../data/glade/advanced_menuitem_menu.glade.h:3
+msgid "Sends a message to currently connected users to this server"
+msgstr "Šalje poruku trenutno spojenim korisnicima na ovom poslužitelju"
+
+#: ../data/glade/advanced_menuitem_menu.glade.h:4
+msgid "Set MOTD"
+msgstr "Postavi MOTD"
+
+#: ../data/glade/advanced_menuitem_menu.glade.h:5
+msgid "Sets Message of the Day"
+msgstr "Postavlja Poruku Dana (Message of the Day)"
+
+#: ../data/glade/advanced_menuitem_menu.glade.h:6
+msgid "Show _XML Console"
+msgstr "Prikaži _XML Konzolu"
+
+#: ../data/glade/advanced_menuitem_menu.glade.h:7
+msgid "Update MOTD"
+msgstr "Osvježi MOTD"
+
+#: ../data/glade/advanced_menuitem_menu.glade.h:8
+msgid "Updates Message of the Day"
+msgstr "Osvježava Poruku Dana"
+
+#: ../data/glade/advanced_menuitem_menu.glade.h:9
+msgid "_Administrator"
+msgstr "_Administrator"
+
+#: ../data/glade/advanced_menuitem_menu.glade.h:10
+msgid "_Privacy Lists"
+msgstr "Liste _Privatnosti"
+
+#: ../data/glade/advanced_menuitem_menu.glade.h:11
+msgid "_Send Server Message"
+msgstr "_Pošalji Poslužiteljsku Poruku"
+
+#: ../data/glade/advanced_menuitem_menu.glade.h:12
+msgid "_Send Single Message"
+msgstr "_Pošalji Jednu Poruku"
+
+#: ../data/glade/advanced_notifications_window.glade.h:1
+msgid " a window/tab opened with that contact "
+msgstr " otvaranje prozora/taba sa tim kontaktom "
+
+#: ../data/glade/advanced_notifications_window.glade.h:2
+msgid "<b>Actions</b>"
+msgstr "<b>Akcije</b>"
+
+#: ../data/glade/advanced_notifications_window.glade.h:3
+msgid "<b>Conditions</b>"
+msgstr "<b>Uvjeti</b>"
+
+#: ../data/glade/advanced_notifications_window.glade.h:4
+#: ../data/glade/preferences_window.glade.h:10
+msgid "<b>Sounds</b>"
+msgstr "<b>Zvukovi</b>"
+
+#: ../data/glade/advanced_notifications_window.glade.h:5
+msgid "Add"
+msgstr "Dodaj"
+
+#: ../data/glade/advanced_notifications_window.glade.h:6
+msgid "Advanced Actions"
+msgstr "Napredne Akcije"
+
+#: ../data/glade/advanced_notifications_window.glade.h:7
+msgid "Advanced Notifications Control"
+msgstr "Editor Naprednih Obavijesti"
+
+#: ../data/glade/advanced_notifications_window.glade.h:8
+msgid "All Status "
+msgstr "Svi Statusi: "
+
+#: ../data/glade/advanced_notifications_window.glade.h:9
+msgid "And I "
+msgstr "I ja "
+
+#: ../data/glade/advanced_notifications_window.glade.h:10
+msgid "Away "
+msgstr "Odsutan"
+
+#: ../data/glade/advanced_notifications_window.glade.h:11
+msgid "Busy "
+msgstr "Zaposlen"
+
+#: ../data/glade/advanced_notifications_window.glade.h:12
+msgid "Don't have "
+msgstr "Nemam "
+
+#: ../data/glade/advanced_notifications_window.glade.h:13
+msgid "Down"
+msgstr "Skidanje"
+
+#: ../data/glade/advanced_notifications_window.glade.h:14
+msgid "Have "
+msgstr "Imam "
+
+#: ../data/glade/advanced_notifications_window.glade.h:15
+#: ../src/common/helpers.py:239
+msgid "Invisible"
+msgstr "Nevidljiv"
+
+#: ../data/glade/advanced_notifications_window.glade.h:16
+msgid "Launch a command"
+msgstr "Pokrenite naredbu"
+
+#: ../data/glade/advanced_notifications_window.glade.h:17
+msgid "List of special notifications settings"
+msgstr "Lista podešenja posebnih obavijesti"
+
+#: ../data/glade/advanced_notifications_window.glade.h:18
+msgid "Not Available "
+msgstr "Nedostupan"
+
+#: ../data/glade/advanced_notifications_window.glade.h:19
+msgid "Online / Free For Chat"
+msgstr "Spojen / Slobodan za Razgovor"
+
+#: ../data/glade/advanced_notifications_window.glade.h:20
+msgid "Play a sound"
+msgstr "Sviraj zvukove"
+
+#: ../data/glade/advanced_notifications_window.glade.h:21
+msgid ""
+"Receive a Message\n"
+"Contact Connected\n"
+"Contact Disconnected\n"
+"Contact Change Status\n"
+"Group Chat Message Highlight\n"
+"Group Chat Message Received\n"
+"File Transfert Resquest\n"
+"File Transfert Started\n"
+"File Transfert Finished"
+msgstr ""
+"Primanje Poruke\n"
+"Kontakt Spojen\n"
+"Kontakt Odspojen\n"
+"Kontakt Promjeni Status\n"
+"Osvjetljavanje na Poruku Grupnog Razgovora\n"
+"Primanje Poruke Grupnog Razgovora\n"
+"Zahtjev za Prijenosom Datoteke\n"
+"Početak Prijenosa Datoteke\n"
+"Završen Prijenos Datoteke"
+
+#: ../data/glade/advanced_notifications_window.glade.h:30
+msgid "Some special(s) status..."
+msgstr "Neki poseban status..."
+
+#: ../data/glade/advanced_notifications_window.glade.h:31
+msgid "Up"
+msgstr "Gore"
+
+#: ../data/glade/advanced_notifications_window.glade.h:32
+msgid "When "
+msgstr "Kada "
+
+#: ../data/glade/advanced_notifications_window.glade.h:33
+msgid "_Activate Windows manager UrgencyHint to make chat taskbar to flash"
+msgstr "_Aktivacija opcije Upravitelja prozorima za bljeskanje razgovora u taskbaru"
+
+#: ../data/glade/advanced_notifications_window.glade.h:34
+msgid "_Disable auto opening chat window"
+msgstr "_Onemogući automatsko otvaranje prozora razgovora"
+
+#: ../data/glade/advanced_notifications_window.glade.h:35
+msgid "_Disable existing popup window"
+msgstr "_Onemogući postojeći iskočni prozor"
+
+#: ../data/glade/advanced_notifications_window.glade.h:36
+msgid "_Disable existing sound for this event"
+msgstr "_Onemogući postojeći zvuk za ovaj događaj"
+
+#: ../data/glade/advanced_notifications_window.glade.h:37
+msgid "_Disable showing event in roster"
+msgstr "_Onemogući prikazivanje događaja u listi kontakata"
+
+#: ../data/glade/advanced_notifications_window.glade.h:38
+msgid "_Disable showing event in systray"
+msgstr "_Onemogući prikazivanje događaja u systrayu"
+
+#: ../data/glade/advanced_notifications_window.glade.h:39
+msgid "_Inform me with a popup window"
+msgstr "_Obavijesti me sa iskočnim prozorom"
+
+#: ../data/glade/advanced_notifications_window.glade.h:40
+msgid "_Open chat window with user"
+msgstr "_Otvori prozor za razgovor sa korisnikom"
+
+#: ../data/glade/advanced_notifications_window.glade.h:41
+msgid "_Show event in roster"
+msgstr "Prikaži događaj u _listi kontakata"
+
+#: ../data/glade/advanced_notifications_window.glade.h:42
+msgid "_Show event in systray"
+msgstr "Prikaži samo u _listi kontakata"
+
+#: ../data/glade/advanced_notifications_window.glade.h:43
+msgid ""
+"contact(s)\n"
+"group(s)\n"
+"everybody"
+msgstr ""
+"kontakt(i)\n"
+"grupe\n"
+"svi"
+
+#: ../data/glade/advanced_notifications_window.glade.h:46
+msgid "for "
+msgstr "za"
+
+#: ../data/glade/advanced_notifications_window.glade.h:47
+msgid "when I'm "
+msgstr "kada sam "
+
+#: ../data/glade/change_password_dialog.glade.h:1
+msgid "Change Password"
+msgstr "Promijeni Password"
+
+#: ../data/glade/change_password_dialog.glade.h:2
+msgid "Enter it again for confirmation:"
+msgstr "Ponovite unos za potvrdu:"
+
+#: ../data/glade/change_password_dialog.glade.h:3
+msgid "Enter new password:"
+msgstr "Unesite novu lozinku:"
+
+#: ../data/glade/change_status_message_dialog.glade.h:1
+msgid "<b>Type your new status message</b>"
+msgstr "<b>Upišite vašu novu statusnu poruku</b>"
+
+#: ../data/glade/change_status_message_dialog.glade.h:2
+msgid "Preset messages:"
+msgstr "Prije postavljene poruke:"
+
+#: ../data/glade/change_status_message_dialog.glade.h:3
+msgid "Save as Preset..."
+msgstr "Snimi kao Prije Postavljeno..."
+
+#: ../data/glade/chat_context_menu.glade.h:1
+msgid "Join _Group Chat"
+msgstr "Pridruživanje _Grupnom Razgovoru"
+
+#: ../data/glade/chat_context_menu.glade.h:2
+#: ../data/glade/chat_control_popup_menu.glade.h:4
+#: ../data/glade/gc_occupants_menu.glade.h:2
+#: ../data/glade/roster_contact_context_menu.glade.h:8
+msgid "_Add to Roster"
+msgstr "_Dodaj na Listu"
+
+#: ../data/glade/chat_context_menu.glade.h:3
+msgid "_Copy JID/Email Address"
+msgstr "_Kopiraj JID/Email Adresu"
+
+#: ../data/glade/chat_context_menu.glade.h:4
+msgid "_Copy Link Location"
+msgstr "_Kopiraj Lokaciju Linka"
+
+#: ../data/glade/chat_context_menu.glade.h:5
+msgid "_Open Email Composer"
+msgstr "_Otvori Sastavljanje Emaila"
+
+#: ../data/glade/chat_context_menu.glade.h:6
+msgid "_Open Link in Browser"
+msgstr "_Otvori Link u Pretražniku"
+
+#: ../data/glade/chat_context_menu.glade.h:7
+#: ../data/glade/roster_window.glade.h:19
+#: ../data/glade/systray_context_menu.glade.h:6
+msgid "_Start Chat"
+msgstr "_Započni Razgovor"
+
+#: ../data/glade/chat_control_popup_menu.glade.h:1
+msgid "Click to see past conversations with this contact"
+msgstr "Pritisnite za pregled prošlih razgovora sa ovim kontaktom"
+
+#: ../data/glade/chat_control_popup_menu.glade.h:2
+#: ../data/glade/roster_contact_context_menu.glade.h:6
+msgid "Send _File"
+msgstr "Pošalji _Datoteku"
+
+#: ../data/glade/chat_control_popup_menu.glade.h:3
+msgid "Toggle Open_PGP Encryption"
+msgstr "Uključi/Isključi Open_PGP Enkripciju"
+
+#: ../data/glade/chat_control_popup_menu.glade.h:5
+#: ../data/glade/gc_control_popup_menu.glade.h:6
+msgid "_Compact View Alt+C"
+msgstr "_Kompaktan Pregled Alt+K"
+
+#: ../data/glade/chat_control_popup_menu.glade.h:6
+#: ../data/glade/gc_control_popup_menu.glade.h:7
+#: ../data/glade/gc_occupants_menu.glade.h:5
+#: ../data/glade/roster_contact_context_menu.glade.h:11
+msgid "_History"
+msgstr "_Povijest"
+
+#: ../data/glade/data_form_window.glade.h:1
+msgid "Room Configuration"
+msgstr "Konfiguracija Sobe"
+
+#: ../data/glade/edit_groups_dialog.glade.h:1
+msgid "Edit Groups"
+msgstr "Izmjeni Grupe"
+
+#: ../data/glade/filetransfers.glade.h:1
+msgid "A list of active, completed and stopped file transfers"
+msgstr "Lista aktivnih, kompletiranih i zaustavljenih prijenosa datoteka"
+
+#: ../data/glade/filetransfers.glade.h:2
+msgid "Cancel file transfer"
+msgstr "Prekini transfer datoteke"
+
+#: ../data/glade/filetransfers.glade.h:3
+msgid "Cancels the selected file transfer"
+msgstr "Prekini transfer odabrane datoteke"
+
+#: ../data/glade/filetransfers.glade.h:4
+msgid "Cancels the selected file transfer and removes incomplete file"
+msgstr "Prekini transfer odabrane datoteke i izbriši nekompletnu datoteku"
+
+#: ../data/glade/filetransfers.glade.h:5
+msgid "Clean _up"
+msgstr "Počist_i"
+
+#: ../data/glade/filetransfers.glade.h:6
+msgid "File Transfers"
+msgstr "Prijenosi Datoteka"
+
+#: ../data/glade/filetransfers.glade.h:7
+msgid "Hides the window"
+msgstr "Skriva prozor"
+
+#: ../data/glade/filetransfers.glade.h:8
+msgid "Remove file transfer from the list."
+msgstr "Ukloni prijenos datoteka sa liste"
+
+#: ../data/glade/filetransfers.glade.h:9
+msgid "Removes completed, canceled and failed file transfers from the list"
+msgstr "Ukloni završene, zaustavljene ili neuspjele prijenose datoteka sa liste"
+
+#: ../data/glade/filetransfers.glade.h:10
+msgid "Shows a list of file transfers between you and other"
+msgstr "Prikazuje listu prijenosa datoteka između vas i ostalih"
+
+#: ../data/glade/filetransfers.glade.h:11
+msgid "This action removes single file transfer from the list. If the transfer is active, it is first stopped and then removed"
+msgstr "Ova akcija uklanja prijenos datoteke sa liste. Ako je prijenos aktivan, prvo se zaustavlja i onda uklanja"
+
+#: ../data/glade/filetransfers.glade.h:12
+msgid "When a file transfer is complete show a popup notification"
+msgstr "Pokaži popup obavijest kada se završi prijenos datoteka"
+
+#: ../data/glade/filetransfers.glade.h:13
+#: ../src/filetransfers_window.py:753
+msgid "_Continue"
+msgstr "_Nastaviti"
+
+#: ../data/glade/filetransfers.glade.h:14
+msgid "_Notify me when a file transfer is complete"
+msgstr "_Obavijesti me kada se završi prijenos datoteka"
+
+#: ../data/glade/filetransfers.glade.h:15
+#: ../src/filetransfers_window.py:190
+msgid "_Open Containing Folder"
+msgstr "_Otvaranje Mape Sadržaja"
+
+#: ../data/glade/filetransfers.glade.h:16
+msgid "_Pause"
+msgstr "_Stanka"
+
+#: ../data/glade/filetransfers.glade.h:17
+msgid "file transfers list"
+msgstr "lista prijenosa datoteka"
+
+#: ../data/glade/gajim_themes_window.glade.h:1
+msgid "<b>Chatstate Tab Colors</b>"
+msgstr "<b>Boje Tabova Statusa Razgovora</b>"
+
+#: ../data/glade/gajim_themes_window.glade.h:2
+msgid ""
+"Account\n"
+"Group\n"
+"Contact\n"
+"Banner"
+msgstr ""
+"Korisnički račun\n"
+"Grupa\n"
+"Kontakt\n"
+"Baner"
+
+#: ../data/glade/gajim_themes_window.glade.h:6
+#: ../data/glade/privacy_list_edit_window.glade.h:4
+#: ../src/config.py:326
+msgid "Active"
+msgstr "Aktivno"
+
+#: ../data/glade/gajim_themes_window.glade.h:7
+msgid "Bold"
+msgstr "Podebljano"
+
+#: ../data/glade/gajim_themes_window.glade.h:8
+msgid "Composing"
+msgstr "Pisanje"
+
+#: ../data/glade/gajim_themes_window.glade.h:9
+msgid "Font style:"
+msgstr "Stil fonta:"
+
+#: ../data/glade/gajim_themes_window.glade.h:10
+msgid "Gajim Themes Customization"
+msgstr "Personalizacija Gajim Tema"
+
+#: ../data/glade/gajim_themes_window.glade.h:11
+msgid "Gone"
+msgstr "Otišao"
+
+#: ../data/glade/gajim_themes_window.glade.h:12
+msgid "Inactive"
+msgstr "Neaktivno"
+
+#: ../data/glade/gajim_themes_window.glade.h:13
+msgid "Italic"
+msgstr "Ukošeno"
+
+#: ../data/glade/gajim_themes_window.glade.h:14
+msgid ""
+"MUC\n"
+"Messages"
+msgstr ""
+"MUC\n"
+"Poruke"
+
+#: ../data/glade/gajim_themes_window.glade.h:16
+msgid ""
+"MUC Directed\n"
+"Messages"
+msgstr ""
+"MUC Usmjerene\n"
+"Poruke"
+
+#: ../data/glade/gajim_themes_window.glade.h:18
+#: ../src/tooltips.py:667
+msgid "Paused"
+msgstr "Pauza"
+
+#: ../data/glade/gajim_themes_window.glade.h:19
+msgid "Text _color:"
+msgstr "Boj_a teksta:"
+
+#: ../data/glade/gajim_themes_window.glade.h:20
+msgid "Text _font:"
+msgstr "_Font Teksta:"
+
+#: ../data/glade/gajim_themes_window.glade.h:21
+msgid "_Background:"
+msgstr "_Pozadina:"
+
+#: ../data/glade/gc_control_popup_menu.glade.h:1
+msgid "Change _Nickname"
+msgstr "Promijeni _Nadimak"
+
+#: ../data/glade/gc_control_popup_menu.glade.h:2
+msgid "Change _Subject"
+msgstr "Promijeni _Temu"
+
+#: ../data/glade/gc_control_popup_menu.glade.h:3
+msgid "Click to see past conversation in this room"
+msgstr "Pritisnite za pregled proteklog razgovora u ovoj sobi"
+
+#: ../data/glade/gc_control_popup_menu.glade.h:4
+msgid "Configure _Room"
+msgstr "Podešavanje _Sobe"
+
+#: ../data/glade/gc_control_popup_menu.glade.h:5
+msgid "_Bookmark This Room"
+msgstr "_Postavi Knjižnu Oznaku"
+
+#: ../data/glade/gc_occupants_menu.glade.h:1
+msgid "Mo_derator"
+msgstr "Mo_derator"
+
+#: ../data/glade/gc_occupants_menu.glade.h:3
+msgid "_Admin"
+msgstr "_Admin"
+
+#: ../data/glade/gc_occupants_menu.glade.h:4
+msgid "_Ban"
+msgstr "_Zabrani"
+
+#: ../data/glade/gc_occupants_menu.glade.h:6
+msgid "_Kick"
+msgstr "_Izbaci"
+
+#: ../data/glade/gc_occupants_menu.glade.h:7
+msgid "_Member"
+msgstr "_Član"
+
+#: ../data/glade/gc_occupants_menu.glade.h:8
+msgid "_Occupant Actions"
+msgstr "_Akcije Prisutnih"
+
+#: ../data/glade/gc_occupants_menu.glade.h:9
+msgid "_Owner"
+msgstr "_Vlasnik"
+
+#: ../data/glade/gc_occupants_menu.glade.h:10
+msgid "_Send Private Message"
+msgstr "_Pošalji Privatnu Poruku"
+
+#: ../data/glade/gc_occupants_menu.glade.h:11
+msgid "_Voice"
+msgstr "_Glas"
+
+#: ../data/glade/history_manager.glade.h:1
+msgid ""
+"<big><b>Welcome to Gajim History Logs Manager</b></big>\n"
+"\n"
+"You can select logs from the left and/or search database from below.\n"
+"\n"
+"<b>WARNING:</b>\n"
+"If you plan to do massive deletions, please make sure Gajim is not running. Generally avoid deletions with contacts you currently chat with."
+msgstr ""
+"<big><b>Dobro došli u Gajim Upravitelj Zabilješkama Povijesti</b></big>\n"
+"\n"
+"Sa lijeve strane možete odabrati zabilješke i/ili niže pretražiti bazu podataka.\n"
+"\n"
+"<b>UPOZORENJE:</b>\n"
+"Ako planirate raditi veća uklanjanja, osigurajte da Gajim nije pokrenut. Općenito izbjegavajte uklanjanja vezana uz kontakte sa kojima trenutno razgovarate."
+
+#: ../data/glade/history_manager.glade.h:7
+msgid "Delete"
+msgstr "Obriši"
+
+#: ../data/glade/history_manager.glade.h:8
+msgid "Export"
+msgstr "Izvoz"
+
+#: ../data/glade/history_manager.glade.h:9
+msgid "Gajim History Logs Manager"
+msgstr "Gajim Upravitelj Zabilješkama Povijesti"
+
+#: ../data/glade/history_manager.glade.h:10
+msgid "_Search Database"
+msgstr "_Pretraži Bazu Podataka"
+
+#: ../data/glade/history_window.glade.h:1
+msgid "Build custom query"
+msgstr "Izgradi prilagođeno pretraživanje"
+
+#: ../data/glade/history_window.glade.h:2
+msgid "Conversation History"
+msgstr "Povijest razgovora"
+
+#: ../data/glade/history_window.glade.h:3
+msgid "Query Builder..."
+msgstr "Graditelj Upita..."
+
+#: ../data/glade/history_window.glade.h:4
+msgid "Search"
+msgstr "Pretraga"
+
+#: ../data/glade/history_window.glade.h:5
+msgid "_Search"
+msgstr "_Pretraga"
+
+#: ../data/glade/invitation_received_dialog.glade.h:1
+msgid "Accept"
+msgstr "Prihvati"
+
+#: ../data/glade/invitation_received_dialog.glade.h:2
+#: ../data/glade/privacy_list_edit_window.glade.h:8
+msgid "Deny"
+msgstr "Odbij"
+
+#: ../data/glade/invitation_received_dialog.glade.h:3
+msgid "Invitation Received"
+msgstr "Primljen Poziv"
+
+#: ../data/glade/join_groupchat_window.glade.h:1
+#: ../src/dialogs.py:941
+msgid "Join Group Chat"
+msgstr "Pridružiti se Grupnom Razgovoru"
+
+#: ../data/glade/join_groupchat_window.glade.h:2
+#: ../data/glade/manage_bookmarks_window.glade.h:4
+#: ../data/glade/vcard_information_window.glade.h:28
+msgid "Nickname:"
+msgstr "Nadimak:"
+
+#: ../data/glade/join_groupchat_window.glade.h:3
+#: ../data/glade/manage_bookmarks_window.glade.h:5
+msgid "Password:"
+msgstr "Lozinka:"
+
+#: ../data/glade/join_groupchat_window.glade.h:4
+msgid "Recently:"
+msgstr "Nedavno:"
+
+#: ../data/glade/join_groupchat_window.glade.h:5
+#: ../data/glade/manage_bookmarks_window.glade.h:7
+msgid "Room:"
+msgstr "Soba:"
+
+#: ../data/glade/join_groupchat_window.glade.h:6
+#: ../data/glade/manage_bookmarks_window.glade.h:8
+msgid "Server:"
+msgstr "Poslužitelj:"
+
+#: ../data/glade/join_groupchat_window.glade.h:7
+#: ../src/disco.py:1145
+#: ../src/disco.py:1507
+msgid "_Join"
+msgstr "_Pridruživanje"
+
+#: ../data/glade/manage_accounts_window.glade.h:1
+msgid "Manage Accounts"
+msgstr "Podešavanje Računa"
+
+#: ../data/glade/manage_bookmarks_window.glade.h:1
+msgid "Auto join"
+msgstr "Automatsko spajanje"
+
+#: ../data/glade/manage_bookmarks_window.glade.h:2
+msgid "If checked, Gajim will join this group chat on startup"
+msgstr "Ako je označeno, Gajim će se pridružiti ovom grupnom razgovoru pri pokretanju"
+
+#: ../data/glade/manage_bookmarks_window.glade.h:3
+msgid "Manage Bookmarks"
+msgstr "Podešavanje Knjižnih Oznaka"
+
+#: ../data/glade/manage_bookmarks_window.glade.h:6
+msgid "Print status:"
+msgstr "Ispis statusa:"
+
+#: ../data/glade/manage_bookmarks_window.glade.h:9
+msgid "Title:"
+msgstr "Naslov:"
+
+#: ../data/glade/manage_proxies_window.glade.h:1
+msgid "<b>Properties</b>"
+msgstr "<b>Karakteristike</b>"
+
+#: ../data/glade/manage_proxies_window.glade.h:2
+msgid "<b>Settings</b>"
+msgstr "<b>Postavke</b>"
+
+#: ../data/glade/manage_proxies_window.glade.h:3
+msgid "HTTP Connect"
+msgstr "HTTP Spoj"
+
+#: ../data/glade/manage_proxies_window.glade.h:4
+msgid "Manage Proxy Profiles"
+msgstr "Podešavanje Proxy Profila"
+
+#: ../data/glade/manage_proxies_window.glade.h:5
+#: ../data/glade/vcard_information_window.glade.h:27
+msgid "Name:"
+msgstr "Ime:"
+
+#: ../data/glade/manage_proxies_window.glade.h:7
+msgid "Type:"
+msgstr "Vrsta:"
+
+#: ../data/glade/manage_proxies_window.glade.h:8
+msgid "Use authentication"
+msgstr "Koristi autentifikaciju"
+
+#: ../data/glade/message_window.glade.h:1
+msgid "Click to insert an emoticon (Alt+M)"
+msgstr "Kliknite da ubacite emoticon (Alt+M)"
+
+#: ../data/glade/message_window.glade.h:2
+#: ../src/chat_control.py:966
+msgid "OpenPGP Encryption"
+msgstr "OpenPGP Enkripcija"
+
+#. Make sure the character after "_" is not M/m (conflicts with Alt+M that is supposed to show the Emoticon Selector)
+#: ../data/glade/message_window.glade.h:4
+#: ../data/glade/roster_window.glade.h:9
+msgid "_Actions"
+msgstr "_Akcije"
+
+#. Make sure the character after "_" is not M/m (conflicts with Alt+M that is supposed to show the Emoticon Selector)
+#: ../data/glade/message_window.glade.h:6
+#: ../data/glade/xml_console_window.glade.h:11
+#: ../src/filetransfers_window.py:249
+msgid "_Send"
+msgstr "_Pošalji"
+
+#: ../data/glade/passphrase_dialog.glade.h:1
+msgid "Passphrase"
+msgstr "Lozinka"
+
+#: ../data/glade/preferences_window.glade.h:1
+msgid "<b>Advanced Configuration Editor</b>"
+msgstr "<b>Napredni Uređivač Konfiguracije</b>"
+
+#: ../data/glade/preferences_window.glade.h:2
+msgid "<b>Applications</b>"
+msgstr "<b>Aplikacije</b>"
+
+#. a header for custom browser/client/file manager. so translate sth like: Custom Settings
+#: ../data/glade/preferences_window.glade.h:4
+msgid "<b>Custom</b>"
+msgstr "<b>Osobni</b>"
+
+#: ../data/glade/preferences_window.glade.h:5
+msgid "<b>Format of a line</b>"
+msgstr "<b>Format linije</b>"
+
+#: ../data/glade/preferences_window.glade.h:6
+msgid "<b>GMail Options</b>"
+msgstr "<b>GMail Mogućnosti</b>"
+
+#: ../data/glade/preferences_window.glade.h:7
+msgid "<b>Interface Customization</b>"
+msgstr "<b>Prilagođavanje Sučelja</b>"
+
+#: ../data/glade/preferences_window.glade.h:9
+msgid "<b>Preset Status Messages</b>"
+msgstr "<b>Predefinirane Statusne Poruke</b>"
+
+#: ../data/glade/preferences_window.glade.h:11
+msgid "<b>Visual Notifications</b>"
+msgstr "<b>Vizualne Obavijesti</b>"
+
+#: ../data/glade/preferences_window.glade.h:12
+msgid "A_fter nickname:"
+msgstr "Poslije nadimka:"
+
+#: ../data/glade/preferences_window.glade.h:13
+msgid "Advanced"
+msgstr "Napredno"
+
+#: ../data/glade/preferences_window.glade.h:14
+msgid ""
+"All chat states\n"
+"Composing only\n"
+"Disabled"
+msgstr ""
+"Statusi svih razgovora\n"
+"Samo pisanje\n"
+"Onemogućeno"
+
+#: ../data/glade/preferences_window.glade.h:17
+msgid "Allow _OS information to be sent"
+msgstr "Dozvoli slanje podataka o _OS-u"
+
+#: ../data/glade/preferences_window.glade.h:18
+msgid "Allow popup/notifications when I'm _away/na/busy/invisible"
+msgstr "Dozvoli popup obavijesti kada sam _odsutan/nedostupan/zaposlen/nevidljiv"
+
+#: ../data/glade/preferences_window.glade.h:19
+msgid "Also known as iChat style"
+msgstr "Poznato i kao iChat stil"
+
+#: ../data/glade/preferences_window.glade.h:20
+msgid "Ask status message when I:"
+msgstr "Traži poruku statusa kada ja:"
+
+#: ../data/glade/preferences_window.glade.h:21
+msgid "Auto _away after:"
+msgstr "Automatski _odsutan nakon:"
+
+#: ../data/glade/preferences_window.glade.h:22
+msgid "Auto _not available after:"
+msgstr "Automatski _nedostupan nakon:"
+
+#: ../data/glade/preferences_window.glade.h:23
+msgid ""
+"Autodetect on every Gajim startup\n"
+"Always use GNOME default applications\n"
+"Always use KDE default applications\n"
+"Custom"
+msgstr ""
+"Automatski prepoznaj na svakom Gajim pokretanju\n"
+"Uvijek koristi predefiniranu GNOME aplikaciju\n"
+"Uvijek koristi predefiniranu KDE aplikaciju\n"
+"Prilagođeno"
+
+#: ../data/glade/preferences_window.glade.h:27
+msgid "B_efore nickname:"
+msgstr "Prij_e nadimka"
+
+#: ../data/glade/preferences_window.glade.h:28
+#: ../src/chat_control.py:718
+msgid "Chat"
+msgstr "Razgovor"
+
+#: ../data/glade/preferences_window.glade.h:29
+msgid "Chat state noti_fications:"
+msgstr "Noti_fikacije o statusu razgovora"
+
+#: ../data/glade/preferences_window.glade.h:30
+msgid "Check this option, only if someone you don't have in the roster spams/annoys you. Use with caution, cause it blocks all messages from any contact that is not in the roster"
+msgstr "Označite ovu opciju samo ako vas netko van vaše liste spama/uznemirava. Koristite sa oprezom, blokira sve poruke koje dolaze od ljudi van vaše liste kontakata"
+
+#: ../data/glade/preferences_window.glade.h:31
+msgid "Default status _iconset:"
+msgstr "Predefinirani statusni set _ikona"
+
+#: ../data/glade/preferences_window.glade.h:32
+msgid "Display _extra email details"
+msgstr "Prikaži dodatne email _detalje"
+
+#: ../data/glade/preferences_window.glade.h:33
+msgid "Display a_vatars of contacts in roster"
+msgstr "Prikaži a_vatare kontakata na listi"
+
+#: ../data/glade/preferences_window.glade.h:34
+msgid "Display status _messages of contacts in roster"
+msgstr "Prikaži statusne _poruke kontakata na listi"
+
+#: ../data/glade/preferences_window.glade.h:35
+msgid "E_very 5 minutes"
+msgstr "S_vakih 5 minuta"
+
+#: ../data/glade/preferences_window.glade.h:36
+msgid "Emoticons:"
+msgstr "Emotikone:"
+
+#: ../data/glade/preferences_window.glade.h:37
+msgid "Events"
+msgstr "Događaji"
+
+#: ../data/glade/preferences_window.glade.h:38
+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 send to the other party."
+msgstr "Gajim može primati i slati meta-informacije vezane za razgovor koji vodite sa kontaktom. Ovdje možete odrediti koji statusi razgovora će se slati drugoj osobi."
+
+#: ../data/glade/preferences_window.glade.h:39
+msgid "Gajim will automatically show new events by poping up the relative window"
+msgstr "Gajim će automatski prikazivati nove događaje iskačući sa bitnim prozorom"
+
+#: ../data/glade/preferences_window.glade.h:40
+msgid "Gajim will notify you for new events via a popup in the bottom right of the screen"
+msgstr "Gajim će vas obavijestiti o novim događajima sa popup prozorom u donjem desnom kutu ekrana"
+
+#: ../data/glade/preferences_window.glade.h:41
+msgid "Gajim will notify you via a popup window in the bottom right of the screen about contacts that just signed in"
+msgstr "Gajim će vas obavijestiti o kontaktima koji su se upravo prijavili sa popup prozorom u donjem desnom kutu ekrana"
+
+#: ../data/glade/preferences_window.glade.h:42
+msgid "Gajim will notify you via a popup window in the bottom right of the screen about contacts that just signed out"
+msgstr "Gajim će vas obavijestiti o kontaktima koji su se upravo odjavili sa popup prozorom u donjem desnom kutu ekrana"
+
+#: ../data/glade/preferences_window.glade.h:43
+msgid "Gajim will only change the icon of the contact that triggered the new event"
+msgstr "Gajim će mjenjati ikonu samo onom kontaktu koji je potaknuo novi događaj"
+
+#: ../data/glade/preferences_window.glade.h:45
+msgid "If checked, Gajim will display avatars of contacts in roster window and in group chats"
+msgstr "Ako je označeno, Gajim će prikazivati avatare kontakata u listi kontakata i u grupnim razgovorima"
+
+#: ../data/glade/preferences_window.glade.h:46
+msgid "If checked, Gajim will display status messages of contacts under the contact name in roster window and in group chats"
+msgstr "Ako je označeno, Gajim će prikazivati statusne poruke kontakata ispod imena kontakta u listi kontakata i u grupnim razgovorima"
+
+#: ../data/glade/preferences_window.glade.h:47
+msgid "If checked, Gajim will remember the roster and chat window positions in the screen and the sizes of them next time you run it"
+msgstr "Ako je označeno, Gajim će se prisjetiti pozicije prozora liste kontakata i razgovora, kao i njihove veličine kod sljedećeg pokretanja"
+
+#: ../data/glade/preferences_window.glade.h:48
+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, etc...)"
+msgstr "Ako je označeno, Gajim će koristiti statusne ikone specifične za protokol. (npr. kontakt sa MSN-a će imati msn ikone za statuse)"
+
+#: ../data/glade/preferences_window.glade.h:49
+msgid "If not disabled, Gajim will replace ascii smilies like ':)' with equivalent animated or static graphical emoticons"
+msgstr "Ako nije onemogućeno, Gajim će zamjeniti ascii smajliće poput ':)' sa ekvivalentnim animiranim ili statičnim grafičkim emotikonama"
+
+#: ../data/glade/preferences_window.glade.h:50
+msgid "Ma_nage..."
+msgstr "Po_desi"
+
+#: ../data/glade/preferences_window.glade.h:51
+msgid ""
+"Never\n"
+"Always\n"
+"Per account\n"
+"Per type"
+msgstr ""
+"Nikad\n"
+"Uvijek\n"
+"Ovisi o računu\n"
+"Ovisi o tipu"
+
+#: ../data/glade/preferences_window.glade.h:55
+msgid "Notify me about contacts that: "
+msgstr "Obavijesti me o kontaktima koji:"
+
+#: ../data/glade/preferences_window.glade.h:56
+msgid "Notify on new _GMail email"
+msgstr "Obavijesti o novoj _Gmail e-pošti"
+
+#: ../data/glade/preferences_window.glade.h:57
+msgid "On every _message"
+msgstr "Na svaku _poruku"
+
+#: ../data/glade/preferences_window.glade.h:58
+msgid "One message _window:"
+msgstr "Prozor _jedne poruke:"
+
+#: ../data/glade/preferences_window.glade.h:59
+msgid "Play _sounds"
+msgstr "Sviraj _zvukove"
+
+#: ../data/glade/preferences_window.glade.h:60
+msgid "Preferences"
+msgstr "Postavke"
+
+#: ../data/glade/preferences_window.glade.h:61
+msgid "Print time:"
+msgstr "Prikaz vremena:"
+
+#: ../data/glade/preferences_window.glade.h:62
+msgid "Save _position and size for roster and chat windows"
+msgstr "Snimi _poziciju i veličinu za prozore liste kontakata i razgovora"
+
+#: ../data/glade/preferences_window.glade.h:63
+msgid "Show only in _roster"
+msgstr "Prikaži samo u _listi kontakata"
+
+#: ../data/glade/preferences_window.glade.h:64
+msgid "Sign _in"
+msgstr "Prijavi _se"
+
+#: ../data/glade/preferences_window.glade.h:65
+msgid "Sign _out"
+msgstr "_Odjavi se"
+
+#: ../data/glade/preferences_window.glade.h:66
+msgid "Status"
+msgstr "Status"
+
+#: ../data/glade/preferences_window.glade.h:67
+msgid "T_heme:"
+msgstr "_Tema:"
+
+#: ../data/glade/preferences_window.glade.h:68
+msgid "The auto away status message"
+msgstr "Statusna poruka automatske odsutnosti"
+
+#: ../data/glade/preferences_window.glade.h:69
+msgid "The auto not available status message"
+msgstr "Statusna poruka automatske ne dostupnosti"
+
+#: ../data/glade/preferences_window.glade.h:70
+msgid "Use _transports iconsets"
+msgstr "Koristi set ikona _transporta"
+
+#: ../data/glade/preferences_window.glade.h:71
+msgid "Use system _default"
+msgstr "Koristi pret_postavljeno od sustava"
+
+#: ../data/glade/preferences_window.glade.h:72
+msgid "Use t_rayicon (aka. notification area icon)"
+msgstr "Koristi t_ray ikonu"
+
+#: ../data/glade/preferences_window.glade.h:73
+msgid "When a new event (message, file transfer request etc..) is received, the following methods may be used to inform you about it. Please note that events about new messages only occur if it is a new message from a contact you are not already chatting with"
+msgstr "Kada se primi novi događaj (poruka, zahtjev za prijenosom datoteka i sl.), mogu se koristiti sjedeće metode za obavijest. Imajte na umu da se obavijesti o novim porukama prikazuju samo za kontakte sa kojima trenutno ne razgovarate"
+
+#: ../data/glade/preferences_window.glade.h:74
+msgid "When new event is received"
+msgstr "Kada se primi novi događaj"
+
+#: ../data/glade/preferences_window.glade.h:75
+msgid "_Advanced Notifications Control..."
+msgstr "_Napredno Upravljanje Obavijestima..."
+
+#: ../data/glade/preferences_window.glade.h:76
+msgid "_After time:"
+msgstr "_Nakon vremena:"
+
+#: ../data/glade/preferences_window.glade.h:77
+msgid "_Before time:"
+msgstr "_Prije vremena:"
+
+#: ../data/glade/preferences_window.glade.h:78
+msgid "_Browser:"
+msgstr "_Pretražnik:"
+
+#: ../data/glade/preferences_window.glade.h:79
+msgid "_File manager:"
+msgstr "_Upravitelj datotekama:"
+
+#: ../data/glade/preferences_window.glade.h:80
+msgid "_Font:"
+msgstr "_Font:"
+
+#: ../data/glade/preferences_window.glade.h:81
+msgid "_Highlight misspelled words"
+msgstr "_Osvijetli krivo napisane riječi"
+
+#: ../data/glade/preferences_window.glade.h:82
+msgid "_Ignore events from contacts not in the roster"
+msgstr "_Ignoriraj događaje od kontakata koji nisu na listi kontakata"
+
+#: ../data/glade/preferences_window.glade.h:83
+msgid "_Incoming message:"
+msgstr "_Dolazna poruka:"
+
+#: ../data/glade/preferences_window.glade.h:84
+msgid "_Log status changes of contacts"
+msgstr "_Pamti promjene statusa kontakata"
+
+#: ../data/glade/preferences_window.glade.h:85
+msgid "_Mail client:"
+msgstr "_Mail klijent:"
+
+#: ../data/glade/preferences_window.glade.h:86
+msgid "_Never"
+msgstr "_Nikada"
+
+#: ../data/glade/preferences_window.glade.h:87
+msgid "_Notify me about it"
+msgstr "_Obavijesti me o tome"
+
+#: ../data/glade/preferences_window.glade.h:88
+msgid "_Open..."
+msgstr "_Otvori..."
+
+#: ../data/glade/preferences_window.glade.h:89
+msgid "_Outgoing message:"
+msgstr "_Odlazna poruka:"
+
+#: ../data/glade/preferences_window.glade.h:90
+msgid "_Player:"
+msgstr "_Player:"
+
+#: ../data/glade/preferences_window.glade.h:91
+msgid "_Pop it up"
+msgstr "_Iskoči ga"
+
+#: ../data/glade/preferences_window.glade.h:92
+msgid "_Reset to Default Colors"
+msgstr "_Ponovo učitavanje Pretpostavljenih Boja"
+
+#: ../data/glade/preferences_window.glade.h:93
+msgid "_Sort contacts by status"
+msgstr "_Sortiranje kontakata po statusu"
+
+#: ../data/glade/preferences_window.glade.h:94
+msgid "_Status message:"
+msgstr "_Statusna poruka:"
+
+#: ../data/glade/preferences_window.glade.h:95
+msgid "_URL:"
+msgstr "_URL:"
+
+#: ../data/glade/preferences_window.glade.h:96
+msgid "minutes"
+msgstr "minuta"
+
+#: ../data/glade/privacy_list_edit_window.glade.h:1
+msgid "<b>Add / Edit a rule</b>"
+msgstr "<b>Dodaj / Izmjeni pravilo</b>"
+
+#: ../data/glade/privacy_list_edit_window.glade.h:2
+msgid "<b>List of rules</b>"
+msgstr "<b>Lista pravila</b>"
+
+#: ../data/glade/privacy_list_edit_window.glade.h:3
+msgid "<i>Privacy List</i>"
+msgstr "<i>Lista Privatnosti</i>"
+
+#: ../data/glade/privacy_list_edit_window.glade.h:5
+#: ../src/config.py:2281
+msgid "All"
+msgstr "Svi"
+
+#: ../data/glade/privacy_list_edit_window.glade.h:6
+msgid "Allow"
+msgstr "Dozvoli"
+
+#: ../data/glade/privacy_list_edit_window.glade.h:7
+msgid "Default"
+msgstr "Predefinirano"
+
+#: ../data/glade/privacy_list_edit_window.glade.h:9
+msgid "JabberID"
+msgstr "JabberID"
+
+#: ../data/glade/privacy_list_edit_window.glade.h:10
+msgid "Order:"
+msgstr "Poredak:"
+
+#: ../data/glade/privacy_list_edit_window.glade.h:11
+#: ../src/dialogs.py:1626
+msgid "Privacy List"
+msgstr "Lista Privatnosti"
+
+#: ../data/glade/privacy_list_edit_window.glade.h:12
+msgid "all by subscription"
+msgstr "sve prema pretplati"
+
+#: ../data/glade/privacy_list_edit_window.glade.h:13
+msgid "all in the group"
+msgstr "sve u grupi"
+
+#: ../data/glade/privacy_list_edit_window.glade.h:14
+msgid ""
+"none\n"
+"both\n"
+"from\n"
+"to"
+msgstr ""
+"ništa\n"
+"oboje\n"
+"od\n"
+"za"
+
+#: ../data/glade/privacy_list_edit_window.glade.h:18
+msgid "to send me messages"
+msgstr "da mi šalje poruke"
+
+#: ../data/glade/privacy_list_edit_window.glade.h:19
+msgid "to send me queries"
+msgstr "da mi šalje upite"
+
+#: ../data/glade/privacy_list_edit_window.glade.h:20
+msgid "to send me status"
+msgstr "da mi prikaže status"
+
+#: ../data/glade/privacy_list_edit_window.glade.h:21
+msgid "to view my status"
+msgstr "da vidi moj status"
+
+#: ../data/glade/privacy_lists_first_window.glade.h:1
+msgid "Create your own Privacy Lists"
+msgstr "Sami stvorite svoju vlasitu Listu Privatnosti"
+
+#: ../data/glade/privacy_lists_first_window.glade.h:2
+msgid "Server-based Privacy Lists"
+msgstr "Liste Privatnosti ovisne o poslužitelju"
+
+#: ../data/glade/remove_account_window.glade.h:1
+msgid "<b>What do you want to do?</b>"
+msgstr "<b>Što želite učiniti?</b>"
+
+#: ../data/glade/remove_account_window.glade.h:2
+msgid "Remove account _only from Gajim"
+msgstr "Ukloni račun sam_o iz Gajima"
+
+#: ../data/glade/remove_account_window.glade.h:3
+msgid "Remove account from Gajim and from _server"
+msgstr "Ukloni račun iz Gajima i sa po_služitelja"
+
+#: ../data/glade/roster_contact_context_menu.glade.h:1
+msgid "A_sk to see his/her status"
+msgstr "Traži njegov/njezin status"
+
+#: ../data/glade/roster_contact_context_menu.glade.h:2
+msgid "Add Special _Notification"
+msgstr "Dodaj Posebnu _Obavijest"
+
+#: ../data/glade/roster_contact_context_menu.glade.h:3
+msgid "Assign Open_PGP Key"
+msgstr "Pridruži Open_PGP Ključ"
+
+#: ../data/glade/roster_contact_context_menu.glade.h:4
+msgid "Edit _Groups"
+msgstr "Izmjeni _Grupe"
+
+#: ../data/glade/roster_contact_context_menu.glade.h:5
+#: ../data/glade/systray_context_menu.glade.h:1
+msgid "Send Single _Message"
+msgstr "Pošalji Jednu _Poruku"
+
+#: ../data/glade/roster_contact_context_menu.glade.h:7
+msgid "Start _Chat"
+msgstr "Započni _Razgovor"
+
+#: ../data/glade/roster_contact_context_menu.glade.h:9
+msgid "_Allow him/her to see my status"
+msgstr "_Dozvoli njemu/njoj da vidi moj status"
+
+#: ../data/glade/roster_contact_context_menu.glade.h:10
+msgid "_Forbid him/her to see my status"
+msgstr "_Zabrani mu/joj da vidi moj status"
+
+#: ../data/glade/roster_contact_context_menu.glade.h:12
+#: ../src/roster_window.py:1482
+msgid "_Remove from Roster"
+msgstr "_Ukloni sa Liste kontakata"
+
+#: ../data/glade/roster_contact_context_menu.glade.h:13
+#: ../src/roster_window.py:1470
+msgid "_Rename"
+msgstr "_Preimenuj"
+
+#: ../data/glade/roster_contact_context_menu.glade.h:14
+msgid "_Subscription"
+msgstr "_Pretplata"
+
+#: ../data/glade/roster_window.glade.h:1
+msgid "A_ccounts"
+msgstr "Korisnički računi"
+
+#: ../data/glade/roster_window.glade.h:2
+msgid "Add _Contact"
+msgstr "Dodaj _Kontakt"
+
+#: ../data/glade/roster_window.glade.h:3
+msgid "File _Transfers"
+msgstr "Prijenosi _Datoteka"
+
+#: ../data/glade/roster_window.glade.h:4
+msgid "Frequently Asked Questions (online)"
+msgstr "Često Postavljana Pitanja (online)"
+
+#: ../data/glade/roster_window.glade.h:6
+msgid "Help online"
+msgstr "Online Pomoć"
+
+#: ../data/glade/roster_window.glade.h:7
+msgid "Profile, Avatar"
+msgstr "Profil, Avatar"
+
+#: ../data/glade/roster_window.glade.h:8
+msgid "Show _Offline Contacts"
+msgstr "Prikaži _Odspojene Kontakte"
+
+#: ../data/glade/roster_window.glade.h:11
+msgid "_Contents"
+msgstr "_Sadržaj"
+
+#: ../data/glade/roster_window.glade.h:12
+msgid "_Discover Services"
+msgstr "_Otkrivanje Usluga"
+
+#: ../data/glade/roster_window.glade.h:13
+#: ../src/disco.py:1252
+#: ../src/roster_window.py:1462
+msgid "_Edit"
+msgstr "_Uredi"
+
+#: ../data/glade/roster_window.glade.h:14
+msgid "_FAQ"
+msgstr "_FAQ"
+
+#: ../data/glade/roster_window.glade.h:16
+msgid "_Help"
+msgstr "_Pomoć"
+
+#: ../data/glade/roster_window.glade.h:17
+msgid "_Preferences"
+msgstr "_Postavke"
+
+#: ../data/glade/roster_window.glade.h:18
+msgid "_Quit"
+msgstr "_Izlaz"
+
+#: ../data/glade/service_discovery_window.glade.h:1
+msgid "G_o"
+msgstr "K_reni"
+
+#: ../data/glade/service_discovery_window.glade.h:2
+msgid "_Address:"
+msgstr "_Adresa:"
+
+#: ../data/glade/service_discovery_window.glade.h:3
+msgid "_Filter:"
+msgstr "_Filter:"
+
+#: ../data/glade/service_registration_window.glade.h:1
+msgid "Register to"
+msgstr "Registriraj na"
+
+#: ../data/glade/service_registration_window.glade.h:2
+msgid "_Cancel"
+msgstr "_Odustani"
+
+#: ../data/glade/service_registration_window.glade.h:3
+msgid "_OK"
+msgstr "_Uredu"
+
+#: ../data/glade/single_message_window.glade.h:1
+msgid "0"
+msgstr "0"
+
+#: ../data/glade/single_message_window.glade.h:2
+msgid "From:"
+msgstr "Od:"
+
+#: ../data/glade/single_message_window.glade.h:3
+msgid "Reply to this message"
+msgstr "Odgovori na ovu poruku"
+
+#: ../data/glade/single_message_window.glade.h:4
+msgid "Sen_d"
+msgstr "P_ošalji"
+
+#: ../data/glade/single_message_window.glade.h:5
+msgid "Send message"
+msgstr "Pošalji poruku"
+
+#: ../data/glade/single_message_window.glade.h:6
+msgid "Send message and close window"
+msgstr "Pošalji poruku i zatvori prozor"
+
+#: ../data/glade/single_message_window.glade.h:7
+msgid "Subject:"
+msgstr "Tema:"
+
+#: ../data/glade/single_message_window.glade.h:8
+msgid "To:"
+msgstr "Za:"
+
+#: ../data/glade/single_message_window.glade.h:9
+msgid "_Reply"
+msgstr "_Odgovor"
+
+#: ../data/glade/single_message_window.glade.h:10
+msgid "_Send & Close"
+msgstr "_Pošalji i Zatvori"
+
+#: ../data/glade/subscription_request_window.glade.h:1
+msgid "Authorize contact so he can know when you're connected"
+msgstr "Dozvoli kontaktu da može vidjeti kada sam spojen"
+
+#: ../data/glade/subscription_request_window.glade.h:2
+msgid "Contact _Info"
+msgstr "Kontakt _Info"
+
+#: ../data/glade/subscription_request_window.glade.h:3
+msgid "Deny authorization from contact so he cannot know when you're connected"
+msgstr "Odbija autorizaciju kontaktu kako nebi mogao vidjeti kada ste spojeni"
+
+#: ../data/glade/subscription_request_window.glade.h:4
+msgid "Subscription Request"
+msgstr "Zahtjev za Pretplatom"
+
+#: ../data/glade/subscription_request_window.glade.h:5
+msgid "_Authorize"
+msgstr "_Odobri"
+
+#: ../data/glade/subscription_request_window.glade.h:6
+msgid "_Deny"
+msgstr "_Odbij"
+
+#: ../data/glade/systray_context_menu.glade.h:2
+msgid "Show All Pending _Events"
+msgstr "Prikaži Sve _Događaje na Čekanju"
+
+#: ../data/glade/systray_context_menu.glade.h:3
+msgid "Show _Roster"
+msgstr "Prikaži _Listu Kontakata"
+
+#: ../data/glade/systray_context_menu.glade.h:4
+msgid "Sta_tus"
+msgstr "Sta_tus"
+
+#. "About" is the text of a tab of vcard window
+#: ../data/glade/vcard_information_window.glade.h:2
+msgid "About"
+msgstr "O"
+
+#: ../data/glade/vcard_information_window.glade.h:3
+msgid "Address"
+msgstr "Adresa:"
+
+#: ../data/glade/vcard_information_window.glade.h:4
+msgid "Ask:"
+msgstr "Pitaj:"
+
+#: ../data/glade/vcard_information_window.glade.h:5
+msgid "Birthday:"
+msgstr "Rođendan:"
+
+#: ../data/glade/vcard_information_window.glade.h:6
+msgid "City:"
+msgstr "Mjesto:"
+
+#: ../data/glade/vcard_information_window.glade.h:7
+msgid "Client:"
+msgstr "Klijent:"
+
+#: ../data/glade/vcard_information_window.glade.h:8
+msgid "Company:"
+msgstr "Poduzeće:"
+
+#: ../data/glade/vcard_information_window.glade.h:9
+msgid "Contact Information"
+msgstr "Informacije Kontakta"
+
+#: ../data/glade/vcard_information_window.glade.h:10
+msgid "Country:"
+msgstr "Država:"
+
+#: ../data/glade/vcard_information_window.glade.h:11
+msgid "Department:"
+msgstr "Odjel:"
+
+#: ../data/glade/vcard_information_window.glade.h:12
+msgid "E-Mail:"
+msgstr "E-Mail:"
+
+#: ../data/glade/vcard_information_window.glade.h:13
+msgid "Extra Address:"
+msgstr "Dodatna Adresa:"
+
+#. Family Name
+#: ../data/glade/vcard_information_window.glade.h:15
+msgid "Family:"
+msgstr "Obitelj:"
+
+#: ../data/glade/vcard_information_window.glade.h:16
+msgid "Format: YYYY-MM-DD"
+msgstr "Format: GGGG-MM-DD"
+
+#. Given Name
+#: ../data/glade/vcard_information_window.glade.h:19
+msgid "Given:"
+msgstr "Dano:"
+
+#: ../data/glade/vcard_information_window.glade.h:20
+msgid "Homepage:"
+msgstr "Vlastita stranica:"
+
+#: ../data/glade/vcard_information_window.glade.h:21
+msgid "Jabber"
+msgstr "Jabber"
+
+#: ../data/glade/vcard_information_window.glade.h:22
+msgid "Jabber ID:"
+msgstr "Jabber ID:"
+
+#: ../data/glade/vcard_information_window.glade.h:23
+msgid "Location"
+msgstr "Lokacija"
+
+#. Middle Name
+#: ../data/glade/vcard_information_window.glade.h:25
+msgid "Middle:"
+msgstr "Srednje"
+
+#: ../data/glade/vcard_information_window.glade.h:26
+msgid "More"
+msgstr "Više"
+
+#: ../data/glade/vcard_information_window.glade.h:29
+msgid "OS:"
+msgstr "OS:"
+
+#: ../data/glade/vcard_information_window.glade.h:30
+msgid "Phone No.:"
+msgstr "Broj Telefona:"
+
+#: ../data/glade/vcard_information_window.glade.h:31
+msgid "Position:"
+msgstr "Pozicija:"
+
+#: ../data/glade/vcard_information_window.glade.h:32
+msgid "Postal Code:"
+msgstr "Poštanski broj:"
+
+#. Prefix in Name
+#: ../data/glade/vcard_information_window.glade.h:34
+msgid "Prefix:"
+msgstr "Prefiks:"
+
+#: ../data/glade/vcard_information_window.glade.h:35
+msgid "Resource:"
+msgstr "Resurs"
+
+#: ../data/glade/vcard_information_window.glade.h:36
+msgid "Role:"
+msgstr "Uloga:"
+
+#: ../data/glade/vcard_information_window.glade.h:37
+msgid "Set _Avatar"
+msgstr "Postavi _Avatar"
+
+#: ../data/glade/vcard_information_window.glade.h:38
+msgid "State:"
+msgstr "Država:"
+
+#: ../data/glade/vcard_information_window.glade.h:39
+msgid "Status:"
+msgstr "Status:"
+
+#: ../data/glade/vcard_information_window.glade.h:40
+msgid "Street:"
+msgstr "Ulica:"
+
+#: ../data/glade/vcard_information_window.glade.h:41
+msgid "Subscription:"
+msgstr "Pretplata:"
+
+#. Suffix in Name
+#: ../data/glade/vcard_information_window.glade.h:43
+msgid "Suffix:"
+msgstr "Sufiks:"
+
+#: ../data/glade/vcard_information_window.glade.h:44
+msgid "Work"
+msgstr "Posao"
+
+#: ../data/glade/vcard_information_window.glade.h:45
+msgid "_Log conversation history"
+msgstr "_Pamti povijest razgovora"
+
+#: ../data/glade/vcard_information_window.glade.h:46
+msgid "_Publish"
+msgstr "_Objava"
+
+#: ../data/glade/vcard_information_window.glade.h:47
+msgid "_Retrieve"
+msgstr "_Dohvati"
+
+#: ../data/glade/xml_console_window.glade.h:1
+msgid "<b>Jabber Traffic</b>"
+msgstr "<b>Jabber Promet</b>"
+
+#: ../data/glade/xml_console_window.glade.h:2
+msgid "<b>XML Input</b>"
+msgstr "<b>XML Unos</b>"
+
+#. XML Console enable checkbutton
+#: ../data/glade/xml_console_window.glade.h:4
+msgid "Enable"
+msgstr "Omogući"
+
+#. Info/Query make the "IQ" initials. So translate like this 'YourLang/YourLang (Info/Query)'. Thanks (it's a tooltip so width is not a problem)
+#: ../data/glade/xml_console_window.glade.h:6
+msgid "Info/Query"
+msgstr "Info/Upit"
+
+#. Info/Query: all(?) jabber xml start with <iq Leaving it _IQ is not a bad idea unless you are sure your lang has this somehow else translated (NOTE: xml still will still say <iq in your language (of course))
+#: ../data/glade/xml_console_window.glade.h:8
+msgid "_IQ"
+msgstr "_IU"
+
+#: ../data/glade/xml_console_window.glade.h:9
+msgid "_Message"
+msgstr "_Poruka"
+
+#: ../data/glade/xml_console_window.glade.h:10
+msgid "_Presence"
+msgstr "_Prisutnost"
+
+#: ../src/advanced.py:65
+msgid "Preference Name"
+msgstr "Ime Postavke"
+
+#: ../src/advanced.py:71
+msgid "Value"
+msgstr "Vrijednost"
+
+#: ../src/advanced.py:80
+msgid "Type"
+msgstr "Vrsta"
+
+#. we talk about option description in advanced configuration editor
+#: ../src/advanced.py:136
+msgid "(None)"
+msgstr "(Nema)"
+
+#. we talk about password
+#: ../src/advanced.py:235
+msgid "Hidden"
+msgstr "Skrivena"
+
+#. FIXME: add a ui for this use spell.set_language()
+#: ../src/chat_control.py:163
+#: ../src/dialogs.py:1291
+msgid ""
+"If that is not your language for which you want to highlight misspelled words, then please set your $LANG as appropriate. Eg. for French do export LANG=fr_FR or export LANG=fr_FR.UTF-8 in ~/.bash_profile or to make it global in /etc/profile.\n"
+"\n"
+"Highlighting misspelled words feature will not be used"
+msgstr ""
+"Ako to nije vaš jezik za koji želite osvjetliti krivo napisane riječi, molimo podesite $LANG varijablu na odgovarajuću vrijednost. Npr. za francuski napravite export LANG=fr_FR ili export LANG=fr_FR.UTF-8 u ~/.bash_profile ili kako bi bilo globalno u /etc/profile.\n"
+"\n"
+"Mogućnost osvjetljavanja krivo napisanih riječi neće biti korištena"
+
+#. we are not connected
+#: ../src/chat_control.py:186
+#: ../src/chat_control.py:391
+msgid "A connection is not available"
+msgstr "Veza nije dostupna"
+
+#: ../src/chat_control.py:187
+#: ../src/chat_control.py:392
+msgid "Your message can not be sent until you are connected."
+msgstr "Vaša poruka ne može biti poslana dok niste spojeni."
+
+#: ../src/chat_control.py:718
+msgid "Chats"
+msgstr "Razgovori"
+
+#. we talk about a contact here
+#: ../src/chat_control.py:980
+#, python-format
+msgid "%s has not broadcast an OpenPGP key, nor has one been assigned"
+msgstr "%s nije ustupio OpenPGP ključ, niti mu je ikoji dodijeljen"
+
+#: ../src/chat_control.py:1106
+msgid "Encryption enabled"
+msgstr "Enkripcija omogućena"
+
+#: ../src/chat_control.py:1111
+msgid "Encryption disabled"
+msgstr "Enkripcija onemogućena"
+
+#. add_to_roster_menuitem
+#: ../src/chat_control.py:1239
+#: ../src/conversation_textview.py:407
+#: ../src/dialogs.py:512
+#: ../src/gajim.py:635
+#: ../src/gajim.py:636
+#: ../src/gajim.py:955
+#: ../src/roster_window.py:276
+#: ../src/roster_window.py:1335
+#: ../src/roster_window.py:1645
+#: ../src/roster_window.py:1806
+#: ../src/roster_window.py:1817
+#: ../src/roster_window.py:2123
+#: ../src/roster_window.py:2179
+#: ../src/roster_window.py:2977
+#: ../src/roster_window.py:2979
+#: ../src/common/helpers.py:39
+#: ../src/common/helpers.py:241
+msgid "Not in Roster"
+msgstr "Nije na Listi Kontakata"
+
+#. %s is being replaced in the code with JID
+#: ../src/chat_control.py:1383
+#, python-format
+msgid "You just received a new message from \"%s\""
+msgstr "Upravo ste primili novu poruku od \"%s\""
+
+#: ../src/chat_control.py:1384
+msgid "If you close this tab and you have history disabled, this message will be lost."
+msgstr "Ako zatvorite ovaj tab, a imate povijest onemogućenu, ova poruka biti će izgubljena."
+
+#: ../src/config.py:120
+#: ../src/config.py:511
+msgid "Disabled"
+msgstr "Onemogućeno"
+
+#: ../src/config.py:199
+#, python-format
+msgid "Every %s _minutes"
+msgstr "Svakih %s _minuta"
+
+#: ../src/config.py:334
+msgid "Event"
+msgstr "Događaj"
+
+#: ../src/config.py:881
+msgid "status message title"
+msgstr "naslov statusne poruke"
+
+#: ../src/config.py:881
+msgid "status message text"
+msgstr "tekst statusne poruke"
+
+#: ../src/config.py:916
+msgid "First Message Received"
+msgstr "Prva Poruka Primljena"
+
+#: ../src/config.py:917
+msgid "Next Message Received"
+msgstr "Sljedeća Poruka Primljena"
+
+#: ../src/config.py:918
+msgid "Contact Connected"
+msgstr "Kontakt Spojen"
+
+#: ../src/config.py:919
+msgid "Contact Disconnected"
+msgstr "Kontakt Odspojen"
+
+#: ../src/config.py:920
+msgid "Message Sent"
+msgstr "Poruka Poslana"
+
+#: ../src/config.py:921
+msgid "Group Chat Message Highlight"
+msgstr "Označavanje Poruke Grupnog Razgovora"
+
+#: ../src/config.py:922
+msgid "Group Chat Message Received"
+msgstr "Primljena Poruka Grupnog Razgovora"
+
+#: ../src/config.py:1112
+msgid "OpenPGP is not usable in this computer"
+msgstr "OpenPGP nije moguće koristiti na ovom računalu"
+
+#: ../src/config.py:1154
+msgid "You are currently connected to the server"
+msgstr "Trenutno ste spojeni na poslužitelj"
+
+#: ../src/config.py:1155
+msgid "To change the account name, you must be disconnected."
+msgstr "Za promjenu imena računa morate se odspojiti."
+
+#: ../src/config.py:1158
+#: ../src/config.py:1715
+msgid "Unread events"
+msgstr "Nepročitani događaji"
+
+#: ../src/config.py:1159
+msgid "To change the account name, you must read all pending events."
+msgstr "Da biste mogli promjeniti ime računa, morate pročitati sve čekajuće događaje"
+
+#: ../src/config.py:1163
+msgid "Account Name Already Used"
+msgstr "Ime Računa Već Upotrebljeno"
+
+#: ../src/config.py:1164
+msgid "This name is already used by another of your accounts. Please choose another name."
+msgstr "Ovo ime već koristi vaš drugi račun. Molimo odaberite drugo ime."
+
+#: ../src/config.py:1168
+#: ../src/config.py:1172
+msgid "Invalid account name"
+msgstr "Neispravno ime računa"
+
+#: ../src/config.py:1169
+msgid "Account name cannot be empty."
+msgstr "Ime računa ne može biti prazno."
+
+#: ../src/config.py:1173
+msgid "Account name cannot contain spaces."
+msgstr "Ime računa ne može sadržavati razmake."
+
+#: ../src/config.py:1181
+#: ../src/config.py:1187
+#: ../src/config.py:1196
+#: ../src/config.py:2662
+msgid "Invalid Jabber ID"
+msgstr "Neispravan Jabber ID"
+
+#: ../src/config.py:1188
+msgid "A Jabber ID must be in the form \"user@servername\"."
+msgstr "Jabber ID mora biti forme \"korisnik@poslužitelj\"."
+
+#: ../src/config.py:1244
+msgid "Invalid entry"
+msgstr "Neispravan unos"
+
+#: ../src/config.py:1245
+msgid "Custom port must be a port number."
+msgstr "Osobni port mora biti broj porta."
+
+#: ../src/config.py:1366
+msgid "Be right back."
+msgstr "Odmah se vraćam."
+
+#: ../src/config.py:1376
+msgid "Relogin now?"
+msgstr "Prijaviti se odmah?"
+
+#: ../src/config.py:1377
+msgid "If you want all the changes to apply instantly, you must relogin."
+msgstr "Ako želite da se sve promjene odmah primjene, morate se ponovo prijaviti."
+
+#: ../src/config.py:1403
+msgid "No such account available"
+msgstr "Takav račun nije dostupan"
+
+#: ../src/config.py:1404
+msgid "You must create your account before editing your personal information."
+msgstr "Morate napravit svoj račun prije izmjena osobnih informacija."
+
+#: ../src/config.py:1410
+#: ../src/dialogs.py:925
+#: ../src/dialogs.py:1099
+#: ../src/disco.py:410
+#: ../src/vcard.py:457
+#: ../src/vcard.py:490
+msgid "You are not connected to the server"
+msgstr "Niste spojeni na poslužitelj."
+
+#: ../src/config.py:1411
+msgid "Without a connection, you can not edit your personal information."
+msgstr "Bez veze sa poslužiteljom nije moguća izmjena osobnih informacija."
+
+#: ../src/config.py:1435
+msgid "Failed to get secret keys"
+msgstr "Neuspješno dohvaćanje tajnih ključeva"
+
+#: ../src/config.py:1436
+msgid "There was a problem retrieving your OpenPGP secret keys."
+msgstr "Došlo je do problema pri dohvaćanju vaših OpenPGP tajnih ključeva."
+
+#: ../src/config.py:1439
+msgid "OpenPGP Key Selection"
+msgstr "Odabir OpenPGP Ključeva"
+
+#: ../src/config.py:1440
+msgid "Choose your OpenPGP key"
+msgstr "Odaberite svoj OpenPGP ključ"
+
+#. Name column
+#: ../src/config.py:1667
+#: ../src/disco.py:727
+#: ../src/disco.py:1466
+#: ../src/history_window.py:77
+msgid "Name"
+msgstr "Ime"
+
+#: ../src/config.py:1670
+msgid "Server"
+msgstr "Poslužitelj"
+
+#: ../src/config.py:1716
+msgid "Read all pending events before removing this account."
+msgstr "Pročitajte sve događaje na čekanju prije uklanjanja ovog računa."
+
+#: ../src/config.py:1911
+#, python-format
+msgid "Edit %s"
+msgstr "Izmjena %s"
+
+#: ../src/config.py:1913
+#, python-format
+msgid "Register to %s"
+msgstr "Registrirati se na %s"
+
+#: ../src/config.py:1984
+msgid "Ban List"
+msgstr "Ban Lista"
+
+#: ../src/config.py:1985
+msgid "Member List"
+msgstr "Lista Članova"
+
+#: ../src/config.py:1986
+msgid "Owner List"
+msgstr "Lista Vasnika"
+
+#: ../src/config.py:1987
+msgid "Administrator List"
+msgstr "Lista Administratora"
+
+#. Address column
+#. holds JID (who said this)
+#: ../src/config.py:2020
+#: ../src/disco.py:734
+#: ../src/history_manager.py:151
+msgid "JID"
+msgstr "JID"
+
+#: ../src/config.py:2028
+msgid "Reason"
+msgstr "Razlog"
+
+#: ../src/config.py:2033
+msgid "Nick"
+msgstr "Nadimak"
+
+#: ../src/config.py:2037
+msgid "Role"
+msgstr "Uloga"
+
+#: ../src/config.py:2058
+msgid "Banning..."
+msgstr "Zabranjivanje..."
+
+#. You can move '\n' before user@domain if that line is TOO BIG
+#: ../src/config.py:2060
+msgid ""
+"<b>Whom do you want to ban?</b>\n"
+"\n"
+msgstr ""
+"<b>Koga želite zabraniti?</b>\n"
+"\n"
+
+#: ../src/config.py:2062
+msgid "Adding Member..."
+msgstr "Dodaja Člana..."
+
+#: ../src/config.py:2063
+msgid ""
+"<b>Whom do you want to make a member?</b>\n"
+"\n"
+msgstr ""
+"<b>Koga želite učiniti članom?</b>\n"
+"\n"
+
+#: ../src/config.py:2065
+msgid "Adding Owner..."
+msgstr "Dodavanje Vlasnika..."
+
+#: ../src/config.py:2066
+msgid ""
+"<b>Whom do you want to make a owner?</b>\n"
+"\n"
+msgstr ""
+"<b>Koga želite učiniti vlasnikom?</b>\n"
+"\n"
+
+#: ../src/config.py:2068
+msgid "Adding Administrator..."
+msgstr "Dodajem Administratora..."
+
+#: ../src/config.py:2069
+msgid ""
+"<b>Whom do you want to make an administrator?</b>\n"
+"\n"
+msgstr ""
+"<b>Koga želite učiniti administratorom?</b>\n"
+"\n"
+
+#: ../src/config.py:2070
+msgid ""
+"Can be one of the following:\n"
+"1. user@domain/resource (only that resource matches).\n"
+"2. user@domain (any resource matches).\n"
+"3. domain/resource (only that resource matches).\n"
+"4. domain (the domain itself matches, as does any user@domain,\n"
+"domain/resource, or address containing a subdomain."
+msgstr ""
+"Može biti jedno od sljedećeg:\n"
+"1. korisnik@domena/resurs (poklapa se samo sa tim resursom).\n"
+"2. korisnik@domena (bilo koji resurs se poklapa).\n"
+"3. domena/resurs (poklapa se samo sa tim resursom).\n"
+"4. domena (sama domena se poklapa, kao i bilo koji korisnik@domena,\n"
+"domena/resurs, ili adresa koja sadrži poddomenu."
+
+#: ../src/config.py:2166
+#, python-format
+msgid "Removing %s account"
+msgstr "Uklanjanje %s računa"
+
+#: ../src/config.py:2183
+#: ../src/roster_window.py:1857
+msgid "Password Required"
+msgstr "Potrebna Lozinka"
+
+#: ../src/config.py:2184
+#: ../src/roster_window.py:1858
+#, python-format
+msgid "Enter your password for account %s"
+msgstr "Unesite svoju lozinku za račun %s"
+
+#: ../src/config.py:2185
+#: ../src/roster_window.py:1859
+msgid "Save password"
+msgstr "Spremiti lozinku"
+
+#: ../src/config.py:2198
+#, python-format
+msgid "Account \"%s\" is connected to the server"
+msgstr "Račun \"%s\" je spojen na poslužitelj"
+
+#: ../src/config.py:2199
+msgid "If you remove it, the connection will be lost."
+msgstr "Ukoliko ga uklonite, veza će biti izgubljena."
+
+#: ../src/config.py:2282
+msgid "Enter and leave only"
+msgstr "Ući i samo napustiti"
+
+#: ../src/config.py:2352
+msgid "New Room"
+msgstr "Nova Soba"
+
+#: ../src/config.py:2383
+msgid "This bookmark has invalid data"
+msgstr "Ova knjižna oznaka ima neispravne podatke"
+
+#: ../src/config.py:2384
+msgid "Please be sure to fill out server and room fields or remove this bookmark."
+msgstr "Molimo obavezno ispunite polja poslužitelja i sobe ili uklonite ovu kljižnu oznaku."
+
+#: ../src/config.py:2638
+msgid "Invalid username"
+msgstr "Neispravno korisničko ime"
+
+#: ../src/config.py:2639
+msgid "You must provide a username to configure this account."
+msgstr "Morate ponuditi korisničko ime za postavke ovog računa."
+
+#: ../src/config.py:2648
+#: ../src/dialogs.py:1118
+msgid "Invalid password"
+msgstr "Neispravna lozinka"
+
+#: ../src/config.py:2649
+msgid "You must enter a password for the new account."
+msgstr "Morate unesti lozinku za novi račun"
+
+#: ../src/config.py:2653
+#: ../src/dialogs.py:1123
+msgid "Passwords do not match"
+msgstr "Lozinke se ne podudaraju"
+
+#: ../src/config.py:2654
+#: ../src/dialogs.py:1124
+msgid "The passwords typed in both fields must be identical."
+msgstr "Lozinke upisane u oba polja moraju biti identične."
+
+#: ../src/config.py:2673
+msgid "Duplicate Jabber ID"
+msgstr "Dvostruki Jabber ID"
+
+#: ../src/config.py:2674
+msgid "This account is already configured in Gajim."
+msgstr "Ovaj račun je već konfiguriran u Gajimu."
+
+#: ../src/config.py:2691
+msgid "Account has been added successfully"
+msgstr "Račun je uspješno dodan"
+
+#: ../src/config.py:2692
+#: ../src/config.py:2725
+msgid "You can set advanced account options by pressing Advanced button, or later by clicking in Accounts menuitem under Edit menu from the main window."
+msgstr "Napredne opcije računa možete podesiti pritiskom na gumb Napredno, ili kasnije klikom na element Računi pod izbornikom Uredi iz glavnog prozora."
+
+#: ../src/config.py:2724
+msgid "Your new account has been created successfully"
+msgstr "Vaš novi račun je uspješno stvoren"
+
+#: ../src/config.py:2740
+msgid "An error occured during account creation"
+msgstr "Pojavila se greška pri stvaranju računa"
+
+#: ../src/config.py:2797
+msgid "Account name is in use"
+msgstr "Ime računa se već koristi"
+
+#: ../src/config.py:2798
+msgid "You already have an account using this name."
+msgstr "Već imate račun pod tim imenom."
+
+#: ../src/conversation_textview.py:205
+msgid "Text below this line is what has been said since the last time you paid attention to this group chat"
+msgstr "Tekst niže od ove linije je ono što je rečeno od kad ste zadnji puta obraćali pozornost na ovaj grupni razovor"
+
+#: ../src/conversation_textview.py:263
+#, python-format
+msgid "Actions for \"%s\""
+msgstr "Akcije za \"%s\""
+
+#: ../src/conversation_textview.py:275
+msgid "Read _Wikipedia Article"
+msgstr "Pročitajte članak na _Wikipedii"
+
+#: ../src/conversation_textview.py:280
+msgid "Look it up in _Dictionary"
+msgstr "Potražiti u _Riječniku"
+
+#. we must have %s in the url if not WIKTIONARY
+#: ../src/conversation_textview.py:296
+#, python-format
+msgid "Dictionary URL is missing an \"%s\" and it is not WIKTIONARY"
+msgstr "URL-u riječnika nedostaje \"%s\" i nije WIKTIONARY"
+
+#. we must have %s in the url
+#: ../src/conversation_textview.py:308
+#, python-format
+msgid "Web Search URL is missing an \"%s\""
+msgstr "URL-u Web Pretrage nedostaje \"%s\""
+
+#: ../src/conversation_textview.py:311
+msgid "Web _Search for it"
+msgstr "_Pretraži Web"
+
+#: ../src/conversation_textview.py:607
+msgid "Yesterday"
+msgstr "Jučer"
+
+#. the number is >= 2
+#. %i is day in year (1-365), %d (1-31) we want %i
+#: ../src/conversation_textview.py:611
+#, python-format
+msgid "%i days ago"
+msgstr "Prije %i dana"
+
+#. if we have subject, show it too!
+#: ../src/conversation_textview.py:686
+#, python-format
+msgid "Subject: %s\n"
+msgstr "Tema: %s\n"
+
+#. only say that to non Windows users
+#: ../src/dbus_support.py:32
+msgid "D-Bus python bindings are missing in this computer"
+msgstr "Ovom računalu nedostaju D-Bus python poveznice"
+
+#: ../src/dbus_support.py:33
+msgid "D-Bus capabilities of Gajim cannot be used"
+msgstr "D-Bus mogućnosti Gajima ne mogu se koristiti"
+
+#: ../src/dialogs.py:55
+#, python-format
+msgid "Contact's name: <i>%s</i>"
+msgstr "Ime kontakta: <i>%s</i>"
+
+#: ../src/dialogs.py:57
+#, python-format
+msgid "JID: <i>%s</i>"
+msgstr "JID: <i>%s</i>"
+
+#. Group name
+#. In group boolean
+#: ../src/dialogs.py:173
+msgid "Group"
+msgstr "Grupa"
+
+#: ../src/dialogs.py:180
+msgid "In the group"
+msgstr "U grupi"
+
+#: ../src/dialogs.py:230
+msgid "KeyID"
+msgstr "ID ključa"
+
+#: ../src/dialogs.py:233
+msgid "Contact name"
+msgstr "Ime kontakta"
+
+#: ../src/dialogs.py:266
+#, python-format
+msgid "%s Status Message"
+msgstr "%s Statusna Poruka"
+
+#: ../src/dialogs.py:268
+msgid "Status Message"
+msgstr "Statusna Poruka"
+
+#: ../src/dialogs.py:343
+msgid "Save as Preset Status Message"
+msgstr "Snimiti kao Unaprijed Postavljenu Statusnu Poruku"
+
+#: ../src/dialogs.py:344
+msgid "Please type a name for this status message"
+msgstr "Molimo unesite ime za ovu statusnu poruku"
+
+#: ../src/dialogs.py:391
+#, python-format
+msgid "Please fill in the data of the contact you want to add in account %s"
+msgstr "Molimo ispunite podatke kontakta kojeg želite dodati u račun %s"
+
+#: ../src/dialogs.py:393
+msgid "Please fill in the data of the contact you want to add"
+msgstr "Molimo ispunite podatke kontakta kojeg želite dodati"
+
+#: ../src/dialogs.py:403
+#: ../src/disco.py:109
+#: ../src/disco.py:110
+#: ../src/disco.py:1249
+#: ../src/roster_window.py:207
+#: ../src/roster_window.py:273
+#: ../src/roster_window.py:309
+#: ../src/roster_window.py:329
+#: ../src/roster_window.py:353
+#: ../src/roster_window.py:2973
+#: ../src/roster_window.py:2975
+#: ../src/common/helpers.py:39
+msgid "Transports"
+msgstr "Prijenosi"
+
+#: ../src/dialogs.py:493
+#: ../src/dialogs.py:499
+msgid "Invalid User ID"
+msgstr "Neispravan Korisnički ID"
+
+#: ../src/dialogs.py:500
+msgid "The user ID must not contain a resource."
+msgstr "ID korisnika ne smije sadržavati resurs."
+
+#: ../src/dialogs.py:513
+msgid "Contact already in roster"
+msgstr "Kontakt je već na listi"
+
+#: ../src/dialogs.py:514
+msgid "This contact is already listed in your roster."
+msgstr "Ovaj kontakt je već na vašoj listi kontakata."
+
+#: ../src/dialogs.py:576
+msgid "A GTK+ jabber client"
+msgstr "GTK+ jabber klijent"
+
+#: ../src/dialogs.py:577
+msgid "GTK+ Version:"
+msgstr "GTK+ Verzija:"
+
+#: ../src/dialogs.py:578
+msgid "PyGTK Version:"
+msgstr "PyGTK Verzija:"
+
+#: ../src/dialogs.py:586
+msgid "Current Developers:"
+msgstr "Trenutni Razvojni Programeri:"
+
+#: ../src/dialogs.py:588
+msgid "Past Developers:"
+msgstr "Prošli Razvojni Programeri:"
+
+#: ../src/dialogs.py:592
+msgid "THANKS:"
+msgstr "ZAHVALE:"
+
+#. remove one english sentence
+#. and add it manually as translatable
+#: ../src/dialogs.py:598
+msgid "Last but not least, we would like to thank all the package maintainers."
+msgstr "Zadnje, ali ne najmanje, željeli bismo se zahvaliti svim održavateljima paketa"
+
+#. here you write your name in the form Name FamilyName <someone@somewhere>
+#: ../src/dialogs.py:612
+msgid "translator-credits"
+msgstr ""
+"Adrian C. <anrxc@sysphere.org>\n"
+"Deni B. <baccic@gmail.com>\n"
+"Armando V. <synan@rilinux.hr>\n"
+"Vedran M. <rivanvx@gmail.com>"
+
+#: ../src/dialogs.py:738
+#, python-format
+msgid "Unable to bind to port %s."
+msgstr "Nemoguće vezanje na port %s."
+
+#: ../src/dialogs.py:739
+msgid "Maybe you have another running instance of Gajim. File Transfer will be canceled."
+msgstr "Možda već imate pokrenutu jednu instancu Gajima. Prijenos Datoteka će biti prekinut."
+
+#: ../src/dialogs.py:881
+#, python-format
+msgid "Subscription request for account %s from %s"
+msgstr "Zahtjev pretplate za račun %s od %s"
+
+#: ../src/dialogs.py:884
+#, python-format
+msgid "Subscription request from %s"
+msgstr "Zahtjev za pretplatom od %s"
+
+#: ../src/dialogs.py:926
+msgid "You can not join a group chat unless you are connected."
+msgstr "Ne možete se pridružiti grupnom razgovoru ukoliko niste spojeni."
+
+#: ../src/dialogs.py:939
+#, python-format
+msgid "Join Group Chat with account %s"
+msgstr "Pridružiti se Grupnom Razgovoru sa računom %s"
+
+#: ../src/dialogs.py:1030
+msgid "Invalid room or server name"
+msgstr "Neispravno ime sobe ili poslužitelja"
+
+#: ../src/dialogs.py:1031
+msgid "The room name or server name has not allowed characters."
+msgstr "Ime sobe ili poslužitelja ima nedozvoljene znakove."
+
+#: ../src/dialogs.py:1050
+#, python-format
+msgid "Start Chat with account %s"
+msgstr "Započeti Razgovor sa računom %s"
+
+#: ../src/dialogs.py:1052
+msgid "Start Chat"
+msgstr "Započeti Razgovor"
+
+#: ../src/dialogs.py:1053
+msgid ""
+"Fill in the jid, or nick of the contact you would like\n"
+"to send a chat message to:"
+msgstr ""
+"Ispunite JID ili nadimak kontakta kojem želite\n"
+"poslati razgovornu poruku:"
+
+#. if offline or connecting
+#: ../src/dialogs.py:1078
+#: ../src/dialogs.py:1427
+#: ../src/dialogs.py:1551
+msgid "Connection not available"
+msgstr "Veza nije dostupna"
+
+#: ../src/dialogs.py:1079
+#: ../src/dialogs.py:1428
+#: ../src/dialogs.py:1552
+#, python-format
+msgid "Please make sure you are connected with \"%s\"."
+msgstr "Molimo potvrdite da ste spojeni na \"%s\"."
+
+#: ../src/dialogs.py:1088
+#: ../src/dialogs.py:1091
+msgid "Invalid JID"
+msgstr "Neispravan JID"
+
+#: ../src/dialogs.py:1091
+#, python-format
+msgid "Unable to parse \"%s\"."
+msgstr "Nije moguće učitati \"%s\"."
+
+#: ../src/dialogs.py:1100
+msgid "Without a connection, you can not change your password."
+msgstr "Bez veze nije moguća promjena lozinke."
+
+#: ../src/dialogs.py:1119
+msgid "You must enter a password."
+msgstr "Morate unesti lozinku."
+
+#. img to display
+#. default value
+#: ../src/dialogs.py:1165
+#: ../src/notify.py:126
+#: ../src/notify.py:268
+msgid "Contact Signed In"
+msgstr "Kontakt Se Prijavio"
+
+#: ../src/dialogs.py:1167
+#: ../src/notify.py:134
+#: ../src/notify.py:270
+msgid "Contact Signed Out"
+msgstr "Kontakt Se Odjavio"
+
+#. chat message
+#: ../src/dialogs.py:1169
+#: ../src/notify.py:154
+#: ../src/notify.py:272
+msgid "New Message"
+msgstr "Nova Poruka"
+
+#. single message
+#: ../src/dialogs.py:1169
+#: ../src/notify.py:138
+#: ../src/notify.py:272
+msgid "New Single Message"
+msgstr "Nova Jedna Poruka"
+
+#. private message
+#: ../src/dialogs.py:1170
+#: ../src/notify.py:145
+#: ../src/notify.py:273
+msgid "New Private Message"
+msgstr "Nova Privatna Poruka"
+
+#: ../src/dialogs.py:1170
+#: ../src/gajim.py:1044
+#: ../src/notify.py:281
+msgid "New E-mail"
+msgstr "Novi E-mail"
+
+#: ../src/dialogs.py:1172
+#: ../src/gajim.py:1187
+#: ../src/notify.py:275
+msgid "File Transfer Request"
+msgstr "Zahtjev Razmjene Datoteka"
+
+#: ../src/dialogs.py:1174
+#: ../src/gajim.py:1022
+#: ../src/gajim.py:1164
+#: ../src/notify.py:277
+msgid "File Transfer Error"
+msgstr "Greška u Razmjeni Datoteka"
+
+#: ../src/dialogs.py:1176
+#: ../src/gajim.py:1222
+#: ../src/gajim.py:1244
+#: ../src/gajim.py:1261
+#: ../src/notify.py:279
+msgid "File Transfer Completed"
+msgstr "Razmjena Datoteka Završena"
+
+#: ../src/dialogs.py:1177
+#: ../src/gajim.py:1225
+#: ../src/notify.py:279
+msgid "File Transfer Stopped"
+msgstr "Razmjena Datoteka Zaustavljena"
+
+#: ../src/dialogs.py:1179
+#: ../src/gajim.py:920
+#: ../src/notify.py:283
+msgid "Groupchat Invitation"
+msgstr "Poziv na Grupni Razgovor"
+
+#: ../src/dialogs.py:1181
+#: ../src/notify.py:118
+#: ../src/notify.py:285
+msgid "Contact Changed Status"
+msgstr "Kontakt Promjenio Status"
+
+#. FIXME: for Received with should become 'in'
+#: ../src/dialogs.py:1359
+#, python-format
+msgid "Single Message with account %s"
+msgstr "Jedna Poruka sa računom %s"
+
+#: ../src/dialogs.py:1361
+msgid "Single Message"
+msgstr "Jedna Poruka"
+
+#. prepare UI for Sending
+#: ../src/dialogs.py:1364
+#, python-format
+msgid "Send %s"
+msgstr "Poslati %s"
+
+#. prepare UI for Receiving
+#: ../src/dialogs.py:1387
+#, python-format
+msgid "Received %s"
+msgstr "Primljene %s"
+
+#. we create a new blank window to send and we preset RE: and to jid
+#: ../src/dialogs.py:1454
+#, python-format
+msgid "RE: %s"
+msgstr "RE: %s"
+
+#: ../src/dialogs.py:1455
+#, python-format
+msgid "%s wrote:\n"
+msgstr "%s piše:\n"
+
+#: ../src/dialogs.py:1499
+#, python-format
+msgid "XML Console for %s"
+msgstr "XML Konzola za %s"
+
+#: ../src/dialogs.py:1501
+msgid "XML Console"
+msgstr "XML Konzola"
+
+#: ../src/dialogs.py:1620
+#, python-format
+msgid "Privacy List <b><i>%s</i></b>"
+msgstr "Lista Privatnosti <b><i>%s</i></b>"
+
+#: ../src/dialogs.py:1624
+#, python-format
+msgid "Privacy List for %s"
+msgstr "Lista Privatnosti za %s"
+
+#: ../src/dialogs.py:1716
+msgid "<b>Edit a rule</b>"
+msgstr "<b>Izmjena pravila</b>"
+
+#: ../src/dialogs.py:1801
+msgid "<b>Add a rule</b>"
+msgstr "<b>Dodaj pravilo</b>"
+
+#: ../src/dialogs.py:1897
+#, python-format
+msgid "Privacy Lists for %s"
+msgstr "Liste Privatnosti za %s"
+
+#: ../src/dialogs.py:1899
+msgid "Privacy Lists"
+msgstr "Liste Privatnosti"
+
+#. FIXME: use nickname instead of contact_jid
+#: ../src/dialogs.py:1988
+#, python-format
+msgid "%(contact_jid)s has invited you to %(room_jid)s room"
+msgstr "%(contact_jid)s vas je pozvao u sobu %(room_jid)s"
+
+#. only if not None and not ''
+#: ../src/dialogs.py:1994
+#, python-format
+msgid "Comment: %s"
+msgstr "Komentar: %s"
+
+#: ../src/dialogs.py:2054
+msgid "Choose Sound"
+msgstr "Odabir Zvuka"
+
+#: ../src/dialogs.py:2064
+#: ../src/dialogs.py:2107
+msgid "All files"
+msgstr "Sve datoteke"
+
+#: ../src/dialogs.py:2069
+msgid "Wav Sounds"
+msgstr "Wav Zvukovi"
+
+#: ../src/dialogs.py:2097
+msgid "Choose Image"
+msgstr "Odabir Slike"
+
+#: ../src/dialogs.py:2112
+msgid "Images"
+msgstr "Slike"
+
+#: ../src/dialogs.py:2157
+#, python-format
+msgid "When %s becomes:"
+msgstr "Kad %s postane:"
+
+#: ../src/dialogs.py:2159
+#, python-format
+msgid "Adding Special Notification for %s"
+msgstr "Dodavanje Posebne Obavijesti za %s"
+
+#: ../src/dialogs.py:2232
+msgid "Condition"
+msgstr "Uvjet"
+
+#: ../src/disco.py:108
+msgid "Others"
+msgstr "Ostali"
+
+#. conference is a category for listing mostly groupchats in service discovery
+#: ../src/disco.py:112
+msgid "Conference"
+msgstr "Konferencija"
+
+#: ../src/disco.py:411
+msgid "Without a connection, you can not browse available services"
+msgstr "Ukoliko niste spojeni nećete moći pregledati dostupne usluge"
+
+#: ../src/disco.py:490
+#, python-format
+msgid "Service Discovery using account %s"
+msgstr "Otkrivanje Usluga koristeći račun %s"
+
+#: ../src/disco.py:491
+msgid "Service Discovery"
+msgstr "Otkrivanje Usluga"
+
+#: ../src/disco.py:628
+msgid "The service could not be found"
+msgstr "Usluga nije pronađena"
+
+#: ../src/disco.py:629
+msgid "There is no service at the address you entered, or it is not responding. Check the address and try again."
+msgstr "Na adresi koju ste naveli nema usluge ili odgovora. Provjerite adresu i pokušajte ponovo."
+
+#: ../src/disco.py:633
+#: ../src/disco.py:915
+msgid "The service is not browsable"
+msgstr "Uslugu nije moguće pretražiti"
+
+#: ../src/disco.py:634
+msgid "This type of service does not contain any items to browse."
+msgstr "Ovakav tip usluge ne sadrži stvari za pretraživanje"
+
+#: ../src/disco.py:714
+#, python-format
+msgid "Browsing %s using account %s"
+msgstr "Pretraga %s koristeći račun %s"
+
+#: ../src/disco.py:753
+msgid "_Browse"
+msgstr "_Pregled"
+
+#: ../src/disco.py:916
+msgid "This service does not contain any items to browse."
+msgstr "Ova usluga ne sadrži stvari za pretraživanje"
+
+#: ../src/disco.py:1137
+#: ../src/disco.py:1254
+msgid "Re_gister"
+msgstr "Re_gistracija"
+
+#: ../src/disco.py:1291
+#, python-format
+msgid "Scanning %d / %d.."
+msgstr "Skeniranje %d / %d.."
+
+#. Users column
+#: ../src/disco.py:1473
+msgid "Users"
+msgstr "Korisnici"
+
+#. Description column
+#: ../src/disco.py:1480
+msgid "Description"
+msgstr "Opis"
+
+#: ../src/filetransfers_window.py:72
+msgid "File"
+msgstr "Datoteka"
+
+#: ../src/filetransfers_window.py:87
+msgid "Time"
+msgstr "Vrijeme"
+
+#: ../src/filetransfers_window.py:99
+msgid "Progress"
+msgstr "Napredak"
+
+#: ../src/filetransfers_window.py:163
+#: ../src/filetransfers_window.py:223
+#, python-format
+msgid "Filename: %s"
+msgstr "Ime datoteke: %s"
+
+#: ../src/filetransfers_window.py:164
+#: ../src/filetransfers_window.py:291
+#, python-format
+msgid "Size: %s"
+msgstr "veličina: %s"
+
+#. You is a reply of who sent a file
+#. You is a reply of who received a file
+#: ../src/filetransfers_window.py:173
+#: ../src/filetransfers_window.py:183
+#: ../src/history_manager.py:454
+msgid "You"
+msgstr "Vi"
+
+#: ../src/filetransfers_window.py:174
+#: ../src/filetransfers_window.py:224
+#, python-format
+msgid "Sender: %s"
+msgstr "Pošiljatelj: %s"
+
+#: ../src/filetransfers_window.py:175
+#: ../src/filetransfers_window.py:556
+#: ../src/tooltips.py:639
+msgid "Recipient: "
+msgstr "Primatelj: "
+
+#: ../src/filetransfers_window.py:186
+#, python-format
+msgid "Saved in: %s"
+msgstr "Spremljeno u: %s"
+
+#: ../src/filetransfers_window.py:188
+msgid "File transfer completed"
+msgstr "Prijenos datoteka završen"
+
+#: ../src/filetransfers_window.py:204
+#: ../src/filetransfers_window.py:212
+msgid "File transfer canceled"
+msgstr "Prijenos datoteka prekinut"
+
+#: ../src/filetransfers_window.py:204
+#: ../src/filetransfers_window.py:213
+msgid "Connection with peer cannot be established."
+msgstr "Vezu nije moguće ostvariti."
+
+#: ../src/filetransfers_window.py:225
+msgid "File transfer stopped by the contact of the other side"
+msgstr "Prijenos datoteka je zaustavio kontakt na drugoj strani"
+
+#: ../src/filetransfers_window.py:242
+msgid "Choose File to Send..."
+msgstr "Odabir Datoteke za Slanje..."
+
+#: ../src/filetransfers_window.py:256
+msgid "Gajim cannot access this file"
+msgstr "Gajim ne može pristupiti ovoj datoteci"
+
+#: ../src/filetransfers_window.py:257
+msgid "This file is being used by another process."
+msgstr "Ovu datoteku koristi neki drugi proces."
+
+#: ../src/filetransfers_window.py:289
+#, python-format
+msgid "File: %s"
+msgstr "Datoteka: %s"
+
+#: ../src/filetransfers_window.py:294
+#, python-format
+msgid "Type: %s"
+msgstr "Tip: %s"
+
+#: ../src/filetransfers_window.py:296
+#, python-format
+msgid "Description: %s"
+msgstr "Opis: %s"
+
+#: ../src/filetransfers_window.py:297
+#, python-format
+msgid "%s wants to send you a file:"
+msgstr "%s vam želi poslati datoteku:"
+
+#: ../src/filetransfers_window.py:311
+#, python-format
+msgid "Cannot overwrite existing file \"%s\""
+msgstr "Nije moguće prepisati postojeću datoteku \"%s\""
+
+#: ../src/filetransfers_window.py:312
+msgid "A file with this name already exists and you do not have permission to overwrite it."
+msgstr "Datoteka sa ovim imenom već postoji i nemate ovlasti prepisati ju."
+
+#: ../src/filetransfers_window.py:319
+#: ../src/gtkgui_helpers.py:685
+msgid "This file already exists"
+msgstr "Ova datoteka već postoji"
+
+#: ../src/filetransfers_window.py:319
+#: ../src/gtkgui_helpers.py:685
+msgid "What do you want to do?"
+msgstr "Å to želite učiniti?"
+
+#: ../src/filetransfers_window.py:331
+#, python-format
+msgid "Directory \"%s\" is not writable"
+msgstr "U direktorij \"%s\" nije moguće zapisivati"
+
+#: ../src/filetransfers_window.py:331
+msgid "You do not have permission to create files in this directory."
+msgstr "Nemate ovlasti stvarati datoteke u ovom direktoriju"
+
+#: ../src/filetransfers_window.py:341
+msgid "Save File as..."
+msgstr "Snimiti Datoteku kao..."
+
+#. 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:420
+#, python-format
+msgid "%(hours)02.d:%(minutes)02.d:%(seconds)02.d"
+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:492
+#, python-format
+msgid "(%(filesize_unit)s/s)"
+msgstr "(%(filesize_unit)s/s)"
+
+#: ../src/filetransfers_window.py:528
+#: ../src/filetransfers_window.py:531
+msgid "Invalid File"
+msgstr "Neispravna Datoteka"
+
+#: ../src/filetransfers_window.py:528
+msgid "File: "
+msgstr "Datoteka: "
+
+#: ../src/filetransfers_window.py:532
+msgid "It is not possible to send empty files"
+msgstr "Nije moguće poslati prazne datoteke"
+
+#: ../src/filetransfers_window.py:552
+#: ../src/tooltips.py:511
+#: ../src/tooltips.py:629
+msgid "Name: "
+msgstr "Ime: "
+
+#: ../src/filetransfers_window.py:554
+#: ../src/tooltips.py:633
+msgid "Sender: "
+msgstr "Pošiljatelj: "
+
+#: ../src/filetransfers_window.py:742
+msgid "Pause"
+msgstr "Pauza"
+
+#: ../src/gajim-remote.py:82
+msgid "shows a help on specific command"
+msgstr "prikazuje pomoć za određenu naredbu"
+
+#. User gets help for the command, specified by this parameter
+#: ../src/gajim-remote.py:85
+msgid "command"
+msgstr "naredba"
+
+#: ../src/gajim-remote.py:86
+msgid "show help on command"
+msgstr "prikaži pomoć za komandu"
+
+#: ../src/gajim-remote.py:90
+msgid "Shows or hides the roster window"
+msgstr "Prikazuje ili skriva prozor liste"
+
+#: ../src/gajim-remote.py:94
+msgid "Popups a window with the next unread message"
+msgstr "Iskače prozor sa sljedećom nepročitanom porukom"
+
+#: ../src/gajim-remote.py:98
+msgid "Prints a list of all contacts in the roster. Each contact appear on a separate line"
+msgstr "Ispisuje listu svih kontakata na listi. Svaki kontakt pojavljuje se u odvojenoj liniji"
+
+#: ../src/gajim-remote.py:100
+#: ../src/gajim-remote.py:114
+#: ../src/gajim-remote.py:124
+#: ../src/gajim-remote.py:137
+#: ../src/gajim-remote.py:151
+#: ../src/gajim-remote.py:172
+#: ../src/gajim-remote.py:202
+#: ../src/gajim-remote.py:211
+#: ../src/gajim-remote.py:218
+#: ../src/gajim-remote.py:225
+#: ../src/gajim-remote.py:236
+msgid "account"
+msgstr "račun"
+
+#: ../src/gajim-remote.py:100
+msgid "show only contacts of the given account"
+msgstr "prikaži samo kontakte ovog računa"
+
+#: ../src/gajim-remote.py:105
+msgid "Prints a list of registered accounts"
+msgstr "Ispisuje listu registriranih računa"
+
+#: ../src/gajim-remote.py:109
+msgid "Changes the status of account or accounts"
+msgstr "Mjenja status jednog računa ili više njih"
+
+#. offline, online, chat, away, xa, dnd, invisible should not be translated
+#: ../src/gajim-remote.py:112
+msgid "status"
+msgstr "status"
+
+#: ../src/gajim-remote.py:112
+msgid "one of: offline, online, chat, away, xa, dnd, invisible "
+msgstr "jedno od: "
+
+#: ../src/gajim-remote.py:113
+#: ../src/gajim-remote.py:134
+#: ../src/gajim-remote.py:148
+msgid "message"
+msgstr "poruka"
+
+#: ../src/gajim-remote.py:113
+msgid "status message"
+msgstr "statusna poruka"
+
+#: ../src/gajim-remote.py:114
+msgid "change status of account \"account\". If not specified, try to change status of all accounts that have \"sync with global status\" option set"
+msgstr "izmjena statusa računa \"račun\". Ako nije određeno, pokušaj promjene statusa svih računa koji imaju podešenu opciju \"sinkronizacija sa globalnim statusom\""
+
+#: ../src/gajim-remote.py:120
+msgid "Shows the chat dialog so that you can send messages to a contact"
+msgstr "Prikazuje dialog razgovora kako bi mogli slati poruke kontaktu"
+
+#: ../src/gajim-remote.py:122
+msgid "JID of the contact that you want to chat with"
+msgstr "JID kontakta sa kojim želite razgovarati"
+
+#: ../src/gajim-remote.py:124
+#: ../src/gajim-remote.py:202
+msgid "if specified, contact is taken from the contact list of this account"
+msgstr "ako je označeno, kontak se uzima sa kontakt liste ovog računa"
+
+#: ../src/gajim-remote.py:129
+msgid "Sends new chat message to a contact in the roster. Both OpenPGP key and account are optional. If you want to set only 'account', without 'OpenPGP key', just set 'OpenPGP key' to ''."
+msgstr "Šalje novu poruku kontaktu na listi, OpenPGP ključ i račun su opcionalni. Ako želite postaviti samo 'račun', bez 'OpenPGP ključa', samo podesite 'OpenPGP ključ' na ''."
+
+#: ../src/gajim-remote.py:133
+#: ../src/gajim-remote.py:146
+msgid "JID of the contact that will receive the message"
+msgstr "JID kontakta koji će primiti poruku"
+
+#: ../src/gajim-remote.py:134
+#: ../src/gajim-remote.py:148
+msgid "message contents"
+msgstr "sadržaj poruke"
+
+#: ../src/gajim-remote.py:135
+#: ../src/gajim-remote.py:149
+msgid "pgp key"
+msgstr "pgp ključ"
+
+#: ../src/gajim-remote.py:135
+#: ../src/gajim-remote.py:149
+msgid "if specified, the message will be encrypted using this public key"
+msgstr "ako je označeno, poruka će biti kriptirana koristeći ovaj javni ključ"
+
+#: ../src/gajim-remote.py:137
+#: ../src/gajim-remote.py:151
+msgid "if specified, the message will be sent using this account"
+msgstr "ako je označeno, poruka će biti poslana koristeći ovaj račun"
+
+#: ../src/gajim-remote.py:142
+msgid "Sends new single message to a contact in the roster. Both OpenPGP key and account are optional. If you want to set only 'account', without 'OpenPGP key', just set 'OpenPGP key' to ''."
+msgstr "Šalje novu poruku kontaktu na listi, OpenPGP i račun su opcionalni. Ako želite postaviti samo 'račun', bez 'OpenPGP ključa', samo podesite 'OpenPGP ključ' na ''."
+
+#: ../src/gajim-remote.py:147
+msgid "subject"
+msgstr "tema"
+
+#: ../src/gajim-remote.py:147
+msgid "message subject"
+msgstr "tema poruke"
+
+#: ../src/gajim-remote.py:156
+msgid "Gets detailed info on a contact"
+msgstr "Daje detaljne informacije o kontaktu"
+
+#: ../src/gajim-remote.py:158
+#: ../src/gajim-remote.py:171
+#: ../src/gajim-remote.py:201
+#: ../src/gajim-remote.py:210
+msgid "JID of the contact"
+msgstr "JID kontakta"
+
+#: ../src/gajim-remote.py:162
+msgid "Gets detailed info on a account"
+msgstr "Daje detaljne informacije o računu"
+
+#: ../src/gajim-remote.py:164
+msgid "Name of the account"
+msgstr "Ime računa"
+
+#: ../src/gajim-remote.py:168
+msgid "Sends file to a contact"
+msgstr "Å alje datoteku kontaktu"
+
+#: ../src/gajim-remote.py:170
+msgid "file"
+msgstr "datoteka"
+
+#: ../src/gajim-remote.py:170
+msgid "File path"
+msgstr "Putanja datoteke"
+
+#: ../src/gajim-remote.py:172
+msgid "if specified, file will be sent using this account"
+msgstr "ako je označeno, datoteka će biti poslana koriteći ovaj račun"
+
+#: ../src/gajim-remote.py:177
+msgid "Lists all preferences and their values"
+msgstr "Prikatuje sve postavke i njihove vrijednosti"
+
+#: ../src/gajim-remote.py:181
+msgid "Sets value of 'key' to 'value'."
+msgstr "Postavlja vrijednost 'ključa' na 'vrijednost'."
+
+#: ../src/gajim-remote.py:183
+msgid "key=value"
+msgstr "ključ=vrijednost"
+
+#: ../src/gajim-remote.py:183
+msgid "'key' is the name of the preference, 'value' is the value to set it to"
+msgstr "'ključ' je ime postavke, 'vrijednost' je vrijednost na koju će se postaviti"
+
+#: ../src/gajim-remote.py:188
+msgid "Deletes a preference item"
+msgstr "Briše element postavke"
+
+#: ../src/gajim-remote.py:190
+msgid "key"
+msgstr "ključ"
+
+#: ../src/gajim-remote.py:190
+msgid "name of the preference to be deleted"
+msgstr "ime postavke koja će se brisati"
+
+#: ../src/gajim-remote.py:194
+msgid "Writes the current state of Gajim preferences to the .config file"
+msgstr "Zapisuje trenutno stanje Gajim postavku u .config datoteku"
+
+#: ../src/gajim-remote.py:199
+msgid "Removes contact from roster"
+msgstr "Uklanja kontakt sa liste"
+
+#: ../src/gajim-remote.py:208
+msgid "Adds contact to roster"
+msgstr "Dodaje kontakt na listu"
+
+#: ../src/gajim-remote.py:210
+msgid "jid"
+msgstr "jid"
+
+#: ../src/gajim-remote.py:211
+msgid "Adds new contact to this account"
+msgstr "Dodaje novi kontakt ovom računu"
+
+#: ../src/gajim-remote.py:216
+msgid "Returns current status (the global one unless account is specified)"
+msgstr "Vraća trenutni status (globalni ukoliko nije određen račun)"
+
+#: ../src/gajim-remote.py:223
+msgid "Returns current status message(the global one unless account is specified)"
+msgstr "Vraća trenutnu statusnu poruku (globalnu ukoliko nije određen račun)"
+
+#: ../src/gajim-remote.py:230
+msgid "Returns number of unreaded messages"
+msgstr "Vraća broj nepročitanih poruka"
+
+#: ../src/gajim-remote.py:234
+msgid "Open 'Start Chat' dialog"
+msgstr "Otvaranje dialoga 'Započeti Razgovor'"
+
+#: ../src/gajim-remote.py:236
+msgid "Starts chat, using this account"
+msgstr "Započinje razgovor, koristeći ovaj račun"
+
+#: ../src/gajim-remote.py:256
+msgid "Missing argument \"contact_jid\""
+msgstr "Nedostaje argument \"contact_jid\""
+
+#: ../src/gajim-remote.py:275
+#, python-format
+msgid ""
+"'%s' is not in your roster.\n"
+"Please specify account for sending the message."
+msgstr ""
+"'%s' nije na vašoj listi.\n"
+"Molimo odredite račun za slanje poruke."
+
+#: ../src/gajim-remote.py:278
+msgid "You have no active account"
+msgstr "nemate aktivnih računa"
+
+#: ../src/gajim-remote.py:321
+#, python-format
+msgid "Unknown D-Bus version: %s"
+msgstr "Nepoznata verzija D-Busa: %s"
+
+#: ../src/gajim-remote.py:348
+#, python-format
+msgid ""
+"Usage: %s %s %s \n"
+"\t %s"
+msgstr ""
+"Korištenje: %s %s %s \n"
+"\t %s"
+
+#: ../src/gajim-remote.py:351
+msgid "Arguments:"
+msgstr "Argumenti:"
+
+#: ../src/gajim-remote.py:355
+#, python-format
+msgid "%s not found"
+msgstr "%s nije pronađen"
+
+#: ../src/gajim-remote.py:359
+#, python-format
+msgid ""
+"Usage: %s command [arguments]\n"
+"Command is one of:\n"
+msgstr ""
+"Korištenje: %s naredba [argumenti]\n"
+"Naredba je jedna od:\n"
+
+#: ../src/gajim-remote.py:433
+#, python-format
+msgid ""
+"Argument \"%s\" is not specified. \n"
+"Type \"%s help %s\" for more info"
+msgstr ""
+"Argument \"%s\" nije određen. \n"
+"Unesite \"%s help %s\" za više informacija"
+
+#: ../src/gajim.py:48
+msgid "Gajim needs Xserver to run. Quiting..."
+msgstr "Gajim treba Xserver za pokretanje. Izlaz..."
+
+#: ../src/gajim.py:52
+msgid "Gajim needs PyGTK 2.6 or above"
+msgstr "Gajim treba pyGTK 2.6 ili viši"
+
+#: ../src/gajim.py:53
+msgid "Gajim needs PyGTK 2.6 or above to run. Quiting..."
+msgstr "Gajim needs PyGTK 2.6 ili viši za pokretanje. Izlaz..."
+
+#: ../src/gajim.py:55
+msgid "Gajim needs GTK 2.6 or above"
+msgstr "Gajim treba GTK 2.6 ili viši"
+
+#: ../src/gajim.py:56
+msgid "Gajim needs GTK 2.6 or above to run. Quiting..."
+msgstr "Gajim treba GTK 2.6 ili viši za pokretanje. Izlaz..."
+
+#: ../src/gajim.py:61
+msgid "GTK+ runtime is missing libglade support"
+msgstr "GTK+ nema podršku za libglade"
+
+#: ../src/gajim.py:63
+#, python-format
+msgid "Please remove your current GTK+ runtime and install the latest stable version from %s"
+msgstr "Molimo uklonite svoj trenutni GTK+ i instalirajte posljednju stabilnu verziju sa %s"
+
+#: ../src/gajim.py:65
+msgid "Please make sure that GTK+ and PyGTK have libglade support in your system."
+msgstr "Molimo provjerite da GTK+ i PyGTK imaju podršku za libglade na vašem sustavu"
+
+#: ../src/gajim.py:70
+msgid "Gajim needs PySQLite2 to run"
+msgstr "Gajim treba PySQLite2 za pokretanje"
+
+#. set the icon to all newly opened wind
+#: ../src/gajim.py:151
+msgid "Gajim is already running"
+msgstr "Gajim je već pokrenut"
+
+#: ../src/gajim.py:152
+msgid ""
+"Another instance of Gajim seems to be running\n"
+"Run anyway?"
+msgstr ""
+"Trenutno je već pokrenuta jedna instanca Gajima\n"
+"Svejedno pokrenuti?"
+
+#: ../src/gajim.py:267
+#, python-format
+msgid "HTTP (%s) Authorization for %s (id: %s)"
+msgstr "HTTP (%s) Autorizacija za %s (id: %s)"
+
+#: ../src/gajim.py:268
+msgid "Do you accept this request?"
+msgstr "Prihvaćate li ovaj zahtjev?"
+
+#: ../src/gajim.py:611
+#, python-format
+msgid "error while sending %s ( %s )"
+msgstr "greška prilikom slanja %s ( %s )"
+
+#: ../src/gajim.py:651
+msgid "Authorization accepted"
+msgstr "Autorizacija prihvaćena"
+
+#: ../src/gajim.py:652
+#, python-format
+msgid "The contact \"%s\" has authorized you to see his or her status."
+msgstr "Kontakt \"%s\" vam je dozvolio da vidite njegov ili njezin status."
+
+#: ../src/gajim.py:660
+#, python-format
+msgid "Contact \"%s\" removed subscription from you"
+msgstr "Kontankt \"%s\" je uklonio pretplatu od vas"
+
+#: ../src/gajim.py:661
+msgid "You will always see him or her as offline."
+msgstr "Uvijek ćete vidjeti njega ili nju kao nepriključenog."
+
+#: ../src/gajim.py:704
+#, python-format
+msgid "Contact with \"%s\" cannot be established"
+msgstr "Kontakt sa \"%s\" ne može biti uspostavljen"
+
+#: ../src/gajim.py:705
+#: ../src/common/connection.py:398
+msgid "Check your connection or try again later."
+msgstr "Provjerite svoju vezu ili pokušajte kasnije."
+
+#: ../src/gajim.py:849
+#: ../src/roster_window.py:1025
+#, python-format
+msgid "%s is now %s (%s)"
+msgstr "%s je sada %s (%s)"
+
+#: ../src/gajim.py:930
+msgid "Your passphrase is incorrect"
+msgstr "Vaša lozinka nije točna"
+
+#: ../src/gajim.py:931
+msgid "You are currently connected without your OpenPGP key."
+msgstr "Trenutno ste spojeni bez OpenPGP ključa."
+
+#. FIXME: find a better image
+#: ../src/gajim.py:1033
+#, python-format
+msgid "New E-mail on %(gmail_mail_address)s"
+msgstr "Novi E-mail na %(gmail_mail_address)s"
+
+#: ../src/gajim.py:1035
+#, python-format
+msgid "You have %d new E-mail message"
+msgid_plural "You have %d new E-mail messages"
+msgstr[0] "Imate %d novu E-mail poruku"
+msgstr[1] "Imate %d nove E-mail poruke"
+msgstr[2] "Imate %d novih E-mail poruka"
+
+#. each message has a 'From', 'Subject' and 'Snippet' field
+#: ../src/gajim.py:1040
+#, python-format
+msgid ""
+"\n"
+"From: %(from_address)s"
+msgstr ""
+"\n"
+"Od: %(from_address)s"
+
+#: ../src/gajim.py:1185
+#, python-format
+msgid "%s wants to send you a file."
+msgstr "%s vam želi poslati datoteku."
+
+#: ../src/gajim.py:1245
+#, python-format
+msgid "You successfully received %(filename)s from %(name)s."
+msgstr "Uspješno ste primili %(filename)s od %(name)s."
+
+#. ft stopped
+#: ../src/gajim.py:1249
+#, python-format
+msgid "File transfer of %(filename)s from %(name)s stopped."
+msgstr "Prijenos %(filename)s od %(name)s je zaustavljen."
+
+#: ../src/gajim.py:1262
+#, python-format
+msgid "You successfully sent %(filename)s to %(name)s."
+msgstr "Uspješno ste poslali %(filename)s %(name)s"
+
+#. ft stopped
+#: ../src/gajim.py:1266
+#, python-format
+msgid "File transfer of %(filename)s to %(name)s stopped."
+msgstr "Prijenos %(filename)s %(name)s je zaustavljen. "
+
+#: ../src/gajim.py:1295
+msgid "vCard publication succeeded"
+msgstr "Objava vCard uspješna"
+
+#: ../src/gajim.py:1295
+msgid "Your personal information has been published successfully."
+msgstr "Vaši osobni podaci su uspješno objavljeni."
+
+#: ../src/gajim.py:1304
+msgid "vCard publication failed"
+msgstr "Objava vCard neuspješna"
+
+#: ../src/gajim.py:1304
+msgid "There was an error while publishing your personal information, try again later."
+msgstr "Nastala je greška prilikom objavljivanja vaših osobnih podataka, pokušajte ponovno kasnije."
+
+#. it is good to notify the user
+#. in case he or she cannot see the output of the console
+#: ../src/gajim.py:1683
+msgid "Could not save your settings and preferences"
+msgstr "Nije moguće spremanje vaših postavki"
+
+#: ../src/gajim.py:1903
+msgid "Session Management support not available (missing gnome.ui module)"
+msgstr "Podrška za Upravljanje Seansama nije dostupna (nedostaje gnome.ui modul)"
+
+#: ../src/gajim.py:1932
+msgid "Migrating Logs..."
+msgstr "Selim Zapise..."
+
+#: ../src/gajim.py:1933
+msgid "Please wait while logs are being migrated..."
+msgstr "Pričekajte dok se odvija selidba zapisa..."
+
+#: ../src/gajim_themes_window.py:59
+msgid "Theme"
+msgstr "Tema"
+
+#. don't confuse translators
+#: ../src/gajim_themes_window.py:141
+msgid "theme name"
+msgstr "ime teme"
+
+#: ../src/gajim_themes_window.py:158
+msgid "You cannot delete your current theme"
+msgstr "Ne možete izbrisati svoju trenutnu temu"
+
+#: ../src/gajim_themes_window.py:159
+msgid "Please first choose another for your current theme."
+msgstr "Molimo vas da prvo odaberete neku drugu temu za trenutnu."
+
+#: ../src/groupchat_control.py:99
+msgid "Private Chat"
+msgstr "Privatni Razgovor"
+
+#: ../src/groupchat_control.py:99
+msgid "Private Chats"
+msgstr "Privanti Razgovori"
+
+#: ../src/groupchat_control.py:115
+msgid "Sending private message failed"
+msgstr "Slanje privatne poruke neuspješno"
+
+#. in second %s code replaces with nickname
+#: ../src/groupchat_control.py:117
+#, python-format
+msgid "You are no longer in room \"%s\" or \"%s\" has left."
+msgstr "Više niste u sobi \"%s\" ili je \"%s\" otišao."
+
+#: ../src/groupchat_control.py:129
+msgid "Group Chat"
+msgstr "Grupni Razgovor"
+
+#: ../src/groupchat_control.py:129
+msgid "Group Chats"
+msgstr "Grupni Razgovori"
+
+#: ../src/groupchat_control.py:308
+msgid "Insert Nickname"
+msgstr "Umetni _Nadimak"
+
+#: ../src/groupchat_control.py:702
+msgid "This room has no subject"
+msgstr "Ova soba nema naslov"
+
+#. do not print 'kicked by None'
+#: ../src/groupchat_control.py:801
+#, python-format
+msgid "%(nick)s has been kicked: %(reason)s"
+msgstr "%(nick)s je izbačen: %(reason)s"
+
+#: ../src/groupchat_control.py:805
+#, python-format
+msgid "%(nick)s has been kicked by %(who)s: %(reason)s"
+msgstr "%(nick)s je izbačen od strane %(who)s: %(reason)s"
+
+#. do not print 'banned by None'
+#: ../src/groupchat_control.py:812
+#, python-format
+msgid "%(nick)s has been banned: %(reason)s"
+msgstr "%(nick)s ima zabranjen pristup: %(reason)s"
+
+#: ../src/groupchat_control.py:816
+#, python-format
+msgid "%(nick)s has been banned by %(who)s: %(reason)s"
+msgstr "%(nick)s ima zabranjen pristup od strane %(who)s: %(reason)s"
+
+#: ../src/groupchat_control.py:824
+#, python-format
+msgid "You are now known as %s"
+msgstr "Od sada ste poznati kao %s"
+
+#: ../src/groupchat_control.py:826
+#, python-format
+msgid "%s is now known as %s"
+msgstr "%s je od sada poznat kao %s"
+
+#: ../src/groupchat_control.py:897
+#, python-format
+msgid "%s has left"
+msgstr "%s je napustio"
+
+#: ../src/groupchat_control.py:902
+#, python-format
+msgid "%s has joined the room"
+msgstr "%s se pridružio sobi"
+
+#. No status message
+#: ../src/groupchat_control.py:904
+#: ../src/roster_window.py:1028
+#, python-format
+msgid "%s is now %s"
+msgstr "%s je sada %s"
+
+#: ../src/groupchat_control.py:1022
+#: ../src/groupchat_control.py:1039
+#: ../src/groupchat_control.py:1132
+#: ../src/groupchat_control.py:1148
+#, python-format
+msgid "Nickname not found: %s"
+msgstr "Nadimak nije pronađen: %s "
+
+#: ../src/groupchat_control.py:1066
+#, python-format
+msgid "Invited %(contact_jid)s to %(room_jid)s."
+msgstr "Pozvali ste %(contact_jid)s na %(room_jid)s"
+
+#. %s is something the user wrote but it is not a jid so we inform
+#: ../src/groupchat_control.py:1073
+#: ../src/groupchat_control.py:1103
+#, python-format
+msgid "%s does not appear to be a valid JID"
+msgstr "%s ne izgleda kao valjani JID"
+
+#: ../src/groupchat_control.py:1185
+#, python-format
+msgid "No such command: /%s (if you want to send this, prefix it with /say)"
+msgstr "Ne postoji komanda: /%s (ako želite poslati to kao poruku, prefiksirajte je sa /say)"
+
+#: ../src/groupchat_control.py:1207
+#, python-format
+msgid "Commands: %s"
+msgstr "Komanda: %s"
+
+#: ../src/groupchat_control.py:1209
+#, python-format
+msgid "Usage: /%s <nickname|JID> [reason], bans the JID from the room. The nickname of an occupant may be substituted, but not if it contains \"@\". If the JID is currently in the room, he/she/it will also be kicked. Does NOT support spaces in nickname."
+msgstr "Korištenje: /%s <nickname|JID> [razlog], je zabranio pristup JID-u u sobu. Nadimak učesnika može biti zamijenjen, ali ne ako sadrži \"@\". Ako je JID trenutno u sobi, on/ona/ono će biti izbačen(a/o). Razmaci u imenima nisu podržani."
+
+#: ../src/groupchat_control.py:1215
+#, python-format
+msgid "Usage: /%s <nickname>, opens a private chat window to the specified occupant."
+msgstr "Način korištenja: /%s <nickname>, otvara privatni razgovor sa učesnikom"
+
+#: ../src/groupchat_control.py:1219
+#, python-format
+msgid "Usage: /%s, clears the text window."
+msgstr "Način korištenja: /%s, prazni tekstualni prozor"
+
+#: ../src/groupchat_control.py:1221
+#, python-format
+msgid "Usage: /%s [reason], closes the current window or tab, displaying reason if specified."
+msgstr "Način korištenja: /%s [razlog], zatvara trenutni prozor ili tab, i prikazuje razlog ako je specificiran."
+
+#: ../src/groupchat_control.py:1224
+#, python-format
+msgid "Usage: /%s, hide the chat buttons."
+msgstr "Način korištenja: /%s, sakriva dugmadi."
+
+#: ../src/groupchat_control.py:1226
+#, python-format
+msgid "Usage: /%s <JID> [reason], invites JID to the current room, optionally providing a reason."
+msgstr "Način korištenja: /%s <JID> [razlog], poziva JID u trenutnu sobu, opcionalno dajući razlog."
+
+#: ../src/groupchat_control.py:1230
+#, python-format
+msgid "Usage: /%s <room>@<server>[/nickname], offers to join room@server optionally using specified nickname."
+msgstr "Način korištenja: /%s <soba>@<poslužitelj>[/nadimak], nudi mogućnost spajanja na sobu@poslužitelj koristeći navedeni nadimak."
+
+#: ../src/groupchat_control.py:1234
+#, python-format
+msgid "Usage: /%s <nickname> [reason], removes the occupant specified by nickname from the room and optionally displays a reason. Does NOT support spaces in nickname."
+msgstr "Način korištenja: /%s <nickname> [razlog], uklanja učesnika specificiranog nadimkom iz sobe i opcionalno prikazuje razlog. NE podržava razmake u nadimku."
+
+#: ../src/groupchat_control.py:1239
+#, python-format
+msgid "Usage: /%s <action>, sends action to the current room. Use third person. (e.g. /%s explodes.)"
+msgstr "Način korištenja: /%s <action>, šalje akciju trenutnoj sobi. Koristi treću osobu. (npr. /%s eksplodira.)"
+
+#: ../src/groupchat_control.py:1243
+msgid "Usage: /%s <nickname> [message], opens a private message windowand sends message to the occupant specified by nickname."
+msgstr "Način korištenja: /%s <nickname> [poruka], otvara prozor privatne poruke i šalje poruku učesniku specificiranom pomoću nadimka."
+
+#: ../src/groupchat_control.py:1248
+#, python-format
+msgid "Usage: /%s <nickname>, changes your nickname in current room."
+msgstr "Način korištenja: /%s <nickname>, mijenja vaš nadimak u trenutnoj sobi."
+
+#: ../src/groupchat_control.py:1252
+msgid "Usage: /%s , display the names of room occupants."
+msgstr "Način korištenja: /%s , prikazuje imena učesnika u sobi."
+
+#: ../src/groupchat_control.py:1256
+#, python-format
+msgid "Usage: /%s [topic], displays or updates the current room topic."
+msgstr "Način korištenja: /%s [tema], prikazuje ili ažurira temu sobe."
+
+#: ../src/groupchat_control.py:1259
+#, python-format
+msgid "Usage: /%s <message>, sends a message without looking for other commands."
+msgstr "Način korištenja: /%s <message>, šalje poruku bez gledanja za ostale komande."
+
+#: ../src/groupchat_control.py:1262
+#, python-format
+msgid "No help info for /%s"
+msgstr "Nema informacija ni pomoći za /%s"
+
+#: ../src/groupchat_control.py:1304
+#, python-format
+msgid "Are you sure you want to leave room \"%s\"?"
+msgstr "Želite li napustiti sobu \"%s\"?"
+
+#: ../src/groupchat_control.py:1305
+msgid "If you close this window, you will be disconnected from this room."
+msgstr "Ako zatvorite ovaj prozor, biti ćete odspojen iz sobe."
+
+#: ../src/groupchat_control.py:1309
+msgid "Do _not ask me again"
+msgstr "_Ne pitaj me više"
+
+#: ../src/groupchat_control.py:1343
+msgid "Changing Subject"
+msgstr "Mijenjanje Teme"
+
+#: ../src/groupchat_control.py:1344
+msgid "Please specify the new subject:"
+msgstr "Molimo specificirajte novu temu:"
+
+#: ../src/groupchat_control.py:1352
+msgid "Changing Nickname"
+msgstr "Mijenjam Nadimak"
+
+#: ../src/groupchat_control.py:1353
+msgid "Please specify the new nickname you want to use:"
+msgstr "Molimo specificirajte novi nadimak ako ga želite koristiti:"
+
+#: ../src/groupchat_control.py:1379
+msgid "Bookmark already set"
+msgstr "Knjižna oznaka je već postavljena"
+
+#: ../src/groupchat_control.py:1380
+#, python-format
+msgid "Room \"%s\" is already in your bookmarks."
+msgstr "Soba \"%s\" je već u vašim knjižnim oznakama."
+
+#: ../src/groupchat_control.py:1389
+msgid "Bookmark has been added successfully"
+msgstr "Knjižna oznaka je bez uspješno dodana"
+
+#: ../src/groupchat_control.py:1390
+msgid "You can manage your bookmarks via Actions menu in your roster."
+msgstr "Možete upravljati vašim knjižnim oznakama pomoću izbornika Akcije u vašem spisku."
+
+#. ask for reason
+#: ../src/groupchat_control.py:1500
+#, python-format
+msgid "Kicking %s"
+msgstr "Izbacujem %s"
+
+#: ../src/groupchat_control.py:1501
+#: ../src/groupchat_control.py:1779
+msgid "You may specify a reason below:"
+msgstr "Možete specificirati razlog ispod:"
+
+#. ask for reason
+#: ../src/groupchat_control.py:1778
+#, python-format
+msgid "Banning %s"
+msgstr "Zabranjujem pristup %s"
+
+#: ../src/gtkexcepthook.py:51
+msgid "A programming error has been detected"
+msgstr "Otkrivena je bila greška u programiranju"
+
+#: ../src/gtkexcepthook.py:52
+msgid "It probably is not fatal, but should be reported to the developers nonetheless."
+msgstr "Najvjerojatnije nije kobna, ali ipak preporučamo, da ju javite programerima."
+
+#: ../src/gtkexcepthook.py:58
+msgid "_Report Bug"
+msgstr "_Prijavi Grešku"
+
+#: ../src/gtkexcepthook.py:81
+msgid "Details"
+msgstr "Detalji"
+
+#. we talk about file
+#: ../src/gtkgui_helpers.py:154
+#: ../src/gtkgui_helpers.py:169
+#, python-format
+msgid "Error: cannot open %s for reading"
+msgstr "Greška: nije moguće otvoriti %s za čitanje"
+
+#: ../src/gtkgui_helpers.py:298
+msgid "Error reading file:"
+msgstr "Greška pri čitanju datoteke:"
+
+#: ../src/gtkgui_helpers.py:301
+msgid "Error parsing file:"
+msgstr "Greška pri učitavanju datoteke:"
+
+#. do not traceback (could be a permission problem)
+#. we talk about a file here
+#: ../src/gtkgui_helpers.py:339
+#, python-format
+msgid "Could not write to %s. Session Management support will not work"
+msgstr "Nije moguće pisati u %s. Rukovanje sesijama neće biti moguće"
+
+#: ../src/gtkgui_helpers.py:717
+msgid "Extension not supported"
+msgstr "Produžetak nije podržan"
+
+#: ../src/gtkgui_helpers.py:718
+#, python-format
+msgid "Image cannot be saved in %(type)s format. Save as %(new_filename)s?"
+msgstr "Sliku nije moguće spremiti u %(type)s formatu. Spremiti kao %(new_filename)s?"
+
+#: ../src/gtkgui_helpers.py:727
+msgid "Save Image as..."
+msgstr "Snimiti Sliku kao..."
+
+#: ../src/history_manager.py:61
+msgid "Cannot find history logs database"
+msgstr "Nije moguće pronaći bazu podataka zabilješki povijesti"
+
+#. holds jid
+#: ../src/history_manager.py:104
+msgid "Contacts"
+msgstr "Kontakti"
+
+#. holds time
+#: ../src/history_manager.py:117
+#: ../src/history_manager.py:157
+#: ../src/history_window.py:85
+msgid "Date"
+msgstr "Datum"
+
+#. holds nickname
+#: ../src/history_manager.py:123
+#: ../src/history_manager.py:175
+msgid "Nickname"
+msgstr "Nadimak"
+
+#. holds message
+#: ../src/history_manager.py:131
+#: ../src/history_manager.py:163
+#: ../src/history_window.py:93
+msgid "Message"
+msgstr "Poruka"
+
+#. holds subject
+#: ../src/history_manager.py:138
+#: ../src/history_manager.py:169
+msgid "Subject"
+msgstr "Tema"
+
+#: ../src/history_manager.py:183
+msgid "Do you want to clean up the database? (STRONGLY NOT RECOMMENDED IF GAJIM IS RUNNING)"
+msgstr "Želite li očistiti bazu podataka? (NE PREPORUČUJEMO UKOLIKO JE GAJIM POKRENUT)"
+
+#: ../src/history_manager.py:185
+msgid ""
+"Normally allocated database size will not be freed, it will just become reusable. If you really want to reduce database filesize, click YES, else click NO.\n"
+"\n"
+"In case you click YES, please wait..."
+msgstr ""
+"Uobičajeno, veličina prikupljenog prostora za bazu podataka neće biti oslobođena, samo će postati ponovo koristiva. Ukoliko zaista želite smanjiti veličinu baze podataka, pritisnite Da, inače pritisnite Ne.\n"
+"\n"
+"Ukoliko pritisnite Da, pričekajte..."
+
+#: ../src/history_manager.py:391
+msgid "Exporting History Logs..."
+msgstr "Izvozim Zabilješke Povijesti..."
+
+#: ../src/history_manager.py:467
+#, python-format
+msgid "%(who)s on %(time)s said: %(message)s\n"
+msgstr "%(who)s %(time)s kaže: %(message)s\n"
+
+#: ../src/history_manager.py:467
+msgid "who"
+msgstr "tko"
+
+#: ../src/history_manager.py:505
+msgid "Do you really want to delete logs of the selected contact?"
+msgid_plural "Do you really want to delete logs of the selected contacts?"
+msgstr[0] "Da li zaista želite ukloniti zabilješke odabranog kontakta?"
+msgstr[1] "Da li zaista želite ukloniti zabilješke odabranih kontakata?"
+msgstr[2] ""
+
+#: ../src/history_manager.py:509
+#: ../src/history_manager.py:545
+msgid "This is an irreversible operation."
+msgstr "Ovo je nepovratna operacija."
+
+#: ../src/history_manager.py:542
+msgid "Do you really want to delete the selected message?"
+msgid_plural "Do you really want to delete the selected messages?"
+msgstr[0] "Da li zaista želite ukloniti odabranu poruku?"
+msgstr[1] "Da li zaista želite ukloniti odabrane poruke?"
+msgstr[2] ""
+
+#: ../src/history_window.py:102
+#: ../src/history_window.py:104
+#, python-format
+msgid "Conversation History with %s"
+msgstr "Povijest Razgovora sa %s"
+
+#: ../src/history_window.py:258
+#, python-format
+msgid "%(nick)s is now %(status)s: %(status_msg)s"
+msgstr "%(nick)s je trenutno %(status)s: %(status_msg)s"
+
+#: ../src/history_window.py:262
+#: ../src/notify.py:113
+#, python-format
+msgid "%(nick)s is now %(status)s"
+msgstr "%(nick)s je trenutno %(status)s"
+
+#: ../src/history_window.py:268
+#, python-format
+msgid "Status is now: %(status)s: %(status_msg)s"
+msgstr "Stauts je trenutno: %(status)s: %(status_msg)s"
+
+#: ../src/history_window.py:271
+#, python-format
+msgid "Status is now: %(status)s"
+msgstr "Status je trenutno: %(status)s"
+
+#: ../src/message_window.py:244
+msgid "Messages"
+msgstr "Poruke"
+
+#: ../src/message_window.py:245
+#, python-format
+msgid "%s - Gajim"
+msgstr "%s - Gajim"
+
+#: ../src/notify.py:111
+#, python-format
+msgid "%(nick)s Changed Status"
+msgstr "%(nick)s je Promjenio Status"
+
+#: ../src/notify.py:121
+#, python-format
+msgid "%(nickname)s Signed In"
+msgstr "%(nickname)s Se Prijavio"
+
+#: ../src/notify.py:129
+#, python-format
+msgid "%(nickname)s Signed Out"
+msgstr "%(nickname)s Se Odjavio"
+
+#: ../src/notify.py:141
+#, python-format
+msgid "New Single Message from %(nickname)s"
+msgstr "Nova Jedna Poruka od %(nickname)s"
+
+#: ../src/notify.py:150
+#, python-format
+msgid "New Private Message from room %s"
+msgstr "Nova Privatna Poruka iz sobe %s"
+
+#: ../src/notify.py:151
+#, python-format
+msgid "%(nickname)s: %(message)s"
+msgstr "%(nickname)s: %(message)s"
+
+#: ../src/notify.py:157
+#, python-format
+msgid "New Message from %(nickname)s"
+msgstr "Nova poruka od %(nickname)s"
+
+#: ../src/roster_window.py:131
+msgid "Merged accounts"
+msgstr "Spojeni računi"
+
+#: ../src/roster_window.py:288
+#: ../src/common/helpers.py:39
+msgid "Observers"
+msgstr "Posmatrači"
+
+#: ../src/roster_window.py:544
+#, python-format
+msgid "You are already in room %s"
+msgstr "Već ste u sobi %s"
+
+#: ../src/roster_window.py:548
+#: ../src/roster_window.py:2280
+msgid "You cannot join a room while you are invisible"
+msgstr "Nije moguće pridruživanje sobi dok ste nevidljivi"
+
+#. the 'manage gc bookmarks' item is showed
+#. below to avoid duplicate code
+#. add
+#: ../src/roster_window.py:748
+#, python-format
+msgid "to %s account"
+msgstr "na %s račun"
+
+#. disco
+#: ../src/roster_window.py:755
+#, python-format
+msgid "using %s account"
+msgstr "koristeći %s račun"
+
+#. new chat
+#. for chat_with
+#. for single message
+#: ../src/roster_window.py:763
+#: ../src/systray.py:193
+#: ../src/systray.py:198
+#, python-format
+msgid "using account %s"
+msgstr "koristeći račun %s"
+
+#. profile, avatar
+#: ../src/roster_window.py:772
+#, python-format
+msgid "of account %s"
+msgstr "računa %s"
+
+#: ../src/roster_window.py:831
+msgid "Manage Bookmarks..."
+msgstr "Upravljanje Knjižnim Oznakama..."
+
+#: ../src/roster_window.py:855
+#, python-format
+msgid "for account %s"
+msgstr "za račun %s"
+
+#. History manager
+#: ../src/roster_window.py:876
+msgid "History Manager"
+msgstr "Upravitelj Povijesti"
+
+#: ../src/roster_window.py:885
+msgid "_Join New Room"
+msgstr "_Pridruživanje Novoj Sobi"
+
+#: ../src/roster_window.py:1159
+#, python-format
+msgid "Transport \"%s\" will be removed"
+msgstr "Prijenos \"%s\" biti će uklonjen"
+
+#: ../src/roster_window.py:1159
+msgid "You will no longer be able to send and receive messages to contacts from this transport."
+msgstr "Više nećete biti u mogućnosti razmjenjivati poruka sa kontaktima ovog prijenosa."
+
+#: ../src/roster_window.py:1201
+msgid "Assign OpenPGP Key"
+msgstr "Dodjeli OpenPGP Ključ"
+
+#: ../src/roster_window.py:1202
+msgid "Select a key to apply to the contact"
+msgstr "Odaberite ključ za dodavanje kontaktu"
+
+#: ../src/roster_window.py:1358
+msgid "I would like to add you to my roster"
+msgstr "Želio bih vas dodati na svoju listu kontakata"
+
+#: ../src/roster_window.py:1410
+msgid "Re_name"
+msgstr "Pre_imenuj"
+
+#: ../src/roster_window.py:1441
+msgid "_Log on"
+msgstr "_Prijava"
+
+#: ../src/roster_window.py:1450
+msgid "Log _off"
+msgstr "_Odjava"
+
+#: ../src/roster_window.py:1545
+msgid "_Change Status Message"
+msgstr "_Izmjena Statusne Poruke"
+
+#: ../src/roster_window.py:1621
+msgid "Authorization has been sent"
+msgstr "Odobrenje je poslano"
+
+#: ../src/roster_window.py:1622
+#, python-format
+msgid "Now \"%s\" will know your status."
+msgstr "Sada će \"%s\" znati vaš status."
+
+#: ../src/roster_window.py:1646
+msgid "Subscription request has been sent"
+msgstr "Zahtjev za pretplatom je poslan"
+
+#: ../src/roster_window.py:1647
+#, python-format
+msgid "If \"%s\" accepts this request you will know his or her status."
+msgstr "Ako \"%s\" prihvati ovaj zahtjev znati će te njegov/njezin status."
+
+#: ../src/roster_window.py:1658
+msgid "Authorization has been removed"
+msgstr "Odobrenje je uklonjeno"
+
+#: ../src/roster_window.py:1659
+#, python-format
+msgid "Now \"%s\" will always see you as offline."
+msgstr "Sada će vas \"%s\" uvijek vidjeti kao odspojenog."
+
+#: ../src/roster_window.py:1822
+#, python-format
+msgid "Contact \"%s\" will be removed from your roster"
+msgstr "Kontakt \"%s\" biti će uklonjen sa vaše liste kontakata"
+
+#: ../src/roster_window.py:1826
+msgid "By removing this contact you also remove authorization resulting in him or her always seeing you as offline."
+msgstr "Uklanjanjem ovog kontakta ujedno i uklanjate odobrenje što konačno znači da će vas ta osoba uvijek vidjeti kao da ste odspojeni."
+
+#: ../src/roster_window.py:1830
+msgid "By removing this contact you also by default remove authorization resulting in him or her always seeing you as offline."
+msgstr "Uklanjanjem ovog kontakta ujedno po pretpostavljenom uklanjate i odobrenje što konačno znači da će vas ta osoba uvijek vidjeti kao da ste odspojeni."
+
+#: ../src/roster_window.py:1831
+msgid "I want this contact to know my status after removal"
+msgstr "Želim da ovaj kontakt zna moj status nakon uklanjanja"
+
+#: ../src/roster_window.py:1899
+msgid "Passphrase Required"
+msgstr "Potrebna Lozinka"
+
+#: ../src/roster_window.py:1900
+#, python-format
+msgid "Enter GPG key passphrase for account %s."
+msgstr "Unesite lozinku GPG ključa za račun %s."
+
+#: ../src/roster_window.py:1905
+msgid "Save passphrase"
+msgstr "Sačuvati lozinku"
+
+#: ../src/roster_window.py:1913
+msgid "Wrong Passphrase"
+msgstr "Kriva Lozinka"
+
+#: ../src/roster_window.py:1914
+msgid "Please retype your GPG passphrase or press Cancel."
+msgstr "Molimo ponovo utipkajte svoju GPG lozinku ili pritisnite Odustani"
+
+#: ../src/roster_window.py:1963
+#: ../src/roster_window.py:2020
+msgid "You are participating in one or more group chats"
+msgstr "Sudjelujete u jednom ili više grupnih razovora"
+
+#: ../src/roster_window.py:1964
+#: ../src/roster_window.py:2021
+msgid "Changing your status to invisible will result in disconnection from those group chats. Are you sure you want to go invisible?"
+msgstr "Promjena vašeg statusa u nevidljivo rezultirati će odspajanjem sa tih grupnih razgovora. Jeste li sigurni da želite ići na nevidljivo?"
+
+#: ../src/roster_window.py:1980
+msgid "No account available"
+msgstr "Nema dostupnih računa"
+
+#: ../src/roster_window.py:1981
+msgid "You must create an account before you can chat with other contacts."
+msgstr "Morate stvoriti račun prije nego što možete razgovarati sa drugim kontaktima."
+
+#: ../src/roster_window.py:2452
+#: ../src/roster_window.py:2458
+msgid "You have unread messages"
+msgstr "Imte nepročitane poruke"
+
+#: ../src/roster_window.py:2453
+#: ../src/roster_window.py:2459
+msgid "Messages will only be available for reading them later if you have history enabled."
+msgstr "Poruke će biti dostupne za čitanje i kasnije ukoliko imate omogućenu povijest."
+
+#: ../src/roster_window.py:3231
+#, python-format
+msgid "Drop %s in group %s"
+msgstr "Spusti %s u grupu %s"
+
+#: ../src/roster_window.py:3238
+#, python-format
+msgid "Make %s and %s metacontacts"
+msgstr "Učini %s i %s pseudokontaktima"
+
+#: ../src/roster_window.py:3408
+msgid "Change Status Message..."
+msgstr "Promijeni Statusnu Poruku..."
+
+#: ../src/systray.py:154
+msgid "_Change Status Message..."
+msgstr "_Promijeni Statusnu Poruku..."
+
+#: ../src/systray.py:231
+msgid "Hide this menu"
+msgstr "Sakrij ovaj izbornik"
+
+#: ../src/systraywin32.py:261
+#: ../src/systraywin32.py:280
+#, python-format
+msgid "Gajim - %d unread message"
+msgid_plural "Gajim - %d unread messages"
+msgstr[0] "Gajim - %d nepročitana poruka"
+msgstr[1] "Gajim - %d nepročitanih poruka"
+msgstr[2] ""
+
+#: ../src/tooltips.py:326
+#, python-format
+msgid " %d unread message"
+msgid_plural " %d unread messages"
+msgstr[0] "%d nepročitana poruka"
+msgstr[1] "%d nepročitanih poruka"
+
+#: ../src/tooltips.py:332
+#, python-format
+msgid " %d unread single message"
+msgid_plural " %d unread single messages"
+msgstr[0] "%d nepročitana jedna poruka"
+msgstr[1] "%d nepročitanih jednih poruka"
+
+#: ../src/tooltips.py:338
+#, python-format
+msgid " %d unread group chat message"
+msgid_plural " %d unread group chat messages"
+msgstr[0] "%d nepročitana poruka grupnih razgovora"
+msgstr[1] "%d nepročitanih poruka grupnih razgovora"
+
+#: ../src/tooltips.py:344
+#, python-format
+msgid " %d unread private message"
+msgid_plural " %d unread private messages"
+msgstr[0] "Gajim - %d nepročitana privatna poruka"
+msgstr[1] "%d nepročitanih privatnih poruka"
+
+#: ../src/tooltips.py:359
+#: ../src/tooltips.py:361
+#, python-format
+msgid "Gajim - %s"
+msgstr "Gajim - %s"
+
+#: ../src/tooltips.py:395
+msgid "Role: "
+msgstr "Uloga: "
+
+#: ../src/tooltips.py:396
+msgid "Affiliation: "
+msgstr "Pripadnost: "
+
+#: ../src/tooltips.py:398
+#: ../src/tooltips.py:537
+msgid "Resource: "
+msgstr "Resurs: "
+
+#: ../src/tooltips.py:407
+#: ../src/tooltips.py:540
+#: ../src/tooltips.py:565
+#: ../src/tooltips.py:676
+msgid "Status: "
+msgstr "Status: "
+
+#: ../src/tooltips.py:514
+msgid "Subscription: "
+msgstr "Pretplata: "
+
+#: ../src/tooltips.py:523
+msgid "OpenPGP: "
+msgstr "OpenPGP: "
+
+#: ../src/tooltips.py:570
+#, python-format
+msgid "Last status on %s"
+msgstr "Zadnji status na %s"
+
+#: ../src/tooltips.py:572
+#, python-format
+msgid "Since %s"
+msgstr "Od %s"
+
+#: ../src/tooltips.py:632
+msgid "Download"
+msgstr "Skidanje"
+
+#: ../src/tooltips.py:638
+msgid "Upload"
+msgstr "Podizanje"
+
+#: ../src/tooltips.py:645
+msgid "Type: "
+msgstr "Tip: "
+
+#: ../src/tooltips.py:651
+msgid "Transferred: "
+msgstr "Prenešeno: "
+
+#: ../src/tooltips.py:654
+#: ../src/tooltips.py:675
+msgid "Not started"
+msgstr "Nije početo"
+
+#: ../src/tooltips.py:658
+msgid "Stopped"
+msgstr "Zaustavljeno"
+
+#: ../src/tooltips.py:660
+#: ../src/tooltips.py:663
+msgid "Completed"
+msgstr "Završeno"
+
+#. stalled is not paused. it is like 'frozen' it stopped alone
+#: ../src/tooltips.py:671
+msgid "Stalled"
+msgstr "Zaustavljeno"
+
+#: ../src/tooltips.py:673
+msgid "Transferring"
+msgstr "Prenosim"
+
+#: ../src/tooltips.py:705
+msgid "This service has not yet responded with detailed information"
+msgstr "Ovaj servis nije još pružio detaljnije informacije"
+
+#: ../src/tooltips.py:708
+msgid ""
+"This service could not respond with detailed information.\n"
+"It is most likely legacy or broken"
+msgstr ""
+"Ova usluga nije mogla odgovoriti sa detaljnim informacijama.\n"
+"Najvjerojatnije je zastarjela ili neispravna"
+
+#. keep identation
+#: ../src/vcard.py:188
+msgid "Could not load image"
+msgstr "Nemogu učitati sliku"
+
+#: ../src/vcard.py:289
+msgid "?Client:Unknown"
+msgstr "?Klijent:Nepoznat"
+
+#: ../src/vcard.py:291
+msgid "?OS:Unknown"
+msgstr "?OS:Nepoznat"
+
+#: ../src/vcard.py:308
+#, python-format
+msgid "since %s"
+msgstr "od %s"
+
+#: ../src/vcard.py:332
+msgid "This contact is interested in your presence information, but you are not interested in his/her presence"
+msgstr "Ovaj kontakt je zainteresiran za informacije o vašem prisutstvu, ali vas ne zanimaju informacije o njegovom/njenom prisustvu"
+
+#: ../src/vcard.py:334
+msgid "You are interested in the contact's presence information, but he/she is not interested in yours"
+msgstr "Vi ste zainteresirani za informacije o prisustvu nekog kontakta, ali nju/njega ne interesira vaše prisutstvo"
+
+#: ../src/vcard.py:336
+msgid "You and the contact are interested in each other's presence information"
+msgstr "Vi i vaš kontakt ste zainteresirani za informacije o prisustvu jedno drugog"
+
+#. None
+#: ../src/vcard.py:338
+msgid "You are not interested in the contact's presence, and neither he/she is interested in yours"
+msgstr "Ne interesira vas prisutnost kontakta, niti vaša prisutnost zanima njega/nju"
+
+#: ../src/vcard.py:347
+msgid "You are waiting contact's answer about your subscription request"
+msgstr "Čekate odgovor kontakta o vašem zahtjevu za pretplatom"
+
+#: ../src/vcard.py:359
+#: ../src/vcard.py:382
+msgid " resource with priority "
+msgstr " resurs s prioritetom "
+
+#: ../src/vcard.py:458
+msgid "Without a connection you can not publish your contact information."
+msgstr "Bez veze ne možete objaviti informacije o sebi"
+
+#: ../src/vcard.py:491
+msgid "Without a connection, you can not get your contact information."
+msgstr "Bez veze ne možete dobiti informacije o kontaktu."
+
+#: ../src/vcard.py:495
+msgid "Personal details"
+msgstr "Osobni detalji"
+
+#: ../src/common/check_paths.py:35
+msgid "creating logs database"
+msgstr "kreiram bazu zabilješki"
+
+#: ../src/common/check_paths.py:82
+#: ../src/common/check_paths.py:93
+#: ../src/common/check_paths.py:100
+#, python-format
+msgid "%s is file but it should be a directory"
+msgstr "%s je datoteka ali bi trebao biti direktorij"
+
+#: ../src/common/check_paths.py:83
+#: ../src/common/check_paths.py:94
+#: ../src/common/check_paths.py:101
+#: ../src/common/check_paths.py:109
+msgid "Gajim will now exit"
+msgstr "Gajim će se sad isključiti"
+
+#: ../src/common/check_paths.py:108
+#, python-format
+msgid "%s is directory but should be file"
+msgstr "%s je direktorij ali bi trebao biti datoteka"
+
+#: ../src/common/check_paths.py:124
+#, python-format
+msgid "creating %s directory"
+msgstr "kreiram %s direktorij"
+
+#: ../src/common/exceptions.py:32
+msgid "pysqlite2 (aka python-pysqlite2) dependency is missing. Exiting..."
+msgstr "pysqlite2 (poznat kao python-pysqlite2) nedostaje. Izlazim..."
+
+#: ../src/common/exceptions.py:40
+msgid "Service not available: Gajim is not running, or remote_control is False"
+msgstr "Servis nije dostupan: Gajim nije pokrenut ili je remote_control Neistinito"
+
+#: ../src/common/exceptions.py:48
+msgid "D-Bus is not present on this machine or python module is missing"
+msgstr "D-Bus nije namješten na ovom sustavu ili nema python modula."
+
+#: ../src/common/exceptions.py:56
+msgid ""
+"Session bus is not available.\n"
+"Try reading http://trac.gajim.org/wiki/GajimDBus"
+msgstr ""
+"Sesijska sabirnica nije dostupna.\n"
+"Pokušajte pročitati http:/trac.gajim.org/wiki/GajimDBus"
+
+#: ../src/common/config.py:51
+msgid "Use DBus and Notification-Daemon to show notifications"
+msgstr "Koristi DBus i Obavještajni-Demon za prikazivanje obavijesti"
+
+#: ../src/common/config.py:55
+msgid "Time in minutes, after which your status changes to away."
+msgstr "Vrijeme u minutama, nako kojega će se vaš status promijeniti u odsutan."
+
+#: ../src/common/config.py:56
+msgid "Away as a result of being idle"
+msgstr "Odsutan, kao posljedica mirovanja"
+
+#: ../src/common/config.py:58
+msgid "Time in minutes, after which your status changes to not available."
+msgstr "Vrijeme u minutama, nakon kojega će se vaš status promijenti u nije dostupan."
+
+#: ../src/common/config.py:59
+msgid "Not available as a result of being idle"
+msgstr "Nije dostupan, kao posljedica mirovanja."
+
+#: ../src/common/config.py:77
+msgid "List (space separated) of rows (accounts and groups) that are collapsed"
+msgstr "Lista (odvojena razmacima) redova (računa i grupa) koji su otvoreni"
+
+#: ../src/common/config.py:83
+msgid ""
+"'always' - print time for every message.\n"
+"'sometimes' - print time every print_ichat_every_foo_minutes minute.\n"
+"'never' - never print time."
+msgstr ""
+"'uvijek' - ispisuj vrijeme za svaku poruku.\n"
+"'ponekad' - ispisuj vrijeme svakih print_ichat_every_foo_minutes minuta.\n"
+"'nikada' - nikada ne ispisuj vrijeme."
+
+#: ../src/common/config.py:84
+msgid "Value of fuzziness from 1 to 4 or 0 to disable fuzzyclock. 1 is the most precise clock, 4 the less precise one."
+msgstr "Vrijednost nejasnoće od 1 do 4 ili 0 za onemogućavanje nejasnog sata. 1 je najprecizniji sat, 4 najneprecizniji."
+
+#: ../src/common/config.py:87
+msgid "Treat * / _ pairs as possible formatting characters."
+msgstr "Koristi * / _ parove kao znakove za formatiranje."
+
+#: ../src/common/config.py:88
+msgid "If True, do not remove */_ . So *abc* will be bold but with * * not removed."
+msgstr "Ako je Istinito, nemoj odstraniti */_ . Tako će *abc* biti podebljano, ali omeđeno sa * *."
+
+#: ../src/common/config.py:98
+msgid "Character to add after nickname when using nick completion (tab) in group chat"
+msgstr "Znak za dodavanje nakon nadimka pri korištenju završavanja nadimka (tipka tab) u grupnom razgovoru"
+
+#: ../src/common/config.py:99
+msgid "Character to propose to add after desired nickname when desired nickname is used by someone else in group chat"
+msgstr "Znak koji treba pokušati dodati željenom nadimku ukoliko netko u grupnom razgovoru već koristi željeni nadimak"
+
+#: ../src/common/config.py:131
+msgid "Add * and [n] in roster title?"
+msgstr "Dodaj * i [n] u naslov liste?"
+
+#: ../src/common/config.py:132
+msgid "How many lines to remember from previous conversation when a chat tab/window is reopened."
+msgstr "Koliko će se linija pamtiti iz prošlih razgovora kada se prozor/tab razgovora ponovno otvori."
+
+#: ../src/common/config.py:133
+msgid "How many minutes should last lines from previous conversation last."
+msgstr "Koliko minuta trebaju trajati linije iz prošlog razgovora."
+
+#: ../src/common/config.py:134
+msgid "Send message on Ctrl+Enter and with Enter make new line (Mirabilis ICQ Client default behaviour)."
+msgstr "Pošalji poruku sa Ctrl+Enter i sa Enter napravi novu liniju. (Pretpostavljeno ponašanje Mirabilis ICQ klijenta)"
+
+#: ../src/common/config.py:136
+msgid "How many lines to store for Ctrl+KeyUP."
+msgstr "Koliko linija se sprema za Ctrl+TipkaGORE"
+
+#: ../src/common/config.py:139
+#, python-format
+msgid "Either custom url with %s in it where %s is the word/phrase or 'WIKTIONARY' which means use wiktionary."
+msgstr "Ili je osobni url sa %s u njemu gdje je %s riječ ili fraza ili 'WIKTIONARY' sta znaci da koristi wiktionary."
+
+#: ../src/common/config.py:142
+msgid "If checked, Gajim can be controlled remotely using gajim-remote."
+msgstr "Ako je označeno, Gajim se može kontrolirati preko gajim-remote-a."
+
+#: ../src/common/config.py:145
+msgid "When not printing time for every message (print_time==sometimes), print it every x minutes"
+msgstr "Ako se ne ispisuje vrijeme za svaku poruku (print_time==ponekad), ispisati ga svakih x minuta"
+
+#: ../src/common/config.py:146
+msgid "Ask before closing a group chat tab/window."
+msgstr "Pitaj prije zatvaranja taba/prozora razgovora grupe."
+
+#: ../src/common/config.py:147
+msgid "Always ask before closing group chat tab/window in this space separated list of room jids."
+msgstr "Uvijek pitaj prije zatvaranja taba/prozora razgovora grupe u ovoj razmakom odjeljenoj listi JID konatakta."
+
+#: ../src/common/config.py:148
+msgid "Never ask before closing group chat tab/window in this space separated list of room jids."
+msgstr "Nikad ne pitaj prije zatvaranja taba/prozora razgovora grupe u ovoj razmacima podjeljenoj listi JID kontakata."
+
+#: ../src/common/config.py:151
+msgid "Overrides the host we send for File Transfer in case of address translation/port forwarding."
+msgstr "Prepisuje poslužitelja kojega koristimo za prijenos datoteka u slučaju prosljeđivanja"
+
+#: ../src/common/config.py:153
+msgid "IEC standard says KiB = 1024 bytes, KB = 1000 bytes."
+msgstr "IEC standard definira KiB = 1024 bajtova, KB = 1000 bajtova"
+
+#: ../src/common/config.py:161
+msgid "Show tab when only one conversation?"
+msgstr "Prikaži tab ako je otvoren samo jedan razgovor?"
+
+#: ../src/common/config.py:162
+msgid "Show tabbed notebook border in chat windows?"
+msgstr "Prikaži granicu notesa sa tabovima u prozorima razgovora?"
+
+#: ../src/common/config.py:163
+msgid "Show close button in tab?"
+msgstr "Prikaži dugme za zatvaranje u tabu?"
+
+#: ../src/common/config.py:176
+msgid "A semicolon-separated list of words that will be highlighted in multi-user chat."
+msgstr "Lista riječi podjeljena točka-zarezom će biti označena u razgovoru više korisnika."
+
+#: ../src/common/config.py:177
+msgid "If True, quits Gajim when X button of Window Manager is clicked. This setting is taken into account only if trayicon is used."
+msgstr "Ako je Istinito, Gajim se završava kad je pritisnuto X dugme. Ova postavka je upotrebljena samo ako je trayicon u upotrebi."
+
+#: ../src/common/config.py:178
+msgid "If True, Gajim registers for xmpp:// on each startup."
+msgstr "Ako je Istinito, Gajim registrira za xmpp:// pri svakom pokretanju."
+
+#: ../src/common/config.py:179
+msgid "If True, Gajim will display an icon on each tab containing unread messages. Depending on the theme, this icon may be animated."
+msgstr "Ako je Istinito, Gajim će prikazvati ikonu na svakom tabu koji sadrži nepročitane poruke. Ovisno o temi, ikona može biti i animirana."
+
+#: ../src/common/config.py:180
+msgid "If True, Gajim will display the status message, if not empty, for every contact under the contact name in roster window"
+msgstr "Ako je Istinito, Gajim će prikazivati statusnu poruku, ako nije prazna, za svaki kontakt pod imenom kontakta na listi."
+
+#: ../src/common/config.py:182
+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."
+msgstr "Ako je Istinito, će Gajim poslati upit za avatar svaki kontakt, koji nije imao avatar ili je onaj u memoriji prestar"
+
+#: ../src/common/config.py:183
+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."
+msgstr "Ako je Neistinito, više nećete vidjeti statusnu poruku u razgovorima, kada kontakt promjeni svoj status i/ili statusnu poruku."
+
+#: ../src/common/config.py:184
+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 status and/or his or her status message. If \"all\" Gajim will print all status messages. If \"in_and_out\", gajim will only print FOO enters/leaves room"
+msgstr "može biti \"ništa\", \"sve\" ili \"ulaz_i_izlaz\". Ako je \"ništa\", Gajim više neće ispisivati statusnu liniju u grupnim razgovorima kada član promjeni svoj status ili izmjeni statusnu poruku. Ako je \"sve\" Gajim će prikazivati sve statusne poruke. Ako je \"ulaz_i_izlaz\" Gajim će prikazivati samo poruke tipa FOO je ušao/izašao u/iz sobe"
+
+#: ../src/common/config.py:187
+msgid "Don't show avatar for the transport itself."
+msgstr "Ne prikazuj avatar za sam transport."
+
+#: ../src/common/config.py:189
+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 pending events."
+msgstr "Ako je Istinito, i instalirane verzije GTK+ i PyGTK su barem 2.8, neka prozor bljeska (pretpostavljeno ponašanje u većini Upravitelja Prozorima) pri novim događajima."
+
+#: ../src/common/config.py:191
+msgid "Jabberd1.4 does not like sha info when one join a password protected room. Turn this option to False to stop sending sha info in groupchat presences"
+msgstr "Jabberd1.4 ne voli sha informacije kada netko uđe u sobu zaštićenu lozinkom. Isključite ovu opciju da prestanete slati sha informacije u obavjestima o prisutnosti u grupnim razgovorima"
+
+#. always, never, peracct, pertype should not be translated
+#: ../src/common/config.py:194
+msgid ""
+"Controls the window where new messages are placed.\n"
+"'always' - All messages are sent to a single window.\n"
+"'never' - All messages get their own window.\n"
+"'peracct' - Messages for each account are sent to a specific window.\n"
+"'pertype' - Each message type (e.g., chats vs. groupchats) are sent to a specific window. Note, changing this option requires restarting Gajim before the changes will take effect"
+msgstr ""
+"'uvijek' - Sve poruke su poslane u isti prozor.\n"
+"'nikad' - Svaka poruka dobiva svoj prozor.\n"
+"'zaracun' - Poruke za svaki račun su poslane u svoj prozor.\n"
+"'zatip' - Svaki tip poruke (npr., razgovori i grupni razgovori) je poslan u svoj prozor. Promjena ove opcije zahtijeva ponovno pokretanje Gajima"
+
+#: ../src/common/config.py:195
+msgid "If False, you will no longer see the avatar in the chat window"
+msgstr "Ako je Neistinito, nećete više vidjeti avatar u prozoru razgovora"
+
+#: ../src/common/config.py:196
+msgid "If True, pressing the escape key closes a tab/window"
+msgstr "Ako je Istinito, pritisak na 'esc' tipku zatvara tab/prozor"
+
+#: ../src/common/config.py:197
+msgid "Hides the buttons in group chat window"
+msgstr "Sakrije dugmad u prozoru grupnog razgovora"
+
+#: ../src/common/config.py:198
+msgid "Hides the buttons in two persons chat window"
+msgstr "Sakrije dugme u prozoru razgovora dviju osoba"
+
+#: ../src/common/config.py:199
+msgid "Hides the banner in a group chat window"
+msgstr "Sakrije baner u prozoru grupnog razgovora"
+
+#: ../src/common/config.py:200
+msgid "Hides the banner in two persons chat window"
+msgstr "Sakrije baner u prozoru razgovora dviju osoba"
+
+#: ../src/common/config.py:201
+msgid "Hides the room occupants list in groupchat window"
+msgstr "Sakrije listu učesnika u prozoru grupnog razgovora"
+
+#: ../src/common/config.py:202
+msgid "Merge consecutive nickname in chat window"
+msgstr "Spajanje toka po nadimcima u prozoru razgovora"
+
+#: ../src/common/config.py:203
+msgid "Indentation when using merge consecutive nickame"
+msgstr "Uvlačenje pri korištenju spajanja toka po nadimcima"
+
+#: ../src/common/config.py:204
+msgid "List of colors that will be used to color nicknames in groupchats"
+msgstr "Lista boja koje će biti korištene za bojanje nadimaka u grupnim razgovorima"
+
+#. yes, no, ask
+#: ../src/common/config.py:237
+msgid "Jabberd2 workaround"
+msgstr "Jabberd2 workaround"
+
+#: ../src/common/config.py:241
+msgid "If checked, Gajim will use your IP and proxies defined in file_transfer_proxies option for file transfer."
+msgstr "Ako je označeno, Gajim če koristiti vašu IP adresu i proxy koji je definiran u file_transfer_proxies opcijama za prijenos."
+
+#: ../src/common/config.py:297
+msgid "Sleeping"
+msgstr "Spavam"
+
+#: ../src/common/config.py:298
+msgid "Back soon"
+msgstr "Vraćam se ubrzo"
+
+#: ../src/common/config.py:298
+msgid "Back in some minutes."
+msgstr "Vraćam se za nekoliko minuta."
+
+#: ../src/common/config.py:299
+msgid "Eating"
+msgstr "Jedem"
+
+#: ../src/common/config.py:299
+msgid "I'm eating, so leave me a message."
+msgstr "Jedem, ostavite mi poruku."
+
+#: ../src/common/config.py:300
+msgid "Movie"
+msgstr "Film"
+
+#: ../src/common/config.py:300
+msgid "I'm watching a movie."
+msgstr "Gledam film."
+
+#: ../src/common/config.py:301
+msgid "Working"
+msgstr "Radim."
+
+#: ../src/common/config.py:301
+msgid "I'm working."
+msgstr "Radim."
+
+#: ../src/common/config.py:302
+msgid "Phone"
+msgstr "Telefon"
+
+#: ../src/common/config.py:302
+msgid "I'm on the phone."
+msgstr "Telefoniram."
+
+#: ../src/common/config.py:303
+msgid "Out"
+msgstr "Vani"
+
+#: ../src/common/config.py:303
+msgid "I'm out enjoying life"
+msgstr "Vani uživam život"
+
+#: ../src/common/config.py:312
+msgid "Sound to play when a MUC message contains one of the words in muc_highlight_words, or when a MUC message contains your nickname."
+msgstr "Zvuk koji će biti pušten kad neka MUC poruka sadrži neku riječ iz muc_highlight_words, ili kad neka MUC poruka sadrži vaš nadimak."
+
+#: ../src/common/config.py:313
+msgid "Sound to play when any MUC message arrives. (This setting is taken into account only if notify_on_all_muc_messages is True)"
+msgstr "Zvuk koji će biti pušten kad je primljena neka MUC poruka. (Ova postavka je postavljena samo ako je notify_on_all_muc_messages Istinito)"
+
+#: ../src/common/config.py:321
+#: ../src/common/optparser.py:185
+msgid "green"
+msgstr "zelena"
+
+#: ../src/common/config.py:325
+#: ../src/common/optparser.py:171
+msgid "grocery"
+msgstr "namirnice"
+
+#: ../src/common/config.py:329
+msgid "human"
+msgstr "ljudska"
+
+#: ../src/common/config.py:333
+msgid "marine"
+msgstr "morska"
+
+#: ../src/common/connection.py:172
+#, python-format
+msgid "Connection with account \"%s\" has been lost"
+msgstr "Veza sa računom \"%s\" je izgubljena"
+
+#: ../src/common/connection.py:173
+msgid "To continue sending and receiving messages, you will need to reconnect."
+msgstr "Ako želite nastaviti sa slanjem i primanjem poruka, morati će te se ponovno spojiti."
+
+#: ../src/common/connection.py:185
+#: ../src/common/connection.py:211
+#, python-format
+msgid "Transport %s answered wrongly to register request."
+msgstr "Prijenos %s je krivo odgovorio na poziv za registraciju."
+
+#. wrong answer
+#: ../src/common/connection.py:210
+msgid "Invalid answer"
+msgstr "Nepravilan odgovor"
+
+#: ../src/common/connection.py:397
+#: ../src/common/connection.py:433
+#: ../src/common/connection.py:857
+#, python-format
+msgid "Could not connect to \"%s\""
+msgstr "Nije moguća veza sa \"%s\""
+
+#: ../src/common/connection.py:411
+#, python-format
+msgid "Connected to server %s:%s with %s"
+msgstr "Povezan na poslužitelj %s:%s sa %s"
+
+#: ../src/common/connection.py:434
+msgid "Check your connection or try again later"
+msgstr "Provjerite vašu vezu ili pokušajte ponovno kasnije"
+
+#: ../src/common/connection.py:459
+#, python-format
+msgid "Authentication failed with \"%s\""
+msgstr "Autentifikacija sa \"%s\" nije uspjela"
+
+#: ../src/common/connection.py:460
+msgid "Please check your login and password for correctness."
+msgstr "Molimo vas da provjerite korisničko ime i lozinku za greške."
+
+#. We didn't set a passphrase
+#: ../src/common/connection.py:573
+msgid "OpenPGP passphrase was not given"
+msgstr "Lozinka za OpenPGP nije unešena"
+
+#. %s is the account name here
+#: ../src/common/connection.py:575
+#, python-format
+msgid "You will be connected to %s without OpenPGP."
+msgstr "Biti će te spojeni na %s bez OpenPGP-a."
+
+#. do not show I'm invisible!
+#: ../src/common/connection.py:612
+msgid "invisible"
+msgstr "nevidljiv"
+
+#: ../src/common/connection.py:613
+msgid "offline"
+msgstr "odspojen"
+
+#: ../src/common/connection.py:614
+#, python-format
+msgid "I'm %s"
+msgstr "Ja sam %s"
+
+#. we're not english
+#: ../src/common/connection.py:699
+msgid "[This message is encrypted]"
+msgstr "[Ova poruka je kriptirana]"
+
+#: ../src/common/connection.py:742
+#, python-format
+msgid ""
+"Subject: %s\n"
+"%s"
+msgstr ""
+"Tema: %s\n"
+"%s"
+
+#: ../src/common/connection.py:795
+#: ../src/common/connection_handlers.py:1511
+msgid "I would like to add you to my roster."
+msgstr "Želio bih te dodati na moju listu kontakata."
+
+#: ../src/common/connection_handlers.py:49
+msgid "Unable to load idle module"
+msgstr "Nije moguće učitati modul idle"
+
+#: ../src/common/connection_handlers.py:581
+#, python-format
+msgid "Registration information for transport %s has not arrived in time"
+msgstr "Registracijske informacije za transport %s nisu došle na vrijeme"
+
+#. password required to join
+#. we are banned
+#. room does not exist
+#: ../src/common/connection_handlers.py:1450
+#: ../src/common/connection_handlers.py:1453
+#: ../src/common/connection_handlers.py:1456
+#: ../src/common/connection_handlers.py:1459
+#: ../src/common/connection_handlers.py:1462
+#: ../src/common/connection_handlers.py:1465
+#: ../src/common/connection_handlers.py:1473
+msgid "Unable to join room"
+msgstr "Nije moguće pridružiti se sobi"
+
+#: ../src/common/connection_handlers.py:1451
+msgid "A password is required to join this room."
+msgstr "Potrebna je lozinka za pridruživanje ovoj sobi."
+
+#: ../src/common/connection_handlers.py:1454
+msgid "You are banned from this room."
+msgstr "Zabranjen vam je pristup ovoj sobi."
+
+#: ../src/common/connection_handlers.py:1457
+msgid "Such room does not exist."
+msgstr "Takva soba ne postoji."
+
+#: ../src/common/connection_handlers.py:1460
+msgid "Room creation is restricted."
+msgstr "Stvaranje soba je ograničeno."
+
+#: ../src/common/connection_handlers.py:1463
+msgid "Your registered nickname must be used."
+msgstr "Morate koristiti vaš registrirani nadimak."
+
+#: ../src/common/connection_handlers.py:1466
+msgid "You are not in the members list."
+msgstr "Niste u listi članova."
+
+#: ../src/common/connection_handlers.py:1474
+msgid ""
+"Your desired nickname is in use or registered by another occupant.\n"
+"Please specify another nickname below:"
+msgstr ""
+"Vaš željeni nadimak se trenutno koristi ili je registriran od strane nekog od učesnika.\n"
+"Molimo niže odredite drugi nadimak:"
+
+#. BE CAREFUL: no con.updateRosterItem() in a callback
+#: ../src/common/connection_handlers.py:1519
+#, python-format
+msgid "we are now subscribed to %s"
+msgstr "sada smo pretplaćeni na %s"
+
+#: ../src/common/connection_handlers.py:1521
+msgid "unsubscribe request from %s"
+msgstr "Zahtjev za ukidanjem pretplate od %s"
+
+#: ../src/common/connection_handlers.py:1523
+#, python-format
+msgid "we are now unsubscribed from %s"
+msgstr "sada smo ukinuli pretplatu za %s"
+
+#: ../src/common/connection_handlers.py:1680
+#, 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 ne poštuje RFC pravila. Neće biti dodan na vašu listu kontakata. Upotrijebite alate za upravljanje listom kontakata kao što je http://jru.jabberstudio.org/ za uklanjanje"
+
+#: ../src/common/helpers.py:100
+msgid "Invalid character in username."
+msgstr "Neispravan znak u korisničkom imenu."
+
+#: ../src/common/helpers.py:105
+msgid "Server address required."
+msgstr "Potrebna je adresa poslužitelja."
+
+#: ../src/common/helpers.py:110
+msgid "Invalid character in hostname."
+msgstr "Neispravan znak u imenu računala."
+
+#: ../src/common/helpers.py:116
+msgid "Invalid character in resource."
+msgstr "Neispravan znak u resursu."
+
+#. GiB means gibibyte
+#: ../src/common/helpers.py:156
+#, python-format
+msgid "%s GiB"
+msgstr "%s GiB"
+
+#. GB means gigabyte
+#: ../src/common/helpers.py:159
+#, python-format
+msgid "%s GB"
+msgstr "%s GB"
+
+#. MiB means mibibyte
+#: ../src/common/helpers.py:163
+#, python-format
+msgid "%s MiB"
+msgstr "%s MiB"
+
+#. MB means megabyte
+#: ../src/common/helpers.py:166
+#, python-format
+msgid "%s MB"
+msgstr "%s MB"
+
+#. KiB means kibibyte
+#: ../src/common/helpers.py:170
+#, python-format
+msgid "%s KiB"
+msgstr "%s KiB"
+
+#. KB means kilo bytes
+#: ../src/common/helpers.py:173
+#, python-format
+msgid "%s KB"
+msgstr "%s KB"
+
+#. B means bytes
+#: ../src/common/helpers.py:176
+#, python-format
+msgid "%s B"
+msgstr "%s B"
+
+#: ../src/common/helpers.py:205
+msgid "_Busy"
+msgstr "_Zaposlen"
+
+#: ../src/common/helpers.py:207
+msgid "Busy"
+msgstr "Zaposlen"
+
+#: ../src/common/helpers.py:210
+msgid "_Not Available"
+msgstr "_Nedostupan"
+
+#: ../src/common/helpers.py:212
+msgid "Not Available"
+msgstr "Nedostupan"
+
+#: ../src/common/helpers.py:215
+msgid "_Free for Chat"
+msgstr "_Slobodan za razgovor"
+
+#: ../src/common/helpers.py:217
+msgid "Free for Chat"
+msgstr "Slobodan za razgovor"
+
+#: ../src/common/helpers.py:220
+msgid "_Available"
+msgstr "_Dostupan"
+
+#: ../src/common/helpers.py:222
+msgid "Available"
+msgstr "Dostupan"
+
+#: ../src/common/helpers.py:224
+msgid "Connecting"
+msgstr "Povezujem"
+
+#: ../src/common/helpers.py:227
+msgid "A_way"
+msgstr "O_dsutan"
+
+#: ../src/common/helpers.py:229
+msgid "Away"
+msgstr "Odsutan"
+
+#: ../src/common/helpers.py:232
+msgid "_Offline"
+msgstr "_Odspojen"
+
+#: ../src/common/helpers.py:234
+msgid "Offline"
+msgstr "Odspojen"
+
+#: ../src/common/helpers.py:237
+msgid "_Invisible"
+msgstr "_Nevidljiv"
+
+#: ../src/common/helpers.py:243
+msgid "?contact has status:Unknown"
+msgstr "?kontakt ima status:Nepoznat"
+
+#: ../src/common/helpers.py:245
+msgid "?contact has status:Has errors"
+msgstr "?kontakt ima status:Ima greške"
+
+#: ../src/common/helpers.py:250
+msgid "?Subscription we already have:None"
+msgstr "?Pretplata koju već imamo:Ništa"
+
+#: ../src/common/helpers.py:252
+msgid "To"
+msgstr "Za"
+
+#: ../src/common/helpers.py:254
+msgid "From"
+msgstr "Od"
+
+#: ../src/common/helpers.py:256
+msgid "Both"
+msgstr "Oboje"
+
+#: ../src/common/helpers.py:264
+msgid "?Ask (for Subscription):None"
+msgstr "?Pitaj (za Pretplatu):Ništa"
+
+#: ../src/common/helpers.py:266
+msgid "Subscribe"
+msgstr "Pretplatite se"
+
+#: ../src/common/helpers.py:275
+msgid "?Group Chat Contact Role:None"
+msgstr "?Uloga Kontakta u Grupnom Razgvoru:Nikakva"
+
+#: ../src/common/helpers.py:278
+msgid "Moderators"
+msgstr "Moderatori"
+
+#: ../src/common/helpers.py:280
+msgid "Moderator"
+msgstr "Moderator"
+
+#: ../src/common/helpers.py:283
+msgid "Participants"
+msgstr "Sudionici"
+
+#: ../src/common/helpers.py:285
+msgid "Participant"
+msgstr "Sudionik"
+
+#: ../src/common/helpers.py:288
+msgid "Visitors"
+msgstr "Posjetitelji"
+
+#: ../src/common/helpers.py:290
+msgid "Visitor"
+msgstr "Posjetitelj"
+
+#: ../src/common/helpers.py:326
+msgid "is paying attention to the conversation"
+msgstr "obraća pažnju na razgovor"
+
+#: ../src/common/helpers.py:328
+msgid "is doing something else"
+msgstr "radi nešto drugo"
+
+#: ../src/common/helpers.py:330
+msgid "is composing a message..."
+msgstr "piše poruku..."
+
+#. paused means he or she was compoing but has stopped for a while
+#: ../src/common/helpers.py:333
+msgid "paused composing a message"
+msgstr "stanka pri pisanju poruke"
+
+#: ../src/common/helpers.py:335
+msgid "has closed the chat window or tab"
+msgstr "je zatvorio/zatvorila prozor za razgovor"
+
+#. we talk about a file
+#: ../src/common/optparser.py:60
+#, python-format
+msgid "error: cannot open %s for reading"
+msgstr "greška: nemogu otvoriti %s za čitanje"
+
+#: ../src/common/optparser.py:171
+msgid "gtk+"
+msgstr "gtk+"
+
+#: ../src/common/optparser.py:180
+#: ../src/common/optparser.py:181
+msgid "cyan"
+msgstr "cijan"
+
+#~ msgid "Automatically authorize contact"
+#~ msgstr "Automatski autoriziraj kontakt"
+#~ msgid "Send File"
+#~ msgstr "Pošalji Datoteku"
+#~ msgid "Underline"
+#~ msgstr "Podcrtano"
+
+
diff --git a/po/sk.po b/po/sk.po
index ac12c3783..4be9bf709 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -1982,7 +1982,7 @@ msgstr "Extra adresa:"
#. Family Name
#: ../data/glade/vcard_information_window.glade.h:15
msgid "Family:"
-msgstr "Priezvysko:"
+msgstr "Priezvisko:"
#: ../data/glade/vcard_information_window.glade.h:16
msgid "Format: YYYY-MM-DD"
diff --git a/scripts/gajim b/scripts/gajim
index 7fed98d39..fb83a4f84 100644
--- a/scripts/gajim
+++ b/scripts/gajim
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
## gajim
##
## Contributors for this file:
@@ -29,4 +29,4 @@ fi
cd PREFIX/share/gajim/src
export PYTHONPATH="$PYTHONPATH:PREFIXLIB/gajim"
-exec PYTHON_EXEC -OO gajim.py $@
+exec -a gajim PYTHON_EXEC -OO gajim.py $@
diff --git a/src/Makefile b/src/Makefile
index 6b40fc1df..7d5053885 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,21 +1,24 @@
# Set the C flags to include the GTK+ and Python libraries
PYTHON ?= python
PYTHONVER = `$(PYTHON) -c 'import sys; print sys.version[:3]'`
-CFLAGS = `pkg-config --cflags gtk+-2.0 pygtk-2.0` -fPIC -I/usr/include/python$(PYTHONVER) -I.
-LDFLAGS = `pkg-config --libs gtk+-2.0 pygtk-2.0` -lpython$(PYTHONVER)
+gtk_CFLAGS = `pkg-config --cflags gtk+-2.0 pygtk-2.0` -fPIC -I/usr/include/python$(PYTHONVER) -I.
+gtk_LDFLAGS = `pkg-config --libs gtk+-2.0 pygtk-2.0` -lpython$(PYTHONVER)
all: trayicon.so gtkspell.so
# Build the shared objects
trayicon.so: trayicon.o eggtrayicon.o trayiconmodule.o
- $(CC) -shared $^ -o $@ $(LDFLAGS)
+ $(CC) -shared $^ -o $@ $(LDFLAGS) $(gtk_LDFLAGS)
gtkspell.so:
- $(CC) $(OPTFLAGS) $(CFLAGS) `pkg-config --cflags gtkspell-2.0` -shared gtkspellmodule.c $^ -o $@ $(LDFLAGS) `pkg-config --libs gtkspell-2.0`
+ $(CC) $(OPTFLAGS) $(CFLAGS) $(LDFLAGS) $(gtk_CFLAGS) $(gtk_LDFLAGS) `pkg-config --libs --cflags gtkspell-2.0` -shared gtkspellmodule.c $^ -o $@
# The path to the GTK+ python types
DEFS=`pkg-config --variable=defsdir pygtk-2.0`
+%.o: %.c
+ $(CC) -o $@ -c $< $(CFLAGS) $(gtk_CFLAGS)
+
# Generate the C wrapper from the defs and our override file
trayicon.c: trayicon.defs trayicon.override
pygtk-codegen-2.0 --prefix trayicon \
diff --git a/src/advanced.py b/src/advanced.py
index 141ff3902..76bf6ed4f 100644
--- a/src/advanced.py
+++ b/src/advanced.py
@@ -46,6 +46,8 @@ class AdvancedConfigurationWindow:
def __init__(self):
self.xml = gtkgui_helpers.get_glade('advanced_configuration_window.glade')
self.window = self.xml.get_widget('advanced_configuration_window')
+ self.window.set_transient_for(
+ gajim.interface.instances['preferences'].window)
self.entry = self.xml.get_widget('advanced_entry')
self.desc_label = self.xml.get_widget('advanced_desc_label')
self.restart_label = self.xml.get_widget('restart_label')
diff --git a/src/chat_control.py b/src/chat_control.py
index e26b7fbdc..b9cf730a7 100644
--- a/src/chat_control.py
+++ b/src/chat_control.py
@@ -24,6 +24,7 @@ import gtkgui_helpers
import message_control
import dialogs
import history_window
+import notify
from common import gajim
from common import helpers
@@ -41,6 +42,14 @@ except:
HAS_GTK_SPELL = False
+# the next script, executed in the "po" directory,
+# generates the following list.
+##!/bin/sh
+#LANG=$(for i in *.po; do j=${i/.po/}; echo -n "_('"$j"')":" '"$j"', " ; done)
+#echo "{_('en'):'en'",$LANG"}"
+langs = {_('English'): 'en', _('Bulgarian'): 'bg', _('Briton'): 'br', _('Czech'): 'cs', _('German'): 'de', _('Greek'): 'el', _('Esperanto'): 'eo', _('Spanish'): 'es', _('Basc'): 'eu', _('French'): 'fr', _('Croatian'): 'hr', _('Italian'): 'it', _('Norvegian b'): 'nb', _('Dutch'): 'nl', _('Norvegian'): 'no', _('Polish'): 'pl', _('Portuguese'): 'pt', _('Brazilian Portuguese'): 'pt_BR', _('Russian'): 'ru', _('Slovak'): 'sk', _('Swedish'): 'sv', _('Chinese (Ch)'): 'zh_CN'}
+
+
################################################################################
class ChatControlBase(MessageControl):
'''A base class containing a banner, ConversationTextview, MessageTextView
@@ -50,7 +59,7 @@ class ChatControlBase(MessageControl):
theme = gajim.config.get('roster_theme')
bannerfont = gajim.config.get_per('themes', theme, 'bannerfont')
bannerfontattrs = gajim.config.get_per('themes', theme, 'bannerfontattrs')
-
+
if bannerfont:
font = pango.FontDescription(bannerfont)
else:
@@ -61,16 +70,24 @@ class ChatControlBase(MessageControl):
font.set_weight(pango.WEIGHT_HEAVY)
if 'I' in bannerfontattrs:
font.set_style(pango.STYLE_ITALIC)
-
+
font_attrs = 'font_desc="%s"' % font.to_string()
-
+
# in case there is no font specified we use x-large font size
if font.get_size() == 0:
font_attrs = '%s size="x-large"' % font_attrs
font.set_weight(pango.WEIGHT_NORMAL)
font_attrs_small = 'font_desc="%s" size="small"' % font.to_string()
return (font_attrs, font_attrs_small)
-
+
+ def get_nb_unread(self):
+ jid = self.contact.jid
+ if self.resource:
+ jid += '/' + self.resource
+ type_ = self.type_id
+ return len(gajim.events.get_events(self.account, jid, ['printed_' + type_,
+ type_]))
+
def draw_banner(self):
self._paint_banner()
self._update_banner_state_image()
@@ -99,7 +116,7 @@ class ChatControlBase(MessageControl):
widget = self.xml.get_widget('emoticons_button')
id = widget.connect('clicked', self.on_emoticons_button_clicked)
self.handlers[id] = widget
-
+
id = self.widget.connect('key_press_event', self._on_keypress_event)
self.handlers[id] = self.widget
@@ -107,10 +124,10 @@ class ChatControlBase(MessageControl):
id = widget.connect('button-press-event',
self._on_banner_eventbox_button_press_event)
self.handlers[id] = widget
-
+
# Create textviews and connect signals
self.conv_textview = ConversationTextview(self.account)
-
+
self.conv_scrolledwindow = self.xml.get_widget(
'conversation_scrolledwindow')
self.conv_scrolledwindow.add(self.conv_textview.tv)
@@ -122,20 +139,23 @@ class ChatControlBase(MessageControl):
self.msg_scrolledwindow = self.xml.get_widget('message_scrolledwindow')
self.msg_textview = MessageTextView()
id = self.msg_textview.connect('mykeypress',
- self._on_message_textview_mykeypress_event)
+ self._on_message_textview_mykeypress_event)
self.handlers[id] = self.msg_textview
self.msg_scrolledwindow.add(self.msg_textview)
id = self.msg_textview.connect('key_press_event',
- self._on_message_textview_key_press_event)
+ self._on_message_textview_key_press_event)
self.handlers[id] = self.msg_textview
id = self.msg_textview.connect('size-request', self.size_request)
self.handlers[id] = self.msg_textview
+ id = self.msg_textview.connect('populate_popup',
+ self.on_msg_textview_populate_popup)
+ self.handlers[id] = self.msg_textview
+
self.update_font()
# Hook up send button
widget = self.xml.get_widget('send_button')
- id = widget.connect('clicked',
- self._on_send_button_clicked)
+ id = widget.connect('clicked', self._on_send_button_clicked)
self.handlers[id] = widget
# the following vars are used to keep history of user's messages
@@ -144,8 +164,6 @@ class ChatControlBase(MessageControl):
self.typing_new = False
self.orig_msg = ''
- self.nb_unread = 0
-
# Emoticons menu
# set image no matter if user wants at this time emoticons or not
# (so toggle works ok)
@@ -157,8 +175,27 @@ class ChatControlBase(MessageControl):
# Attach speller
if gajim.config.get('use_speller') and HAS_GTK_SPELL:
try:
- gtkspell.Spell(self.msg_textview)
- except gobject.GError, msg:
+ spell = gtkspell.Spell(self.msg_textview)
+ # loop removing non-existant dictionaries
+ # iterating on a copy
+ for lang in dict(langs):
+ try:
+ spell.set_language(langs[lang])
+ except:
+ del langs[lang]
+ # now set the one the user selected
+ per_type = 'contacts'
+ if self.type_id == message_control.TYPE_GC:
+ per_type = 'rooms'
+ lang = gajim.config.get_per(per_type, self.contact.jid,
+ 'speller_language')
+ if not lang:
+ # use the default one
+ lang = gajim.config.get('speller_language')
+ if lang:
+ self.msg_textview.lang = lang
+ spell.set_language(lang)
+ except (gobject.GError, RuntimeError), msg:
#FIXME: add a ui for this use spell.set_language()
dialogs.ErrorDialog(unicode(msg), _('If that is not your language '
'for which you want to highlight misspelled words, then please '
@@ -174,6 +211,44 @@ class ChatControlBase(MessageControl):
# For JEP-0172
self.user_nick = None
+ def on_msg_textview_populate_popup(self, textview, menu):
+ '''we override the default context menu and we prepend an option to switch languages'''
+ def _on_select_dictionary(widget, lang):
+ per_type = 'contacts'
+ if self.type_id == message_control.TYPE_GC:
+ per_type = 'rooms'
+ if not gajim.config.get_per(per_type, self.contact.jid):
+ gajim.config.add_per(per_type, self.contact.jid)
+ gajim.config.set_per(per_type, self.contact.jid, 'speller_language',
+ lang)
+ spell = gtkspell.get_from_text_view(self.msg_textview)
+ self.msg_textview.lang = lang
+ spell.set_language(lang)
+ widget.set_active(True)
+
+ item = gtk.SeparatorMenuItem()
+ menu.prepend(item)
+
+ if gajim.config.get('use_speller') and HAS_GTK_SPELL:
+ item = gtk.MenuItem(_('Spelling language'))
+ menu.prepend(item)
+ submenu = gtk.Menu()
+ item.set_submenu(submenu)
+ for lang in sorted(langs):
+ item = gtk.CheckMenuItem(lang)
+ if langs[lang] == self.msg_textview.lang:
+ item.set_active(True)
+ submenu.append(item)
+ id = item.connect('activate', _on_select_dictionary, langs[lang])
+ self.handlers[id] = item
+
+ item = gtk.ImageMenuItem(gtk.STOCK_CLEAR)
+ menu.prepend(item)
+ id = item.connect('activate', self.msg_textview.clear)
+ self.handlers[id] = item
+
+ menu.show_all()
+
# moved from ChatControl
def _on_banner_eventbox_button_press_event(self, widget, event):
'''If right-clicked, show popup'''
@@ -250,7 +325,7 @@ class ChatControlBase(MessageControl):
if event.state & gtk.gdk.CONTROL_MASK:
# CTRL + l|L: clear conv_textview
if event.keyval == gtk.keysyms.l or event.keyval == gtk.keysyms.L:
- self.conv_textview.tv.get_buffer().set_text('')
+ self.conv_textview.clear()
return True
# CTRL + v: Paste into msg_textview
elif event.keyval == gtk.keysyms.v:
@@ -477,12 +552,25 @@ class ChatControlBase(MessageControl):
gajim.last_message_time[self.account][full_jid] = time.time()
urgent = True
if (not self.parent_win.get_active_jid() or \
- full_jid != self.parent_win.get_active_jid() or \
- not self.parent_win.is_active() or not end) and \
- kind in ('incoming', 'incoming_queue'):
- self.nb_unread += 1
- if gajim.interface.systray_enabled and self.notify_on_new_messages():
- gajim.interface.systray.add_jid(full_jid, self.account, self.type_id)
+ full_jid != self.parent_win.get_active_jid() or \
+ not self.parent_win.is_active() or not end) and \
+ kind in ('incoming', 'incoming_queue'):
+ if self.notify_on_new_messages():
+ type_ = 'printed_' + self.type_id
+ if self.type_id == message_control.TYPE_GC:
+ type_ = 'printed_gc_msg'
+ show_in_roster = notify.get_show_in_roster('message_received',
+ self.account, self.contact)
+ show_in_systray = notify.get_show_in_systray('message_received',
+ self.account, self.contact)
+ event = gajim.events.create_event(type_, None,
+ 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.parent_win.redraw_tab(self)
if not self.parent_win.is_active():
ctrl = gajim.interface.msg_win_mgr.get_control(full_jid,
@@ -507,6 +595,7 @@ class ChatControlBase(MessageControl):
else: # we are the beginning of buffer
buffer.insert_at_cursor('%s ' % str_)
self.msg_textview.grab_focus()
+
def on_emoticons_button_clicked(self, widget):
'''popup emoticons menu'''
gajim.interface.emoticon_menuitem_clicked = self.append_emoticon
@@ -551,15 +640,24 @@ class ChatControlBase(MessageControl):
if state:
jid = self.contact.jid
if self.conv_textview.at_the_end():
- #we are at the end
- if self.nb_unread > 0:
- self.nb_unread = self.get_specific_unread()
+ # we are at the end
+ type_ = 'printed_' + self.type_id
+ if self.type_id == message_control.TYPE_GC:
+ type_ = 'printed_gc_msg'
+ if not gajim.events.remove_events(self.account, self.get_full_jid(),
+ types = [type_]):
+ # There were events to remove
self.parent_win.redraw_tab(self)
self.parent_win.show_title()
- if gajim.interface.systray_enabled:
- gajim.interface.systray.remove_jid(self.get_full_jid(),
- self.account,
- self.type_id)
+ # redraw roster
+ if self.type_id == message_control.TYPE_PM:
+ room_jid, nick = gajim.get_room_and_nick_from_fjid(jid)
+ groupchat_control = gajim.interface.msg_win_mgr.get_control(
+ room_jid, self.account)
+ groupchat_control.draw_contact(nick)
+ else:
+ gajim.interface.roster.draw_contact(jid, self.account)
+ gajim.interface.roster.show_title()
self.msg_textview.grab_focus()
# Note, we send None chatstate to preserve current
self.parent_win.redraw_tab(self)
@@ -632,22 +730,28 @@ class ChatControlBase(MessageControl):
return True
def on_conversation_vadjustment_value_changed(self, widget):
- if not self.nb_unread:
- return
if self.resource:
jid = self.contact.get_full_jid()
else:
jid = self.contact.jid
+ type_ = self.type_id
+ if type_ == message_control.TYPE_GC:
+ type_ = 'gc_msg'
+ if not len(gajim.events.get_events(self.account, jid, ['printed_' + type_,
+ type_])):
+ return
if self.conv_textview.at_the_end() and \
self.parent_win.get_active_control() == self and \
self.parent_win.window.is_active():
- #we are at the end
- self.nb_unread = self.get_specific_unread()
- self.parent_win.redraw_tab(self)
- self.parent_win.show_title()
- if gajim.interface.systray_enabled:
- gajim.interface.systray.remove_jid(jid, self.account,
- self.type_id)
+ # we are at the end
+ type_ = self.type_id
+ if type_ == message_control.TYPE_GC:
+ type_ = 'gc_msg'
+ if not gajim.events.remove_events(self.account, self.get_full_jid(),
+ types = ['printed_' + type_, type_]):
+ # There were events to remove
+ self.parent_win.redraw_tab(self)
+ self.parent_win.show_title()
def sent_messages_scroll(self, direction, conv_buf):
size = len(self.sent_history)
@@ -706,6 +810,7 @@ class ChatControlBase(MessageControl):
def got_disconnected(self):
self.msg_textview.set_sensitive(False)
self.msg_textview.set_editable(False)
+ self.conv_textview.tv.grab_focus()
self.xml.get_widget('send_button').set_sensitive(False)
################################################################################
@@ -776,6 +881,8 @@ class ChatControl(ChatControlBase):
self.update_ui()
# restore previous conversation
self.restore_conversation()
+ # is account displayed after nick in banner ?
+ self.account_displayed= False
def notify_on_new_messages(self):
return gajim.config.get('trayicon_notification_on_new_messages')
@@ -898,17 +1005,27 @@ class ChatControl(ChatControlBase):
if self.resource:
name += '/' + self.resource
avoid_showing_account_too = True
+ if self.TYPE_ID == message_control.TYPE_PM:
+ room_jid = self.contact.jid.split('/')[0]
+ room_ctrl = gajim.interface.msg_win_mgr.get_control(room_jid,
+ self.account)
+ name = _('%s from room %s') % (name, room_ctrl.name)
name = gtkgui_helpers.escape_for_pango_markup(name)
# We know our contacts nick, but if there are any other controls
# with the same nick we need to also display the account
# except if we are talking to two different resources of the same contact
acct_info = ''
+ self.account_displayed = False
for ctrl in self.parent_win.controls():
if ctrl == self:
continue
if self.contact.get_shown_name() == ctrl.contact.get_shown_name()\
and not avoid_showing_account_too:
+ self.account_displayed = True
+ if not ctrl.account_displayed:
+ # do that after this instance exists
+ gobject.idle_add(ctrl.draw_banner)
acct_info = ' (%s)' % \
gtkgui_helpers.escape_for_pango_markup(self.account)
break
@@ -925,9 +1042,9 @@ class ChatControl(ChatControlBase):
if cs and st in ('composing_only', 'all'):
if contact.show == 'offline':
chatstate = ''
- elif st == 'all' and contact.composing_jep == 'JEP-0085':
+ elif contact.composing_jep == 'JEP-0085':
chatstate = helpers.get_uf_chatstate(cs)
- elif st == 'composing_only' or contact.composing_jep == 'JEP-0022':
+ elif contact.composing_jep == 'JEP-0022':
if cs in ('composing', 'paused'):
# only print composing, paused
chatstate = helpers.get_uf_chatstate(cs)
@@ -935,16 +1052,16 @@ class ChatControl(ChatControlBase):
chatstate = ''
elif chatstate is None:
chatstate = helpers.get_uf_chatstate(cs)
-
+
label_text = '<span %s>%s</span><span %s>%s %s</span>' % \
- (font_attrs, name, font_attrs_small, acct_info, chatstate)
+ (font_attrs, name, font_attrs_small, acct_info, chatstate)
else:
# weight="heavy" size="x-large"
label_text = '<span %s>%s</span><span %s>%s</span>' % \
- (font_attrs, name, font_attrs_small, acct_info)
+ (font_attrs, name, font_attrs_small, acct_info)
if status_escaped:
label_text += '\n<span %s>%s</span>' %\
- (font_attrs_small, status_escaped)
+ (font_attrs_small, status_escaped)
banner_eventbox = self.xml.get_widget('banner_eventbox')
self.status_tooltip.set_tip(banner_eventbox, status)
self.status_tooltip.enable()
@@ -952,7 +1069,7 @@ class ChatControl(ChatControlBase):
self.status_tooltip.disable()
# setup the label that holds name and jid
banner_name_label.set_markup(label_text)
-
+
def on_toggle_gpg_togglebutton(self, widget):
gajim.config.set_per('contacts', self.contact.get_full_jid(),
'gpg_enabled', widget.get_active())
@@ -967,12 +1084,12 @@ class ChatControl(ChatControlBase):
tt = _('OpenPGP Encryption')
# restore gpg pref
- gpg_pref = gajim.config.get_per('contacts',
- self.contact.get_full_jid(), 'gpg_enabled')
+ gpg_pref = gajim.config.get_per('contacts', self.contact.jid,
+ 'gpg_enabled')
if gpg_pref == None:
- gajim.config.add_per('contacts', self.contact.get_full_jid())
- gpg_pref = gajim.config.get_per('contacts',
- self.contact.get_full_jid(), 'gpg_enabled')
+ gajim.config.add_per('contacts', self.contact.jid)
+ gpg_pref = gajim.config.get_per('contacts', self.contact.jid,
+ 'gpg_enabled')
tb.set_active(gpg_pref)
else:
@@ -1132,7 +1249,12 @@ class ChatControl(ChatControlBase):
def get_tab_label(self, chatstate):
unread = ''
- num_unread = self.nb_unread
+ if self.resource:
+ jid = self.contact.get_full_jid()
+ else:
+ jid = self.contact.jid
+ num_unread = len(gajim.events.get_events(self.account, jid,
+ ['printed_' + self.type_id, self.type_id]))
if num_unread == 1 and not gajim.config.get('show_unread_tab_icon'):
unread = '*'
elif num_unread > 1:
@@ -1175,7 +1297,12 @@ class ChatControl(ChatControlBase):
return (label_str, color)
def get_tab_image(self):
- num_unread = self.nb_unread
+ if self.resource:
+ jid = self.contact.get_full_jid()
+ else:
+ jid = self.contact.jid
+ num_unread = len(gajim.events.get_events(self.account, jid,
+ ['printed_' + self.type_id, self.type_id]))
# Set tab image (always 16x16); unread messages show the 'message' image
tab_img = None
@@ -1184,8 +1311,8 @@ class ChatControl(ChatControlBase):
self.contact.jid, icon_name = 'message')
tab_img = img_16['message']
else:
- contact = gajim.contacts.get_contact_with_highest_priority(self.account,
- self.contact.jid)
+ contact = gajim.contacts.get_contact_with_highest_priority(
+ self.account, self.contact.jid)
if not contact or self.resource:
# For transient contacts
contact = self.contact
@@ -1361,10 +1488,9 @@ class ChatControl(ChatControlBase):
# Remove bigger avatar window
if self.bigger_avatar_window:
self.bigger_avatar_window.destroy()
- # Clean up systray
- if gajim.interface.systray_enabled and self.nb_unread > 0:
- gajim.interface.systray.remove_jid(self.contact.jid, self.account,
- self.type_id)
+ # Clean events
+ gajim.events.remove_events(self.account, self.get_full_jid(),
+ types = ['printed_' + self.type_id, self.type_id])
# remove all register handlers on wigets, created by self.xml
# to prevent circular references among objects
for i in self.handlers.keys():
@@ -1381,7 +1507,7 @@ class ChatControl(ChatControlBase):
# 2 seconds
dialog = dialogs.ConfirmationDialog(
#%s is being replaced in the code with JID
- _('You just received a new message from "%s"' % self.contact.jid),
+ _('You just received a new message from "%s"') % self.contact.jid,
_('If you close this tab and you have history disabled, '\
'this message will be lost.'))
if dialog.get_response() != gtk.RESPONSE_OK:
@@ -1466,14 +1592,11 @@ class ChatControl(ChatControlBase):
if restore_how_many <= 0:
return
timeout = gajim.config.get('restore_timeout') # in minutes
- # number of messages that are in queue and are already logged
- pending_how_many = 0 # we want to avoid duplication
- if gajim.awaiting_events[self.account].has_key(jid):
- events = gajim.awaiting_events[self.account][jid]
- for event in events:
- if event[0] == 'chat':
- pending_how_many += 1
+ events = gajim.events.get_events(self.account, jid, ['chat'])
+ # number of messages that are in queue and are already logged, we want
+ # to avoid duplication
+ pending_how_many = len(events)
rows = gajim.logger.get_last_conversation_lines(jid, restore_how_many,
pending_how_many, timeout, self.account)
@@ -1492,10 +1615,14 @@ class ChatControl(ChatControlBase):
tim = time.localtime(float(row[0]))
+ if gajim.config.get('restored_messages_small'):
+ small_attr = ['small']
+ else:
+ small_attr = []
ChatControlBase.print_conversation_line(self, row[2], kind, name, tim,
- ['small'],
- ['small', 'restored_message'],
- ['small', 'restored_message'],
+ small_attr,
+ small_attr + ['restored_message'],
+ small_attr + ['restored_message'],
False, old_kind = local_old_kind)
if row[2].startswith('/me ') or row[2].startswith('/me\n'):
local_old_kind = None
@@ -1510,7 +1637,7 @@ class ChatControl(ChatControlBase):
jid_with_resource = jid
if self.resource:
jid_with_resource += '/' + self.resource
- l = gajim.awaiting_events[self.account][jid_with_resource]
+ events = gajim.events.get_events(self.account, jid_with_resource)
# Is it a pm ?
is_pm = False
@@ -1518,15 +1645,12 @@ class ChatControl(ChatControlBase):
control = gajim.interface.msg_win_mgr.get_control(room_jid, self.account)
if control and control.type_id == message_control.TYPE_GC:
is_pm = True
- events_to_keep = []
# list of message ids which should be marked as read
message_ids = []
- for event in l:
- typ = event[0]
- if typ != 'chat':
- events_to_keep.append(event)
+ for event in events:
+ if event.type_ != self.type_id:
continue
- data = event[1]
+ data = event.parameters
kind = data[2]
if kind == 'error':
kind = 'info'
@@ -1536,33 +1660,31 @@ class ChatControl(ChatControlBase):
encrypted = data[4], subject = data[1])
if len(data) > 6 and isinstance(data[6], int):
message_ids.append(data[6])
- # remove from gc nb_unread if it's pm or from roster
- if is_pm:
- control.nb_unread -= 1
- else:
- gajim.interface.roster.nb_unread -= 1
if message_ids:
gajim.logger.set_read_messages(message_ids)
- if is_pm:
- control.parent_win.show_title()
- else:
- gajim.interface.roster.show_title()
- # Keep only non-messages events
- if len(events_to_keep):
- gajim.awaiting_events[self.account][jid_with_resource] = events_to_keep
- else:
- del gajim.awaiting_events[self.account][jid_with_resource]
+ gajim.events.remove_events(self.account, jid_with_resource,
+ types = [self.type_id])
+
+ self.parent_win.show_title()
+ self.parent_win.redraw_tab(self)
+ # redraw roster
+ gajim.interface.roster.show_title()
+
typ = 'chat' # Is it a normal chat or a pm ?
# reset to status image in gc if it is a pm
if is_pm:
control.update_ui()
typ = 'pm'
- gajim.interface.roster.draw_contact(jid, self.account)
+ if is_pm:
+ room_jid, nick = gajim.get_room_and_nick_from_fjid(jid)
+ groupchat_control = gajim.interface.msg_win_mgr.get_control(
+ room_jid, self.account)
+ groupchat_control.draw_contact(nick)
+ else:
+ gajim.interface.roster.draw_contact(jid, self.account)
# Redraw parent too
gajim.interface.roster.draw_parent_contact(jid, self.account)
- if gajim.interface.systray_enabled:
- gajim.interface.systray.remove_jid(jid_with_resource, self.account, typ)
if (self.contact.show == 'offline' or self.contact.show == 'error'):
showOffline = gajim.config.get('showoffline')
if not showOffline and typ == 'chat' and \
@@ -1592,7 +1714,7 @@ class ChatControl(ChatControlBase):
# It's why I set it transparent.
image = self.xml.get_widget('avatar_image')
pixbuf = image.get_pixbuf()
- pixbuf.fill(0xffffff00) # RGBA
+ pixbuf.fill(0xffffff00L) # RGBA
image.queue_draw()
screen_w = gtk.gdk.screen_width()
diff --git a/src/common/GnuPG.py b/src/common/GnuPG.py
index 28b9c2987..bb6753fca 100644
--- a/src/common/GnuPG.py
+++ b/src/common/GnuPG.py
@@ -138,7 +138,7 @@ else:
def verify(self, str, sign):
if not USE_GPG:
return str
- if not str:
+ if str == None:
return ''
f = tmpfile()
fd = f.fileno()
diff --git a/src/common/Makefile b/src/common/Makefile
index aa7ec66f7..c6d05a2d4 100644
--- a/src/common/Makefile
+++ b/src/common/Makefile
@@ -6,19 +6,19 @@ HAVE_XSCRNSAVER = $(shell pkg-config --exists xscrnsaver && echo 'YES')
ifeq ($(HAVE_XSCRNSAVER),YES)
# We link with libXScrnsaver from modular X.Org X11
-CFLAGS = `pkg-config --cflags gtk+-2.0 pygtk-2.0 xscrnsaver` -fpic -I/usr/include/python$(PYTHONVER) -I.
-LDFLAGS = `pkg-config --libs gtk+-2.0 pygtk-2.0 xscrnsaver` -lpython$(PYTHONVER)
+gtk_and_x_CFLAGS = `pkg-config --cflags gtk+-2.0 pygtk-2.0 xscrnsaver` -fpic -I/usr/include/python$(PYTHONVER) -I.
+gtk_and_x_LDFLAGS = `pkg-config --libs gtk+-2.0 pygtk-2.0 xscrnsaver` -lpython$(PYTHONVER)
else
# # We link with libXScrnsaver from monolithic X.Org X11
-CFLAGS = `pkg-config --cflags gtk+-2.0 pygtk-2.0` -fpic -I/usr/include/python$(PYTHONVER) -I.
-LDFLAGS = `pkg-config --libs gtk+-2.0 pygtk-2.0` -L/usr/X11R6$(LIBDIR) -lX11 \
- -lXss -lXext -lpython$(PYTHONVER)
+gtk_and_x_CFLAGS = `pkg-config --cflags gtk+-2.0 pygtk-2.0` -fpic -I/usr/include/python$(PYTHONVER) -I.
+gtk_and_x_LDFLAGS = `pkg-config --libs gtk+-2.0 pygtk-2.0` \
+ -L/usr/X11R6$(LIBDIR) -lX11 -lXss -lXext -lpython$(PYTHONVER)
endif
all: idle.so
idle.so:
- $(CC) $(OPTFLAGS) $(CFLAGS) $(LDFLAGS) -shared idle.c $^ -o $@
+ $(CC) $(OPTFLAGS) $(CFLAGS) $(LDFLAGS) $(gtk_and_x_CFLAGS) $(gtk_and_x_LDFLAGS) -shared idle.c $^ -o $@
clean:
rm -f *.so
diff --git a/src/common/check_paths.py b/src/common/check_paths.py
index 03850e7c4..03913473d 100644
--- a/src/common/check_paths.py
+++ b/src/common/check_paths.py
@@ -57,6 +57,11 @@ def create_log_db():
jid_id INTEGER
);
+ CREATE TABLE transports_cache (
+ transport TEXT UNIQUE,
+ type INTEGER
+ );
+
CREATE TABLE logs(
log_line_id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
jid_id INTEGER,
diff --git a/src/common/config.py b/src/common/config.py
index 4e768825d..96f51ea6b 100644
--- a/src/common/config.py
+++ b/src/common/config.py
@@ -48,7 +48,7 @@ class Config:
'notify_on_signout': [ opt_bool, False ],
'notify_on_new_message': [ opt_bool, True ],
'autopopupaway': [ opt_bool, False ],
- 'use_notif_daemon': [ opt_bool, True , _('Use DBus and Notification-Daemon to show notifications') ],
+ 'use_notif_daemon': [ opt_bool, True , _('Use D-Bus and Notification-Daemon to show notifications') ],
'ignore_unknown_contacts': [ opt_bool, False ],
'showoffline': [ opt_bool, False, '', True ],
'autoaway': [ opt_bool, True ],
@@ -74,12 +74,13 @@ class Config:
'statusmsgcolor': [ opt_color, '#1eaa1e', '', True ],
'markedmsgcolor': [ opt_color, '#ff8080', '', True ],
'urlmsgcolor': [ opt_color, '#0000ff', '', True ],
- 'collapsed_rows': [ opt_str, '', _('List (space separated) of rows (accounts and groups) that are collapsed'), True ],
+ 'collapsed_rows': [ opt_str, '', _('List (space separated) of rows (accounts and groups) that are collapsed.'), True ],
'roster_theme': [ opt_str, 'gtk+', '', True ],
'saveposition': [ opt_bool, True ],
'mergeaccounts': [ opt_bool, False, '', True ],
'sort_by_show': [ opt_bool, True, '', True ],
'use_speller': [ opt_bool, False, ],
+ 'speller_language': [ opt_str, '', _('Language used by speller')],
'print_time': [ opt_str, 'always', _('\'always\' - print time for every message.\n\'sometimes\' - print time every print_ichat_every_foo_minutes minute.\n\'never\' - never print time.')],
'print_time_fuzzy': [ opt_int, 0, _('Value of fuzziness from 1 to 4 or 0 to disable fuzzyclock. 1 is the most precise clock, 4 the less precise one.') ],
'emoticons_theme': [opt_str, 'static', '', True ],
@@ -95,8 +96,8 @@ class Config:
'custommailapp': [ opt_str, 'mozilla-thunderbird -compose' ],
'custom_file_manager': [ opt_str, 'xffm' ],
'gc-hpaned-position': [opt_int, 430],
- 'gc_refer_to_nick_char': [opt_str, ',', _('Character to add after nickname when using nick completion (tab) in group chat')],
- 'gc_proposed_nick_char': [opt_str, '_', _('Character to propose to add after desired nickname when desired nickname is used by someone else in group chat')],
+ 'gc_refer_to_nick_char': [opt_str, ',', _('Character to add after nickname when using nick completion (tab) in group chat.')],
+ 'gc_proposed_nick_char': [opt_str, '_', _('Character to propose to add after desired nickname when desired nickname is used by someone else in group chat.')],
'msgwin-x-position': [opt_int, -1], # Default is to let the window manager decide
'msgwin-y-position': [opt_int, -1], # Default is to let the window manager decide
'msgwin-width': [opt_int, 500],
@@ -134,7 +135,7 @@ class Config:
'send_on_ctrl_enter': [opt_bool, False, _('Send message on Ctrl+Enter and with Enter make new line (Mirabilis ICQ Client default behaviour).')],
'show_roster_on_startup': [opt_bool, True],
'key_up_lines': [opt_int, 25, _('How many lines to store for Ctrl+KeyUP.')],
- 'version': [ opt_str, '0.10.1.2' ], # which version created the config
+ 'version': [ opt_str, '0.10.1.3' ], # which version created the config
'search_engine': [opt_str, 'http://www.google.com/search?&q=%s&sourceid=gajim'],
'dictionary_url': [opt_str, 'WIKTIONARY', _("Either custom url with %s in it where %s is the word/phrase or 'WIKTIONARY' which means use wiktionary.")],
'always_english_wikipedia': [opt_bool, False],
@@ -142,7 +143,7 @@ class Config:
'remote_control': [opt_bool, True, _('If checked, Gajim can be controlled remotely using gajim-remote.'), True],
'chat_state_notifications': [opt_str, 'all'], # 'all', 'composing_only', 'disabled'
'autodetect_browser_mailer': [opt_bool, False, '', True],
- 'print_ichat_every_foo_minutes': [opt_int, 5, _('When not printing time for every message (print_time==sometimes), print it every x minutes')],
+ 'print_ichat_every_foo_minutes': [opt_int, 5, _('When not printing time for every message (print_time==sometimes), print it every x minutes.')],
'confirm_close_muc': [opt_bool, True, _('Ask before closing a group chat tab/window.')],
'confirm_close_muc_rooms': [opt_str, '', _('Always ask before closing group chat tab/window in this space separated list of room jids.')],
'noconfirm_close_muc_rooms': [opt_str, '', _('Never ask before closing group chat tab/window in this space separated list of room jids.')],
@@ -177,31 +178,33 @@ class Config:
'quit_on_roster_x_button': [opt_bool, False, _('If True, quits Gajim when X button of Window Manager is clicked. This setting is taken into account only if trayicon is used.')],
'set_xmpp://_handler_everytime': [opt_bool, False, _('If True, Gajim registers for xmpp:// on each startup.')],
'show_unread_tab_icon': [opt_bool, False, _('If True, Gajim will display an icon on each tab containing unread messages. Depending on the theme, this icon may be animated.')],
- 'show_status_msgs_in_roster': [opt_bool, True, _('If True, Gajim will display the status message, if not empty, for every contact under the contact name in roster window'), True],
+ 'show_status_msgs_in_roster': [opt_bool, True, _('If True, Gajim will display the status message, if not empty, for every contact under the contact name in roster window.'), True],
'show_avatars_in_roster': [opt_bool, True, '', True],
'ask_avatars_on_startup': [opt_bool, True, _('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.')],
'print_status_in_chats': [opt_bool, True, _('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.')],
- 'print_status_in_muc': [opt_str, 'in_and_out', _('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 status and/or his or her status message. If "all" Gajim will print all status messages. If "in_and_out", gajim will only print FOO enters/leaves room')],
+ 'print_status_in_muc': [opt_str, 'in_and_out', _('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 status and/or his or her status message. If "all" Gajim will print all status messages. If "in_and_out", gajim will only print FOO enters/leaves room.')],
'log_contact_status_changes': [opt_bool, False],
'restored_messages_color': [opt_str, 'grey'],
+ 'restored_messages_small': [opt_bool, True, _('If True, restored messages will use a smaller font than the default one.')],
'hide_avatar_of_transport': [opt_bool, False, _('Don\'t show avatar for the transport itself.')],
'roster_window_skip_taskbar': [opt_bool, False],
'use_urgency_hint': [opt_bool, True, _('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 pending events.')],
'notification_timeout': [opt_int, 5],
- 'send_sha_in_gc_presence': [opt_bool, True, _('Jabberd1.4 does not like sha info when one join a password protected room. Turn this option to False to stop sending sha info in groupchat presences')],
+ 'send_sha_in_gc_presence': [opt_bool, True, _('Jabberd1.4 does not like sha info when one join a password protected room. Turn this option to False to stop sending sha info in group chat presences.')],
'one_message_window': [opt_str, 'always',
#always, never, peracct, pertype should not be translated
- _('Controls the window where new messages are placed.\n\'always\' - All messages are sent to a single window.\n\'never\' - All messages get their own window.\n\'peracct\' - Messages for each account are sent to a specific window.\n\'pertype\' - Each message type (e.g., chats vs. groupchats) are sent to a specific window. Note, changing this option requires restarting Gajim before the changes will take effect')],
- 'show_avatar_in_chat': [opt_bool, True, _('If False, you will no longer see the avatar in the chat window')],
- 'escape_key_closes': [opt_bool, True, _('If True, pressing the escape key closes a tab/window')],
- 'always_hide_groupchat_buttons': [opt_bool, False, _('Hides the buttons in group chat window')],
- 'always_hide_chat_buttons': [opt_bool, False, _('Hides the buttons in two persons chat window')],
+ _('Controls the window where new messages are placed.\n\'always\' - All messages are sent to a single window.\n\'never\' - All messages get their own window.\n\'peracct\' - Messages for each account are sent to a specific window.\n\'pertype\' - Each message type (e.g., chats vs. groupchats) are sent to a specific window. Note, changing this option requires restarting Gajim before the changes will take effect.')],
+ 'show_avatar_in_chat': [opt_bool, True, _('If False, you will no longer see the avatar in the chat window.')],
+ 'escape_key_closes': [opt_bool, True, _('If True, pressing the escape key closes a tab/window.')],
+ 'always_hide_groupchat_buttons': [opt_bool, False, _('Hides the buttons in group chat window.')],
+ 'always_hide_chat_buttons': [opt_bool, False, _('Hides the buttons in two persons chat window.')],
'hide_groupchat_banner': [opt_bool, False, _('Hides the banner in a group chat window')],
'hide_chat_banner': [opt_bool, False, _('Hides the banner in two persons chat window')],
- 'hide_groupchat_occupants_list': [opt_bool, False, _('Hides the room occupants list in groupchat window')],
- 'chat_merge_consecutive_nickname': [opt_bool, False, _('Merge consecutive nickname in chat window')],
- 'chat_merge_consecutive_nickname_indent': [opt_str, ' ', _('Indentation when using merge consecutive nickame')],
- 'gc_nicknames_colors': [ opt_str, '#a34526:#c000ff:#0012ff:#388a99:#38995d:#519938:#ff8a00:#94452d:#244b5a:#32645a', _('List of colors that will be used to color nicknames in groupchats'), True ],
+ 'hide_groupchat_occupants_list': [opt_bool, False, _('Hides the room occupants list in group chat window.')],
+ 'chat_merge_consecutive_nickname': [opt_bool, False, _('Merge consecutive nickname in chat window.')],
+ 'chat_merge_consecutive_nickname_indent': [opt_str, ' ', _('Indentation when using merge consecutive nickame.')],
+ 'gc_nicknames_colors': [ opt_str, '#a34526:#c000ff:#0012ff:#388a99:#38995d:#519938:#ff8a00:#94452d:#244b5a:#32645a', _('List of colors that will be used to color nicknames in group chats.'), True ],
+ 'ctrl_tab_go_to_next_composing': [opt_bool, True, _('Ctrl-Tab go to next composing tab when none is unread.')],
}
__options_per_key = {
@@ -247,6 +250,10 @@ class Config:
'statusmsg': ({
'message': [ opt_str, '' ],
}, {}),
+ 'defaultstatusmsg': ({
+ 'enabled': [ opt_bool, False ],
+ 'message': [ opt_str, '' ],
+ }, {}),
'soundevents': ({
'enabled': [ opt_bool, True ],
'path': [ opt_str, '' ],
@@ -289,7 +296,11 @@ class Config:
'state_muc_directed_msg_color': [ opt_color, 'red2' ],
}, {}),
'contacts': ({
- 'gpg_enabled': [ opt_bool, True ],
+ 'gpg_enabled': [ opt_bool, True, _('Is OpenPGP enabled for this contact?')],
+ 'speller_language': [ opt_str, '', _('Language for which we want to check misspelled words')],
+ }, {}),
+ 'rooms': ({
+ 'speller_language': [ opt_str, '', _('Language for which we want to check misspelled words')],
}, {}),
'notifications': ({
'event': [opt_str, ''],
@@ -319,6 +330,16 @@ class Config:
_('Out'): _("I'm out enjoying life"),
}
+ defaultstatusmsg_default = {
+ 'online': [ False, _("I'm available") ],
+ 'chat': [ False, _("I'm free for chat") ],
+ 'away': [ False, _('Be right back') ],
+ 'xa': [ False, _("I'm not available") ],
+ 'dnd': [ False, _('Do not disturb') ],
+ 'invisible': [ False, _('Bye!') ],
+ 'offline': [ False, _('Bye!') ],
+ }
+
soundevents_default = {
'first_message_received': [ True, '../data/sounds/message1.wav' ],
'next_message_received': [ True, '../data/sounds/message2.wav' ],
@@ -532,3 +553,8 @@ class Config:
self.set_per('soundevents', event, 'enabled', default[0])
self.set_per('soundevents', event, 'path', default[1])
+ for status in self.defaultstatusmsg_default:
+ default = self.defaultstatusmsg_default[status]
+ self.add_per('defaultstatusmsg', status)
+ self.set_per('defaultstatusmsg', status, 'enabled', default[0])
+ self.set_per('defaultstatusmsg', status, 'message', default[1])
diff --git a/src/common/connection.py b/src/common/connection.py
index 6b90b7cb9..f270cceef 100644
--- a/src/common/connection.py
+++ b/src/common/connection.py
@@ -84,18 +84,12 @@ class Connection(ConnectionHandlers):
self.on_connect_failure = None
self.retrycount = 0
self.jids_for_auto_auth = [] # list of jid to auto-authorize
+ self.muc_jid = {} # jid of muc server for each transport type
+ self.available_transports = {} # list of available transports on this
+ # server {'icq': ['icq.server.com', 'icq2.server.com'], }
+ self.vcard_supported = True
# END __init__
- def build_user_nick(self, user_nick):
- df = common.xmpp.DataForm(typ = 'result')
- field = df.setField('FORM_TYPE')
- field.setType('hidden')
- field.setValue(common.xmpp.NS_PROFILE)
- field = df.setField('nickname')
- field.delAttr('type')
- field.setValue(user_nick)
- return df
-
def put_event(self, ev):
if gajim.handlers.has_key(ev[0]):
gajim.handlers[ev[0]](self.name, ev[1])
@@ -143,22 +137,21 @@ class Connection(ConnectionHandlers):
if not self.on_purpose:
self.disconnect()
if gajim.config.get_per('accounts', self.name, 'autoreconnect') \
- and self.retrycount <= 10:
+ and self.retrycount <= 10:
self.connected = 1
self.dispatch('STATUS', 'connecting')
- self.time_to_reconnect = 10
# this check has moved from _reconnect method
if self.retrycount > 5:
self.time_to_reconnect = 20
else:
self.time_to_reconnect = 10
- gajim.idlequeue.set_alarm(self._reconnect_alarm,
- self.time_to_reconnect)
+ gajim.idlequeue.set_alarm(self._reconnect_alarm,
+ self.time_to_reconnect)
elif self.on_connect_failure:
self.on_connect_failure()
self.on_connect_failure = None
else:
- # show error dialog
+ # show error dialog
self._connection_lost()
else:
self.disconnect()
@@ -168,9 +161,9 @@ class Connection(ConnectionHandlers):
def _connection_lost(self):
self.disconnect(on_purpose = False)
self.dispatch('STATUS', 'offline')
- self.dispatch('ERROR',
- (_('Connection with account "%s" has been lost') % self.name,
- _('To continue sending and receiving messages, you will need to reconnect.')))
+ self.dispatch('CONNECTION_LOST',
+ (_('Connection with account "%s" has been lost') % self.name,
+ _('To continue sending and receiving messages, you will need to reconnect.')))
def _event_dispatcher(self, realm, event, data):
if realm == common.xmpp.NS_REGISTER:
@@ -394,7 +387,8 @@ class Connection(ConnectionHandlers):
if not self.retrycount and self.connected != 0:
self.disconnect(on_purpose = True)
self.dispatch('STATUS', 'offline')
- self.dispatch('ERROR', (_('Could not connect to "%s"') % self._hostname,
+ self.dispatch('CONNECTION_LOST',
+ (_('Could not connect to "%s"') % self._hostname,
_('Check your connection or try again later.')))
def _connect_success(self, con, con_type):
@@ -430,7 +424,8 @@ class Connection(ConnectionHandlers):
if not con:
self.disconnect(on_purpose = True)
self.dispatch('STATUS', 'offline')
- self.dispatch('ERROR', (_('Could not connect to "%s"') % self._hostname,
+ self.dispatch('CONNECTION_LOST',
+ (_('Could not connect to "%s"') % self._hostname,
_('Check your connection or try again later')))
if self.on_connect_auth:
self.on_connect_auth(None)
@@ -712,8 +707,8 @@ class Connection(ConnectionHandlers):
# JEP-0172: user_nickname
if user_nick:
- df = self.build_user_nick(user_nick)
- msg_iq.addChild(node = df)
+ msg_iq.setTag('nick', namespace = common.xmpp.NS_NICK).setData(
+ user_nick)
# chatstates - if peer supports jep85 or jep22, send chatstates
# please note that the only valid tag inside a message containing a <body>
@@ -788,12 +783,10 @@ class Connection(ConnectionHandlers):
p = common.xmpp.Presence(jid, 'subscribe')
if user_nick:
- df = self.build_user_nick(user_nick)
- p.addChild(node = df)
+ p.setTag('nick', namespace = common.xmpp.NS_NICK).setData(user_nick)
p = self.add_sha(p)
- if not msg:
- msg = _('I would like to add you to my roster.')
- p.setStatus(msg)
+ if msg:
+ p.setStatus(msg)
self.connection.send(p)
def send_authorization(self, jid):
@@ -876,6 +869,10 @@ class Connection(ConnectionHandlers):
def request_os_info(self, jid, resource):
if not self.connection:
return
+ # If we are invisible, do not request
+ if self.connected == gajim.SHOW_LIST.index('invisible'):
+ self.dispatch('OS_INFO', (jid, resource, _('Not fetched because of invisible status'), _('Not fetched because of invisible status')))
+ return
to_whom_jid = jid
if resource:
to_whom_jid += '/' + resource
@@ -932,6 +929,9 @@ class Connection(ConnectionHandlers):
iq = common.xmpp.Iq(typ='get')
iq2 = iq.addChild(name='query', namespace='jabber:iq:private')
iq2.addChild(name='storage', namespace='storage:metacontacts')
+ id = self.connection.getAnID()
+ iq.setID(id)
+ self.awaiting_answers[id] = (METACONTACTS_ARRIVED, )
self.connection.send(iq)
def store_metacontacts(self, tags_list):
diff --git a/src/common/connection_handlers.py b/src/common/connection_handlers.py
index c373ac51b..d87883bbb 100644
--- a/src/common/connection_handlers.py
+++ b/src/common/connection_handlers.py
@@ -24,6 +24,7 @@ import sha
import socket
import sys
+from time import localtime, strftime, gmtime
from calendar import timegm
import socks5
@@ -43,6 +44,7 @@ STATUS_LIST = ['offline', 'connecting', 'online', 'chat', 'away', 'xa', 'dnd',
VCARD_PUBLISHED = 'vcard_published'
VCARD_ARRIVED = 'vcard_arrived'
AGENT_REMOVED = 'agent_removed'
+METACONTACTS_ARRIVED = 'metacontacts_arrived'
HAS_IDLE = True
try:
import common.idle as idle # when we launch gajim from sources
@@ -171,7 +173,12 @@ class ConnectionBytestream:
file_props['sha_str'] = sha_str
if not ft_override_host_to_send:
ft_override_host_to_send = self.peerhost[0]
- ft_override_host_to_send = socket.gethostbyname(ft_override_host_to_send)
+ try:
+ ft_override_host_to_send = socket.gethostbyname(
+ ft_override_host_to_send)
+ except socket.gaierror:
+ self.dispatch('ERROR', (_('Wrong host'), _('The host you configured as the ft_override_host_to_send advanced option is not valid, so ignored.')))
+ ft_override_host_to_send = self.peerhost[0]
listener = gajim.socks5queue.start_listener(self.peerhost[0], port,
sha_str, self._result_socks5_sid, file_props['sid'])
if listener == None:
@@ -582,8 +589,8 @@ class ConnectionDisco:
iq.setID(id)
# Wait the answer during 30 secondes
self.awaiting_timeouts[gajim.idlequeue.current_time() + 30] = (id,
- _('Registration information for transport %s has not arrived in time' % \
- agent))
+ _('Registration information for transport %s has not arrived in time') % \
+ agent)
self.connection.SendAndCallForResponse(iq, self._ReceivedRegInfo,
{'agent': agent})
@@ -746,17 +753,28 @@ class ConnectionDisco:
qc = iq_obj.getQueryChildren()
if not qc:
qc = []
+ is_muc = False
+ transport_type = ''
for i in qc:
if i.getName() == 'identity':
attr = {}
for key in i.getAttrs().keys():
attr[key] = i.getAttr(key)
+ if attr.has_key('category') and attr['category'] in ('gateway', 'headline')\
+ and attr.has_key('type'):
+ transport_type = attr['type']
+ if attr.has_key('category') and attr['category'] == 'conference' \
+ and attr.has_key('type') and attr['type'] == 'text':
+ is_muc = True
identities.append(attr)
elif i.getName() == 'feature':
features.append(i.getAttr('var'))
- elif i.getName() == 'x' and i.getAttr('xmlns') == common.xmpp.NS_DATA:
+ elif i.getName() == 'x' and i.getNamespace() == common.xmpp.NS_DATA:
data.append(common.xmpp.DataForm(node=i))
jid = helpers.get_full_jid_from_iq(iq_obj)
+ if transport_type and jid not in gajim.transport_type:
+ gajim.transport_type[jid] = transport_type
+ gajim.logger.save_transport_type(jid, transport_type)
id = iq_obj.getID()
if not identities: # ejabberd doesn't send identities when we browse online users
#FIXME: see http://www.jabber.ru/bugzilla/show_bug.cgi?id=225
@@ -764,6 +782,14 @@ class ConnectionDisco:
if id[0] == 'p':
if features.__contains__(common.xmpp.NS_BYTESTREAM):
gajim.proxy65_manager.resolve(jid, self.connection, self.name)
+ if features.__contains__(common.xmpp.NS_MUC) and is_muc:
+ type_ = transport_type or 'jabber'
+ self.muc_jid[type_] = jid
+ if transport_type:
+ if self.available_transports.has_key(transport_type):
+ self.available_transports[transport_type].append(jid)
+ else:
+ self.available_transports[transport_type] = [jid]
self.dispatch('AGENT_INFO_INFO', (jid, node, identities,
features, data))
@@ -871,7 +897,10 @@ class ConnectionVcard:
id = self.connection.getAnID()
iq.setID(id)
- self.awaiting_answers[id] = (VCARD_ARRIVED, jid)
+ j = jid
+ if not j:
+ j = gajim.get_jid_from_account(self.name)
+ self.awaiting_answers[id] = (VCARD_ARRIVED, j)
if is_fake_jid:
room_jid, nick = gajim.get_room_and_nick_from_fjid(jid)
if not room_jid in self.room_jids:
@@ -959,9 +988,12 @@ class ConnectionVcard:
elif self.awaiting_answers[id][0] == VCARD_ARRIVED:
# If vcard is empty, we send to the interface an empty vcard so that
# it knows it arrived
- if not iq_obj.getTag('vCard'):
- jid = self.awaiting_answers[id][1]
- our_jid = gajim.get_jid_from_account(self.name)
+ jid = self.awaiting_answers[id][1]
+ our_jid = gajim.get_jid_from_account(self.name)
+ if iq_obj.getType() == 'error' and jid == our_jid:
+ # our server doesn't support vcard
+ self.vcard_supported = False
+ if not iq_obj.getTag('vCard') or iq_obj.getType() == 'error':
if jid and jid != our_jid:
# Write an empty file
self.save_vcard_to_hd(jid, '')
@@ -971,6 +1003,29 @@ class ConnectionVcard:
elif self.awaiting_answers[id][0] == AGENT_REMOVED:
jid = self.awaiting_answers[id][1]
self.dispatch('AGENT_REMOVED', jid)
+ elif self.awaiting_answers[id][0] == METACONTACTS_ARRIVED:
+ if iq_obj.getType() == 'result':
+ # Metacontact tags
+ # http://www.jabber.org/jeps/jep-XXXX.html
+ meta_list = {}
+ query = iq_obj.getTag('query')
+ storage = query.getTag('storage')
+ metas = storage.getTags('meta')
+ for meta in metas:
+ jid = meta.getAttr('jid')
+ tag = meta.getAttr('tag')
+ data = {'jid': jid}
+ order = meta.getAttr('order')
+ if order != None:
+ data['order'] = order
+ if meta_list.has_key(tag):
+ meta_list[tag].append(data)
+ else:
+ meta_list[tag] = [data]
+ self.dispatch('METACONTACTS', meta_list)
+ # We can now continue connection by requesting the roster
+ self.connection.initRoster()
+
del self.awaiting_answers[id]
def _vCardCB(self, con, vc):
@@ -1072,6 +1127,9 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
# keep the jids we auto added (transports contacts) to not send the
# SUBSCRIBED event to gui
self.automatically_added = []
+ # keep the latest subscribed event for each jid to prevent loop when we
+ # acknoledge presences
+ self.subscribed_events = {}
try:
idle.init()
except:
@@ -1134,26 +1192,6 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
self.bookmarks.append(bm)
self.dispatch('BOOKMARKS', self.bookmarks)
- elif ns == 'storage:metacontacts':
- # Metacontact tags
- # http://www.jabber.org/jeps/jep-XXXX.html
- meta_list = {}
- metas = storage.getTags('meta')
- for meta in metas:
- jid = meta.getAttr('jid')
- tag = meta.getAttr('tag')
- data = {'jid': jid}
- order = meta.getAttr('order')
- if order != None:
- data['order'] = order
- if meta_list.has_key(tag):
- meta_list[tag].append(data)
- else:
- meta_list[tag] = [data]
- self.dispatch('METACONTACTS', meta_list)
- # We can now continue connection by requesting the roster
- self.connection.initRoster()
-
elif ns == 'gajim:prefs':
# Preferences data
# http://www.jabber.org/jeps/jep-0049.html
@@ -1236,6 +1274,16 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
jid_stripped, resource = gajim.get_room_and_nick_from_fjid(who)
self.dispatch('OS_INFO', (jid_stripped, resource, client_info, os_info))
+ def _TimeCB(self, con, iq_obj):
+ gajim.log.debug('TimeCB')
+ iq_obj = iq_obj.buildReply('result')
+ qp = iq_obj.getTag('query')
+ qp.setTagData('utc', strftime("%Y%m%dT%T", gmtime()))
+ qp.setTagData('tz', strftime("%Z", gmtime()))
+ qp.setTagData('display', strftime("%c", localtime()))
+ self.connection.send(iq_obj)
+ raise common.xmpp.NodeProcessed
+
def _gMailNewMailCB(self, con, gm):
'''Called when we get notified of new mail messages in gmail account'''
@@ -1332,16 +1380,10 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
if not msgtxt and chatstate_child.getTag('composing'):
chatstate = 'composing'
# JEP-0172 User Nickname
- user_nick = ''
- xtags = msg.getTags('x', attrs = {'type': 'result'},
- namespace = common.xmpp.NS_DATA)
- for xtag in xtags:
- df = common.xmpp.DataForm(node = xtag)
- field = df.getField('FORM_TYPE')
- if not field or field.getValue() != common.xmpp.NS_PROFILE:
- continue
- user_nick = df.getField('nickname').getValue()
-
+ user_nick = msg.getTagData('nick')
+ if not user_nick:
+ user_nick = ''
+
if encTag and GnuPG.USE_GPG:
#decrypt
encmsg = encTag.getData()
@@ -1372,8 +1414,7 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
if not self.last_history_line.has_key(jid):
return
self.dispatch('GC_MSG', (frm, msgtxt, tim))
- if self.name not in no_log_for and jid in self.last_history_line \
- and not int(float(time.mktime(tim))) <= \
+ if self.name not in no_log_for and not int(float(time.mktime(tim))) <= \
self.last_history_line[jid] and msgtxt:
gajim.logger.write('gc_msg', frm, msgtxt, tim = tim)
elif mtype == 'chat': # it's type 'chat'
@@ -1433,13 +1474,26 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
if ptype == 'available':
ptype = None
gajim.log.debug('PresenceCB: %s' % ptype)
- who = helpers.get_full_jid_from_iq(prs)
+ try:
+ who = helpers.get_full_jid_from_iq(prs)
+ except:
+ if prs.getTag('error').getTag('jid-malformed'):
+ # wrong jid, we probably tried to change our nick in a room to a non valid
+ # one
+ who = str(prs.getFrom())
+ jid_stripped, resource = gajim.get_room_and_nick_from_fjid(who)
+ self.dispatch('GC_MSG', (jid_stripped, _('Nickname not allowed: %s') % \
+ resource, None))
+ return
jid_stripped, resource = gajim.get_room_and_nick_from_fjid(who)
timestamp = None
is_gc = False # is it a GC presence ?
sigTag = None
avatar_sha = None
- user_nick = '' # for JEP-0172
+ # JEP-0172 User Nickname
+ user_nick = prs.getTagData('nick')
+ if not user_nick:
+ user_nick = ''
transport_auto_auth = False
xtags = prs.getTags('x')
for x in xtags:
@@ -1460,19 +1514,10 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
agent = gajim.get_server_from_jid(jid_stripped)
if self.connection.getRoster().getItem(agent): # to be sure it's a transport contact
transport_auto_auth = True
- if namespace == common.xmpp.NS_DATA:
- # JEP-0172
- df = common.xmpp.DataForm(node = x)
- if df.getType() != 'result':
- continue
- field = df.getField('FORM_TYPE')
- if not field or field.getValue() != common.xmpp.NS_PROFILE:
- continue
- user_nick = df.getField('nickname').getValue()
no_log_for = gajim.config.get_per('accounts', self.name,
'no_log_for').split()
- status = prs.getStatus()
+ status = prs.getStatus() or ''
show = prs.getShow()
if not show in STATUS_LIST:
show = '' # We ignore unknown show
@@ -1531,7 +1576,16 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
if not ptype or ptype == 'unavailable':
if gajim.config.get('log_contact_status_changes') and self.name\
not in no_log_for and jid_stripped not in no_log_for:
- gajim.logger.write('gcstatus', who, status, show)
+ gc_c = gajim.contacts.get_gc_contact(self.name, jid_stripped, resource)
+ st = status or ''
+ if gc_c:
+ jid = gc_c.jid
+ else:
+ jid = prs.getJid()
+ if jid:
+ # we know real jid, save it in db
+ st += ' (%s)' % jid
+ gajim.logger.write('gcstatus', who, st, show)
if avatar_sha:
if self.vcard_shas.has_key(who):
if avatar_sha != self.vcard_shas[who]:
@@ -1567,14 +1621,40 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
if jid_stripped in self.automatically_added:
self.automatically_added.remove(jid_stripped)
else:
- self.dispatch('SUBSCRIBED', (jid_stripped, resource))
+ # detect a subscription loop
+ if not self.subscribed_events.has_key(jid_stripped):
+ self.subscribed_events[jid_stripped] = []
+ self.subscribed_events[jid_stripped].append(time.time())
+ block = False
+ if len(self.subscribed_events[jid_stripped]) > 5:
+ if time.time() - self.subscribed_events[jid_stripped][0] < 5:
+ block = True
+ self.subscribed_events[jid_stripped] = self.subscribed_events[jid_stripped][1:]
+ if block:
+ gajim.config.set_per('account', self.name,
+ 'dont_ack_subscription', True)
+ else:
+ self.dispatch('SUBSCRIBED', (jid_stripped, resource))
# BE CAREFUL: no con.updateRosterItem() in a callback
gajim.log.debug(_('we are now subscribed to %s') % who)
elif ptype == 'unsubscribe':
gajim.log.debug(_('unsubscribe request from %s') % who)
elif ptype == 'unsubscribed':
gajim.log.debug(_('we are now unsubscribed from %s') % who)
- self.dispatch('UNSUBSCRIBED', jid_stripped)
+ # detect a unsubscription loop
+ if not self.subscribed_events.has_key(jid_stripped):
+ self.subscribed_events[jid_stripped] = []
+ self.subscribed_events[jid_stripped].append(time.time())
+ block = False
+ if len(self.subscribed_events[jid_stripped]) > 5:
+ if time.time() - self.subscribed_events[jid_stripped][0] < 5:
+ block = True
+ self.subscribed_events[jid_stripped] = self.subscribed_events[jid_stripped][1:]
+ if block:
+ gajim.config.set_per('account', self.name, 'dont_ack_subscription',
+ True)
+ else:
+ self.dispatch('UNSUBSCRIBED', jid_stripped)
elif ptype == 'error':
errmsg = prs.getError()
errcode = prs.getErrorCode()
@@ -1733,13 +1813,18 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
print >> sys.stderr, _('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') % jid
else:
infos = raw_roster[jid]
- if jid != our_jid and (not infos['subscription'] or infos['subscription'] == \
- 'none') and (not infos['ask'] or infos['ask'] == 'none') and not infos['name'] \
- and not infos['groups']:
+ if jid != our_jid and (not infos['subscription'] or \
+ infos['subscription'] == 'none') and (not infos['ask'] or \
+ infos['ask'] == 'none') and not infos['name'] and \
+ not infos['groups']:
# remove this useless item, it won't be shown in roster anyway
self.connection.getRoster().delItem(jid)
elif jid != our_jid: # don't add our jid
roster[j] = raw_roster[jid]
+ if gajim.jid_is_transport(jid) and \
+ not gajim.get_transport_name_from_jid(jid):
+ # we can't determine which iconset to use
+ self.discoverInfo(jid)
self.dispatch('ROSTER', roster)
@@ -1831,6 +1916,8 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
common.xmpp.NS_DISCO_INFO)
con.RegisterHandler('iq', self._VersionCB, 'get',
common.xmpp.NS_VERSION)
+ con.RegisterHandler('iq', self._TimeCB, 'get',
+ common.xmpp.NS_TIME)
con.RegisterHandler('iq', self._LastCB, 'get',
common.xmpp.NS_LAST)
con.RegisterHandler('iq', self._LastResultCB, 'result',
@@ -1845,8 +1932,6 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
common.xmpp.NS_ROSTER)
con.RegisterHandler('iq', self._PrivateCB, 'result',
common.xmpp.NS_PRIVATE)
- con.RegisterHandler('iq', self._PrivateErrorCB, 'error',
- common.xmpp.NS_PRIVATE)
con.RegisterHandler('iq', self._HttpAuthCB, 'get',
common.xmpp.NS_HTTP_AUTH)
con.RegisterHandler('iq', self._CommandExecuteCB, 'set',
diff --git a/src/common/contacts.py b/src/common/contacts.py
index 8e8206917..e6d095641 100644
--- a/src/common/contacts.py
+++ b/src/common/contacts.py
@@ -210,7 +210,7 @@ class Contacts:
contacts = self.get_contacts_from_jid(account, jid)
if not contacts and '/' in jid:
# jid may be a fake jid, try it
- room, nick = jid.split('/')
+ room, nick = jid.split('/', 1)
contact = self.get_gc_contact(account, room, nick)
return contact
return self.get_highest_prio_contact_from_contacts(contacts)
diff --git a/src/common/events.py b/src/common/events.py
new file mode 100644
index 000000000..4a7ba9e87
--- /dev/null
+++ b/src/common/events.py
@@ -0,0 +1,233 @@
+## common/events.py
+##
+## Contributors for this file:
+## - Yann Le Boulanger <asterix@lagaule.org>
+##
+## Copyright (C) 2006 Yann Le Boulanger <asterix@lagaule.org>
+## Vincent Hanquez <tab@snarc.org>
+## Nikos Kouremenos <nkour@jabber.org>
+## Dimitur Kirov <dkirov@gmail.com>
+## Travis Shirk <travis@pobox.com>
+## Norman Rasmussen <norman@rasmussen.co.za>
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published
+## by the Free Software Foundation; version 2 only.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+
+import time
+import gajim
+
+class Event:
+ '''Information concerning each event'''
+ def __init__(self, type_, time_, parameters, show_in_roster = False,
+ show_in_systray = True):
+ ''' type_ in chat, normal, file-request, file-error, file-completed,
+ file-request-error, file-send-error, file-stopped, gc_msg, pm,
+ printed_chat, printed_gc_msg, printed_pm
+ parameters is (per type_):
+ chat, normal: [message, subject, kind, time, encrypted, resource,
+ msg_id]
+ where kind in error, incoming
+ file-*: file_props
+ gc_msg: None
+ printed_*: None
+ messages that are already printed in chat, but not read'''
+ self.type_ = type_
+ self.time_ = time_
+ self.parameters = parameters
+ self.show_in_roster = show_in_roster
+ self.show_in_systray = show_in_systray
+
+class Events:
+ '''Information concerning all events'''
+ def __init__(self):
+ self._events = {} # list of events {acct: {jid1: [E1, E2]}, }
+
+ def change_account_name(self, old_name, new_name):
+ if self._events.has_key(old_name):
+ self._events[new_name] = self._events[old_name]
+ del self._events[old_name]
+
+ def add_account(self, account):
+ self._events[account] = {}
+
+ def get_accounts(self):
+ return self._events.keys()
+
+ def remove_account(self, account):
+ del self._events[account]
+
+ def create_event(self, type_, parameters, time_ = time.time(),
+ show_in_roster = False, show_in_systray = True):
+ return Event(type_, time_, parameters, show_in_roster,
+ show_in_systray)
+
+ def add_event(self, account, jid, event):
+ # No such account before ?
+ if not self._events.has_key(account):
+ self._events[account] = {jid: [event]}
+ # no such jid before ?
+ elif not self._events[account].has_key(jid):
+ self._events[account][jid] = [event]
+ else:
+ self._events[account][jid].append(event)
+ if event.show_in_systray and gajim.interface.systray_capabilities:
+ gajim.interface.systray.set_img()
+
+ def remove_events(self, account, jid, event = None, types = []):
+ '''if event is not speficied, remove all events from this jid,
+ optionnaly only from given type
+ return True if no such event found'''
+ if not self._events.has_key(account):
+ return True
+ if not self._events[account].has_key(jid):
+ return True
+ if event: # remove only one event
+ if event in self._events[account][jid]:
+ if len(self._events[account][jid]) == 1:
+ del self._events[account][jid]
+ else:
+ self._events[account][jid].remove(event)
+ if event.show_in_systray and gajim.interface.systray_capabilities:
+ gajim.interface.systray.set_img()
+ return
+ else:
+ return True
+ if types:
+ new_list = [] # list of events to keep
+ for ev in self._events[account][jid]:
+ if ev.type_ not in types:
+ new_list.append(ev)
+ if len(new_list) == len(self._events[account][jid]):
+ return True
+ if new_list:
+ self._events[account][jid] = new_list
+ else:
+ del self._events[account][jid]
+ if gajim.interface.systray_capabilities:
+ gajim.interface.systray.set_img()
+ return
+ # no event nor type given, remove them all
+ del self._events[account][jid]
+ if gajim.interface.systray_capabilities:
+ gajim.interface.systray.set_img()
+
+ def get_nb_events(self, types = []):
+ return self._get_nb_events(types = types)
+
+ def get_events(self, account, jid = None, types = []):
+ '''if event is not speficied, remove all events from this jid,
+ optionnaly only from given type'''
+ if not self._events.has_key(account):
+ return []
+ if not jid:
+ return self._events[account]
+ if not self._events[account].has_key(jid):
+ return []
+ events_list = [] # list of events
+ for ev in self._events[account][jid]:
+ if not types or ev.type_ in types:
+ events_list.append(ev)
+ return events_list
+
+ def get_first_event(self, account, jid = None, type_ = None):
+ '''Return the first event of type type_ if given'''
+ events_list = self.get_events(account, jid, type_)
+ # be sure it's bigger than latest event
+ first_event_time = time.time() + 1
+ first_event = None
+ for event in events_list:
+ if event.time_ < first_event_time:
+ first_event_time = event.time_
+ first_event = event
+ return first_event
+
+ def _get_nb_events(self, account = None, jid = None, attribute = None, types = []):
+ '''return the number of events'''
+ nb = 0
+ if account:
+ accounts = [account]
+ else:
+ accounts = self._events.keys()
+ for acct in accounts:
+ if not self._events.has_key(acct):
+ continue
+ if jid:
+ jids = [jid]
+ else:
+ jids = self._events[acct].keys()
+ for j in jids:
+ if not self._events[acct].has_key(j):
+ continue
+ for event in self._events[acct][j]:
+ if types and event.type_ not in types:
+ continue
+ if not attribute or \
+ attribute == 'systray' and event.show_in_systray or \
+ attribute == 'roster' and event.show_in_roster:
+ nb += 1
+ return nb
+
+ def _get_some_events(self, attribute):
+ '''attribute in systray, roster'''
+ events = {}
+ for account in self._events:
+ events[account] = {}
+ for jid in self._events[account]:
+ events[account][jid] = []
+ for event in self._events[account][jid]:
+ if attribute == 'systray' and event.show_in_systray or \
+ attribute == 'roster' and event.show_in_roster:
+ events[account][jid].append(event)
+ if not events[account][jid]:
+ del events[account][jid]
+ if not events[account]:
+ del events[account]
+ return events
+
+ def _get_first_event_with_attribute(self, events):
+ '''get the first event
+ events is in the form {account1: {jid1: [ev1, ev2], },. }'''
+ # be sure it's bigger than latest event
+ first_event_time = time.time() + 1
+ first_account = None
+ first_jid = None
+ first_event = None
+ for account in events:
+ for jid in events[account]:
+ for event in events[account][jid]:
+ if event.time_ < first_event_time:
+ first_event_time = event.time_
+ first_account = account
+ first_jid = jid
+ first_event = event
+ return first_account, first_jid, first_event
+
+ def get_nb_systray_events(self, types = []):
+ '''returns the number of events displayedin roster'''
+ return self._get_nb_events(attribute = 'systray', types = types)
+
+ def get_systray_events(self):
+ '''return all events that must be displayed in systray:
+ {account1: {jid1: [ev1, ev2], },. }'''
+ return self._get_some_events('systray')
+
+ def get_first_systray_event(self):
+ events = self.get_systray_events()
+ return self._get_first_event_with_attribute(events)
+
+ def get_nb_roster_events(self, account = None, jid = None, types = []):
+ '''returns the number of events displayedin roster'''
+ return self._get_nb_events(attribute = 'roster', account = account,
+ jid = jid, types = types)
+
+ def get_roster_events(self):
+ '''return all events that must be displayed in roster:
+ {account1: {jid1: [ev1, ev2], },. }'''
+ return self._get_some_events('roster')
diff --git a/src/common/gajim.py b/src/common/gajim.py
index 3a63266be..dc7794e6e 100644
--- a/src/common/gajim.py
+++ b/src/common/gajim.py
@@ -23,6 +23,7 @@ import locale
import config
from contacts import Contacts
+from events import Events
interface = None # The actual interface (the gtk one for the moment)
config = config.Config()
@@ -83,6 +84,8 @@ else:
gmail_domains = ['gmail.com', 'googlemail.com']
+transport_type = {} # list the type of transport
+
last_message_time = {} # list of time of the latest incomming message
# {acct1: {jid1: time1, jid2: time2}, }
encrypted_chats = {} # list of encrypted chats {acct1: [jid1, jid2], ..}
@@ -90,19 +93,14 @@ encrypted_chats = {} # list of encrypted chats {acct1: [jid1, jid2], ..}
contacts = Contacts()
gc_connected = {} # tell if we are connected to the room or not {acct: {room_jid: True}}
gc_passwords = {} # list of the pass required to enter a room {room_jid: password}
+automatic_rooms = {} # list of rooms that must be automaticaly configured and for which we have a list of invities {account: {room_jid: {'invities': []}}}
groups = {} # list of groups
newly_added = {} # list of contacts that has just signed in
to_be_removed = {} # list of contacts that has just signed out
-awaiting_events = {} # list of messages/FT reveived but not printed
- # awaiting_events[jid] = (type, (data1, data2, ...))
- # if type in ('chat', 'normal'): data = (message, subject, kind, time,
- # encrypted, resource)
- # kind can be (incoming, error)
- # if type in file-request, file-request-error, file-send-error, file-error,
- # file-completed, file-stopped:
- # data = file_props
+events = Events()
+
nicks = {} # list of our nick names in each account
# should we block 'contact signed in' notifications for this account?
# this is only for the first 30 seconds after we change our show
@@ -222,8 +220,11 @@ def get_transport_name_from_jid(jid, use_config_setting = True):
# jid was None. Yann why?
if not jid or (use_config_setting and not config.get('use_transports_iconsets')):
return
-
+
host = get_server_from_jid(jid)
+ if host in transport_type:
+ return transport_type[host]
+
# host is now f.e. icq.foo.org or just icq (sometimes on hacky transports)
host_splitted = host.split('.')
if len(host_splitted) != 0:
@@ -233,7 +234,7 @@ def get_transport_name_from_jid(jid, use_config_setting = True):
if host == 'aim':
return 'aim'
elif host == 'gg':
- return 'gadugadu'
+ return 'gadu-gadu'
elif host == 'irc':
return 'irc'
elif host == 'icq':
@@ -281,18 +282,6 @@ def get_hostname_from_account(account_name, use_srv = False):
return config.get_per('accounts', account_name, 'custom_host')
return config.get_per('accounts', account_name, 'hostname')
-def get_first_event(account, jid, typ = None):
- '''returns the first event of the given type from the awaiting_events queue'''
- if not awaiting_events[account].has_key(jid):
- return None
- q = awaiting_events[account][jid]
- if not typ:
- return q[0]
- for ev in q:
- if ev[0] == typ:
- return ev
- return None
-
def get_notification_image_prefix(jid):
'''returns the prefix for the notification images'''
transport_name = get_transport_name_from_jid(jid)
diff --git a/src/common/helpers.py b/src/common/helpers.py
index a462839a9..1226f2cd5 100644
--- a/src/common/helpers.py
+++ b/src/common/helpers.py
@@ -18,6 +18,7 @@
import sre
import os
+import subprocess
import urllib
import errno
import select
@@ -360,6 +361,11 @@ def is_in_path(name_of_command, return_abs_path = False):
else:
return is_in_dir
+def exec_command(command):
+ '''command is a string that contain arguments'''
+# os.system(command)
+ subprocess.Popen(command.split())
+
def launch_browser_mailer(kind, uri):
#kind = 'url' or 'mail'
if os.name == 'nt':
@@ -383,11 +389,9 @@ def launch_browser_mailer(kind, uri):
command = gajim.config.get('custommailapp')
if command == '': # if no app is configured
return
- # we add the uri in "" so we have good parsing from shell
- uri = uri.replace('"', '\\"') # escape "
- command = command + ' "' + uri + '" &'
- try: #FIXME: when we require python2.4+ use subprocess module
- os.system(command)
+ command = command + ' ' + uri
+ try:
+ exec_command(command)
except:
pass
@@ -406,11 +410,9 @@ def launch_file_manager(path_to_open):
command = gajim.config.get('custom_file_manager')
if command == '': # if no app is configured
return
- # we add the path in "" so we have good parsing from shell
- path_to_open = path_to_open.replace('"', '\\"') # escape "
- command = command + ' "' + path_to_open + '" &'
- try: #FIXME: when we require python2.4+ use subprocess module
- os.system(command)
+ command = command + ' ' + path_to_open
+ try:
+ exec_command(command)
except:
pass
@@ -436,11 +438,8 @@ def play_sound_file(path_to_soundfile):
if gajim.config.get('soundplayer') == '':
return
player = gajim.config.get('soundplayer')
- # we add the path in "" so we have good parsing from shell
- path_to_soundfile = path_to_soundfile.replace('"', '\\"') # escape "
- command = player + ' "' + path_to_soundfile + '" &'
- #FIXME: when we require 2.4+ use subprocess module
- os.system(command)
+ command = player + ' ' + path_to_soundfile
+ exec_command(command)
def get_file_path_from_dnd_dropped_uri(uri):
path = urllib.url2pathname(uri) # escape special chars
@@ -464,14 +463,6 @@ def from_xs_boolean_to_python_boolean(value):
return val
-def ensure_unicode_string(s):
- # py23 u'abc'.decode('utf-8') raises
- # python24 does not. if python23 is ooold we can remove this func
- # FIXME: remove this when we abandon py23
- if isinstance(s, str):
- s = s.decode('utf-8')
- return s
-
def get_xmpp_show(show):
if show in ('online', 'offline'):
return None
@@ -514,9 +505,9 @@ def get_global_status():
def get_icon_name_to_show(contact, account = None):
'''Get the icon name to show in online, away, requested, ...'''
- if account and gajim.awaiting_events[account].has_key(contact.jid):
+ if account and gajim.events.get_nb_roster_events(account, contact.jid):
return 'message'
- if account and gajim.awaiting_events[account].has_key(
+ if account and gajim.events.get_nb_roster_events(account,
contact.get_full_jid()):
return 'message'
if contact.jid.find('@') <= 0: # if not '@' or '@' starts the jid ==> agent
@@ -543,6 +534,14 @@ def decode_string(string):
return string
+def ensure_utf8_string(string):
+ '''make sure string is in UTF-8'''
+ try:
+ string = decode_string(string).encode('utf-8')
+ except:
+ pass
+ return string
+
def get_windows_reg_env(varname, default=''):
'''asks for paths commonly used but not exposed as ENVs
in english Windows 2003 those are:
@@ -727,20 +726,73 @@ def sanitize_filename(filename):
return filename
-def allow_showing_notification(account):
+def allow_showing_notification(account, type = None, advanced_notif_num = None,
+first = True):
'''is it allowed to show nofication?
- check OUR status and if we allow notifications for that status'''
+ check OUR status and if we allow notifications for that status
+ type is the option that need to be True ex: notify_on_signing
+ first: set it to false when it's not the first message'''
+ if advanced_notif_num != None:
+ popup = gajim.config.get_per('notifications', str(advanced_notif_num),
+ 'popup')
+ if popup == 'yes':
+ return True
+ if popup == 'no':
+ return False
+ if type and (not gajim.config.get(type) or not first):
+ return False
+ if type and gajim.config.get(type) and first:
+ return True
if gajim.config.get('autopopupaway'): # always show notification
return True
if gajim.connections[account].connected in (2, 3): # we're online or chat
return True
return False
-def allow_popup_window(account):
+def allow_popup_window(account, advanced_notif_num = None):
'''is it allowed to popup windows?'''
+ if advanced_notif_num != None:
+ popup = gajim.config.get_per('notifications', str(advanced_notif_num),
+ 'auto_open')
+ if popup == 'yes':
+ return True
+ if popup == 'no':
+ return False
autopopup = gajim.config.get('autopopup')
autopopupaway = gajim.config.get('autopopupaway')
if autopopup and (autopopupaway or \
gajim.connections[account].connected in (2, 3)): # we're online or chat
return True
return False
+
+def allow_sound_notification(sound_event, advanced_notif_num = None):
+ if advanced_notif_num != None:
+ sound = gajim.config.get_per('notifications', str(advanced_notif_num),
+ 'sound')
+ if sound == 'yes':
+ return True
+ if sound == 'no':
+ return False
+ if gajim.config.get_per('soundevents', sound_event, 'enabled'):
+ return True
+ return False
+
+def get_chat_control(account, contact):
+ full_jid_with_resource = contact.jid
+ if contact.resource:
+ full_jid_with_resource += '/' + contact.resource
+ highest_contact = gajim.contacts.get_contact_with_highest_priority(
+ account, contact.jid)
+ # Look for a chat control that has the given resource, or default to
+ # one without resource
+ ctrl = gajim.interface.msg_win_mgr.get_control(full_jid_with_resource,
+ account)
+ if ctrl:
+ return ctrl
+ elif not highest_contact or not highest_contact.resource:
+ # unknow contact or offline message
+ return gajim.interface.msg_win_mgr.get_control(contact.jid, account)
+ elif highest_contact and contact.resource != \
+ highest_contact.resource:
+ return None
+ return gajim.interface.msg_win_mgr.get_control(contact.jid, account)
diff --git a/src/common/logger.py b/src/common/logger.py
index 8ab8ee785..11f784406 100644
--- a/src/common/logger.py
+++ b/src/common/logger.py
@@ -78,30 +78,50 @@ class Constants:
self.SHOW_OFFLINE
) = range(6)
+ (
+ self.TYPE_AIM,
+ self.TYPE_GG,
+ self.TYPE_HTTP_WS,
+ self.TYPE_ICQ,
+ self.TYPE_MSN,
+ self.TYPE_QQ,
+ self.TYPE_SMS,
+ self.TYPE_SMTP,
+ self.TYPE_TLEN,
+ self.TYPE_YAHOO,
+ self.TYPE_NEWMAIL,
+ self.TYPE_RSS,
+ self.TYPE_WEATHER,
+ ) = range(13)
+
constants = Constants()
class Logger:
def __init__(self):
self.jids_already_in = [] # holds jids that we already have in DB
-
+ self.con = None
+
if not os.path.exists(LOG_DB_PATH):
# this can happen only the first time (the time we create the db)
# db is not created here but in src/common/checks_paths.py
return
self.init_vars()
-
+
def init_vars(self):
# if locked, wait up to 20 sec to unlock
# before raise (hopefully should be enough)
+ if self.con:
+ self.con.close()
self.con = sqlite.connect(LOG_DB_PATH, timeout = 20.0,
isolation_level = 'IMMEDIATE')
self.cur = self.con.cursor()
-
+
self.get_jids_already_in_db()
def get_jids_already_in_db(self):
self.cur.execute('SELECT jid FROM jids')
rows = self.cur.fetchall() # list of tupples: [(u'aaa@bbb',), (u'cc@dd',)]
+ self.jids_already_in = []
for row in rows:
# row[0] is first item of row (the only result here, the jid)
self.jids_already_in.append(row[0])
@@ -192,7 +212,66 @@ class Logger:
show_col = 'UNKNOWN'
return kind_col, show_col
-
+
+ def convert_human_transport_type_to_db_api_values(self, type_):
+ '''converts from string style to constant ints for db'''
+ if type_ == 'aim':
+ return constants.TYPE_AIM
+ if type_ == 'gadu-gadu':
+ return constants.TYPE_GG
+ if type_ == 'http-ws':
+ return constants.TYPE_HTTP_WS
+ if type_ == 'icq':
+ return constants.TYPE_ICQ
+ if type_ == 'msn':
+ return constants.TYPE_MSN
+ if type_ == 'qq':
+ return constants.TYPE_QQ
+ if type_ == 'sms':
+ return constants.TYPE_SMS
+ if type_ == 'smtp':
+ return constants.TYPE_SMTP
+ if type_ == 'tlen':
+ return constants.TYPE_TLEN
+ if type_ == 'yahoo':
+ return constants.TYPE_YAHOO
+ if type_ == 'newmail':
+ return constants.TYPE_NEWMAIL
+ if type_ == 'rss':
+ return constants.TYPE_RSS
+ if type_ == 'weather':
+ return constants.TYPE_WEATHER
+ return None
+
+ def convert_api_values_to_human_transport_type(self, type_id):
+ '''converts from constant ints for db to string style'''
+ if type_id == constants.TYPE_AIM:
+ return 'aim'
+ if type_id == constants.TYPE_GG:
+ return 'gadu-gadu'
+ if type_id == constants.TYPE_HTTP_WS:
+ return 'http-ws'
+ if type_id == constants.TYPE_ICQ:
+ return 'icq'
+ if type_id == constants.TYPE_MSN:
+ return 'msn'
+ if type_id == constants.TYPE_QQ:
+ return 'qq'
+ if type_id == constants.TYPE_SMS:
+ return 'sms'
+ if type_id == constants.TYPE_SMTP:
+ return 'smtp'
+ if type_id == constants.TYPE_TLEN:
+ return 'tlen'
+ if type_id == constants.TYPE_YAHOO:
+ return 'yahoo'
+ if type_id == constants.TYPE_NEWMAIL:
+ return 'newmail'
+ if type_id == constants.TYPE_RSS:
+ return 'rss'
+ if type_id == constants.TYPE_WEATHER:
+ return 'weather'
+
def commit_to_db(self, values, write_unread = False):
#print 'saving', values
sql = 'INSERT INTO logs (jid_id, contact_name, time, kind, show, message, subject) VALUES (?, ?, ?, ?, ?, ?, ?)'
@@ -238,25 +317,8 @@ class Logger:
self.cur.execute(
'SELECT message_id from unread_messages WHERE jid_id = %d' % jid_id)
results = self.cur.fetchall()
- # Remove before 0.10
except:
- try:
- self.cur.executescript('DROP TABLE unread_messages;')
- self.con.commit()
- except:
- pass
- try:
- self.cur.executescript('''CREATE TABLE unread_messages(
- message_id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
- jid_id INTEGER
- );''')
- self.con.commit()
- except:
- pass
- self.con.close()
- self.jids_already_in = []
- self.init_vars()
- return []
+ pass
for message in results:
msg_id = message[0]
@@ -515,3 +577,43 @@ class Logger:
jid_id = self.get_jid_id(jid)
where_sql = 'jid_id = %s' % jid_id
return where_sql
+
+ def save_transport_type(self, jid, type_):
+ '''save the type of the transport in DB'''
+ type_id = self.convert_human_transport_type_to_db_api_values(type_)
+ if not type_id:
+ # unknown type
+ return
+ self.cur.execute(
+ 'SELECT type from transports_cache WHERE transport = "%s"' % jid)
+ results = self.cur.fetchall()
+ if results:
+ result = results[0][0]
+ if result == type_id:
+ return
+ self.cur.execute(
+ 'UPDATE transports_cache SET type = %d WHERE transport = "%s"' % (type_id,
+ jid))
+ try:
+ self.con.commit()
+ except sqlite.OperationalError, e:
+ print >> sys.stderr, str(e)
+ return
+ self.cur.execute(
+ 'INSERT INTO transports_cache VALUES ("%s", %d)' % (jid, type_id))
+ try:
+ self.con.commit()
+ except sqlite.OperationalError, e:
+ print >> sys.stderr, str(e)
+
+ def get_transports_type(self):
+ '''return all the type of the transports in DB'''
+ self.cur.execute(
+ 'SELECT * from transports_cache')
+ results = self.cur.fetchall()
+ if not results:
+ return {}
+ answer = {}
+ for result in results:
+ answer[result[0]] = self.convert_api_values_to_human_transport_type(result[1])
+ return answer
diff --git a/src/common/optparser.py b/src/common/optparser.py
index d7f27647d..5459905b7 100644
--- a/src/common/optparser.py
+++ b/src/common/optparser.py
@@ -144,7 +144,10 @@ class OptionsParser:
self.update_config_to_01011()
if old < [0, 10, 1, 2] and new >= [0, 10, 1, 2]:
self.update_config_to_01012()
+ if old < [0, 10, 1, 3] and new >= [0, 10, 1, 3]:
+ self.update_config_to_01013()
+ gajim.logger.init_vars()
gajim.config.set('version', new_version)
def update_config_x_to_09(self):
@@ -272,3 +275,29 @@ class OptionsParser:
self.old_values['emoticons_theme'] == 'Disabled':
gajim.config.set('emoticons_theme', '')
gajim.config.set('version', '0.10.1.2')
+
+ def update_config_to_01013(self):
+ '''create table transports_cache if there is no such table'''
+ import exceptions
+ try:
+ from pysqlite2 import dbapi2 as sqlite
+ except ImportError:
+ raise exceptions.PysqliteNotAvailable
+ import logger
+
+ con = sqlite.connect(logger.LOG_DB_PATH)
+ cur = con.cursor()
+ try:
+ cur.executescript(
+ '''
+ CREATE TABLE transports_cache (
+ transport TEXT UNIQUE,
+ type INTEGER
+ );
+ '''
+ )
+ con.commit()
+ except sqlite.OperationalError, e:
+ pass
+ con.close()
+ gajim.config.set('version', '0.10.1.3')
diff --git a/src/common/xmpp/client_nb.py b/src/common/xmpp/client_nb.py
index 145b17113..40753ef4e 100644
--- a/src/common/xmpp/client_nb.py
+++ b/src/common/xmpp/client_nb.py
@@ -126,12 +126,11 @@ class NBCommonClient(CommonClient):
def _on_connected(self):
self.connected = 'tcp'
- if (self._Ssl is None and self.Connection.getPort() in (5223, 443)) or self._Ssl:
- try:
- transports_nb.NonBlockingTLS().PlugIn(self, now=1)
- self.connected = 'ssl'
- except socket.sslerror:
+ if self._Ssl:
+ transports_nb.NonBlockingTLS().PlugIn(self, now=1)
+ if not self.Connection: # ssl error, stream is closed
return
+ self.connected = 'ssl'
self.onreceive(self._on_receive_document_attrs)
dispatcher_nb.Dispatcher().PlugIn(self)
@@ -194,6 +193,8 @@ class NonBlockingClient(NBCommonClient):
self.isplugged = True
self.onreceive(None)
transports_nb.NonBlockingTLS().PlugIn(self)
+ if not self.Connection: # ssl error, stream is closed
+ return True
if not self.Dispatcher.Stream._document_attrs.has_key('version') or \
not self.Dispatcher.Stream._document_attrs['version']=='1.0':
self._is_connected()
diff --git a/src/common/xmpp/dispatcher_nb.py b/src/common/xmpp/dispatcher_nb.py
index dbdaf4d63..ca13af184 100644
--- a/src/common/xmpp/dispatcher_nb.py
+++ b/src/common/xmpp/dispatcher_nb.py
@@ -134,6 +134,7 @@ class Dispatcher(PlugIn):
return 0
except ExpatError:
sys.exc_clear()
+ self.DEBUG('Invalid XML received from server. Forcing disconnect.')
self._owner.Connection.pollend()
return 0
if len(self._pendingExceptions) > 0:
diff --git a/src/common/xmpp/protocol.py b/src/common/xmpp/protocol.py
index 708fd670c..1add2a8e4 100644
--- a/src/common/xmpp/protocol.py
+++ b/src/common/xmpp/protocol.py
@@ -62,6 +62,7 @@ NS_MUC ='http://jabber.org/protocol/muc'
NS_MUC_USER =NS_MUC+'#user'
NS_MUC_ADMIN =NS_MUC+'#admin'
NS_MUC_OWNER =NS_MUC+'#owner'
+NS_NICK ='http://jabber.org/protocol/nick' # JEP-0172
NS_OFFLINE ='http://www.jabber.org/jeps/jep-0030.html' # JEP-0013
NS_PHYSLOC ='http://jabber.org/protocol/physloc' # JEP-0112
NS_PRESENCE ='presence' # Jabberd2
@@ -83,7 +84,7 @@ NS_SIGNED ='jabber:x:signed' # JEP-00
NS_STANZAS ='urn:ietf:params:xml:ns:xmpp-stanzas'
NS_STREAM ='http://affinix.com/jabber/stream'
NS_STREAMS ='http://etherx.jabber.org/streams'
-NS_TIME ='jabber:iq:time'
+NS_TIME ='jabber:iq:time' # JEP-0900
NS_TLS ='urn:ietf:params:xml:ns:xmpp-tls'
NS_VACATION ='http://jabber.org/protocol/vacation'
NS_VCARD ='vcard-temp'
diff --git a/src/common/xmpp/transports_nb.py b/src/common/xmpp/transports_nb.py
index b21b436dd..ad3456e6a 100644
--- a/src/common/xmpp/transports_nb.py
+++ b/src/common/xmpp/transports_nb.py
@@ -371,8 +371,12 @@ class NonBlockingTLS(PlugIn):
PlugIn.PlugIn(self, owner)
DBG_LINE='NonBlockingTLS'
self.on_tls_start = on_tls_start
- if now:
- res = self._startSSL()
+ if now:
+ try:
+ res = self._startSSL()
+ except Exception, e:
+ self._owner.socket.pollend()
+ return
self.tls_start()
return res
if self._owner.Dispatcher.Stream.features:
@@ -434,7 +438,11 @@ class NonBlockingTLS(PlugIn):
self.DEBUG('Got starttls response: ' + self.starttls,'error')
return
self.DEBUG('Got starttls proceed response. Switching to TLS/SSL...','ok')
- self._startSSL()
+ try:
+ self._startSSL()
+ except Exception, e:
+ self._owner.socket.pollend()
+ return
self._owner.Dispatcher.PlugOut()
dispatcher_nb.Dispatcher().PlugIn(self._owner)
diff --git a/src/config.py b/src/config.py
index 9b2883053..dd8e7bce3 100644
--- a/src/config.py
+++ b/src/config.py
@@ -53,6 +53,7 @@ class PreferencesWindow:
'''Initialize Preferences window'''
self.xml = gtkgui_helpers.get_glade('preferences_window.glade')
self.window = self.xml.get_widget('preferences_window')
+ self.window.set_transient_for(gajim.interface.roster.window)
self.iconset_combobox = self.xml.get_widget('iconset_combobox')
self.notify_on_new_message_radiobutton = self.xml.get_widget(
'notify_on_new_message_radiobutton')
@@ -375,6 +376,32 @@ class PreferencesWindow:
self.xml.get_widget('prompt_offline_status_message_checkbutton').\
set_active(st)
+ # Default Status messages
+ self.default_msg_tree = self.xml.get_widget('default_msg_treeview')
+ # (status, translated_status, message, enabled)
+ model = gtk.ListStore(str, str, str, bool)
+ self.default_msg_tree.set_model(model)
+ col = gtk.TreeViewColumn('Status')
+ self.default_msg_tree.append_column(col)
+ renderer = gtk.CellRendererText()
+ col.pack_start(renderer, False)
+ col.set_attributes(renderer, text = 1)
+ col = gtk.TreeViewColumn('Message')
+ self.default_msg_tree.append_column(col)
+ renderer = gtk.CellRendererText()
+ col.pack_start(renderer, True)
+ col.set_attributes(renderer, text = 2)
+ renderer.connect('edited', self.on_default_msg_cell_edited)
+ renderer.set_property('editable', True)
+ col = gtk.TreeViewColumn('Enabled')
+ self.default_msg_tree.append_column(col)
+ renderer = gtk.CellRendererToggle()
+ col.pack_start(renderer, False)
+ col.set_attributes(renderer, active = 3)
+ renderer.set_property('activatable', True)
+ renderer.connect('toggled', self.default_msg_toggled_cb)
+ self.fill_default_msg_treeview()
+
#Status messages
self.msg_tree = self.xml.get_widget('msg_treeview')
model = gtk.ListStore(str, str)
@@ -455,11 +482,14 @@ class PreferencesWindow:
self.on_msg_treemodel_row_changed)
self.msg_tree.get_model().connect('row-deleted',
self.on_msg_treemodel_row_deleted)
+ self.default_msg_tree.get_model().connect('row-changed',
+ self.on_default_msg_treemodel_row_changed)
self.theme_preferences = None
self.notebook.set_current_page(0)
self.window.show_all()
+ gtkgui_helpers.possibly_move_window_in_current_desktop(self.window)
def on_preferences_window_key_press_event(self, widget, event):
if event.keyval == gtk.keysyms.Escape:
@@ -590,7 +620,23 @@ class PreferencesWindow:
gajim.config.set('use_speller', active)
gajim.interface.save_config()
if active:
- self.apply_speller()
+ lang = gajim.config.get('speller_language')
+ if not lang:
+ lang = gajim.LANG
+ tv = gtk.TextView()
+ try:
+ spell = gtkspell.Spell(tv, lang)
+ except:
+ dialogs.ErrorDialog(
+ _('Dictionary for lang %s not available') % lang,
+ _('You have to install %s dictionary to use spellchecking, or '
+ 'choose another language by setting the speller_language option.'
+ ) % lang)
+ gajim.config.set('use_speller', False)
+ widget.set_active(False)
+ else:
+ gajim.config.set('speller_language', lang)
+ self.apply_speller()
else:
self.remove_speller()
@@ -787,6 +833,36 @@ class PreferencesWindow:
def on_auto_xa_message_entry_changed(self, widget):
gajim.config.set('autoxa_message', widget.get_text().decode('utf-8'))
+ def fill_default_msg_treeview(self):
+ model = self.default_msg_tree.get_model()
+ model.clear()
+ status = []
+ for status_ in gajim.config.get_per('defaultstatusmsg'):
+ status.append(status_)
+ status.sort()
+ for status_ in status:
+ msg = gajim.config.get_per('defaultstatusmsg', status_, 'message')
+ enabled = gajim.config.get_per('defaultstatusmsg', status_, 'enabled')
+ iter = model.append()
+ uf_show = helpers.get_uf_show(status_)
+ model.set(iter, 0, status_, 1, uf_show, 2, msg, 3, enabled)
+
+ def on_default_msg_cell_edited(self, cell, row, new_text):
+ model = self.default_msg_tree.get_model()
+ iter = model.get_iter_from_string(row)
+ model.set_value(iter, 2, new_text)
+
+ def default_msg_toggled_cb(self, cell, path):
+ model = self.default_msg_tree.get_model()
+ model[path][3] = not model[path][3]
+
+ def on_default_msg_treemodel_row_changed(self, model, path, iter):
+ status = model[iter][0]
+ message = model[iter][2].decode('utf-8')
+ gajim.config.set_per('defaultstatusmsg', status, 'enabled',
+ model[iter][3])
+ gajim.config.set_per('defaultstatusmsg', status, 'message', message)
+
def save_status_messages(self, model):
for msg in gajim.config.get_per('statusmsg'):
gajim.config.del_per('statusmsg', msg)
@@ -1005,6 +1081,7 @@ class AccountModificationWindow:
def __init__(self, account):
self.xml = gtkgui_helpers.get_glade('account_modification_window.glade')
self.window = self.xml.get_widget('account_modification_window')
+ self.window.set_transient_for(gajim.interface.roster.window)
self.account = account
# init proxy list
@@ -1153,7 +1230,7 @@ class AccountModificationWindow:
_('You are currently connected to the server'),
_('To change the account name, you must be disconnected.'))
return
- if len(gajim.awaiting_events[self.account]):
+ if len(gajim.events.get_events(self.account)):
dialogs.ErrorDialog(_('Unread events'),
_('To change the account name, you must read all pending '
'events.'))
@@ -1262,12 +1339,12 @@ class AccountModificationWindow:
if name != self.account:
#update variables
gajim.interface.instances[name] = gajim.interface.instances[self.account]
- gajim.awaiting_events[name] = gajim.awaiting_events[self.account]
gajim.nicks[name] = gajim.nicks[self.account]
gajim.block_signed_in_notifications[name] = \
gajim.block_signed_in_notifications[self.account]
gajim.groups[name] = gajim.groups[self.account]
gajim.gc_connected[name] = gajim.gc_connected[self.account]
+ gajim.automatic_rooms[name] = gajim.automatic_rooms[self.account]
gajim.newly_added[name] = gajim.newly_added[self.account]
gajim.to_be_removed[name] = gajim.to_be_removed[self.account]
gajim.sleeper_state[name] = gajim.sleeper_state[self.account]
@@ -1278,27 +1355,25 @@ class AccountModificationWindow:
gajim.status_before_autoaway[self.account]
gajim.contacts.change_account_name(self.account, name)
+ gajim.events.change_account_name(self.account, name)
- #upgrade account variable in opened windows
- for kind in ('infos', 'disco', 'chats', 'gc', 'gc_config'):
+ # change account variable for chat / gc controls
+ for ctrl in gajim.interface.msg_win_mgr.get_controls():
+ ctrl.account = name
+ # upgrade account variable in opened windows
+ for kind in ('infos', 'disco', 'gc_config'):
for j in gajim.interface.instances[name][kind]:
gajim.interface.instances[name][kind][j].account = name
- #upgrade account in systray
- if gajim.interface.systray_enabled:
- for list in gajim.interface.systray.jids:
- if list[0] == self.account:
- list[0] = name
-
# ServiceCache object keep old property account
if hasattr(gajim.connections[self.account], 'services_cache'):
gajim.connections[self.account].services_cache.account = name
del gajim.interface.instances[self.account]
- del gajim.awaiting_events[self.account]
del gajim.nicks[self.account]
del gajim.block_signed_in_notifications[self.account]
del gajim.groups[self.account]
del gajim.gc_connected[self.account]
+ del gajim.automatic_rooms[self.account]
del gajim.newly_added[self.account]
del gajim.to_be_removed[self.account]
del gajim.sleeper_state[self.account]
@@ -1411,6 +1486,11 @@ class AccountModificationWindow:
_('Without a connection, you can not edit your personal information.'))
return
+ if not gajim.connections[self.account].vcard_supported:
+ dialogs.ErrorDialog(_("Your server doesn't support Vcard"),
+ _("Your server can't save your personal information."))
+ return
+
gajim.interface.edit_own_details(self.account)
def on_manage_proxies_button_clicked(self, widget):
@@ -1435,7 +1515,7 @@ class AccountModificationWindow:
dialogs.ErrorDialog(_('Failed to get secret keys'),
_('There was a problem retrieving your OpenPGP secret keys.'))
return
- secret_keys['None'] = 'None'
+ secret_keys[_('None')] = _('None')
instance = dialogs.ChooseGPGKeyDialog(_('OpenPGP Key Selection'),
_('Choose your OpenPGP key'), secret_keys)
keyID = instance.run()
@@ -1444,7 +1524,7 @@ class AccountModificationWindow:
checkbutton = self.xml.get_widget('gpg_save_password_checkbutton')
gpg_key_label = self.xml.get_widget('gpg_key_label')
gpg_name_label = self.xml.get_widget('gpg_name_label')
- if keyID[0] == 'None':
+ if keyID[0] == _('None'):
gpg_key_label.set_text(_('No key selected'))
gpg_name_label.set_text('')
checkbutton.set_sensitive(False)
@@ -1492,6 +1572,7 @@ class ManageProxiesWindow:
def __init__(self):
self.xml = gtkgui_helpers.get_glade('manage_proxies_window.glade')
self.window = self.xml.get_widget('manage_proxies_window')
+ self.window.set_transient_for(gajim.interface.roster.window)
self.proxies_treeview = self.xml.get_widget('proxies_treeview')
self.proxyname_entry = self.xml.get_widget('proxyname_entry')
self.init_list()
@@ -1656,6 +1737,7 @@ class AccountsWindow:
def __init__(self):
self.xml = gtkgui_helpers.get_glade('accounts_window.glade')
self.window = self.xml.get_widget('accounts_window')
+ self.window.set_transient_for(gajim.interface.roster.window)
self.accounts_treeview = self.xml.get_widget('accounts_treeview')
self.modify_button = self.xml.get_widget('modify_button')
self.remove_button = self.xml.get_widget('remove_button')
@@ -1711,7 +1793,7 @@ class AccountsWindow:
if not iter:
return
account = model.get_value(iter, 0).decode('utf-8')
- if len(gajim.awaiting_events[account]):
+ if len(gajim.events.get_events(account)):
dialogs.ErrorDialog(_('Unread events'),
_('Read all pending events before removing this account.'))
return
@@ -1758,6 +1840,7 @@ class DataFormWindow:
self.config = config
self.xml = gtkgui_helpers.get_glade('data_form_window.glade')
self.window = self.xml.get_widget('data_form_window')
+ self.window.set_transient_for(gajim.interface.roster.window)
self.config_vbox = self.xml.get_widget('config_vbox')
if config:
self.fill_vbox()
@@ -1907,10 +1990,11 @@ class ServiceRegistrationWindow(DataFormWindow):
else:
self.xml = gtkgui_helpers.get_glade('service_registration_window.glade')
self.window = self.xml.get_widget('service_registration_window')
+ self.window.set_transient_for(gajim.interface.roster.window)
if infos.has_key('registered'):
- self.window.set_title(_('Edit %s' % service))
+ self.window.set_title(_('Edit %s') % service)
else:
- self.window.set_title(_('Register to %s' % service))
+ self.window.set_title(_('Register to %s') % service)
self.xml.get_widget('label').set_text(infos['instructions'])
self.entries = {}
self.draw_table()
@@ -1980,7 +2064,7 @@ class GroupchatConfigWindow(DataFormWindow):
self.room_jid = room_jid
self.remove_button = {}
self.affiliation_treeview = {}
- self.removed_jid = {}
+ self.list_init = {} # list at the begining
ui_list = {'outcast': _('Ban List'),
'member': _('Member List'),
'owner': _('Owner List'),
@@ -1990,7 +2074,7 @@ class GroupchatConfigWindow(DataFormWindow):
add_on_vbox = self.xml.get_widget('add_on_vbox')
for affiliation in ('outcast', 'member', 'owner', 'admin'):
- self.removed_jid[affiliation] = []
+ self.list_init[affiliation] = {}
hbox = gtk.HBox(spacing = 5)
add_on_vbox.pack_start(hbox, False)
@@ -2083,8 +2167,6 @@ class GroupchatConfigWindow(DataFormWindow):
return
model = self.affiliation_treeview[affiliation].get_model()
model.append((jid,'', '', ''))
- if jid in self.removed_jid[affiliation]:
- self.removed_jid[affiliation].remove(jid)
def on_remove_button_clicked(self, widget, affiliation):
selection = self.affiliation_treeview[affiliation].get_selection()
@@ -2097,7 +2179,6 @@ class GroupchatConfigWindow(DataFormWindow):
iter = model.get_iter(path)
jid = model[iter][0]
model.remove(iter)
- self.removed_jid[affiliation].append(jid)
self.remove_button[affiliation].set_sensitive(False)
def on_affiliation_treeview_cursor_changed(self, widget, affiliation):
@@ -2105,6 +2186,7 @@ class GroupchatConfigWindow(DataFormWindow):
def affiliation_list_received(self, affiliation, list):
'''Fill the affiliation treeview'''
+ self.list_init[affiliation] = list
if not affiliation:
return
tv = self.affiliation_treeview[affiliation]
@@ -2131,18 +2213,28 @@ class GroupchatConfigWindow(DataFormWindow):
self.config)
for affiliation in ('outcast', 'member', 'owner', 'admin'):
list = {}
+ actual_jid_list = []
model = self.affiliation_treeview[affiliation].get_model()
iter = model.get_iter_first()
+ # add new jid
while iter:
jid = model[iter][0].decode('utf-8')
- list[jid] = {'affiliation': affiliation}
- if affiliation == 'outcast':
- list[jid]['reason'] = model[iter][1].decode('utf-8')
+ actual_jid_list.append(jid)
+ if jid not in self.list_init[affiliation] or \
+ (affiliation == 'outcast' and self.list_init[affiliation]\
+ [jid].has_key('reason') and self.list_init[affiliation][jid]\
+ ['reason'] != model[iter][1].decode('utf-8')):
+ list[jid] = {'affiliation': affiliation}
+ if affiliation == 'outcast':
+ list[jid]['reason'] = model[iter][1].decode('utf-8')
iter = model.iter_next(iter)
- for jid in self.removed_jid[affiliation]:
- list[jid] = {'affiliation': 'none'}
- gajim.connections[self.account].send_gc_affiliation_list(self.room_jid,
- list)
+ # remove removed one
+ for jid in self.list_init[affiliation]:
+ if jid not in actual_jid_list:
+ list[jid] = {'affiliation': 'none'}
+ if list:
+ gajim.connections[self.account].send_gc_affiliation_list(
+ self.room_jid, list)
self.window.destroy()
#---------- RemoveAccountWindow class -------------#
@@ -2161,8 +2253,9 @@ class RemoveAccountWindow:
self.account = account
xml = gtkgui_helpers.get_glade('remove_account_window.glade')
self.window = xml.get_widget('remove_account_window')
+ self.window.set_transient_for(gajim.interface.roster.window)
self.remove_and_unregister_radiobutton = xml.get_widget(
- 'remove_and_unregister_radiobutton')
+ 'remove_and_unregister_radiobutton')
self.window.set_title(_('Removing %s account') % self.account)
xml.signal_autoconnect(self)
self.window.show_all()
@@ -2195,7 +2288,7 @@ class RemoveAccountWindow:
self.dialog = None
if gajim.connections[self.account].connected:
self.dialog = dialogs.ConfirmationDialog(
- _('Account "%s" is connected to the server' % self.account),
+ _('Account "%s" is connected to the server') % self.account,
_('If you remove it, the connection will be lost.'),
on_response_ok = remove)
else:
@@ -2207,18 +2300,18 @@ class RemoveAccountWindow:
if not res:
return
# Close all opened windows
- gajim.interface.roster.close_all(gajim.interface.instances[self.account])
+ gajim.interface.roster.close_all(self.account)
gajim.connections[self.account].disconnect(on_purpose = True)
del gajim.connections[self.account]
gajim.config.del_per('accounts', self.account)
gajim.interface.save_config()
del gajim.interface.instances[self.account]
- del gajim.awaiting_events[self.account]
del gajim.nicks[self.account]
del gajim.block_signed_in_notifications[self.account]
del gajim.groups[self.account]
gajim.contacts.remove_account(self.account)
del gajim.gc_connected[self.account]
+ del gajim.automatic_rooms[self.account]
del gajim.to_be_removed[self.account]
del gajim.newly_added[self.account]
del gajim.sleeper_state[self.account]
@@ -2240,6 +2333,7 @@ class ManageBookmarksWindow:
def __init__(self):
self.xml = gtkgui_helpers.get_glade('manage_bookmarks_window.glade')
self.window = self.xml.get_widget('manage_bookmarks_window')
+ self.window.set_transient_for(gajim.interface.roster.window)
#Account-JID, RoomName, Room-JID, Autojoin, Passowrd, Nick, Show_Status
self.treestore = gtk.TreeStore(str, str, str, bool, str, str, str)
@@ -2538,8 +2632,11 @@ class AccountCreationWizardWindow:
# Connect events from comboboxentry.child
server_comboboxentry = self.xml.get_widget('server_comboboxentry')
- server_comboboxentry.child.connect('key_press_event',
+ entry = server_comboboxentry.child
+ entry.connect('key_press_event',
self.on_server_comboboxentry_key_press_event)
+ completion = gtk.EntryCompletion()
+ entry.set_completion(completion)
# parse servers.xml
servers_xml = os.path.join(gajim.DATA_DIR, 'other', 'servers.xml')
@@ -2548,6 +2645,9 @@ class AccountCreationWizardWindow:
for server in servers:
servers_model.append((str(server[0]), int(server[1])))
+ completion.set_model(servers_model)
+ completion.set_text_column(0)
+
# Put servers into comboboxentries
server_comboboxentry.set_model(servers_model)
server_comboboxentry.set_text_column(0)
@@ -2836,12 +2936,12 @@ _('You can set advanced account options by pressing Advanced button, or later by
# update variables
gajim.interface.instances[self.account] = {'infos': {}, 'disco': {},
- 'chats': {}, 'gc': {}, 'gc_config': {}}
- gajim.awaiting_events[self.account] = {}
+ 'gc_config': {}}
gajim.connections[self.account].connected = 0
gajim.groups[self.account] = {}
gajim.contacts.add_account(self.account)
gajim.gc_connected[self.account] = {}
+ gajim.automatic_rooms[self.account] = {}
gajim.newly_added[self.account] = []
gajim.to_be_removed[self.account] = []
gajim.nicks[self.account] = config['name']
diff --git a/src/conversation_textview.py b/src/conversation_textview.py
index 90ff38b14..888c9d2b3 100644
--- a/src/conversation_textview.py
+++ b/src/conversation_textview.py
@@ -28,6 +28,7 @@ import pango
import gobject
import time
import sys
+import os
import tooltips
import dialogs
import locale
@@ -132,6 +133,10 @@ class ConversationTextview:
buffer.create_tag('focus-out-line', justification = gtk.JUSTIFY_CENTER)
+ self.allow_focus_out_line = True
+ # holds the iter's offset which points to the end of --- line
+ self.focus_out_end_iter_offset = None
+
self.line_tooltip = tooltips.BaseTooltip()
def del_handlers(self):
@@ -187,6 +192,68 @@ class ConversationTextview:
self.tv.scroll_to_iter(end_iter, 0, False, 1, 1)
return False # when called in an idle_add, just do it once
+ def show_focus_out_line(self):
+ if not self.allow_focus_out_line:
+ # if room did not receive focus-in from the last time we added
+ # --- line then do not readd
+ return
+
+ print_focus_out_line = False
+ buffer = self.tv.get_buffer()
+
+ if self.focus_out_end_iter_offset is None:
+ # this happens only first time we focus out on this room
+ print_focus_out_line = True
+
+ else:
+ if self.focus_out_end_iter_offset != buffer.get_end_iter().\
+ get_offset():
+ # this means after last-focus something was printed
+ # (else end_iter's offset is the same as before)
+ # only then print ---- line (eg. we avoid printing many following
+ # ---- lines)
+ print_focus_out_line = True
+
+ if print_focus_out_line and buffer.get_char_count() > 0:
+ buffer.begin_user_action()
+
+ # remove previous focus out line if such focus out line exists
+ if self.focus_out_end_iter_offset is not None:
+ end_iter_for_previous_line = buffer.get_iter_at_offset(
+ self.focus_out_end_iter_offset)
+ begin_iter_for_previous_line = end_iter_for_previous_line.copy()
+ # img_char+1 (the '\n')
+ begin_iter_for_previous_line.backward_chars(2)
+
+ # remove focus out line
+ buffer.delete(begin_iter_for_previous_line,
+ end_iter_for_previous_line)
+
+ # add the new focus out line
+ # FIXME: Why is this loaded from disk everytime
+ path_to_file = os.path.join(gajim.DATA_DIR, 'pixmaps', 'muc_separator.png')
+ focus_out_line_pixbuf = gtk.gdk.pixbuf_new_from_file(path_to_file)
+ end_iter = buffer.get_end_iter()
+ buffer.insert(end_iter, '\n')
+ buffer.insert_pixbuf(end_iter, focus_out_line_pixbuf)
+
+ end_iter = buffer.get_end_iter()
+ before_img_iter = end_iter.copy()
+ before_img_iter.backward_char() # one char back (an image also takes one char)
+ buffer.apply_tag_by_name('focus-out-line', before_img_iter, end_iter)
+ #FIXME: remove this workaround when bug is fixed
+ # c http://bugzilla.gnome.org/show_bug.cgi?id=318569
+
+ self.allow_focus_out_line = False
+
+ # update the iter we hold to make comparison the next time
+ self.focus_out_end_iter_offset = buffer.get_end_iter().get_offset()
+
+ buffer.end_user_action()
+
+ # scroll to the end (via idle in case the scrollbar has appeared)
+ gobject.idle_add(self.scroll_to_end)
+
def show_line_tooltip(self):
pointer = self.tv.get_pointer()
x, y = self.tv.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT, pointer[0],
@@ -241,6 +308,7 @@ class ConversationTextview:
buffer = self.tv.get_buffer()
start, end = buffer.get_bounds()
buffer.delete(start, end)
+ self.focus_out_end_iter_offset = None
def visit_url_from_menuitem(self, widget, link):
'''basically it filters out the widget instance'''
@@ -613,9 +681,11 @@ class ConversationTextview:
if day_str:
format += day_str + ' '
format += '%X' + after_str
- # format comes as unicode, because of day_str.
- # we convert it to the encoding that we want
- tim_format = time.strftime(format, tim).encode('utf-8')
+ tim_format = time.strftime(format, tim)
+ # if tim_format comes as unicode because of day_str.
+ # we convert it to the encoding that we want (and that is utf-8)
+ tim_format = helpers.ensure_utf8_string(tim_format)
+ tim_format = tim_format.encode('utf-8')
buffer.insert_with_tags_by_name(end_iter, tim_format + ' ',
*other_tags_for_time)
elif current_print_time == 'sometimes' and kind != 'info':
@@ -627,7 +697,7 @@ class ConversationTextview:
end_iter = buffer.get_end_iter()
if gajim.config.get('print_time_fuzzy') > 0:
fc = FuzzyClock()
- fc.setTime(time.strftime('%H:%M'))
+ fc.setTime(time.strftime('%H:%M', tim))
ft = fc.getFuzzyTime(gajim.config.get('print_time_fuzzy'))
tim_format = ft.decode(locale.getpreferredencoding())
else:
@@ -642,6 +712,7 @@ class ConversationTextview:
other_text_tag = self.detect_other_text_tag(text, kind)
text_tags = other_tags_for_text[:] # create a new list
if other_text_tag:
+ # note that color of /me may be overwritten in gc_control
text_tags.append(other_text_tag)
else: # not status nor /me
if gajim.config.get(
diff --git a/src/dialogs.py b/src/dialogs.py
index 027e3b8ac..6a8ec5de3 100644
--- a/src/dialogs.py
+++ b/src/dialogs.py
@@ -21,7 +21,6 @@
import gtk
import gobject
import os
-import sys
import gtkgui_helpers
import vcard
@@ -44,85 +43,97 @@ from common import helpers
class EditGroupsDialog:
'''Class for the edit group dialog window'''
- def __init__(self, user, account):
+ def __init__(self, list_):
+ '''list_ is a list of (contact, account) tuples'''
self.xml = gtkgui_helpers.get_glade('edit_groups_dialog.glade')
self.dialog = self.xml.get_widget('edit_groups_dialog')
- self.account = account
- self.user = user
+ self.dialog.set_transient_for(gajim.interface.roster.window)
+ self.list_ = list_
self.changes_made = False
self.list = self.xml.get_widget('groups_treeview')
- self.xml.get_widget('nickname_label').set_markup(
- _("Contact's name: <i>%s</i>") % user.get_shown_name())
- self.xml.get_widget('jid_label').set_markup(
- _('JID: <i>%s</i>') % user.jid)
-
+ if len(list_) == 1:
+ contact = list_[0][0]
+ self.xml.get_widget('nickname_label').set_markup(
+ _("Contact name: <i>%s</i>") % contact.get_shown_name())
+ self.xml.get_widget('jid_label').set_markup(
+ _('JID: <i>%s</i>') % contact.jid)
+ else:
+ self.xml.get_widget('nickname_label').set_no_show_all(True)
+ self.xml.get_widget('nickname_label').hide()
+ self.xml.get_widget('jid_label').set_no_show_all(True)
+ self.xml.get_widget('jid_label').hide()
+
self.xml.signal_autoconnect(self)
self.init_list()
def run(self):
self.dialog.show_all()
if self.changes_made:
- gajim.connections[self.account].update_contact(self.user.jid,
- self.user.name, self.user.groups)
+ for (contact, account) in self.list_:
+ gajim.connections[account].update_contact(contact.jid, contact.name,
+ contact.groups)
def on_edit_groups_dialog_response(self, widget, response_id):
if response_id == gtk.RESPONSE_CLOSE:
self.dialog.destroy()
def update_contact(self):
- tag = gajim.contacts.get_metacontacts_tag(self.account, self.user.jid)
- if not tag:
- gajim.interface.roster.remove_contact(self.user, self.account)
- gajim.interface.roster.add_contact_to_roster(self.user.jid,
- self.account)
- gajim.connections[self.account].update_contact(self.user.jid,
- self.user.name, self.user.groups)
- return
- all_jid = gajim.contacts.get_metacontacts_jids(tag)
- for _account in all_jid:
- if not gajim.interface.roster.regroup and _account != self.account:
+ for (contact, account) in self.list_:
+ tag = gajim.contacts.get_metacontacts_tag(account, contact.jid)
+ if not tag:
+ gajim.interface.roster.remove_contact(contact, account)
+ gajim.interface.roster.add_contact_to_roster(contact.jid, account)
+ gajim.connections[account].update_contact(contact.jid, contact.name,
+ contact.groups)
continue
- for _jid in all_jid[_account]:
- c = gajim.contacts.get_first_contact_from_jid(_account, _jid)
- if not c:
+ all_jid = gajim.contacts.get_metacontacts_jids(tag)
+ for _account in all_jid:
+ if not gajim.interface.roster.regroup and _account != account:
continue
- gajim.interface.roster.remove_contact(c, _account)
- gajim.interface.roster.add_contact_to_roster(_jid, _account)
- gajim.connections[_account].update_contact(_jid, c.name, c.groups)
+ for _jid in all_jid[_account]:
+ c = gajim.contacts.get_first_contact_from_jid(_account, _jid)
+ if not c:
+ continue
+ gajim.interface.roster.remove_contact(c, _account)
+ gajim.interface.roster.add_contact_to_roster(_jid, _account)
+ gajim.connections[_account].update_contact(_jid, c.name,
+ c.groups)
def remove_group(self, group):
- '''add group group to self.user and all his brothers'''
- tag = gajim.contacts.get_metacontacts_tag(self.account, self.user.jid)
- if not tag:
- if group in self.user.groups:
- self.user.groups.remove(group)
- return
- all_jid = gajim.contacts.get_metacontacts_jids(tag)
- for _account in all_jid:
- if not gajim.interface.roster.regroup and _account != self.account:
+ '''remove group group from all contacts and all their brothers'''
+ for (contact, account) in self.list_:
+ tag = gajim.contacts.get_metacontacts_tag(account, contact.jid)
+ if not tag:
+ if group in contact.groups:
+ contact.groups.remove(group)
continue
- for _jid in all_jid[_account]:
- contacts = gajim.contacts.get_contact(_account, _jid)
- for contact in contacts:
- if group in contact.groups:
- contact.groups.remove(group)
+ all_jid = gajim.contacts.get_metacontacts_jids(tag)
+ for _account in all_jid:
+ if not gajim.interface.roster.regroup and _account != account:
+ continue
+ for _jid in all_jid[_account]:
+ contacts = gajim.contacts.get_contact(_account, _jid)
+ for c in contacts:
+ if group in c.groups:
+ c.groups.remove(group)
def add_group(self, group):
- '''add group group to self.user and all his brothers'''
- tag = gajim.contacts.get_metacontacts_tag(self.account, self.user.jid)
- if not tag:
- if group not in self.user.groups:
- self.user.groups.append(group)
- return
- all_jid = gajim.contacts.get_metacontacts_jids(tag)
- for _account in all_jid:
- if not gajim.interface.roster.regroup and _account != self.account:
+ '''add group group to all contacts and all their brothers'''
+ for (contact, account) in self.list_:
+ tag = gajim.contacts.get_metacontacts_tag(account, contact.jid)
+ if not tag:
+ if group not in contact.groups:
+ contact.groups.append(group)
continue
- for _jid in all_jid[_account]:
- contacts = gajim.contacts.get_contact(_account, _jid)
- for contact in contacts:
- if not group in contact.groups:
- contact.groups.append(group)
+ all_jid = gajim.contacts.get_metacontacts_jids(tag)
+ for _account in all_jid:
+ if not gajim.interface.roster.regroup and _account != account:
+ continue
+ for _jid in all_jid[_account]:
+ contacts = gajim.contacts.get_contact(_account, _jid)
+ for c in contacts:
+ if not group in c.groups:
+ c.groups.append(group)
def on_add_button_clicked(self, widget):
group = self.xml.get_widget('group_entry').get_text().decode('utf-8')
@@ -136,7 +147,7 @@ class EditGroupsDialog:
return
iter = model.iter_next(iter)
self.changes_made = True
- model.append((group, True))
+ model.append((group, True, False))
self.add_group(group)
self.update_contact()
self.init_list() # Re-draw list to sort new item
@@ -144,7 +155,11 @@ class EditGroupsDialog:
def group_toggled_cb(self, cell, path):
self.changes_made = True
model = self.list.get_model()
- model[path][1] = not model[path][1]
+ if model[path][2]:
+ model[path][2] = False
+ model[path][1] = True
+ else:
+ model[path][1] = not model[path][1]
group = model[path][0].decode('utf-8')
if model[path][1]:
self.add_group(group)
@@ -153,23 +168,39 @@ class EditGroupsDialog:
self.update_contact()
def init_list(self):
- store = gtk.ListStore(str, bool)
+ store = gtk.ListStore(str, bool, bool)
self.list.set_model(store)
for column in self.list.get_columns(): # Clear treeview when re-drawing
self.list.remove_column(column)
- groups = [] # Store accounts in a list so we can sort them
- for g in gajim.groups[self.account].keys():
- if g in helpers.special_groups:
- continue
- in_group = False
- if g in self.user.groups:
- in_group = True
- groups.append([g, in_group])
- groups.sort()
- for group in groups:
+ accounts = []
+ # Store groups in a list so we can sort them and the number of contacts in
+ # it
+ groups = {}
+ for (contact, account) in self.list_:
+ if account not in accounts:
+ accounts.append(account)
+ for g in gajim.groups[account].keys():
+ if g in helpers.special_groups:
+ continue
+ if g in groups:
+ continue
+ groups[g] = 0
+ for g in contact.groups:
+ groups[g] += 1
+ group_list = groups.keys()
+ group_list.sort()
+ for group in group_list:
iter = store.append()
- store.set(iter, 0, group[0]) # Group name
- store.set(iter, 1, group[1]) # In group boolean
+ store.set(iter, 0, group) # Group name
+ if groups[group] == 0:
+ store.set(iter, 1, False)
+ else:
+ store.set(iter, 1, True)
+ if groups[group] == len(self.list_):
+ # all contacts are in this group
+ store.set(iter, 2, False)
+ else:
+ store.set(iter, 2, True)
column = gtk.TreeViewColumn(_('Group'))
column.set_expand(True)
self.list.append_column(column)
@@ -184,7 +215,7 @@ class EditGroupsDialog:
column.pack_start(renderer)
renderer.set_property('activatable', True)
renderer.connect('toggled', self.group_toggled_cb)
- column.set_attributes(renderer, active = 1)
+ column.set_attributes(renderer, active = 1, inconsistent = 2)
class PassphraseDialog:
'''Class for Passphrase dialog'''
@@ -223,6 +254,7 @@ class ChooseGPGKeyDialog:
prompt_label = xml.get_widget('prompt_label')
prompt_label.set_text(prompt_text)
model = gtk.ListStore(str, str)
+ model.set_sort_func(1, self.sort_keys)
model.set_sort_column_id(1, gtk.SORT_ASCENDING)
self.keys_treeview.set_model(model)
#columns
@@ -235,6 +267,17 @@ class ChooseGPGKeyDialog:
self.fill_tree(secret_keys, selected)
self.window.show_all()
+ def sort_keys(self, model, iter1, iter2):
+ value1 = model[iter1][1]
+ value2 = model[iter2][1]
+ if value1 == _('None'):
+ return -1
+ elif value2 == _('None'):
+ return 1
+ elif value1 < value2:
+ return -1
+ return 1
+
def run(self):
rep = self.window.run()
if rep == gtk.RESPONSE_OK:
@@ -261,6 +304,7 @@ class ChangeStatusMessageDialog:
self.show = show
self.xml = gtkgui_helpers.get_glade('change_status_message_dialog.glade')
self.window = self.xml.get_widget('change_status_message_dialog')
+ self.window.set_transient_for(gajim.interface.roster.window)
if show:
uf_show = helpers.get_uf_show(show)
title_text = _('%s Status Message') % uf_show
@@ -361,6 +405,12 @@ class ChangeStatusMessageDialog:
class AddNewContactWindow:
'''Class for AddNewContactWindow'''
+ uid_labels = {'jabber': _('Jabber ID'),
+ 'aim': _('AIM Address'),
+ 'gadu-gadu': _('GG Number'),
+ 'icq': _('ICQ Number'),
+ 'msn': _('MSN Address'),
+ 'yahoo': _('Yahoo! Address')}
def __init__(self, account = None, jid = None, user_nick = None,
group = None):
self.account = account
@@ -376,87 +426,123 @@ class AddNewContactWindow:
self.account = account
else:
accounts = [self.account]
+ if self.account:
+ location = gajim.interface.instances[self.account]
+ else:
+ location = gajim.interface.instances
+ if location.has_key('add_contact'):
+ location['add_contact'].window.present()
+ # An instance is already opened
+ return
+ location['add_contact'] = self
self.xml = gtkgui_helpers.get_glade('add_new_contact_window.glade')
- self.account_combobox = self.xml.get_widget('account_combobox')
- self.account_hbox = self.xml.get_widget('account_hbox')
- self.account_label = self.xml.get_widget('account_label')
self.window = self.xml.get_widget('add_new_contact_window')
- self.uid_entry = self.xml.get_widget('uid_entry')
- self.protocol_combobox = self.xml.get_widget('protocol_combobox')
- self.protocol_hbox = self.xml.get_widget('protocol_hbox')
- self.jid_entry = self.xml.get_widget('jid_entry')
- self.nickname_entry = self.xml.get_widget('nickname_entry')
+ for w in ('account_combobox', 'account_hbox', 'account_label',
+ 'uid_label', 'uid_entry', 'protocol_combobox', 'protocol_jid_combobox',
+ 'protocol_hbox', 'nickname_entry', 'message_scrolledwindow',
+ 'register_hbox', 'subscription_table', 'add_button',
+ 'message_textview', 'connected_label', 'group_comboboxentry'):
+ self.__dict__[w] = self.xml.get_widget(w)
if account and len(gajim.connections) >= 2:
prompt_text =\
_('Please fill in the data of the contact you want to add in account %s') %account
else:
prompt_text = _('Please fill in the data of the contact you want to add')
self.xml.get_widget('prompt_label').set_text(prompt_text)
- self.old_uid_value = ''
- liststore = gtk.ListStore(str, str)
- liststore.append(['Jabber', ''])
- self.agents = ['Jabber']
- jid_agents = []
+ self.agents = {'jabber': []}
+ # types to which we are not subscribed but account has an agent for it
+ self.available_types = []
for acct in accounts:
for j in gajim.contacts.get_jid_list(acct):
contact = gajim.contacts.get_first_contact_from_jid(acct, j)
- if _('Transports') in contact.groups and contact.show != 'offline' and\
- contact.show != 'error':
- jid_agents.append(j)
- for a in jid_agents:
- if a.find('aim') > -1:
- name = 'AIM'
- elif a.find('icq') > -1:
- name = 'ICQ'
- elif a.find('msn') > -1:
- name = 'MSN'
- elif a.find('yahoo') > -1:
- name = 'Yahoo!'
+ if _('Transports') in contact.groups:
+ type_ = gajim.get_transport_name_from_jid(j)
+ if self.agents.has_key(type_):
+ self.agents[type_].append(j)
+ else:
+ self.agents[type_] = [j]
+ # Now add the one to which we can register
+ for acct in accounts:
+ for type_ in gajim.connections[account].available_transports:
+ if type_ in self.agents:
+ continue
+ self.agents[type_] = []
+ for jid_ in gajim.connections[account].available_transports[type_]:
+ self.agents[type_].append(jid_)
+ self.available_types.append(type_)
+ liststore = gtk.ListStore(str)
+ self.group_comboboxentry.set_model(liststore)
+ liststore = gtk.ListStore(str, str)
+ uf_type = {'jabber': 'Jabber', 'aim': 'AIM', 'gadu-gadu': 'Gadu Gadu',
+ 'icq': 'ICQ', 'msn': 'MSN', 'yahoo': 'Yahoo'}
+ # Jabber as first
+ liststore.append(['Jabber', 'jabber'])
+ for type_ in self.agents:
+ if type_ == 'jabber':
+ continue
+ if type_ in uf_type:
+ liststore.append([uf_type[type_], type_])
else:
- name = a
- liststore.append([name, a])
- self.agents.append(name)
+ liststore.append([type_, type_])
self.protocol_combobox.set_model(liststore)
self.protocol_combobox.set_active(0)
- self.fill_jid()
+ self.protocol_jid_combobox.set_sensitive(False)
+ self.subscription_table.set_no_show_all(True)
+ self.message_scrolledwindow.set_no_show_all(True)
+ self.register_hbox.set_no_show_all(True)
+ self.register_hbox.hide()
+ self.connected_label.set_no_show_all(True)
+ self.connected_label.hide()
+ liststore = gtk.ListStore(str)
+ self.protocol_jid_combobox.set_model(liststore)
+ self.xml.signal_autoconnect(self)
if jid:
- self.jid_entry.set_text(jid)
- self.uid_entry.set_sensitive(False)
- jid_splited = jid.split('@')
- if jid_splited[1] in jid_agents:
- uid = jid_splited[0].replace('%', '@')
- self.uid_entry.set_text(uid)
- self.protocol_combobox.set_active(jid_agents.index(jid_splited[1])\
- + 1)
- else:
+ type_ = gajim.get_transport_name_from_jid(jid) or 'jabber'
+ if type_ == 'jabber':
self.uid_entry.set_text(jid)
- self.protocol_combobox.set_active(0)
+ else:
+ uid, transport = gajim.get_room_name_and_server_from_room_jid(jid)
+ self.uid_entry.set_text(uid.replace('%', '@', 1))
+ #set protocol_combobox
+ model = self.protocol_combobox.get_model()
+ iter = model.get_iter_first()
+ i = 0
+ while iter:
+ if model[iter][1] == type_:
+ self.protocol_combobox.set_active(i)
+ break
+ iter = model.iter_next(iter)
+ i += 1
+
+ # set protocol_jid_combobox
+ self.protocol_combobox.set_active(0)
+ model = self.protocol_jid_combobox.get_model()
+ iter = model.get_iter_first()
+ i = 0
+ while iter:
+ if model[iter][0] == transport:
+ self.protocol_combobox.set_active(i)
+ break
+ iter = model.iter_next(iter)
+ i += 1
if user_nick:
self.nickname_entry.set_text(user_nick)
- else:
- self.set_nickname()
self.nickname_entry.grab_focus()
- self.group_comboboxentry = self.xml.get_widget('group_comboboxentry')
- liststore = gtk.ListStore(str)
- self.group_comboboxentry.set_model(liststore)
+ else:
+ self.uid_entry.grab_focus()
group_names = []
- i = 0
for acct in accounts:
for g in gajim.groups[acct].keys():
if g not in helpers.special_groups and g not in group_names:
group_names.append(g)
- self.group_comboboxentry.append_text(g)
- if group == g:
- self.group_comboboxentry.set_active(i)
- i += 1
-
- if not jid_agents:
- # There are no transports, so hide the protocol combobox and label
- self.protocol_hbox.hide()
- self.protocol_hbox.set_no_show_all(True)
- protocol_label = self.xml.get_widget('protocol_label')
- protocol_label.hide()
- protocol_label.set_no_show_all(True)
+ group_names.sort()
+ i = 0
+ for g in group_names:
+ self.group_comboboxentry.append_text(g)
+ if group == g:
+ self.group_comboboxentry.set_active(i)
+ i += 1
+
if self.account:
self.account_label.hide()
self.account_hbox.hide()
@@ -468,9 +554,19 @@ _('Please fill in the data of the contact you want to add in account %s') %accou
liststore.append([acct, acct])
self.account_combobox.set_model(liststore)
self.account_combobox.set_active(0)
- self.xml.signal_autoconnect(self)
self.window.show_all()
+ def on_add_new_contact_window_destroy(self, widget):
+ if self.account:
+ location = gajim.interface.instances[self.account]
+ else:
+ location = gajim.interface.instances
+ del location['add_contact']
+
+ def on_register_button_clicked(self, widget):
+ jid = self.protocol_jid_combobox.get_active_text().decode('utf-8')
+ gajim.connections[self.account].request_register_agent_info(jid)
+
def on_add_new_contact_window_key_press_event(self, widget, event):
if event.keyval == gtk.keysyms.Escape: # ESCAPE
self.window.destroy()
@@ -479,13 +575,20 @@ _('Please fill in the data of the contact you want to add in account %s') %accou
'''When Cancel button is clicked'''
self.window.destroy()
- def on_subscribe_button_clicked(self, widget):
+ def on_add_button_clicked(self, widget):
'''When Subscribe button is clicked'''
- jid = self.jid_entry.get_text().decode('utf-8')
- nickname = self.nickname_entry.get_text().decode('utf-8')
+ jid = self.uid_entry.get_text().decode('utf-8')
if not jid:
return
-
+
+ model = self.protocol_combobox.get_model()
+ iter = self.protocol_combobox.get_active_iter()
+ type_ = model[iter][1]
+ if type_ != 'jabber':
+ transport = self.protocol_jid_combobox.get_active_text().decode(
+ 'utf-8')
+ jid = jid.replace('@', '%') + '@' + transport
+
# check if jid is conform to RFC and stringprep it
try:
jid = helpers.parse_jid(jid)
@@ -500,6 +603,7 @@ _('Please fill in the data of the contact you want to add in account %s') %accou
ErrorDialog(pritext, _('The user ID must not contain a resource.'))
return
+ nickname = self.nickname_entry.get_text().decode('utf-8') or ''
# get value of account combobox, if account was not specified
if not self.account:
model = self.account_combobox.get_model()
@@ -514,57 +618,81 @@ _('Please fill in the data of the contact you want to add in account %s') %accou
_('This contact is already listed in your roster.'))
return
- message_buffer = self.xml.get_widget('message_textview').get_buffer()
- start_iter = message_buffer.get_start_iter()
- end_iter = message_buffer.get_end_iter()
- message = message_buffer.get_text(start_iter, end_iter).decode('utf-8')
+ if type_ == 'jabber':
+ message_buffer = self.message_textview.get_buffer()
+ start_iter = message_buffer.get_start_iter()
+ end_iter = message_buffer.get_end_iter()
+ message = message_buffer.get_text(start_iter, end_iter).decode('utf-8')
+ else:
+ message= ''
group = self.group_comboboxentry.child.get_text().decode('utf-8')
auto_auth = self.xml.get_widget('auto_authorize_checkbutton').get_active()
gajim.interface.roster.req_sub(self, jid, message, self.account,
group = group, pseudo = nickname, auto_auth = auto_auth)
self.window.destroy()
-
- def fill_jid(self):
- model = self.protocol_combobox.get_model()
- index = self.protocol_combobox.get_active()
- jid = self.uid_entry.get_text().decode('utf-8').strip()
- if index > 0: # it's not jabber but a transport
- jid = jid.replace('@', '%')
- agent = model[index][1].decode('utf-8')
- if agent:
- jid += '@' + agent
- self.jid_entry.set_text(jid)
def on_protocol_combobox_changed(self, widget):
- self.fill_jid()
-
- def guess_agent(self):
- uid = self.uid_entry.get_text().decode('utf-8')
- model = self.protocol_combobox.get_model()
-
- #If login contains only numbers, it's probably an ICQ number
- if uid.isdigit():
- if 'ICQ' in self.agents:
- self.protocol_combobox.set_active(self.agents.index('ICQ'))
- return
-
- def set_nickname(self):
- uid = self.uid_entry.get_text().decode('utf-8')
- nickname = self.nickname_entry.get_text().decode('utf-8')
- if nickname == self.old_uid_value:
- self.nickname_entry.set_text(uid.split('@')[0])
-
- def on_uid_entry_changed(self, widget):
- uid = self.uid_entry.get_text().decode('utf-8')
- self.guess_agent()
- self.set_nickname()
- self.fill_jid()
- self.old_uid_value = uid.split('@')[0]
+ model = widget.get_model()
+ iter = widget.get_active_iter()
+ type_ = model[iter][1]
+ model = self.protocol_jid_combobox.get_model()
+ model.clear()
+ if len(self.agents[type_]):
+ for jid_ in self.agents[type_]:
+ model.append([jid_])
+ self.protocol_jid_combobox.set_active(0)
+ self.protocol_jid_combobox.set_sensitive(True)
+ else:
+ self.protocol_jid_combobox.set_sensitive(False)
+ if type_ in self.uid_labels:
+ self.uid_label.set_text(self.uid_labels[type_])
+ else:
+ self.uid_label.set_text(_('User ID'))
+ if type_ == 'jabber':
+ self.message_scrolledwindow.show()
+ else:
+ self.message_scrolledwindow.hide()
+ if type_ in self.available_types:
+ self.register_hbox.set_no_show_all(False)
+ self.register_hbox.show_all()
+ self.connected_label.hide()
+ self.subscription_table.hide()
+ self.add_button.set_sensitive(False)
+ else:
+ self.register_hbox.hide()
+ if type_ != 'jabber':
+ jid = self.protocol_jid_combobox.get_active_text()
+ contact = gajim.contacts.get_first_contact_from_jid(self.account,
+ jid)
+ if contact.show in ('offline', 'error'):
+ self.subscription_table.hide()
+ self.connected_label.show()
+ self.add_button.set_sensitive(False)
+ return
+ self.subscription_table.set_no_show_all(False)
+ self.subscription_table.show_all()
+ self.connected_label.hide()
+ self.add_button.set_sensitive(True)
+
+ def transport_signed_in(self, jid):
+ if self.protocol_jid_combobox.get_active_text() == jid:
+ self.register_hbox.hide()
+ self.connected_label.hide()
+ self.subscription_table.set_no_show_all(False)
+ self.subscription_table.show_all()
+ self.add_button.set_sensitive(True)
+
+ def transport_signed_out(self, jid):
+ if self.protocol_jid_combobox.get_active_text() == jid:
+ self.subscription_table.hide()
+ self.connected_label.show()
+ self.add_button.set_sensitive(False)
class AboutDialog:
'''Class for about dialog'''
def __init__(self):
dlg = gtk.AboutDialog()
+ dlg.set_transient_for(gajim.interface.roster.window)
dlg.set_name('Gajim')
dlg.set_version(gajim.version)
s = u'Copyright © 2003-2006 Gajim Team'
@@ -576,7 +704,7 @@ class AboutDialog:
% (_('A GTK+ jabber client'), \
_('GTK+ Version:'), self.tuple2str(gtk.gtk_version), \
_('PyGTK Version:'), self.tuple2str(gtk.pygtk_version)))
- dlg.set_website('http://www.gajim.org')
+ dlg.set_website('http://www.gajim.org/')
authors = []
authors_file = open('../AUTHORS').read()
@@ -585,7 +713,7 @@ class AboutDialog:
if author == 'CURRENT DEVELOPERS:':
authors.append(_('Current Developers:'))
elif author == 'PAST DEVELOPERS:':
- authors.append('\n' +_('Past Developers:'))
+ authors.append('\n' + _('Past Developers:'))
elif author != '': # Real author line
authors.append(author)
@@ -735,7 +863,7 @@ class FileChooserDialog(gtk.FileChooserDialog):
class BindPortError(HigDialog):
def __init__(self, port):
- ErrorDialog(_('Unable to bind to port %s.' % port),
+ ErrorDialog(_('Unable to bind to port %s.') % port,
_('Maybe you have another running instance of Gajim. '
'File Transfer will be canceled.'))
@@ -917,8 +1045,18 @@ class SubscriptionRequestWindow:
self.window.destroy()
class JoinGroupchatWindow:
- def __init__(self, account, server = '', room = '', nick = ''):
+ def __init__(self, account, server = '', room = '', nick = '',
+ automatic = False):
+ '''automatic is a dict like {'invities': []}
+ If automatic is not empty, this means room must be automaticaly configured
+ and when done, invities must be automatically invited'''
+ if server and room:
+ jid = room + '@' + server
+ if jid in gajim.gc_connected[account] and gajim.gc_connected[account][jid]:
+ ErrorDialog(_('You are already in room %s') % jid)
+ raise RuntimeError, 'You are already in this room'
self.account = account
+ self.automatic = automatic
if nick == '':
nick = gajim.nicks[self.account]
if gajim.connections[account].connected < 2:
@@ -1019,10 +1157,12 @@ _('You can not join a group chat unless you are connected.'))
def on_join_button_clicked(self, widget):
'''When Join button is clicked'''
- nickname = self.xml.get_widget('nickname_entry').get_text().decode('utf-8')
+ nickname = self.xml.get_widget('nickname_entry').get_text().decode(
+ 'utf-8')
room = self.xml.get_widget('room_entry').get_text().decode('utf-8')
server = self.xml.get_widget('server_entry').get_text().decode('utf-8')
- password = self.xml.get_widget('password_entry').get_text().decode('utf-8')
+ password = self.xml.get_widget('password_entry').get_text().decode(
+ 'utf-8')
jid = '%s@%s' % (room, server)
try:
jid = helpers.parse_jid(jid)
@@ -1037,7 +1177,9 @@ _('You can not join a group chat unless you are connected.'))
if len(self.recently_groupchat) > 10:
self.recently_groupchat = self.recently_groupchat[0:10]
gajim.config.set('recently_groupchat', ' '.join(self.recently_groupchat))
-
+
+ if self.automatic:
+ gajim.automatic_rooms[self.account][jid] = self.automatic
gajim.interface.roster.join_gc_room(self.account, jid, nickname, password)
self.window.destroy()
@@ -1076,7 +1218,7 @@ class NewChatDialog(InputDialog):
if gajim.connections[self.account].connected <= 1:
#if offline or connecting
ErrorDialog(_('Connection not available'),
- _('Please make sure you are connected with "%s".' % self.account))
+ _('Please make sure you are connected with "%s".') % self.account)
return
if self.completion_dict.has_key(jid):
@@ -1088,7 +1230,7 @@ class NewChatDialog(InputDialog):
ErrorDialog(_('Invalid JID'), e[0])
return
except:
- ErrorDialog(_('Invalid JID'), _('Unable to parse "%s".' % jid))
+ ErrorDialog(_('Invalid JID'), _('Unable to parse "%s".') % jid)
return
gajim.interface.roster.new_chat_from_jid(self.account, jid)
@@ -1284,10 +1426,13 @@ class SingleMessageWindow:
if gajim.config.get('use_speller') and HAS_GTK_SPELL and action == 'send':
try:
- gtkspell.Spell(self.conversation_textview.tv)
- gtkspell.Spell(self.message_textview)
+ spell1 = gtkspell.Spell(self.conversation_textview.tv)
+ spell2 = gtkspell.Spell(self.message_textview)
+ lang = gajim.config.get('speller_language')
+ if lang:
+ spell1.set_language(lang)
+ spell2.set_language(lang)
except gobject.GError, msg:
- #FIXME: add a ui for this use spell.set_language()
ErrorDialog(unicode(msg), _('If that is not your language for which you want to highlight misspelled words, then please set your $LANG as appropriate. Eg. for French do export LANG=fr_FR or export LANG=fr_FR.UTF-8 in ~/.bash_profile or to make it global in /etc/profile.\n\nHighlighting misspelled words feature will not be used'))
gajim.config.set('use_speller', False)
@@ -1355,8 +1500,10 @@ class SingleMessageWindow:
def prepare_widgets_for(self, action):
if len(gajim.connections) > 1:
- #FIXME: for Received with should become 'in'
- title = _('Single Message with account %s') % self.account
+ if action == 'send':
+ title = _('Single Message using account %s') % self.account
+ else:
+ title = _('Single Message in account %s') % self.account
else:
title = _('Single Message')
@@ -1425,7 +1572,7 @@ class SingleMessageWindow:
if gajim.connections[self.account].connected <= 1:
# if offline or connecting
ErrorDialog(_('Connection not available'),
- _('Please make sure you are connected with "%s".' % self.account))
+ _('Please make sure you are connected with "%s".') % self.account)
return
to_whom_jid = self.to_entry.get_text().decode('utf-8')
if self.completion_dict.has_key(to_whom_jid):
@@ -1452,7 +1599,7 @@ class SingleMessageWindow:
def on_reply_button_clicked(self, widget):
# we create a new blank window to send and we preset RE: and to jid
self.subject = _('RE: %s') % self.subject
- self.message = _('%s wrote:\n' % self.from_whom) + self.message
+ self.message = _('%s wrote:\n') % self.from_whom + self.message
# add > at the begining of each line
self.message = self.message.replace('\n', '\n> ') + '\n\n'
self.window.destroy()
@@ -1549,7 +1696,7 @@ class XMLConsoleWindow:
if gajim.connections[self.account].connected <= 1:
#if offline or connecting
ErrorDialog(_('Connection not available'),
- _('Please make sure you are connected with "%s".' % self.account))
+ _('Please make sure you are connected with "%s".') % self.account)
return
begin_iter, end_iter = self.input_tv_buffer.get_bounds()
stanza = self.input_tv_buffer.get_text(begin_iter, end_iter).decode('utf-8')
@@ -1889,6 +2036,7 @@ class PrivacyListsWindow:
'privacy_lists_refresh_button', 'close_privacy_lists_window_button']:
self.__dict__[widget_to_add] = self.xml.get_widget(widget_to_add)
+ self.draw_privacy_lists_in_combobox()
self.privacy_lists_refresh()
self.enabled = True
@@ -2008,7 +2156,10 @@ class InvitationReceivedDialog:
def on_accept_button_clicked(self, widget):
self.dialog.destroy()
room, server = gajim.get_room_name_and_server_from_room_jid(self.room_jid)
- JoinGroupchatWindow(self.account, server = server, room = room)
+ try:
+ JoinGroupchatWindow(self.account, server = server, room = room)
+ except RuntimeError:
+ pass
class ProgressDialog:
def __init__(self, title_text, during_text, messages_queue):
@@ -2081,6 +2232,8 @@ class ImageChooserDialog(FileChooserDialog):
def on_ok(widget, callback):
'''check if file exists and call callback'''
path_to_file = self.get_filename()
+ if not path_to_file:
+ return
path_to_file = gtkgui_helpers.decode_filechooser_file_paths(
(path_to_file,))[0]
if os.path.exists(path_to_file):
@@ -2254,8 +2407,6 @@ class AdvancedNotificationsWindow:
# No rule selected at init time
self.conditions_treeview.get_selection().unselect_all()
- #TODO
-# self.conditions_treeview.set_cursor(None)
self.active_num = -1
self.config_vbox.set_sensitive(False)
self.delete_button.set_sensitive(False)
@@ -2277,8 +2428,7 @@ class AdvancedNotificationsWindow:
if value:
self.event_combobox.set_active(self.events_list.index(value))
else:
- #TODO: unselect all
- pass
+ self.event_combobox.set_active(-1)
# recipient_type
value = gajim.config.get_per('notifications', str(self.active_num),
'recipient_type')
@@ -2286,8 +2436,7 @@ class AdvancedNotificationsWindow:
self.recipient_type_combobox.set_active(
self.recipient_types_list.index(value))
else:
- #TODO: unselect all
- pass
+ self.recipient_type_combobox.set_active(-1)
# recipient
value = gajim.config.get_per('notifications', str(self.active_num),
'recipients')
@@ -2457,7 +2606,11 @@ class AdvancedNotificationsWindow:
def on_event_combobox_changed(self, widget):
if self.active_num < 0:
return
- event = self.events_list[self.event_combobox.get_active()]
+ active = self.event_combobox.get_active()
+ if active == -1:
+ event = ''
+ else:
+ event = self.events_list[active]
gajim.config.set_per('notifications', str(self.active_num), 'event',
event)
self.set_treeview_string()
diff --git a/src/disco.py b/src/disco.py
index 478d3c1aa..1a23fcc46 100644
--- a/src/disco.py
+++ b/src/disco.py
@@ -87,7 +87,7 @@ def _gen_agent_type_info():
('proxy', 'bytestreams'): (None, 'bytestreams.png'), # Socks5 FT proxy
# Transports
- ('conference', 'irc'): (False, 'irc.png'),
+ ('conference', 'irc'): (ToplevelAgentBrowser, 'irc.png'),
('_jid', 'irc'): (False, 'irc.png'),
('gateway', 'aim'): (False, 'aim.png'),
('_jid', 'aim'): (False, 'aim.png'),
@@ -135,7 +135,8 @@ class CacheDictionary:
def _expire_timeout(self, key):
'''The timeout has expired, remove the object.'''
- del self.cache[key]
+ if key in self.cache:
+ del self.cache[key]
return False
def _refresh_timeout(self, key):
@@ -274,7 +275,7 @@ class ServicesCache:
except KeyError:
continue
browser = info[0]
- if browser is not None:
+ if browser:
break
# Note: possible outcome here is browser=False
if browser is None:
@@ -457,7 +458,6 @@ _('Without a connection, you can not browse available services'))
self.address_comboboxentry.set_text_column(0)
self.latest_addresses = gajim.config.get(
'latest_disco_addresses').split()
- jid = gajim.get_hostname_from_account(self.account)
if jid in self.latest_addresses:
self.latest_addresses.remove(jid)
self.latest_addresses.insert(0, jid)
@@ -1202,7 +1202,10 @@ class ToplevelAgentBrowser(AgentBrowser):
else:
room = ''
if not gajim.interface.instances[self.account].has_key('join_gc'):
- dialogs.JoinGroupchatWindow(self.account, service, room)
+ try:
+ dialogs.JoinGroupchatWindow(self.account, service, room)
+ except RuntimeError:
+ pass
else:
gajim.interface.instances[self.account]['join_gc'].window.present()
self.window.destroy(chain = True)
@@ -1532,7 +1535,10 @@ class MucBrowser(AgentBrowser):
else:
room = model[iter][1].decode('utf-8')
if not gajim.interface.instances[self.account].has_key('join_gc'):
- dialogs.JoinGroupchatWindow(self.account, service, room)
+ try:
+ dialogs.JoinGroupchatWindow(self.account, service, room)
+ except RuntimeError:
+ pass
else:
gajim.interface.instances[self.account]['join_gc'].window.present()
self.window.destroy(chain = True)
diff --git a/src/filetransfers_window.py b/src/filetransfers_window.py
index 2b93eaa28..fc6a3cf25 100644
--- a/src/filetransfers_window.py
+++ b/src/filetransfers_window.py
@@ -221,7 +221,7 @@ _('Connection with peer cannot be established.'))
else:
file_name = file_props['name']
sectext = '\t' + _('Filename: %s') % file_name
- sectext += '\n\t' + _('Sender: %s') % jid
+ sectext += '\n\t' + _('Recipient: %s') % jid
dialogs.ErrorDialog(_('File transfer stopped by the contact of the other side'), \
sectext)
self.tree.get_selection().unselect_all()
@@ -328,7 +328,7 @@ _('Connection with peer cannot be established.'))
else:
dirname = os.path.dirname(file_path)
if not os.access(dirname, os.W_OK):
- dialogs.ErrorDialog(_('Directory "%s" is not writable' % dirname), _('You do not have permission to create files in this directory.'))
+ dialogs.ErrorDialog(_('Directory "%s" is not writable') % dirname, _('You do not have permission to create files in this directory.'))
return
dialog2.destroy()
self._start_receive(file_path, account, contact, file_props)
@@ -445,12 +445,11 @@ _('Connection with peer cannot be established.'))
jid = gajim.get_jid_without_resource(other)
else: # It's a Contact instance
jid = other.jid
- if gajim.awaiting_events[account].has_key(jid):
- for event in gajim.awaiting_events[account][jid]:
- if event[0] in ('file-error', 'file-completed',
- 'file-request-error', 'file-send-error', 'file-stopped') and \
- event[1]['sid'] == file_props['sid']:
- gajim.interface.remove_event(account, jid, event)
+ for ev_type in ('file-error', 'file-completed', 'file-request-error',
+ 'file-send-error', 'file-stopped'):
+ for event in gajim.events.get_events(account, jid, [ev_type]):
+ if event.parameters[1]['sid'] == file_props['sid']:
+ gajim.events.remove_events(account, jid, event)
del(self.files_props[sid[0]][sid[1:]])
del(file_props)
diff --git a/src/gajim-remote.py b/src/gajim-remote.py
index 0c241db64..563cc121a 100755
--- a/src/gajim-remote.py
+++ b/src/gajim-remote.py
@@ -66,7 +66,7 @@ BASENAME = 'gajim-remote'
class GajimRemote:
-
+
def __init__(self):
self.argv_len = len(sys.argv)
# define commands dict. Prototype :
@@ -79,7 +79,7 @@ class GajimRemote:
#
self.commands = {
'help':[
- _('shows a help on specific command'),
+ _('Shows a help on specific command'),
[
#User gets help for the command, specified by this parameter
(_('command'),
@@ -99,7 +99,7 @@ class GajimRemote:
[
(_('account'), _('show only contacts of the given account'), False)
]
-
+
],
'list_accounts': [
_('Prints a list of registered accounts'),
@@ -201,7 +201,7 @@ class GajimRemote:
('jid', _('JID of the contact'), True),
(_('account'), _('if specified, contact is taken from the '
'contact list of this account'), False)
-
+
]
],
'add_contact': [
@@ -211,14 +211,14 @@ class GajimRemote:
(_('account'), _('Adds new contact to this account'), False)
]
],
-
+
'get_status': [
_('Returns current status (the global one unless account is specified)'),
[
(_('account'), _(''), False)
]
],
-
+
'get_status_message': [
_('Returns current status message(the global one unless account is specified)'),
[
@@ -231,11 +231,20 @@ class GajimRemote:
[ ]
],
'start_chat': [
- _('Open \'Start Chat\' dialog'),
+ _('Opens \'Start Chat\' dialog'),
[
(_('account'), _('Starts chat, using this account'), True)
]
],
+ 'send_xml': [
+ _('Sends custom XML'),
+ [
+ ('xml', _('XML to send'), True),
+ ('account', _('Account in which the xml will be sent; '
+ 'if not specified, xml will be sent to all accounts'),
+ False)
+ ]
+ ],
}
if self.argv_len < 2 or \
sys.argv[1] not in self.commands.keys(): # no args or bad args
@@ -247,14 +256,14 @@ class GajimRemote:
else:
print self.compose_help().encode(PREFERRED_ENCODING)
sys.exit(0)
-
+
self.init_connection()
self.check_arguments()
-
+
if self.command == 'contact_info':
if self.argv_len < 3:
send_error(_('Missing argument "contact_jid"'))
-
+
try:
res = self.call_remote_method()
except exceptions.ServiceNotAvailable:
@@ -262,14 +271,14 @@ class GajimRemote:
sys.exit(1)
else:
self.print_result(res)
-
+
def print_result(self, res):
''' Print retrieved result to the output '''
if res is not None:
if self.command in ('open_chat', 'send_message', 'send_single_message', 'start_chat'):
if self.command in ('send_message', 'send_single_message'):
self.argv_len -= 2
-
+
if res is False:
if self.argv_len < 4:
send_error(_('\'%s\' is not in your roster.\n'
@@ -302,7 +311,7 @@ class GajimRemote:
print self.print_info(0, res, True)
elif res:
print unicode(res).encode(PREFERRED_ENCODING)
-
+
def init_connection(self):
''' create the onnection to the session dbus,
or exit if it is not possible '''
@@ -310,7 +319,7 @@ class GajimRemote:
self.sbus = dbus.SessionBus()
except:
raise exceptions.SessionBusNotPresent
-
+
if _version[1] >= 30:
obj = self.sbus.get_object(SERVICE, OBJ_PATH)
interface = dbus.Interface(obj, INTERFACE)
@@ -319,10 +328,10 @@ class GajimRemote:
interface = self.service.get_object(OBJ_PATH, INTERFACE)
else:
send_error(_('Unknown D-Bus version: %s') % _version[1])
-
+
# get the function asked
self.method = interface.__getattr__(self.command)
-
+
def make_arguments_row(self, args):
''' return arguments list. Mandatory arguments are enclosed with:
'<', '>', optional arguments - with '[', ']' '''
@@ -339,7 +348,7 @@ class GajimRemote:
else:
str += ']'
return str
-
+
def help_on_command(self, command):
''' return help message for a given command '''
if command in self.commands:
@@ -353,7 +362,7 @@ class GajimRemote:
str += ' ' + argument[0] + ' - ' + argument[1] + '\n'
return str
send_error(_('%s not found') % command)
-
+
def compose_help(self):
''' print usage, and list available commands '''
str = _('Usage: %s command [arguments]\nCommand is one of:\n' ) % BASENAME
@@ -374,7 +383,7 @@ class GajimRemote:
str += ']'
str += '\n'
return str
-
+
def print_info(self, level, prop_dict, encode_return = False):
''' return formated string from data structure '''
if prop_dict is None or not isinstance(prop_dict, (dict, list, tuple)):
@@ -423,7 +432,7 @@ class GajimRemote:
except:
pass
return ret_str
-
+
def check_arguments(self):
''' Make check if all necessary arguments are given '''
argv_len = self.argv_len - 2
@@ -433,7 +442,7 @@ class GajimRemote:
send_error(_('Argument "%s" is not specified. \n'
'Type "%s help %s" for more info') %
(args[argv_len][0], BASENAME, self.command))
-
+
def call_remote_method(self):
''' calls self.method with arguments from sys.argv[2:] '''
args = sys.argv[2:]
diff --git a/src/gajim.py b/src/gajim.py
index 1d2e6fa16..1720d111a 100755
--- a/src/gajim.py
+++ b/src/gajim.py
@@ -42,6 +42,14 @@ from atom_window import AtomWindow
from common import exceptions
+if os.name == 'posix': # dl module is Unix Only
+ try: # rename the process name to gajim
+ import dl
+ libc = dl.open('/lib/libc.so.6')
+ libc.call('prctl', 15, 'gajim\0', 0, 0, 0)
+ except:
+ pass
+
try:
import gtk
except RuntimeError, msg:
@@ -71,6 +79,15 @@ except exceptions.PysqliteNotAvailable, e:
pritext = _('Gajim needs PySQLite2 to run')
sectext = str(e)
+if os.name == 'nt':
+ try:
+ import winsound # windows-only built-in module for playing wav
+ import win32api
+ import win32con
+ except:
+ pritext = _('Gajim needs pywin32 to run')
+ sectext = _('Please make sure that Pywin32 is installed on your system. You can get it at %s') % 'http://sourceforge.net/project/showfiles.php?group_id=78018'
+
if pritext:
dlg = gtk.MessageDialog(None,
gtk.DIALOG_DESTROY_WITH_PARENT | gtk.DIALOG_MODAL,
@@ -178,23 +195,9 @@ parser = optparser.OptionsParser(config_filename)
import roster_window
import systray
-import vcard
+import profile_window
import config
-class MigrateCommand(nslookup.IdleCommand):
- def __init__(self, on_result):
- nslookup.IdleCommand.__init__(self, on_result)
- self.commandtimeout = 10
-
- def _compose_command_args(self):
- return ['python', 'migrate_logs_to_dot9_db.py', 'dont_wait']
-
- def _return_result(self):
- print self.result
- if self.result_handler:
- self.result_handler(self.result)
- self.result_handler = None
-
class GlibIdleQueue(idlequeue.IdleQueue):
'''
Extends IdleQueue to use glib io_add_wath, instead of select/poll
@@ -307,6 +310,14 @@ class Interface:
gajim.con_types[account] = con_type
self.roster.draw_account(account)
+ def handle_event_connection_lost(self, account, array):
+ # ('CONNECTION_LOST', account, [title, text])
+ path = os.path.join(gajim.DATA_DIR, 'pixmaps', 'events',
+ 'connection_lost.png')
+ path = gtkgui_helpers.get_path_to_generic_or_avatar(path)
+ notify.popup(_('Connection Failed'), account, account,
+ 'connection_failed', path, array[0], array[1])
+
def unblock_signed_in_notifications(self, account):
gajim.block_signed_in_notifications[account] = False
@@ -346,9 +357,9 @@ class Interface:
def edit_own_details(self, account):
jid = gajim.get_jid_from_account(account)
- if not self.instances[account]['infos'].has_key(jid):
- self.instances[account]['infos'][jid] = \
- vcard.VcardWindow(jid, account, True)
+ if not self.instances[account].has_key('profile'):
+ self.instances[account]['profile'] = \
+ profile_window.ProfileWindow(account)
gajim.connections[account].request_vcard(jid)
def handle_event_notify(self, account, array):
@@ -396,7 +407,9 @@ class Interface:
else:
contact1 = gajim.contacts.get_first_contact_from_jid(account, ji)
if not contact1:
- # presence of another resource of out jid
+ # presence of another resource of our jid
+ if resource == gajim.connections[account].server_resource:
+ return
contact1 = gajim.contacts.create_contact(jid = ji,
name = gajim.nicks[account], groups = [],
show = array[1], status = status_message, sub = 'both',
@@ -452,6 +465,15 @@ class Interface:
gajim.block_signed_in_notifications[account_ji] = True
gobject.timeout_add(30000, self.unblock_signed_in_notifications,
account_ji)
+ locations = (self.instances, self.instances[account])
+ for location in locations:
+ if location.has_key('add_contact'):
+ if old_show == 0 and new_show > 1:
+ location['add_contact'].transport_signed_in(jid)
+ break
+ elif old_show > 1 and new_show == 0:
+ location['add_contact'].transport_signed_out(jid)
+ break
elif ji in jid_list:
# It isn't an agent
# reset chatstate if needed:
@@ -495,6 +517,7 @@ class Interface:
message = array[1]
msg_type = array[4]
+ subject = array[5]
chatstate = array[6]
msg_id = array[7]
composing_jep = array[8]
@@ -560,10 +583,13 @@ class Interface:
not gajim.contacts.get_contact(account, jid) and not pm:
return
+ advanced_notif_num = notify.get_advanced_notification('message_received',
+ account, contact)
+
# Is it a first or next message received ?
first = False
- if not chat_control and not gajim.awaiting_events[account].has_key(
- jid_of_control):
+ if not chat_control and not gajim.events.get_events(account,
+ jid_of_control, ['chat']):
# It's a first message and not a Private Message
first = True
@@ -574,11 +600,14 @@ class Interface:
else:
# array: (jid, msg, time, encrypted, msg_type, subject)
self.roster.on_message(jid, message, array[2], account, array[3],
- msg_type, array[5], resource, msg_id, array[9])
+ msg_type, subject, resource, msg_id, array[9], advanced_notif_num)
nickname = gajim.get_name_from_jid(account, jid)
# Check and do wanted notifications
+ msg = message
+ if subject:
+ msg = _('Subject: %s') % subject + '\n' + msg
notify.notify('new_message', jid, account, [msg_type, first, nickname,
- message])
+ msg], advanced_notif_num)
if self.remote_ctrl:
self.remote_ctrl.raise_signal('NewMessage', (account, array))
@@ -712,8 +741,8 @@ class Interface:
config.ServiceRegistrationWindow(array[0], array[1], account,
array[2])
else:
- dialogs.ErrorDialog(_('Contact with "%s" cannot be established'\
-% array[0]), _('Check your connection or try again later.'))
+ dialogs.ErrorDialog(_('Contact with "%s" cannot be established')\
+% array[0], _('Check your connection or try again later.'))
def handle_event_agent_info_items(self, account, array):
#('AGENT_INFO_ITEMS', account, (agent, node, items))
@@ -753,8 +782,8 @@ class Interface:
nick = array['NICKNAME']
if nick:
gajim.nicks[account] = nick
- if self.instances[account]['infos'].has_key(array['jid']):
- win = self.instances[account]['infos'][array['jid']]
+ if self.instances[account].has_key('profile'):
+ win = self.instances[account]['profile']
win.set_values(array)
if account in self.show_vcard_when_connect:
self.show_vcard_when_connect.remove(account)
@@ -859,7 +888,6 @@ class Interface:
uf_show = helpers.get_uf_show(show)
ctrl.print_conversation(_('%s is now %s (%s)') % (nick, uf_show, status),
'status')
- ctrl.draw_banner()
ctrl.parent_win.redraw_tab(ctrl)
if self.remote_ctrl:
self.remote_ctrl.raise_signal('GCPresence', (account, array))
@@ -899,10 +927,18 @@ class Interface:
def handle_event_gc_config(self, account, array):
#('GC_CONFIG', account, (jid, config)) config is a dict
- jid = array[0].split('/')[0]
- if not self.instances[account]['gc_config'].has_key(jid):
- self.instances[account]['gc_config'][jid] = \
- config.GroupchatConfigWindow(account, jid, array[1])
+ room_jid = array[0].split('/')[0]
+ if room_jid in gajim.automatic_rooms[account]:
+ # use default configuration
+ gajim.connections[account].send_gc_config(room_jid, array[1])
+ # invite contacts
+ if gajim.automatic_rooms[account][room_jid].has_key('invities'):
+ for jid in gajim.automatic_rooms[account][room_jid]['invities']:
+ gajim.connections[account].send_invite(room_jid, jid)
+ del gajim.automatic_rooms[account][room_jid]
+ elif not self.instances[account]['gc_config'].has_key(room_jid):
+ self.instances[account]['gc_config'][room_jid] = \
+ config.GroupchatConfigWindow(account, room_jid, array[1])
def handle_event_gc_affiliation(self, account, array):
#('GC_AFFILIATION', account, (room_jid, affiliation, list)) list is list
@@ -923,8 +959,7 @@ class Interface:
self.add_event(account, jid, 'gc-invitation', (room_jid, array[2],
array[3]))
- if gajim.config.get('notify_on_new_message') and \
- helpers.allow_showing_notification(account):
+ if helpers.allow_showing_notification(account, 'notify_on_new_message'):
path = os.path.join(gajim.DATA_DIR, 'pixmaps', 'events',
'gc_invitation.png')
path = gtkgui_helpers.get_path_to_generic_or_avatar(path)
@@ -956,7 +991,7 @@ class Interface:
c = contacts[0]
self.roster.remove_contact(c, account)
gajim.contacts.remove_jid(account, jid)
- if gajim.awaiting_events[account].has_key(c.jid):
+ if gajim.events.get_events(account, c.jid):
keyID = ''
attached_keys = gajim.config.get_per('accounts', account,
'attached_gpg_keys').split()
@@ -1091,60 +1126,48 @@ class Interface:
path_to_bw_file = path_to_file + '_notif_size_bw.png'
bwbuf.save(path_to_bw_file, 'png')
- def add_event(self, account, jid, typ, args):
- '''add an event to the awaiting_events var'''
- # We add it to the awaiting_events queue
+ def add_event(self, account, jid, type_, args):
+ '''add an event to the gajim.events var'''
+ # We add it to the gajim.events queue
# Do we have a queue?
jid = gajim.get_jid_without_resource(jid)
- qs = gajim.awaiting_events[account]
- no_queue = False
- if not qs.has_key(jid):
- no_queue = True
- qs[jid] = []
- qs[jid].append((typ, args))
- self.roster.nb_unread += 1
+ no_queue = len(gajim.events.get_events(account, jid)) == 0
+ event_type = None
+ # type_ can be gc-invitation file-send-error file-error file-request-error
+ # file-request file-completed file-stopped
+ # event_type can be in advancedNotificationWindow.events_list
+ event_types = {'file-request': 'ft_request',
+ 'file-completed': 'ft_finished'}
+ if type_ in event_types:
+ event_type = event_types[type_]
+ show_in_roster = notify.get_show_in_roster(event_type, account, jid)
+ show_in_systray = notify.get_show_in_systray(event_type, account, jid)
+ event = gajim.events.create_event(type_, args,
+ show_in_roster = show_in_roster,
+ show_in_systray = show_in_systray)
+ gajim.events.add_event(account, jid, event)
self.roster.show_title()
if no_queue: # We didn't have a queue: we change icons
self.roster.draw_contact(jid, account)
- if self.systray_enabled:
- self.systray.add_jid(jid, account, typ)
- def redraw_roster_systray(self, account, jid, typ = None):
- self.roster.nb_unread -= 1
- self.roster.show_title()
- self.roster.draw_contact(jid, account)
- if self.systray_enabled:
- self.systray.remove_jid(jid, account, typ)
-
- def remove_first_event(self, account, jid, typ = None):
- qs = gajim.awaiting_events[account]
- event = gajim.get_first_event(account, jid, typ)
- qs[jid].remove(event)
- # Is it the last event?
- if not len(qs[jid]):
- del qs[jid]
- if not gajim.config.get('showoffline'):
- contact = gajim.contacts.get_contact_with_highest_priority(account,
- jid)
- if contact:
- self.roster.really_remove_contact(contact, account)
- self.redraw_roster_systray(account, jid, typ)
+ def remove_first_event(self, account, jid, type_ = None):
+ event = gajim.events.get_first_event(account, jid, type_)
+ self.remove_event(account, jid, event)
def remove_event(self, account, jid, event):
- qs = gajim.awaiting_events[account]
- if not event in qs[jid]:
+ if gajim.events.remove_events(account, jid, event):
+ # No such event found
return
- qs[jid].remove(event)
- # Is it the last event?
- if not len(qs[jid]):
- del qs[jid]
+ # no other event?
+ if not len(gajim.events.get_events(account, jid)):
if not gajim.config.get('showoffline'):
contact = gajim.contacts.get_contact_with_highest_priority(account,
jid)
- if contact:
+ if contact:
self.roster.really_remove_contact(contact, account)
- self.redraw_roster_systray(account, jid, event[0])
+ self.roster.show_title()
+ self.roster.draw_contact(jid, account)
def handle_event_file_request_error(self, account, array):
jid = array[0]
@@ -1170,7 +1193,7 @@ class Interface:
if helpers.allow_showing_notification(account):
# check if we should be notified
img = os.path.join(gajim.DATA_DIR, 'pixmaps', 'events', 'ft_error.png')
-
+
path = gtkgui_helpers.get_path_to_generic_or_avatar(img)
event_type = _('File Transfer Error')
notify.popup(event_type, jid, account, msg_type, path,
@@ -1193,7 +1216,8 @@ class Interface:
if helpers.allow_showing_notification(account):
img = os.path.join(gajim.DATA_DIR, 'pixmaps', 'events',
'ft_request.png')
- txt = _('%s wants to send you a file.') % gajim.get_name_from_jid(account, jid)
+ txt = _('%s wants to send you a file.') % gajim.get_name_from_jid(
+ account, jid)
path = gtkgui_helpers.get_path_to_generic_or_avatar(img)
event_type = _('File Transfer Request')
notify.popup(event_type, jid, account, 'file-request',
@@ -1202,7 +1226,7 @@ class Interface:
def handle_event_file_progress(self, account, file_props):
self.instances['file_transfers'].set_progress(file_props['type'],
file_props['sid'], file_props['received-len'])
-
+
def handle_event_file_rcv_completed(self, account, file_props):
ft = self.instances['file_transfers']
if file_props['error'] == 0:
@@ -1228,13 +1252,14 @@ class Interface:
msg_type = ''
event_type = ''
- if file_props['error'] == 0 and gajim.config.get('notify_on_file_complete'):
+ if file_props['error'] == 0 and gajim.config.get(
+ 'notify_on_file_complete'):
msg_type = 'file-completed'
event_type = _('File Transfer Completed')
elif file_props['error'] == -1:
msg_type = 'file-stopped'
event_type = _('File Transfer Stopped')
-
+
if event_type == '':
# FIXME: ugly workaround (this can happen Gajim sent, Gaim recvs)
# this should never happen but it does. see process_result() in socks5.py
@@ -1244,7 +1269,7 @@ class Interface:
if msg_type:
self.add_event(account, jid, msg_type, file_props)
-
+
if file_props is not None:
if file_props['type'] == 'r':
# get the name of the sender, as it is in the roster
@@ -1429,12 +1454,12 @@ class Interface:
return False
def show_systray(self):
- self.systray.show_icon()
self.systray_enabled = True
+ self.systray.show_icon()
def hide_systray(self):
- self.systray.hide_icon()
self.systray_enabled = False
+ self.systray.hide_icon()
def image_is_ok(self, image):
if not os.path.exists(image):
@@ -1664,6 +1689,7 @@ class Interface:
'ROSTER_INFO': self.handle_event_roster_info,
'BOOKMARKS': self.handle_event_bookmarks,
'CON_TYPE': self.handle_event_con_type,
+ 'CONNECTION_LOST': self.handle_event_connection_lost,
'FILE_REQUEST': self.handle_event_file_request,
'GMAIL_NOTIFY': self.handle_event_gmail_notify,
'FILE_REQUEST_ERROR': self.handle_event_file_request_error,
@@ -1700,14 +1726,14 @@ class Interface:
err_str)
sys.exit()
- def handle_event(self, account, jid, typ):
+ def handle_event(self, account, jid, type_):
w = None
fjid = jid
resource = gajim.get_resource_from_jid(jid)
jid = gajim.get_jid_without_resource(jid)
- if typ == message_control.TYPE_GC:
+ if type_ in ('printed_gc_msg', 'gc_msg'):
w = self.msg_win_mgr.get_window(jid, account)
- elif typ == message_control.TYPE_CHAT:
+ elif type_ in ('printed_chat', 'chat'):
if self.msg_win_mgr.has_window(fjid, account):
w = self.msg_win_mgr.get_window(fjid, account)
else:
@@ -1717,30 +1743,30 @@ class Interface:
self.roster.new_chat(contact, account, resource = resource)
w = self.msg_win_mgr.get_window(fjid, account)
gajim.last_message_time[account][jid] = 0 # long time ago
- elif typ == message_control.TYPE_PM:
+ elif type_ in ('printed_pm', 'pm'):
if self.msg_win_mgr.has_window(fjid, account):
w = self.msg_win_mgr.get_window(fjid, account)
else:
room_jid = jid
nick = resource
gc_contact = gajim.contacts.get_gc_contact(account, room_jid,
- nick)
+ nick)
if gc_contact:
show = gc_contact.show
else:
show = 'offline'
- gc_contact = gajim.contacts.create_gc_contact(room_jid = room_jid,
- name = nick, show = show)
+ gc_contact = gajim.contacts.create_gc_contact(
+ room_jid = room_jid, name = nick, show = show)
c = gajim.contacts.contact_from_gc_contact(gc_contact)
self.roster.new_chat(c, account, private_chat = True)
w = self.msg_win_mgr.get_window(fjid, account)
- elif typ in ('normal', 'file-request', 'file-request-error',
- 'file-send-error', 'file-error', 'file-stopped', 'file-completed'):
+ elif type_ in ('normal', 'file-request', 'file-request-error',
+ 'file-send-error', 'file-error', 'file-stopped', 'file-completed'):
# Get the first single message event
- ev = gajim.get_first_event(account, jid, typ)
+ event = gajim.events.get_first_event(account, jid, type_)
# Open the window
- self.roster.open_event(account, jid, ev)
- elif typ == 'gmail':
+ self.roster.open_event(account, jid, event)
+ elif type_ == 'gmail':
if gajim.config.get_per('accounts', account, 'savepass'):
url = ('http://www.google.com/accounts/ServiceLoginAuth?service=mail&Email=%s&Passwd=%s&continue=https://mail.google.com/mail') %\
(urllib.quote(gajim.config.get_per('accounts', account, 'name')),
@@ -1748,12 +1774,12 @@ class Interface:
else:
url = ('http://mail.google.com/')
helpers.launch_browser_mailer('url', url)
- elif typ == 'gc-invitation':
- ev = gajim.get_first_event(account, jid, typ)
- data = ev[1]
+ elif type_ == 'gc-invitation':
+ event = gajim.events.get_first_event(account, jid, type_)
+ data = event.parameters
dialogs.InvitationReceivedDialog(account, data[0], jid, data[2],
data[1])
- self.remove_first_event(account, jid, typ)
+ gajim.events.remove_events(account, jid, event)
if w:
w.set_active_tab(fjid, account)
w.window.present()
@@ -1840,14 +1866,13 @@ class Interface:
self.instances = {'logs': {}}
for a in gajim.connections:
- self.instances[a] = {'infos': {}, 'disco': {}, 'chats': {},
- 'gc': {}, 'gc_config': {}}
+ self.instances[a] = {'infos': {}, 'disco': {}, 'gc_config': {}}
gajim.contacts.add_account(a)
gajim.groups[a] = {}
gajim.gc_connected[a] = {}
+ gajim.automatic_rooms[a] = {}
gajim.newly_added[a] = []
gajim.to_be_removed[a] = []
- gajim.awaiting_events[a] = {}
gajim.nicks[a] = gajim.config.get_per('accounts', a, 'name')
gajim.block_signed_in_notifications[a] = True
gajim.sleeper_state[a] = 0
@@ -1901,6 +1926,25 @@ class Interface:
# get instances for windows/dialogs that will show_all()/hide()
self.instances['file_transfers'] = dialogs.FileTransfersWindow()
+ # get transports type from DB
+ gajim.transport_type = gajim.logger.get_transports_type()
+
+ # test is dictionnary is present for speller
+ if gajim.config.get('use_speller'):
+ lang = gajim.config.get('speller_language')
+ if not lang:
+ lang = gajim.LANG
+ tv = gtk.TextView()
+ try:
+ import gtkspell
+ spell = gtkspell.Spell(tv, lang)
+ except:
+ dialogs.ErrorDialog(
+ _('Dictionary for lang %s not available') % lang,
+ _('You have to install %s dictionary to use spellchecking, or '
+ 'choose another language by setting the speller_language option.'
+ ) % lang)
+ gajim.config.set('use_speller', False)
gobject.timeout_add(100, self.autoconnect)
gobject.timeout_add(200, self.process_connections)
gobject.timeout_add(500, self.read_sleepy)
@@ -1938,30 +1982,6 @@ if __name__ == '__main__':
gtkgui_helpers.possibly_set_gajim_as_xmpp_handler()
- # Migrate old logs if we have such olds logs
- from common import logger
- from migrate_logs_to_dot9_db import PATH_TO_LOGS_BASE_DIR
- LOG_DB_PATH = logger.LOG_DB_PATH
- if not os.path.exists(LOG_DB_PATH) and os.path.isdir(PATH_TO_LOGS_BASE_DIR):
- import Queue
- q = Queue.Queue(100)
- dialog = dialogs.ProgressDialog(_('Migrating Logs...'),
- _('Please wait while logs are being migrated...'), q)
- if os.name == 'nt' and gtk.pygtk_version > (2, 8, 0):
- idlequeue = idlequeue.SelectIdleQueue()
- else:
- idlequeue = GlibIdleQueue()
- def on_result(*arg):
- dialog.dialog.destroy()
- dialog.dialog = None
- gobject.source_remove(dialog.update_progressbar_timeout_id)
- gajim.logger.init_vars()
- check_paths.check_and_possibly_create_paths()
- Interface()
- m = MigrateCommand(on_result)
- m.set_idlequeue(idlequeue)
- m.start()
- else:
- check_paths.check_and_possibly_create_paths()
- Interface()
+ check_paths.check_and_possibly_create_paths()
+ Interface()
gtk.main()
diff --git a/src/gajim_themes_window.py b/src/gajim_themes_window.py
index 33d5e0569..cc9b1742e 100644
--- a/src/gajim_themes_window.py
+++ b/src/gajim_themes_window.py
@@ -36,6 +36,7 @@ class GajimThemesWindow:
def __init__(self):
self.xml = gtkgui_helpers.get_glade('gajim_themes_window.glade')
self.window = self.xml.get_widget('gajim_themes_window')
+ self.window.set_transient_for(gajim.interface.roster.window)
self.options = ['account', 'group', 'contact', 'banner']
self.options_combobox = self.xml.get_widget('options_combobox')
diff --git a/src/groupchat_control.py b/src/groupchat_control.py
index 667df0681..054327806 100644
--- a/src/groupchat_control.py
+++ b/src/groupchat_control.py
@@ -119,6 +119,13 @@ class PrivateChatControl(ChatControl):
return
ChatControl.send_message(self, message)
+
+ def update_ui(self):
+ if self.contact.show == 'offline':
+ self.got_disconnected()
+ else:
+ self.got_connected()
+ ChatControl.update_ui(self)
class GroupchatControl(ChatControlBase):
@@ -189,10 +196,6 @@ class GroupchatControl(ChatControlBase):
self.tooltip = tooltips.GCTooltip()
- self.allow_focus_out_line = True
- # holds the iter's offset which points to the end of --- line
- self.focus_out_end_iter_offset = None
-
# connect the menuitems to their respective functions
xm = gtkgui_helpers.get_glade('gc_control_popup_menu.glade')
@@ -284,12 +287,9 @@ class GroupchatControl(ChatControlBase):
column.set_visible(False)
self.list_treeview.set_expander_column(column)
- id = self.msg_textview.connect('populate_popup',
- self.on_msg_textview_populate_popup)
- self.handlers[id] = self.msg_textview
# set an empty subject to show the room_jid
self.set_subject('')
- self.got_disconnected() #init some variables
+ self.got_disconnected() # init some variables
self.update_ui()
self.conv_textview.tv.grab_focus()
@@ -298,20 +298,18 @@ class GroupchatControl(ChatControlBase):
def on_msg_textview_populate_popup(self, textview, menu):
'''we override the default context menu and we prepend Clear
and the ability to insert a nick'''
+ ChatControlBase.on_msg_textview_populate_popup(self, textview, menu)
item = gtk.SeparatorMenuItem()
menu.prepend(item)
- item = gtk.ImageMenuItem(gtk.STOCK_CLEAR)
- menu.prepend(item)
- id = item.connect('activate', self.msg_textview.clear)
- self.handlers[id] = item
item = gtk.MenuItem(_('Insert Nickname'))
menu.prepend(item)
submenu = gtk.Menu()
item.set_submenu(submenu)
- for nick in gajim.contacts.get_nick_list(self.account, self.room_jid):
- item = gtk.MenuItem(nick)
+ for nick in sorted(gajim.contacts.get_nick_list(self.account,
+ self.room_jid)):
+ item = gtk.MenuItem(nick, use_underline = False)
submenu.append(item)
id = item.connect('activate', self.append_nick_in_msg_textview, nick)
self.handlers[id] = item
@@ -325,7 +323,7 @@ class GroupchatControl(ChatControlBase):
def _on_window_focus_in_event(self, widget, event):
'''When window gets focus'''
if self.parent_win.get_active_jid() == self.room_jid:
- self.allow_focus_out_line = True
+ self.conv_textview.allow_focus_out_line = True
def on_treeview_size_allocate(self, widget, allocation):
'''The MUC treeview has resized. Move the hpaned in all tabs to match'''
@@ -443,10 +441,7 @@ class GroupchatControl(ChatControlBase):
def on_private_message(self, nick, msg, tim):
# Do we have a queue?
fjid = self.room_jid + '/' + nick
- qs = gajim.awaiting_events[self.account]
- no_queue = True
- if qs.has_key(fjid):
- no_queue = False
+ no_queue = len(gajim.events.get_events(self.account, fjid)) == 0
# We print if window is opened
pm_control = gajim.interface.msg_win_mgr.get_control(fjid, self.account)
@@ -454,9 +449,9 @@ class GroupchatControl(ChatControlBase):
pm_control.print_conversation(msg, tim = tim)
return
- if no_queue:
- qs[fjid] = []
- qs[fjid].append(('chat', (msg, '', 'incoming', tim, False, '')))
+ event = gajim.events.create_event('pm', (msg, '', 'incoming', tim,
+ False, '', None))
+ gajim.events.add_event(self.account, fjid, event)
autopopup = gajim.config.get('autopopup')
autopopupaway = gajim.config.get('autopopupaway')
@@ -471,8 +466,6 @@ class GroupchatControl(ChatControlBase):
self.room_jid, icon_name = 'message')
image = state_images['message']
model[iter][C_IMG] = image
- if gajim.interface.systray_enabled:
- gajim.interface.systray.add_jid(fjid, self.account, 'pm')
self.parent_win.show_title()
else:
self._start_private_message(nick)
@@ -531,18 +524,19 @@ class GroupchatControl(ChatControlBase):
if kind == 'incoming': # it's a message NOT from us
# highlighting and sounds
(highlight, sound) = self.highlighting_for_message(text, tim)
- gc_class=self.__class__
- if gc_class.gc_custom_colors.has_key(contact):
+ if self.gc_custom_colors.has_key(contact):
other_tags_for_name.append('gc_nickname_color_' + \
- str(gc_class.gc_custom_colors[contact]))
+ str(self.gc_custom_colors[contact]))
else:
- gc_class.gc_count_nicknames_colors += 1
- gc_class.gc_custom_colors[contact] = gc_class.gc_count_nicknames_colors
+ self.gc_count_nicknames_colors += 1
+ number_of_colors = len(gajim.config.get('gc_nicknames_colors').\
+ split(':'))
+ if self.gc_count_nicknames_colors == number_of_colors:
+ self.gc_count_nicknames_colors = 0
+ self.gc_custom_colors[contact] = \
+ self.gc_count_nicknames_colors
other_tags_for_name.append('gc_nickname_color_' + \
- str(gc_class.gc_count_nicknames_colors))
- number_of_colors = len(gajim.config.get('gc_nicknames_colors').split(':'))
- if gc_class.gc_count_nicknames_colors == number_of_colors:
- gc_class.gc_count_nicknames_colors = 0
+ str(self.gc_count_nicknames_colors))
if highlight:
# muc-specific chatstate
self.parent_win.redraw_tab(self, 'attention')
@@ -552,12 +546,23 @@ class GroupchatControl(ChatControlBase):
helpers.play_sound('muc_message_received')
elif sound == 'highlight':
helpers.play_sound('muc_message_highlight')
+ if text.startswith('/me ') or text.startswith('/me\n'):
+ other_tags_for_text.append('gc_nickname_color_' + \
+ str(self.gc_custom_colors[contact]))
self.check_and_possibly_add_focus_out_line()
ChatControlBase.print_conversation_line(self, text, kind, contact, tim,
other_tags_for_name, [], other_tags_for_text)
+ def get_nb_unread(self):
+ nb = len(gajim.events.get_events(self.account, self.room_jid,
+ ['printed_gc_msg']))
+ for nick in gajim.contacts.get_nick_list(self.account, self.room_jid):
+ nb += len(gajim.events.get_events(self.account, self.room_jid + '/' + \
+ nick, ['pm']))
+ return nb
+
def highlighting_for_message(self, text, tim):
'''Returns a 2-Tuple. The first says whether or not to highlight the
text, the second, what sound to play.'''
@@ -594,64 +599,7 @@ class GroupchatControl(ChatControlBase):
# we have full focus (we are reading it!)
return
- if not self.allow_focus_out_line:
- # if room did not receive focus-in from the last time we added
- # --- line then do not readd
- return
-
- print_focus_out_line = False
- buffer = self.conv_textview.tv.get_buffer()
-
- if self.focus_out_end_iter_offset is None:
- # this happens only first time we focus out on this room
- print_focus_out_line = True
-
- else:
- if self.focus_out_end_iter_offset != buffer.get_end_iter().get_offset():
- # this means after last-focus something was printed
- # (else end_iter's offset is the same as before)
- # only then print ---- line (eg. we avoid printing many following
- # ---- lines)
- print_focus_out_line = True
-
- if print_focus_out_line and buffer.get_char_count() > 0:
- buffer.begin_user_action()
-
- # remove previous focus out line if such focus out line exists
- if self.focus_out_end_iter_offset is not None:
- end_iter_for_previous_line = buffer.get_iter_at_offset(
- self.focus_out_end_iter_offset)
- begin_iter_for_previous_line = end_iter_for_previous_line.copy()
- begin_iter_for_previous_line.backward_chars(2) # img_char+1 (the '\n')
-
- # remove focus out line
- buffer.delete(begin_iter_for_previous_line,
- end_iter_for_previous_line)
-
- # add the new focus out line
- # FIXME: Why is this loaded from disk everytime
- path_to_file = os.path.join(gajim.DATA_DIR, 'pixmaps', 'muc_separator.png')
- focus_out_line_pixbuf = gtk.gdk.pixbuf_new_from_file(path_to_file)
- end_iter = buffer.get_end_iter()
- buffer.insert(end_iter, '\n')
- buffer.insert_pixbuf(end_iter, focus_out_line_pixbuf)
-
- end_iter = buffer.get_end_iter()
- before_img_iter = end_iter.copy()
- before_img_iter.backward_char() # one char back (an image also takes one char)
- buffer.apply_tag_by_name('focus-out-line', before_img_iter, end_iter)
- #FIXME: remove this workaround when bug is fixed
- # c http://bugzilla.gnome.org/show_bug.cgi?id=318569
-
- self.allow_focus_out_line = False
-
- # update the iter we hold to make comparison the next time
- self.focus_out_end_iter_offset = buffer.get_end_iter().get_offset()
-
- buffer.end_user_action()
-
- # scroll to the end (via idle in case the scrollbar has appeared)
- gobject.idle_add(self.conv_textview.scroll_to_end)
+ self.conv_textview.show_focus_out_line()
def needs_visual_notification(self, text):
'''checks text to see whether any of the words in (muc_highlight_words
@@ -747,7 +695,7 @@ class GroupchatControl(ChatControlBase):
model = self.list_treeview.get_model()
gc_contact = gajim.contacts.get_gc_contact(self.account, self.room_jid, nick)
state_images = gajim.interface.roster.jabber_state_images['16']
- if gajim.awaiting_events[self.account].has_key(self.room_jid + '/' + nick):
+ if len(gajim.events.get_events(self.account, self.room_jid + '/' + nick)):
image = state_images['message']
else:
image = state_images[gc_contact.show]
@@ -830,6 +778,9 @@ class GroupchatControl(ChatControlBase):
# after that, but that doesn't hurt
self.add_contact_to_roster(new_nick, show, role, affiliation,
status, jid)
+ # keep nickname color
+ if nick in self.gc_custom_colors:
+ self.gc_custom_colors[new_nick] = self.gc_custom_colors[nick]
# rename vcard / avatar
puny_jid = helpers.sanitize_filename(self.room_jid)
puny_nick = helpers.sanitize_filename(nick)
@@ -848,7 +799,8 @@ class GroupchatControl(ChatControlBase):
os.rename(old_file, files[old_file])
self.print_conversation(s, 'info')
- if not gajim.awaiting_events[self.account].has_key(self.room_jid + '/' + nick):
+ if len(gajim.events.get_events(self.account,
+ self.room_jid + '/' + nick)) == 0:
self.remove_contact(nick)
else:
c = gajim.contacts.get_gc_contact(self.account, self.room_jid, nick)
@@ -893,15 +845,18 @@ class GroupchatControl(ChatControlBase):
break
if print_status is None:
print_status = gajim.config.get('print_status_in_muc')
+ nick_jid = nick
+ if jid:
+ nick_jid += ' (%s)' % jid
if show == 'offline' and print_status in ('all', 'in_and_out'):
- st = _('%s has left') % nick
+ st = _('%s has left') % nick_jid
if reason:
st += ' [%s]' % reason
else:
if newly_created and print_status in ('all', 'in_and_out'):
- st = _('%s has joined the room') % nick
+ st = _('%s has joined the room') % nick_jid
elif print_status == 'all':
- st = _('%s is now %s') % (nick, helpers.get_uf_show(show))
+ st = _('%s is now %s') % (nick_jid, helpers.get_uf_show(show))
if st:
if status:
st += ' (' + status + ')'
@@ -1030,7 +985,8 @@ class GroupchatControl(ChatControlBase):
if len(message_array):
message_array = message_array[0].split()
nick = message_array.pop(0)
- room_nicks = gajim.contacts.get_nick_list(self.account, self.room_jid)
+ room_nicks = gajim.contacts.get_nick_list(self.account,
+ self.room_jid)
if nick in room_nicks:
privmsg = ' '.join(message_array)
self.on_send_pm(nick=nick, msg=privmsg)
@@ -1334,9 +1290,8 @@ class GroupchatControl(ChatControlBase):
nb = 0
for nick in gajim.contacts.get_nick_list(self.account, self.room_jid):
fjid = self.room_jid + '/' + nick
- if gajim.awaiting_events[self.account].has_key(fjid):
- # gc can only have messages as event
- nb += len(gajim.awaiting_events[self.account][fjid])
+ nb += len(gajim.events.get_events(self.account, fjid))
+ # gc can only have messages as event
return nb
def _on_change_subject_menuitem_activate(self, widget):
diff --git a/src/gtkgui_helpers.py b/src/gtkgui_helpers.py
index 1a62382de..fb6e3eaa8 100644
--- a/src/gtkgui_helpers.py
+++ b/src/gtkgui_helpers.py
@@ -126,8 +126,8 @@ def get_default_font():
# in try because daemon may not be there
client = gconf.client_get_default()
- return helpers.ensure_unicode_string(
- client.get_string('/desktop/gnome/interface/font_name'))
+ return client.get_string('/desktop/gnome/interface/font_name'
+ ).decode('utf-8')
except:
pass
@@ -147,8 +147,7 @@ def get_default_font():
for line in file(xfce_config_file):
if line.find('name="Gtk/FontName"') != -1:
start = line.find('value="') + 7
- return helpers.ensure_unicode_string(
- line[start:line.find('"', start)])
+ return line[start:line.find('"', start)].decode('utf-8')
except:
#we talk about file
print >> sys.stderr, _('Error: cannot open %s for reading') % xfce_config_file
@@ -163,7 +162,7 @@ def get_default_font():
font_name = values[0]
font_size = values[1]
font_string = '%s %s' % (font_name, font_size) # Verdana 9
- return helpers.ensure_unicode_string(font_string)
+ return font_string.decode('utf-8')
except:
#we talk about file
print >> sys.stderr, _('Error: cannot open %s for reading') % kde_config_file
@@ -406,7 +405,7 @@ def possibly_move_window_in_current_desktop(window):
if current_virtual_desktop_no != window_virtual_desktop:
# we are in another VD that the window was
# so show it in current VD
- window.show()
+ window.present()
def file_is_locked(path_to_file):
'''returns True if file is locked (WINDOWS ONLY)'''
@@ -458,7 +457,7 @@ def _get_fade_color(treeview, selected, focused):
def get_scaled_pixbuf(pixbuf, kind):
'''returns scaled pixbuf, keeping ratio etc or None
- kind is either "chat" or "roster" or "notification" or "tooltip"'''
+ kind is either "chat", "roster", "notification", "tooltip", "vcard"'''
# resize to a width / height for the avatar not to have distortion
# (keep aspect ratio)
diff --git a/src/history_manager.py b/src/history_manager.py
index 5fe8288be..21d74491f 100755
--- a/src/history_manager.py
+++ b/src/history_manager.py
@@ -464,8 +464,8 @@ class HistoryManager:
except ValueError:
pass
- file_.write(_('%(who)s on %(time)s said: %(message)s\n' % {'who': who,
- 'time': time_, 'message': message}))
+ file_.write(_('%(who)s on %(time)s said: %(message)s\n') % {'who': who,
+ 'time': time_, 'message': message})
def _delete_jid_logs(self, liststore, list_of_paths):
paths_len = len(list_of_paths)
diff --git a/src/message_control.py b/src/message_control.py
index 728c60922..1c1b0aa50 100644
--- a/src/message_control.py
+++ b/src/message_control.py
@@ -39,7 +39,6 @@ class MessageControl:
self.account = account
self.hide_chat_buttons_always = False
self.hide_chat_buttons_current = False
- self.nb_unread = 0
self.resource = resource
gajim.last_message_time[self.account][self.get_full_jid()] = 0
@@ -117,10 +116,7 @@ class MessageControl:
pass
def get_specific_unread(self):
- n = 0
- if gajim.awaiting_events[self.account].has_key(self.contact.jid):
- n = len(gajim.awaiting_events[self.account][self.contact.jid])
- return n
+ return len(gajim.events.get_events(self.account, self.contact.jid))
def send_message(self, message, keyID = '', type = 'chat',
chatstate = None, msg_id = None, composing_jep = None, resource = None,
diff --git a/src/message_textview.py b/src/message_textview.py
index 09de8b53c..cdf21ab54 100644
--- a/src/message_textview.py
+++ b/src/message_textview.py
@@ -50,6 +50,8 @@ class MessageTextView(gtk.TextView):
self.set_pixels_above_lines(2)
self.set_pixels_below_lines(2)
+ self.lang = None # Lang used for spell checking
+
def destroy(self):
import gc
gobject.idle_add(lambda:gc.collect())
diff --git a/src/message_window.py b/src/message_window.py
index bb570fe47..f190956c8 100644
--- a/src/message_window.py
+++ b/src/message_window.py
@@ -22,6 +22,7 @@
##
import gtk
+import gobject
import common
import gtkgui_helpers
@@ -149,8 +150,17 @@ class MessageWindow:
fjid = control.get_full_jid()
self._controls[control.account][fjid] = control
- if self.get_num_controls() > 1:
+ if self.get_num_controls() == 2:
+ # is first conversation_textview scrolled down ?
+ scrolled = False
+ first_widget = self.notebook.get_nth_page(0)
+ ctrl = self._widget_to_control(first_widget)
+ conv_textview = ctrl.conv_textview
+ if conv_textview.at_the_end():
+ scrolled = True
self.notebook.set_show_tabs(True)
+ if scrolled:
+ gobject.idle_add(conv_textview.scroll_to_end_iter)
self.alignment.set_property('top-padding', 2)
# Add notebook page and connect up to the tab's close button
@@ -214,7 +224,7 @@ class MessageWindow:
gajim.config.get('notify_on_all_muc_messages') and not \
ctrl.attention_flag:
continue
- unread += ctrl.nb_unread
+ unread += ctrl.get_nb_unread()
unread_str = ''
if unread > 1:
@@ -270,9 +280,8 @@ class MessageWindow:
ctrl.shutdown()
# Update external state
- if gajim.interface.systray_enabled:
- gajim.interface.systray.remove_jid(ctrl.get_full_jid(), ctrl.account,
- ctrl.type_id)
+ gajim.events.remove_events(ctrl.account, ctrl.get_full_jid,
+ types = ['printed_msg', 'chat', 'gc_msg'])
del gajim.last_message_time[ctrl.account][ctrl.get_full_jid()]
self.disconnect_tab_dnd(ctrl.widget)
@@ -422,10 +431,10 @@ class MessageWindow:
if ind < 0:
ind = self.notebook.get_n_pages() - 1
ctrl = self.get_control(ind, None)
- if ctrl.nb_unread > 0:
+ if ctrl.get_nb_unread() > 0:
found = True
break # found
- else: # Search for a composing contact
+ elif gajim.config.get('ctrl_tab_go_to_next_composing') : # Search for a composing contact
contact = ctrl.contact
if first_composing_ind == -1 and contact.chatstate == 'composing':
# If no composing contact found yet, check if this one is composing
diff --git a/src/migrate_logs_to_dot9_db.py b/src/migrate_logs_to_dot9_db.py
deleted file mode 100755
index c3768f952..000000000
--- a/src/migrate_logs_to_dot9_db.py
+++ /dev/null
@@ -1,267 +0,0 @@
-#!/bin/sh
-''':'
-exec python -OOt "$0" ${1+"$@"}
-' '''
-## Contributors for this file:
-## - Yann Le Boulanger <asterix@lagaule.org>
-## - Nikos Kouremenos <kourem@gmail.com>
-##
-## Copyright (C) 2003-2004 Yann Le Boulanger <asterix@lagaule.org>
-## Vincent Hanquez <tab@snarc.org>
-## Copyright (C) 2005 Yann Le Boulanger <asterix@lagaule.org>
-## Vincent Hanquez <tab@snarc.org>
-## Nikos Kouremenos <nkour@jabber.org>
-## Dimitur Kirov <dkirov@gmail.com>
-## Travis Shirk <travis@pobox.com>
-## Norman Rasmussen <norman@rasmussen.co.za>
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published
-## by the Free Software Foundation; version 2 only.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-## GNU General Public License for more details.
-##
-
-import os
-import sre
-import sys
-import time
-from common import logger
-from common import i18n
-
-try:
- PREFERRED_ENCODING = sys.getpreferredencoding()
-except:
- PREFERRED_ENCODING = 'utf-8'
-from common.helpers import from_one_line, decode_string
-
-from pysqlite2 import dbapi2 as sqlite
-
-if os.name == 'nt':
- try:
- PATH_TO_LOGS_BASE_DIR = os.path.join(os.environ['appdata'], 'Gajim', 'Logs')
- PATH_TO_DB = os.path.join(os.environ['appdata'], 'Gajim', 'logs.db') # database is called logs.db
- except KeyError:
- # win9x
- PATH_TO_LOGS_BASE_DIR = '../src/Logs'
- PATH_TO_DB = '../src/logs.db'
-else:
- PATH_TO_LOGS_BASE_DIR = os.path.expanduser('~/.gajim/logs')
- PATH_TO_DB = os.path.expanduser('~/.gajim/logs.db') # database is called logs.db
-
-
-
-class Migration:
- def __init__(self):
- self.constants = logger.Constants()
- self.DONE = False
- self.PROCESSING = False
-
- if os.path.exists(PATH_TO_DB):
- print '%s already exists. Exiting..' % PATH_TO_DB
- sys.exit()
-
- self.jids_already_in = [] # jid we already put in DB
-
- def get_jid(self, dirname, filename):
- # jids.jid text column will be JID if TC-related, room_jid if GC-related,
- # ROOM_JID/nick if pm-related. Here I get names from filenames
- if dirname.endswith('logs') or dirname.endswith('Logs'):
- # we have file (not dir) in logs base dir, so it's TC
- jid = filename # file is JID
- else:
- # we are in a room folder (so it can be either pm or message in room)
- if filename == os.path.basename(dirname): # room/room
- jid = dirname # filename is ROOM_JID
- else: #room/nick it's pm
- jid = dirname + '/' + filename
-
- if jid.startswith('/'):
- p = len(PATH_TO_LOGS_BASE_DIR)
- jid = jid[p+1:]
- jid = jid.lower()
- return jid
-
- def decode_jid(self, string):
- '''try to decode (to make it Unicode instance) given jid'''
- string = decode_string(string)
- if isinstance(string, str):
- return None # decode failed
- return string
-
- def visit(self, arg, dirname, filenames):
- s = _('Visiting %s') % dirname
- if self.queue:
- self.queue.put(s)
- else:
- print s
- for filename in filenames:
- # Don't take this file into account, this is dup info
- # notifications are also in contact log file
- if filename in ('notify.log', 'README'):
- continue
- path_to_text_file = os.path.join(dirname, filename)
- if os.path.isdir(path_to_text_file):
- continue
-
- jid = self.get_jid(dirname, filename)
-
- jid = self.decode_jid(jid)
- if not jid:
- continue
-
- if filename == os.path.basename(dirname): # gajim@conf/gajim@conf then gajim@conf is type room
- jid_type = self.constants.JID_ROOM_TYPE
- #Type of log
- typ = 'room'
- else:
- jid_type = self.constants.JID_NORMAL_TYPE
- #Type of log
- typ = _('normal')
- s = _('Processing %s of type %s') % (jid, typ)
- if self.queue:
- self.queue.put(s.encode(PREFERRED_ENCODING))
- else:
- print s.encode(PREFERRED_ENCODING)
-
- JID_ID = None
- f = open(path_to_text_file, 'r')
- lines = f.readlines()
- for line in lines:
- line = from_one_line(line)
- splitted_line = line.split(':')
- if len(splitted_line) > 2:
- # type in logs is one of
- # 'gc', 'gcstatus', 'recv', 'sent' and if nothing of those
- # it is status
- # new db has:
- # status, gcstatus, gc_msg, (we only recv those 3),
- # single_msg_recv, chat_msg_recv, chat_msg_sent, single_msg_sent
- # to meet all our needs
- # here I convert
- # gc ==> gc_msg, gcstatus ==> gcstatus, recv ==> chat_msg_recv
- # sent ==> chat_msg_sent, status ==> status
- typ = splitted_line[1] # line[1] has type of logged message
- message_data = splitted_line[2:] # line[2:] has message data
- # line[0] is date,
- # some lines can be fucked up, just drop them
- try:
- tim = int(float(splitted_line[0]))
- except:
- continue
-
- contact_name = None
- show = None
- if typ == 'gc':
- contact_name = message_data[0]
- message = ':'.join(message_data[1:])
- kind = self.constants.KIND_GC_MSG
- elif typ == 'gcstatus':
- contact_name = message_data[0]
- show = message_data[1]
- message = ':'.join(message_data[2:]) # status msg
- kind = self.constants.KIND_GCSTATUS
- elif typ == 'recv':
- message = ':'.join(message_data[0:])
- kind = self.constants.KIND_CHAT_MSG_RECV
- elif typ == 'sent':
- message = ':'.join(message_data[0:])
- kind = self.constants.KIND_CHAT_MSG_SENT
- else: # status
- kind = self.constants.KIND_STATUS
- show = message_data[0]
- message = ':'.join(message_data[1:]) # status msg
-
- message = message[:-1] # remove last \n
- if not message:
- continue
-
- # jid is already in the DB, don't create a new row, just get his jid_id
- if not JID_ID:
- if jid in self.jids_already_in:
- self.cur.execute('SELECT jid_id FROM jids WHERE jid = "%s"' % jid)
- JID_ID = self.cur.fetchone()[0]
- else:
- self.jids_already_in.append(jid)
- self.cur.execute('INSERT INTO jids (jid, type) VALUES (?, ?)',
- (jid, jid_type))
- self.con.commit()
- JID_ID = self.cur.lastrowid
-
- sql = 'INSERT INTO logs (jid_id, contact_name, time, kind, show, message) '\
- 'VALUES (?, ?, ?, ?, ?, ?)'
-
- values = (JID_ID, contact_name, tim, kind, show, message)
- self.cur.execute(sql, values)
- self.con.commit()
-
- def migrate(self, queue = None):
- self.queue = queue
- self.con = sqlite.connect(PATH_TO_DB)
- os.chmod(PATH_TO_DB, 0600) # rw only for us
- self.cur = self.con.cursor()
- # create the tables
- # kind can be
- # status, gcstatus, gc_msg, (we only recv for those 3),
- # single_msg_recv, chat_msg_recv, chat_msg_sent, single_msg_sent
- # to meet all our needs
- # logs.jid_id --> jids.jid_id but Sqlite doesn't do FK etc so it's done in python code
- self.cur.executescript(
- '''
- CREATE TABLE jids(
- jid_id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
- jid TEXT UNIQUE,
- type INTEGER
- );
-
- CREATE TABLE unread_messages(
- message_id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
- jid_id INTEGER
- );
-
- CREATE TABLE logs(
- log_line_id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
- jid_id INTEGER,
- contact_name TEXT,
- time INTEGER,
- kind INTEGER,
- show INTEGER,
- message TEXT,
- subject TEXT
- );
- '''
- )
-
- self.con.commit()
-
- self.PROCESSING = True
- os.path.walk(PATH_TO_LOGS_BASE_DIR, self.visit, None)
- s = '''
-
-We do not use plain-text files anymore, because they do not meet our needs.
-Those files here are logs for Gajim up until 0.8.2
-We now use an sqlite database called logs.db found in %s
-You can now safely remove your %s folder
-Thank you''' % (os.path.dirname(PATH_TO_LOGS_BASE_DIR), PATH_TO_LOGS_BASE_DIR)
- f = open(os.path.join(PATH_TO_LOGS_BASE_DIR, 'README'), 'w')
- f.write(s)
- f.close()
- if queue:
- queue.put(s)
- self.DONE = True
-
-if __name__ == '__main__':
- # magic argumen 'dont_wait' tells us that script is run from Gajim
- if len(sys.argv) < 2 or sys.argv[1] != 'dont_wait':
- print 'IMPORTNANT: PLEASE READ http://trac.gajim.org/wiki/MigrateLogToDot9DB'
- print 'Migration will start in 40 seconds unless you press Ctrl+C'
- time.sleep(40) # give the user time to act
- print
- print 'Starting Logs Migration'
- print '======================='
- print 'Please do NOT run Gajim until this script is over'
- m = Migration()
- m.migrate()
diff --git a/src/notify.py b/src/notify.py
index e25c47d29..908ff25d9 100644
--- a/src/notify.py
+++ b/src/notify.py
@@ -32,12 +32,89 @@ if dbus_support.supported:
import dbus.glib
import dbus.service
-def notify(event, jid, account, parameters):
+def get_show_in_roster(event, account, contact):
+ '''Return True if this event must be shown in roster, else False'''
+ num = get_advanced_notification(event, account, contact)
+ if num != None:
+ if gajim.config.get_per('notifications', str(num), 'roster') == 'yes':
+ return True
+ if gajim.config.get_per('notifications', str(num), 'roster') == 'no':
+ return False
+ if event == 'message_received':
+ chat_control = helpers.get_chat_control(account, contact)
+ if not chat_control:
+ return True
+ elif event == 'ft_request':
+ return True
+ return False
+
+def get_show_in_systray(event, account, contact):
+ '''Return True if this event must be shown in roster, else False'''
+ num = get_advanced_notification(event, account, contact)
+ if num != None:
+ if gajim.config.get_per('notifications', str(num), 'systray') == 'yes':
+ return True
+ if gajim.config.get_per('notifications', str(num), 'systray') == 'no':
+ return False
+ if event in ('message_received', 'ft_request', 'gc_msg_highlight',
+ 'ft_request'):
+ return True
+ return False
+
+def get_advanced_notification(event, account, contact):
+ '''Returns the number of the first advanced notification or None'''
+ num = 0
+ notif = gajim.config.get_per('notifications', str(num))
+ while notif:
+ recipient_ok = False
+ status_ok = False
+ tab_opened_ok = False
+ # test event
+ if gajim.config.get_per('notifications', str(num), 'event') == event:
+ # test recipient
+ recipient_type = gajim.config.get_per('notifications', str(num),
+ 'recipient_type')
+ recipients = gajim.config.get_per('notifications', str(num),
+ 'recipients').split()
+ if recipient_type == 'all':
+ recipient_ok = True
+ elif recipient_type == 'contact' and contact.jid in recipients:
+ recipient_ok = True
+ elif recipient_type == 'group':
+ for group in contact.groups:
+ if group in contact.groups:
+ recipient_ok = True
+ break
+ if recipient_ok:
+ # test status
+ our_status = gajim.SHOW_LIST[gajim.connections[account].connected]
+ status = gajim.config.get_per('notifications', str(num), 'status')
+ if status == 'all' or our_status in status.split():
+ status_ok = True
+ if status_ok:
+ # test window_opened
+ tab_opened = gajim.config.get_per('notifications', str(num),
+ 'tab_opened')
+ if tab_opened == 'both':
+ tab_opened_ok = True
+ else:
+ chat_control = helper.get_chat_control(account, contact)
+ if (chat_control and tab_opened == 'yes') or (not chat_control and \
+ tab_opened == 'no'):
+ tab_opened_ok = True
+ if tab_opened_ok:
+ return num
+
+ num += 1
+ notif = gajim.config.get_per('notifications', str(num))
+
+def notify(event, jid, account, parameters, advanced_notif_num = None):
'''Check what type of notifications we want, depending on basic configuration
of notifications and advanced one and do these notifications'''
# First, find what notifications we want
do_popup = False
do_sound = False
+ do_cmd = False
if (event == 'status_change'):
new_show = parameters[0]
status_message = parameters[1]
@@ -51,9 +128,8 @@ def notify(event, jid, account, parameters):
if account_server in gajim.block_signed_in_notifications and \
gajim.block_signed_in_notifications[account_server]:
block_transport = True
- if gajim.config.get('notify_on_signin') and \
- not gajim.block_signed_in_notifications[account] and not block_transport \
- and helpers.allow_showing_notification(account):
+ if helpers.allow_showing_notification(account, 'notify_on_signin') and \
+ not gajim.block_signed_in_notifications[account] and not block_transport:
do_popup = True
if gajim.config.get_per('soundevents', 'contact_connected',
'enabled') and not gajim.block_signed_in_notifications[account] and \
@@ -61,8 +137,7 @@ def notify(event, jid, account, parameters):
do_sound = True
elif (event == 'contact_disconnected'):
status_message = parameters
- if gajim.config.get('notify_on_signout') \
- and helpers.allow_showing_notification(account):
+ if helpers.allow_showing_notification(account, 'notify_on_signout'):
do_popup = True
if gajim.config.get_per('soundevents', 'contact_disconnected',
'enabled'):
@@ -72,17 +147,21 @@ def notify(event, jid, account, parameters):
first = parameters[1]
nickname = parameters[2]
message = parameters[3]
- if gajim.config.get('notify_on_new_message') and \
- helpers.allow_showing_notification(account) and first:
+ if helpers.allow_showing_notification(account, 'notify_on_new_message',
+ advanced_notif_num, first):
do_popup = True
- if first and gajim.config.get_per('soundevents', 'first_message_received',
- 'enabled'):
+ if first and helpers.allow_sound_notification('first_message_received',
+ advanced_notif_num):
do_sound = True
- elif not first and gajim.config.get_per('soundevents', 'next_message_received',
- 'enabled'):
+ elif not first and helpers.allow_sound_notification(
+ 'next_message_received', advanced_notif_num):
do_sound = True
else:
print '*Event not implemeted yet*'
+
+ if advanced_notif_num != None and gajim.config.get_per('notifications',
+ str(advanced_notif_num), 'run_command'):
+ do_cmd = True
# Do the wanted notifications
if (do_popup):
@@ -161,14 +240,34 @@ def notify(event, jid, account, parameters):
path_to_image = path, title = title, text = text)
if (do_sound):
+ snd_file = None
+ snd_event = None # If not snd_file, play the event
if (event == 'new_message'):
- if first:
- helpers.play_sound('first_message_received')
+ if advanced_notif_num != None and gajim.config.get_per('notifications',
+ str(advanced_notif_num), 'sound') == 'yes':
+ snd_file = gajim.config.get_per('notifications',
+ str(advanced_notif_num), 'sound_file')
+ elif advanced_notif_num != None and gajim.config.get_per(
+ 'notifications', str(advanced_notif_num), 'sound') == 'no':
+ pass # do not set snd_event
+ elif first:
+ snd_event = 'first_message_received'
else:
- helpers.play_sound('next_message_received')
+ snd_event = 'next_message_received'
elif event in ('contact_connected', 'contact_disconnected'):
- helpers.play_sound(event)
-
+ snd_event = event
+ if snd_file:
+ helpers.play_sound_file(snd_file)
+ if snd_event:
+ helpers.play_sound(snd_event)
+
+ if do_cmd:
+ command = gajim.config.get_per('notifications', str(advanced_notif_num),
+ 'command')
+ try:
+ helpers.exec_command(command)
+ except:
+ pass
def popup(event_type, jid, account, msg_type = '', path_to_image = None,
title = None, text = None):
@@ -283,6 +382,8 @@ class DesktopNotification:
ntype = 'im.invitation'
elif event_type == _('Contact Changed Status'):
ntype = 'presence.status'
+ elif event_type == _('Connection Failed'):
+ ntype = 'connection.failed'
else:
# default failsafe values
self.path_to_image = os.path.abspath(
diff --git a/src/profile_window.py b/src/profile_window.py
new file mode 100644
index 000000000..41bbd8de3
--- /dev/null
+++ b/src/profile_window.py
@@ -0,0 +1,283 @@
+## profile_window.py
+##
+## Copyright (C) 2003-2006 Yann Le Boulanger <asterix@lagaule.org>
+## Copyright (C) 2005-2006 Nikos Kouremenos <kourem@gmail.com>
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published
+## by the Free Software Foundation; version 2 only.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+
+import gtk
+import gobject
+import base64
+import mimetypes
+import os
+import time
+import locale
+
+import gtkgui_helpers
+import dialogs
+
+from common import helpers
+from common import gajim
+from common.i18n import Q_
+
+def get_avatar_pixbuf_encoded_mime(photo):
+ '''return the pixbuf of the image
+ photo is a dictionary containing PHOTO information'''
+ if not isinstance(photo, dict):
+ return None, None, None
+ img_decoded = None
+ avatar_encoded = None
+ avatar_mime_type = None
+ if photo.has_key('BINVAL'):
+ img_encoded = photo['BINVAL']
+ avatar_encoded = img_encoded
+ try:
+ img_decoded = base64.decodestring(img_encoded)
+ except:
+ pass
+ if img_decoded:
+ if photo.has_key('TYPE'):
+ avatar_mime_type = photo['TYPE']
+ pixbuf = gtkgui_helpers.get_pixbuf_from_data(img_decoded)
+ else:
+ pixbuf, avatar_mime_type = gtkgui_helpers.get_pixbuf_from_data(
+ img_decoded, want_type=True)
+ else:
+ pixbuf = None
+ return pixbuf, avatar_encoded, avatar_mime_type
+
+class ProfileWindow:
+ '''Class for our information window'''
+
+ def __init__(self, account):
+ self.xml = gtkgui_helpers.get_glade('profile_window.glade')
+ self.window = self.xml.get_widget('profile_window')
+
+ self.account = account
+ self.jid = gajim.get_jid_from_account(account)
+
+ self.avatar_mime_type = None
+ self.avatar_encoded = None
+
+ self.xml.signal_autoconnect(self)
+ self.window.show_all()
+
+ def on_profile_window_destroy(self, widget):
+ del gajim.interface.instances[self.account]['profile']
+
+ def on_profile_window_key_press_event(self, widget, event):
+ if event.keyval == gtk.keysyms.Escape:
+ self.window.destroy()
+
+ def on_clear_button_clicked(self, widget):
+ # empty the image
+ self.xml.get_widget('PHOTO_image').set_from_icon_name('stock_person',
+ gtk.ICON_SIZE_DIALOG)
+ self.avatar_encoded = None
+ self.avatar_mime_type = None
+
+ def on_set_avatar_button_clicked(self, widget):
+ f = None
+ def on_ok(widget, path_to_file):
+ filesize = os.path.getsize(path_to_file) # in bytes
+ #FIXME: use messages for invalid file for 0.11
+ invalid_file = False
+ msg = ''
+ if os.path.isfile(path_to_file):
+ stat = os.stat(path_to_file)
+ if stat[6] == 0:
+ invalid_file = True
+ else:
+ invalid_file = True
+ if not invalid_file and filesize > 16384: # 16 kb
+ try:
+ pixbuf = gtk.gdk.pixbuf_new_from_file(path_to_file)
+ # get the image at 'notification size'
+ # and use that user did not specify in ACE crazy size
+ scaled_pixbuf = gtkgui_helpers.get_scaled_pixbuf(pixbuf,
+ 'tooltip')
+ except gobject.GError, msg: # unknown format
+ # msg should be string, not object instance
+ msg = str(msg)
+ invalid_file = True
+ if invalid_file:
+ if True: # keep identation
+ dialogs.ErrorDialog(_('Could not load image'), msg)
+ return
+ if filesize > 16384:
+ if scaled_pixbuf:
+ path_to_file = os.path.join(gajim.TMP,
+ 'avatar_scaled.png')
+ scaled_pixbuf.save(path_to_file, 'png')
+ self.dialog.destroy()
+
+ fd = open(path_to_file, 'rb')
+ data = fd.read()
+ pixbuf = gtkgui_helpers.get_pixbuf_from_data(data)
+ # rescale it
+ pixbuf = gtkgui_helpers.get_scaled_pixbuf(pixbuf, 'vcard')
+ image = self.xml.get_widget('PHOTO_image')
+ image.set_from_pixbuf(pixbuf)
+ self.avatar_encoded = base64.encodestring(data)
+ # returns None if unknown type
+ self.avatar_mime_type = mimetypes.guess_type(path_to_file)[0]
+
+ self.dialog = dialogs.ImageChooserDialog(on_response_ok = on_ok)
+
+ def on_PHOTO_button_press_event(self, widget, event):
+ '''If right-clicked, show popup'''
+ if event.button == 3 and self.avatar_encoded: # right click
+ menu = gtk.Menu()
+ nick = gajim.config.get_per('accounts', self.account, 'name')
+ menuitem = gtk.ImageMenuItem(gtk.STOCK_SAVE_AS)
+ menuitem.connect('activate',
+ gtkgui_helpers.on_avatar_save_as_menuitem_activate,
+ self.jid, None, nick + '.jpeg')
+ menu.append(menuitem)
+ # show clear
+ menuitem = gtk.ImageMenuItem(gtk.STOCK_CLEAR)
+ menuitem.connect('activate', self.on_clear_button_clicked)
+ menu.append(menuitem)
+ menu.connect('selection-done', lambda w:w.destroy())
+ # show the menu
+ menu.show_all()
+ menu.popup(None, None, None, event.button, event.time)
+ elif event.button == 1: # left click
+ self.on_set_avatar_button_clicked(widget)
+
+ def set_value(self, entry_name, value):
+ try:
+ self.xml.get_widget(entry_name).set_text(value)
+ except AttributeError:
+ pass
+
+ def set_values(self, vcard):
+ if not 'PHOTO' in vcard:
+ # set default image
+ image = self.xml.get_widget('PHOTO_image')
+ image.set_from_icon_name('stock_person', gtk.ICON_SIZE_DIALOG)
+ for i in vcard.keys():
+ if i == 'PHOTO':
+ pixbuf, self.avatar_encoded, self.avatar_mime_type = \
+ get_avatar_pixbuf_encoded_mime(vcard[i])
+ image = self.xml.get_widget('PHOTO_image')
+ if not pixbuf:
+ image.set_from_icon_name('stock_person', gtk.ICON_SIZE_DIALOG)
+ continue
+ pixbuf = gtkgui_helpers.get_scaled_pixbuf(pixbuf, 'vcard')
+ image.set_from_pixbuf(pixbuf)
+ continue
+ if i == 'ADR' or i == 'TEL' or i == 'EMAIL':
+ for entry in vcard[i]:
+ add_on = '_HOME'
+ if 'WORK' in entry:
+ add_on = '_WORK'
+ for j in entry.keys():
+ self.set_value(i + add_on + '_' + j + '_entry', entry[j])
+ if isinstance(vcard[i], dict):
+ for j in vcard[i].keys():
+ self.set_value(i + '_' + j + '_entry', vcard[i][j])
+ else:
+ if i == 'DESC':
+ self.xml.get_widget('DESC_textview').get_buffer().set_text(
+ vcard[i], 0)
+ else:
+ self.set_value(i + '_entry', vcard[i])
+
+ def add_to_vcard(self, vcard, entry, txt):
+ '''Add an information to the vCard dictionary'''
+ entries = entry.split('_')
+ loc = vcard
+ if len(entries) == 3: # We need to use lists
+ if not loc.has_key(entries[0]):
+ loc[entries[0]] = []
+ found = False
+ for e in loc[entries[0]]:
+ if entries[1] in e:
+ found = True
+ break
+ if found:
+ e[entries[2]] = txt
+ else:
+ loc[entries[0]].append({entries[1]: '', entries[2]: txt})
+ return vcard
+ while len(entries) > 1:
+ if not loc.has_key(entries[0]):
+ loc[entries[0]] = {}
+ loc = loc[entries[0]]
+ del entries[0]
+ loc[entries[0]] = txt
+ return vcard
+
+ def make_vcard(self):
+ '''make the vCard dictionary'''
+ entries = ['FN', 'NICKNAME', 'BDAY', 'EMAIL_HOME_USERID', 'URL',
+ 'TEL_HOME_NUMBER', 'N_FAMILY', 'N_GIVEN', 'N_MIDDLE', 'N_PREFIX',
+ 'N_SUFFIX', 'ADR_HOME_STREET', 'ADR_HOME_EXTADR', 'ADR_HOME_LOCALITY',
+ 'ADR_HOME_REGION', 'ADR_HOME_PCODE', 'ADR_HOME_CTRY', 'ORG_ORGNAME',
+ 'ORG_ORGUNIT', 'TITLE', 'ROLE', 'TEL_WORK_NUMBER', 'EMAIL_WORK_USERID',
+ 'ADR_WORK_STREET', 'ADR_WORK_EXTADR', 'ADR_WORK_LOCALITY',
+ 'ADR_WORK_REGION', 'ADR_WORK_PCODE', 'ADR_WORK_CTRY']
+ vcard = {}
+ for e in entries:
+ txt = self.xml.get_widget(e + '_entry').get_text().decode('utf-8')
+ if txt != '':
+ vcard = self.add_to_vcard(vcard, e, txt)
+
+ # DESC textview
+ buff = self.xml.get_widget('DESC_textview').get_buffer()
+ start_iter = buff.get_start_iter()
+ end_iter = buff.get_end_iter()
+ txt = buff.get_text(start_iter, end_iter, 0)
+ if txt != '':
+ vcard['DESC'] = txt.decode('utf-8')
+
+ # Avatar
+ if self.avatar_encoded:
+ vcard['PHOTO'] = {'BINVAL': self.avatar_encoded}
+ if self.avatar_mime_type:
+ vcard['PHOTO']['TYPE'] = self.avatar_mime_type
+ return vcard
+
+ def on_publish_button_clicked(self, widget):
+ if gajim.connections[self.account].connected < 2:
+ dialogs.ErrorDialog(_('You are not connected to the server'),
+ _('Without a connection you can not publish your contact '
+ 'information.'))
+ return
+ vcard = self.make_vcard()
+ nick = ''
+ if vcard.has_key('NICKNAME'):
+ nick = vcard['NICKNAME']
+ if nick == '':
+ nick = gajim.config.get_per('accounts', self.account, 'name')
+ gajim.nicks[self.account] = nick
+ gajim.connections[self.account].send_vcard(vcard)
+
+ def on_retrieve_button_clicked(self, widget):
+ entries = ['FN', 'NICKNAME', 'BDAY', 'EMAIL_HOME_USERID', 'URL',
+ 'TEL_HOME_NUMBER', 'N_FAMILY', 'N_GIVEN', 'N_MIDDLE', 'N_PREFIX',
+ 'N_SUFFIX', 'ADR_HOME_STREET', 'ADR_HOME_EXTADR', 'ADR_HOME_LOCALITY',
+ 'ADR_HOME_REGION', 'ADR_HOME_PCODE', 'ADR_HOME_CTRY', 'ORG_ORGNAME',
+ 'ORG_ORGUNIT', 'TITLE', 'ROLE', 'ADR_WORK_STREET', 'ADR_WORK_EXTADR',
+ 'ADR_WORK_LOCALITY', 'ADR_WORK_REGION', 'ADR_WORK_PCODE',
+ 'ADR_WORK_CTRY']
+ if gajim.connections[self.account].connected > 1:
+ # clear all entries
+ for e in entries:
+ self.xml.get_widget(e + '_entry').set_text('')
+ self.xml.get_widget('DESC_textview').get_buffer().set_text('')
+ self.xml.get_widget('PHOTO_image').set_from_icon_name('stock_person',
+ gtk.ICON_SIZE_DIALOG)
+ gajim.connections[self.account].request_vcard(self.jid)
+ else:
+ dialogs.ErrorDialog(_('You are not connected to the server'),
+ _('Without a connection, you can not get your contact information.'))
diff --git a/src/remote_control.py b/src/remote_control.py
index 33b4f039e..82dbc54b6 100644
--- a/src/remote_control.py
+++ b/src/remote_control.py
@@ -54,7 +54,7 @@ ident = lambda e: e
if dbus_support.version[1] >= 43:
# in most cases it is a utf-8 string
DBUS_STRING = dbus.String
-
+
# general type (for use in dicts,
# where all values should have the same type)
DBUS_VARIANT = dbus.Variant
@@ -67,7 +67,7 @@ if dbus_support.version[1] >= 43:
DBUS_DICT_SS = lambda : dbus.Dictionary({}, signature="ss")
# empty type
DBUS_NONE = lambda : dbus.Variant(0)
-
+
else: # 33, 35, 36
DBUS_DICT_SV = lambda : {}
DBUS_DICT_SS = lambda : {}
@@ -122,7 +122,7 @@ class Remote:
def __init__(self):
self.signal_object = None
session_bus = dbus_support.session_bus.SessionBus()
-
+
if dbus_support.version[1] >= 41:
service = dbus.service.BusName(SERVICE, bus=session_bus)
self.signal_object = SignalObject(service)
@@ -139,7 +139,7 @@ class Remote:
class SignalObject(DbusPrototype):
''' Local object definition for /org/gajim/dbus/RemoteObject. This doc must
not be visible, because the clients can access only the remote object. '''
-
+
def __init__(self, service):
self.first_show = True
self.vcard_account = None
@@ -171,6 +171,7 @@ class SignalObject(DbusPrototype):
self.get_status,
self.get_status_message,
self.start_chat,
+ self.send_xml,
])
def raise_signal(self, signal, arg):
@@ -180,7 +181,7 @@ class SignalObject(DbusPrototype):
i = message.get_iter(True)
i.append(arg)
self._connection.send(message)
-
+
def get_status(self, *args):
'''get_status(account = None)
returns status (show to be exact) which is the global one
@@ -193,7 +194,7 @@ class SignalObject(DbusPrototype):
# return show for the given account
index = gajim.connections[account].connected
return DBUS_STRING(STATUS_LIST[index])
-
+
def get_status_message(self, *args):
'''get_status(account = None)
returns status which is the global one
@@ -206,7 +207,7 @@ class SignalObject(DbusPrototype):
# return show for the given account
status = gajim.connections[account].status
return DBUS_STRING(status)
-
+
def get_account_and_contact(self, account, jid):
''' get the account (if not given) and contact instance from jid'''
@@ -232,7 +233,7 @@ class SignalObject(DbusPrototype):
break
if not contact:
contact = jid
-
+
return connected_account, contact
def send_file(self, *args):
@@ -240,6 +241,7 @@ class SignalObject(DbusPrototype):
send file, located at 'file_path' to 'jid', using account
(optional) 'account' '''
file_path, jid, account = self._get_real_arguments(args, 3)
+ jid = self._get_real_jid(jid, account)
connected_account, contact = self.get_account_and_contact(account, jid)
if connected_account:
@@ -250,7 +252,7 @@ class SignalObject(DbusPrototype):
connected_account, contact, file_path)
return True
return False
-
+
def _send_message(self, jid, message, keyID, account, type = 'chat', subject = None):
''' can be called from send_chat_message (default when send_message)
or send_single_message'''
@@ -258,20 +260,21 @@ class SignalObject(DbusPrototype):
return None # or raise error
if not keyID:
keyID = ''
-
+
connected_account, contact = self.get_account_and_contact(account, jid)
-
+
if connected_account:
connection = gajim.connections[connected_account]
res = connection.send_message(jid, message, keyID, type, subject)
return True
return False
-
+
def send_chat_message(self, *args):
''' send_message(jid, message, keyID=None, account=None)
send chat 'message' to 'jid', using account (optional) 'account'.
if keyID is specified, encrypt the message with the pgp key '''
jid, message, keyID, account = self._get_real_arguments(args, 4)
+ jid = self._get_real_jid(jid, account)
return self._send_message(jid, message, keyID, account)
def send_single_message(self, *args):
@@ -279,6 +282,7 @@ class SignalObject(DbusPrototype):
send single 'message' to 'jid', using account (optional) 'account'.
if keyID is specified, encrypt the message with the pgp key '''
jid, subject, message, keyID, account = self._get_real_arguments(args, 5)
+ jid = self._get_real_jid(jid, account)
return self._send_message(jid, message, keyID, account, type, subject)
def open_chat(self, *args):
@@ -288,9 +292,8 @@ class SignalObject(DbusPrototype):
if not jid:
# FIXME: raise exception for missing argument (dbus0.35+)
return None
- if jid.startswith('xmpp:'):
- jid = jid[5:] # len('xmpp:') = 5
-
+ jid = self._get_real_jid(jid, account)
+
if account:
accounts = [account]
else:
@@ -315,11 +318,11 @@ class SignalObject(DbusPrototype):
connected_account = acct
elif first_connected_acct is None:
first_connected_acct = acct
-
+
# if jid is not a conntact, open-chat with first connected account
if connected_account is None and first_connected_acct:
connected_account = first_connected_acct
-
+
if connected_account:
gajim.interface.roster.new_chat_from_jid(connected_account, jid)
# preserve the 'steal focus preservation'
@@ -328,7 +331,7 @@ class SignalObject(DbusPrototype):
win.window.focus()
return True
return False
-
+
def change_status(self, *args, **keywords):
''' change_status(status, message, account). account is optional -
if not specified status is changed for all accounts. '''
@@ -346,13 +349,12 @@ class SignalObject(DbusPrototype):
gobject.idle_add(gajim.interface.roster.send_status, acc,
status, message)
return None
-
+
def show_next_unread(self, *args):
''' Show the window(s) with next waiting messages in tabbed/group chats. '''
- #FIXME: when systray is disabled this method does nothing.
- if len(gajim.interface.systray.jids) != 0:
+ if gajim.events.get_nb_events():
gajim.interface.systray.handle_first_event()
-
+
def contact_info(self, *args):
''' get vcard info for a contact. Return cached value of the vcard.
'''
@@ -362,14 +364,15 @@ class SignalObject(DbusPrototype):
if not jid:
# FIXME: raise exception for missing argument (0.3+)
return None
-
+ jid = self._get_real_jid(jid, account)
+
cached_vcard = gajim.connections.values()[0].get_cached_vcard(jid)
if cached_vcard:
return get_dbus_struct(cached_vcard)
-
+
# return empty dict
return DBUS_DICT_SV()
-
+
def list_accounts(self, *args):
''' list register accounts '''
result = gajim.contacts.get_accounts()
@@ -379,7 +382,7 @@ class SignalObject(DbusPrototype):
result_array.append(DBUS_STRING(account))
return result_array
return None
-
+
def account_info(self, *args):
''' show info on account: resource, jid, nick, prio, message '''
[for_account] = self._get_real_arguments(args, 1)
@@ -398,7 +401,7 @@ class SignalObject(DbusPrototype):
result['resource'] = DBUS_STRING(unicode(gajim.config.get_per('accounts',
account.name, 'resource')))
return result
-
+
def list_contacts(self, *args):
''' list all contacts in the roster. If the first argument is specified,
then return the contacts for the specified account '''
@@ -422,7 +425,7 @@ class SignalObject(DbusPrototype):
if result == []:
return None
return result
-
+
def toggle_roster_appearance(self, *args):
''' shows/hides the roster window '''
win = gajim.interface.roster.window
@@ -449,14 +452,14 @@ class SignalObject(DbusPrototype):
prefs_dict[DBUS_STRING(key)] = DBUS_STRING(value[1])
gajim.config.foreach(get_prefs)
return prefs_dict
-
+
def prefs_store(self, *args):
try:
gajim.interface.save_config()
except Exception, e:
return False
return True
-
+
def prefs_del(self, *args):
[key] = self._get_real_arguments(args, 1)
if not key:
@@ -469,7 +472,7 @@ class SignalObject(DbusPrototype):
else:
gajim.config.del_per(key_path[0], key_path[1], key_path[2])
return True
-
+
def prefs_put(self, *args):
[key] = self._get_real_arguments(args, 1)
if not key:
@@ -482,7 +485,7 @@ class SignalObject(DbusPrototype):
subname, value = key_path[2].split('=', 1)
gajim.config.set_per(key_path[0], key_path[1], subname, value)
return True
-
+
def add_contact(self, *args):
[jid, account] = self._get_real_arguments(args, 2)
if account:
@@ -497,11 +500,12 @@ class SignalObject(DbusPrototype):
# if account is not given, show account combobox
AddNewContactWindow(account = None, jid = jid)
return True
-
+
def remove_contact(self, *args):
[jid, account] = self._get_real_arguments(args, 2)
+ jid = self._get_real_jid(jid, account)
accounts = gajim.contacts.get_accounts()
-
+
# if there is only one account in roster, take it as default
if account:
accounts = [account]
@@ -515,7 +519,7 @@ class SignalObject(DbusPrototype):
gajim.contacts.remove_jid(account, jid)
contact_exists = True
return contact_exists
-
+
def _is_first(self):
if self.first_show:
self.first_show = False
@@ -535,7 +539,35 @@ class SignalObject(DbusPrototype):
args.extend([None] * (desired_length - len(args)))
args = args[:desired_length]
return args
-
+
+ def _get_real_jid(self, jid, account = None):
+ '''get the real jid from the given one: removes xmpp: or get jid from nick
+ if account is specified, search only in this account
+ '''
+ if account:
+ accounts = [account]
+ else:
+ accounts = gajim.connections.keys()
+ if jid.startswith('xmpp:'):
+ return jid[5:] # len('xmpp:') = 5
+ nick_in_roster = None # Is jid a nick ?
+ for account in accounts:
+ # Does jid exists in roster of one account ?
+ if gajim.contacts.get_contacts_from_jid(account, jid):
+ return jid
+ if not nick_in_roster:
+ # look in all contact if one has jid as nick
+ for jid_ in gajim.contacts.get_jid_list(account):
+ c = gajim.contacts.get_contacts_from_jid(account, jid_)
+ if c[0].name == jid:
+ nick_in_roster = jid_
+ break
+ if nick_in_roster:
+ # We have not found jid in roster, but we found is as a nick
+ return nick_in_roster
+ # We have not found it as jid nor as nick, probably a not in roster jid
+ return jid
+
def _contacts_as_dbus_structure(self, contacts):
''' get info from list of Contact objects and create dbus dict '''
if not contacts:
@@ -564,7 +596,7 @@ class SignalObject(DbusPrototype):
return contact_dict
def get_unread_msgs_number(self, *args):
- return str(gajim.interface.roster.nb_unread)
+ return str(gajim.events.get_nb_events)
def start_chat(self, *args):
[account] = self._get_real_arguments(args, 1)
@@ -574,13 +606,21 @@ class SignalObject(DbusPrototype):
NewChatDialog(account)
return True
+ def send_xml(self, *args):
+ xml, account = self._get_real_arguments(args, 2)
+ if account:
+ gajim.connections[account[0]].send_stanza(xml)
+ else:
+ for acc in gajim.contacts.get_accounts():
+ gajim.connections[acc].send_stanza(xml)
+
if dbus_support.version[1] >= 30 and dbus_support.version[1] <= 40:
method = dbus.method
signal = dbus.signal
elif dbus_support.version[1] >= 41:
method = dbus.service.method
signal = dbus.service.signal
-
+
# prevent using decorators, because they are not supported
# on python < 2.4
# FIXME: use decorators when python2.3 (and dbus 0.23) is OOOOOOLD
@@ -605,3 +645,4 @@ class SignalObject(DbusPrototype):
account_info = method(INTERFACE)(account_info)
get_unread_msgs_number = method(INTERFACE)(get_unread_msgs_number)
start_chat = method(INTERFACE)(start_chat)
+ send_xml = method(INTERFACE)(send_xml)
diff --git a/src/roster_window.py b/src/roster_window.py
index ce53475e0..c14c467b9 100644
--- a/src/roster_window.py
+++ b/src/roster_window.py
@@ -18,6 +18,7 @@ import gtk
import gobject
import os
import time
+import urllib
import common.sleepy
import history_window
@@ -30,6 +31,7 @@ import cell_renderer_image
import tooltips
import message_control
import adhoc_commands
+import notify
from common import gajim
from common import helpers
@@ -63,7 +65,7 @@ class RosterWindow:
if self.regroup:
return account_iter
while account_iter:
- account_name = model[account_iter][C_NAME].decode('utf-8')
+ account_name = model[account_iter][C_ACCOUNT].decode('utf-8')
if name == account_name:
break
account_iter = model.iter_next(account_iter)
@@ -190,6 +192,13 @@ class RosterWindow:
model[iter][C_SECPIXBUF] = tls_pixbuf
else:
model[iter][C_SECPIXBUF] = None
+ path = model.get_path(iter)
+ if self.regroup:
+ account = _('Merged accounts')
+ if not self.tree.row_expanded(path) and model.iter_has_child(iter):
+ model[iter][C_NAME] = '[%s]' % account
+ else:
+ model[iter][C_NAME] = account
def remove_newly_added(self, jid, account):
if jid in gajim.newly_added[account]:
@@ -254,17 +263,17 @@ class RosterWindow:
if self.get_contact_iter(_jid, _account):
shown_family.append(data)
- if _jid == jid:
+ if _jid == jid and _account == account:
our_data = data
shown_family.append(our_data)
big_brother_data = gajim.contacts.get_metacontacts_big_brother(
shown_family)
big_brother_jid = big_brother_data['jid']
big_brother_account = big_brother_data['account']
- if big_brother_jid != jid:
+ if big_brother_jid != jid or big_brother_account != account:
# We are adding a child contact
if contact.show in ('offline', 'error') and \
- not showOffline and not gajim.awaiting_events[account].has_key(jid):
+ not showOffline and len(gajim.events.get_events(account, jid)) == 0:
return
parent_iters = self.get_contact_iter(big_brother_jid,
big_brother_account)
@@ -282,7 +291,7 @@ class RosterWindow:
if (contact.show in ('offline', 'error') or hide) and \
not showOffline and (not _('Transports') in contact.groups or \
gajim.connections[account].connected < 2) and \
- not gajim.awaiting_events[account].has_key(jid) and \
+ len(gajim.events.get_events(account, jid)) == 0 and \
not _('Not in Roster') in contact.groups:
return
@@ -350,6 +359,15 @@ class RosterWindow:
self.draw_contact(jid, account)
self.draw_avatar(jid, account)
return
+
+ contact = gajim.contacts.get_first_contact_from_jid(account, jid)
+ if not contact:
+ return
+ showOffline = gajim.config.get('showoffline')
+ if (contact.show in ('offline', 'error')) and not showOffline and \
+ len(gajim.events.get_events(account, jid)) == 0:
+ return
+
model = self.tree.get_model()
iterAcct = self.get_account_iter(account)
model.append(iterAcct, (None, gajim.nicks[account], 'self_contact', jid,
@@ -388,7 +406,7 @@ class RosterWindow:
if (contact.show in ('offline', 'error') or hide) and \
not showOffline and (not _('Transports') in contact.groups or \
gajim.connections[account].connected < 2) and \
- not gajim.awaiting_events[account].has_key(contact.jid):
+ len(gajim.events.get_events(account, contact.jid, ['chat'])) == 0:
self.remove_contact(contact, account)
else:
self.draw_contact(contact.jid, account)
@@ -445,8 +463,9 @@ class RosterWindow:
transport: transport iconset doesn't contain all icons, so we fall back
to jabber one'''
transport = gajim.get_transport_name_from_jid(jid)
- if transport and icon_name in \
- self.transports_state_images[size][transport]:
+ if transport and self.transports_state_images.has_key(size) and \
+ self.transports_state_images[size].has_key(transport) and icon_name in \
+ self.transports_state_images[size][transport]:
return self.transports_state_images[size][transport]
return self.jabber_state_images[size]
@@ -497,7 +516,7 @@ class RosterWindow:
iter = iters[0] # choose the icon with the first iter
icon_name = helpers.get_icon_name_to_show(contact, account)
- # look if anotherresource has awaiting events
+ # look if another resource has awaiting events
for c in contact_instances:
c_icon_name = helpers.get_icon_name_to_show(c, account)
if c_icon_name == 'message':
@@ -521,7 +540,7 @@ class RosterWindow:
# a child has awaiting messages ?
child_jid = model[child_iter][C_JID].decode('utf-8')
child_account = model[child_iter][C_ACCOUNT].decode('utf-8')
- if gajim.awaiting_events[child_account].has_key(child_jid):
+ if len(gajim.events.get_events(child_account, child_jid)):
icon_name = 'message'
break
child_iter = model.iter_next(child_iter)
@@ -553,7 +572,8 @@ class RosterWindow:
# parent is not a contact
return
parent_jid = model[parent_iter][C_JID].decode('utf-8')
- self.draw_contact(parent_jid, account)
+ parent_account = model[parent_iter][C_ACCOUNT].decode('utf-8')
+ self.draw_contact(parent_jid, parent_account)
def draw_avatar(self, jid, account):
'''draw the avatar'''
@@ -645,14 +665,11 @@ class RosterWindow:
def on_history_manager_menuitem_activate(self, widget):
if os.name == 'nt':
if os.path.exists('history_manager.exe'): # user is running stable
- os.startfile('history_manager.exe')
+ helpers.exec_command('history_manager.exe')
else: # user is running svn
- try:
- os.startfile('history_manager.py')
- except: # user doesn't have pywin32, too bad for him
- pass
+ helpers.exec_command('python history_manager.py')
else: # Unix user
- os.system('python history_manager.py &')
+ helpers.exec_command('python history_manager.py &')
def get_and_connect_advanced_menuitem_menu(self, account):
'''adds FOR ACCOUNT options'''
@@ -759,8 +776,7 @@ class RosterWindow:
add_sub_menu = gtk.Menu()
disco_sub_menu = gtk.Menu()
new_chat_sub_menu = gtk.Menu()
- profile_avatar_sub_menu = gtk.Menu()
-
+
for account in gajim.connections:
if gajim.connections[account].connected <= 1:
# if offline or connecting
@@ -784,16 +800,12 @@ class RosterWindow:
add_item = gtk.MenuItem(_('to %s account') % account, False)
add_sub_menu.append(add_item)
add_item.connect('activate', self.on_add_new_contact, account)
- add_new_contact_menuitem.set_submenu(add_sub_menu)
- add_sub_menu.show_all()
# disco
disco_item = gtk.MenuItem(_('using %s account') % account, False)
disco_sub_menu.append(disco_item)
disco_item.connect('activate',
self.on_service_disco_menuitem_activate, account)
- service_disco_menuitem.set_submenu(disco_sub_menu)
- disco_sub_menu.show_all()
# new chat
new_chat_item = gtk.MenuItem(_('using account %s') % account,
@@ -801,17 +813,13 @@ class RosterWindow:
new_chat_sub_menu.append(new_chat_item)
new_chat_item.connect('activate',
self.on_new_chat_menuitem_activate, account)
- new_chat_menuitem.set_submenu(new_chat_sub_menu)
- new_chat_sub_menu.show_all()
-
- # profile, avatar
- profile_avatar_item = gtk.MenuItem(_('of account %s') % account,
- False)
- profile_avatar_sub_menu.append(profile_avatar_item)
- profile_avatar_item.connect('activate',
- self.on_profile_avatar_menuitem_activate, account)
- profile_avatar_menuitem.set_submenu(profile_avatar_sub_menu)
- profile_avatar_sub_menu.show_all()
+
+ add_new_contact_menuitem.set_submenu(add_sub_menu)
+ add_sub_menu.show_all()
+ service_disco_menuitem.set_submenu(disco_sub_menu)
+ disco_sub_menu.show_all()
+ new_chat_menuitem.set_submenu(new_chat_sub_menu)
+ new_chat_sub_menu.show_all()
elif connected_accounts == 1: # user has only one account
for account in gajim.connections:
@@ -839,12 +847,6 @@ class RosterWindow:
gtk.keysyms.n, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
self.have_new_chat_accel = True
- # profile, avatar
- if not self.profile_avatar_menuitem_handler_id:
- self.profile_avatar_menuitem_handler_id = \
- profile_avatar_menuitem.connect('activate', self.\
- on_profile_avatar_menuitem_activate, account)
-
break # No other account connected
if connected_accounts == 0:
@@ -853,17 +855,45 @@ class RosterWindow:
join_gc_menuitem.set_sensitive(False)
add_new_contact_menuitem.set_sensitive(False)
service_disco_menuitem.set_sensitive(False)
- profile_avatar_menuitem.set_sensitive(False)
else: # we have one or more connected accounts
new_chat_menuitem.set_sensitive(True)
join_gc_menuitem.set_sensitive(True)
add_new_contact_menuitem.set_sensitive(True)
service_disco_menuitem.set_sensitive(True)
- profile_avatar_menuitem.set_sensitive(True)
# show the 'manage gc bookmarks' item
newitem = gtk.SeparatorMenuItem() # separator
gc_sub_menu.append(newitem)
+ connected_accounts_with_vcard = []
+ for account in gajim.connections:
+ if gajim.connections[account].connected > 1 and \
+ gajim.connections[account].vcard_supported:
+ connected_accounts_with_vcard.append(account)
+ if len(connected_accounts_with_vcard) > 1:
+ # 2 or more accounts? make submenus
+ profile_avatar_sub_menu = gtk.Menu()
+ for account in connected_accounts_with_vcard:
+ # profile, avatar
+ profile_avatar_item = gtk.MenuItem(_('of account %s') % account,
+ False)
+ profile_avatar_sub_menu.append(profile_avatar_item)
+ profile_avatar_item.connect('activate',
+ self.on_profile_avatar_menuitem_activate, account)
+ profile_avatar_menuitem.set_submenu(profile_avatar_sub_menu)
+ profile_avatar_sub_menu.show_all()
+ elif len(connected_accounts_with_vcard) == 1: # user has only one account
+ account = connected_accounts_with_vcard[0]
+ # profile, avatar
+ if not self.profile_avatar_menuitem_handler_id:
+ self.profile_avatar_menuitem_handler_id = \
+ profile_avatar_menuitem.connect('activate', self.\
+ on_profile_avatar_menuitem_activate, account)
+
+ if len(connected_accounts_with_vcard) == 0:
+ profile_avatar_menuitem.set_sensitive(False)
+ else:
+ profile_avatar_menuitem.set_sensitive(True)
+
newitem = gtk.ImageMenuItem(_('Manage Bookmarks...'))
img = gtk.image_new_from_stock(gtk.STOCK_PREFERENCES,
gtk.ICON_SIZE_MENU)
@@ -965,6 +995,7 @@ class RosterWindow:
'''adds contacts of group to roster treeview'''
for jid in gajim.contacts.get_jid_list(account):
self.add_contact_to_roster(jid, account)
+ self.draw_account(account)
def fire_up_unread_messages_events(self, account):
'''reads from db the unread messages, and fire them up'''
@@ -1038,7 +1069,7 @@ class RosterWindow:
contact.show = show
contact.status = status
if show in ('offline', 'error') and \
- not gajim.awaiting_events[account].has_key(contact.jid):
+ len(gajim.events.get_events(account, contact.jid)) == 0:
if len(contact_instances) > 1:
# if multiple resources
gajim.contacts.remove_contact(account, contact)
@@ -1173,26 +1204,41 @@ class RosterWindow:
'''When we want to modify the agent registration'''
gajim.connections[account].request_register_agent_info(contact.jid)
- def on_remove_agent(self, widget, contact, account):
- '''When an agent is requested to log in or off'''
- if gajim.config.get_per('accounts', account, 'hostname') == contact.jid:
- # We remove the server contact
- # remove it from treeview
- gajim.connections[account].unsubscribe(contact.jid)
- self.remove_contact(contact, account)
- gajim.contacts.remove_contact(account, contact)
- return
+ def on_remove_agent(self, widget, list_):
+ '''When an agent is requested to log in or off. list_ is a list of
+ (contact, account) tuple'''
+ for (contact, account) in list_:
+ if gajim.config.get_per('accounts', account, 'hostname') == \
+ contact.jid:
+ # We remove the server contact
+ # remove it from treeview
+ gajim.connections[account].unsubscribe(contact.jid)
+ self.remove_contact(contact, account)
+ gajim.contacts.remove_contact(account, contact)
+ return
- def remove(widget, contact, account):
+ def remove(widget, list_):
self.dialog.destroy()
- full_jid = contact.get_full_jid()
- gajim.connections[account].unsubscribe_agent(full_jid)
- # remove transport from treeview
- self.remove_contact(contact, account)
- gajim.contacts.remove_jid(account, contact.jid)
- gajim.contacts.remove_contact(account, contact)
+ for (contact, account) in list_:
+ full_jid = contact.get_full_jid()
+ gajim.connections[account].unsubscribe_agent(full_jid)
+ # remove transport from treeview
+ self.remove_contact(contact, account)
+ gajim.contacts.remove_jid(account, contact.jid)
+ gajim.contacts.remove_contact(account, contact)
- self.dialog = dialogs.ConfirmationDialog(_('Transport "%s" will be removed') % contact.jid, _('You will no longer be able to send and receive messages to contacts from this transport.'), on_response_ok = (remove, contact, account))
+ if len(list_) == 1:
+ pritext = _('Transport "%s" will be removed') % contact.jid
+ sectext = _('You will no longer be able to send and receive messages to contacts from this transport.')
+ else:
+ pritext = _('Transports will be removed')
+ jids = ''
+ for (contact, account) in list_:
+ jids += '\n ' + contact.get_shown_name() + ','
+ jids = jids[:-1] + '.'
+ sectext = _('You will no longer be able to send and receive messages to contacts from these transports:%s') % jids
+ self.dialog = dialogs.ConfirmationDialog(pritext, sectext,
+ on_response_ok = (remove, list_))
def on_rename(self, widget, iter, path):
# this function is called either by F2 or by Rename menuitem
@@ -1201,7 +1247,7 @@ class RosterWindow:
# focus-in callback checks on this var and if is NOT None
# it redraws the selected contact resulting in stopping our rename
# procedure. So set this to None to stop that
- self._last_selected_contact = None
+ self._last_selected_contact = []
model = self.tree.get_model()
row_type = model[iter][C_TYPE]
@@ -1254,8 +1300,8 @@ class RosterWindow:
keys_str += jid + ' ' + keys[jid] + ' '
gajim.config.set_per('accounts', account, 'attached_gpg_keys', keys_str)
- def on_edit_groups(self, widget, contact, account):
- dlg = dialogs.EditGroupsDialog(contact, account)
+ def on_edit_groups(self, widget, list_):
+ dlg = dialogs.EditGroupsDialog(list_)
dlg.run()
def on_history(self, widget, contact, account):
@@ -1301,6 +1347,7 @@ class RosterWindow:
start_chat_menuitem = xml.get_widget('start_chat_menuitem')
send_single_message_menuitem = xml.get_widget(
'send_single_message_menuitem')
+ invite_menuitem = xml.get_widget('invite_menuitem')
rename_menuitem = xml.get_widget('rename_menuitem')
edit_groups_menuitem = xml.get_widget('edit_groups_menuitem')
# separator has with send file, assign_openpgp_key_menuitem, etc..
@@ -1384,9 +1431,39 @@ class RosterWindow:
send_single_message_menuitem.connect('activate',
self.on_send_single_message_menuitem_activate, account, contact)
+
+ submenu = gtk.Menu()
+ invite_menuitem.set_submenu(submenu)
+ menuitem = gtk.ImageMenuItem(_('_New room'))
+ icon = gtk.image_new_from_stock(gtk.STOCK_NEW, gtk.ICON_SIZE_MENU)
+ menuitem.set_image(icon)
+ menuitem.connect('activate', self.on_invite_to_new_room, [(contact,
+ account)])
+ contact_transport = gajim.get_transport_name_from_jid(contact.jid)
+ t = contact_transport or 'jabber' # transform None in 'jabber'
+ if not gajim.connections[account].muc_jid.has_key(t):
+ menuitem.set_sensitive(False)
+ submenu.append(menuitem)
+ rooms = [] # a list of (room_jid, account) tuple
+ for gc_control in gajim.interface.msg_win_mgr.get_controls(
+ message_control.TYPE_GC):
+ acct = gc_control.account
+ room_jid = gc_control.room_jid
+ if gajim.gc_connected[acct].has_key(room_jid) and \
+ gajim.gc_connected[acct][room_jid] and \
+ contact_transport == gajim.get_transport_name_from_jid(room_jid):
+ rooms.append((room_jid, acct))
+ if len(rooms):
+ item = gtk.SeparatorMenuItem() # separator
+ submenu.append(item)
+ for (room_jid, acct) in rooms:
+ menuitem = gtk.MenuItem(room_jid.split('@')[0])
+ menuitem.connect('activate', self.on_invite_to_room,
+ [(contact, account)], room_jid, acct)
+ submenu.append(menuitem)
rename_menuitem.connect('activate', self.on_rename, iter, path)
remove_from_roster_menuitem.connect('activate', self.on_req_usub,
- contact, account)
+ [(contact, account)])
information_menuitem.connect('activate', self.on_info, contact,
account)
history_menuitem.connect('activate', self.on_history, contact,
@@ -1398,8 +1475,8 @@ class RosterWindow:
assign_openpgp_key_menuitem.set_no_show_all(False)
add_to_roster_menuitem.hide()
add_to_roster_menuitem.set_no_show_all(True)
- edit_groups_menuitem.connect('activate', self.on_edit_groups, contact,
- account)
+ edit_groups_menuitem.connect('activate', self.on_edit_groups, [(
+ contact,account)])
if gajim.config.get('usegpg'):
assign_openpgp_key_menuitem.connect('activate',
@@ -1453,8 +1530,6 @@ class RosterWindow:
remove_from_roster_menuitem, execute_command_menuitem]:
widget.set_sensitive(False)
- #FIXME: create menu for sub contacts
-
event_button = gtkgui_helpers.get_possible_button_event(event)
roster_contact_context_menu.attach_to_widget(self.tree, None)
@@ -1464,6 +1539,124 @@ class RosterWindow:
roster_contact_context_menu.popup(None, None, None, event_button,
event.time)
+ def on_invite_to_new_room(self, widget, list_):
+ account_list = []
+ jid_list = []
+ for (contact, account) in list_:
+ if contact.jid not in jid_list:
+ jid_list.append(contact.jid)
+ if account not in account_list:
+ account_list.append(account)
+ # transform None in 'jabber'
+ type_ = gajim.get_transport_name_from_jid(jid_list[0]) or 'jabber'
+ for account in account_list:
+ if gajim.connections[account].muc_jid[type_]:
+ # create the room on this muc server
+ if gajim.interface.instances[account].has_key('join_gc'):
+ gajim.interface.instances[account]['join_gc'].window.destroy()
+ try:
+ gajim.interface.instances[account]['join_gc'] = \
+ dialogs.JoinGroupchatWindow(account,
+ server = gajim.connections[account].muc_jid[type_],
+ automatic = {'invities': jid_list})
+ except RuntimeError:
+ continue
+ break
+
+ def on_invite_to_room(self, widget, list_, room_jid, account):
+ for (contact, acct) in list_:
+ gajim.connections[account].send_invite(room_jid, contact.jid)
+
+
+ def make_multiple_contact_menu(self, event, iters):
+ '''Make group's popup menu'''
+ model = self.tree.get_model()
+ list_ = [] # list of (jid, account) tuples
+ one_account_offline = False
+ connected_accounts = []
+ contacts_transport = -1
+ # -1 is at start, False when not from the same, None when jabber
+ for iter in iters:
+ jid = model[iter][C_JID].decode('utf-8')
+ account = model[iter][C_ACCOUNT].decode('utf-8')
+ if gajim.connections[account].connected < 2:
+ one_account_offline = True
+ elif not account in connected_accounts:
+ connected_accounts.append(account)
+ contact = gajim.contacts.get_contact_with_highest_priority(account,
+ jid)
+ transport = gajim.get_transport_name_from_jid(contact.jid)
+ if contacts_transport == -1:
+ contacts_transport = transport
+ if contacts_transport != transport:
+ contacts_transport = False
+ list_.append((contact, account))
+
+ menu = gtk.Menu()
+
+ remove_item = gtk.ImageMenuItem(_('_Remove from Roster'))
+ icon = gtk.image_new_from_stock(gtk.STOCK_REMOVE, gtk.ICON_SIZE_MENU)
+ remove_item.set_image(icon)
+ menu.append(remove_item)
+ remove_item.connect('activate', self.on_req_usub, list_)
+
+ invite_item = gtk.ImageMenuItem(_('In_vite to'))
+ icon = gtk.image_new_from_stock(gtk.STOCK_GO_BACK, gtk.ICON_SIZE_MENU)
+ invite_item.set_image(icon)
+ if contacts_transport == False:
+ # they are not all from the same transport
+ invite_item.set_sensitive(False)
+ else:
+
+ sub_menu = gtk.Menu()
+ menuitem = gtk.ImageMenuItem(_('_New room'))
+ icon = gtk.image_new_from_stock(gtk.STOCK_NEW, gtk.ICON_SIZE_MENU)
+ menuitem.set_image(icon)
+ menuitem.connect('activate', self.on_invite_to_new_room, list_)
+ muc_jid = {}
+ c_t = contacts_transport or 'jabber' # transform None in 'jabber'
+ for account in connected_accounts:
+ for t in gajim.connections[account].muc_jid:
+ muc_jid[t] = gajim.connections[account].muc_jid[t]
+ if not muc_jid.has_key(c_t):
+ menuitem.set_sensitive(False)
+ sub_menu.append(menuitem)
+ rooms = [] # a list of (room_jid, account) tuple
+ for gc_control in gajim.interface.msg_win_mgr.get_controls(
+ message_control.TYPE_GC):
+ account = gc_control.account
+ room_jid = gc_control.room_jid
+ if gajim.gc_connected[account].has_key(room_jid) and \
+ gajim.gc_connected[account][room_jid] and \
+ contacts_transport == gajim.get_transport_name_from_jid(room_jid):
+ rooms.append((room_jid, account))
+ if len(rooms):
+ item = gtk.SeparatorMenuItem() # separator
+ sub_menu.append(item)
+ for (room_jid, account) in rooms:
+ menuitem = gtk.MenuItem(room_jid.split('@')[0])
+ menuitem.connect('activate', self.on_invite_to_room, list_,
+ room_jid, account)
+ sub_menu.append(menuitem)
+
+ invite_item.set_submenu(sub_menu)
+ menu.append(invite_item)
+
+ edit_groups_item = gtk.MenuItem(_('Edit _Groups'))
+ menu.append(edit_groups_item)
+ edit_groups_item.connect('activate', self.on_edit_groups, list_)
+
+ # unsensitive if one account is not connected
+ if one_account_offline:
+ remove_item.set_sensitive(False)
+
+ event_button = gtkgui_helpers.get_possible_button_event(event)
+
+ menu.attach_to_widget(self.tree, None)
+ menu.connect('selection-done', gtkgui_helpers.destroy_widget)
+ menu.show_all()
+ menu.popup(None, None, None, event_button, event.time)
+
def make_group_menu(self, event, iter):
'''Make group's popup menu'''
model = self.tree.get_model()
@@ -1560,7 +1753,7 @@ class RosterWindow:
icon = gtk.image_new_from_stock(gtk.STOCK_REMOVE, gtk.ICON_SIZE_MENU)
item.set_image(icon)
menu.append(item)
- item.connect('activate', self.on_remove_agent, contact, account)
+ item.connect('activate', self.on_remove_agent, [(contact, account)])
if not is_connected:
item.set_sensitive(False)
@@ -1579,6 +1772,15 @@ class RosterWindow:
gajim.interface.instances[account]['account_modification'] = \
config.AccountModificationWindow(account)
+ def on_open_gmail_inbox(self, widget, account):
+ if gajim.config.get_per('accounts', account, 'savepass'):
+ url = ('http://www.google.com/accounts/ServiceLoginAuth?service=mail&Email=%s&Passwd=%s&continue=https://mail.google.com/mail') %\
+ (urllib.quote(gajim.config.get_per('accounts', account, 'name')),
+ urllib.quote(gajim.config.get_per('accounts', account, 'password')))
+ else:
+ url = ('http://mail.google.com/')
+ helpers.launch_browser_mailer('url', url)
+
def on_change_status_message_activate(self, widget, account):
show = gajim.SHOW_LIST[gajim.connections[account].connected]
dlg = dialogs.ChangeStatusMessageDialog(show)
@@ -1597,15 +1799,15 @@ class RosterWindow:
xml = gtkgui_helpers.get_glade('account_context_menu.glade')
account_context_menu = xml.get_widget('account_context_menu')
- childs = account_context_menu.get_children()
-
- status_menuitem = childs[0]
- join_group_chat_menuitem = childs[1]
- new_message_menuitem = childs[2]
- add_contact_menuitem = childs[3]
- service_discovery_menuitem = childs[4]
- execute_command_menuitem = childs[5]
- edit_account_menuitem = childs[6]
+
+ status_menuitem = xml.get_widget('status_menuitem')
+ join_group_chat_menuitem =xml.get_widget('join_group_chat_menuitem')
+ open_gmail_inbox_menuitem = xml.get_widget('open_gmail_inbox_menuitem')
+ new_message_menuitem = xml.get_widget('new_message_menuitem')
+ add_contact_menuitem = xml.get_widget('add_contact_menuitem')
+ service_discovery_menuitem = xml.get_widget('service_discovery_menuitem')
+ execute_command_menuitem = xml.get_widget('execute_command_menuitem')
+ edit_account_menuitem = xml.get_widget('edit_account_menuitem')
sub_menu = gtk.Menu()
status_menuitem.set_submenu(sub_menu)
@@ -1637,6 +1839,13 @@ class RosterWindow:
sub_menu.append(item)
item.connect('activate', self.change_status, account, 'offline')
+ if gajim.config.get_per('accounts', account, 'hostname') not in gajim.gmail_domains:
+ open_gmail_inbox_menuitem.set_no_show_all(True)
+ open_gmail_inbox_menuitem.hide()
+ else:
+ open_gmail_inbox_menuitem.connect('activate', self.on_open_gmail_inbox,
+ account)
+
edit_account_menuitem.connect('activate', self.on_edit_account, account)
add_contact_menuitem.connect('activate', self.on_add_new_contact, account)
service_discovery_menuitem.connect('activate',
@@ -1754,57 +1963,74 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
self.tree.get_selection().unselect_all()
elif event.keyval == gtk.keysyms.F2:
treeselection = self.tree.get_selection()
- model, iter = treeselection.get_selected()
- if not iter:
+ model, list_of_paths = treeselection.get_selected_rows()
+ if len(list_of_paths) != 1:
return
- type = model[iter][C_TYPE]
+ path = list_of_paths[0]
+ type = model[path][C_TYPE]
if type in ('contact', 'group', 'agent'):
- path = model.get_path(iter)
- self.on_rename(widget, iter, path)
+ if not model[path][C_EDITABLE]:
+ # we are NOT already renaming it
+ iter = model.get_iter(path)
+ self.on_rename(widget, iter, path)
elif event.keyval == gtk.keysyms.Delete:
treeselection = self.tree.get_selection()
- model, iter = treeselection.get_selected()
- if not iter:
+ model, list_of_paths = treeselection.get_selected_rows()
+ if not len(list_of_paths):
return
- jid = model[iter][C_JID].decode('utf-8')
- account = model[iter][C_ACCOUNT].decode('utf-8')
- type = model[iter][C_TYPE]
- if type in ('account', 'group'):
+ type = model[list_of_paths[0]][C_TYPE]
+ list_ = []
+ for path in list_of_paths:
+ if model[path][C_TYPE] != type:
+ return
+ jid = model[path][C_JID].decode('utf-8')
+ account = model[path][C_ACCOUNT].decode('utf-8')
+ contact = gajim.contacts.get_contact_with_highest_priority(account,
+ jid)
+ list_.append((contact, account))
+ if type in ('account', 'group', 'self_contact'):
return
- contact = gajim.contacts.get_contact_with_highest_priority(account,
- jid)
if type == 'contact':
- self.on_req_usub(widget, contact, account)
+ self.on_req_usub(widget, list_)
elif type == 'agent':
- self.on_remove_agent(widget, contact, account)
+ self.on_remove_agent(widget, list_)
- def show_appropriate_context_menu(self, event, iter):
+ def show_appropriate_context_menu(self, event, iters):
+ # iters must be all of the same type
model = self.tree.get_model()
- type = model[iter][C_TYPE]
- if type == 'group':
- self.make_group_menu(event, iter)
- elif type == 'agent':
- self.make_transport_menu(event, iter)
- elif type in ('contact', 'self_contact'):
- self.make_contact_menu(event, iter)
- elif type == 'account':
- self.make_account_menu(event, iter)
+ type = model[iters[0]][C_TYPE]
+ for iter in iters[1:]:
+ if model[iter][C_TYPE] != type:
+ return
+ if type == 'group' and len(iters) == 1:
+ self.make_group_menu(event, iters[0])
+ elif type == 'agent' and len(iters) == 1:
+ self.make_transport_menu(event, iters[0])
+ elif type in ('contact', 'self_contact') and len(iters) == 1:
+ self.make_contact_menu(event, iters[0])
+ elif type == 'contact':
+ self.make_multiple_contact_menu(event, iters)
+ elif type == 'account' and len(iters) == 1:
+ self.make_account_menu(event, iters[0])
def show_treeview_menu(self, event):
try:
- store, iter = self.tree.get_selection().get_selected()
+ model, list_of_paths = self.tree.get_selection().get_selected_rows()
except TypeError:
self.tree.get_selection().unselect_all()
return
- if not iter:
+ if not len(list_of_paths):
# no row is selected
return
- model = self.tree.get_model()
- path = model.get_path(iter)
- self.tree.get_selection().select_path(path)
-
- self.show_appropriate_context_menu(event, iter)
+ if len(list_of_paths) > 1:
+ iters = []
+ for path in list_of_paths:
+ iters.append(model.get_iter(path))
+ else:
+ path = list_of_paths[0]
+ iters = [model.get_iter(path)]
+ self.show_appropriate_context_menu(event, iters)
return True
@@ -1819,21 +2045,30 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
return False
if event.button == 3: # Right click
- self.tree.get_selection().select_path(path)
- model = self.tree.get_model()
- iter = model.get_iter(path)
- self.show_appropriate_context_menu(event, iter)
- return True
+ try:
+ model, list_of_paths = self.tree.get_selection().get_selected_rows()
+ except TypeError:
+ list_of_paths = []
+ pass
+ if path not in list_of_paths:
+ self.tree.get_selection().unselect_all()
+ self.tree.get_selection().select_path(path)
+ return self.show_treeview_menu(event)
elif event.button == 2: # Middle click
- self.tree.get_selection().select_path(path)
- model = self.tree.get_model()
- iter = model.get_iter(path)
- type = model[iter][C_TYPE]
+ try:
+ model, list_of_paths = self.tree.get_selection().get_selected_rows()
+ except TypeError:
+ list_of_paths = []
+ pass
+ if list_of_paths != [path]:
+ self.tree.get_selection().unselect_all()
+ self.tree.get_selection().select_path(path)
+ type = model[path][C_TYPE]
if type in ('agent', 'contact', 'self_contact'):
self.on_roster_treeview_row_activated(widget, path)
elif type == 'account':
- account = model[iter][C_ACCOUNT].decode('utf-8')
+ account = model[path][C_ACCOUNT].decode('utf-8')
if account != 'all':
show = gajim.connections[account].connected
if show > 1: # We are connected
@@ -1856,63 +2091,90 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
elif event.button == 1: # Left click
model = self.tree.get_model()
- iter = model.get_iter(path)
- type = model[iter][C_TYPE]
- if type in ('group', 'contact'):
- if x < 27: # first cell in 1st column (the arrow SINGLE clicked)
+ type = model[path][C_TYPE]
+ if type == 'group' and x < 27:
+ # first cell in 1st column (the arrow SINGLE clicked)
+ if (self.tree.row_expanded(path)):
+ self.tree.collapse_row(path)
+ else:
+ self.tree.expand_row(path, False)
+
+ elif type == 'contact' and x < 27:
+ account = model[path][C_ACCOUNT].decode('utf-8')
+ jid = model[path][C_JID].decode('utf-8')
+ # first cell in 1st column (the arrow SINGLE clicked)
+ iters = self.get_contact_iter(jid, account)
+ for iter in iters:
+ path = model.get_path(iter)
if (self.tree.row_expanded(path)):
self.tree.collapse_row(path)
else:
self.tree.expand_row(path, False)
- def on_req_usub(self, widget, contact, account):
- '''Remove a contact'''
- def on_ok(widget, contact, account):
+ def on_req_usub(self, widget, list_):
+ '''Remove a contact. list_ is a list of (contact, account) tuples'''
+ def on_ok(widget, list_):
self.dialog.destroy()
remove_auth = True
- if contact.sub != 'to' and self.dialog.is_checked():
- remove_auth = False
- gajim.connections[account].unsubscribe(contact.jid, remove_auth)
- for c in gajim.contacts.get_contact(account, contact.jid):
- self.remove_contact(c, account)
- gajim.contacts.remove_jid(account, c.jid)
- need_readd = False
- if not remove_auth and contact.sub == 'both':
- contact.name = ''
- contact.groups = []
- contact.sub = 'from'
- gajim.contacts.add_contact(account, contact)
- self.add_contact_to_roster(contact.jid, account)
- elif gajim.awaiting_events[account].has_key(contact.jid):
- need_readd = True
- elif gajim.interface.msg_win_mgr.has_window(contact.jid, account):
- if _('Not in Roster') in contact.groups:
- # Close chat window
- msg_win = gajim.interface.msg_win_mgr.get_window(contact.jid,
- account)
- ctrl = gajim.interface.msg_win_mgr.get_control(contact.jid,
- account)
- msg_win.remove_tab(ctrl)
- else:
+ if len(list_) == 1:
+ contact = list_[0][0]
+ if contact.sub != 'to' and self.dialog.is_checked():
+ remove_auth = False
+ for (contact, account) in list_:
+ gajim.connections[account].unsubscribe(contact.jid, remove_auth)
+ for c in gajim.contacts.get_contact(account, contact.jid):
+ self.remove_contact(c, account)
+ gajim.contacts.remove_jid(account, c.jid)
+ need_readd = False
+ if not remove_auth and contact.sub == 'both':
+ contact.name = ''
+ contact.groups = []
+ contact.sub = 'from'
+ gajim.contacts.add_contact(account, contact)
+ self.add_contact_to_roster(contact.jid, account)
+ elif len(gajim.events.get_events(account, contact.jid)):
need_readd = True
- if need_readd:
- c = gajim.contacts.create_contact(jid = contact.jid,
- name = '', groups = [_('Not in Roster')],
- show = 'not in roster', status = '', ask = 'none',
- keyID = contact.keyID)
- gajim.contacts.add_contact(account, c)
- self.add_contact_to_roster(contact.jid, account)
- pritext = _('Contact "%s" will be removed from your roster') % \
- contact.get_shown_name()
- if contact.sub == 'to':
- self.dialog = dialogs.ConfirmationDialog(pritext,
- _('By removing this contact you also remove authorization resulting in him or her always seeing you as offline.'),
- on_response_ok = (on_ok, contact, account))
+ elif gajim.interface.msg_win_mgr.has_window(contact.jid, account):
+ if _('Not in Roster') in contact.groups:
+ # Close chat window
+ msg_win = gajim.interface.msg_win_mgr.get_window(contact.jid,
+ account)
+ ctrl = gajim.interface.msg_win_mgr.get_control(contact.jid,
+ account)
+ msg_win.remove_tab(ctrl)
+ else:
+ need_readd = True
+ if need_readd:
+ c = gajim.contacts.create_contact(jid = contact.jid,
+ name = '', groups = [_('Not in Roster')],
+ show = 'not in roster', status = '', ask = 'none',
+ keyID = contact.keyID)
+ gajim.contacts.add_contact(account, c)
+ self.add_contact_to_roster(contact.jid, account)
+ if len(list_) == 1:
+ contact = list_[0][0]
+ account = list_[0][1]
+ pritext = _('Contact "%s" will be removed from your roster') % \
+ contact.get_shown_name()
+ if contact.sub == 'to':
+ self.dialog = dialogs.ConfirmationDialog(pritext,
+ _('By removing this contact you also remove authorization resulting in him or her always seeing you as offline.'),
+ on_response_ok = (on_ok, list_))
+ else:
+ self.dialog = dialogs.ConfirmationDialogCheck(pritext,
+ _('By removing this contact you also by default remove authorization resulting in him or her always seeing you as offline.'),
+ _('I want this contact to know my status after removal'),
+ on_response_ok = (on_ok, list_))
else:
- self.dialog = dialogs.ConfirmationDialogCheck(pritext,
- _('By removing this contact you also by default remove authorization resulting in him or her always seeing you as offline.'),
- _('I want this contact to know my status after removal'),
- on_response_ok = (on_ok, contact, account))
+ # several contact to remove at the same time
+ pritext = _('Contacts will be removed from your roster')
+ jids = ''
+ for (contact, account) in list_:
+ jids += '\n ' + contact.get_shown_name() + ','
+ sectext = _('By removing these contacts:%s\nyou also remove authorization resulting in them always seeing you as offline.') % jids
+ self.dialog = dialogs.ConfirmationDialog(pritext, sectext,
+ on_response_ok = (on_ok, list_))
+
def forget_gpg_passphrase(self, keyid):
if self.gpg_passphrase.has_key(keyid):
@@ -2017,6 +2279,9 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
gajim.connections[account].change_status(status, txt, auto)
def get_status_message(self, show):
+ if show in gajim.config.get_per('defaultstatusmsg'):
+ if gajim.config.get_per('defaultstatusmsg', show, 'enabled'):
+ return gajim.config.get_per('defaultstatusmsg', show, 'message')
if (show == 'online' and not gajim.config.get('ask_online_status')) or \
(show == 'offline' and not gajim.config.get('ask_offline_status')) or \
show == 'invisible':
@@ -2187,7 +2452,7 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
mw.new_tab(chat_control)
- if gajim.awaiting_events[account].has_key(fjid):
+ if len(gajim.events.get_events(account, fjid)):
# We call this here to avoid race conditions with widget validation
chat_control.read_queue()
@@ -2231,7 +2496,7 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
def on_message(self, jid, msg, tim, account, encrypted = False,
msg_type = '', subject = None, resource = '', msg_id = None,
- user_nick = ''):
+ user_nick = '', advanced_notif_num = None):
'''when we receive a message'''
contact = None
# if chat window will be for specific resource
@@ -2276,18 +2541,16 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
if not ctrl:
# if not, if message comes from highest prio, get control or open one
# without resource
- if highest_contact and contact.resource == highest_contact.resource:
+ if highest_contact and contact.resource == highest_contact.resource \
+ and not jid == gajim.get_jid_from_account(account):
ctrl = gajim.interface.msg_win_mgr.get_control(jid, account)
fjid = jid
resource_for_chat = None
# Do we have a queue?
- qs = gajim.awaiting_events[account]
- no_queue = True
- if qs.has_key(fjid):
- no_queue = False
-
- popup = helpers.allow_popup_window(account)
+ no_queue = len(gajim.events.get_events(account, fjid)) == 0
+
+ popup = helpers.allow_popup_window(account, advanced_notif_num)
if msg_type == 'normal' and popup: # it's single message to be autopopuped
dialogs.SingleMessageWindow(account, contact.jid,
@@ -2307,14 +2570,17 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
return
# We save it in a queue
- if no_queue:
- qs[fjid] = []
- kind = 'chat'
+ type_ = 'chat'
if msg_type == 'normal':
- kind = 'normal'
- qs[fjid].append((kind, (msg, subject, msg_type, tim, encrypted,
- resource, msg_id)))
- self.nb_unread += 1
+ type_ = 'normal'
+ show_in_roster = notify.get_show_in_roster('message_received', account,
+ contact)
+ show_in_systray = notify.get_show_in_systray('message_received', account,
+ contact)
+ event = gajim.events.create_event(type_, (msg, subject, msg_type, tim,
+ encrypted, resource, msg_id), show_in_roster = show_in_roster,
+ show_in_systray = show_in_systray)
+ gajim.events.add_event(account, fjid, event)
if popup:
if not ctrl:
self.new_chat(contact, account, resource = resource_for_chat)
@@ -2344,8 +2610,6 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
self.tree.expand_row(path[0:2], False)
self.tree.scroll_to_cell(path)
self.tree.set_cursor(path)
- if gajim.interface.systray_enabled:
- gajim.interface.systray.add_jid(fjid, account, kind)
def on_preferences_menuitem_activate(self, widget):
if gajim.interface.instances.has_key('preferences'):
@@ -2406,13 +2670,19 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
def on_profile_avatar_menuitem_activate(self, widget, account):
gajim.interface.edit_own_details(account)
- def close_all(self, dic):
+ def close_all_from_dict(self, dic):
'''close all the windows in the given dictionary'''
for w in dic.values():
if type(w) == type({}):
- self.close_all(w)
+ self.close_all_from_dict(w)
else:
w.window.destroy()
+
+ def close_all(self, account):
+ '''close all the windows from an account'''
+ self.close_all_from_dict(gajim.interface.instances[account])
+ for ctrl in gajim.interface.msg_win_mgr.get_controls(acct = account):
+ ctrl.parent_win.remove_tab(ctrl)
def on_roster_window_delete_event(self, widget, event):
'''When we want to close the window'''
@@ -2449,25 +2719,25 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
# if a contact row is selected, update colors (eg. for status msg)
# because gtk engines may differ in bg when window is selected
# or not
- if self._last_selected_contact is not None:
- jid, account = self._last_selected_contact
- self.draw_contact(jid, account, selected = True,
+ if len(self._last_selected_contact):
+ for (jid, account) in self._last_selected_contact:
+ self.draw_contact(jid, account, selected = True,
focus = True)
def on_roster_window_focus_out_event(self, widget, event):
# if a contact row is selected, update colors (eg. for status msg)
# because gtk engines may differ in bg when window is selected
# or not
- if self._last_selected_contact is not None:
- jid, account = self._last_selected_contact
- self.draw_contact(jid, account, selected = True,
+ if len(self._last_selected_contact):
+ for (jid, account) in self._last_selected_contact:
+ self.draw_contact(jid, account, selected = True,
focus = False)
def on_roster_window_key_press_event(self, widget, event):
if event.keyval == gtk.keysyms.Escape:
- treeselection = self.tree.get_selection()
- model, iter = treeselection.get_selected()
- if not iter and gajim.interface.systray_enabled and not gajim.config.get('quit_on_roster_x_button'):
+ model, list_of_paths = self.tree.get_selection().get_selected_rows()
+ if not len(list_of_paths) and gajim.interface.systray_enabled and \
+ not gajim.config.get('quit_on_roster_x_button'):
self.tooltip.hide_tooltip()
self.window.hide()
@@ -2491,7 +2761,7 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
gajim.interface.save_config()
for account in gajim.connections:
gajim.connections[account].quit(True)
- self.close_all(gajim.interface.instances)
+ self.close_all(account)
if gajim.interface.systray_enabled:
gajim.interface.hide_systray()
gtk.main_quit()
@@ -2510,14 +2780,14 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
# check if we have unread or recent mesages
unread = False
recent = False
- if self.nb_unread > 0:
+ if gajim.events.get_nb_events() > 0:
unread = True
for win in gajim.interface.msg_win_mgr.windows():
unrd = 0
for ctrl in win.controls():
if ctrl.type_id == message_control.TYPE_GC:
if gajim.config.get('notify_on_all_muc_messages'):
- unrd += ctrl.nb_unread
+ unrd += ctrl.get_nb_unread()
else:
if ctrl.attention_flag:
unrd += 1
@@ -2554,33 +2824,30 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
def open_event(self, account, jid, event):
'''If an event was handled, return True, else return False'''
- if not event:
- return False
- typ = event[0]
- data = event[1]
+ data = event.parameters
ft = gajim.interface.instances['file_transfers']
- if typ == 'normal':
+ if event.type_ == 'normal':
dialogs.SingleMessageWindow(account, jid,
action = 'receive', from_whom = jid, subject = data[1],
message = data[0], resource = data[5])
- gajim.interface.remove_first_event(account, jid, typ)
+ gajim.interface.remove_first_event(account, jid, event.type_)
return True
- elif typ == 'file-request':
+ elif event.type_ == 'file-request':
contact = gajim.contacts.get_contact_with_highest_priority(account,
jid)
- gajim.interface.remove_first_event(account, jid, typ)
+ gajim.interface.remove_first_event(account, jid, event.type_)
ft.show_file_request(account, contact, data)
return True
- elif typ in ('file-request-error', 'file-send-error'):
- gajim.interface.remove_first_event(account, jid, typ)
+ elif event.type_ in ('file-request-error', 'file-send-error'):
+ gajim.interface.remove_first_event(account, jid, event.type_)
ft.show_send_error(data)
return True
- elif typ in ('file-error', 'file-stopped'):
- gajim.interface.remove_first_event(account, jid, typ)
+ elif event.type_ in ('file-error', 'file-stopped'):
+ gajim.interface.remove_first_event(account, jid, event.type_)
ft.show_stopped(jid, data)
return True
- elif typ == 'file-completed':
- gajim.interface.remove_first_event(account, jid, typ)
+ elif event.type_ == 'file-completed':
+ gajim.interface.remove_first_event(account, jid, event.type_)
ft.show_completed(jid, data)
return True
return False
@@ -2623,12 +2890,12 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
else:
self.tree.expand_row(path, False)
else:
- first_ev = gajim.get_first_event(account, jid)
+ first_ev = gajim.events.get_first_event(account, jid)
if not first_ev:
# look in other resources
for c in gajim.contacts.get_contact(account, jid):
fjid = c.get_full_jid()
- first_ev = gajim.get_first_event(account, fjid)
+ first_ev = gajim.events.get_first_event(account, fjid)
if first_ev:
resource = c.resource
break
@@ -2636,7 +2903,7 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
child_iter = model.iter_children(iter)
while not first_ev and child_iter:
child_jid = model[child_iter][C_JID].decode('utf-8')
- first_ev = gajim.get_first_event(account, child_jid)
+ first_ev = gajim.events.get_first_event(account, child_jid)
if first_ev:
jid = child_jid
else:
@@ -2677,6 +2944,7 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
if groupIter and gajim.groups[account][g]['expand']:
pathG = model.get_path(groupIter)
self.tree.expand_row(pathG, False)
+ self.draw_account(account)
elif type == 'contact':
jid = model[iter][C_JID].decode('utf-8')
account = model[iter][C_ACCOUNT].decode('utf-8')
@@ -2703,6 +2971,7 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
account = accounts[0] # There is only one cause we don't use merge
if not account in self.collapsed_rows:
self.collapsed_rows.append(account)
+ self.draw_account(account)
elif type == 'contact':
jid = model[iter][C_JID].decode('utf-8')
account = model[iter][C_ACCOUNT].decode('utf-8')
@@ -2886,8 +3155,7 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
model[iter][1] = self.jabber_state_images['16'][model[iter][2]]
iter = model.iter_next(iter)
# Update the systray
- if gajim.interface.systray_enabled:
- gajim.interface.systray.set_img()
+ gajim.interface.systray.set_img()
for win in gajim.interface.msg_win_mgr.windows():
for ctrl in win.controls():
@@ -3082,6 +3350,10 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
return 0
account1 = account1.decode('utf-8')
account2 = account2.decode('utf-8')
+ if type1 == 'account':
+ if account1 < account2:
+ return -1
+ return 1
jid1 = model[iter1][C_JID].decode('utf-8')
jid2 = model[iter2][C_JID].decode('utf-8')
if type1 == 'contact':
@@ -3135,12 +3407,13 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
return 0
def drag_data_get_data(self, treeview, context, selection, target_id, etime):
- treeselection = treeview.get_selection()
- model, iter = treeselection.get_selected()
- path = model.get_path(iter)
+ model, list_of_paths = self.tree.get_selection().get_selected_rows()
+ if len(list_of_paths) != 1:
+ return
+ path = list_of_paths[0]
data = ''
if len(path) >= 3:
- data = model[iter][C_JID]
+ data = model[path][C_JID]
selection.set(selection.target, 8, data)
def on_drop_in_contact(self, widget, account_source, c_source, account_dest,
@@ -3154,6 +3427,8 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
c_source.groups = []
for g in c_dest.groups:
c_source.groups.append(g)
+ gajim.connections[account_source].update_contact(c_source.jid,
+ c_source.name, c_source.groups)
gajim.contacts.add_metacontact(account_dest, c_dest.jid, account_source,
c_source.jid)
if was_big_brother:
@@ -3219,6 +3494,10 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
jid_dest = model[iter_dest][C_JID].decode('utf-8')
account_dest = model[iter_dest][C_ACCOUNT].decode('utf-8')
+ if account_dest == 'all':
+ # drop on account row in merged mode: we can't know which account it is
+ return
+
# if account is not connected, do nothing
if gajim.connections[account_dest].connected < 2:
return
@@ -3247,8 +3526,8 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
if position == gtk.TREE_VIEW_DROP_BEFORE and len(path_dest) == 2:
# dropped before a group : we drop it in the previous group
path_dest = (path_dest[0], path_dest[1]-1)
- iter_source = treeview.get_selection().get_selected()[1]
- path_source = model.get_path(iter_source)
+ path_source = treeview.get_selection().get_selected_rows()[1][0]
+ iter_source = model.get_iter(path_source)
type_source = model[iter_source][C_TYPE]
account_source = model[iter_source][C_ACCOUNT].decode('utf-8')
if type_source != 'contact': # source is not a contact
@@ -3356,13 +3635,17 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
change_title_allowed = gajim.config.get('change_roster_title')
if change_title_allowed:
start = ''
- if self.nb_unread > 1:
- start = '[' + str(self.nb_unread) + '] '
- elif self.nb_unread == 1:
+ nb_unread = gajim.events.get_nb_events(['chat', 'normal',
+ 'file-request', 'file-error', 'file-completed',
+ 'file-request-error', 'file-send-error', 'file-stopped', 'gc_msg',
+ 'printed_chat', 'printed_gc_msg'])
+ if nb_unread > 1:
+ start = '[' + str(nb_unread) + '] '
+ elif nb_unread == 1:
start = '* '
self.window.set_title(start + 'Gajim')
- gtkgui_helpers.set_unset_urgency_hint(self.window, self.nb_unread)
+ gtkgui_helpers.set_unset_urgency_hint(self.window, nb_unread)
def iter_is_separator(self, model, iter):
if model[iter][0] == 'SEPARATOR':
@@ -3390,22 +3673,32 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
contact[C_ACCOUNT].decode('utf-8'))
def _on_treeview_selection_changed(self, selection):
- model, selected_iter = selection.get_selected()
- if self._last_selected_contact is not None:
- # update unselected row
- jid, account = self._last_selected_contact
- self.draw_contact(jid, account)
- if selected_iter is None:
- self._last_selected_contact = None
+ model, list_of_paths = selection.get_selected_rows()
+ if len(list_of_paths) == 1 and model[list_of_paths[0]][C_EDITABLE]:
+ # We are editing this row, do not modify self._last_selected_contact
+ # Cause that cancel editing
return
- contact_row = model[selected_iter]
- if contact_row[C_TYPE] != 'contact':
- self._last_selected_contact = None
+ if len(self._last_selected_contact):
+ # update unselected rows
+ for (jid, account) in self._last_selected_contact:
+ try:
+ self.draw_contact(jid, account)
+ except:
+ # This can fail when last selected row was on an account we just
+ # removed. So we don't care if that fail
+ pass
+ self._last_selected_contact = []
+ if len(list_of_paths) == 0:
return
- jid = contact_row[C_JID].decode('utf-8')
- account = contact_row[C_ACCOUNT].decode('utf-8')
- self._last_selected_contact = (jid, account)
- self.draw_contact(jid, account, selected = True)
+ for path in list_of_paths:
+ row = model[path]
+ if row[C_TYPE] != 'contact':
+ self._last_selected_contact = []
+ return
+ jid = row[C_JID].decode('utf-8')
+ account = row[C_ACCOUNT].decode('utf-8')
+ self._last_selected_contact.append((jid, account))
+ self.draw_contact(jid, account, selected = True)
def __init__(self):
self.xml = gtkgui_helpers.get_glade('roster_window.glade')
@@ -3415,16 +3708,17 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
if gajim.config.get('roster_window_skip_taskbar'):
self.window.set_property('skip-taskbar-hint', True)
self.tree = self.xml.get_widget('roster_treeview')
- self.tree.get_selection().connect('changed',
+ sel = self.tree.get_selection()
+ sel.set_mode(gtk.SELECTION_MULTIPLE)
+ sel.connect('changed',
self._on_treeview_selection_changed)
- self._last_selected_contact = None # None or holds jid, account tupple
+ self._last_selected_contact = [] # holds a list of (jid, account) tupples
self.jabber_state_images = {'16': {}, '32': {}, 'opened': {},
'closed': {}}
self.transports_state_images = {'16': {}, '32': {}, 'opened': {},
'closed': {}}
- self.nb_unread = 0 # number of unread messages
self.last_save_dir = None
self.editing_path = None # path of row with cell in edit mode
self.add_new_contact_handler_id = False
diff --git a/src/systray.py b/src/systray.py
index 5efc19378..926c077d1 100644
--- a/src/systray.py
+++ b/src/systray.py
@@ -2,7 +2,7 @@
##
## Copyright (C) 2003-2006 Yann Le Boulanger <asterix@lagaule.org>
## Copyright (C) 2003-2004 Vincent Hanquez <tab@snarc.org>
-## Copyright (C) 2005-2006 Nikos Kouremenos <nkour@jabber.org>
+## Copyright (C) 2005-2006 Nikos Kouremenos <kourem@gmail.com>
## Copyright (C) 2005 Dimitur Kirov <dkirov@gmail.com>
## Copyright (C) 2005-2006 Travis Shirk <travis@pobox.com>
## Copyright (C) 2005 Norman Rasmussen <norman@rasmussen.co.za>
@@ -45,9 +45,8 @@ class Systray:
'''Class for icon in the notification area
This class is both base class (for systraywin32.py) and normal class
for trayicon in GNU/Linux'''
-
+
def __init__(self):
- self.jids = [] # Contain things like [account, jid, type_of_msg]
self.single_message_handler_id = None
self.new_chat_handler_id = None
self.t = None
@@ -59,7 +58,9 @@ class Systray:
self.popup_menus = []
def set_img(self):
- if len(self.jids) > 0:
+ if not gajim.interface.systray_enabled:
+ return
+ if gajim.events.get_nb_systray_events():
state = 'message'
else:
state = self.status
@@ -69,26 +70,13 @@ class Systray:
elif image.get_storage_type() == gtk.IMAGE_PIXBUF:
self.img_tray.set_from_pixbuf(image.get_pixbuf())
- def add_jid(self, jid, account, typ):
- l = [account, jid, typ]
- # We can keep several single message 'cause we open them one by one
- if not l in self.jids or typ == 'normal':
- self.jids.append(l)
- self.set_img()
-
- def remove_jid(self, jid, account, typ):
- l = [account, jid, typ]
- if l in self.jids:
- self.jids.remove(l)
- self.set_img()
-
def change_status(self, global_status):
''' set tray image to 'global_status' '''
# change image and status, only if it is different
if global_status is not None and self.status != global_status:
self.status = global_status
self.set_img()
-
+
def start_chat(self, widget, account, jid):
contact = gajim.contacts.get_first_contact_from_jid(account, jid)
if gajim.interface.msg_win_mgr.has_window(jid, account):
@@ -99,13 +87,13 @@ class Systray:
gajim.interface.roster.new_chat(contact, account)
gajim.interface.msg_win_mgr.get_window(jid, account).set_active_tab(
jid, account)
-
+
def on_single_message_menuitem_activate(self, widget, account):
dialogs.SingleMessageWindow(account, action = 'send')
def on_new_chat(self, widget, account):
dialogs.NewChatDialog(account)
-
+
def make_menu(self, event = None):
'''create chat with and new message (sub) menus/menuitems
event is None when we're in Windows
@@ -118,7 +106,7 @@ class Systray:
single_message_menuitem = self.xml.get_widget('single_message_menuitem')
status_menuitem = self.xml.get_widget('status_menu')
join_gc_menuitem = self.xml.get_widget('join_gc_menuitem')
-
+
if self.single_message_handler_id:
single_message_menuitem.handler_disconnect(
self.single_message_handler_id)
@@ -130,7 +118,7 @@ class Systray:
sub_menu = gtk.Menu()
self.popup_menus.append(sub_menu)
status_menuitem.set_submenu(sub_menu)
-
+
gc_sub_menu = gtk.Menu() # gc is always a submenu
join_gc_menuitem.set_submenu(gc_sub_menu)
@@ -175,7 +163,7 @@ class Systray:
chat_with_menuitem.set_sensitive(iskey)
single_message_menuitem.set_sensitive(iskey)
join_gc_menuitem.set_sensitive(iskey)
-
+
if connected_accounts >= 2: # 2 or more connections? make submenus
account_menu_for_chat_with = gtk.Menu()
chat_with_menuitem.set_submenu(account_menu_for_chat_with)
@@ -184,7 +172,7 @@ class Systray:
account_menu_for_single_message = gtk.Menu()
single_message_menuitem.set_submenu(account_menu_for_single_message)
self.popup_menus.append(account_menu_for_single_message)
-
+
accounts_list = gajim.contacts.get_accounts()
accounts_list.sort()
for account in accounts_list:
@@ -208,7 +196,7 @@ class Systray:
gc_item.add(label)
gc_sub_menu.append(gc_item)
gajim.interface.roster.add_bookmarks_list(gc_sub_menu, account)
-
+
elif connected_accounts == 1: # one account
# one account connected, no need to show 'as jid'
for account in gajim.connections:
@@ -223,7 +211,7 @@ class Systray:
# join gc
gajim.interface.roster.add_bookmarks_list(gc_sub_menu, account)
break # No other connected account
-
+
if event is None:
# None means windows (we explicitly popup in systraywin32.py)
if self.added_hide_menuitem is False:
@@ -231,14 +219,18 @@ class Systray:
item = gtk.MenuItem(_('Hide this menu'))
self.systray_context_menu.prepend(item)
self.added_hide_menuitem = True
-
+
else: # GNU and Unices
- self.systray_context_menu.popup(None, None, None, event.button, event.time)
+ self.systray_context_menu.popup(None, None, None, event.button,
+ event.time)
self.systray_context_menu.show_all()
def on_show_all_events_menuitem_activate(self, widget):
- for i in range(len(self.jids)):
- self.handle_first_event()
+ events = gajim.events.get_systray_events()
+ for account in events:
+ for jid in events[account]:
+ for event in events[account][jid]:
+ gajim.interface.handle_event(account, jid, event.type_)
def on_show_roster_menuitem_activate(self, widget):
win = gajim.interface.roster.window
@@ -255,11 +247,11 @@ class Systray:
def on_left_click(self):
win = gajim.interface.roster.window
- if len(self.jids) == 0:
+ if len(gajim.events.get_systray_events()) == 0:
# no pending events, so toggle visible/hidden for roster window
if win.get_property('visible'): # visible in ANY virtual desktop?
win.hide() # we hide it from VD that was visible in
-
+
# but we could be in another VD right now. eg vd2
# and we want not only to hide it in vd1 but also show it in vd2
gtkgui_helpers.possibly_move_window_in_current_desktop(win)
@@ -269,10 +261,8 @@ class Systray:
self.handle_first_event()
def handle_first_event(self):
- account = self.jids[0][0]
- jid = self.jids[0][1]
- typ = self.jids[0][2]
- gajim.interface.handle_event(account, jid, typ)
+ account, jid, event = gajim.events.get_first_systray_event()
+ gajim.interface.handle_event(account, jid, event.type_)
def on_middle_click(self):
'''middle click raises window to have complete focus (fe. get kbd events)
@@ -285,13 +275,13 @@ class Systray:
def on_clicked(self, widget, event):
self.on_tray_leave_notify_event(widget, None)
- if event.button == 1: # Left click
+ if event.type == gtk.gdk.BUTTON_PRESS and event.button == 1: # Left click
self.on_left_click()
elif event.button == 2: # middle click
self.on_middle_click()
elif event.button == 3: # right click
self.make_menu(event)
-
+
def on_show_menuitem_activate(self, widget, show):
# we all add some fake (we cannot select those nor have them as show)
# but this helps to align with roster's status_combobox index positions
@@ -320,7 +310,7 @@ class Systray:
if self.tooltip.id == position:
size = widget.window.get_size()
self.tooltip.show_tooltip('', size[1], position[1])
-
+
def on_tray_motion_notify_event(self, widget, event):
wireq=widget.size_request()
position = widget.window.get_origin()
@@ -332,16 +322,23 @@ class Systray:
self.tooltip.id = position
self.tooltip.timeout = gobject.timeout_add(500,
self.show_tooltip, widget)
-
+
def on_tray_leave_notify_event(self, widget, event):
position = widget.window.get_origin()
if self.tooltip.timeout > 0 and \
self.tooltip.id == position:
self.tooltip.hide_tooltip()
-
+
+ def on_tray_destroyed(self, widget):
+ '''re-add trayicon when systray is destroyed'''
+ self.t = None
+ if gajim.interface.systray_enabled:
+ self.show_icon()
+
def show_icon(self):
if not self.t:
self.t = trayicon.TrayIcon('Gajim')
+ self.t.connect('destroy', self.on_tray_destroyed)
eb = gtk.EventBox()
# avoid draw seperate bg color in some gtk themes
eb.set_visible_window(False)
@@ -356,7 +353,7 @@ class Systray:
self.t.add(eb)
self.set_img()
self.t.show_all()
-
+
def hide_icon(self):
if self.t:
self.t.destroy()
diff --git a/src/systraywin32.py b/src/systraywin32.py
index 54b8e0c1e..c758247e0 100644
--- a/src/systraywin32.py
+++ b/src/systraywin32.py
@@ -245,49 +245,10 @@ class SystrayWin32(systray.Systray):
elif lparam == win32con.WM_LBUTTONUP: # Left click
self.on_left_click()
- def add_jid(self, jid, account, typ):
- systray.Systray.add_jid(self, jid, account, typ)
-
- nb = gajim.interface.roster.nb_unread
- for acct in gajim.connections:
- # in chat / groupchat windows
- for kind in ('chats', 'gc'):
- jids = gajim.interface.instances[acct][kind]
- for jid in jids:
- if jid != 'tabbed':
- nb += jids[jid].nb_unread[jid]
-
- text = i18n.ngettext(
- 'Gajim - %d unread message',
- 'Gajim - %d unread messages',
- nb, nb, nb)
-
- self.systray_winapi.notify_icon.set_tooltip(text)
-
- def remove_jid(self, jid, account, typ):
- systray.Systray.remove_jid(self, jid, account, typ)
-
- nb = gajim.interface.roster.nb_unread
- for acct in gajim.connections:
- # in chat / groupchat windows
- for kind in ('chats', 'gc'):
- for jid in gajim.interface.instances[acct][kind]:
- if jid != 'tabbed':
- nb += gajim.interface.instances[acct][kind][jid].nb_unread[jid]
-
- if nb > 0:
- text = i18n.ngettext(
- 'Gajim - %d unread message',
- 'Gajim - %d unread messages',
- nb, nb, nb)
- else:
- text = 'Gajim'
- self.systray_winapi.notify_icon.set_tooltip(text)
-
def set_img(self):
self.tray_ico_imgs = self.load_icos() #FIXME: do not do this here
# see gajim.interface.roster.reload_jabber_state_images() to merge
-
+
if len(self.jids) > 0:
state = 'message'
else:
@@ -295,12 +256,23 @@ class SystrayWin32(systray.Systray):
hicon = self.tray_ico_imgs[state]
if hicon is None:
return
-
+
self.systray_winapi.remove_notify_icon()
self.systray_winapi.add_notify_icon(self.systray_context_menu, hicon,
'Gajim')
self.systray_winapi.notify_icon.menu = self.systray_context_menu
+ nb = gajim.events.get_nb_systray_events()
+
+ if nb > 0:
+ text = i18n.ngettext(
+ 'Gajim - %d unread message',
+ 'Gajim - %d unread messages',
+ nb, nb, nb)
+ else:
+ text = 'Gajim'
+ self.systray_winapi.notify_icon.set_tooltip(text)
+
def load_icos(self):
'''load .ico files and return them to a dic of SHOW --> img_obj'''
iconset = str(gajim.config.get('iconset'))
diff --git a/src/tooltips.py b/src/tooltips.py
index 6b95561f3..53915df8a 100644
--- a/src/tooltips.py
+++ b/src/tooltips.py
@@ -282,34 +282,14 @@ class NotificationAreaTooltip(BaseTooltip, StatusTable):
self.table.set_property('column-spacing', 1)
text, single_line = '', ''
- unread_chat = gajim.interface.roster.nb_unread
- unread_single_chat = 0
- unread_gc = 0
- unread_pm = 0
+ unread_chat = gajim.events.get_nb_events(types = ['printed_chat', 'chat'])
+ unread_single_chat = gajim.events.get_nb_events(types = ['normal'])
+ unread_gc = gajim.events.get_nb_events(types = ['printed_gc_msg',
+ 'gc_msg'])
+ unread_pm = gajim.events.get_nb_events(types = ['printed_pm', 'pm'])
accounts = self.get_accounts_info()
- for acct in gajim.connections:
- # Count unread chat messages
- chat_t = message_control.TYPE_CHAT
- for ctrl in gajim.interface.msg_win_mgr.get_controls(chat_t, acct):
- unread_chat += ctrl.nb_unread
-
- # Count unread PM messages for which we have a control
- chat_t = message_control.TYPE_PM
- for ctrl in gajim.interface.msg_win_mgr.get_controls(chat_t, acct):
- unread_pm += ctrl.nb_unread
-
- # we count unread gc/pm messages
- chat_t = message_control.TYPE_GC
- for ctrl in gajim.interface.msg_win_mgr.get_controls(chat_t, acct):
- # These are PMs for which the PrivateChatControl has not yet been
- # created
- pm_msgs = ctrl.get_specific_unread()
- unread_gc += ctrl.nb_unread
- unread_gc -= pm_msgs
- unread_pm += pm_msgs
-
if unread_chat or unread_single_chat or unread_gc or unread_pm:
text = 'Gajim '
awaiting_events = unread_chat + unread_single_chat + unread_gc + unread_pm
@@ -508,8 +488,9 @@ class RosterTooltip(NotificationAreaTooltip):
properties = []
jid_markup = '<span weight="bold">' + prim_contact.jid + '</span>'
properties.append((jid_markup, None))
+
properties.append((_('Name: '), gtkgui_helpers.escape_for_pango_markup(
- prim_contact.get_shown_name())))
+ prim_contact.get_shown_name())))
if prim_contact.sub:
properties.append(( _('Subscription: '),
gtkgui_helpers.escape_for_pango_markup(helpers.get_uf_sub(prim_contact.sub))))
@@ -532,10 +513,11 @@ class RosterTooltip(NotificationAreaTooltip):
contacts_dict[contact.priority].append(contact)
else:
contacts_dict[contact.priority] = [contact]
-
- if num_resources== 1 and contact.resource:
- properties.append((_('Resource: '), gtkgui_helpers.escape_for_pango_markup(
- contact.resource) + ' (' + unicode(contact.priority) + ')'))
+
+ if num_resources == 1 and contact.resource:
+ properties.append((_('Resource: '),
+ gtkgui_helpers.escape_for_pango_markup(contact.resource) + ' (' + \
+ unicode(contact.priority) + ')'))
if num_resources > 1:
properties.append((_('Status: '), ' '))
contact_keys = contacts_dict.keys()
diff --git a/src/vcard.py b/src/vcard.py
index ee5070e66..009605b38 100644
--- a/src/vcard.py
+++ b/src/vcard.py
@@ -57,51 +57,25 @@ def get_avatar_pixbuf_encoded_mime(photo):
class VcardWindow:
'''Class for contact's information window'''
- def __init__(self, contact, account, vcard = False, is_fake = False):
+ def __init__(self, contact, account, is_fake = False):
# the contact variable is the jid if vcard is true
self.xml = gtkgui_helpers.get_glade('vcard_information_window.glade')
self.window = self.xml.get_widget('vcard_information_window')
- self.publish_button = self.xml.get_widget('publish_button')
- self.retrieve_button = self.xml.get_widget('retrieve_button')
- self.nickname_entry = self.xml.get_widget('nickname_entry')
- if not vcard: # Maybe gc_vcard ?
- self.nickname_entry.set_property('editable', False)
-
- self.publish_button.set_no_show_all(True)
- self.retrieve_button.set_no_show_all(True)
- self.xml.get_widget('photo_vbuttonbox').set_no_show_all(True)
-
- self.contact = contact # don't use it if vcard is true
+ self.contact = contact
self.account = account
- self.vcard = vcard
self.is_fake = is_fake
+
self.avatar_mime_type = None
self.avatar_encoded = None
- self.avatar_save_as_id = None
- if vcard: # we view/edit our own vcard
- self.jid = contact
- # remove Jabber tab & show publish/retrieve/close/set_avatar buttons
- # and make entries and textview editable
- self.change_to_vcard()
- else: # we see someone else's vcard
- self.publish_button.hide()
- self.retrieve_button.hide()
- self.jid = contact.jid
- self.fill_jabber_page()
-
- # if we are editing our own vcard publish button should publish
- # vcard data we have typed including nickname, it's why we connect only
- # here (when we see someone else's vcard)
- self.nickname_entry.connect('focus-out-event',
- self.on_nickname_entry_focus_out_event)
+ self.fill_jabber_page()
self.xml.signal_autoconnect(self)
self.window.show_all()
def on_vcard_information_window_destroy(self, widget):
- del gajim.interface.instances[self.account]['infos'][self.jid]
+ del gajim.interface.instances[self.account]['infos'][self.contact.jid]
def on_vcard_information_window_key_press_event(self, widget, event):
if event.keyval == gtk.keysyms.Escape:
@@ -122,108 +96,16 @@ class VcardWindow:
if oldlog != log:
gajim.config.set_per('accounts', self.account, 'no_log_for',
' '.join(no_log_for))
-
- def on_nickname_entry_focus_out_event(self, widget, event):
- '''Save contact information and update
- the roster item on the Jabber server'''
- new_name = self.nickname_entry.get_text().decode('utf-8')
- # update contact.name with new nickname if that is not ''
- if new_name != self.contact.name and new_name != '':
- self.contact.name = new_name
- # update roster model
- model = gajim.interface.roster.tree.get_model()
- for iter_ in gajim.interface.roster.get_contact_iter(self.contact.jid,
- self.account):
- model[iter_][1] = new_name
- gajim.connections[self.account].update_contact(self.contact.jid,
- self.contact.name, self.contact.groups)
- # update opened chat window
- ctrl = gajim.interface.msg_win_mgr.get_control(self.contact.jid,
- self.account)
- if ctrl:
- ctrl.update_ui()
- win = gajim.interface.msg_win_mgr.get_window(self.contact.jid,
- self.account)
- win.redraw_tab(ctrl)
- win.show_title()
-
- def on_close_button_clicked(self, widget):
- self.window.destroy()
-
- def on_clear_button_clicked(self, widget):
- # empty the image
- self.xml.get_widget('PHOTO_image').set_from_pixbuf(None)
- self.avatar_encoded = None
- if self.avatar_save_as_id:
- self.xml.get_widget('PHOTO_eventbox').disconnect(
- self.avatar_save_as_id)
- self.avatar_save_as_id = None
-
- def on_set_avatar_button_clicked(self, widget):
- f = None
- def on_ok(widget, path_to_file):
- filesize = os.path.getsize(path_to_file) # in bytes
- #FIXME: use messages for invalid file for 0.11
- invalid_file = False
- msg = ''
- if os.path.isfile(path_to_file):
- stat = os.stat(path_to_file)
- if stat[6] == 0:
- invalid_file = True
- else:
- invalid_file = True
- if not invalid_file and filesize > 16384: # 16 kb
- try:
- pixbuf = gtk.gdk.pixbuf_new_from_file(path_to_file)
- # get the image at 'notification size'
- # and use that user did not specify in ACE crazy size
- scaled_pixbuf = gtkgui_helpers.get_scaled_pixbuf(pixbuf,
- 'tooltip')
- except gobject.GError, msg: # unknown format
- # msg should be string, not object instance
- msg = str(msg)
- invalid_file = True
- if invalid_file:
- if True: # keep identation
- dialogs.ErrorDialog(_('Could not load image'), msg)
- return
- if filesize > 16384:
- if scaled_pixbuf:
- path_to_file = os.path.join(gajim.TMP,
- 'avatar_scaled.png')
- scaled_pixbuf.save(path_to_file, 'png')
- self.dialog.destroy()
-
- fd = open(path_to_file, 'rb')
- data = fd.read()
- pixbuf = gtkgui_helpers.get_pixbuf_from_data(data)
- # rescale it
- pixbuf = gtkgui_helpers.get_scaled_pixbuf(pixbuf, 'vcard')
- image = self.xml.get_widget('PHOTO_image')
- image.set_from_pixbuf(pixbuf)
- self.avatar_encoded = base64.encodestring(data)
- # returns None if unknown type
- self.avatar_mime_type = mimetypes.guess_type(path_to_file)[0]
-
- self.dialog = dialogs.ImageChooserDialog(on_response_ok = on_ok)
def on_PHOTO_eventbox_button_press_event(self, widget, event):
'''If right-clicked, show popup'''
if event.button == 3: # right click
- if self.vcard:
- # our own avatar
- account = None
- nick = gajim.config.get_per('accounts', self.account, 'name')
- else:
- account = self.account
- nick = self.contact.name
menu = gtk.Menu()
menuitem = gtk.ImageMenuItem(gtk.STOCK_SAVE_AS)
menuitem.connect('activate',
gtkgui_helpers.on_avatar_save_as_menuitem_activate,
- self.jid, account, nick + '.jpeg')
+ self.contact.jid, self.account, self.contact.name + '.jpeg')
menu.append(menuitem)
- menu.show_all()
menu.connect('selection-done', lambda w:w.destroy())
# show the menu
menu.show_all()
@@ -240,14 +122,13 @@ class VcardWindow:
if i == 'PHOTO':
pixbuf, self.avatar_encoded, self.avatar_mime_type = \
get_avatar_pixbuf_encoded_mime(vcard[i])
+ image = self.xml.get_widget('PHOTO_image')
if not pixbuf:
+ image.set_from_icon_name('stock_person',
+ gtk.ICON_SIZE_DIALOG)
continue
- image = self.xml.get_widget('PHOTO_image')
pixbuf = gtkgui_helpers.get_scaled_pixbuf(pixbuf, 'vcard')
image.set_from_pixbuf(pixbuf)
- eventbox = self.xml.get_widget('PHOTO_eventbox')
- self.avatar_save_as_id = eventbox.connect('button-press-event',
- self.on_PHOTO_eventbox_button_press_event)
continue
if i == 'ADR' or i == 'TEL' or i == 'EMAIL':
for entry in vcard[i]:
@@ -255,22 +136,22 @@ class VcardWindow:
if 'WORK' in entry:
add_on = '_WORK'
for j in entry.keys():
- self.set_value(i + add_on + '_' + j + '_entry', entry[j])
+ self.set_value(i + add_on + '_' + j + '_label', entry[j])
if isinstance(vcard[i], dict):
for j in vcard[i].keys():
- self.set_value(i + '_' + j + '_entry', vcard[i][j])
+ self.set_value(i + '_' + j + '_label', vcard[i][j])
else:
if i == 'DESC':
self.xml.get_widget('DESC_textview').get_buffer().set_text(
vcard[i], 0)
else:
- self.set_value(i + '_entry', vcard[i])
+ self.set_value(i + '_label', vcard[i])
def set_last_status_time(self):
self.fill_status_label()
def set_os_info(self, resource, client_info, os_info):
- if self.xml.get_widget('information_notebook').get_n_pages() < 5:
+ if self.xml.get_widget('information_notebook').get_n_pages() < 4:
return
i = 0
client = ''
@@ -295,7 +176,7 @@ class VcardWindow:
self.xml.get_widget('os_label').set_text(os)
def fill_status_label(self):
- if self.xml.get_widget('information_notebook').get_n_pages() < 5:
+ if self.xml.get_widget('information_notebook').get_n_pages() < 4:
return
contact_list = gajim.contacts.get_contact(self.account, self.contact.jid)
# stats holds show and status message
@@ -312,7 +193,7 @@ class VcardWindow:
stats += '\n' + _('since %s') % time.strftime('%c',
c.last_status_time).decode(locale.getpreferredencoding())
one = False
- elif not self.vcard: # Maybe gc_vcard ?
+ else: # Maybe gc_vcard ?
stats = helpers.get_uf_show(self.contact.show)
if self.contact.status:
stats += ': ' + self.contact.status
@@ -326,8 +207,10 @@ class VcardWindow:
def fill_jabber_page(self):
tooltips = gtk.Tooltips()
- self.xml.get_widget('nickname_label').set_text(
- self.contact.get_shown_name())
+ self.xml.get_widget('nickname_label').set_markup(
+ '<b><span size="x-large">' +
+ self.contact.get_shown_name() +
+ '</span></b>')
self.xml.get_widget('jid_label').set_text(self.contact.jid)
uf_sub = helpers.get_uf_sub(self.contact.sub)
self.xml.get_widget('subscription_label').set_text(uf_sub)
@@ -349,7 +232,6 @@ class VcardWindow:
if self.contact.ask == 'subscribe':
tooltips.set_tip(eb,
_("You are waiting contact's answer about your subscription request"))
- self.nickname_entry.set_text(self.contact.name)
log = True
if self.contact.jid in gajim.config.get_per('accounts', self.account,
'no_log_for').split(' '):
@@ -371,8 +253,8 @@ class VcardWindow:
# Request os info in contact is connected
if self.contact.show not in ('offline', 'error'):
- gajim.connections[self.account].request_os_info(self.contact.jid,
- self.contact.resource)
+ gobject.idle_add(gajim.connections[self.account].request_os_info,
+ self.contact.jid, self.contact.resource)
self.os_info = {0: {'resource': self.contact.resource, 'client': '',
'os': ''}}
i = 1
@@ -385,7 +267,8 @@ class VcardWindow:
uf_resources += '\n' + c.resource + \
_(' resource with priority ') + unicode(c.priority)
if c.show not in ('offline', 'error'):
- gajim.connections[self.account].request_os_info(c.jid,
+ gobject.idle_add(
+ gajim.connections[self.account].request_os_info, c.jid,
c.resource)
gajim.connections[self.account].request_last_status_time(c.jid,
c.resource)
@@ -400,121 +283,3 @@ class VcardWindow:
self.fill_status_label()
gajim.connections[self.account].request_vcard(self.contact.jid, self.is_fake)
-
- def add_to_vcard(self, vcard, entry, txt):
- '''Add an information to the vCard dictionary'''
- entries = entry.split('_')
- loc = vcard
- if len(entries) == 3: # We need to use lists
- if not loc.has_key(entries[0]):
- loc[entries[0]] = []
- found = False
- for e in loc[entries[0]]:
- if entries[1] in e:
- found = True
- break
- if found:
- e[entries[2]] = txt
- else:
- loc[entries[0]].append({entries[1]: '', entries[2]: txt})
- return vcard
- while len(entries) > 1:
- if not loc.has_key(entries[0]):
- loc[entries[0]] = {}
- loc = loc[entries[0]]
- del entries[0]
- loc[entries[0]] = txt
- return vcard
-
- def make_vcard(self):
- '''make the vCard dictionary'''
- entries = ['FN', 'NICKNAME', 'BDAY', 'EMAIL_HOME_USERID', 'URL',
- 'TEL_HOME_NUMBER', 'N_FAMILY', 'N_GIVEN', 'N_MIDDLE', 'N_PREFIX',
- 'N_SUFFIX', 'ADR_HOME_STREET', 'ADR_HOME_EXTADR', 'ADR_HOME_LOCALITY',
- 'ADR_HOME_REGION', 'ADR_HOME_PCODE', 'ADR_HOME_CTRY', 'ORG_ORGNAME',
- 'ORG_ORGUNIT', 'TITLE', 'ROLE', 'TEL_WORK_NUMBER', 'EMAIL_WORK_USERID',
- 'ADR_WORK_STREET', 'ADR_WORK_EXTADR', 'ADR_WORK_LOCALITY',
- 'ADR_WORK_REGION', 'ADR_WORK_PCODE', 'ADR_WORK_CTRY']
- vcard = {}
- for e in entries:
- txt = self.xml.get_widget(e + '_entry').get_text().decode('utf-8')
- if txt != '':
- vcard = self.add_to_vcard(vcard, e, txt)
-
- # DESC textview
- buff = self.xml.get_widget('DESC_textview').get_buffer()
- start_iter = buff.get_start_iter()
- end_iter = buff.get_end_iter()
- txt = buff.get_text(start_iter, end_iter, 0)
- if txt != '':
- vcard['DESC'] = txt.decode('utf-8')
-
- # Avatar
- if self.avatar_encoded:
- vcard['PHOTO'] = {'BINVAL': self.avatar_encoded}
- if self.avatar_mime_type:
- vcard['PHOTO']['TYPE'] = self.avatar_mime_type
- return vcard
-
- def on_publish_button_clicked(self, widget):
- if gajim.connections[self.account].connected < 2:
- dialogs.ErrorDialog(_('You are not connected to the server'),
- _('Without a connection you can not publish your contact '
- 'information.'))
- return
- vcard = self.make_vcard()
- nick = ''
- if vcard.has_key('NICKNAME'):
- nick = vcard['NICKNAME']
- if nick == '':
- nick = gajim.config.get_per('accounts', self.account, 'name')
- gajim.nicks[self.account] = nick
- gajim.connections[self.account].send_vcard(vcard)
-
- def on_retrieve_button_clicked(self, widget):
- entries = ['FN', 'NICKNAME', 'BDAY', 'EMAIL_HOME_USERID', 'URL',
- 'TEL_HOME_NUMBER', 'N_FAMILY', 'N_GIVEN', 'N_MIDDLE', 'N_PREFIX',
- 'N_SUFFIX', 'ADR_HOME_STREET', 'ADR_HOME_EXTADR', 'ADR_HOME_LOCALITY',
- 'ADR_HOME_REGION', 'ADR_HOME_PCODE', 'ADR_HOME_CTRY', 'ORG_ORGNAME',
- 'ORG_ORGUNIT', 'TITLE', 'ROLE', 'ADR_WORK_STREET', 'ADR_WORK_EXTADR',
- 'ADR_WORK_LOCALITY', 'ADR_WORK_REGION', 'ADR_WORK_PCODE',
- 'ADR_WORK_CTRY']
- if gajim.connections[self.account].connected > 1:
- # clear all entries
- for e in entries:
- self.xml.get_widget(e + '_entry').set_text('')
- self.xml.get_widget('DESC_textview').get_buffer().set_text('')
- self.xml.get_widget('PHOTO_image').set_from_pixbuf(None)
- if self.avatar_save_as_id:
- self.xml.get_widget('PHOTO_eventbox').disconnect(
- self.avatar_save_as_id)
- self.avatar_save_as_id = None
- gajim.connections[self.account].request_vcard(self.jid)
- else:
- dialogs.ErrorDialog(_('You are not connected to the server'),
- _('Without a connection, you can not get your contact information.'))
-
- def change_to_vcard(self):
- self.xml.get_widget('information_notebook').remove_page(0)
- self.xml.get_widget('nickname_label').set_text(_('Personal details'))
-
- self.publish_button.show()
- self.retrieve_button.show()
-
- #photo_vbuttonbox visible
- self.xml.get_widget('photo_vbuttonbox').show()
-
- #make all entries editable
- entries = ['FN', 'NICKNAME', 'BDAY', 'EMAIL_HOME_USERID', 'URL',
- 'TEL_HOME_NUMBER', 'N_FAMILY', 'N_GIVEN', 'N_MIDDLE', 'N_PREFIX',
- 'N_SUFFIX', 'ADR_HOME_STREET', 'ADR_HOME_EXTADR', 'ADR_HOME_LOCALITY',
- 'ADR_HOME_REGION', 'ADR_HOME_PCODE', 'ADR_HOME_CTRY', 'ORG_ORGNAME',
- 'ORG_ORGUNIT', 'TITLE', 'ROLE', 'TEL_WORK_NUMBER', 'EMAIL_WORK_USERID',
- 'ADR_WORK_STREET', 'ADR_WORK_EXTADR', 'ADR_WORK_LOCALITY',
- 'ADR_WORK_REGION', 'ADR_WORK_PCODE', 'ADR_WORK_CTRY']
- for e in entries:
- self.xml.get_widget(e + '_entry').set_property('editable', True)
-
- description_textview = self.xml.get_widget('DESC_textview')
- description_textview.set_editable(True)
- description_textview.set_cursor_visible(True)