From 123dd8f011f1596fa3d6a5a8d0e549f6efdeb491 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Thu, 20 Aug 2015 00:55:10 +0100 Subject: [PATCH] [WebUI] Fix i18n issue in Connection Manager The status strings were incorrectly marked for translation which when combined with some translations using 'connected' and 'online' as the same word resulted in users being unabe to connect to running daemon. * Removed translation markup from json_api but left as original capitalised word in case other third-party scripts do comparison on these status strings. * Added translation markup prior to displaying ConnectionManager using template. * Reworded password prompt and added translation markup. * Update gettext.js --- deluge/ui/web/gettext.js | 39 ++++++++++++------- .../ui/web/js/deluge-all/ConnectionManager.js | 26 ++++++++----- deluge/ui/web/json_api.py | 14 +++---- 3 files changed, 48 insertions(+), 31 deletions(-) diff --git a/deluge/ui/web/gettext.js b/deluge/ui/web/gettext.js index 0ff128609..563e64d87 100644 --- a/deluge/ui/web/gettext.js +++ b/deluge/ui/web/gettext.js @@ -80,7 +80,7 @@ GetText.add('80 KiB/s', '${escape(_("80 KiB/s"))}') // QueuePage.js:69 GetText.add('Active Torrents', '${escape(_("Active Torrents"))}') -// EditTrackersWindow.js:112, ConnectionManager.js:100, AddConnectionWindow.js:56, Toolbar.js:58, AddTrackerWindow.js:57, UrlWindow.js:50, FileWindow.js:53, AddWindow.js:52 +// EditTrackersWindow.js:112, ConnectionManager.js:110, AddConnectionWindow.js:56, Toolbar.js:58, AddTrackerWindow.js:57, UrlWindow.js:50, FileWindow.js:53, AddWindow.js:52 GetText.add('Add', '${escape(_("Add"))}') // AddConnectionWindow.js:40 @@ -167,6 +167,9 @@ GetText.add('Certificate', '${escape(_("Certificate"))}') // InterfacePage.js:117 GetText.add('Change', '${escape(_("Change"))}') +// ConnectionManager.js:284 +GetText.add('Change Default Password', '${escape(_("Change Default Password"))}') + // InterfacePage.js:224 GetText.add('Change Successful', '${escape(_("Change Successful"))}') @@ -182,10 +185,10 @@ GetText.add('Compact', '${escape(_("Compact"))}') // InterfacePage.js:105 GetText.add('Confirm Password', '${escape(_("Confirm Password"))}') -// ConnectionManager.js:55, ConnectionManager.js:184 +// ConnectionManager.js:55, ConnectionManager.js:193 GetText.add('Connect', '${escape(_("Connect"))}') -// ConnectionManager.js:177, ConnectionManager.js:225 +// ConnectionManager.js:79 GetText.add('Connected', '${escape(_("Connected"))}') // Menus.js:142 @@ -233,10 +236,10 @@ GetText.add('Details', '${escape(_("Details"))}') // EncryptionPage.js:65, EncryptionPage.js:82 GetText.add('Disabled', '${escape(_("Disabled"))}') -// ConnectionManager.js:179 +// ConnectionManager.js:188 GetText.add('Disconnect', '${escape(_("Disconnect"))}') -// Menus.js:257, Deluge.js:156 +// Menus.js:257, Deluge.js:163 GetText.add('Do Not Download', '${escape(_("Do Not Download"))}') // QueuePage.js:107 @@ -293,7 +296,7 @@ GetText.add('Encrypt entire stream', '${escape(_("Encrypt entire stream"))}') // EncryptionPage.js:41 GetText.add('Encryption', '${escape(_("Encryption"))}') -// ConnectionManager.js:308, ConnectionManager.js:364, AddConnectionWindow.js:103, UrlWindow.js:116, FileWindow.js:103, AddWindow.js:211 +// ConnectionManager.js:316, ConnectionManager.js:372, AddConnectionWindow.js:103, UrlWindow.js:116, FileWindow.js:103, AddWindow.js:211 GetText.add('Error', '${escape(_("Error"))}') // Menus.js:253 @@ -371,16 +374,16 @@ GetText.add('Hash', '${escape(_("Hash"))}') // Toolbar.js:107 GetText.add('Help', '${escape(_("Help"))}') -// Menus.js:267, Deluge.js:158 +// Menus.js:267, Deluge.js:165 GetText.add('High Priority', '${escape(_("High Priority"))}') -// Menus.js:272, Deluge.js:159 +// Menus.js:272, Deluge.js:166 GetText.add('Highest Priority', '${escape(_("Highest Priority"))}') // FileBrowser.js:56 GetText.add('Home', '${escape(_("Home"))}') -// ConnectionManager.js:74, AddConnectionWindow.js:66, ProxyField.js:74 +// ConnectionManager.js:84, AddConnectionWindow.js:66, ProxyField.js:74 GetText.add('Host', '${escape(_("Host"))}') // BandwidthPage.js:122 @@ -509,7 +512,7 @@ GetText.add('New Password', '${escape(_("New Password"))}') // ProxyField.js:55 GetText.add('None', '${escape(_("None"))}') -// Menus.js:262, Deluge.js:157 +// Menus.js:262, Deluge.js:164 GetText.add('Normal Priority', '${escape(_("Normal Priority"))}') // Statusbar.js:39 @@ -518,7 +521,7 @@ GetText.add('Not Connected', '${escape(_("Not Connected"))}') // AddWindow.js:212 GetText.add('Not a valid torrent', '${escape(_("Not a valid torrent"))}') -// ConnectionManager.js:180, ConnectionManager.js:188 +// ConnectionManager.js:76 GetText.add('Offline', '${escape(_("Offline"))}') // EditTrackersWindow.js:57, OtherLimitWindow.js:73, PreferencesWindow.js:108 @@ -527,6 +530,9 @@ GetText.add('Ok', '${escape(_("Ok"))}') // InterfacePage.js:97 GetText.add('Old Password', '${escape(_("Old Password"))}') +// ConnectionManager.js:73 +GetText.add('Online', '${escape(_("Online"))}') + // Menus.js:99, OptionsTab.js:49, OptionsTab.js:40, DownloadsPage.js:129 GetText.add('Options', '${escape(_("Options"))}') @@ -620,7 +626,7 @@ GetText.add('Rate limit IP overhead', '${escape(_("Rate limit IP overhead"))}') // TorrentGrid.js:162 GetText.add('Ratio', '${escape(_("Ratio"))}') -// EditTrackersWindow.js:122, ConnectionManager.js:107, Toolbar.js:64, AddWindow.js:112 +// EditTrackersWindow.js:122, ConnectionManager.js:117, Toolbar.js:64, AddWindow.js:112 GetText.add('Remove', '${escape(_("Remove"))}') // Menus.js:230, RemoveWindow.js:39, RemoveWindow.js:57 @@ -701,7 +707,7 @@ GetText.add('Socksv5', '${escape(_("Socksv5"))}') // ProxyField.js:58 GetText.add('Socksv5 with Auth', '${escape(_("Socksv5 with Auth"))}') -// ConnectionManager.js:191 +// ConnectionManager.js:200 GetText.add('Start Daemon', '${escape(_("Start Daemon"))}') // Sidebar.js:34 @@ -710,7 +716,7 @@ GetText.add('State', '${escape(_("State"))}') // ConnectionManager.js:68, StatusTab.js:39, DetailsTab.js:52 GetText.add('Status', '${escape(_("Status"))}') -// ConnectionManager.js:115, ConnectionManager.js:197, ConnectionManager.js:328 +// ConnectionManager.js:125, ConnectionManager.js:206, ConnectionManager.js:336 GetText.add('Stop Daemon', '${escape(_("Stop Daemon"))}') // OptionsTab.js:225 @@ -815,9 +821,12 @@ GetText.add('Use SSL (paths relative to Deluge config folder)', '${escape(_("Use // AddConnectionWindow.js:83, ProxyField.js:93 GetText.add('Username', '${escape(_("Username"))}') -// ConnectionManager.js:80 +// ConnectionManager.js:90 GetText.add('Version', '${escape(_("Version"))}') +// ConnectionManager.js:285 +GetText.add('We recommend changing the default password. Would you like to change it now?', '${escape(_("We recommend changing the default password. Would you like to change it now?"))}') + // ProxyPage.js:58 GetText.add('Web Seed', '${escape(_("Web Seed"))}') diff --git a/deluge/ui/web/js/deluge-all/ConnectionManager.js b/deluge/ui/web/js/deluge-all/ConnectionManager.js index c7f8121b9..ece843515 100644 --- a/deluge/ui/web/js/deluge-all/ConnectionManager.js +++ b/deluge/ui/web/js/deluge-all/ConnectionManager.js @@ -68,6 +68,16 @@ Deluge.ConnectionManager = Ext.extend(Ext.Window, { header: _('Status'), width: .24, sortable: true, + tpl: new Ext.XTemplate( + '', + _('Online'), + '', + '', + _('Offline'), + '', + '', + _('Connected'), + ''), dataIndex: 'status' }, { id:'host', @@ -172,12 +182,11 @@ Deluge.ConnectionManager = Ext.extend(Ext.Window, { */ updateButtons: function(record) { var button = this.buttons[1], status = record.get('status'); - // Update the Connect/Disconnect button - if (status == _('Connected')) { + if (status == 'Connected') { button.enable(); button.setText(_('Disconnect')); - } else if (status == _('Offline')) { + } else if (status == 'Offline') { button.disable(); } else { button.enable(); @@ -185,7 +194,7 @@ Deluge.ConnectionManager = Ext.extend(Ext.Window, { } // Update the Stop/Start Daemon button - if (status == _('Offline')) { + if (status == 'Offline') { if (record.get('host') == '127.0.0.1' || record.get('host') == 'localhost') { this.stopHostButton.enable(); this.stopHostButton.setText(_('Start Daemon')); @@ -222,7 +231,7 @@ Deluge.ConnectionManager = Ext.extend(Ext.Window, { var selected = this.list.getSelectedRecords()[0]; if (!selected) return; - if (selected.get('status') == _('Connected')) { + if (selected.get('status') == 'Connected') { deluge.client.web.disconnect({ success: function(result) { this.update(this); @@ -272,10 +281,9 @@ Deluge.ConnectionManager = Ext.extend(Ext.Window, { // private onLogin: function() { if (deluge.config.first_login) { - Ext.MessageBox.confirm('Change password', - 'As this is your first login, we recommend that you ' + - 'change your password. Would you like to ' + - 'do this now?', function(res) { + Ext.MessageBox.confirm(_('Change Default Password'), + _('We recommend changing the default password.

Would you like to change it now?'), + function(res) { this.checkConnected(); if (res == 'yes') { deluge.preferences.show(); diff --git a/deluge/ui/web/json_api.py b/deluge/ui/web/json_api.py index a70d174ce..f2e6f5661 100644 --- a/deluge/ui/web/json_api.py +++ b/deluge/ui/web/json_api.py @@ -780,7 +780,7 @@ class WebApi(JSONComponent): Return the hosts in the hostlist. """ log.debug("get_hosts called") - return [(tuple(host[HOSTS_ID:HOSTS_PORT+1]) + (_("Offline"),)) for host in self.host_list["hosts"]] + return [(tuple(host[HOSTS_ID:HOSTS_PORT+1]) + ("Offline",)) for host in self.host_list["hosts"]] @export def get_host_status(self, host_id): @@ -799,32 +799,32 @@ class WebApi(JSONComponent): except TypeError, e: host = None port = None - return response(_("Offline")) + return response("Offline") def on_connect(connected, c, host_id): def on_info(info, c): c.disconnect() - return response(_("Online"), info) + return response("Online", info) def on_info_fail(reason, c): c.disconnect() - return response(_("Offline")) + return response("Offline") if not connected: - return response(_("Offline")) + return response("Offline") return c.daemon.info( ).addCallback(on_info, c ).addErrback(on_info_fail, c) def on_connect_failed(reason, host_id): - return response(_("Offline")) + return response("Offline") if client.connected() and (host, port, "localclient" if not user and host in ("127.0.0.1", "localhost") else user) == client.connection_info(): def on_info(info): - return response(_("Connected"), info) + return response("Connected", info) return client.daemon.info().addCallback(on_info) else: