improve some strings
This commit is contained in:
		
							parent
							
								
									f7d9c16735
								
							
						
					
					
						commit
						faa88819a1
					
				
					 22 changed files with 74 additions and 73 deletions
				
			
		| 
						 | 
				
			
			@ -3,11 +3,11 @@ Categories=Network;InstantMessaging;GTK;GNOME;
 | 
			
		|||
Name=Gajim
 | 
			
		||||
GenericName=Jabber IM Client
 | 
			
		||||
Comment=A GTK+ Jabber client
 | 
			
		||||
# Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
 | 
			
		||||
#Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
 | 
			
		||||
Keywords=chat;messaging;im;xmpp;bonjour;voip;
 | 
			
		||||
Version=1.0
 | 
			
		||||
Exec=gajim %u
 | 
			
		||||
# Translators: Do NOT translate or transliterate this text (this is an icon file name)!
 | 
			
		||||
#Translators: Do NOT translate or transliterate this text (this is an icon file name)!
 | 
			
		||||
Icon=org.gajim.Gajim
 | 
			
		||||
StartupNotify=true
 | 
			
		||||
StartupWMClass=Gajim
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -922,7 +922,7 @@ class ChatControl(ChatControlBase):
 | 
			
		|||
            if not self.session.verified_identity:
 | 
			
		||||
                ChatControlBase.print_conversation_line(self, _("Remote contact's identity not verified. Click the shield button for more details."), 'status', '', None)
 | 
			
		||||
        else:
 | 
			
		||||
            msg = _('E2E encryption disabled')
 | 
			
		||||
            msg = _('end-to-end encryption disabled')
 | 
			
		||||
            ChatControlBase.print_conversation_line(self, msg, 'status', '', None)
 | 
			
		||||
 | 
			
		||||
        self._show_lock_image(e2e_is_active, 'E2E',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1170,8 +1170,8 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
 | 
			
		|||
                contact = app.contacts.get_contact(self.account, gc_contact.jid)
 | 
			
		||||
                if not contact or contact.sub not in ('both', 'to'):
 | 
			
		||||
                    prim_text = _('Really send file?')
 | 
			
		||||
                    sec_text = _('If you send a file to %s, he/she will know your '
 | 
			
		||||
                            'real JID.') % gc_contact.name
 | 
			
		||||
                    sec_text = _('If you send a file to %s, your real JID will '
 | 
			
		||||
                        'be revealed.') % gc_contact.name
 | 
			
		||||
                    dialog = dialogs.NonModalConfirmationDialog(prim_text,
 | 
			
		||||
                        sec_text, on_response_ok=(_on_ok, gc_contact))
 | 
			
		||||
                    dialog.popup()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -296,7 +296,7 @@ class StandardGroupChatCommands(CommandContainer):
 | 
			
		|||
            'room_jid': self.room_jid}
 | 
			
		||||
 | 
			
		||||
    @command(raw=True, empty=True)
 | 
			
		||||
    @doc(_("Join a group chat given by a jid"))
 | 
			
		||||
    @doc(_("Join a group chat given by a JID"))
 | 
			
		||||
    def join(self, jid):
 | 
			
		||||
        if '@' not in jid:
 | 
			
		||||
            jid = jid + '@' + app.get_server_from_jid(self.room_jid)
 | 
			
		||||
| 
						 | 
				
			
			@ -310,9 +310,9 @@ class StandardGroupChatCommands(CommandContainer):
 | 
			
		|||
 | 
			
		||||
    @command(raw=True, empty=True)
 | 
			
		||||
    @doc(_("""
 | 
			
		||||
    Ban user by a nick or a jid from a groupchat
 | 
			
		||||
    Ban user by a nick or a JID from a groupchat
 | 
			
		||||
 | 
			
		||||
    If given nickname is not found it will be treated as a jid.
 | 
			
		||||
    If given nickname is not found it will be treated as a JID.
 | 
			
		||||
    """))
 | 
			
		||||
    def ban(self, who, reason):
 | 
			
		||||
        if who in app.contacts.get_nick_list(self.account, self.room_jid):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -127,7 +127,7 @@ class Config:
 | 
			
		|||
            'ascii_emoticons': [opt_bool, True, _('Enable ASCII emoticons'), True],
 | 
			
		||||
            'ascii_formatting': [ opt_bool, True,
 | 
			
		||||
                    _('Treat * / _ pairs as possible formatting characters.'), True],
 | 
			
		||||
            'show_ascii_formatting_chars': [ opt_bool, True, _('If True, do not '
 | 
			
		||||
            'show_ascii_formatting_chars': [ opt_bool, True, _('If true, do not '
 | 
			
		||||
                    'remove */_ . So *abc* will be bold but with * * not removed.')],
 | 
			
		||||
            'rst_formatting_outgoing_messages': [ opt_bool, False,
 | 
			
		||||
                    _('Uses ReStructured text markup to send HTML, plus ascii formatting if selected. For syntax, see http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html (If you want to use this, install docutils)')],
 | 
			
		||||
| 
						 | 
				
			
			@ -162,7 +162,7 @@ class Config:
 | 
			
		|||
            'single-msg-y-position': [opt_int, 0],
 | 
			
		||||
            'single-msg-width': [opt_int, 400],
 | 
			
		||||
            'single-msg-height': [opt_int, 280],
 | 
			
		||||
            'save-roster-position': [opt_bool, True, _('If True, Gajim will save roster position when hiding roster, and restore it when showing roster.')],
 | 
			
		||||
            'save-roster-position': [opt_bool, True, _('If true, Gajim will save roster position when hiding roster, and restore it when showing roster.')],
 | 
			
		||||
            'roster_x-position': [ opt_int, 0 ],
 | 
			
		||||
            'roster_y-position': [ opt_int, 0 ],
 | 
			
		||||
            'roster_width': [ opt_int, 200 ],
 | 
			
		||||
| 
						 | 
				
			
			@ -184,13 +184,13 @@ class Config:
 | 
			
		|||
            'muc_restore_lines': [opt_int, 100, _('How many lines to request from server when entering a groupchat. -1 means no limit')],
 | 
			
		||||
            'muc_restore_timeout': [opt_int, -1, _('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_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 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).')],
 | 
			
		||||
            'last_roster_visible': [opt_bool, True],
 | 
			
		||||
            'key_up_lines': [opt_int, 25, _('How many lines to store for Ctrl+KeyUP.')],
 | 
			
		||||
            'version': [ opt_str, gajim.__version__ ], # which version created the config
 | 
			
		||||
            'search_engine': [opt_str, 'https://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.")],
 | 
			
		||||
            'dictionary_url': [opt_str, 'WIKTIONARY', _("Either custom URL with %%s in it where %%s is the word/phrase or 'WIKTIONARY' which means use Wikitionary.")],
 | 
			
		||||
            'always_english_wikipedia': [opt_bool, False],
 | 
			
		||||
            'always_english_wiktionary': [opt_bool, True],
 | 
			
		||||
            'remote_control': [opt_bool, False, _('If checked, Gajim can be controlled remotely using gajim-remote.'), True],
 | 
			
		||||
| 
						 | 
				
			
			@ -204,7 +204,7 @@ class Config:
 | 
			
		|||
            '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],
 | 
			
		||||
            'file_transfers_port': [opt_int, 28011],
 | 
			
		||||
            'ft_add_hosts_to_send': [opt_str, '', _('Comma separated list of hosts that we send, in addition of local interfaces, for File Transfer in case of address translation/port forwarding.')],
 | 
			
		||||
            'ft_add_hosts_to_send': [opt_str, '', _('Comma separated list of sent hosts, in addition of local interfaces, for File Transfer in case of address translation/port forwarding.')],
 | 
			
		||||
            'conversation_font': [opt_str, ''],
 | 
			
		||||
            'use_kib_mib': [opt_bool, False, _('IEC standard says KiB = 1024 bytes, KB = 1000 bytes.')],
 | 
			
		||||
            'notify_on_all_muc_messages': [opt_bool, False],
 | 
			
		||||
| 
						 | 
				
			
			@ -235,10 +235,10 @@ class Config:
 | 
			
		|||
            'notification_position_x': [opt_int, -1],
 | 
			
		||||
            'notification_position_y': [opt_int, -1],
 | 
			
		||||
            'muc_highlight_words': [opt_str, '', _('A semicolon-separated list of words that will be highlighted in group chats.')],
 | 
			
		||||
            '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 notification icon is used.')],
 | 
			
		||||
            'hide_on_roster_x_button': [opt_bool, False, _('If True, Gajim hides the Roster window on pressing the X button instead of minimizing into the Dock.')],
 | 
			
		||||
            '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],
 | 
			
		||||
            '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 notification icon is used.')],
 | 
			
		||||
            'hide_on_roster_x_button': [opt_bool, False, _('If true, Gajim hides the Roster window on pressing the X button instead of minimizing into the Dock.')],
 | 
			
		||||
            '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_avatars_in_roster': [opt_bool, True, '', True],
 | 
			
		||||
            'show_mood_in_roster': [opt_bool, True, '', True],
 | 
			
		||||
            'show_activity_in_roster': [opt_bool, True, '', True],
 | 
			
		||||
| 
						 | 
				
			
			@ -252,10 +252,10 @@ class Config:
 | 
			
		|||
            'just_connected_bg_color': [opt_str, '#adc3c6', _('Background color of contacts when they just signed in.')],
 | 
			
		||||
            'just_disconnected_bg_color': [opt_str, '#ab6161', _('Background color of contacts when they just signed out.')],
 | 
			
		||||
            'restored_messages_color': [opt_color, '#555753'],
 | 
			
		||||
            'restored_messages_small': [opt_bool, True, _('If True, restored messages will use a smaller font than the default one.')],
 | 
			
		||||
            '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, _('Don\'t show roster in the system taskbar.')],
 | 
			
		||||
            '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.')],
 | 
			
		||||
            '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 group chat. Turn this option to False to stop sending sha info in group chat presences.')],
 | 
			
		||||
            'one_message_window': [opt_str, 'always',
 | 
			
		||||
| 
						 | 
				
			
			@ -263,7 +263,7 @@ class Config:
 | 
			
		|||
                    _('Controls the window where new messages are placed.\n\'always\' - All messages are sent to a single window.\n\'always_with_roster\' - Like \'always\' but the messages are in a single window along with the roster.\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) is sent to a specific window.')],
 | 
			
		||||
            'show_roster_on_startup':[opt_str, 'always', _('Show roster on startup.\n\'always\' - Always show roster.\n\'never\' - Never show roster.\n\'last_state\' - Restore the last state roster.')],
 | 
			
		||||
            '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.')],
 | 
			
		||||
            'escape_key_closes': [opt_bool, True, _('If true, pressing the escape key closes a tab/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 group chat occupants list in group chat window.')],
 | 
			
		||||
| 
						 | 
				
			
			@ -271,19 +271,19 @@ class Config:
 | 
			
		|||
            'chat_merge_consecutive_nickname_indent': [opt_str, '  ', _('Indentation when using merge consecutive nickname.')],
 | 
			
		||||
            'gc_nicknames_colors': [ opt_str, '#4e9a06:#f57900:#ce5c00:#3465a4:#204a87:#75507b:#5c3566:#c17d11:#8f5902:#ef2929:#cc0000:#a40000', _('List of colors, separated by ":", 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.')],
 | 
			
		||||
            'confirm_metacontacts': [ opt_str, '', _('Should we show the confirm metacontacts creation dialog or not? Empty string means we never show the dialog.')],
 | 
			
		||||
            'confirm_block': [ opt_str, '', _('Should we show the confirm block contact dialog or not? Empty string means we never show the dialog.')],
 | 
			
		||||
            'confirm_custom_status': [ opt_str, '', _('Should we show the confirm custom status dialog or not? Empty string means we never show the dialog.')],
 | 
			
		||||
            'enable_negative_priority': [ opt_bool, False, _('If True, you will be able to set a negative priority to your account in account modification window. BE CAREFUL, when you are logged in with a negative priority, you will NOT receive any message from your server.')],
 | 
			
		||||
            'show_contacts_number': [opt_bool, True, _('If True, Gajim will show number of online and total contacts in account and group rows.')],
 | 
			
		||||
            'confirm_metacontacts': [ opt_str, '', _('Show the confirm metacontacts creation dialog or not? Empty string means never show the dialog.')],
 | 
			
		||||
            'confirm_block': [ opt_str, '', _('Show the confirm block contact dialog or not? Empty string means never show the dialog.')],
 | 
			
		||||
            'confirm_custom_status': [ opt_str, '', _('Show the confirm custom status dialog or not? Empty string means never show the dialog.')],
 | 
			
		||||
            'enable_negative_priority': [ opt_bool, False, _('If true, you will be able to set a negative priority to your account in account modification window. BE CAREFUL, when you are logged in with a negative priority, you will NOT receive any message from your server.')],
 | 
			
		||||
            'show_contacts_number': [opt_bool, True, _('If true, Gajim will show number of online and total contacts in account and group rows.')],
 | 
			
		||||
            'treat_incoming_messages': [ opt_str, '', _('Can be empty, \'chat\' or \'normal\'. If not empty, treat all incoming messages as if they were of this type')],
 | 
			
		||||
            'scroll_roster_to_last_message': [opt_bool, True, _('If True, Gajim will scroll and select the contact who sent you the last message, if chat window is not already opened.')],
 | 
			
		||||
            'scroll_roster_to_last_message': [opt_bool, True, _('If true, Gajim will scroll and select the contact who sent you the last message, if chat window is not already opened.')],
 | 
			
		||||
            'change_status_window_timeout': [opt_int, 15, _('Time of inactivity needed before the change status window closes down.')],
 | 
			
		||||
            'max_conversation_lines': [opt_int, 500, _('Maximum number of lines that are printed in conversations. Oldest lines are cleared.')],
 | 
			
		||||
            '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.')],
 | 
			
		||||
            '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:// aesgcm://', _('Valid uri schemes. Only schemes in this list will be accepted as "real" uri. (mailto and xmpp are handled separately)'), True],
 | 
			
		||||
            '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],
 | 
			
		||||
            'audio_input_device': [opt_str, 'autoaudiosrc ! volume name=gajim_vol'],
 | 
			
		||||
            'audio_output_device': [opt_str, 'autoaudiosink'],
 | 
			
		||||
| 
						 | 
				
			
			@ -291,20 +291,20 @@ class Config:
 | 
			
		|||
            'video_output_device': [opt_str, 'autovideosink'],
 | 
			
		||||
            'video_framerate': [opt_str, '', _('Optionally fix jingle output video framerate. Example: 10/1 or 25/2')],
 | 
			
		||||
            'video_size': [opt_str, '', _('Optionally resize jingle output video. Example: 320x240')],
 | 
			
		||||
            '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_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 XMPP 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')],
 | 
			
		||||
            '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')],
 | 
			
		||||
            '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").')],
 | 
			
		||||
            'remember_opened_chat_controls': [ opt_bool, True, _('If enabled, Gajim will reopen chat windows that were opened last time Gajim was closed.')],
 | 
			
		||||
            'positive_184_ack': [ opt_bool, False, _('If enabled, Gajim will show an icon to show that sent message has been received by your contact')],
 | 
			
		||||
            'show_avatar_in_tabs': [ opt_bool, False, _('Show a mini avatar in chat window tabs and in window icon')],
 | 
			
		||||
            'use_keyring': [opt_bool, True, _('If True, Gajim will use the Systems Keyring to store account passwords.')],
 | 
			
		||||
            'use_keyring': [opt_bool, True, _('If true, Gajim will use the Systems Keyring to store account passwords.')],
 | 
			
		||||
            'pgp_encoding': [ opt_str, '', _('Sets the encoding used by python-gnupg'), True],
 | 
			
		||||
            'remote_commands': [opt_bool, False, _('If True, Gajim will execute XEP-0146 Commands.')],
 | 
			
		||||
            'remote_commands': [opt_bool, False, _('If true, Gajim will execute XEP-0146 Commands.')],
 | 
			
		||||
            'mam_blacklist': [opt_str, '', _('All non-compliant MAM Groupchats')],
 | 
			
		||||
    }, {})
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -332,7 +332,7 @@ class Config:
 | 
			
		|||
                    'autoconnect_as': [ opt_str, 'online', _('Status used to autoconnect as. Can be online, chat, away, xa, dnd, invisible. NOTE: this option is used only if restore_last_status is disabled'), True ],
 | 
			
		||||
                    'restore_last_status': [ opt_bool, False, _('If enabled, restore the last status that was used.') ],
 | 
			
		||||
                    'autoreconnect': [ opt_bool, True ],
 | 
			
		||||
                    'autoauth': [ opt_bool, False, _('If True, Contacts requesting authorization will be automatically accepted.')],
 | 
			
		||||
                    'autoauth': [ opt_bool, False, _('If true, Contacts requesting authorization will be automatically accepted.')],
 | 
			
		||||
                    'active': [ opt_bool, True, _('If False, this account will be disabled and will not appear in roster window.'), True],
 | 
			
		||||
                    'proxy': [ opt_str, '', '', True ],
 | 
			
		||||
                    'keyid': [ opt_str, '', '', True ],
 | 
			
		||||
| 
						 | 
				
			
			@ -365,7 +365,7 @@ class Config:
 | 
			
		|||
                    # send keepalive every N seconds of inactivity
 | 
			
		||||
                    'keep_alive_every_foo_secs': [ opt_int, 55 ],
 | 
			
		||||
                    'ping_alive_every_foo_secs': [ opt_int, 120 ],
 | 
			
		||||
                    'time_for_ping_alive_answer': [ opt_int, 60, _('How many seconds to wait for the answer of ping alive packet before we try to reconnect?') ],
 | 
			
		||||
                    'time_for_ping_alive_answer': [ opt_int, 60, _('How many seconds to wait for the answer of ping alive packet before trying to reconnect?') ],
 | 
			
		||||
                    # try for 1 minutes before giving up (aka. timeout after those seconds)
 | 
			
		||||
                    'try_connecting_for_foo_secs': [ opt_int, 60 ],
 | 
			
		||||
                    'http_auth': [opt_str, 'ask'], # yes, no, ask
 | 
			
		||||
| 
						 | 
				
			
			@ -373,7 +373,7 @@ class Config:
 | 
			
		|||
                    # proxy65 for FT
 | 
			
		||||
                    'file_transfer_proxies': [opt_str, ''],
 | 
			
		||||
                    'use_ft_proxies': [opt_bool, False, _('If checked, Gajim will use your IP and proxies defined in file_transfer_proxies option for file transfer.'), True],
 | 
			
		||||
                    'test_ft_proxies_on_startup': [opt_bool, False, _('If True, Gajim will test file transfer proxies on startup to be sure it works. Openfire\'s proxies are known to fail this test even if they work.')],
 | 
			
		||||
                    'test_ft_proxies_on_startup': [opt_bool, False, _('If true, Gajim will test file transfer proxies on startup to be sure it works. Openfire\'s proxies are known to fail this test even if they work.')],
 | 
			
		||||
                    'msgwin-x-position': [opt_int, -1], # Default is to let the wm decide
 | 
			
		||||
                    'msgwin-y-position': [opt_int, -1], # Default is to let the wm decide
 | 
			
		||||
                    'msgwin-width': [opt_int, 480],
 | 
			
		||||
| 
						 | 
				
			
			@ -407,7 +407,7 @@ class Config:
 | 
			
		|||
                    'oauth2_refresh_token': [ opt_str, '', _('Latest token for OAuth 2.0 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 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 chat window will be re-opened on next startup.')],
 | 
			
		||||
                    'recent_groupchats': [ opt_str, '' ],
 | 
			
		||||
                    'httpupload_verify': [ opt_bool, True, _('HTTP Upload: Enable HTTPS Verification')],
 | 
			
		||||
                    'filetransfer_preference' : [ opt_str, 'httpupload', _('Preferred file transfer mechanism for file drag&drop on chat window. Can be \'httpupload\' (default) or \'jingle\'')],
 | 
			
		||||
| 
						 | 
				
			
			@ -473,15 +473,15 @@ class Config:
 | 
			
		|||
                    'state_muc_directed_msg_color': [ opt_color, 'red2' ],
 | 
			
		||||
            }, {}),
 | 
			
		||||
            'contacts': ({
 | 
			
		||||
                    'speller_language': [ opt_str, '', _('Language for which we want to check misspelled words')],
 | 
			
		||||
                    'speller_language': [ opt_str, '', _('Language for which misspelled words will be checked')],
 | 
			
		||||
            }, {}),
 | 
			
		||||
            'encryption': ({'encryption': [ opt_str, '', _('The currently active encryption for that contact')],
 | 
			
		||||
            },{}),
 | 
			
		||||
            'rooms': ({
 | 
			
		||||
                    'speller_language': [ opt_str, '', _('Language for which we want to check misspelled words')],
 | 
			
		||||
                    'speller_language': [ opt_str, '', _('Language for which misspelled words will be checked')],
 | 
			
		||||
                    '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, _('Minutes of backlog to request when entering a groupchat. -1 means no limit, -2 means global value')],
 | 
			
		||||
                    'notify_on_all_messages': [opt_bool, False, _('State whether we want a notification for every message in this room')],
 | 
			
		||||
                    'notify_on_all_messages': [opt_bool, False, _('State whether a notification is created for every message in this room')],
 | 
			
		||||
            }, {}),
 | 
			
		||||
            '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.')],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -121,7 +121,7 @@ class JingleRTPContent(JingleContent):
 | 
			
		|||
                InformationEvent(
 | 
			
		||||
                    None, conn=self.session.connection, level='error',
 | 
			
		||||
                    pri_txt=_('%s configuration error') % text.capitalize(),
 | 
			
		||||
                    sec_txt=_('Couldn’t setup %(text)s. Check your '
 | 
			
		||||
                    sec_txt=_('Couldn’t set up %(text)s. Check your '
 | 
			
		||||
                    'configuration.\n\nPipeline was:\n%(pipeline)s\n\n'
 | 
			
		||||
                    'Error was:\n%(error)s') % {'text': text,
 | 
			
		||||
                    'pipeline': pipeline, 'error': str(e)}))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -213,7 +213,7 @@ LOCATION_DATA = {
 | 
			
		|||
        'street':       _('street'),
 | 
			
		||||
        'text':         _('text'),
 | 
			
		||||
        'timestamp':    _('timestamp'),
 | 
			
		||||
        'uri':          _('uri')}
 | 
			
		||||
        'uri':          _('URI')}
 | 
			
		||||
 | 
			
		||||
from gi.repository import GLib
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -802,7 +802,7 @@ audio-mic-volume-low</property>
 | 
			
		|||
                    <property name="visible">True</property>
 | 
			
		||||
                    <property name="can_focus">True</property>
 | 
			
		||||
                    <property name="receives_default">True</property>
 | 
			
		||||
                    <property name="tooltip_text" translatable="yes">Choose an encryption</property>
 | 
			
		||||
                    <property name="tooltip_text" translatable="yes">Choose encryption</property>
 | 
			
		||||
                    <property name="relief">none</property>
 | 
			
		||||
                    <child>
 | 
			
		||||
                      <placeholder/>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -280,7 +280,7 @@
 | 
			
		|||
                        <property name="visible">True</property>
 | 
			
		||||
                        <property name="can_focus">True</property>
 | 
			
		||||
                        <property name="receives_default">True</property>
 | 
			
		||||
                        <property name="tooltip_text" translatable="yes">Choose an encryption</property>
 | 
			
		||||
                        <property name="tooltip_text" translatable="yes">Choose encryption</property>
 | 
			
		||||
                        <property name="relief">none</property>
 | 
			
		||||
                        <child>
 | 
			
		||||
                          <placeholder/>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,7 +48,7 @@
 | 
			
		|||
      <object class="GtkSwitch" id="autojoin_switch">
 | 
			
		||||
        <property name="visible">True</property>
 | 
			
		||||
        <property name="can_focus">True</property>
 | 
			
		||||
        <property name="tooltip_text" translatable="yes">Join this Groupchat everytime Gajim is started</property>
 | 
			
		||||
        <property name="tooltip_text" translatable="yes">Join this Groupchat every time Gajim is started</property>
 | 
			
		||||
        <property name="halign">start</property>
 | 
			
		||||
        <property name="valign">center</property>
 | 
			
		||||
        <property name="active">True</property>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,7 +75,7 @@
 | 
			
		|||
                    </child>
 | 
			
		||||
                    <child>
 | 
			
		||||
                      <object class="GtkButton" id="install_plugin_button">
 | 
			
		||||
                        <property name="label" translatable="yes">Install from zip</property>
 | 
			
		||||
                        <property name="label" translatable="yes">Install from ZIP</property>
 | 
			
		||||
                        <property name="visible">True</property>
 | 
			
		||||
                        <property name="can_focus">True</property>
 | 
			
		||||
                        <property name="receives_default">True</property>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2659,7 +2659,7 @@ to discover one from server.</property>
 | 
			
		|||
                            <property name="visible">True</property>
 | 
			
		||||
                            <property name="can_focus">True</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 End-to-End 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="xalign">0</property>
 | 
			
		||||
                            <property name="draw_indicator">True</property>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,7 +21,7 @@
 | 
			
		|||
              <object class="GtkShortcutsShortcut">
 | 
			
		||||
                <property name="visible">1</property>
 | 
			
		||||
                <property name="accelerator"><shift>Return <ctrl>Return</property>
 | 
			
		||||
                <property name="title" translatable="yes">Create a new line</property>
 | 
			
		||||
                <property name="title" translatable="yes">Add new line</property>
 | 
			
		||||
              </object>
 | 
			
		||||
            </child>
 | 
			
		||||
            <child>
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +42,7 @@
 | 
			
		|||
              <object class="GtkShortcutsShortcut">
 | 
			
		||||
                <property name="visible">1</property>
 | 
			
		||||
                <property name="accelerator"><ctrl>Up</property>
 | 
			
		||||
                <property name="title" translatable="yes">Previous sent message</property>
 | 
			
		||||
                <property name="title" translatable="yes">Previously sent message</property>
 | 
			
		||||
              </object>
 | 
			
		||||
            </child>
 | 
			
		||||
            <child>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -155,7 +155,7 @@ messages = {
 | 
			
		|||
 | 
			
		||||
    'unsecure-error': Message(
 | 
			
		||||
        _('Unsecure'),
 | 
			
		||||
        _('Server returned unsecure transport (http)'),
 | 
			
		||||
        _('Server returned unsecure transport (HTTP)'),
 | 
			
		||||
        ErrorDialog),
 | 
			
		||||
 | 
			
		||||
    'httpupload-response-error': Message(
 | 
			
		||||
| 
						 | 
				
			
			@ -170,7 +170,7 @@ messages = {
 | 
			
		|||
 | 
			
		||||
    'httpupload-encryption-not-available': Message(
 | 
			
		||||
        _('Encryption Error'),
 | 
			
		||||
        _('For the choosen encryption is no encryption method available'),
 | 
			
		||||
        _('For the choosen encryption there is no encryption method available'),
 | 
			
		||||
        ErrorDialog),
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4073,9 +4073,9 @@ class Archiving313PreferencesWindow:
 | 
			
		|||
        except Exception as e:
 | 
			
		||||
            log.debug(e)
 | 
			
		||||
        if not obj:
 | 
			
		||||
            msg = _('We got no response from the Server')
 | 
			
		||||
            msg = _('No response from the Server')
 | 
			
		||||
        else:
 | 
			
		||||
            msg = _('We received an error: {}').format(self.error_msg)
 | 
			
		||||
            msg = _('Error received: {}').format(self.error_msg)
 | 
			
		||||
 | 
			
		||||
        dialog = HigDialog(
 | 
			
		||||
            self.window, Gtk.MessageType.INFO, Gtk.ButtonsType.OK,
 | 
			
		||||
| 
						 | 
				
			
			@ -5369,7 +5369,7 @@ Expires on: %(eo)s
 | 
			
		|||
<b>Fingerprint</b>
 | 
			
		||||
SHA-1 Fingerprint: %(sha1)s
 | 
			
		||||
 | 
			
		||||
SHA256 Fingerprint: %(sha256)s
 | 
			
		||||
SHA-256 Fingerprint: %(sha256)s
 | 
			
		||||
''') % {
 | 
			
		||||
            'scn': subject.commonName, 'sorg': subject.organizationName,
 | 
			
		||||
            'sou': subject.organizationalUnitName,
 | 
			
		||||
| 
						 | 
				
			
			@ -5456,15 +5456,15 @@ class ProgressWindow(Gtk.ApplicationWindow):
 | 
			
		|||
        if self.file != obj.file:
 | 
			
		||||
            return
 | 
			
		||||
        if obj.status == 'request':
 | 
			
		||||
            self.label.set_text(_('Requesting HTTP Upload Slot...'))
 | 
			
		||||
            self.label.set_text(_('Requesting HTTP Upload Slot…'))
 | 
			
		||||
        elif obj.status == 'close':
 | 
			
		||||
            self.destroy()
 | 
			
		||||
        elif obj.status == 'upload':
 | 
			
		||||
            self.label.set_text(_('Uploading file via HTTP File Upload...'))
 | 
			
		||||
            self.label.set_text(_('Uploading file via HTTP File Upload…'))
 | 
			
		||||
        elif obj.status == 'update':
 | 
			
		||||
            self.update_progress(obj.seen, obj.total)
 | 
			
		||||
        elif obj.status == 'encrypt':
 | 
			
		||||
            self.label.set_text(_('Encrypting file...'))
 | 
			
		||||
            self.label.set_text(_('Encrypting file…'))
 | 
			
		||||
 | 
			
		||||
    def _pulse_progressbar(self):
 | 
			
		||||
        self.progressbar.pulse()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,14 +48,14 @@ class FeaturesWindow:
 | 
			
		|||
            _('Bonjour / Zeroconf'): (self.zeroconf_available,
 | 
			
		||||
                _('Serverless chatting with autodetected clients in a local network.'),
 | 
			
		||||
                _('Requires python-avahi.'),
 | 
			
		||||
                _('Requires pybonjour and bonjour SDK running (http://developer.apple.com/opensource/).')),
 | 
			
		||||
                _('Requires pybonjour and bonjour SDK running (https://developer.apple.com/opensource/).')),
 | 
			
		||||
            _('Command line'): (self.dbus_available,
 | 
			
		||||
                _('A script to control Gajim via commandline.'),
 | 
			
		||||
                _('Requires python-dbus.'),
 | 
			
		||||
                _('Feature not available under Windows.')),
 | 
			
		||||
            _('OpenPGP message encryption'): (self.gpg_available,
 | 
			
		||||
                _('Ability to encrypting chat messages with OpenPGP.'),
 | 
			
		||||
                _('Requires gpg and python-gnupg (http://code.google.com/p/python-gnupg/).'),
 | 
			
		||||
                _('Requires gpg and python-gnupg (%(url)s).') % {'url': 'https://bitbucket.org/vinay.sajip/python-gnupg'},
 | 
			
		||||
                _('Requires gpg.exe in PATH.')),
 | 
			
		||||
            _('Password encryption'): (self.some_keyring_available,
 | 
			
		||||
                _('Passwords can be stored securely and not just in plaintext.'),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -78,7 +78,7 @@ class GajimApplication(Gtk.Application):
 | 
			
		|||
        self.add_main_option('separate', ord('s'), GLib.OptionFlags.NONE,
 | 
			
		||||
                             GLib.OptionArg.NONE,
 | 
			
		||||
                             _('Separate profile files completely (even '
 | 
			
		||||
                               'history db and plugins)'))
 | 
			
		||||
                               'history DB and plugins)'))
 | 
			
		||||
        self.add_main_option('verbose', ord('v'), GLib.OptionFlags.NONE,
 | 
			
		||||
                             GLib.OptionArg.NONE,
 | 
			
		||||
                             _('Print XML stanzas and other debug '
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1389,7 +1389,7 @@ class Interface:
 | 
			
		|||
        if obj.error_num in (18, 27):
 | 
			
		||||
            checktext1 = _('Add this certificate to the list of trusted '
 | 
			
		||||
            'certificates.\nSHA-1 fingerprint of the certificate:\n%(sha1)s'
 | 
			
		||||
            '\nSHA256 fingerprint of the certificate:\n%(sha256)s') % \
 | 
			
		||||
            '\nSHA-256 fingerprint of the certificate:\n%(sha256)s') % \
 | 
			
		||||
            {'sha1': obj.fingerprint_sha1, 'sha256': obj.fingerprint_sha256}
 | 
			
		||||
        else:
 | 
			
		||||
            checktext1 = ''
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -609,8 +609,8 @@ Build dynamic Application Menus
 | 
			
		|||
def get_singlechat_menu(control_id):
 | 
			
		||||
    singlechat_menu = [
 | 
			
		||||
        (_('Send File…'), [
 | 
			
		||||
            ('win.send-file-httpupload-', _('Upload File…')),
 | 
			
		||||
            ('win.send-file-jingle-', _('Send File Directly…')),
 | 
			
		||||
            ('win.send-file-httpupload-', 'HTTP Upload'),
 | 
			
		||||
            ('win.send-file-jingle-', 'Jingle'),
 | 
			
		||||
            ]),
 | 
			
		||||
        ('win.invite-contacts-', _('Invite Contacts')),
 | 
			
		||||
        ('win.add-to-roster-', _('Add to Roster')),
 | 
			
		||||
| 
						 | 
				
			
			@ -728,11 +728,11 @@ def get_account_menu(account):
 | 
			
		|||
        sub menu: list
 | 
			
		||||
    '''
 | 
			
		||||
    account_menu = [
 | 
			
		||||
            ('-add-contact', _('Add Contact...')),
 | 
			
		||||
            ('-add-contact', _('Add Contact…')),
 | 
			
		||||
            ('-join-groupchat', _('Join Group Chat')),
 | 
			
		||||
            ('-profile', _('Profile')),
 | 
			
		||||
            ('-services', _('Discover Services')),
 | 
			
		||||
            ('-start-single-chat', _('Send Single Message...')),
 | 
			
		||||
            ('-start-single-chat', _('Send Single Message…')),
 | 
			
		||||
            (_('Advanced'), [
 | 
			
		||||
                ('-archive', _('Archiving Preferences')),
 | 
			
		||||
                ('-sync-history', _('Synchronise History')),
 | 
			
		||||
| 
						 | 
				
			
			@ -741,10 +741,10 @@ def get_account_menu(account):
 | 
			
		|||
                ('-xml-console', _('XML Console'))
 | 
			
		||||
                ]),
 | 
			
		||||
            (_('Admin'), [
 | 
			
		||||
                ('-send-server-message', _('Send Server Message...')),
 | 
			
		||||
                ('-set-motd', _('Set MOTD...')),
 | 
			
		||||
                ('-update-motd', _('Update MOTD...')),
 | 
			
		||||
                ('-delete-motd', _('Delete MOTD...'))
 | 
			
		||||
                ('-send-server-message', _('Send Server Message…')),
 | 
			
		||||
                ('-set-motd', _('Set MOTD…')),
 | 
			
		||||
                ('-update-motd', _('Update MOTD…')),
 | 
			
		||||
                ('-delete-motd', _('Delete MOTD…'))
 | 
			
		||||
                ]),
 | 
			
		||||
            ]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,7 +40,7 @@ class MessageTextView(Gtk.TextView):
 | 
			
		|||
    chat/groupchat windows
 | 
			
		||||
    """
 | 
			
		||||
    UNDO_LIMIT = 20
 | 
			
		||||
    PLACEHOLDER = _('Write a message..')
 | 
			
		||||
    PLACEHOLDER = _('Write a message…')
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        Gtk.TextView.__init__(self)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -100,6 +100,7 @@ text=None, timeout=-1):
 | 
			
		|||
                 'type_': GLib.Variant('s', type_)}
 | 
			
		||||
        variant_dict = GLib.Variant('a{sv}', dict_)
 | 
			
		||||
        action = 'app.{}-open-event'.format(account)
 | 
			
		||||
        #Button in notification
 | 
			
		||||
        notification.add_button_with_target(_('Open'), action, variant_dict)
 | 
			
		||||
        notification.set_default_action_and_target(action, variant_dict)
 | 
			
		||||
        if event_type in (_('New Message'), _('New Single Message'),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2108,7 +2108,7 @@ class RosterWindow:
 | 
			
		|||
                if keyid and not app.connections[account].gpg:
 | 
			
		||||
                    dialogs.WarningDialog(_('OpenPGP is not usable'),
 | 
			
		||||
                        _('Gajim needs python-gnupg >= 0.3.8\n'
 | 
			
		||||
                          'Beware there is an incompatible python package called gnupg.\n'
 | 
			
		||||
                          'Beware there is an incompatible Python package called gnupg.\n'
 | 
			
		||||
                          'You will be connected to %s without OpenPGP.') % account)
 | 
			
		||||
 | 
			
		||||
        self.send_status_continue(account, status, txt, auto, to)
 | 
			
		||||
| 
						 | 
				
			
			@ -4277,7 +4277,7 @@ class RosterWindow:
 | 
			
		|||
            'want to continue?')
 | 
			
		||||
        sectext = _('Metacontacts are a way to regroup several contacts in one '
 | 
			
		||||
            'line. Generally it is used when the same person has several '
 | 
			
		||||
            'XMPP accounts or transport accounts.')
 | 
			
		||||
            'XMPP- or transport -accounts.')
 | 
			
		||||
        dlg = dialogs.ConfirmationDialogCheck(pritext, sectext,
 | 
			
		||||
            _('_Do not ask me again'), on_response_ok=merge_contacts)
 | 
			
		||||
        if not confirm_metacontacts: # First time we see this window
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue