Merge branch 'translations' into 'master'

Update strings for better english. Thanks to Allan Nordhøy for the suggestions

See merge request !51
This commit is contained in:
Yann Leboulanger 2017-02-04 23:31:33 +01:00
commit a7c833f777
38 changed files with 174 additions and 175 deletions

View File

@ -57,13 +57,13 @@ Sets value of 'key' to 'value'.
Writes the current state of Gajim preferences to the .config file Writes the current state of Gajim preferences to the .config file
.Ss remove_contact Ao jid Ac Bq account .Ss remove_contact Ao jid Ac Bq account
Removes contact from roster Removes contact from roster
.Ss send_chat_message Ao jid Ac Ao message Ac Bo pgp key Bc Bq account .Ss send_chat_message Ao jid Ac Ao message Ac Bo PGP key Bc Bq account
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 ''. 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 ''.
.Ss send_file Ao file Ac Ao jid Ac Bq account .Ss send_file Ao file Ac Ao jid Ac Bq account
Sends file to a contact Sends file to a contact
.Ss send_groupchat_message Ao room_jid Ac Ao message Ac Bq account .Ss send_groupchat_message Ao room_jid Ac Ao message Ac Bq account
Sends new message to a groupchat you've joined. Sends new message to a groupchat you've joined.
.Ss send_single_message Ao jid subject Ac Ao message Ac Bo pgp key Bc Bq account .Ss send_single_message Ao jid subject Ac Ao message Ac Bo PGP key Bc Bq account
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 ''. 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 ''.
.Ss send_xml Ao xml Ac Bq account .Ss send_xml Ao xml Ac Bq account
Sends custom XML Sends custom XML

View File

@ -3,7 +3,7 @@ Categories=Network;InstantMessaging;GTK;GNOME;
_Name=Gajim _Name=Gajim
_GenericName=Jabber IM Client _GenericName=Jabber IM Client
_Comment=A GTK+ Jabber client _Comment=A GTK+ Jabber client
_Keywords=chat;messaging;im;jabber;xmpp;bonjour;voip; _Keywords=chat;messaging;im;xmpp;bonjour;voip;
Version=1.0 Version=1.0
Exec=gajim Exec=gajim
Icon=gajim Icon=gajim

View File

@ -621,7 +621,7 @@
</child> </child>
<child> <child>
<object class="GtkCheckButton" id="carbons_checkbutton1"> <object class="GtkCheckButton" id="carbons_checkbutton1">
<property name="label" translatable="yes">Receive conversations from other resources (If server supports it)</property> <property name="label" translatable="yes">Receive conversations from other resources (provided the server has support for it)</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">False</property> <property name="receives_default">False</property>

View File

@ -76,7 +76,7 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="receives_default">False</property> <property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Searching only in the selected day </property> <property name="tooltip_text" translatable="yes">Only searching within selected day</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="xalign">0.5</property> <property name="xalign">0.5</property>
<property name="draw_indicator">True</property> <property name="draw_indicator">True</property>

View File

@ -480,7 +480,7 @@
</child> </child>
<child> <child>
<object class="GtkCheckButton" id="positive_184_ack_checkbutton"> <object class="GtkCheckButton" id="positive_184_ack_checkbutton">
<property name="label" translatable="yes">Show icon when your messages are received</property> <property name="label" translatable="yes">Notify by icon when your messages are received</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">False</property> <property name="receives_default">False</property>
@ -2745,7 +2745,7 @@ to discover one from server.</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">False</property> <property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">If checked, Gajim will keep logs for encrypted messages. Please note that when using E2E encryption the remote party has to agree on logging, else the messages will not be logged.</property> <property name="tooltip_text" translatable="yes">If checked, Gajim will keep logs for encrypted messages. Please note that when using End-to-End encryption the remote party has to agree on logging, else the messages will not be logged.</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="draw_indicator">True</property> <property name="draw_indicator">True</property>

View File

@ -2,9 +2,7 @@
<!-- Generated with glade 3.18.3 --> <!-- Generated with glade 3.18.3 -->
<interface> <interface>
<requires lib="gtk+" version="3.12"/> <requires lib="gtk+" version="3.12"/>
<object class="GtkTextBuffer" id="textbuffer1"> <object class="GtkTextBuffer" id="textbuffer1"/>
<property name="text" translatable="yes">Message Body &lt;currently unused, so it's hidden by default&gt;</property>
</object>
<object class="GtkWindow" id="roster_item_exchange_window"> <object class="GtkWindow" id="roster_item_exchange_window">
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="title" translatable="yes">Roster Item Exchange</property> <property name="title" translatable="yes">Roster Item Exchange</property>

View File

@ -294,14 +294,14 @@ if dbus_support.supported:
@dbus.service.method(INTERFACE, in_signature='ssss', out_signature='b') @dbus.service.method(INTERFACE, in_signature='ssss', out_signature='b')
def send_chat_message(self, jid, message, keyID, account): def send_chat_message(self, jid, message, keyID, account):
'''Send chat 'message' to 'jid', using account (optional) 'account'. '''Send chat 'message' to 'jid', using account (optional) 'account'.
if keyID is specified, encrypt the message with the pgp key ''' if keyID is specified, encrypt the message with the PGP key '''
jid = self._get_real_jid(jid, account) jid = self._get_real_jid(jid, account)
return self._send_message(jid, message, keyID, account) return self._send_message(jid, message, keyID, account)
@dbus.service.method(INTERFACE, in_signature='sssss', out_signature='b') @dbus.service.method(INTERFACE, in_signature='sssss', out_signature='b')
def send_single_message(self, jid, subject, message, keyID, account): def send_single_message(self, jid, subject, message, keyID, account):
'''Send single 'message' to 'jid', using account (optional) 'account'. '''Send single 'message' to 'jid', using account (optional) 'account'.
if keyID is specified, encrypt the message with the pgp key ''' if keyID is specified, encrypt the message with the PGP key '''
jid = self._get_real_jid(jid, account) jid = self._get_real_jid(jid, account)
return self._send_message(jid, message, keyID, account, type, subject) return self._send_message(jid, message, keyID, account, type, subject)
@ -626,7 +626,7 @@ if dbus_support.supported:
elif len(prim_contact.keyID) == 16: elif len(prim_contact.keyID) == 16:
keyID = prim_contact.keyID[8:] keyID = prim_contact.keyID[8:]
if keyID: if keyID:
contact_dict['openpgp'] = keyID contact_dict['openPGP'] = keyID
contact_dict['resources'] = dbus.Array([], signature='(sis)') contact_dict['resources'] = dbus.Array([], signature='(sis)')
for contact in contacts: for contact in contacts:
resource_props = dbus.Struct((DBUS_STRING(contact.resource), resource_props = dbus.Struct((DBUS_STRING(contact.resource),

View File

@ -56,7 +56,7 @@ class GajimApplication(Gtk.Application):
'history db and plugins)')) 'history db and plugins)'))
self.add_main_option('verbose', ord('v'), GLib.OptionFlags.NONE, self.add_main_option('verbose', ord('v'), GLib.OptionFlags.NONE,
GLib.OptionArg.NONE, GLib.OptionArg.NONE,
_('Print xml stanzas and other debug ' _('Print XML stanzas and other debug '
'information')) 'information'))
self.add_main_option('windev', ord('w'), GLib.OptionFlags.NONE, self.add_main_option('windev', ord('w'), GLib.OptionFlags.NONE,
GLib.OptionArg.NONE, GLib.OptionArg.NONE,

View File

@ -366,8 +366,8 @@ class ChatControl(ChatControlBase):
else: else:
self._formattings_button.set_sensitive(False) self._formattings_button.set_sensitive(False)
if self.contact.supports(NS_XHTML_IM): if self.contact.supports(NS_XHTML_IM):
self._formattings_button.set_tooltip_text(_('Formattings are ' self._formattings_button.set_tooltip_text(_('Formatting is not '
'not available when GPG is active')) 'available so long as GPG is active'))
else: else:
self._formattings_button.set_tooltip_text(_('This contact does ' self._formattings_button.set_tooltip_text(_('This contact does '
'not support HTML')) 'not support HTML'))

View File

@ -1004,7 +1004,7 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
if not contact or contact.sub not in ('both', 'to'): if not contact or contact.sub not in ('both', 'to'):
prim_text = _('Really send file?') prim_text = _('Really send file?')
sec_text = _('If you send a file to %s, he/she will know your ' sec_text = _('If you send a file to %s, he/she will know your '
'real Jabber ID.') % gc_contact.name 'real JID.') % gc_contact.name
dialog = dialogs.NonModalConfirmationDialog(prim_text, dialog = dialogs.NonModalConfirmationDialog(prim_text,
sec_text, on_response_ok=(_on_ok, gc_contact)) sec_text, on_response_ok=(_on_ok, gc_contact))
dialog.popup() dialog.popup()

View File

@ -258,7 +258,7 @@ def adapt_arguments(command, arguments, args, opts):
for arg, (spec_key, spec_value) in zip(overlapped, spec_kwargs): for arg, (spec_key, spec_value) in zip(overlapped, spec_kwargs):
opts.append((spec_key, arg)) opts.append((spec_key, arg))
else: else:
raise CommandError(_("Excessive arguments"), command) raise CommandError(_("Too many arguments"), command)
# Detect every switch and ensure it will not receive any arguments. # Detect every switch and ensure it will not receive any arguments.
# Normally this does not happen unless overlapping is enabled. # Normally this does not happen unless overlapping is enabled.

View File

@ -177,10 +177,10 @@ class Config:
'notify_on_new_gmail_email_command': [ opt_str, '', _('Specify the command to run when new mail arrives, e.g.: /usr/bin/getmail -q') ], 'notify_on_new_gmail_email_command': [ opt_str, '', _('Specify the command to run when new mail arrives, e.g.: /usr/bin/getmail -q') ],
'use_gpg_agent': [ opt_bool, False ], 'use_gpg_agent': [ opt_bool, False ],
'change_roster_title': [ opt_bool, True, _('Add * and [n] in roster title?')], 'change_roster_title': [ opt_bool, True, _('Add * and [n] in roster title?')],
'restore_lines': [opt_int, 4, _('How many lines to remember from previous conversation when a chat tab/window is reopened?')], 'restore_lines': [opt_int, 4, _('Amount of previous messages to include when reopening a chat')],
'restore_timeout': [opt_int, 60, _('How many minutes should last lines from previous conversation last.')], 'restore_timeout': [opt_int, 60, _('How many minutes should last lines from previous conversation last.')],
'muc_restore_lines': [opt_int, 20, _('How many lines to request from server when entering a groupchat. -1 means no limit')], 'muc_restore_lines': [opt_int, 20, _('How many lines to request from server when entering a groupchat. -1 means no limit')],
'muc_restore_timeout': [opt_int, 60, _('How many minutes back to request logs when entering a groupchat. -1 means no limit')], 'muc_restore_timeout': [opt_int, 60, _('Minutes of backlog to request when entering a groupchat. -1 means no limit')],
'muc_autorejoin_timeout': [opt_int, 1, _('How many seconds to wait before trying to autorejoin to a conference you are being disconnected from. Set to 0 to disable autorejoining.')], 'muc_autorejoin_timeout': [opt_int, 1, _('How many seconds to wait before trying to autorejoin to a conference you are being disconnected from. Set to 0 to disable autorejoining.')],
'muc_autorejoin_on_kick': [opt_bool, False, _('Should autorejoin be activated when we are being kicked from a conference?')], 'muc_autorejoin_on_kick': [opt_bool, False, _('Should autorejoin be activated when we are being kicked from a conference?')],
'send_on_ctrl_enter': [opt_bool, False, _('Send message on Ctrl+Enter and with Enter make new line (Mirabilis ICQ Client default behaviour).')], 'send_on_ctrl_enter': [opt_bool, False, _('Send message on Ctrl+Enter and with Enter make new line (Mirabilis ICQ Client default behaviour).')],
@ -198,8 +198,8 @@ class Config:
'autodetect_browser_mailer': [opt_bool, True, '', True], 'autodetect_browser_mailer': [opt_bool, True, '', 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': [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 group chat JIDs.')], 'confirm_close_muc_rooms': [opt_str, '', _('Always ask for confirmation before closing groupchats with any of the JIDs on this space separated list.')],
'noconfirm_close_muc_rooms': [opt_str, '', _('Never ask before closing group chat tab/window in this space separated list of group chat JIDs.')], 'noconfirm_close_muc_rooms': [opt_str, '', _('Never ask for confirmation before closing groupchats with any of the JIDs on this space separated list.')],
'confirm_close_multiple_tabs': [opt_bool, True, _('Ask before closing tabbed chat window if there are controls that can lose data (chat, private chat, groupchat that will not be minimized)')], 'confirm_close_multiple_tabs': [opt_bool, True, _('Ask before closing tabbed chat window if there are controls that can lose data (chat, private chat, groupchat that will not be minimized)')],
'notify_on_file_complete': [opt_bool, True], 'notify_on_file_complete': [opt_bool, True],
'file_transfers_port': [opt_int, 28011], 'file_transfers_port': [opt_int, 28011],
@ -294,7 +294,7 @@ class Config:
'attach_notifications_to_systray': [opt_bool, False, _('If True, notification windows from notification-daemon will be attached to notification icon.')], 'attach_notifications_to_systray': [opt_bool, False, _('If True, notification windows from notification-daemon will be attached to notification icon.')],
'check_idle_every_foo_seconds': [opt_int, 2, _('Choose interval between 2 checks of idleness.')], 'check_idle_every_foo_seconds': [opt_int, 2, _('Choose interval between 2 checks of idleness.')],
'uri_schemes': [opt_str, 'aaa:// aaas:// acap:// cap:// cid: crid:// data: dav: dict:// dns: fax: file:/ ftp:// geo: go: gopher:// h323: http:// https:// iax: icap:// im: imap:// info: ipp:// iris: iris.beep: iris.xpc: iris.xpcs: iris.lwz: ldap:// mid: modem: msrp:// msrps:// mtqp:// mupdate:// news: nfs:// nntp:// opaquelocktoken: pop:// pres: prospero:// rtsp:// service: shttp:// sip: sips: sms: snmp:// soap.beep:// soap.beeps:// tag: tel: telnet:// tftp:// thismessage:/ tip:// tv: urn:// vemmi:// xmlrpc.beep:// xmlrpc.beeps:// z39.50r:// z39.50s:// about: apt: cvs:// daap:// ed2k:// feed: fish:// git:// iax2: irc:// ircs:// ldaps:// magnet: mms:// rsync:// ssh:// svn:// sftp:// smb:// webcal://', _('Valid uri schemes. Only schemes in this list will be accepted as "real" uri. (mailto and xmpp are handled separately)'), True], 'uri_schemes': [opt_str, 'aaa:// aaas:// acap:// cap:// cid: crid:// data: dav: dict:// dns: fax: file:/ ftp:// geo: go: gopher:// h323: http:// https:// iax: icap:// im: imap:// info: ipp:// iris: iris.beep: iris.xpc: iris.xpcs: iris.lwz: ldap:// mid: modem: msrp:// msrps:// mtqp:// mupdate:// news: nfs:// nntp:// opaquelocktoken: pop:// pres: prospero:// rtsp:// service: shttp:// sip: sips: sms: snmp:// soap.beep:// soap.beeps:// tag: tel: telnet:// tftp:// thismessage:/ tip:// tv: urn:// vemmi:// xmlrpc.beep:// xmlrpc.beeps:// z39.50r:// z39.50s:// about: apt: cvs:// daap:// ed2k:// feed: fish:// git:// iax2: irc:// ircs:// ldaps:// magnet: mms:// rsync:// ssh:// svn:// sftp:// smb:// webcal://', _('Valid uri schemes. Only schemes in this list will be accepted as "real" uri. (mailto and xmpp are handled separately)'), True],
'ask_offline_status_on_connection': [ opt_bool, False, _('Ask offline status message to all offline contacts when connection to an account is established. WARNING: This causes a lot of requests to be sent!') ], 'ask_offline_status_on_connection': [ opt_bool, False, _('Request offline status messages from all contacts upon connecting. WARNING: This causes a lot of requests to be sent!') ],
'shell_like_completion': [ opt_bool, False, _('If True, completion in groupchats will be like a shell auto-completion')], 'shell_like_completion': [ opt_bool, False, _('If True, completion in groupchats will be like a shell auto-completion')],
'show_self_contact': [opt_str, 'when_other_resource', _('When is self contact row displayed. Can be "always", "when_other_resource" or "never"'), True], 'show_self_contact': [opt_str, 'when_other_resource', _('When is self contact row displayed. Can be "always", "when_other_resource" or "never"'), True],
'audio_input_device': [opt_str, 'autoaudiosrc ! volume name=gajim_vol'], 'audio_input_device': [opt_str, 'autoaudiosrc ! volume name=gajim_vol'],
@ -306,8 +306,8 @@ class Config:
'video_see_self': [opt_bool, True, _('If True, You will also see your webcam')], 'video_see_self': [opt_bool, True, _('If True, You will also see your webcam')],
'audio_input_volume': [opt_int, 50], 'audio_input_volume': [opt_int, 50],
'audio_output_volume': [opt_int, 50], 'audio_output_volume': [opt_int, 50],
'use_stun_server': [opt_bool, False, _('If True, Gajim will try to use a STUN server when using jingle. The one in "stun_server" option, or the one given by the jabber server.')], 'use_stun_server': [opt_bool, False, _('If True, Gajim will try to use a STUN server when using Jingle. The one in "stun_server" option, or the one given by the XMPP server.')],
'stun_server': [opt_str, '', _('STUN server to use when using jingle')], 'stun_server': [opt_str, '', _('STUN server to use when using Jingle')],
'show_affiliation_in_groupchat': [opt_bool, True, _('If True, Gajim will show affiliation of groupchat occupants by adding a colored square to the status icon')], 'show_affiliation_in_groupchat': [opt_bool, True, _('If True, Gajim will show affiliation of groupchat occupants by adding a colored square to the status icon')],
'global_proxy': [opt_str, '', _('Proxy used for all outgoing connections if the account does not have a specific proxy configured')], 'global_proxy': [opt_str, '', _('Proxy used for all outgoing connections if the account does not have a specific proxy configured')],
'ignore_incoming_attention': [opt_bool, False, _('If True, Gajim will ignore incoming attention requestd ("wizz").')], 'ignore_incoming_attention': [opt_bool, False, _('If True, Gajim will ignore incoming attention requestd ("wizz").')],
@ -347,6 +347,7 @@ class Config:
'keyname': [ opt_str, '', '', True ], 'keyname': [ opt_str, '', '', True ],
'enable_esessions': [opt_bool, True, _('Enable ESessions encryption for this account.'), True], 'enable_esessions': [opt_bool, True, _('Enable ESessions encryption for this account.'), True],
'autonegotiate_esessions': [opt_bool, False, _('Should Gajim automatically start an encrypted session when possible?')], 'autonegotiate_esessions': [opt_bool, False, _('Should Gajim automatically start an encrypted session when possible?')],
#keep tls, ssl and plain lowercase
'connection_types': [ opt_str, 'tls', _('Ordered list (space separated) of connection type to try. Can contain tls, ssl or plain')], 'connection_types': [ opt_str, 'tls', _('Ordered list (space separated) of connection type to try. Can contain tls, ssl or plain')],
'tls_version': [ opt_str, '1.0', '' ], 'tls_version': [ opt_str, '1.0', '' ],
'cipher_list': [ opt_str, 'HIGH:!aNULL:RC4-SHA', '' ], 'cipher_list': [ opt_str, 'HIGH:!aNULL:RC4-SHA', '' ],
@ -363,7 +364,7 @@ class Config:
'custom_host': [ opt_str, '', '', True ], 'custom_host': [ opt_str, '', '', True ],
'sync_with_global_status': [ opt_bool, False, ], 'sync_with_global_status': [ opt_bool, False, ],
'no_log_for': [ opt_str, '', _('Space separated list of JIDs for which you do not want to store logs. You can also add account name to log nothing for this account.')], 'no_log_for': [ opt_str, '', _('Space separated list of JIDs for which you do not want to store logs. You can also add account name to log nothing for this account.')],
'sync_logs_with_server': [ opt_bool, True, _('Download logs stored on server on Gajim startup if server supports XEP-0136 or XEP-0313')], 'sync_logs_with_server': [ opt_bool, True, _('On startup, Gajim will download logs stored on server, provided it supports XEP-0136 or XEP-0313')],
'allow_no_log_for': [ opt_str, '', _('Space separated list of JIDs for which you accept to not log conversations if he does not want to.')], 'allow_no_log_for': [ opt_str, '', _('Space separated list of JIDs for which you accept to not log conversations if he does not want to.')],
'non_minimized_gc': [ opt_str, '' ], 'non_minimized_gc': [ opt_str, '' ],
'attached_gpg_keys': [ opt_str, '' ], 'attached_gpg_keys': [ opt_str, '' ],
@ -413,9 +414,9 @@ class Config:
'last_archiving_time': [opt_str, '1970-01-01T00:00:00Z', _('Last time we syncronized with logs from server.')], 'last_archiving_time': [opt_str, '1970-01-01T00:00:00Z', _('Last time we syncronized with logs from server.')],
'enable_message_carbons': [ opt_bool, True, _('If enabled and if server supports this feature, Gajim will receive messages sent and received by other resources.')], 'enable_message_carbons': [ opt_bool, True, _('If enabled and if server supports this feature, Gajim will receive messages sent and received by other resources.')],
'ft_send_local_ips': [ opt_bool, True, _('If enabled, Gajim will send your local IPs so your contact can connect to your machine to transfer files.')], 'ft_send_local_ips': [ opt_bool, True, _('If enabled, Gajim will send your local IPs so your contact can connect to your machine to transfer files.')],
'oauth2_refresh_token': [ opt_str, '', _('Latest token for Oauth2 authentication.')], 'oauth2_refresh_token': [ opt_str, '', _('Latest token for OAuth 2.0 authentication.')],
'oauth2_client_id': [ opt_str, '0000000044077801', _('client_id for Oauth2 authentication.')], 'oauth2_client_id': [ opt_str, '0000000044077801', _('client_id for OAuth 2.0 authentication.')],
'oauth2_redirect_url': [ opt_str, 'https%3A%2F%2Fgajim.org%2Fmsnauth%2Findex.cgi', _('redirect_url for Oauth2 authentication.')], 'oauth2_redirect_url': [ opt_str, 'https%3A%2F%2Fgajim.org%2Fmsnauth%2Findex.cgi', _('redirect_url for OAuth 2.0 authentication.')],
'opened_chat_controls': [opt_str, '', _('Space separated list of JIDs for which we want to re-open a chat window on next startup.')], 'opened_chat_controls': [opt_str, '', _('Space separated list of JIDs for which we want to re-open a chat window on next startup.')],
'last_mam_id': [opt_str, '', _('Last MAM id we are syncronized with')], 'last_mam_id': [opt_str, '', _('Last MAM id we are syncronized with')],
}, {}), }, {}),
@ -486,7 +487,7 @@ class Config:
'rooms': ({ 'rooms': ({
'speller_language': [ opt_str, '', _('Language for which we want to check misspelled words')], 'speller_language': [ opt_str, '', _('Language for which we want to check misspelled words')],
'muc_restore_lines': [opt_int, -2, _('How many lines to request from server when entering a groupchat. -1 means no limit, -2 means global value')], 'muc_restore_lines': [opt_int, -2, _('How many lines to request from server when entering a groupchat. -1 means no limit, -2 means global value')],
'muc_restore_timeout': [opt_int, -2, _('How many minutes back to request logs when entering a groupchat. -1 means no limit, -2 means global value')], 'muc_restore_timeout': [opt_int, -2, _('Minutes of backlog to request when entering a groupchat. -1 means no limit, -2 means global value')],
}, {}), }, {}),
'plugins': ({ 'plugins': ({
'active': [opt_bool, False, _('State whether plugins should be activated on startup (this is saved on Gajim exit). This option SHOULD NOT be used to (de)activate plug-ins. Use GUI instead.')], 'active': [opt_bool, False, _('State whether plugins should be activated on startup (this is saved on Gajim exit). This option SHOULD NOT be used to (de)activate plug-ins. Use GUI instead.')],

View File

@ -276,8 +276,8 @@ class CommonConnection:
new_list.append(self.check_jid(j)) new_list.append(self.check_jid(j))
except helpers.InvalidFormat: except helpers.InvalidFormat:
gajim.nec.push_incoming_event(InformationEvent(None, gajim.nec.push_incoming_event(InformationEvent(None,
conn=self, level='error', pri_txt=_('Invalid Jabber ' conn=self, level='error', pri_txt=_('Invalid JID'),
'ID'), sec_txt=_('It is not possible to send a message ' sec_txt=_('It is not possible to send a message '
'to %s, this JID is not valid.') % j)) 'to %s, this JID is not valid.') % j))
return return
fjid = new_list fjid = new_list
@ -286,7 +286,7 @@ class CommonConnection:
jid = self.check_jid(jid) jid = self.check_jid(jid)
except helpers.InvalidFormat: except helpers.InvalidFormat:
gajim.nec.push_incoming_event(InformationEvent(None, conn=self, gajim.nec.push_incoming_event(InformationEvent(None, conn=self,
level='error', pri_txt=_('Invalid Jabber ID'), sec_txt=_( level='error', pri_txt=_('Invalid JID'), sec_txt=_(
'It is not possible to send a message to %s, this JID is not ' 'It is not possible to send a message to %s, this JID is not '
'valid.') % jid)) 'valid.') % jid))
return return
@ -1117,7 +1117,7 @@ class Connection(CommonConnection, ConnectionHandlers):
def connect(self, data=None): def connect(self, data=None):
""" """
Start a connection to the Jabber server Start a connection to the XMPP server
Returns connection, and connection type ('tls', 'ssl', 'plain', '') data Returns connection, and connection type ('tls', 'ssl', 'plain', '') data
MUST contain hostname, usessl, proxy, use_custom_host, custom_host (if MUST contain hostname, usessl, proxy, use_custom_host, custom_host (if

View File

@ -1153,7 +1153,7 @@ class MessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
self.get_jid_resource() self.get_jid_resource()
except helpers.InvalidFormat: except helpers.InvalidFormat:
gajim.nec.push_incoming_event(InformationEvent(None, conn=self.conn, gajim.nec.push_incoming_event(InformationEvent(None, conn=self.conn,
level='error', pri_txt=_('Invalid Jabber ID'), level='error', pri_txt=_('Invalid JID'),
sec_txt=_('A message from a non-valid JID arrived, it has been ' sec_txt=_('A message from a non-valid JID arrived, it has been '
'ignored.'))) 'ignored.')))
return return
@ -1199,7 +1199,7 @@ class MessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
except helpers.InvalidFormat: except helpers.InvalidFormat:
gajim.nec.push_incoming_event(InformationEvent(None, gajim.nec.push_incoming_event(InformationEvent(None,
conn=self.conn, level='error', conn=self.conn, level='error',
pri_txt=_('Invalid Jabber ID'), pri_txt=_('Invalid JID'),
sec_txt=_('A message from a non-valid JID arrived, it ' sec_txt=_('A message from a non-valid JID arrived, it '
'has been ignored.'))) 'has been ignored.')))
return return

View File

@ -383,7 +383,7 @@ def get_uf_chatstate(chatstate):
elif chatstate == 'inactive': elif chatstate == 'inactive':
return _('is doing something else') return _('is doing something else')
elif chatstate == 'composing': elif chatstate == 'composing':
return _('is composing a message...') return _('is composing a message')
elif chatstate == 'paused': elif chatstate == 'paused':
#paused means he or she was composing but has stopped for a while #paused means he or she was composing but has stopped for a while
return _('paused composing a message') return _('paused composing a message')
@ -498,7 +498,7 @@ def reduce_chars_newlines(text, max_chars = 0, max_lines = 0):
""" """
def _cut_if_long(string): def _cut_if_long(string):
if len(string) > max_chars: if len(string) > max_chars:
string = string[:max_chars - 3] + '...' string = string[:max_chars - 3] + ''
return string return string
if max_lines == 0: if max_lines == 0:
@ -511,7 +511,7 @@ def reduce_chars_newlines(text, max_chars = 0, max_lines = 0):
if lines: if lines:
reduced_text = '\n'.join(lines) reduced_text = '\n'.join(lines)
if reduced_text != text: if reduced_text != text:
reduced_text += '...' reduced_text += ''
else: else:
reduced_text = '' reduced_text = ''
return reduced_text return reduced_text

View File

@ -1877,7 +1877,7 @@ class AccountsWindow:
jid = gajim.config.get_per('accounts', account, 'hostname') jid = gajim.config.get_per('accounts', account, 'hostname')
else: else:
self.xml.get_object('anonymous_checkbutton1').set_active(False) self.xml.get_object('anonymous_checkbutton1').set_active(False)
self.xml.get_object('jid_label1').set_text(_('Jabber ID:')) self.xml.get_object('jid_label1').set_text(_('JID:'))
savepass = gajim.config.get_per('accounts', account, 'savepass') savepass = gajim.config.get_per('accounts', account, 'savepass')
save_password = self.xml.get_object('save_password_checkbutton1') save_password = self.xml.get_object('save_password_checkbutton1')
save_password.set_sensitive(True) save_password.set_sensitive(True)
@ -2173,7 +2173,7 @@ class AccountsWindow:
jid = helpers.parse_jid(jid) jid = helpers.parse_jid(jid)
except helpers.InvalidFormat as s: except helpers.InvalidFormat as s:
if not widget.is_focus(): if not widget.is_focus():
pritext = _('Invalid Jabber ID') pritext = _('Invalid JID')
dialogs.ErrorDialog(pritext, str(s), transient_for=self.window) dialogs.ErrorDialog(pritext, str(s), transient_for=self.window)
GLib.idle_add(lambda: widget.grab_focus()) GLib.idle_add(lambda: widget.grab_focus())
return True return True
@ -2182,9 +2182,9 @@ class AccountsWindow:
if len(jid_splited) != 2 and not gajim.config.get_per('accounts', if len(jid_splited) != 2 and not gajim.config.get_per('accounts',
self.current_account, 'anonymous_auth'): self.current_account, 'anonymous_auth'):
if not widget.is_focus(): if not widget.is_focus():
pritext = _('Invalid Jabber ID') pritext = _('Invalid JID')
sectext = \ sectext = \
_('A Jabber ID must be in the form "user@servername".') _('A JID must be in the form "user@servername".')
dialogs.ErrorDialog(pritext, sectext, transient_for=self.window) dialogs.ErrorDialog(pritext, sectext, transient_for=self.window)
GLib.idle_add(lambda: widget.grab_focus()) GLib.idle_add(lambda: widget.grab_focus())
return True return True
@ -2250,7 +2250,7 @@ class AccountsWindow:
resource = helpers.parse_resource(resource) resource = helpers.parse_resource(resource)
except helpers.InvalidFormat as s: except helpers.InvalidFormat as s:
if not widget.is_focus(): if not widget.is_focus():
pritext = _('Invalid Jabber ID') pritext = _('Invalid JID')
dialogs.ErrorDialog(pritext, str(s), transient_for=self.window) dialogs.ErrorDialog(pritext, str(s), transient_for=self.window)
GLib.idle_add(lambda: widget.grab_focus()) GLib.idle_add(lambda: widget.grab_focus())
return True return True
@ -2507,7 +2507,7 @@ class AccountsWindow:
return return
if not gajim.connections[self.current_account].vcard_supported: if not gajim.connections[self.current_account].vcard_supported:
dialogs.ErrorDialog(_("Your server doesn't support vCard"), dialogs.ErrorDialog(_("Your server does not have vCard support"),
_("Your server can't save your personal information."), _("Your server can't save your personal information."),
transient_for=self.window) transient_for=self.window)
return return
@ -2949,17 +2949,17 @@ class GroupchatConfigWindow:
def on_add_button_clicked(self, widget, affiliation): def on_add_button_clicked(self, widget, affiliation):
if affiliation == 'outcast': if affiliation == 'outcast':
title = _('Banning...') title = _('Banning')
#You can move '\n' before user@domain if that line is TOO BIG #You can move '\n' before user@domain if that line is TOO BIG
prompt = _('<b>Whom do you want to ban?</b>\n\n') prompt = _('<b>Whom do you want to ban?</b>\n\n')
elif affiliation == 'member': elif affiliation == 'member':
title = _('Adding Member...') title = _('Adding Member')
prompt = _('<b>Whom do you want to make a member?</b>\n\n') prompt = _('<b>Whom do you want to make a member?</b>\n\n')
elif affiliation == 'owner': elif affiliation == 'owner':
title = _('Adding Owner...') title = _('Adding Owner')
prompt = _('<b>Whom do you want to make an owner?</b>\n\n') prompt = _('<b>Whom do you want to make an owner?</b>\n\n')
else: else:
title = _('Adding Administrator...') title = _('Adding Administrator')
prompt = _('<b>Whom do you want to make an administrator?</b>\n\n') prompt = _('<b>Whom do you want to make an administrator?</b>\n\n')
prompt += _('Can be one of the following:\n' prompt += _('Can be one of the following:\n'
'1. user@domain/resource (only that resource matches).\n' '1. user@domain/resource (only that resource matches).\n'
@ -3719,7 +3719,7 @@ class AccountCreationWizardWindow:
try: try:
jid = helpers.parse_jid(jid) jid = helpers.parse_jid(jid)
except helpers.InvalidFormat as s: except helpers.InvalidFormat as s:
pritext = _('Invalid Jabber ID') pritext = _('Invalid JID')
dialogs.ErrorDialog(pritext, str(s)) dialogs.ErrorDialog(pritext, str(s))
return return
@ -3820,7 +3820,7 @@ class AccountCreationWizardWindow:
self.is_form) self.is_form)
self.xml.get_object('form_vbox').remove(self.data_form_widget) self.xml.get_object('form_vbox').remove(self.data_form_widget)
self.xml.get_object('progressbar_label').set_markup( self.xml.get_object('progressbar_label').set_markup(
'<b>Account is being created</b>\n\nPlease wait...') '<b>Account is being created</b>\n\nPlease wait')
self.notebook.set_current_page(5) # show creating page self.notebook.set_current_page(5) # show creating page
self.back_button.hide() self.back_button.hide()
self.forward_button.hide() self.forward_button.hide()
@ -3899,8 +3899,8 @@ class AccountCreationWizardWindow:
'hostname': hostname, 'error': obj.ssl_msg}) 'hostname': hostname, 'error': obj.ssl_msg})
if obj.errnum in (18, 27): if obj.errnum in (18, 27):
text = _('Add this certificate to the list of trusted ' text = _('Add this certificate to the list of trusted '
'certificates.\nSHA1 fingerprint of the certificate:\n%s' 'certificates.\nSHA-1 fingerprint of the certificate:\n%s'
'\nSHA256 fingerprint of the certificate:\n%s') \ '\nSHA-256 fingerprint of the certificate:\n%s') \
% (obj.ssl_fingerprint_sha1, obj.ssl_fingerprint_sha256) % (obj.ssl_fingerprint_sha1, obj.ssl_fingerprint_sha256)
self.xml.get_object('ssl_checkbutton').set_label(text) self.xml.get_object('ssl_checkbutton').set_label(text)
else: else:

View File

@ -1294,7 +1294,7 @@ class ConversationTextview(GObject.GObject):
index, insert_mark, old_txt = \ index, insert_mark, old_txt = \
self.correct_message(correct_id, kind, name) self.correct_message(correct_id, kind, name)
self.corrected_text_list[msg_stanza_id] = \ self.corrected_text_list[msg_stanza_id] = \
'<b>Message was corrected. Last message was:</b>\n{}' \ '<b>Message corrected. Previous message:</b>\n{}' \
.format(GLib.markup_escape_text(old_txt)) .format(GLib.markup_escape_text(old_txt))
corrected = True corrected = True
except TypeError: except TypeError:

View File

@ -639,12 +639,12 @@ class SingleForm(Gtk.Table, object):
try: try:
newtext = helpers.parse_jid(newtext) newtext = helpers.parse_jid(newtext)
except helpers.InvalidFormat as s: except helpers.InvalidFormat as s:
dialogs.ErrorDialog(_('Invalid Jabber ID'), str(s)) dialogs.ErrorDialog(_('Invalid JID'), str(s))
return return
if newtext in field.values: if newtext in field.values:
dialogs.ErrorDialog( dialogs.ErrorDialog(
_('Jabber ID already in list'), _('JID already in list'),
_('The Jabber ID you entered is already in the list. Choose another one.')) _('The JID you entered is already in the list. Choose another one.'))
GLib.idle_add(treeview.set_cursor, path) GLib.idle_add(treeview.set_cursor, path)
return return
model[path][0]=newtext model[path][0]=newtext

View File

@ -92,7 +92,7 @@ class EditGroupsDialog:
self.xml.get_object('nickname_label').set_markup( self.xml.get_object('nickname_label').set_markup(
_('Contact name: <i>%s</i>') % contact.get_shown_name()) _('Contact name: <i>%s</i>') % contact.get_shown_name())
self.xml.get_object('jid_label').set_markup( self.xml.get_object('jid_label').set_markup(
_('Jabber ID: <i>%s</i>') % contact.jid) _('JID: <i>%s</i>') % contact.jid)
else: else:
self.xml.get_object('nickname_label').set_no_show_all(True) self.xml.get_object('nickname_label').set_no_show_all(True)
self.xml.get_object('nickname_label').hide() self.xml.get_object('nickname_label').hide()
@ -851,7 +851,7 @@ class AddNewContactWindow:
Class for AddNewContactWindow Class for AddNewContactWindow
""" """
uid_labels = {'jabber': _('Jabber ID:'), uid_labels = {'jabber': _('JID:'),
'aim': _('AIM Address:'), 'aim': _('AIM Address:'),
'gadu-gadu': _('GG Number:'), 'gadu-gadu': _('GG Number:'),
'icq': _('ICQ Number:'), 'icq': _('ICQ Number:'),
@ -936,11 +936,11 @@ class AddNewContactWindow:
self.protocol_combobox.pack_start(cell, True) self.protocol_combobox.pack_start(cell, True)
self.protocol_combobox.add_attribute(cell, 'text', 0) self.protocol_combobox.add_attribute(cell, 'text', 0)
self.protocol_combobox.set_model(liststore) self.protocol_combobox.set_model(liststore)
uf_type = {'jabber': 'Jabber', 'aim': 'AIM', 'gadu-gadu': 'Gadu Gadu', uf_type = {'jabber': 'XMPP', 'aim': 'AIM', 'gadu-gadu': 'Gadu Gadu',
'icq': 'ICQ', 'msn': 'MSN', 'yahoo': 'Yahoo'} 'icq': 'ICQ', 'msn': 'MSN', 'yahoo': 'Yahoo'}
# Jabber as first # Jabber as first
img = gajim.interface.jabber_state_images['16']['online'] img = gajim.interface.jabber_state_images['16']['online']
liststore.append(['Jabber', img.get_pixbuf(), 'jabber']) liststore.append(['XMPP', img.get_pixbuf(), 'jabber'])
for type_ in self.agents: for type_ in self.agents:
if type_ == 'jabber': if type_ == 'jabber':
continue continue
@ -1305,7 +1305,7 @@ class AboutDialog(Gtk.AboutDialog):
Gtk.get_minor_version(), Gtk.get_micro_version()) Gtk.get_minor_version(), Gtk.get_micro_version())
gobject_ver = self.tuple2str(GObject.pygobject_version) gobject_ver = self.tuple2str(GObject.pygobject_version)
nbxmpp_ver = nbxmpp.__version__ nbxmpp_ver = nbxmpp.__version__
self.set_comments('%s\n%s %s\n%s %s\n%s %s' % (_('A GTK+ Jabber/XMPP client'), self.set_comments('%s\n%s %s\n%s %s\n%s %s' % (_('A GTK+ XMPP client'),
_('GTK+ Version:'), gtk_ver, _('PyGobject Version:'), gobject_ver, _('GTK+ Version:'), gtk_ver, _('PyGobject Version:'), gobject_ver,
_('python-nbxmpp Version:'), nbxmpp_ver)) _('python-nbxmpp Version:'), nbxmpp_ver))
self.set_website('https://gajim.org/') self.set_website('https://gajim.org/')
@ -1875,10 +1875,9 @@ class PlainConnectionDialog(ConfirmationDialogDoubleCheck):
def __init__(self, account, on_ok, on_cancel): def __init__(self, account, on_ok, on_cancel):
pritext = _('Insecure connection') pritext = _('Insecure connection')
sectext = _('You are about to connect to the account %(account)s ' sectext = _('You are about to connect to the account %(account)s '
'(%(server)s) with an insecure connection. This means all your ' '(%(server)s) insecurely. This means conversations will not be '
'conversations will be exchanged unencrypted. This type of ' 'encrypted, and is strongly discouraged.\nAre you sure you want '
'connection is really discouraged.\nAre you sure you want to do ' 'to do that?') % {'account': account,
'that?') % {'account': account,
'server': gajim.get_hostname_from_account(account)} 'server': gajim.get_hostname_from_account(account)}
checktext1 = _('Yes, I really want to connect insecurely') checktext1 = _('Yes, I really want to connect insecurely')
tooltip1 = _('Gajim will NOT connect unless you check this box') tooltip1 = _('Gajim will NOT connect unless you check this box')
@ -2662,14 +2661,14 @@ class JoinGroupchatWindow:
return return
user, server, resource = helpers.decompose_jid(room_jid) user, server, resource = helpers.decompose_jid(room_jid)
if not user or not server or resource: if not user or not server or resource:
ErrorDialog(_('Invalid group chat Jabber ID'), ErrorDialog(_('Invalid group chat JID'),
_('Please enter the group chat Jabber ID as room@server.')) _('Please enter the group chat JID as room@server.'))
return return
try: try:
room_jid = helpers.parse_jid(room_jid) room_jid = helpers.parse_jid(room_jid)
except Exception: except Exception:
ErrorDialog(_('Invalid group chat Jabber ID'), ErrorDialog(_('Invalid group chat JID'),
_('The group chat Jabber ID contains invalid characters.')) _('The group chat JID contains invalid characters.'))
return return
if gajim.contacts.get_contact(self.account, room_jid) and \ if gajim.contacts.get_contact(self.account, room_jid) and \
@ -2851,9 +2850,10 @@ class NewChatDialog(InputDialog):
title = _('Start Chat with account %s') % account title = _('Start Chat with account %s') % account
else: else:
title = _('Start Chat') title = _('Start Chat')
prompt_text = _('Fill in the nickname or the Jabber ID of the contact you would like\nto send a chat message to:') prompt_text = _('Fill in the nickname or the JID of the contact you '
'would like\nto send a chat message to:')
InputDialog.__init__(self, title, prompt_text, is_modal=False) InputDialog.__init__(self, title, prompt_text, is_modal=False)
self.input_entry.set_placeholder_text(_('Nickname / Jabber ID')) self.input_entry.set_placeholder_text(_('Nickname / JID'))
self.completion_dict = {} self.completion_dict = {}
liststore = gtkgui_helpers.get_completion_liststore(self.input_entry) liststore = gtkgui_helpers.get_completion_liststore(self.input_entry)
@ -3299,7 +3299,7 @@ class SingleMessageWindow:
try: try:
to_whom_jid = helpers.parse_jid(to_whom_jid) to_whom_jid = helpers.parse_jid(to_whom_jid)
except helpers.InvalidFormat: except helpers.InvalidFormat:
ErrorDialog(_('Invalid Jabber ID'), ErrorDialog(_('Invalid JID'),
_('It is not possible to send a message to %s, this JID is not ' _('It is not possible to send a message to %s, this JID is not '
'valid.') % to_whom_jid) 'valid.') % to_whom_jid)
return True return True
@ -3573,7 +3573,7 @@ class RosterItemExchangeWindow:
self.items_list_treeview.insert_column_with_attributes(-1, title, self.items_list_treeview.insert_column_with_attributes(-1, title,
renderer1, active=0) renderer1, active=0)
renderer2 = Gtk.CellRendererText() renderer2 = Gtk.CellRendererText()
self.items_list_treeview.insert_column_with_attributes(-1, _('Jabber ID'), self.items_list_treeview.insert_column_with_attributes(-1, _('JID'),
renderer2, text=1) renderer2, text=1)
renderer3 = Gtk.CellRendererText() renderer3 = Gtk.CellRendererText()
self.items_list_treeview.insert_column_with_attributes(-1, _('Name'), self.items_list_treeview.insert_column_with_attributes(-1, _('Name'),
@ -4243,7 +4243,7 @@ class ItemArchiving313PreferencesWindow:
for widget in ('jid_entry', 'pref_cb'): for widget in ('jid_entry', 'pref_cb'):
setattr(self, widget, self.xml.get_object(widget)) setattr(self, widget, self.xml.get_object(widget))
self.window.set_title(_('Add Jabber ID')) self.window.set_title(_('Add JID'))
self.pref_cb.set_active(0) self.pref_cb.set_active(0)
self.window.show_all() self.window.show_all()
self.xml.connect_signals(self) self.xml.connect_signals(self)
@ -5334,7 +5334,7 @@ class ESessionInfoWindow:
'<b><span size="x-large">%s</span></b>' % verification_status) '<b><span size="x-large">%s</span></b>' % verification_status)
self.xml.get_object('dialog-action_area1').set_no_show_all(True) self.xml.get_object('dialog-action_area1').set_no_show_all(True)
self.button_label.set_text(_('Verify again...')) self.button_label.set_text(_('Verify again'))
else: else:
if self.session.control: if self.session.control:
self.session.control._show_lock_image(True, 'E2E', True, self.session.control._show_lock_image(True, 'E2E', True,
@ -5347,7 +5347,7 @@ class ESessionInfoWindow:
self.xml.get_object('verification_status_label').set_markup( self.xml.get_object('verification_status_label').set_markup(
'<b><span size="x-large">%s</span></b>' % verification_status) '<b><span size="x-large">%s</span></b>' % verification_status)
self.button_label.set_text(_('Verify...')) self.button_label.set_text(_('Verify'))
path = gtkgui_helpers.get_icon_path(security_image, 32) path = gtkgui_helpers.get_icon_path(security_image, 32)
self.security_image.set_from_file(path) self.security_image.set_from_file(path)
@ -5409,13 +5409,13 @@ class GPGInfoWindow:
if error: if error:
verification_status = _('''Contact's identity NOT verified''') verification_status = _('''Contact's identity NOT verified''')
info = _('OpenPGP key is assigned to this contact, but <b>you ' info = _('OpenPGP key is assigned to this contact, but <b>you '
'do not trust his key</b>, so message <b>cannot</b> be ' 'do not trust their key</b>, so message <b>cannot</b> be '
'encrypted. Use your OpenPGP client to trust this key.') 'encrypted. Use your OpenPGP client to trust their key.')
image = 'security-low' image = 'security-low'
else: else:
verification_status = _('''Contact's identity verified''') verification_status = _('''Contact's identity verified''')
info = _('OpenPGP Key is assigned to this contact, and you ' info = _('OpenPGP Key is assigned to this contact, and you '
'trust his key, so messages will be encrypted.') 'trust their key, so messages will be encrypted.')
image = 'security-high' image = 'security-high'
status_label.set_markup('<b><span size="x-large">%s</span></b>' % \ status_label.set_markup('<b><span size="x-large">%s</span></b>' % \
@ -5609,7 +5609,7 @@ Issued on: %(io)s
Expires on: %(eo)s Expires on: %(eo)s
<b>Fingerprint</b> <b>Fingerprint</b>
SHA1 Fingerprint: %(sha1)s SHA-1 Fingerprint: %(sha1)s
SHA256 Fingerprint: %(sha256)s SHA256 Fingerprint: %(sha256)s
''') % { ''') % {
@ -5641,7 +5641,7 @@ class CheckFingerprintDialog(YesNoDialog):
checktext=checktext, on_response_yes=on_response_yes, checktext=checktext, on_response_yes=on_response_yes,
on_response_no=on_response_no) on_response_no=on_response_no)
self.set_title(_('SSL Certificate Verification for %s') % account) self.set_title(_('SSL Certificate Verification for %s') % account)
b = Gtk.Button(label=_('View cert...')) b = Gtk.Button(label=_('View cert'))
b.connect('clicked', self.on_cert_clicked) b.connect('clicked', self.on_cert_clicked)
b.show_all() b.show_all()
area = self.get_action_area() area = self.get_action_area()
@ -5658,7 +5658,7 @@ class SSLErrorDialog(ConfirmationDialogDoubleCheck):
ConfirmationDialogDoubleCheck.__init__(self, pritext, sectext, ConfirmationDialogDoubleCheck.__init__(self, pritext, sectext,
checktext1, checktext2, on_response_ok=on_response_ok, checktext1, checktext2, on_response_ok=on_response_ok,
on_response_cancel=on_response_cancel, is_modal=False) on_response_cancel=on_response_cancel, is_modal=False)
b = Gtk.Button(_('View cert...')) b = Gtk.Button(_('View cert'))
b.connect('clicked', self.on_cert_clicked) b.connect('clicked', self.on_cert_clicked)
b.show_all() b.show_all()
area = self.get_action_area() area = self.get_action_area()

View File

@ -59,7 +59,7 @@ class FeaturesWindow:
_('Requires python-dbus.'), _('Requires python-dbus.'),
_('Feature not available under Windows.')), _('Feature not available under Windows.')),
_('OpenPGP message encryption'): (self.gpg_available, _('OpenPGP message encryption'): (self.gpg_available,
_('Encrypting chat messages with OpenPGP keys.'), _('Ability to encrypting chat messages with OpenPGP.'),
_('Requires gpg and python-gnupg (http://code.google.com/p/python-gnupg/).'), _('Requires gpg and python-gnupg (http://code.google.com/p/python-gnupg/).'),
_('Requires gpg.exe in PATH.')), _('Requires gpg.exe in PATH.')),
_('Network-manager'): (self.network_manager_available, _('Network-manager'): (self.network_manager_available,

View File

@ -280,8 +280,8 @@ class FileTransfersWindow:
else: else:
file_name = file_props.name file_name = file_props.name
dialogs.YesNoDialog(('File transfer error'), dialogs.YesNoDialog(('File transfer error'),
_('The file %(file)s has been fully received, but it seems to be ' _('The file %(file)s has been received, but it seems to have '
'wrongly received.\nDo you want to reload it?') % \ 'been damaged along the way.\nDo you want to download it again?') % \
{'file': file_name}, on_response_yes=(on_yes, jid, file_props, {'file': file_name}, on_response_yes=(on_yes, jid, file_props,
account), type_=Gtk.MessageType.ERROR) account), type_=Gtk.MessageType.ERROR)
@ -308,7 +308,7 @@ class FileTransfersWindow:
gajim.config.set('last_send_dir', file_dir) gajim.config.set('last_send_dir', file_dir)
dialog.destroy() dialog.destroy()
dialog = dialogs.FileChooserDialog(_('Choose File to Send...'), dialog = dialogs.FileChooserDialog(_('Choose File to Send'),
Gtk.FileChooserAction.OPEN, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL), Gtk.FileChooserAction.OPEN, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL),
Gtk.ResponseType.OK, Gtk.ResponseType.OK,
True, # select multiple true as we can select many files to send True, # select multiple true as we can select many files to send
@ -338,8 +338,8 @@ class FileTransfersWindow:
Start the real transfer(upload) of the file Start the real transfer(upload) of the file
""" """
if gtkgui_helpers.file_is_locked(file_path): if gtkgui_helpers.file_is_locked(file_path):
pritext = _('Gajim cannot access this file') pritext = _('Gajim can not read this file')
sextext = _('This file is being used by another process.') sextext = _('Another process is using this file.')
dialogs.ErrorDialog(pritext, sextext) dialogs.ErrorDialog(pritext, sextext)
return return
@ -424,7 +424,7 @@ class FileTransfersWindow:
gajim.connections[account].send_file_rejection(file_props) gajim.connections[account].send_file_rejection(file_props)
dialog2 = dialogs.FileChooserDialog( dialog2 = dialogs.FileChooserDialog(
title_text=_('Save File as...'), title_text=_('Save File as'),
action=Gtk.FileChooserAction.SAVE, action=Gtk.FileChooserAction.SAVE,
buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
Gtk.STOCK_SAVE, Gtk.ResponseType.OK), Gtk.STOCK_SAVE, Gtk.ResponseType.OK),
@ -494,7 +494,7 @@ class FileTransfersWindow:
self.model.set(iter_, C_PULSE, GLib.MAXINT32) self.model.set(iter_, C_PULSE, GLib.MAXINT32)
elif status == 'computing': elif status == 'computing':
self.model.set(iter_, C_PULSE, 1) self.model.set(iter_, C_PULSE, 1)
text = _('Checking file...') + '\n' text = _('Checking file') + '\n'
received_size = int(file_props.received_len) received_size = int(file_props.received_len)
full_size = file_props.size full_size = file_props.size
text += helpers.convert_bytes(received_size) + '/' + \ text += helpers.convert_bytes(received_size) + '/' + \

View File

@ -92,8 +92,7 @@ class GajimRemote:
[] []
], ],
'list_contacts': [ 'list_contacts': [
_('Prints a list of all contacts in the roster. Each contact ' _('Lists all contacts in roster, one for each line'),
'appears on a separate line'),
[ [
(Q_('?CLI:account'), _('show only contacts of the given account'), (Q_('?CLI:account'), _('show only contacts of the given account'),
False) False)
@ -105,7 +104,7 @@ class GajimRemote:
[] []
], ],
'change_status': [ 'change_status': [
_('Changes the status of account or accounts'), _('Changes the status of account(s)'),
[ [
#offline, online, chat, away, xa, dnd, invisible should not be translated #offline, online, chat, away, xa, dnd, invisible should not be translated
(Q_('?CLI:status'), _('one of: offline, online, chat, away, xa, dnd, invisible. If not set, use account\'s previous status'), False), (Q_('?CLI:status'), _('one of: offline, online, chat, away, xa, dnd, invisible. If not set, use account\'s previous status'), False),
@ -116,7 +115,7 @@ class GajimRemote:
] ]
], ],
'set_priority': [ 'set_priority': [
_('Changes the priority of account or accounts'), _('Changes the priority of account(s)'),
[ [
(Q_('?CLI:priority'), _('priority you want to give to the account'), (Q_('?CLI:priority'), _('priority you want to give to the account'),
True), True),
@ -144,21 +143,21 @@ class GajimRemote:
[ [
('jid', _('JID of the contact that will receive the message'), True), ('jid', _('JID of the contact that will receive the message'), True),
(Q_('?CLI:message'), _('message contents'), True), (Q_('?CLI:message'), _('message contents'), True),
(_('pgp key'), _('if specified, the message will be encrypted ' (_('PGP key'), _('if specified, the message will be encrypted '
'using this public key'), False), 'using this public key'), False),
(Q_('?CLI:account'), _('if specified, the message will be sent ' (Q_('?CLI:account'), _('if specified, the message will be sent '
'using this account'), False), 'using this account'), False),
] ]
], ],
'send_single_message': [ 'send_single_message': [
_('Sends new single message to a contact in the roster. Both OpenPGP key ' _('Sends a chat message to someone on your roster. '
'and account are optional. If you want to set only \'account\', ' 'Optionally with OpenPGP key and account. If you want '
'without \'OpenPGP key\', just set \'OpenPGP key\' to \'\'.'), 'to only set the latter, set OpenPGP key to "".'),
[ [
('jid', _('JID of the contact that will receive the message'), True), ('jid', _('JID of the contact that will receive the message'), True),
(_('subject'), _('message subject'), True), (_('subject'), _('message subject'), True),
(Q_('?CLI:message'), _('message contents'), True), (Q_('?CLI:message'), _('message contents'), True),
(_('pgp key'), _('if specified, the message will be encrypted ' (_('PGP key'), _('if specified, the message will be encrypted '
'using this public key'), False), 'using this public key'), False),
(Q_('?CLI:account'), _('if specified, the message will be sent ' (Q_('?CLI:account'), _('if specified, the message will be sent '
'using this account'), False), 'using this account'), False),
@ -202,7 +201,7 @@ class GajimRemote:
_('Sets value of \'key\' to \'value\'.'), _('Sets value of \'key\' to \'value\'.'),
[ [
(_('key=value'), _('\'key\' is the name of the preference, ' (_('key=value'), _('\'key\' is the name of the preference, '
'\'value\' is the value to set it to'), True) '\'value\' is what to set it to'), True)
] ]
], ],
'prefs_del': [ 'prefs_del': [
@ -261,8 +260,8 @@ class GajimRemote:
_('Sends custom XML'), _('Sends custom XML'),
[ [
('xml', _('XML to send'), True), ('xml', _('XML to send'), True),
('account', _('Account in which the xml will be sent; ' ('account', _('Account to which the XML will be sent; '
'if not specified, xml will be sent to all accounts'), 'if not specified, XML will be sent to all accounts'),
False) False)
] ]
], ],
@ -276,7 +275,7 @@ class GajimRemote:
] ]
], ],
'handle_uri': [ 'handle_uri': [
_('Handle a xmpp:/ uri'), _('Handle a xmpp:/ URI'),
[ [
(Q_('?CLI:uri'), _('URI to handle'), True), (Q_('?CLI:uri'), _('URI to handle'), True),
(Q_('?CLI:account'), _('Account in which you want to handle it'), (Q_('?CLI:account'), _('Account in which you want to handle it'),
@ -399,6 +398,7 @@ class GajimRemote:
raise exceptions.SessionBusNotPresent raise exceptions.SessionBusNotPresent
if not self.check_gajim_running(): if not self.check_gajim_running():
#Do not translate "gajim-remote"
send_error(_('It seems Gajim is not running. So you can\'t use gajim-remote.')) send_error(_('It seems Gajim is not running. So you can\'t use gajim-remote.'))
obj = self.sbus.get_object(SERVICE, OBJ_PATH) obj = self.sbus.get_object(SERVICE, OBJ_PATH)
interface = dbus.Interface(obj, INTERFACE) interface = dbus.Interface(obj, INTERFACE)
@ -534,9 +534,9 @@ class GajimRemote:
def handle_uri(self): def handle_uri(self):
if len(sys.argv) < 3: if len(sys.argv) < 3:
send_error(_('No uri given')) send_error(_('No URI given'))
if not sys.argv[2].startswith('xmpp:'): if not sys.argv[2].startswith('xmpp:'):
send_error(_('Wrong uri')) send_error(_('Wrong URI'))
sys.argv[2] = sys.argv[2][5:] sys.argv[2] = sys.argv[2][5:]
uri = sys.argv[2] uri = sys.argv[2]
if not '?' in uri: if not '?' in uri:

View File

@ -96,12 +96,12 @@ MIN_NBXMPP_VER = "0.5.3"
try: try:
import nbxmpp import nbxmpp
except ImportError: except ImportError:
print('Gajim needs python-nbxmpp to run. Quiting...') print('Gajim needs python-nbxmpp to run. Quiting')
sys.exit(1) sys.exit(1)
from distutils.version import LooseVersion as V from distutils.version import LooseVersion as V
if V(nbxmpp.__version__) < V(MIN_NBXMPP_VER): if V(nbxmpp.__version__) < V(MIN_NBXMPP_VER):
print('Gajim needs python-nbxmpp >= %s to run. Quiting...' % MIN_NBXMPP_VER) print('Gajim needs python-nbxmpp >= %s to run. Quiting' % MIN_NBXMPP_VER)
sys.exit(1) sys.exit(1)
from application import GajimApplication from application import GajimApplication

View File

@ -96,7 +96,7 @@ class GajimThemesWindow:
if old_name == 'default': if old_name == 'default':
dialogs.ErrorDialog( dialogs.ErrorDialog(
_('You cannot make changes to the default theme'), _('You cannot make changes to the default theme'),
_('Please create a clean new theme with your desired name.')) _('Please create a new clean theme.'))
return return
new_config_name = new_name.replace(' ', '_') new_config_name = new_name.replace(' ', '_')
if new_config_name in gajim.config.get_per('themes'): if new_config_name in gajim.config.get_per('themes'):
@ -185,7 +185,7 @@ class GajimThemesWindow:
if self.current_theme == gajim.config.get('roster_theme'): if self.current_theme == gajim.config.get('roster_theme'):
dialogs.ErrorDialog( dialogs.ErrorDialog(
_('You cannot delete your current theme'), _('You cannot delete your current theme'),
_('Please first choose another theme as your current theme.')) _('Pick another theme to use first.'))
return return
self.theme_options_vbox.set_sensitive(False) self.theme_options_vbox.set_sensitive(False)
self.theme_options_table.set_sensitive(False) self.theme_options_table.set_sensitive(False)

View File

@ -1333,8 +1333,8 @@ class GroupchatControl(ChatControlBase):
if '103' in obj.status_code: if '103' in obj.status_code:
changes.append(_('Room now does not show unavailable members')) changes.append(_('Room now does not show unavailable members'))
if '104' in obj.status_code: if '104' in obj.status_code:
changes.append(_('A non-privacy-related room configuration change ' changes.append(_('A setting not related to privacy has been '
'has occurred')) 'changed'))
if '170' in obj.status_code: if '170' in obj.status_code:
# Can be a presence (see chg_contact_status in groupchat_control.py) # Can be a presence (see chg_contact_status in groupchat_control.py)
changes.append(_('Room logging is now enabled')) changes.append(_('Room logging is now enabled'))
@ -1347,7 +1347,7 @@ class GroupchatControl(ChatControlBase):
changes.append(_('Room is now semi-anonymous')) changes.append(_('Room is now semi-anonymous'))
self.is_anonymous = True self.is_anonymous = True
if '174' in obj.status_code: if '174' in obj.status_code:
changes.append(_('Room is now fully-anonymous')) changes.append(_('Room is now fully anonymous'))
self.is_anonymous = True self.is_anonymous = True
for change in changes: for change in changes:
@ -2257,16 +2257,16 @@ class GroupchatControl(ChatControlBase):
try: try:
jid = helpers.parse_jid(jid) jid = helpers.parse_jid(jid)
except Exception: except Exception:
dialogs.ErrorDialog(_('Invalid group chat Jabber ID'), dialogs.ErrorDialog(_('Invalid group chat JID'),
_('The group chat Jabber ID has not allowed characters.')) _('The group chat JID has not allowed characters.'))
return return
gajim.connections[self.account].destroy_gc_room(self.room_jid, gajim.connections[self.account].destroy_gc_room(self.room_jid,
reason, jid) reason, jid)
# Ask for a reason # Ask for a reason
dialogs.DoubleInputDialog(_('Destroying %s') % '\u200E' + \ dialogs.DoubleInputDialog(_('Destroying %s') % '\u200E' + \
self.room_jid, _('You are going to definitively destroy this ' self.room_jid, _('You are going to remove this room permanently.'
'room.\nYou may specify a reason below:'), '\nYou may specify a reason below:'),
_('You may also enter an alternate venue:'), ok_handler=on_ok, _('You may also enter an alternate venue:'), ok_handler=on_ok,
transient_for=self.parent_win.window) transient_for=self.parent_win.window)

View File

@ -803,7 +803,7 @@ def on_avatar_save_as_menuitem_activate(widget, jid, default_name=''):
def on_cancel(widget): def on_cancel(widget):
dialog.destroy() dialog.destroy()
dialog = dialogs.FileChooserDialog(title_text=_('Save Image as...'), dialog = dialogs.FileChooserDialog(title_text=_('Save Image as'),
action=Gtk.FileChooserAction.SAVE, buttons=(Gtk.STOCK_CANCEL, action=Gtk.FileChooserAction.SAVE, buttons=(Gtk.STOCK_CANCEL,
Gtk.ResponseType.CANCEL, Gtk.STOCK_SAVE, Gtk.ResponseType.OK), Gtk.ResponseType.CANCEL, Gtk.STOCK_SAVE, Gtk.ResponseType.OK),
default_response=Gtk.ResponseType.OK, default_response=Gtk.ResponseType.OK,

View File

@ -162,7 +162,7 @@ class Interface:
if obj.msg: if obj.msg:
sec_msg = obj.msg + '\n' + sec_msg sec_msg = obj.msg + '\n' + sec_msg
dialog = dialogs.YesNoDialog(_('HTTP (%(method)s) Authorization for ' dialog = dialogs.YesNoDialog(_('HTTP (%(method)s) Authorization for '
'%(url)s (id: %(id)s)') % {'method': obj.method, 'url': obj.url, '%(url)s (ID: %(id)s)') % {'method': obj.method, 'url': obj.url,
'id': obj.iq_id}, sec_msg, on_response_yes=(on_yes, obj), 'id': obj.iq_id}, sec_msg, on_response_yes=(on_yes, obj),
on_response_no=(response, obj, 'no')) on_response_no=(response, obj, 'no'))
@ -303,7 +303,7 @@ class Interface:
# maximum user number reached # maximum user number reached
self.handle_gc_error(gc_control, self.handle_gc_error(gc_control,
_('Unable to join group chat'), _('Unable to join group chat'),
_('Maximum number of users for <b>%s</b> has been reached')\ _('<b>%s</b> is full')\
% obj.room_jid) % obj.room_jid)
elif (obj.errcode == '401') or (obj.errcon == 'not-authorized'): elif (obj.errcode == '401') or (obj.errcon == 'not-authorized'):
# password required to join # password required to join
@ -321,11 +321,11 @@ class Interface:
_('Group chat <b>%s</b> does not exist.') % obj.room_jid) _('Group chat <b>%s</b> does not exist.') % obj.room_jid)
elif (obj.errcode == '405') or (obj.errcon == 'not-allowed'): elif (obj.errcode == '405') or (obj.errcon == 'not-allowed'):
self.handle_gc_error(gc_control, _('Unable to join group chat'), self.handle_gc_error(gc_control, _('Unable to join group chat'),
_('Group chat creation is restricted.')) _('Group chat creation is not permitted.'))
elif (obj.errcode == '406') or (obj.errcon == 'not-acceptable'): elif (obj.errcode == '406') or (obj.errcon == 'not-acceptable'):
self.handle_gc_error(gc_control, _('Unable to join groupchat'), self.handle_gc_error(gc_control, _('Unable to join groupchat'),
_('Your registered nickname must be used in group chat ' _('You must use your registered nickname in <b>%s</b>.')\
'<b>%s</b>.') % obj.room_jid) % obj.room_jid)
elif (obj.errcode == '407') or (obj.errcon == \ elif (obj.errcode == '407') or (obj.errcon == \
'registration-required'): 'registration-required'):
self.handle_gc_error(gc_control, _('Unable to join group chat'), self.handle_gc_error(gc_control, _('Unable to join group chat'),
@ -679,12 +679,12 @@ class Interface:
'\n') '\n')
sectext += _('You are currently connected without your OpenPGP ' sectext += _('You are currently connected without your OpenPGP '
'key.') 'key.')
dialogs.WarningDialog(_('Your passphrase is incorrect'), sectext) dialogs.WarningDialog(_('Wrong passphrase'), sectext)
else: else:
path = gtkgui_helpers.get_icon_path('gtk-dialog-warning', 48) path = gtkgui_helpers.get_icon_path('gtk-dialog-warning', 48)
account = obj.conn.name account = obj.conn.name
notify.popup('warning', account, account, '', path, notify.popup('warning', account, account, '', path,
_('OpenPGP Passphrase Incorrect'), _('Wrong OpenPGP passphrase'),
_('You are currently connected without your OpenPGP key.')) _('You are currently connected without your OpenPGP key.'))
self.forget_gpg_passphrase(obj.keyID) self.forget_gpg_passphrase(obj.keyID)
@ -698,7 +698,7 @@ class Interface:
obj.secure_tuple) obj.secure_tuple)
dialogs.PassphraseDialog(_('Certificate Passphrase Required'), dialogs.PassphraseDialog(_('Certificate Passphrase Required'),
_('Enter the passphrase for the certificate for account %s') % \ _('Enter the certificate passphrase for account %s') % \
obj.conn.name, ok_handler=on_ok, cancel_handler=on_cancel) obj.conn.name, ok_handler=on_ok, cancel_handler=on_cancel)
def handle_event_gpg_password_required(self, obj): def handle_event_gpg_password_required(self, obj):
@ -720,7 +720,7 @@ class Interface:
def on_no(): def on_no():
obj.callback(False) obj.callback(False)
dialogs.YesNoDialog(_('OpenPGP key not trusted'), _('The OpenPGP key ' dialogs.YesNoDialog(_('Untrusted OpenPGP key'), _('The OpenPGP key '
'used to encrypt this chat is not trusted. Do you really want to ' 'used to encrypt this chat is not trusted. Do you really want to '
'encrypt this message?'), checktext=_('_Do not ask me again'), 'encrypt this message?'), checktext=_('_Do not ask me again'),
on_response_yes=on_yes, on_response_no=on_no) on_response_yes=on_yes, on_response_no=on_no)
@ -868,10 +868,10 @@ class Interface:
if not gajim.config.get('notify_on_new_gmail_email'): if not gajim.config.get('notify_on_new_gmail_email'):
return return
path = gtkgui_helpers.get_icon_path('gajim-new_email_recv', 48) path = gtkgui_helpers.get_icon_path('gajim-new_email_recv', 48)
title = _('New mail on %(gmail_mail_address)s') % \ title = _('New e-mail on %(gmail_mail_address)s') % \
{'gmail_mail_address': jid} {'gmail_mail_address': jid}
text = i18n.ngettext('You have %d new mail conversation', text = i18n.ngettext('You have %d new e-mail conversation',
'You have %d new mail conversations', gmail_new_messages, 'You have %d new e-mail conversations', gmail_new_messages,
gmail_new_messages, gmail_new_messages) gmail_new_messages, gmail_new_messages)
if gajim.config.get('notify_on_new_gmail_email_extra'): if gajim.config.get('notify_on_new_gmail_email_extra'):
@ -1084,8 +1084,8 @@ class Interface:
sender).get_shown_name() sender).get_shown_name()
filename = os.path.basename(file_props.file_name) filename = os.path.basename(file_props.file_name)
if event_type == _('File Transfer Completed'): if event_type == _('File Transfer Completed'):
txt = _('You successfully received %(filename)s from ' txt = _('%(filename)s received from %(name)s.')\
'%(name)s.') % {'filename': filename, 'name': name} % {'filename': filename, 'name': name}
img_name = 'gajim-ft_done' img_name = 'gajim-ft_done'
elif event_type == _('File Transfer Stopped'): elif event_type == _('File Transfer Stopped'):
txt = _('File transfer of %(filename)s from %(name)s ' txt = _('File transfer of %(filename)s from %(name)s '
@ -1376,11 +1376,11 @@ class Interface:
pritext = _('Error verifying SSL certificate') pritext = _('Error verifying SSL certificate')
sectext = _('There was an error verifying the SSL certificate of your ' sectext = _('There was an error verifying the SSL certificate of your '
'jabber server: %(error)s\nDo you still want to connect to this ' 'XMPP server: %(error)s\nDo you still want to connect to this '
'server?') % {'error': obj.error_text} 'server?') % {'error': obj.error_text}
if obj.error_num in (18, 27): if obj.error_num in (18, 27):
checktext1 = _('Add this certificate to the list of trusted ' checktext1 = _('Add this certificate to the list of trusted '
'certificates.\nSHA1 fingerprint of the certificate:\n%s' 'certificates.\nSHA-1 fingerprint of the certificate:\n%s'
'\nSHA256 fingerprint of the certificate:\n%s') % \ '\nSHA256 fingerprint of the certificate:\n%s') % \
(obj.fingerprint_sha1, obj.fingerprint_sha256) (obj.fingerprint_sha1, obj.fingerprint_sha256)
else: else:
@ -1423,7 +1423,7 @@ class Interface:
pritext = _('SSL certificate error') pritext = _('SSL certificate error')
sectext = _('It seems the SSL certificate of account %(account)s has ' sectext = _('It seems the SSL certificate of account %(account)s has '
'changed and is not valid or your connection is being hacked.\n\n' 'changed and is not valid or your connection is being compromised.\n\n'
'Old SHA-1 fingerprint: ' 'Old SHA-1 fingerprint: '
'%(old_sha1)s\nOld SHA-256 fingerprint: %(old_sha256)s\n\n' '%(old_sha1)s\nOld SHA-256 fingerprint: %(old_sha256)s\n\n'
'New SHA-1 fingerprint: %(new_sha1)s\nNew SHA-256 fingerprint: ' 'New SHA-1 fingerprint: %(new_sha1)s\nNew SHA-256 fingerprint: '

View File

@ -538,7 +538,7 @@ def get_transport_menu(contact, account):
menu = Gtk.Menu() menu = Gtk.Menu()
# Send single message # Send single message
item = Gtk.MenuItem.new_with_mnemonic(_('Send Single _Message...')) item = Gtk.MenuItem.new_with_mnemonic(_('Send Single _Message'))
item.connect('activate', roster.on_send_single_message_menuitem_activate, item.connect('activate', roster.on_send_single_message_menuitem_activate,
account, contact) account, contact)
menu.append(item) menu.append(item)
@ -571,7 +571,7 @@ def get_transport_menu(contact, account):
menu.append(item) menu.append(item)
# Execute Command # Execute Command
item = Gtk.MenuItem.new_with_mnemonic(_('E_xecute Command...')) item = Gtk.MenuItem.new_with_mnemonic(_('E_xecute Command'))
menu.append(item) menu.append(item)
item.connect('activate', roster.on_execute_command, contact, account, item.connect('activate', roster.on_execute_command, contact, account,
contact.resource) contact.resource)
@ -592,7 +592,7 @@ def get_transport_menu(contact, account):
item.set_sensitive(False) item.set_sensitive(False)
# Rename # Rename
item = Gtk.MenuItem.new_with_mnemonic(_('_Rename...')) item = Gtk.MenuItem.new_with_mnemonic(_('_Rename'))
manage_transport_submenu.append(item) manage_transport_submenu.append(item)
item.connect('activate', roster.on_rename, 'agent', jid, account) item.connect('activate', roster.on_rename, 'agent', jid, account)
if gajim.account_is_disconnected(account): if gajim.account_is_disconnected(account):

View File

@ -78,7 +78,7 @@ def parseOpts():
_('Options:') + \ _('Options:') + \
'\n -h, --help ' + \ '\n -h, --help ' + \
_('Show this help message and exit') + \ _('Show this help message and exit') + \
'\n -c, --config-path ' + _('Set logs directory') + '\n') '\n -c, --config-path ' + _('Choose folder for logfile') + '\n')
sys.exit() sys.exit()
elif o in ('-c', '--config-path'): elif o in ('-c', '--config-path'):
config_path = a config_path = a
@ -165,7 +165,7 @@ class HistoryManager:
self.jids_listview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) self.jids_listview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)
renderer_text = Gtk.CellRendererText() # holds jid renderer_text = Gtk.CellRendererText() # holds jid
col = Gtk.TreeViewColumn(_('Jabber ID'), renderer_text, text=0) col = Gtk.TreeViewColumn(_('JID'), renderer_text, text=0)
self.jids_listview.append_column(col) self.jids_listview.append_column(col)
self.jids_listview.get_selection().connect('changed', self.jids_listview.get_selection().connect('changed',
@ -266,7 +266,7 @@ class HistoryManager:
_('Normally allocated database size will not be freed, ' _('Normally allocated database size will not be freed, '
'it will just become reusable. If you really want to reduce ' 'it will just become reusable. If you really want to reduce '
'database filesize, click YES, else click NO.' 'database filesize, click YES, else click NO.'
'\n\nIn case you click YES, please wait...'), '\n\nIn case you click YES, please wait'),
on_response_yes=on_yes, on_response_no=on_no) on_response_yes=on_yes, on_response_no=on_no)
dialog.set_title(_('Database Cleanup')) dialog.set_title(_('Database Cleanup'))
button_box = dialog.get_children()[0].get_children()[1] button_box = dialog.get_children()[0].get_children()[1]
@ -483,7 +483,7 @@ class HistoryManager:
xml.connect_signals(self) xml.connect_signals(self)
dlg = xml.get_object('filechooserdialog') dlg = xml.get_object('filechooserdialog')
dlg.set_title(_('Exporting History Logs...')) dlg.set_title(_('Exporting History Logs'))
dlg.set_current_folder(gajim.HOME_DIR) dlg.set_current_folder(gajim.HOME_DIR)
dlg.props.do_overwrite_confirmation = True dlg.props.do_overwrite_confirmation = True
response = dlg.run() response = dlg.run()
@ -597,13 +597,13 @@ class HistoryManager:
if paths_len == 1: if paths_len == 1:
jid_id = '<i>%s</i>' % liststore[list_of_paths[0]][0] jid_id = '<i>%s</i>' % liststore[list_of_paths[0]][0]
pri_text = _('Do you really want to delete the logs of %(jid)s?') \ pri_text = _('Do you wish to delete all correspondence with %(jid)s?') \
% {'jid': jid_id} % {'jid': jid_id}
else: else:
pri_text = _( pri_text = _(
'Do you really want to delete logs of the selected contacts?') 'Do you wish to delete all correspondence with the selected contacts?')
dialog = dialogs.ConfirmationDialog('', dialog = dialogs.ConfirmationDialog('',
_('This is an irreversible operation.'), on_response_ok=(on_ok, _('This can not be undone.'), on_response_ok=(on_ok,
liststore, list_of_paths)) liststore, list_of_paths))
dialog.set_title(_('Deletion Confirmation')) dialog.set_title(_('Deletion Confirmation'))
dialog.set_markup(pri_text) dialog.set_markup(pri_text)

View File

@ -914,7 +914,7 @@ class HtmlTextView(Gtk.TextView):
text = getattr(tag, 'title', False) text = getattr(tag, 'title', False)
if text: if text:
if len(text) > 50: if len(text) > 50:
text = text[:47] + '...' text = text[:47] + ''
position = w.get_origin()[1:] position = w.get_origin()[1:]
self.tooltip.show_tooltip(text, 8, position[1] + y) self.tooltip.show_tooltip(text, 8, position[1] + y)
@ -1284,7 +1284,7 @@ return faciter(n,1)</pre>
<p> <p>
<strong>examples@example.org wrote:</strong> <strong>examples@example.org wrote:</strong>
</p> </p>
<p>this cite - bla bla bla, smile- :-) ...</p> <p>this cite - bla bla bla, smile- :-) </p>
</cite> </cite>
<div> <div>
<p>some text</p> <p>some text</p>

View File

@ -45,7 +45,7 @@ def on_suspend(active):
return return
# we're going for suspend, let's disconnect # we're going for suspend, let's disconnect
log.debug('System suspend detected, disconnecting from network...') log.debug('System suspend detected, disconnecting from network')
for name, conn in gajim.connections.items(): for name, conn in gajim.connections.items():
if gajim.account_is_connected(name): if gajim.account_is_connected(name):
conn.old_show = gajim.SHOW_LIST[conn.connected] conn.old_show = gajim.SHOW_LIST[conn.connected]

View File

@ -526,9 +526,9 @@ class MessageWindow(object):
if window_mode == MessageWindowMgr.ONE_MSG_WINDOW_PERTYPE: if window_mode == MessageWindowMgr.ONE_MSG_WINDOW_PERTYPE:
# Show the plural form since number of tabs > 1 # Show the plural form since number of tabs > 1
if self.type_ == 'chat': if self.type_ == 'chat':
label = _('Chats') label = _('?Noun:Chats')
elif self.type_ == 'gc': elif self.type_ == 'gc':
label = _('Group Chats') label = _('Groupchats')
else: else:
label = _('Private Chats') label = _('Private Chats')
elif window_mode == MessageWindowMgr.ONE_MSG_WINDOW_ALWAYS_WITH_ROSTER: elif window_mode == MessageWindowMgr.ONE_MSG_WINDOW_ALWAYS_WITH_ROSTER:

View File

@ -382,7 +382,7 @@ class DesktopNotification:
if self.text: if self.text:
text = self.text text = self.text
if len(self.text) > 200: if len(self.text) > 200:
text = '%s\n...' % self.text[:200] text = '%s\n' % self.text[:200]
else: else:
text = ' ' text = ' '
if os.environ.get('KDE_FULL_SESSION') == 'true': if os.environ.get('KDE_FULL_SESSION') == 'true':

View File

@ -60,7 +60,7 @@ class ProfileWindow:
self.avatar_mime_type = None self.avatar_mime_type = None
self.avatar_encoded = None self.avatar_encoded = None
self.message_id = self.statusbar.push(self.context_id, self.message_id = self.statusbar.push(self.context_id,
_('Retrieving profile...')) _('Retrieving profile'))
self.update_progressbar_timeout_id = GLib.timeout_add(100, self.update_progressbar_timeout_id = GLib.timeout_add(100,
self.update_progressbar) self.update_progressbar)
self.remove_statusbar_timeout_id = None self.remove_statusbar_timeout_id = None
@ -386,7 +386,7 @@ class ProfileWindow:
gajim.nicks[self.account] = nick gajim.nicks[self.account] = nick
gajim.connections[self.account].send_vcard(vcard_) gajim.connections[self.account].send_vcard(vcard_)
self.message_id = self.statusbar.push(self.context_id, self.message_id = self.statusbar.push(self.context_id,
_('Sending profile...')) _('Sending profile'))
self.progressbar.show() self.progressbar.show()
self.update_progressbar_timeout_id = GLib.timeout_add(100, self.update_progressbar_timeout_id = GLib.timeout_add(100,
self.update_progressbar) self.update_progressbar)

View File

@ -2068,8 +2068,8 @@ class RosterWindow:
Authorize a contact (by re-sending auth menuitem) Authorize a contact (by re-sending auth menuitem)
""" """
gajim.connections[account].send_authorization(jid) gajim.connections[account].send_authorization(jid)
dialogs.InformationDialog(_('Authorization has been sent'), dialogs.InformationDialog(_('Authorization sent'),
_('Now "%s" will know your status.') %jid) _('"%s" will now see your status.') %jid)
def req_sub(self, widget, jid, txt, account, groups=None, nickname=None, def req_sub(self, widget, jid, txt, account, groups=None, nickname=None,
auto_auth=False): auto_auth=False):
@ -2107,7 +2107,7 @@ class RosterWindow:
Revoke a contact's authorization Revoke a contact's authorization
""" """
gajim.connections[account].refuse_authorization(jid) gajim.connections[account].refuse_authorization(jid)
dialogs.InformationDialog(_('Authorization has been removed'), dialogs.InformationDialog(_('Authorization removed'),
_('Now "%s" will always see you as offline.') %jid) _('Now "%s" will always see you as offline.') %jid)
def set_state(self, account, state): def set_state(self, account, state):
@ -2982,7 +2982,7 @@ class RosterWindow:
pritext = _('You are about to block a contact. Are you sure you want' pritext = _('You are about to block a contact. Are you sure you want'
' to continue?') ' to continue?')
sectext = _('This contact will see you offline and you will not ' sectext = _('This contact will see you offline and you will not '
'receive messages he will send you.') 'receive messages it sends you.')
dialogs.ConfirmationDialogCheck(pritext, sectext, dialogs.ConfirmationDialogCheck(pritext, sectext,
_('_Do not ask me again'), on_response_ok=_block_it) _('_Do not ask me again'), on_response_ok=_block_it)
@ -3661,7 +3661,7 @@ class RosterWindow:
pritext = _('You are about to send a custom status. Are you sure you ' pritext = _('You are about to send a custom status. Are you sure you '
'want to continue?') 'want to continue?')
sectext = _('This contact will temporarily see you as %(status)s, ' sectext = _('This contact will temporarily see you as %(status)s, '
'but only until you change your status. Then he or she will see ' 'but only until you change your status. Then they will see '
'your global status.') % {'status': show} 'your global status.') % {'status': show}
dialogs.ConfirmationDialogCheck(pritext, sectext, dialogs.ConfirmationDialogCheck(pritext, sectext,
_('_Do not ask me again'), on_response_ok=send_it) _('_Do not ask me again'), on_response_ok=send_it)
@ -4490,7 +4490,7 @@ class RosterWindow:
'want to continue?') 'want to continue?')
sectext = _('Metacontacts are a way to regroup several contacts in one ' sectext = _('Metacontacts are a way to regroup several contacts in one '
'line. Generally it is used when the same person has several ' 'line. Generally it is used when the same person has several '
'Jabber accounts or transport accounts.') 'XMPP accounts or transport accounts.')
dlg = dialogs.ConfirmationDialogCheck(pritext, sectext, dlg = dialogs.ConfirmationDialogCheck(pritext, sectext,
_('_Do not ask me again'), on_response_ok=merge_contacts) _('_Do not ask me again'), on_response_ok=merge_contacts)
if not confirm_metacontacts: # First time we see this window if not confirm_metacontacts: # First time we see this window
@ -5363,7 +5363,7 @@ class RosterWindow:
newitem = Gtk.SeparatorMenuItem.new() # separator newitem = Gtk.SeparatorMenuItem.new() # separator
gc_sub_menu.append(newitem) gc_sub_menu.append(newitem)
newitem = Gtk.MenuItem.new_with_mnemonic(_('_Manage Bookmarks...')) newitem = Gtk.MenuItem.new_with_mnemonic(_('_Manage Bookmarks'))
newitem.connect('activate', self.on_manage_bookmarks_menuitem_activate) newitem.connect('activate', self.on_manage_bookmarks_menuitem_activate)
gc_sub_menu.append(newitem) gc_sub_menu.append(newitem)
gc_sub_menu.show_all() gc_sub_menu.show_all()
@ -5513,7 +5513,7 @@ class RosterWindow:
self.on_publish_location_toggled) self.on_publish_location_toggled)
pep_config = Gtk.MenuItem.new_with_label( pep_config = Gtk.MenuItem.new_with_label(
_('Configure Services...')) _('Configure Services'))
item = Gtk.SeparatorMenuItem.new() item = Gtk.SeparatorMenuItem.new()
pep_submenu.append(item) pep_submenu.append(item)
pep_config.set_sensitive(True) pep_config.set_sensitive(True)
@ -5722,7 +5722,7 @@ class RosterWindow:
menu.append(item) menu.append(item)
# Rename # Rename
rename_item = Gtk.MenuItem.new_with_mnemonic(_('_Rename...')) rename_item = Gtk.MenuItem.new_with_mnemonic(_('_Rename'))
menu.append(rename_item) menu.append(rename_item)
rename_item.connect('activate', self.on_rename, 'group', group, rename_item.connect('activate', self.on_rename, 'group', group,
account) account)
@ -5845,7 +5845,7 @@ class RosterWindow:
menu.append(item) menu.append(item)
# Edit Groups # Edit Groups
edit_groups_item = Gtk.MenuItem.new_with_mnemonic(_('Edit _Groups...')) edit_groups_item = Gtk.MenuItem.new_with_mnemonic(_('Edit _Groups'))
manage_contacts_submenu.append(edit_groups_item) manage_contacts_submenu.append(edit_groups_item)
edit_groups_item.connect('activate', self.on_edit_groups, list_) edit_groups_item.connect('activate', self.on_edit_groups, list_)
@ -6296,7 +6296,7 @@ class RosterWindow:
img.set_from_file(path) img.set_from_file(path)
# sensitivity to False because by default we're offline # sensitivity to False because by default we're offline
self.status_message_menuitem_iter = liststore.append( self.status_message_menuitem_iter = liststore.append(
[_('Change Status Message...'), img, '', False]) [_('Change Status Message'), img, '', False])
# Add a Separator (self._iter_is_separator() checks on string SEPARATOR) # Add a Separator (self._iter_is_separator() checks on string SEPARATOR)
liststore.append(['SEPARATOR', None, '', True]) liststore.append(['SEPARATOR', None, '', True])

View File

@ -232,7 +232,7 @@ class StatusIcon:
item = Gtk.SeparatorMenuItem.new() item = Gtk.SeparatorMenuItem.new()
sub_menu.append(item) sub_menu.append(item)
item = Gtk.MenuItem.new_with_mnemonic(_('_Change Status Message...')) item = Gtk.MenuItem.new_with_mnemonic(_('_Change Status Message'))
sub_menu.append(item) sub_menu.append(item)
item.connect('activate', self.on_change_status_message_activate) item.connect('activate', self.on_change_status_message_activate)
@ -332,7 +332,7 @@ class StatusIcon:
newitem = Gtk.SeparatorMenuItem.new() # separator newitem = Gtk.SeparatorMenuItem.new() # separator
gc_sub_menu.append(newitem) gc_sub_menu.append(newitem)
newitem = Gtk.MenuItem.new_with_mnemonic(_('_Manage Bookmarks...')) newitem = Gtk.MenuItem.new_with_mnemonic(_('_Manage Bookmarks'))
newitem.connect('activate', newitem.connect('activate',
gajim.interface.roster.on_manage_bookmarks_menuitem_activate) gajim.interface.roster.on_manage_bookmarks_menuitem_activate)
gc_sub_menu.append(newitem) gc_sub_menu.append(newitem)

View File

@ -835,13 +835,13 @@ class FileTransfersTooltip(BaseTooltip):
file_name = file_props.name file_name = file_props.name
properties.append((_('Name: '), GLib.markup_escape_text(file_name))) properties.append((_('Name: '), GLib.markup_escape_text(file_name)))
if file_props.type_ == 'r': if file_props.type_ == 'r':
type_ = _('Download') type_ = _('?Noun:Download')
actor = _('Sender: ') actor = _('Sender: ')
sender = file_props.sender.split('/')[0] sender = file_props.sender.split('/')[0]
name = gajim.contacts.get_first_contact_from_jid( name = gajim.contacts.get_first_contact_from_jid(
file_props.tt_account, sender).get_shown_name() file_props.tt_account, sender).get_shown_name()
else: else:
type_ = _('Upload') type_ = _('?Noun:Upload')
actor = _('Recipient: ') actor = _('Recipient: ')
receiver = file_props.receiver receiver = file_props.receiver
if hasattr(receiver, 'name'): if hasattr(receiver, 'name'):

View File

@ -438,13 +438,13 @@ class VcardWindow:
subscription_label.set_text(uf_sub) subscription_label.set_text(uf_sub)
eb = self.xml.get_object('subscription_label_eventbox') eb = self.xml.get_object('subscription_label_eventbox')
if self.contact.sub == 'from': if self.contact.sub == 'from':
tt_text = _("This contact is interested in your presence information, but you are not interested in his/her presence") tt_text = _("This contact is interested in your presence information, but you are not interested in their presence")
elif self.contact.sub == 'to': elif self.contact.sub == 'to':
tt_text = _("You are interested in the contact's presence information, but he/she is not interested in yours") tt_text = _("You are interested in the contact's presence information, but it is not mutual")
elif self.contact.sub == 'both': elif self.contact.sub == 'both':
tt_text = _("You and the contact are interested in each other's presence information") tt_text = _("The contact and you want to exchange presence information")
else: # None else: # None
tt_text = _("You are not interested in the contact's presence, and neither he/she is interested in yours") tt_text = _("You and the contact have a mutual disinterest in each-others presence information")
eb.set_tooltip_text(tt_text) eb.set_tooltip_text(tt_text)
uf_ask = helpers.get_uf_ask(self.contact.ask) uf_ask = helpers.get_uf_ask(self.contact.ask)