From b21fa1fb3b56949f37b9fe738d3f5d569f41f462 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Fri, 22 Feb 2019 16:50:40 +1100 Subject: Remove obsolete test for sender closing a Receive Mode service via the web interface --- ...l_onionshare_receive_mode_sender_closed_test.py | 26 ---------------------- 1 file changed, 26 deletions(-) delete mode 100644 tests/local_onionshare_receive_mode_sender_closed_test.py diff --git a/tests/local_onionshare_receive_mode_sender_closed_test.py b/tests/local_onionshare_receive_mode_sender_closed_test.py deleted file mode 100644 index bfb9499a..00000000 --- a/tests/local_onionshare_receive_mode_sender_closed_test.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env python3 -import pytest -import unittest - -from .GuiReceiveTest import GuiReceiveTest - -class LocalReceiveModeSenderClosedTest(unittest.TestCase, GuiReceiveTest): - @classmethod - def setUpClass(cls): - test_settings = { - "receive_allow_receiver_shutdown": True - } - cls.gui = GuiReceiveTest.set_up(test_settings) - - @classmethod - def tearDownClass(cls): - GuiReceiveTest.tear_down() - - @pytest.mark.gui - def test_gui(self): - self.run_all_common_setup_tests() - self.run_all_receive_mode_tests(False, True) - self.run_receive_mode_sender_closed_tests(False) - -if __name__ == "__main__": - unittest.main() -- cgit v1.2.3-54-g00ecf From df657d8776e9cec87d1b863e1bcb2ac8076b405d Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Fri, 22 Feb 2019 16:53:51 +1100 Subject: remove actual sender_closed test function --- tests/GuiReceiveTest.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/tests/GuiReceiveTest.py b/tests/GuiReceiveTest.py index 8a03283e..fd0c9810 100644 --- a/tests/GuiReceiveTest.py +++ b/tests/GuiReceiveTest.py @@ -74,18 +74,6 @@ class GuiReceiveTest(GuiBaseTest): self.assertEqual(mode.history.completed_count, before_completed_count) self.assertEqual(len(mode.history.item_list.items), before_number_of_history_items) - def run_receive_mode_sender_closed_tests(self, public_mode): - '''Test that the share can be stopped by the sender in receive mode''' - if not public_mode: - path = 'http://127.0.0.1:{}/{}/close'.format(self.gui.app.port, self.gui.receive_mode.web.slug) - else: - path = 'http://127.0.0.1:{}/close'.format(self.gui.app.port) - response = requests.post(path) - self.server_is_stopped(self.gui.receive_mode, False) - self.web_server_is_stopped() - self.server_status_indicator_says_closed(self.gui.receive_mode, False) - - # 'Grouped' tests follow from here def run_all_receive_mode_setup_tests(self, public_mode): -- cgit v1.2.3-54-g00ecf From 9c5adaee276c1c6bab3c8ce4ba397128aff2e731 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sat, 23 Feb 2019 13:16:06 +1100 Subject: Make progress, noscript warning, and flashes appear above the form, but beneath the logo --- share/static/css/style.css | 10 +++++----- share/templates/receive.html | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/share/static/css/style.css b/share/static/css/style.css index 0751d306..3b6a3785 100644 --- a/share/static/css/style.css +++ b/share/static/css/style.css @@ -176,7 +176,7 @@ ul.flashes { margin: 0; padding: 0; width: 800px; - max-width: 90%; + max-width: 500px; margin: 0 auto; } @@ -184,7 +184,7 @@ ul.flashes li { margin: 0 0 5px 0; padding: 5px; list-style: none; - text-align: left; + text-align: center; } li.error { @@ -225,12 +225,12 @@ li.info { div#noscript { border: 1px solid #e55454; - text-align: left; + text-align: center; color: #e55454; padding: 1em; line-height: 150%; - max-width: 900px; - margin: 100px 2em 0 2em; + max-width: 500px; + margin: 0 auto; } div#noscript a, div#noscript a:visited { diff --git a/share/templates/receive.html b/share/templates/receive.html index a557a967..2fff3cdd 100644 --- a/share/templates/receive.html +++ b/share/templates/receive.html @@ -18,11 +18,6 @@

Send Files

Select the files you want to send, then click "Send Files"...

-
-

-

-
-
@@ -51,6 +46,11 @@
+
+

+

+
+ -- cgit v1.2.3-54-g00ecf From 06d50df10e450af47210422b2d2b5058827cc791 Mon Sep 17 00:00:00 2001 From: ZeroDot1 Date: Sat, 23 Feb 2019 19:37:56 +0100 Subject: Add asynchronous functions to the templates to reduce page load times. Asynchronous functions for CSS and JS. --- share/templates/403.html | 29 +++++---- share/templates/404.html | 29 +++++---- share/templates/denied.html | 17 +++-- share/templates/receive.html | 10 +-- share/templates/receive_noscript_xss.html | 4 +- share/templates/send.html | 105 +++++++++++++++--------------- share/templates/thankyou.html | 39 ++++++----- 7 files changed, 124 insertions(+), 109 deletions(-) diff --git a/share/templates/403.html b/share/templates/403.html index df81f3e7..a084ef48 100644 --- a/share/templates/403.html +++ b/share/templates/403.html @@ -1,16 +1,19 @@ - - OnionShare: 403 Forbidden - - - - -
-
-

-

You are not allowed to perform that action at this time.

-
-
- + + + OnionShare: 403 Forbidden + + + + + +
+
+

+

You are not allowed to perform that action at this time.

+
+
+ + diff --git a/share/templates/404.html b/share/templates/404.html index 264ca517..ad46e28c 100644 --- a/share/templates/404.html +++ b/share/templates/404.html @@ -1,16 +1,19 @@ - - OnionShare: 404 Not Found - - - - -
-
-

-

404 Not Found

-
-
- + + + OnionShare: 404 Not Found + + + + + +
+
+

+

404 Not Found

+
+
+ + diff --git a/share/templates/denied.html b/share/templates/denied.html index 5d411d62..94fb379b 100644 --- a/share/templates/denied.html +++ b/share/templates/denied.html @@ -1,10 +1,13 @@ - - OnionShare - - - -

OnionShare download in progress

- + + + OnionShare + + + + +

OnionShare download in progress

+ + diff --git a/share/templates/receive.html b/share/templates/receive.html index a557a967..a114e0b1 100644 --- a/share/templates/receive.html +++ b/share/templates/receive.html @@ -2,8 +2,8 @@ OnionShare - - + + @@ -49,10 +49,10 @@ to Standard or turn off your Tor Browser's NoScript XSS setting.

- + - - + + diff --git a/share/templates/receive_noscript_xss.html b/share/templates/receive_noscript_xss.html index bf846b03..f6a959c8 100644 --- a/share/templates/receive_noscript_xss.html +++ b/share/templates/receive_noscript_xss.html @@ -2,8 +2,8 @@ OnionShare - - + + diff --git a/share/templates/send.html b/share/templates/send.html index e7e1fde0..72342224 100644 --- a/share/templates/send.html +++ b/share/templates/send.html @@ -1,56 +1,59 @@ - - OnionShare - - - - - - -
-
-
    -
  • Total size: {{ filesize_human }} {% if is_zipped %} (compressed){% endif %}
  • - {% if slug %} -
  • Download Files
  • - {% else %} -
  • Download Files
  • - {% endif %} -
-
- -

OnionShare

-
+ + OnionShare + + + + + + + + +
+
+
    +
  • Total size: {{ filesize_human }} {% if is_zipped %} (compressed){% endif %}
  • + {% if slug %} +
  • Download Files
  • + {% else %} +
  • Download Files
  • + {% endif %} +
+
+ +

OnionShare

+
+ + + + + + + + {% for info in file_info.dirs %} + + + + + + {% endfor %} + {% for info in file_info.files %} + + + + + + {% endfor %} +
FilenameSize
+ + {{ info.basename }} + {{ info.size_human }}
+ + {{ info.basename }} + {{ info.size_human }}
+ + - - - - - - - {% for info in file_info.dirs %} - - - - - - {% endfor %} - {% for info in file_info.files %} - - - - - - {% endfor %} -
FilenameSize
- - {{ info.basename }} - {{ info.size_human }}
- - {{ info.basename }} - {{ info.size_human }}
- - diff --git a/share/templates/thankyou.html b/share/templates/thankyou.html index 64c8b369..e1a94784 100644 --- a/share/templates/thankyou.html +++ b/share/templates/thankyou.html @@ -1,22 +1,25 @@ - - OnionShare is closed - - - - -
- -

OnionShare

-
-
-
-

-

Thank you for using OnionShare

-

You may now close this window.

-
-
- + + OnionShare is closed + + + + + +
+ +

OnionShare

+
+ +
+
+

+

Thank you for using OnionShare

+

You may now close this window.

+
+
+ + -- cgit v1.2.3-54-g00ecf From 3f7c83c321ee6047bb21f843aa9ac994410a27f1 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 24 Feb 2019 10:22:44 +1100 Subject: Move the noscript warning to top of page and make it appear less of an error, per more recommendations (and with supplied svg) from @ninavizz --- share/static/css/style.css | 12 ++++++++---- share/templates/receive.html | 29 +++++++++++++++-------------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/share/static/css/style.css b/share/static/css/style.css index 3b6a3785..2600ab35 100644 --- a/share/static/css/style.css +++ b/share/static/css/style.css @@ -224,17 +224,21 @@ li.info { } div#noscript { - border: 1px solid #e55454; text-align: center; - color: #e55454; + color: #d709df; padding: 1em; line-height: 150%; - max-width: 500px; + max-width: 700px; margin: 0 auto; } div#noscript a, div#noscript a:visited { - color: #e27f7f; + color: #d709df; +} + +div#noscript svg { + fill: #d709df; + max-width: 30px; } .disable-noscript-xss-wrapper { diff --git a/share/templates/receive.html b/share/templates/receive.html index 2fff3cdd..5b7ab23c 100644 --- a/share/templates/receive.html +++ b/share/templates/receive.html @@ -13,6 +13,20 @@
+ +
+

+ Fill 1 Created with Sketch. + Warning: Due to a bug in Tor Browser and Firefox, uploads + sometimes never finish. To upload reliably, either set your Tor Browser + security slider + to Standard or + turn off your Tor Browser's NoScript XSS setting.

+
+

Send Files

@@ -32,26 +46,13 @@
- -
-

- Warning: Due to a bug in Tor Browser and Firefox, uploads - sometimes never finish. To upload reliably, either set your Tor Browser - security slider - to Standard or - turn off your Tor Browser's NoScript XSS setting.

-
- -

+ -- cgit v1.2.3-54-g00ecf From a928b369b0cdf7ba6cc851a3b1fa071de7b7d47e Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Mon, 25 Feb 2019 14:26:29 +1100 Subject: remove unnecessary bit of css --- share/static/css/style.css | 1 - 1 file changed, 1 deletion(-) diff --git a/share/static/css/style.css b/share/static/css/style.css index 2600ab35..987f08f5 100644 --- a/share/static/css/style.css +++ b/share/static/css/style.css @@ -237,7 +237,6 @@ div#noscript a, div#noscript a:visited { } div#noscript svg { - fill: #d709df; max-width: 30px; } -- cgit v1.2.3-54-g00ecf From 93a4905b72049adcb37d71e6707c14321980fa27 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Tue, 26 Feb 2019 11:10:09 +1100 Subject: Use a custom Settings object in test_onionshare_web.py, rather than potentially load non-ephemeral settings --- tests/test_onionshare_web.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_onionshare_web.py b/tests/test_onionshare_web.py index 3f9540ae..0c29859b 100644 --- a/tests/test_onionshare_web.py +++ b/tests/test_onionshare_web.py @@ -41,7 +41,7 @@ RANDOM_STR_REGEX = re.compile(r'^[a-z2-7]+$') def web_obj(common_obj, mode, num_files=0): """ Creates a Web object, in either share mode or receive mode, ready for testing """ - common_obj.load_settings() + common_obj.settings = Settings(common_obj) strings.load_strings(common_obj) web = Web(common_obj, False, mode) web.generate_slug() -- cgit v1.2.3-54-g00ecf From 3e9eb66afd910e02c8fe8899b554d78a9295bf69 Mon Sep 17 00:00:00 2001 From: Vincent Bermel Date: Sat, 2 Mar 2019 09:06:15 +0100 Subject: Unhardcode linux launcher icon --- install/onionshare.desktop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/onionshare.desktop b/install/onionshare.desktop index a0861cf8..697668db 100644 --- a/install/onionshare.desktop +++ b/install/onionshare.desktop @@ -7,7 +7,7 @@ Comment[de]=Teile Dateien sicher und anonym über das Tor-Netzwerk Exec=/usr/bin/onionshare-gui Terminal=false Type=Application -Icon=/usr/share/pixmaps/onionshare80.xpm +Icon=onionshare80 Categories=Network;FileTransfer; Keywords=tor;anonymity;privacy;onion service;file sharing;file hosting; Keywords[da]=tor;anonymitet;privatliv;onion-tjeneste;fildeling;filhosting; -- cgit v1.2.3-54-g00ecf From 31c360b44d411fc9507eeb5815728a26af6781cf Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Tue, 5 Mar 2019 10:28:27 +1100 Subject: Add a Startup Timer feature (scheduled start / dead man's switch) --- onionshare/__init__.py | 24 +++++++- onionshare/onion.py | 18 +++++- onionshare/onionshare.py | 9 ++- onionshare/settings.py | 1 + onionshare/web/web.py | 8 +-- onionshare_gui/mode/__init__.py | 52 +++++++++++++++- onionshare_gui/onionshare_gui.py | 14 ++++- onionshare_gui/server_status.py | 70 ++++++++++++++++++++-- onionshare_gui/settings_dialog.py | 25 ++++++++ onionshare_gui/threads.py | 69 +++++++++++++++++---- share/locale/en.json | 10 +++- tests/GuiBaseTest.py | 21 ++++++- tests/GuiShareTest.py | 9 +++ ...cal_onionshare_share_mode_startup_timer_test.py | 26 ++++++++ tests/test_onionshare.py | 3 +- tests/test_onionshare_settings.py | 1 + 16 files changed, 326 insertions(+), 34 deletions(-) create mode 100644 tests/local_onionshare_share_mode_startup_timer_test.py diff --git a/onionshare/__init__.py b/onionshare/__init__.py index 2f44c846..601631a2 100644 --- a/onionshare/__init__.py +++ b/onionshare/__init__.py @@ -53,6 +53,7 @@ def main(cwd=None): parser = argparse.ArgumentParser(formatter_class=lambda prog: argparse.HelpFormatter(prog,max_help_position=28)) parser.add_argument('--local-only', action='store_true', dest='local_only', help=strings._("help_local_only")) parser.add_argument('--stay-open', action='store_true', dest='stay_open', help=strings._("help_stay_open")) + parser.add_argument('--startup-timer', metavar='', dest='startup_timer', default=0, help=strings._("help_startup_timer")) parser.add_argument('--shutdown-timeout', metavar='', dest='shutdown_timeout', default=0, help=strings._("help_shutdown_timeout")) parser.add_argument('--stealth', action='store_true', dest='stealth', help=strings._("help_stealth")) parser.add_argument('--receive', action='store_true', dest='receive', help=strings._("help_receive")) @@ -68,6 +69,7 @@ def main(cwd=None): local_only = bool(args.local_only) debug = bool(args.debug) stay_open = bool(args.stay_open) + startup_timer = int(args.startup_timer) shutdown_timeout = int(args.shutdown_timeout) stealth = bool(args.stealth) receive = bool(args.receive) @@ -120,10 +122,28 @@ def main(cwd=None): # Start the onionshare app try: + common.settings.load() + if not common.settings.get('public_mode'): + web.generate_slug(common.settings.get('slug')) + else: + web.slug = None app = OnionShare(common, onion, local_only, shutdown_timeout) app.set_stealth(stealth) app.choose_port() - app.start_onion_service() + # Delay the startup if a startup timer was set + if startup_timer > 0: + app.start_onion_service(False, True) + if common.settings.get('public_mode'): + url = 'http://{0:s}'.format(app.onion_host) + else: + url = 'http://{0:s}/{1:s}'.format(app.onion_host, web.slug) + print(strings._("scheduled_onion_service").format(url)) + app.onion.cleanup() + print(strings._("waiting_for_startup_timer")) + time.sleep(startup_timer) + app.start_onion_service() + else: + app.start_onion_service() except KeyboardInterrupt: print("") sys.exit() @@ -149,7 +169,7 @@ def main(cwd=None): print('') # Start OnionShare http service in new thread - t = threading.Thread(target=web.start, args=(app.port, stay_open, common.settings.get('public_mode'), common.settings.get('slug'))) + t = threading.Thread(target=web.start, args=(app.port, stay_open, common.settings.get('public_mode'), web.slug)) t.daemon = True t.start() diff --git a/onionshare/onion.py b/onionshare/onion.py index ed4fde7b..17621b01 100644 --- a/onionshare/onion.py +++ b/onionshare/onion.py @@ -133,6 +133,7 @@ class Onion(object): self.stealth = False self.service_id = None + self.scheduled_key = None # Is bundled tor supported? if (self.common.platform == 'Windows' or self.common.platform == 'Darwin') and getattr(sys, 'onionshare_dev_mode', False): @@ -423,7 +424,7 @@ class Onion(object): return False - def start_onion_service(self, port): + def start_onion_service(self, port, await_publication, save_scheduled_key=False): """ Start a onion service on port 80, pointing to the given port, and return the onion hostname. @@ -455,6 +456,14 @@ class Onion(object): # Assume it was a v3 key. Stem will throw an error if it's something illegible key_type = "ED25519-V3" + elif self.scheduled_key: + key_content = self.scheduled_key + if self.is_v2_key(key_content): + key_type = "RSA1024" + else: + # Assume it was a v3 key. Stem will throw an error if it's something illegible + key_type = "ED25519-V3" + else: key_type = "NEW" # Work out if we can support v3 onion services, which are preferred @@ -474,7 +483,6 @@ class Onion(object): if key_type == "NEW": debug_message += ', key_content={}'.format(key_content) self.common.log('Onion', 'start_onion_service', '{}'.format(debug_message)) - await_publication = True try: if basic_auth != None: res = self.c.create_ephemeral_hidden_service({ 80: port }, await_publication=await_publication, basic_auth=basic_auth, key_type=key_type, key_content=key_content) @@ -493,6 +501,12 @@ class Onion(object): if not self.settings.get('private_key'): self.settings.set('private_key', res.private_key) + # If we were scheduling a future share, register the private key for later re-use + if save_scheduled_key: + self.scheduled_key = res.private_key + else: + self.scheduled_key = None + if self.stealth: # Similar to the PrivateKey, the Control port only returns the ClientAuth # in the response if it was responsible for creating the basic_auth password diff --git a/onionshare/onionshare.py b/onionshare/onionshare.py index 551b8314..a91f28ba 100644 --- a/onionshare/onionshare.py +++ b/onionshare/onionshare.py @@ -41,6 +41,7 @@ class OnionShare(object): self.onion_host = None self.port = None self.stealth = None + self.scheduled_key = None # files and dirs to delete on shutdown self.cleanup_filenames = [] @@ -68,7 +69,7 @@ class OnionShare(object): except: raise OSError(strings._('no_available_port')) - def start_onion_service(self): + def start_onion_service(self, await_publication=True, save_scheduled_key=False): """ Start the onionshare onion service. """ @@ -84,16 +85,20 @@ class OnionShare(object): self.onion_host = '127.0.0.1:{0:d}'.format(self.port) return - self.onion_host = self.onion.start_onion_service(self.port) + self.onion_host = self.onion.start_onion_service(self.port, await_publication, save_scheduled_key) if self.stealth: self.auth_string = self.onion.auth_string + if self.onion.scheduled_key: + self.scheduled_key = self.onion.scheduled_key + def cleanup(self): """ Shut everything down and clean up temporary files, etc. """ self.common.log('OnionShare', 'cleanup') + self.scheduled_key = None # Cleanup files try: diff --git a/onionshare/settings.py b/onionshare/settings.py index 68cbb857..d015c5ce 100644 --- a/onionshare/settings.py +++ b/onionshare/settings.py @@ -85,6 +85,7 @@ class Settings(object): 'auth_password': '', 'close_after_first_download': True, 'shutdown_timeout': False, + 'startup_timer': False, 'use_stealth': False, 'use_autoupdate': True, 'autoupdate_timestamp': None, diff --git a/onionshare/web/web.py b/onionshare/web/web.py index 66ba5b24..7ce87108 100644 --- a/onionshare/web/web.py +++ b/onionshare/web/web.py @@ -228,13 +228,11 @@ class Web(object): pass self.running = False - def start(self, port, stay_open=False, public_mode=False, persistent_slug=None): + def start(self, port, stay_open=False, public_mode=False, slug=None): """ Start the flask web server. """ - self.common.log('Web', 'start', 'port={}, stay_open={}, public_mode={}, persistent_slug={}'.format(port, stay_open, public_mode, persistent_slug)) - if not public_mode: - self.generate_slug(persistent_slug) + self.common.log('Web', 'start', 'port={}, stay_open={}, public_mode={}, slug={}'.format(port, stay_open, public_mode, slug)) self.stay_open = stay_open @@ -264,7 +262,7 @@ class Web(object): self.stop_q.put(True) # Reset any slug that was in use - self.slug = '' + self.slug = None # To stop flask, load http://127.0.0.1://shutdown if self.running: diff --git a/onionshare_gui/mode/__init__.py b/onionshare_gui/mode/__init__.py index 4fe335e7..d4f0cd09 100644 --- a/onionshare_gui/mode/__init__.py +++ b/onionshare_gui/mode/__init__.py @@ -24,6 +24,7 @@ from onionshare.common import ShutdownTimer from ..server_status import ServerStatus from ..threads import OnionThread +from ..threads import StartupTimer from ..widgets import Alert class Mode(QtWidgets.QWidget): @@ -35,6 +36,7 @@ class Mode(QtWidgets.QWidget): starting_server_step2 = QtCore.pyqtSignal() starting_server_step3 = QtCore.pyqtSignal() starting_server_error = QtCore.pyqtSignal(str) + starting_server_early = QtCore.pyqtSignal() set_server_active = QtCore.pyqtSignal(bool) def __init__(self, common, qtapp, app, status_bar, server_status_label, system_tray, filenames=None, local_only=False): @@ -58,6 +60,7 @@ class Mode(QtWidgets.QWidget): # Threads start out as None self.onion_thread = None self.web_thread = None + self.startup_thread = None # Server status self.server_status = ServerStatus(self.common, self.qtapp, self.app, None, self.local_only) @@ -68,6 +71,7 @@ class Mode(QtWidgets.QWidget): self.stop_server_finished.connect(self.server_status.stop_server_finished) self.starting_server_step2.connect(self.start_server_step2) self.starting_server_step3.connect(self.start_server_step3) + self.starting_server_early.connect(self.start_server_early) self.starting_server_error.connect(self.start_server_error) # Primary action @@ -142,7 +146,41 @@ class Mode(QtWidgets.QWidget): self.status_bar.clearMessage() self.server_status_label.setText('') + # Ensure we always get a new random port each time we might launch an OnionThread + self.app.port = None + + # Start the onion thread. If this share was scheduled for a future date, + # the OnionThread will start and exit 'early' to obtain the port, slug + # and onion address, but it will not start the WebThread yet. + if self.server_status.scheduled_start: + self.start_onion_thread(obtain_onion_early=True) + else: + self.start_onion_thread() + + # If scheduling a share, delay starting the real share + if self.server_status.scheduled_start: + self.common.log('Mode', 'start_server', 'Starting startup timer') + self.startup_thread = StartupTimer(self) + # Once the timer has finished, start the real share, with a WebThread + self.startup_thread.success.connect(self.start_scheduled_service) + self.startup_thread.error.connect(self.start_server_error) + self.startup_thread.canceled = False + self.startup_thread.start() + + def start_onion_thread(self, obtain_onion_early=False): self.common.log('Mode', 'start_server', 'Starting an onion thread') + self.obtain_onion_early = obtain_onion_early + self.onion_thread = OnionThread(self) + self.onion_thread.success.connect(self.starting_server_step2.emit) + self.onion_thread.success_early.connect(self.starting_server_early.emit) + self.onion_thread.error.connect(self.starting_server_error.emit) + self.onion_thread.start() + + def start_scheduled_service(self, obtain_onion_early=False): + # We start a new OnionThread with the saved scheduled key from settings + self.common.settings.load() + self.obtain_onion_early = obtain_onion_early + self.common.log('Mode', 'start_server', 'Starting a scheduled onion thread') self.onion_thread = OnionThread(self) self.onion_thread.success.connect(self.starting_server_step2.emit) self.onion_thread.error.connect(self.starting_server_error.emit) @@ -154,6 +192,14 @@ class Mode(QtWidgets.QWidget): """ pass + def start_server_early(self): + """ + An 'early' start of an onion service in order to obtain the onion + address for a scheduled start. Shows the onion address in the UI + in advance of actually starting the share. + """ + self.server_status.show_url() + def start_server_step2(self): """ Step 2 in starting the onionshare server. @@ -225,7 +271,11 @@ class Mode(QtWidgets.QWidget): Cancel the server while it is preparing to start """ self.cancel_server_custom() - + if self.startup_thread: + self.common.log('Mode', 'cancel_server: quitting startup thread') + self.startup_thread.canceled = True + self.app.onion.scheduled_key = None + self.startup_thread.quit() if self.onion_thread: self.common.log('Mode', 'cancel_server: quitting onion thread') self.onion_thread.quit() diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py index 27abf5e5..8e4a3338 100644 --- a/onionshare_gui/onionshare_gui.py +++ b/onionshare_gui/onionshare_gui.py @@ -228,7 +228,10 @@ class OnionShareGui(QtWidgets.QMainWindow): self.server_status_label.setText(strings._('gui_status_indicator_share_stopped')) elif self.share_mode.server_status.status == ServerStatus.STATUS_WORKING: self.server_status_image_label.setPixmap(QtGui.QPixmap.fromImage(self.server_status_image_working)) - self.server_status_label.setText(strings._('gui_status_indicator_share_working')) + if self.share_mode.server_status.scheduled_start: + self.server_status_label.setText(strings._('gui_status_indicator_share_scheduled')) + else: + self.server_status_label.setText(strings._('gui_status_indicator_share_working')) elif self.share_mode.server_status.status == ServerStatus.STATUS_STARTED: self.server_status_image_label.setPixmap(QtGui.QPixmap.fromImage(self.server_status_image_started)) self.server_status_label.setText(strings._('gui_status_indicator_share_started')) @@ -239,7 +242,10 @@ class OnionShareGui(QtWidgets.QMainWindow): self.server_status_label.setText(strings._('gui_status_indicator_receive_stopped')) elif self.receive_mode.server_status.status == ServerStatus.STATUS_WORKING: self.server_status_image_label.setPixmap(QtGui.QPixmap.fromImage(self.server_status_image_working)) - self.server_status_label.setText(strings._('gui_status_indicator_receive_working')) + if self.receive_mode.server_status.scheduled_start: + self.server_status_label.setText(strings._('gui_status_indicator_receive_scheduled')) + else: + self.server_status_label.setText(strings._('gui_status_indicator_receive_working')) elif self.receive_mode.server_status.status == ServerStatus.STATUS_STARTED: self.server_status_image_label.setPixmap(QtGui.QPixmap.fromImage(self.server_status_image_started)) self.server_status_label.setText(strings._('gui_status_indicator_receive_started')) @@ -313,6 +319,10 @@ class OnionShareGui(QtWidgets.QMainWindow): if not self.common.settings.get('shutdown_timeout'): self.share_mode.server_status.shutdown_timeout_container.hide() self.receive_mode.server_status.shutdown_timeout_container.hide() + # If we switched off the startup timer setting, ensure the widget is hidden. + if not self.common.settings.get('startup_timer'): + self.share_mode.server_status.startup_timer_container.hide() + self.receive_mode.server_status.startup_timer_container.hide() d = SettingsDialog(self.common, self.onion, self.qtapp, self.config, self.local_only) d.settings_saved.connect(reload_settings) diff --git a/onionshare_gui/server_status.py b/onionshare_gui/server_status.py index e34a3d16..4bd9241b 100644 --- a/onionshare_gui/server_status.py +++ b/onionshare_gui/server_status.py @@ -56,10 +56,36 @@ class ServerStatus(QtWidgets.QWidget): self.app = app self.web = None + self.scheduled_start = None self.local_only = local_only self.resizeEvent(None) + # Startup timer layout + self.startup_timer_label = QtWidgets.QLabel(strings._('gui_settings_startup_timer')) + self.startup_timer = QtWidgets.QDateTimeEdit() + self.startup_timer.setDisplayFormat("hh:mm A MMM d, yy") + if self.local_only: + # For testing + self.startup_timer.setDateTime(QtCore.QDateTime.currentDateTime().addSecs(15)) + self.startup_timer.setMinimumDateTime(QtCore.QDateTime.currentDateTime()) + else: + # Set proposed timer to be 5 minutes into the future + self.startup_timer.setDateTime(QtCore.QDateTime.currentDateTime().addSecs(300)) + # Onion services can take a little while to start, so reduce the risk of it expiring too soon by setting the minimum to 60s from now + self.startup_timer.setMinimumDateTime(QtCore.QDateTime.currentDateTime().addSecs(60)) + self.startup_timer.setCurrentSection(QtWidgets.QDateTimeEdit.MinuteSection) + startup_timer_layout = QtWidgets.QHBoxLayout() + startup_timer_layout.addWidget(self.startup_timer_label) + startup_timer_layout.addWidget(self.startup_timer) + + # Startup timer container, so it can all be hidden and shown as a group + startup_timer_container_layout = QtWidgets.QVBoxLayout() + startup_timer_container_layout.addLayout(startup_timer_layout) + self.startup_timer_container = QtWidgets.QWidget() + self.startup_timer_container.setLayout(startup_timer_container_layout) + self.startup_timer_container.hide() + # Shutdown timeout layout self.shutdown_timeout_label = QtWidgets.QLabel(strings._('gui_settings_shutdown_timeout')) self.shutdown_timeout = QtWidgets.QDateTimeEdit() @@ -123,6 +149,7 @@ class ServerStatus(QtWidgets.QWidget): layout = QtWidgets.QVBoxLayout() layout.addWidget(self.server_button) layout.addLayout(url_layout) + layout.addWidget(self.startup_timer_container) layout.addWidget(self.shutdown_timeout_container) self.setLayout(layout) @@ -154,6 +181,13 @@ class ServerStatus(QtWidgets.QWidget): except: pass + def startup_timer_reset(self): + """ + Reset the timer in the UI after stopping a share + """ + self.startup_timer.setDateTime(QtCore.QDateTime.currentDateTime().addSecs(300)) + if not self.local_only: + self.startup_timer.setMinimumDateTime(QtCore.QDateTime.currentDateTime().addSecs(60)) def shutdown_timeout_reset(self): """ @@ -163,6 +197,14 @@ class ServerStatus(QtWidgets.QWidget): if not self.local_only: self.shutdown_timeout.setMinimumDateTime(QtCore.QDateTime.currentDateTime().addSecs(60)) + def show_url(self): + """ + Show the URL in the UI. + """ + self.url.setText(self.get_url()) + self.url.show() + self.copy_url_button.show() + def update(self): """ Update the GUI elements based on the current state. @@ -190,16 +232,16 @@ class ServerStatus(QtWidgets.QWidget): else: self.url_description.setToolTip(strings._('gui_url_label_stay_open')) - self.url.setText(self.get_url()) - self.url.show() - - self.copy_url_button.show() + self.show_url() if self.common.settings.get('save_private_key'): if not self.common.settings.get('slug'): self.common.settings.set('slug', self.web.slug) self.common.settings.save() + if self.common.settings.get('startup_timer'): + self.startup_timer_container.hide() + if self.common.settings.get('shutdown_timeout'): self.shutdown_timeout_container.hide() @@ -227,6 +269,8 @@ class ServerStatus(QtWidgets.QWidget): else: self.server_button.setText(strings._('gui_receive_start_server')) self.server_button.setToolTip('') + if self.common.settings.get('startup_timer'): + self.startup_timer_container.show() if self.common.settings.get('shutdown_timeout'): self.shutdown_timeout_container.show() elif self.status == self.STATUS_STARTED: @@ -236,23 +280,30 @@ class ServerStatus(QtWidgets.QWidget): self.server_button.setText(strings._('gui_share_stop_server')) else: self.server_button.setText(strings._('gui_receive_stop_server')) + if self.common.settings.get('startup_timer'): + self.startup_timer_container.hide() if self.common.settings.get('shutdown_timeout'): self.shutdown_timeout_container.hide() if self.mode == ServerStatus.MODE_SHARE: self.server_button.setToolTip(strings._('gui_share_stop_server_shutdown_timeout_tooltip').format(self.timeout)) else: self.server_button.setToolTip(strings._('gui_receive_stop_server_shutdown_timeout_tooltip').format(self.timeout)) - elif self.status == self.STATUS_WORKING: self.server_button.setStyleSheet(self.common.css['server_status_button_working']) self.server_button.setEnabled(True) - self.server_button.setText(strings._('gui_please_wait')) + if self.scheduled_start: + self.server_button.setText(strings._('gui_waiting_to_start').format(self.scheduled_start)) + self.startup_timer_container.hide() + else: + self.server_button.setText(strings._('gui_please_wait')) if self.common.settings.get('shutdown_timeout'): self.shutdown_timeout_container.hide() else: self.server_button.setStyleSheet(self.common.css['server_status_button_working']) self.server_button.setEnabled(False) self.server_button.setText(strings._('gui_please_wait')) + if self.common.settings.get('startup_timer'): + self.startup_timer_container.hide() if self.common.settings.get('shutdown_timeout'): self.shutdown_timeout_container.hide() @@ -261,6 +312,11 @@ class ServerStatus(QtWidgets.QWidget): Toggle starting or stopping the server. """ if self.status == self.STATUS_STOPPED: + if self.common.settings.get('startup_timer'): + if self.local_only: + self.scheduled_start = self.startup_timer.dateTime().toPyDateTime() + else: + self.scheduled_start = self.startup_timer.dateTime().toPyDateTime().replace(second=0, microsecond=0) if self.common.settings.get('shutdown_timeout'): if self.local_only: self.timeout = self.shutdown_timeout.dateTime().toPyDateTime() @@ -302,6 +358,7 @@ class ServerStatus(QtWidgets.QWidget): Stop the server. """ self.status = self.STATUS_WORKING + self.startup_timer_reset() self.shutdown_timeout_reset() self.update() self.server_stopped.emit() @@ -312,6 +369,7 @@ class ServerStatus(QtWidgets.QWidget): """ self.common.log('ServerStatus', 'cancel_server', 'Canceling the server mid-startup') self.status = self.STATUS_WORKING + self.startup_timer_reset() self.shutdown_timeout_reset() self.update() self.server_canceled.emit() diff --git a/onionshare_gui/settings_dialog.py b/onionshare_gui/settings_dialog.py index 2933784c..f29915a7 100644 --- a/onionshare_gui/settings_dialog.py +++ b/onionshare_gui/settings_dialog.py @@ -71,6 +71,23 @@ class SettingsDialog(QtWidgets.QDialog): self.public_mode_widget = QtWidgets.QWidget() self.public_mode_widget.setLayout(public_mode_layout) + # Whether or not to use a startup ('auto-start') timer + self.startup_timer_checkbox = QtWidgets.QCheckBox() + self.startup_timer_checkbox.setCheckState(QtCore.Qt.Checked) + self.startup_timer_checkbox.setText(strings._("gui_settings_startup_timer_checkbox")) + startup_timer_label = QtWidgets.QLabel(strings._("gui_settings_whats_this").format("https://github.com/micahflee/onionshare/wiki/Using-the-Auto-Stop-Timer")) + startup_timer_label.setStyleSheet(self.common.css['settings_whats_this']) + startup_timer_label.setTextInteractionFlags(QtCore.Qt.TextBrowserInteraction) + startup_timer_label.setOpenExternalLinks(True) + startup_timer_label.setMinimumSize(public_mode_label.sizeHint()) + startup_timer_layout = QtWidgets.QHBoxLayout() + startup_timer_layout.addWidget(self.startup_timer_checkbox) + startup_timer_layout.addWidget(startup_timer_label) + startup_timer_layout.addStretch() + startup_timer_layout.setContentsMargins(0,0,0,0) + self.startup_timer_widget = QtWidgets.QWidget() + self.startup_timer_widget.setLayout(startup_timer_layout) + # Whether or not to use a shutdown ('auto-stop') timer self.shutdown_timeout_checkbox = QtWidgets.QCheckBox() self.shutdown_timeout_checkbox.setCheckState(QtCore.Qt.Checked) @@ -91,6 +108,7 @@ class SettingsDialog(QtWidgets.QDialog): # General settings layout general_group_layout = QtWidgets.QVBoxLayout() general_group_layout.addWidget(self.public_mode_widget) + general_group_layout.addWidget(self.startup_timer_widget) general_group_layout.addWidget(self.shutdown_timeout_widget) general_group = QtWidgets.QGroupBox(strings._("gui_settings_general_label")) general_group.setLayout(general_group_layout) @@ -488,6 +506,12 @@ class SettingsDialog(QtWidgets.QDialog): else: self.close_after_first_download_checkbox.setCheckState(QtCore.Qt.Unchecked) + startup_timer = self.old_settings.get('startup_timer') + if startup_timer: + self.startup_timer_checkbox.setCheckState(QtCore.Qt.Checked) + else: + self.startup_timer_checkbox.setCheckState(QtCore.Qt.Unchecked) + shutdown_timeout = self.old_settings.get('shutdown_timeout') if shutdown_timeout: self.shutdown_timeout_checkbox.setCheckState(QtCore.Qt.Checked) @@ -932,6 +956,7 @@ class SettingsDialog(QtWidgets.QDialog): settings.load() # To get the last update timestamp settings.set('close_after_first_download', self.close_after_first_download_checkbox.isChecked()) + settings.set('startup_timer', self.startup_timer_checkbox.isChecked()) settings.set('shutdown_timeout', self.shutdown_timeout_checkbox.isChecked()) # Complicated logic here to force v2 onion mode on or off depending on other settings diff --git a/onionshare_gui/threads.py b/onionshare_gui/threads.py index 3b05bebf..fff56bc2 100644 --- a/onionshare_gui/threads.py +++ b/onionshare_gui/threads.py @@ -28,6 +28,7 @@ class OnionThread(QtCore.QThread): Starts the onion service, and waits for it to finish """ success = QtCore.pyqtSignal() + success_early = QtCore.pyqtSignal() error = QtCore.pyqtSignal(str) def __init__(self, mode): @@ -41,18 +42,30 @@ class OnionThread(QtCore.QThread): def run(self): self.mode.common.log('OnionThread', 'run') + # Choose port and slug early, because we need them to exist in advance for scheduled shares self.mode.app.stay_open = not self.mode.common.settings.get('close_after_first_download') - - # start onionshare http service in new thread - self.mode.web_thread = WebThread(self.mode) - self.mode.web_thread.start() - - # wait for modules in thread to load, preventing a thread-related cx_Freeze crash - time.sleep(0.2) + if not self.mode.app.port: + self.mode.app.choose_port() + if not self.mode.common.settings.get('public_mode'): + if not self.mode.web.slug: + self.mode.web.generate_slug(self.mode.common.settings.get('slug')) try: - self.mode.app.start_onion_service() - self.success.emit() + if self.mode.obtain_onion_early: + self.mode.app.start_onion_service(await_publication=False, save_scheduled_key=True) + # wait for modules in thread to load, preventing a thread-related cx_Freeze crash + time.sleep(0.2) + self.success_early.emit() + # Unregister the onion so we can use it in the next OnionThread + self.mode.app.onion.cleanup() + else: + self.mode.app.start_onion_service(await_publication=True) + # wait for modules in thread to load, preventing a thread-related cx_Freeze crash + time.sleep(0.2) + # start onionshare http service in new thread + self.mode.web_thread = WebThread(self.mode) + self.mode.web_thread.start() + self.success.emit() except (TorTooOld, TorErrorInvalidSetting, TorErrorAutomatic, TorErrorSocketPort, TorErrorSocketFile, TorErrorMissingPassword, TorErrorUnreadableCookieFile, TorErrorAuthError, TorErrorProtocolError, BundledTorTimeout, OSError) as e: self.error.emit(e.args[0]) @@ -73,5 +86,39 @@ class WebThread(QtCore.QThread): def run(self): self.mode.common.log('WebThread', 'run') - self.mode.app.choose_port() - self.mode.web.start(self.mode.app.port, self.mode.app.stay_open, self.mode.common.settings.get('public_mode'), self.mode.common.settings.get('slug')) + self.mode.web.start(self.mode.app.port, self.mode.app.stay_open, self.mode.common.settings.get('public_mode'), self.mode.web.slug) + self.success.emit() + + +class StartupTimer(QtCore.QThread): + """ + Waits for a prescribed time before allowing a share to start + """ + success = QtCore.pyqtSignal() + error = QtCore.pyqtSignal(str) + def __init__(self, mode, canceled=False): + super(StartupTimer, self).__init__() + self.mode = mode + self.canceled = canceled + self.mode.common.log('StartupTimer', '__init__') + + # allow this thread to be terminated + self.setTerminationEnabled() + + def run(self): + now = QtCore.QDateTime.currentDateTime() + scheduled_start = now.secsTo(self.mode.server_status.scheduled_start) + try: + # Sleep until scheduled time + while scheduled_start > 0 and self.canceled == False: + time.sleep(0.1) + now = QtCore.QDateTime.currentDateTime() + scheduled_start = now.secsTo(self.mode.server_status.scheduled_start) + # Timer has now finished + self.mode.server_status.server_button.setText(strings._('gui_please_wait')) + self.mode.server_status_label.setText(strings._('gui_status_indicator_share_working')) + if self.canceled == False: + self.success.emit() + except ValueError as e: + self.error.emit(e.args[0]) + return diff --git a/share/locale/en.json b/share/locale/en.json index f7af9a80..d21052a5 100644 --- a/share/locale/en.json +++ b/share/locale/en.json @@ -15,6 +15,7 @@ "large_filesize": "Warning: Sending a large share could take hours", "help_local_only": "Don't use Tor (only for development)", "help_stay_open": "Continue sharing after files have been sent", + "help_startup_timer": "Schedule this share to start N seconds from now", "help_shutdown_timeout": "Stop sharing after a given amount of seconds", "help_stealth": "Use client authorization (advanced)", "help_receive": "Receive shares instead of sending them", @@ -42,6 +43,7 @@ "gui_copied_url": "OnionShare address copied to clipboard", "gui_copied_hidservauth_title": "Copied HidServAuth", "gui_copied_hidservauth": "HidServAuth line copied to clipboard", + "gui_waiting_to_start": "Scheduled for {}. Click to cancel.", "gui_please_wait": "Starting… Click to cancel.", "version_string": "OnionShare {0:s} | https://onionshare.org/", "gui_quit_title": "Not so fast", @@ -94,6 +96,8 @@ "gui_settings_button_help": "Help", "gui_settings_shutdown_timeout_checkbox": "Use auto-stop timer", "gui_settings_shutdown_timeout": "Stop the share at:", + "gui_settings_startup_timer_checkbox": "Use auto-start timer", + "gui_settings_startup_timer": "Start the share at:", "settings_error_unknown": "Can't connect to Tor controller because your settings don't make sense.", "settings_error_automatic": "Could not connect to the Tor controller. Is Tor Browser (available from torproject.org) running in the background?", "settings_error_socket_port": "Can't connect to the Tor controller at {}:{}.", @@ -133,9 +137,11 @@ "gui_url_label_onetime_and_persistent": "This share will not auto-stop.

Every subsequent share will reuse the address. (To use one-time addresses, turn off \"Use persistent address\" in the settings.)", "gui_status_indicator_share_stopped": "Ready to share", "gui_status_indicator_share_working": "Starting…", + "gui_status_indicator_share_scheduled": "Scheduled…", "gui_status_indicator_share_started": "Sharing", "gui_status_indicator_receive_stopped": "Ready to receive", "gui_status_indicator_receive_working": "Starting…", + "gui_status_indicator_receive_scheduled": "Scheduled…", "gui_status_indicator_receive_started": "Receiving", "gui_file_info": "{} files, {}", "gui_file_info_single": "{} file, {}", @@ -180,5 +186,7 @@ "gui_share_mode_no_files": "No Files Sent Yet", "gui_share_mode_timeout_waiting": "Waiting to finish sending", "gui_receive_mode_no_files": "No Files Received Yet", - "gui_receive_mode_timeout_waiting": "Waiting to finish receiving" + "gui_receive_mode_timeout_waiting": "Waiting to finish receiving", + "waiting_for_startup_timer": "Waiting for the timer to run down before starting...", + "scheduled_onion_service": "Your OnionShare URL will be: {}" } diff --git a/tests/GuiBaseTest.py b/tests/GuiBaseTest.py index e4b3d4c9..98b6c738 100644 --- a/tests/GuiBaseTest.py +++ b/tests/GuiBaseTest.py @@ -172,6 +172,9 @@ class GuiBaseTest(object): '''Test that the Server Status indicator shows we are Starting''' self.assertEqual(mode.server_status_label.text(), strings._('gui_status_indicator_share_working')) + def server_status_indicator_says_scheduled(self, mode): + '''Test that the Server Status indicator shows we are Scheduled''' + self.assertEqual(mode.server_status_label.text(), strings._('gui_status_indicator_share_scheduled')) def server_is_started(self, mode, startup_time=2000): '''Test that the server has started''' @@ -294,7 +297,6 @@ class GuiBaseTest(object): mode.server_status.shutdown_timeout.setDateTime(timer) self.assertTrue(mode.server_status.shutdown_timeout.dateTime(), timer) - def timeout_widget_hidden(self, mode): '''Test that the timeout widget is hidden when share has started''' self.assertFalse(mode.server_status.shutdown_timeout_container.isVisible()) @@ -306,6 +308,23 @@ class GuiBaseTest(object): # We should have timed out now self.assertEqual(mode.server_status.status, 0) + # Startup timer tests + def set_startup_timer(self, mode, timer): + '''Test that the timer can be set''' + schedule = QtCore.QDateTime.currentDateTime().addSecs(timer) + mode.server_status.startup_timer.setDateTime(schedule) + self.assertTrue(mode.server_status.startup_timer.dateTime(), schedule) + + def startup_timer_widget_hidden(self, mode): + '''Test that the startup timer widget is hidden when share has started''' + self.assertFalse(mode.server_status.startup_timer_container.isVisible()) + + def scheduled_service_started(self, mode, wait): + '''Test that the server has timed out after the timer ran out''' + QtTest.QTest.qWait(wait) + # We should have started now + self.assertEqual(mode.server_status.status, 2) + # Hack to close an Alert dialog that would otherwise block tests def accept_dialog(self): window = self.gui.qtapp.activeWindow() diff --git a/tests/GuiShareTest.py b/tests/GuiShareTest.py index 716bab73..e37cd7ee 100644 --- a/tests/GuiShareTest.py +++ b/tests/GuiShareTest.py @@ -195,6 +195,15 @@ class GuiShareTest(GuiBaseTest): self.server_timed_out(self.gui.share_mode, 10000) self.web_server_is_stopped() + def run_all_share_mode_startup_timer_tests(self, public_mode): + """Auto-stop timer tests in share mode""" + self.run_all_share_mode_setup_tests() + self.set_startup_timer(self.gui.share_mode, 5) + self.server_working_on_start_button_pressed(self.gui.share_mode) + self.startup_timer_widget_hidden(self.gui.share_mode) + self.server_status_indicator_says_scheduled(self.gui.share_mode) + self.scheduled_service_started(self.gui.share_mode, 7000) + self.web_server_is_running() def run_all_share_mode_unreadable_file_tests(self): '''Attempt to share an unreadable file''' diff --git a/tests/local_onionshare_share_mode_startup_timer_test.py b/tests/local_onionshare_share_mode_startup_timer_test.py new file mode 100644 index 00000000..b5e08b10 --- /dev/null +++ b/tests/local_onionshare_share_mode_startup_timer_test.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 +import pytest +import unittest + +from .GuiShareTest import GuiShareTest + +class LocalShareModeStartupTimerTest(unittest.TestCase, GuiShareTest): + @classmethod + def setUpClass(cls): + test_settings = { + "public_mode": False, + "startup_timer": True, + } + cls.gui = GuiShareTest.set_up(test_settings) + + @classmethod + def tearDownClass(cls): + GuiShareTest.tear_down() + + @pytest.mark.gui + def test_gui(self): + self.run_all_common_setup_tests() + self.run_all_share_mode_startup_timer_tests(False) + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_onionshare.py b/tests/test_onionshare.py index 7592a777..f141fed7 100644 --- a/tests/test_onionshare.py +++ b/tests/test_onionshare.py @@ -30,9 +30,10 @@ class MyOnion: self.auth_string = 'TestHidServAuth' self.private_key = '' self.stealth = stealth + self.scheduled_key = None @staticmethod - def start_onion_service(_): + def start_onion_service(self, await_publication=True, save_scheduled_key=False): return 'test_service_id.onion' diff --git a/tests/test_onionshare_settings.py b/tests/test_onionshare_settings.py index f4be2930..74ab4f8f 100644 --- a/tests/test_onionshare_settings.py +++ b/tests/test_onionshare_settings.py @@ -52,6 +52,7 @@ class TestSettings: 'auth_password': '', 'close_after_first_download': True, 'shutdown_timeout': False, + 'startup_timer': False, 'use_stealth': False, 'use_autoupdate': True, 'autoupdate_timestamp': None, -- cgit v1.2.3-54-g00ecf From 8889d3d5860e5bf35c9dd49bf499f1d3d1399009 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Tue, 5 Mar 2019 16:59:13 +1100 Subject: Test that the web server is stopped when it's scheduled for a later start --- tests/GuiShareTest.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/GuiShareTest.py b/tests/GuiShareTest.py index e37cd7ee..c6f71272 100644 --- a/tests/GuiShareTest.py +++ b/tests/GuiShareTest.py @@ -202,6 +202,7 @@ class GuiShareTest(GuiBaseTest): self.server_working_on_start_button_pressed(self.gui.share_mode) self.startup_timer_widget_hidden(self.gui.share_mode) self.server_status_indicator_says_scheduled(self.gui.share_mode) + self.web_server_is_stopped() self.scheduled_service_started(self.gui.share_mode, 7000) self.web_server_is_running() -- cgit v1.2.3-54-g00ecf From 00a8b88264776f232495849c7366240e372f57cd Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Wed, 6 Mar 2019 16:49:32 +1100 Subject: Prevent a scheduled share from starting after the scheduled time has passed. Add a test for this --- onionshare_gui/server_status.py | 10 +++++-- share/locale/en.json | 1 + ...re_share_mode_autostart_timer_too_short_test.py | 33 ++++++++++++++++++++++ 3 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 tests/local_onionshare_share_mode_autostart_timer_too_short_test.py diff --git a/onionshare_gui/server_status.py b/onionshare_gui/server_status.py index 4bd9241b..3ee10f14 100644 --- a/onionshare_gui/server_status.py +++ b/onionshare_gui/server_status.py @@ -312,11 +312,16 @@ class ServerStatus(QtWidgets.QWidget): Toggle starting or stopping the server. """ if self.status == self.STATUS_STOPPED: + can_start = True if self.common.settings.get('startup_timer'): if self.local_only: self.scheduled_start = self.startup_timer.dateTime().toPyDateTime() else: self.scheduled_start = self.startup_timer.dateTime().toPyDateTime().replace(second=0, microsecond=0) + # If the timer has actually passed already before the user hit Start, refuse to start the server. + if QtCore.QDateTime.currentDateTime().toPyDateTime() > self.scheduled_start: + can_start = False + Alert(self.common, strings._('gui_server_startup_timer_expired'), QtWidgets.QMessageBox.Warning) if self.common.settings.get('shutdown_timeout'): if self.local_only: self.timeout = self.shutdown_timeout.dateTime().toPyDateTime() @@ -325,10 +330,9 @@ class ServerStatus(QtWidgets.QWidget): self.timeout = self.shutdown_timeout.dateTime().toPyDateTime().replace(second=0, microsecond=0) # If the timeout has actually passed already before the user hit Start, refuse to start the server. if QtCore.QDateTime.currentDateTime().toPyDateTime() > self.timeout: + can_start = False Alert(self.common, strings._('gui_server_timeout_expired'), QtWidgets.QMessageBox.Warning) - else: - self.start_server() - else: + if can_start: self.start_server() elif self.status == self.STATUS_STARTED: self.stop_server() diff --git a/share/locale/en.json b/share/locale/en.json index d21052a5..a86341da 100644 --- a/share/locale/en.json +++ b/share/locale/en.json @@ -125,6 +125,7 @@ "gui_tor_connection_lost": "Disconnected from Tor.", "gui_server_started_after_timeout": "The auto-stop timer ran out before the server started.\nPlease make a new share.", "gui_server_timeout_expired": "The auto-stop timer already ran out.\nPlease update it to start sharing.", + "gui_server_startup_timer_expired": "The scheduled time has already passed.\nPlease update it to start sharing.", "share_via_onionshare": "OnionShare it", "gui_connect_to_tor_for_onion_settings": "Connect to Tor to see onion service settings", "gui_use_legacy_v2_onions_checkbox": "Use legacy addresses", diff --git a/tests/local_onionshare_share_mode_autostart_timer_too_short_test.py b/tests/local_onionshare_share_mode_autostart_timer_too_short_test.py new file mode 100644 index 00000000..12343478 --- /dev/null +++ b/tests/local_onionshare_share_mode_autostart_timer_too_short_test.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python3 +import pytest +import unittest +from PyQt5 import QtCore, QtTest + +from .GuiShareTest import GuiShareTest + +class LocalShareModeStartupTimerTooShortTest(unittest.TestCase, GuiShareTest): + @classmethod + def setUpClass(cls): + test_settings = { + "public_mode": False, + "startup_timer": True, + } + cls.gui = GuiShareTest.set_up(test_settings) + + @classmethod + def tearDownClass(cls): + GuiShareTest.tear_down() + + @pytest.mark.gui + def test_gui(self): + self.run_all_common_setup_tests() + self.run_all_share_mode_setup_tests() + # Set a low timeout + self.set_startup_timer(self.gui.share_mode, 2) + QtTest.QTest.qWait(3000) + QtCore.QTimer.singleShot(4000, self.accept_dialog) + QtTest.QTest.mouseClick(self.gui.share_mode.server_status.server_button, QtCore.Qt.LeftButton) + self.assertEqual(self.gui.share_mode.server_status.status, 0) + +if __name__ == "__main__": + unittest.main() -- cgit v1.2.3-54-g00ecf From dc0fe4f7b13f980857bde7d79fadc82b7fd7567c Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Fri, 8 Mar 2019 11:03:37 +1100 Subject: Fix a minor corner case related to server status button when canceling a scheduled share. Leverage scheduled shares in order to test 'cancel' action in local mode for better test coverage --- onionshare_gui/threads.py | 4 ++-- tests/GuiBaseTest.py | 14 ++++++++++++ tests/TorGuiBaseTest.py | 13 ----------- ...ocal_onionshare_share_mode_cancel_share_test.py | 26 ++++++++++++++++++++++ tests/onionshare_share_mode_cancel_share_test.py | 1 + 5 files changed, 43 insertions(+), 15 deletions(-) create mode 100644 tests/local_onionshare_share_mode_cancel_share_test.py diff --git a/onionshare_gui/threads.py b/onionshare_gui/threads.py index fff56bc2..dda8094e 100644 --- a/onionshare_gui/threads.py +++ b/onionshare_gui/threads.py @@ -115,9 +115,9 @@ class StartupTimer(QtCore.QThread): now = QtCore.QDateTime.currentDateTime() scheduled_start = now.secsTo(self.mode.server_status.scheduled_start) # Timer has now finished - self.mode.server_status.server_button.setText(strings._('gui_please_wait')) - self.mode.server_status_label.setText(strings._('gui_status_indicator_share_working')) if self.canceled == False: + self.mode.server_status.server_button.setText(strings._('gui_please_wait')) + self.mode.server_status_label.setText(strings._('gui_status_indicator_share_working')) self.success.emit() except ValueError as e: self.error.emit(e.args[0]) diff --git a/tests/GuiBaseTest.py b/tests/GuiBaseTest.py index 98b6c738..9ff0477f 100644 --- a/tests/GuiBaseTest.py +++ b/tests/GuiBaseTest.py @@ -325,6 +325,20 @@ class GuiBaseTest(object): # We should have started now self.assertEqual(mode.server_status.status, 2) + def cancel_the_share(self, mode): + '''Test that we can cancel a share before it's started up ''' + self.server_working_on_start_button_pressed(mode) + self.server_status_indicator_says_scheduled(mode) + self.add_delete_buttons_hidden() + self.settings_button_is_hidden() + self.set_startup_timer(mode, 10) + QtTest.QTest.mousePress(mode.server_status.server_button, QtCore.Qt.LeftButton) + QtTest.QTest.qWait(2000) + QtTest.QTest.mouseRelease(mode.server_status.server_button, QtCore.Qt.LeftButton) + self.assertEqual(mode.server_status.status, 0) + self.server_is_stopped(mode, False) + self.web_server_is_stopped() + # Hack to close an Alert dialog that would otherwise block tests def accept_dialog(self): window = self.gui.qtapp.activeWindow() diff --git a/tests/TorGuiBaseTest.py b/tests/TorGuiBaseTest.py index e437ac93..8bd963bd 100644 --- a/tests/TorGuiBaseTest.py +++ b/tests/TorGuiBaseTest.py @@ -140,19 +140,6 @@ class TorGuiBaseTest(GuiBaseTest): else: self.assertEqual(clipboard.text(), 'http://{}/{}'.format(self.gui.app.onion_host, mode.server_status.web.slug)) - def cancel_the_share(self, mode): - '''Test that we can cancel this share before it's started up ''' - self.server_working_on_start_button_pressed(self.gui.share_mode) - self.server_status_indicator_says_starting(self.gui.share_mode) - self.add_delete_buttons_hidden() - self.settings_button_is_hidden() - QtTest.QTest.mousePress(mode.server_status.server_button, QtCore.Qt.LeftButton) - QtTest.QTest.qWait(1000) - QtTest.QTest.mouseRelease(mode.server_status.server_button, QtCore.Qt.LeftButton) - self.assertEqual(mode.server_status.status, 0) - self.server_is_stopped(self.gui.share_mode, False) - self.web_server_is_stopped() - # Stealth tests def copy_have_hidserv_auth_button(self, mode): diff --git a/tests/local_onionshare_share_mode_cancel_share_test.py b/tests/local_onionshare_share_mode_cancel_share_test.py new file mode 100644 index 00000000..24408730 --- /dev/null +++ b/tests/local_onionshare_share_mode_cancel_share_test.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 +import pytest +import unittest + +from .GuiShareTest import GuiShareTest + +class LocalShareModeCancelTest(unittest.TestCase, GuiShareTest): + @classmethod + def setUpClass(cls): + test_settings = { + "startup_timer": True, + } + cls.gui = GuiShareTest.set_up(test_settings) + + @classmethod + def tearDownClass(cls): + GuiShareTest.tear_down() + + @pytest.mark.gui + def test_gui(self): + self.run_all_common_setup_tests() + self.run_all_share_mode_setup_tests() + self.cancel_the_share(self.gui.share_mode) + +if __name__ == "__main__": + unittest.main() diff --git a/tests/onionshare_share_mode_cancel_share_test.py b/tests/onionshare_share_mode_cancel_share_test.py index ed28ddd7..ed087a2c 100644 --- a/tests/onionshare_share_mode_cancel_share_test.py +++ b/tests/onionshare_share_mode_cancel_share_test.py @@ -8,6 +8,7 @@ class ShareModeCancelTest(unittest.TestCase, TorGuiShareTest): @classmethod def setUpClass(cls): test_settings = { + "startup_timer": True, } cls.gui = TorGuiShareTest.set_up(test_settings) -- cgit v1.2.3-54-g00ecf From 04fd65de11209e201fa39638b978c30198fc8553 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Fri, 8 Mar 2019 12:54:10 +1100 Subject: On a folder name collision, make sure we update the self.receive_mode_dir attribute after creating a unique folder with a suffix. Adjust Receive Mode tests to test for this --- onionshare/web/receive_mode.py | 1 + tests/GuiReceiveTest.py | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/onionshare/web/receive_mode.py b/onionshare/web/receive_mode.py index d6ef86ad..104904ee 100644 --- a/onionshare/web/receive_mode.py +++ b/onionshare/web/receive_mode.py @@ -297,6 +297,7 @@ class ReceiveModeRequest(Request): new_receive_mode_dir = '{}-{}'.format(self.receive_mode_dir, i) try: os.makedirs(new_receive_mode_dir, 0o700, exist_ok=False) + self.receive_mode_dir = new_receive_mode_dir break except OSError: pass diff --git a/tests/GuiReceiveTest.py b/tests/GuiReceiveTest.py index 8a03283e..f34c955b 100644 --- a/tests/GuiReceiveTest.py +++ b/tests/GuiReceiveTest.py @@ -5,7 +5,7 @@ from PyQt5 import QtCore, QtTest from .GuiBaseTest import GuiBaseTest class GuiReceiveTest(GuiBaseTest): - def upload_file(self, public_mode, file_to_upload, expected_basename): + def upload_file(self, public_mode, file_to_upload, expected_basename, identical_files_at_once=False): '''Test that we can upload the file''' files = {'file[]': open(file_to_upload, 'rb')} if not public_mode: @@ -13,6 +13,9 @@ class GuiReceiveTest(GuiBaseTest): else: path = 'http://127.0.0.1:{}/upload'.format(self.gui.app.port) response = requests.post(path, files=files) + if identical_files_at_once: + # Send a duplicate upload to test for collisions + response = requests.post(path, files=files) QtTest.QTest.qWait(2000) # Make sure the file is within the last 10 seconds worth of filenames @@ -20,7 +23,10 @@ class GuiReceiveTest(GuiBaseTest): now = datetime.now() for i in range(10): date_dir = now.strftime("%Y-%m-%d") - time_dir = now.strftime("%H.%M.%S") + if identical_files_at_once: + time_dir = now.strftime("%H.%M.%S-1") + else: + time_dir = now.strftime("%H.%M.%S") receive_mode_dir = os.path.join(self.gui.common.settings.get('data_dir'), date_dir, time_dir) expected_filename = os.path.join(receive_mode_dir, expected_basename) if os.path.exists(expected_filename): @@ -119,6 +125,9 @@ class GuiReceiveTest(GuiBaseTest): self.counter_incremented(self.gui.receive_mode, 3) self.upload_file(public_mode, '/tmp/testdir/test', 'test') self.counter_incremented(self.gui.receive_mode, 4) + # Test uploading the same file twice at the same time, and make sure no collisions + self.upload_file(public_mode, '/tmp/test.txt', 'test.txt', True) + self.counter_incremented(self.gui.receive_mode, 6) self.uploading_zero_files_shouldnt_change_ui(self.gui.receive_mode, public_mode) self.history_indicator(self.gui.receive_mode, public_mode) self.server_is_stopped(self.gui.receive_mode, False) -- cgit v1.2.3-54-g00ecf From 040e7e4ca9c383248457496a9071dba16134e138 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 10 Mar 2019 09:06:27 +1100 Subject: Remove unnecessary attribute from OnionShare object --- onionshare/onionshare.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/onionshare/onionshare.py b/onionshare/onionshare.py index a91f28ba..6598b975 100644 --- a/onionshare/onionshare.py +++ b/onionshare/onionshare.py @@ -41,7 +41,6 @@ class OnionShare(object): self.onion_host = None self.port = None self.stealth = None - self.scheduled_key = None # files and dirs to delete on shutdown self.cleanup_filenames = [] @@ -90,15 +89,11 @@ class OnionShare(object): if self.stealth: self.auth_string = self.onion.auth_string - if self.onion.scheduled_key: - self.scheduled_key = self.onion.scheduled_key - def cleanup(self): """ Shut everything down and clean up temporary files, etc. """ self.common.log('OnionShare', 'cleanup') - self.scheduled_key = None # Cleanup files try: -- cgit v1.2.3-54-g00ecf From 967b213df1351a5ef78453a10886f04400ad29ab Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sun, 10 Mar 2019 15:07:38 -0700 Subject: Weblate merge (#940) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Translated using Weblate (Chinese (Simplified)) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/zh_Hans/ Translated using Weblate (Chinese (Simplified)) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/zh_Hans/ Added translation using Weblate (Malay) Translated using Weblate (German) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/de/ Translated using Weblate (German) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/de/ Merge branch 'origin/develop' into Weblate. Merge branch 'origin/develop' into Weblate. Merge branch 'origin/develop' into Weblate. Merge branch 'origin/develop' into Weblate. Merge branch 'origin/develop' into Weblate. Merge branch 'origin/develop' into Weblate. Merge branch 'origin/develop' into Weblate. Merge branch 'origin/develop' into Weblate. Translated using Weblate (French) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/fr/ Translated using Weblate (Bengali) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/bn/ Translated using Weblate (Bengali) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/bn/ * Translated using Weblate (Chinese (Simplified)) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/zh_Hans/ * Translated using Weblate (German) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/de/ * Translated using Weblate (German) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/de/ * Translated using Weblate (Portuguese (Brazil)) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/pt_BR/ * Translated using Weblate (Italian) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/it/ * Translated using Weblate (Finnish) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/fi/ * Translated using Weblate (Norwegian Bokmål) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/nb_NO/ * Translated using Weblate (Arabic) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/ar/ * Translated using Weblate (Danish) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/da/ * Translated using Weblate (Indonesian) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/id/ * Translated using Weblate (Swedish) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/sv/ * Translated using Weblate (Chinese (Traditional)) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/zh_Hant/ * Translated using Weblate (Indonesian) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/id/ * Translated using Weblate (Norwegian Bokmål) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/nb_NO/ * Translated using Weblate (Swedish) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/sv/ * Translated using Weblate (Hindi) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/hi/ Added translation using Weblate (Hindi) --- share/locale/ar.json | 123 ++++++++++++++----------- share/locale/bn.json | 114 ++++++++++++----------- share/locale/da.json | 2 +- share/locale/de.json | 22 ++++- share/locale/fi.json | 184 ++++++++++++++++++++++++++++++++++--- share/locale/fr.json | 2 +- share/locale/hi.json | 184 +++++++++++++++++++++++++++++++++++++ share/locale/id.json | 125 ++++++++++++------------- share/locale/it.json | 4 +- share/locale/ms.json | 184 +++++++++++++++++++++++++++++++++++++ share/locale/no.json | 5 +- share/locale/pt_BR.json | 7 +- share/locale/sv.json | 27 +++--- share/locale/zh_Hans.json | 52 +++++------ share/locale/zh_Hant.json | 227 +++++++++++++++++++++++----------------------- 15 files changed, 926 insertions(+), 336 deletions(-) create mode 100644 share/locale/hi.json create mode 100644 share/locale/ms.json diff --git a/share/locale/ar.json b/share/locale/ar.json index b70127fa..4d79b942 100644 --- a/share/locale/ar.json +++ b/share/locale/ar.json @@ -23,133 +23,133 @@ "systray_download_canceled_message": "الغى المستخدم التحميل", "systray_upload_started_title": "بدأ الرفع", "systray_upload_started_message": "بدأ مستخدم رفع ملفات الى حاسوبك", - "help_local_only": "", + "help_local_only": "لا تستخدم تور (فقط لغرض التطوير)", "help_stay_open": "استمر في المشاركة بعد اول تحميل", "help_shutdown_timeout": "أوقف المشاركة بعد ثواني محددة", "help_stealth": "", "help_receive": "", "help_debug": "", - "help_filename": "", + "help_filename": "قائمة الملفات أو المجلدات للمشاركة", "help_config": "", "gui_drag_and_drop": "", "gui_add": "إضافة", "gui_delete": "حذف", "gui_choose_items": "إختر", - "gui_share_start_server": "", - "gui_share_stop_server": "", + "gui_share_start_server": "ابدأ المشاركة", + "gui_share_stop_server": "أوقف المشاركة", "gui_share_stop_server_shutdown_timeout": "", "gui_share_stop_server_shutdown_timeout_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", "gui_receive_stop_server_shutdown_timeout": "", "gui_receive_stop_server_shutdown_timeout_tooltip": "", - "gui_copy_url": "", + "gui_copy_url": "نسخ العنوان", "gui_copy_hidservauth": "", "gui_downloads": "", "gui_no_downloads": "", "gui_canceled": "ألغى", "gui_copied_url_title": "", - "gui_copied_url": "", + "gui_copied_url": "تم نسخ عنوان OnionShare إلى الحافظة", "gui_copied_hidservauth_title": "", "gui_copied_hidservauth": "", "gui_please_wait": "", "gui_download_upload_progress_complete": "", "gui_download_upload_progress_starting": "", "gui_download_upload_progress_eta": "", - "version_string": "", + "version_string": "OnionShare {0:s} | https://onionshare.org/", "gui_quit_title": "", - "gui_share_quit_warning": "", - "gui_receive_quit_warning": "", + "gui_share_quit_warning": "إنك بصدد إرسال ملفات.هل أنت متأكد أنك تريد الخروج مِن OnionShare؟", + "gui_receive_quit_warning": "إنك بصدد تلقي ملفات.هل أنت متأكد أنك تريد الخروج مِن OnionShare؟", "gui_quit_warning_quit": "خروج", "gui_quit_warning_dont_quit": "إلغاء", "error_rate_limit": "", - "zip_progress_bar_format": "", + "zip_progress_bar_format": "جاري الضغط: %p%", "error_stealth_not_supported": "", "error_ephemeral_not_supported": "", "gui_settings_window_title": "الإعدادات", - "gui_settings_whats_this": "", - "gui_settings_stealth_option": "", + "gui_settings_whats_this": "ما هذا؟", + "gui_settings_stealth_option": "استخدام ترخيص العميل", "gui_settings_stealth_hidservauth_string": "", "gui_settings_autoupdate_label": "التحقق من الإصدار الجديد", - "gui_settings_autoupdate_option": "", - "gui_settings_autoupdate_timestamp": "", + "gui_settings_autoupdate_option": "قم بإشعاري عند توفر إصدار جديد", + "gui_settings_autoupdate_timestamp": "آخر فحص: {}", "gui_settings_autoupdate_timestamp_never": "أبدا", - "gui_settings_autoupdate_check_button": "", + "gui_settings_autoupdate_check_button": "تحقق من وجود نسخة جديدة", "gui_settings_general_label": "الإعدادات العامة", - "gui_settings_sharing_label": "", - "gui_settings_close_after_first_download_option": "", - "gui_settings_connection_type_label": "", - "gui_settings_connection_type_bundled_option": "", + "gui_settings_sharing_label": "إعدادات المشاركة", + "gui_settings_close_after_first_download_option": "إيقاف المشاركة بعد اكتمال إرسال الملفات", + "gui_settings_connection_type_label": "كيف ينبغي أن يتصل OnionShare بشبكة تور؟", + "gui_settings_connection_type_bundled_option": "استخدام إصدار تور المدمج في صلب OnionShare", "gui_settings_connection_type_automatic_option": "", "gui_settings_connection_type_control_port_option": "", "gui_settings_connection_type_socket_file_option": "", - "gui_settings_connection_type_test_button": "", - "gui_settings_control_port_label": "", + "gui_settings_connection_type_test_button": "اختبار الاتصال بشبكة تور", + "gui_settings_control_port_label": "منفذ التحكم", "gui_settings_socket_file_label": "", "gui_settings_socks_label": "", - "gui_settings_authenticate_label": "", + "gui_settings_authenticate_label": "إعدادات المصادقة على تور", "gui_settings_authenticate_no_auth_option": "", "gui_settings_authenticate_password_option": "كلمة السر", "gui_settings_password_label": "كلمة السر", - "gui_settings_tor_bridges": "", - "gui_settings_tor_bridges_no_bridges_radio_option": "", + "gui_settings_tor_bridges": "دعم جسر تور", + "gui_settings_tor_bridges_no_bridges_radio_option": "لا تستخدم الجسور", "gui_settings_tor_bridges_obfs4_radio_option": "", "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "", "gui_settings_tor_bridges_meek_lite_azure_radio_option": "", "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "", "gui_settings_meek_lite_expensive_warning": "", - "gui_settings_tor_bridges_custom_radio_option": "", + "gui_settings_tor_bridges_custom_radio_option": "استخدام جسور مخصصة", "gui_settings_tor_bridges_custom_label": "", "gui_settings_tor_bridges_invalid": "", "gui_settings_button_save": "حفظ", "gui_settings_button_cancel": "إلغاء", "gui_settings_button_help": "مساعدة", "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_shutdown_timeout": "إيقاف المشاركة يوم:", "settings_error_unknown": "", "settings_error_automatic": "", - "settings_error_socket_port": "", + "settings_error_socket_port": "لا يمكن الاتصال بوحدة تحكم تور في {}:{}.", "settings_error_socket_file": "", "settings_error_auth": "", - "settings_error_missing_password": "", + "settings_error_missing_password": "متصل بوحدة تحكم تور، ولكنه يتطلب كلمة سرية للمصادقة.", "settings_error_unreadable_cookie_file": "", "settings_error_bundled_tor_not_supported": "", "settings_error_bundled_tor_timeout": "", "settings_error_bundled_tor_broken": "", "settings_test_success": "", - "error_tor_protocol_error": "", - "error_tor_protocol_error_unknown": "", - "error_invalid_private_key": "", - "connecting_to_tor": "", + "error_tor_protocol_error": "هناك خطأ مع تور: {}", + "error_tor_protocol_error_unknown": "حدث خطأ مجهول مع تور", + "error_invalid_private_key": "نوع المفتاح الخاص هذا غير معتمد", + "connecting_to_tor": "جارٍ الاتصال بشبكة تور", "update_available": "", "update_error_check_error": "", "update_error_invalid_latest_version": "", - "update_not_available": "", + "update_not_available": "إنك تقوم بتشغيل آخر نسخة مِن OnionShare.", "gui_tor_connection_ask": "", "gui_tor_connection_ask_open_settings": "نعم,", "gui_tor_connection_ask_quit": "خروج", "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", - "gui_tor_connection_lost": "", + "gui_tor_connection_lost": "غير متصل بشبكة تور.", "gui_server_started_after_timeout": "", "gui_server_timeout_expired": "", "share_via_onionshare": "", - "gui_use_legacy_v2_onions_checkbox": "", - "gui_save_private_key_checkbox": "", + "gui_use_legacy_v2_onions_checkbox": "استخدم العناوين الموروثة", + "gui_save_private_key_checkbox": "استخدم عنوانا ثابتا", "gui_share_url_description": "", "gui_receive_url_description": "", "gui_url_label_persistent": "", "gui_url_label_stay_open": "", "gui_url_label_onetime": "", "gui_url_label_onetime_and_persistent": "", - "gui_status_indicator_share_stopped": "", - "gui_status_indicator_share_working": "", - "gui_status_indicator_share_started": "", - "gui_status_indicator_receive_stopped": "", - "gui_status_indicator_receive_working": "", + "gui_status_indicator_share_stopped": "جاهز للمشاركة", + "gui_status_indicator_share_working": "يبدأ…", + "gui_status_indicator_share_started": "المشاركة جارية", + "gui_status_indicator_receive_stopped": "جاهز للتلقي", + "gui_status_indicator_receive_working": "يبدأ…", "gui_status_indicator_receive_started": "جاري الإستلام", - "gui_file_info": "", - "gui_file_info_single": "", + "gui_file_info": "{} ملفات، {}", + "gui_file_info_single": "{} ملف، {}", "history_in_progress_tooltip": "", "history_completed_tooltip": "", "info_in_progress_uploads_tooltip": "", @@ -159,17 +159,17 @@ "receive_mode_warning": "", "gui_receive_mode_warning": "", "receive_mode_upload_starting": "", - "receive_mode_received_file": "", - "gui_mode_share_button": "", - "gui_mode_receive_button": "", - "gui_settings_receiving_label": "", + "receive_mode_received_file": "تم تلقي: {}", + "gui_mode_share_button": "مشاركة الملفات", + "gui_mode_receive_button": "تلقّي ملفات", + "gui_settings_receiving_label": "إعدادات الاستلام", "gui_settings_downloads_label": "", "gui_settings_downloads_button": "استعراض", "gui_settings_receive_allow_receiver_shutdown_checkbox": "", - "gui_settings_public_mode_checkbox": "", + "gui_settings_public_mode_checkbox": "الوضع العام", "systray_close_server_title": "", "systray_close_server_message": "", - "systray_page_loaded_title": "", + "systray_page_loaded_title": "تم تحميل الصفحة", "systray_download_page_loaded_message": "", "systray_upload_page_loaded_message": "", "gui_uploads": "", @@ -180,7 +180,28 @@ "gui_upload_finished": "", "gui_download_in_progress": "", "gui_open_folder_error_nautilus": "", - "gui_settings_language_label": "", + "gui_settings_language_label": "اللغة المفضلة", "gui_settings_language_changed_notice": "", - "timeout_upload_still_running": "انتظار اكتمال الرفع" + "timeout_upload_still_running": "انتظار اكتمال الرفع", + "gui_add_files": "إضافة ملفات", + "gui_add_folder": "إضافة مجلد", + "gui_settings_onion_label": "إعدادات البصل", + "gui_connect_to_tor_for_onion_settings": "اربط الاتصال بشبكة تور لترى إعدادات خدمة البصل", + "gui_settings_data_dir_label": "حفظ الملفات على", + "gui_settings_data_dir_browse_button": "تصفح", + "systray_page_loaded_message": "تم تحميل عنوان OnionShare", + "systray_share_started_title": "بدأت المشاركة", + "systray_share_started_message": "بدأت عملية إرسال الملفات إلى شخص ما", + "systray_share_completed_title": "اكتملت المشاركة", + "systray_share_completed_message": "انتهت عملية إرسال الملفات", + "systray_share_canceled_title": "ألغيت المشاركة", + "systray_share_canceled_message": "شخص ما ألغى استقبال ملفاتك", + "systray_receive_started_title": "جاري الاستلام", + "systray_receive_started_message": "شخص ما يرسل لك ملفات", + "gui_all_modes_history": "السجل الزمني", + "gui_all_modes_clear_history": "مسح الكل", + "gui_share_mode_no_files": "لم ترسل أية ملفات بعد", + "gui_share_mode_timeout_waiting": "في انتظار الانتهاء من الإرسال", + "gui_receive_mode_no_files": "لم تتلق أية ملفات بعد", + "gui_receive_mode_timeout_waiting": "في انتظار الانتهاء من الاستلام" } diff --git a/share/locale/bn.json b/share/locale/bn.json index 691c5047..c2071d10 100644 --- a/share/locale/bn.json +++ b/share/locale/bn.json @@ -40,9 +40,9 @@ "gui_share_stop_server": "শেয়ার করা বন্ধ করো", "gui_share_stop_server_shutdown_timeout": "শেয়ার করা বন্ধ করো ({} সেকেন্ড বাকি)", "gui_share_stop_server_shutdown_timeout_tooltip": "টাইমার অনুযায়ী অটোমেটিক বন্ধ হবে {}-তে", - "gui_receive_start_server": "প্রাপ্ত মোড আরম্ভ করুন ", - "gui_receive_stop_server": "প্রাপ্ত মোড বন্ধ করুন ", - "gui_receive_stop_server_shutdown_timeout": "প্রাপ্ত মোড বন্ধ করুন ({}সে বাকি) ", + "gui_receive_start_server": "প্রাপ্ত মোড আরম্ভ করুন", + "gui_receive_stop_server": "প্রাপ্ত মোড বন্ধ করুন", + "gui_receive_stop_server_shutdown_timeout": "প্রাপ্ত মোড বন্ধ করুন ({}সে বাকি)", "gui_receive_stop_server_shutdown_timeout_tooltip": "টাইমার অনুযায়ী অটোমেটিক বন্ধ হবে {}-তে", "gui_copy_url": "এড্রেস কপি করো", "gui_copy_hidservauth": "HidServAuth কপি করো", @@ -107,69 +107,69 @@ "gui_settings_button_help": "সাহায্য", "gui_settings_shutdown_timeout_checkbox": "কানেকশন বন্ধ করার জন্য অটোমেটিক টাইমার ব্যবহার করো", "gui_settings_shutdown_timeout": "শেয়ার বন্ধ করুন:", - "settings_error_unknown": "টর নিয়ন্ত্রকের সাথে সংযোগ করতে পারে না কারণ আপনার বিন্যাসনসমূহ বোধগম্য নয় । ", + "settings_error_unknown": "টর নিয়ন্ত্রকের সাথে সংযোগ করতে পারে না কারণ আপনার বিন্যাসনসমূহ বোধগম্য নয় ।", "settings_error_automatic": "টর নিয়ন্ত্রকের সাথে সংযোগ স্থাপন করা যায়নি । টর ব্রাউজার (torproject.org থেকে পাওয়া যায়) ব্রাকগ্রাউন চলমান?", - "settings_error_socket_port": "{}: {} এ টর নিয়ন্ত্রকের সাথে সংযোগ করতে পারছি না । ", - "settings_error_socket_file": "সকেট ফাইল {} ব্যবহার করে টর নিয়ন্ত্রকের সাথে সংযোগ করতে পারে না । ", - "settings_error_auth": "{}: {}-এর সাথে সংযুক্ত, কিন্তু পরীক্ষা করা যাচ্ছে না । হয়তো এটা কোন টর নিয়ন্ত্রক নয়? ", + "settings_error_socket_port": "{}: {} এ টর নিয়ন্ত্রকের সাথে সংযোগ করতে পারছি না ।", + "settings_error_socket_file": "সকেট ফাইল {} ব্যবহার করে টর নিয়ন্ত্রকের সাথে সংযোগ করতে পারে না ।", + "settings_error_auth": "{}: {}-এর সাথে সংযুক্ত, কিন্তু পরীক্ষা করা যাচ্ছে না । হয়তো এটা কোন টর নিয়ন্ত্রক নয়?", "settings_error_missing_password": "টর কন্ট্রোলার সাথে সংযুক্ত, কিন্তু তা প্রমাণীকরণ একটি পাসওয়ার্ড প্রয়োজন.", - "settings_error_unreadable_cookie_file": "টর নিয়ন্ত্রকের সাথে সংযুক্ত, কিন্তু পাসওয়ার্ড ভুল হতে পারে, অথবা আপনার ব্যবহারকারীকে কুকি ফাইলে পড়ার অনুমতি দেওয়া হয়নি। ", + "settings_error_unreadable_cookie_file": "টর নিয়ন্ত্রকের সাথে সংযুক্ত, কিন্তু পাসওয়ার্ড ভুল হতে পারে, অথবা আপনার ব্যবহারকারীকে কুকি ফাইলে পড়ার অনুমতি দেওয়া হয়নি।", "settings_error_bundled_tor_not_supported": "OnionShare এর সাথে আসা টর সংস্করণটি ব্যবহার করে উইন্ডোজ বা ম্যাকোসে ডেভেলপার মোডে কাজ করে না।", "settings_error_bundled_tor_timeout": "টর সাথে সংযোগ করার জন্য খুব বেশি সময় লাগছে। হয়তো আপনি ইন্টারনেটের সাথে সংযুক্ত নন, অথবা একটি ভুল সিস্টেম ঘড়ি আছে?", "settings_error_bundled_tor_broken": "ব্যাকগ্রাউন্ডে OnionShare টর এর সাথে সংযুক্ত নয়:\n\n\n{}", - "settings_test_success": "টর কন্ট্রোলার এর সঙ্গে যুক্ত হয়েছে ।\n\nটর সংস্করণ: {}\n\nOnion Services সেবা সমর্থন করে: {}.\n\nক্লায়েন্ট প্রমাণীকরণ সমর্থন করে: {}.\n\nnext-gen .onion ঠিকানাগুলো সমর্থন করে: {} । ", - "error_tor_protocol_error": "টর-এ একটি ত্রুটি ছিল: {} ", + "settings_test_success": "টর কন্ট্রোলার এর সঙ্গে যুক্ত হয়েছে ।\n\nটর সংস্করণ: {}\nOnion Services সেবা সমর্থন করে: {}.\nক্লায়েন্ট প্রমাণীকরণ সমর্থন করে: {}.\nnext-gen .onion ঠিকানাগুলো সমর্থন করে: {} ।", + "error_tor_protocol_error": "টর-এ একটি ত্রুটি ছিল: {}", "error_tor_protocol_error_unknown": "টর-এ একটি অজানা ত্রুটি আছে", - "error_invalid_private_key": "এই ব্যক্তিগত কী ধরন টি অসমর্থিত ", - "connecting_to_tor": "টর নেটওয়ার্কে সংযুক্ত হচ্ছে ", - "update_available": "", - "update_error_check_error": "নতুন সংস্করণের জন্য পরীক্ষা করা যায়নি: onionshare ওয়েবসাইট বলছে সাম্প্রতিক সংস্করণটি হচ্ছে অস্বীকৃত ' {} '...", + "error_invalid_private_key": "এই ব্যক্তিগত কী ধরন টি অসমর্থিত", + "connecting_to_tor": "টর নেটওয়ার্কে সংযুক্ত হচ্ছে", + "update_available": "নতুন OnionShare বের হয়েছে । এটি পেতে এখানে ক্লিক করুন

আপনি {} এবং সাম্প্রতিকতম {} ব্যবহার করছেন ।", + "update_error_check_error": "নতুন সংস্করণের জন্য পরীক্ষা করা যায়নি: onionshare ওয়েবসাইট বলছে সাম্প্রতিক সংস্করণটি হচ্ছে অস্বীকৃত ' {} '…", "update_error_invalid_latest_version": "নতুন সংস্করণের জন্য পরীক্ষা করা যায়নি: হয়তো আপনি টর-এর সাথে সংযুক্ত নন, অথবা OnionShare ওয়েবসাইট বন্ধ আছে?", "update_not_available": "আপনি সর্বশেষ OnionShare চালাচ্ছেন ।", "gui_tor_connection_ask": "টর থেকে সংযোগ সাজাতে সেটিংস খুলুন?", "gui_tor_connection_ask_open_settings": "হ্যাঁ", "gui_tor_connection_ask_quit": "প্রস্থান করুন", - "gui_tor_connection_error_settings": " কিভাবে onionshare সেটিংসে টর নেটওয়ার্ক সংযোগ করে পরিবর্তন করতে চেষ্টা করুন ।", - "gui_tor_connection_canceled": "টর-এ সংযোগ করা যায়নি ।\n\nআপনি ইন্টারনেটের সাথে সংযুক্ত আছেন কিনা তা নিশ্চিত করুন, তারপর onionshare পুনরায় খুলুন এবং টর এর সংযোগটি সেট আপ করুন । ", - "gui_tor_connection_lost": "টর থেকে বিচ্ছিন্ন । ", - "gui_server_started_after_timeout": "সার্ভার শুরু হওয়ার আগেই অটো স্টপ টাইমার শেষ হয়ে যায় ।\n\nঅনুগ্রহ করে একটি নতুন শেয়ার তৈরি করুন. ", - "gui_server_timeout_expired": "অটো-স্টপ টাইমার ইতিমধ্যেই শেষ হয়ে গিয়েছে ।\n\nঅনুগ্রহ করে শেয়ারিং শুরু করতে এটি আপডেট করুন. ", - "share_via_onionshare": "এটি OnionShare ", - "gui_use_legacy_v2_onions_checkbox": "লিগ্যাসি ঠিকানাগুলি ব্যবহার করুন ", - "gui_save_private_key_checkbox": "একটি অবিরাম ঠিকানা ব্যবহার করুন ", - "gui_share_url_description": "", - "gui_receive_url_description": "", - "gui_url_label_persistent": "", - "gui_url_label_stay_open": "এই শেয়ারটি অটো-স্টপ হবে না । ", - "gui_url_label_onetime": "এই শেয়ারটি প্রথম সমাপ্তির পরে বন্ধ হবে. ", - "gui_url_label_onetime_and_persistent": "", - "gui_status_indicator_share_stopped": "শেয়ার করার জন্য প্রস্তুত ", - "gui_status_indicator_share_working": "শুরু...", + "gui_tor_connection_error_settings": "কিভাবে onionshare সেটিংসে টর নেটওয়ার্ক সংযোগ করে পরিবর্তন করতে চেষ্টা করুন ।", + "gui_tor_connection_canceled": "টর-এ সংযোগ করা যায়নি ।\n\nআপনি ইন্টারনেটের সাথে সংযুক্ত আছেন কিনা তা নিশ্চিত করুন, তারপর onionshare পুনরায় খুলুন এবং টর এর সংযোগটি সেট আপ করুন ।", + "gui_tor_connection_lost": "টর থেকে বিচ্ছিন্ন ।", + "gui_server_started_after_timeout": "সার্ভার শুরু হওয়ার আগেই অটো স্টপ টাইমার শেষ হয়ে যায় ।\n\nঅনুগ্রহ করে একটি নতুন শেয়ার তৈরি করুন.", + "gui_server_timeout_expired": "অটো-স্টপ টাইমার ইতিমধ্যেই শেষ হয়ে গিয়েছে ।\n\nঅনুগ্রহ করে শেয়ারিং শুরু করতে এটি আপডেট করুন.", + "share_via_onionshare": "এটি OnionShare", + "gui_use_legacy_v2_onions_checkbox": "লিগ্যাসি ঠিকানাগুলি ব্যবহার করুন", + "gui_save_private_key_checkbox": "একটি অবিরাম ঠিকানা ব্যবহার করুন", + "gui_share_url_description": "এই OnionShare ঠিকানার সাথে যে কেউ টর ব্রাউজার ব্যবহার করে আপনার ফাইলগুলি ডাউনলোড করতে পারে:", + "gui_receive_url_description": "এই OnionShare ঠিকানার সাথে যে কেউ টর ব্রাউজার ব্যবহার করে আপনার কম্পিউটারে ফাইলগুলি আপলোড করতে পারে:", + "gui_url_label_persistent": "এই শেয়ার অটো-স্টপ হবে না ।

প্রতিটি পরবর্তী শেয়ার পুনরায় নতুন ঠিকানা ব্যবহার করে । (অস্থায়ি ঠিকানা ব্যবহার করতে, সেটিংস-এ ' অবিরাম ঠিকানা ব্যাবহার ' বন্ধ করুন ।)", + "gui_url_label_stay_open": "এই শেয়ারটি অটো-স্টপ হবে না ।", + "gui_url_label_onetime": "এই শেয়ারটি প্রথম সমাপ্তির পরে বন্ধ হবে.", + "gui_url_label_onetime_and_persistent": "এই শেয়ার অটো-স্টপ হবে না ।

প্রতিটি পরবর্তী শেয়ার পুনরায় নতুন ঠিকানা ব্যবহার করে । (অস্থায়ি ঠিকানা ব্যবহার করতে, সেটিংস-এ ' অবিরাম ঠিকানা ব্যাবহার ' বন্ধ করুন ।)", + "gui_status_indicator_share_stopped": "শেয়ার করার জন্য প্রস্তুত", + "gui_status_indicator_share_working": "শুরু…", "gui_status_indicator_share_started": "শেয়ারিং", - "gui_status_indicator_receive_stopped": "পাওয়ার জন্য প্রস্তুত ", - "gui_status_indicator_receive_working": "শুরু... ", + "gui_status_indicator_receive_stopped": "পাওয়ার জন্য প্রস্তুত", + "gui_status_indicator_receive_working": "শুরু…", "gui_status_indicator_receive_started": "গ্রহণ", "gui_file_info": "{} ফাইল, {}", "gui_file_info_single": "{} ফাইল, {}", - "history_in_progress_tooltip": "{} অগ্রসর হচ্ছে ", - "history_completed_tooltip": "{} সম্পূর্ণ\n", + "history_in_progress_tooltip": "{} অগ্রসর হচ্ছে", + "history_completed_tooltip": "{} সম্পূর্ণ", "info_in_progress_uploads_tooltip": "", "info_completed_uploads_tooltip": "", "error_cannot_create_downloads_dir": "", "receive_mode_downloads_dir": "", - "receive_mode_warning": "সতর্কীকরণ: প্রাপ্ত মোড লোকজনকে আপনার কম্পিউটারে ফাইল আপলোড করতে দেয় । আপনি যদি তাদের খোলেন তবে কিছু ফাইল সম্ভবত আপনার কম্পিউটারের নিয়ন্ত্রণ নিতে পারে । শুধুমাত্র আপনি যে ব্যক্তিদের বিশ্বাস করেন, অথবা আপনি যদি জানেন আপনি কি করছেন তা শুধুমাত্র খোলা জিনিস । ", + "receive_mode_warning": "সতর্কীকরণ: প্রাপ্ত মোড লোকজনকে আপনার কম্পিউটারে ফাইল আপলোড করতে দেয় । আপনি যদি তাদের খোলেন তবে কিছু ফাইল সম্ভবত আপনার কম্পিউটারের নিয়ন্ত্রণ নিতে পারে । শুধুমাত্র আপনি যে ব্যক্তিদের বিশ্বাস করেন, অথবা আপনি যদি জানেন আপনি কি করছেন তা শুধুমাত্র খোলা জিনিস ।", "gui_receive_mode_warning": "গ্রহণ মোডে লোকজন আপনার কম্পিউটারে ফাইলগুলো আপলোড করতে দেয় ।

আপনি যদি তাদের খোলেন তবে কিছু ফাইল সম্ভবত আপনার কম্পিউটারের নিয়ন্ত্রণ নিতে পারে । শুধুমাত্র আপনি যে ব্যক্তিদের বিশ্বাস করেন, অথবা আপনি যদি জানেন আপনি কি করছেন তা শুধুমাত্র খোলা জিনিস ।", - "receive_mode_upload_starting": "মোট আকারের {} টি আপলোড শুরু হচ্ছে ", - "receive_mode_received_file": "প্রাপ্ত: {} ", - "gui_mode_share_button": "ফাইলগুলো শেয়ার করুন ", - "gui_mode_receive_button": "ফাইল গ্রহণ করা হচ্ছে ", - "gui_settings_receiving_label": "সেটিংস গ্রহণ করা হচ্ছে ", + "receive_mode_upload_starting": "মোট আকারের {} টি আপলোড শুরু হচ্ছে", + "receive_mode_received_file": "প্রাপ্ত: {}", + "gui_mode_share_button": "ফাইলগুলো শেয়ার করুন", + "gui_mode_receive_button": "ফাইল গ্রহণ করা হচ্ছে", + "gui_settings_receiving_label": "সেটিংস গ্রহণ করা হচ্ছে", "gui_settings_downloads_label": "", "gui_settings_downloads_button": "দেখা", - "gui_settings_public_mode_checkbox": "সর্বজনীন মোড ", + "gui_settings_public_mode_checkbox": "সর্বজনীন মোড", "systray_close_server_title": "", "systray_close_server_message": "", - "systray_page_loaded_title": "পৃষ্ঠা লোড করা হয়েছে ", + "systray_page_loaded_title": "পৃষ্ঠা লোড করা হয়েছে", "systray_download_page_loaded_message": "", "systray_upload_page_loaded_message": "", "gui_uploads": "", @@ -179,18 +179,18 @@ "gui_upload_finished_range": "", "gui_upload_finished": "", "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "ফোল্ডার খোলা যাচ্ছে না কারণ nautilus বিদ্যমান নয় । ফাইলটি এখানে: {} ", - "gui_settings_language_label": "পছন্দনীয় ভাষা ", - "gui_settings_language_changed_notice": "আপনার ভাষার পরিবর্তন প্রভাব বিস্তার করার জন্য OnionShare পুনর্সূচনা করুন. ", + "gui_open_folder_error_nautilus": "ফোল্ডার খোলা যাচ্ছে না কারণ nautilus বিদ্যমান নয় । ফাইলটি এখানে: {}", + "gui_settings_language_label": "পছন্দনীয় ভাষা", + "gui_settings_language_changed_notice": "আপনার ভাষার পরিবর্তন প্রভাব বিস্তার করার জন্য OnionShare পুনর্সূচনা করুন.", "gui_add_files": "ফাইল যোগ করো", "gui_add_folder": "ফোল্ডার যোগ করো", "gui_settings_onion_label": "Onion সেটিংস", - "gui_connect_to_tor_for_onion_settings": "onion সেবা সেটিংস দেখতে টর এর সাথে সংযোগ করুন ", - "error_cannot_create_data_dir": "onionshare ডাটা ফোল্ডার তৈরি করা যায়নি: {} ", - "receive_mode_data_dir": "আপনার কাছে পাঠানো ফাইলসমূহ এই ফোল্ডারে প্রদর্শিত হয়েছে: {} ", - "gui_settings_data_dir_label": "ফাইল সংরক্ষণ করুন ", + "gui_connect_to_tor_for_onion_settings": "onion সেবা সেটিংস দেখতে টর এর সাথে সংযোগ করুন", + "error_cannot_create_data_dir": "onionshare ডাটা ফোল্ডার তৈরি করা যায়নি: {}", + "receive_mode_data_dir": "আপনার কাছে পাঠানো ফাইলসমূহ এই ফোল্ডারে প্রদর্শিত হয়েছে: {}", + "gui_settings_data_dir_label": "ফাইল সংরক্ষণ করুন", "gui_settings_data_dir_browse_button": "ব্রাউজ", - "systray_page_loaded_message": "onionshare ঠিকানা লোড করা হয়েছে ", + "systray_page_loaded_message": "onionshare ঠিকানা লোড করা হয়েছে", "systray_share_started_title": "শেয়ারিং শুরু করা হয়েছে", "systray_share_completed_title": "শেয়ারিং সম্পূর্ণ হয়েছে", "systray_share_completed_message": "ফাইল পাঠানো শেষ হয়েছে", @@ -200,5 +200,17 @@ "systray_receive_started_message": "কেউ আপনার কাছে ফাইল পাঠাচ্ছে", "gui_all_modes_history": "ইতিহাস", "gui_all_modes_clear_history": "সব পরিষ্কার করুন", - "gui_all_modes_transfer_started": "{} শুরু হয়েছে" + "gui_all_modes_transfer_started": "{} শুরু হয়েছে", + "systray_share_started_message": "কাউকে ফাইল পাঠাতে শুরু", + "gui_all_modes_transfer_finished_range": "স্থানান্তরিত হয়েছে {} - {}", + "gui_all_modes_transfer_finished": "স্থানান্তরিত {}", + "gui_all_modes_transfer_canceled_range": "বাতিলকৃত {} - {}", + "gui_all_modes_transfer_canceled": "বাতিলকৃত {}", + "gui_all_modes_progress_complete": "%p%, {0: সে} অতিক্রান্ত হয়েছে ।", + "gui_all_modes_progress_starting": "{0:সে}, %p% (গণনা করা হচ্ছে)", + "gui_all_modes_progress_eta": "{0:সে}, ইটিএ: {1: সে}, %p%", + "gui_share_mode_no_files": "এখনও কোন ফাইল পাঠানো হয়নি", + "gui_share_mode_timeout_waiting": "প্রেরণ শেষ করার জন্য অপেক্ষা করছে", + "gui_receive_mode_no_files": "কোন ফাইল এখনও প্রাপ্ত হয়নি", + "gui_receive_mode_timeout_waiting": "প্রাপ্তির শেষ পর্যন্ত অপেক্ষা করছে" } diff --git a/share/locale/da.json b/share/locale/da.json index 39edcf22..cef7188a 100644 --- a/share/locale/da.json +++ b/share/locale/da.json @@ -133,7 +133,7 @@ "help_receive": "Modtager aktier i stedet for at sende dem", "gui_share_stop_server_shutdown_timeout": "Stop deling ({}s tilbage)", "gui_receive_quit_warning": "Du er i færd med at modtage filer. Er du sikker på du ønsker at stoppe med at OnionShare?", - "gui_settings_whats_this": "Hvad er dette?", + "gui_settings_whats_this": "Hvad er det?", "gui_settings_general_label": "Generel opsætning", "gui_upload_in_progress": "Upload begyndte {}", "gui_download_in_progress": "Download begyndte {}", diff --git a/share/locale/de.json b/share/locale/de.json index 20ad9fe4..4435798d 100644 --- a/share/locale/de.json +++ b/share/locale/de.json @@ -7,7 +7,7 @@ "closing_automatically": "Gestoppt, da der Download erfolgreich beendet wurde", "large_filesize": "Warnung: Das Hochladen von großen Dateien kann Stunden dauern", "help_local_only": "Tor nicht verwenden (nur für Entwicklung)", - "help_stay_open": "Den OnionService nicht anhalten nachdem ein Download beendet wurde", + "help_stay_open": "Den Server weiterlaufen lassen, nachdem die Dateien verschickt wurden", "help_debug": "Schreibe Fehler von OnionShare nach stdout und Webfehler auf die Festplatte", "help_filename": "Liste der zu teilenden Dateien oder Ordner", "gui_drag_and_drop": "Dateien und Ordner hierher ziehen\num sie zu teilen", @@ -42,7 +42,7 @@ "gui_settings_window_title": "Eintellungen", "gui_settings_autoupdate_timestamp": "Letzte Überprüfung: {}", "gui_settings_autoupdate_timestamp_never": "Niemals", - "gui_settings_close_after_first_download_option": "Server nach dem ersten Download stoppen", + "gui_settings_close_after_first_download_option": "Server nach Download der Dateien stoppen", "gui_settings_connection_type_label": "Wie soll sich OnionShare mit Tor verbinden?", "config_onion_service": "Richte den Onionservice auf Port {0:d} ein.", "give_this_url_stealth": "Gib dem Empfänger diese URL und die HidServAuth-Zeile:", @@ -197,5 +197,21 @@ "systray_share_completed_title": "Freigabe erfolgt", "systray_share_completed_message": "Dateien erfolgreich versandt", "systray_share_canceled_title": "Freigabe abgebrochen", - "systray_share_canceled_message": "Jemand hat den Download deiner Dateien abgebrochen" + "systray_share_canceled_message": "Jemand hat den Download deiner Dateien abgebrochen", + "systray_receive_started_title": "Empfange", + "systray_receive_started_message": "Jemand sendet dir Dateien", + "gui_all_modes_history": "Verlauf", + "gui_all_modes_clear_history": "Alle löschen", + "gui_all_modes_transfer_started": "{} gestartet", + "gui_all_modes_transfer_finished_range": "{} - {} übertragen", + "gui_all_modes_transfer_finished": "{} übertragen", + "gui_all_modes_transfer_canceled_range": "{} - {} abgebrochen", + "gui_all_modes_transfer_canceled": "{} abgebrochen", + "gui_all_modes_progress_starting": "{0:s}, %p% (berechne)", + "gui_share_mode_no_files": "Bisher keine Dateien versendet", + "gui_share_mode_timeout_waiting": "Warte auf Abschluss der Sendung", + "gui_receive_mode_no_files": "Bisher keine Dateien empfangen", + "gui_receive_mode_timeout_waiting": "Warte auf Abschluss des Empfangs", + "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", + "gui_all_modes_progress_complete": "%p%, {0:s} vergangen." } diff --git a/share/locale/fi.json b/share/locale/fi.json index 7f31450f..ce2a7eb1 100644 --- a/share/locale/fi.json +++ b/share/locale/fi.json @@ -1,25 +1,185 @@ { - "preparing_files": "Valmistellaan tiedostoja jaettavaksi.", + "preparing_files": "Pakataan tiedostoja.", "give_this_url": "Anna tämä URL-osoite vastaanottajalle:", - "ctrlc_to_stop": "Näppäin Ctrl-C pysäyttää palvelimen", + "ctrlc_to_stop": "Pysäytä palvelin painamalla Ctrl+C", "not_a_file": "{0:s} Ei ole tiedosto.", "other_page_loaded": "URL-osoite ladattu", - "closing_automatically": "Lataus valmis. Suljetaan automaattisesti", - "large_filesize": "Varoitus: Isojen tiedostojen lähetys saattaa kestää tunteja", - "help_local_only": "Älä käytä Toria: vain ohjelmakehitykseen", - "help_stay_open": "Pidä piilopalvelu käynnissä latauksen jälkeen.", - "help_debug": "Tallentaa virheet levylle", + "closing_automatically": "Lähetys valmis. Suljetaan automaattisesti", + "large_filesize": "Varoitus: Ison tiedoston lähetys saattaa kestää tunteja", + "help_local_only": "Älä käytä Toria (vain kehitykseen)", + "help_stay_open": "Jatka jakoa tiedostojen lähetyksen jälkeen", + "help_debug": "Kirjaa OnionShare virheet stdout:tiin, ja verkko virheet levylle", "help_filename": "Luettele jaettavat tiedostot tai kansiot", "gui_drag_and_drop": "Vedä ja pudota\ntiedostot tänne", "gui_add": "Lisää", "gui_delete": "Poista", "gui_choose_items": "Valitse", - "gui_share_start_server": "Käynnistä palvelin", - "gui_share_stop_server": "Pysäytä palvelin", + "gui_share_start_server": "Aloita jakaminen", + "gui_share_stop_server": "Pysäytä jakaminen", "gui_copy_url": "Kopioi URL-osoite", "gui_downloads": "Lataukset:", "gui_canceled": "Peruutettu", - "gui_copied_url": "URL-osoite kopioitu leikepöydälle", - "gui_please_wait": "Odota...", - "zip_progress_bar_format": "Tiivistän tiedostoja: %p%" + "gui_copied_url": "OnionShare-osoite kopioitu leikepöydälle", + "gui_please_wait": "Käynnistyy... Peruuta napsauttamalla.", + "zip_progress_bar_format": "Pakataan: %p%", + "config_onion_service": "Onion-palvelua asetetaan porttiin {0:d}.", + "give_this_url_stealth": "Anna tämä osoite ja HidServAuth rivi vastaanottajalle:", + "give_this_url_receive": "Anna tämä osoite lähettäjälle:", + "give_this_url_receive_stealth": "Anna tämä osoite ja HidServAuth lähettäjälle:", + "not_a_readable_file": "{0:s} ei ole luettava tiedosto.", + "no_available_port": "Vapaata porttia onion palvelulle ei löydetty", + "close_on_timeout": "Pysäytetty koska auto-stop ajastin loppui", + "help_shutdown_timeout": "Lopeta jakaminen annetun sekunnin kuluttua", + "help_stealth": "Käytä asiakasvaltuutusta (edistynyt)", + "help_receive": "Vastaanota osia niiden lähettämisen sijaan", + "help_config": "Mukautettu JSON-määritystiedoston sijainti (valinnainen)", + "gui_add_files": "Lisää tiedostoja", + "gui_add_folder": "Lisää kansio", + "gui_share_stop_server_shutdown_timeout": "Lopeta jakaminen({}s jäljellä)", + "gui_share_stop_server_shutdown_timeout_tooltip": "Auto-stop ajastin loppuu {} jälkeen", + "gui_receive_start_server": "Aloita vastaanotto tila", + "gui_receive_stop_server": "Lopeta vastaanotto tila", + "gui_receive_stop_server_shutdown_timeout": "Lopeta vastaanotto tila ({}s jäljellä)", + "gui_receive_stop_server_shutdown_timeout_tooltip": "Auto-stop ajastin loppuu kello {}", + "gui_copy_hidservauth": "Kopioi HidServAuth", + "gui_copied_url_title": "Kopioi OnionShare osoite", + "gui_copied_hidservauth_title": "HidServAuth kopioitu", + "gui_copied_hidservauth": "HidServAuth rivi kopioitu leikepöydälle", + "version_string": "OnionShare {0:s} | https://onionshare.org/", + "gui_quit_title": "Ei niin nopeasti", + "gui_share_quit_warning": "Olet lähettämässä tiedostoja. Haluatko varmasti lopettaa OnionSharen?", + "gui_receive_quit_warning": "Olet vastaanottamassa tiedostoja. Haluatko varmasti lopettaa OnionSharen?", + "gui_quit_warning_quit": "Lopeta", + "gui_quit_warning_dont_quit": "Peruuta", + "error_rate_limit": "Joku on tehnyt liian monta väärää yritystä osoitteeseesi, mikä tarkoittaa, että he voisivat yrittää arvata sitä, joten OnionShare on pysäyttänyt palvelimen. Aloita jakaminen uudelleen ja lähetä vastaanottajalle uusi osoite jatkaaksesi.", + "error_stealth_not_supported": "Asiakasvaltuuden käyttämiseen tarvitaan ainakin Tor 0.2.9.1-alpha (tai Tor Browser 6.5) ja python3-stem 1.5.0.", + "error_ephemeral_not_supported": "OnionSharen käyttö vaatii ainakin Tor 0.2.7.1 ja python3-stem 1.4.0.", + "gui_settings_window_title": "Asetukset", + "gui_settings_whats_this": "Mikä tämä on?", + "gui_settings_stealth_option": "Käytä asiakaslupaa", + "gui_settings_stealth_hidservauth_string": "Nyt kun olet tallentanut yksityisen avaimesi uudelleenkäyttöä varten, voit kopioida HidServAuth-osoitteesi napista.", + "gui_settings_autoupdate_label": "Tarkista päivitykset", + "gui_settings_autoupdate_option": "Ilmoita minulle, kun uusi versio on saatavilla", + "gui_settings_autoupdate_timestamp": "Viimeksi tarkistettu: {}", + "gui_settings_autoupdate_timestamp_never": "ei koskaan", + "gui_settings_autoupdate_check_button": "Tarkista päivitykset", + "gui_settings_general_label": "Yleiset asetukset", + "gui_settings_onion_label": "Onion asetukset", + "gui_settings_sharing_label": "Jako asetukset", + "gui_settings_close_after_first_download_option": "Lopeta jakaminen tiedostojen lähetyksen jälkeen", + "gui_settings_connection_type_label": "Miten OnionSharen kuuluisi yhdistää Tor:iin?", + "gui_settings_connection_type_bundled_option": "Käytä OnionShareen sisäänrakennettua Tor versiota", + "gui_settings_connection_type_automatic_option": "Kokeile automaattista konfigurointia Tor-selaimella", + "gui_settings_connection_type_control_port_option": "Yhdistä käyttämällä control porttia", + "gui_settings_connection_type_socket_file_option": "Yhdistä käyttäen socket tiedostoa", + "gui_settings_connection_type_test_button": "Testaa Tor yhteyttä", + "gui_settings_control_port_label": "Control port", + "gui_settings_socket_file_label": "Socket tiedosto", + "gui_settings_socks_label": "SOCKS portti", + "gui_settings_authenticate_label": "Tor todennus asetukset", + "gui_settings_authenticate_no_auth_option": "Ei todentamista, tai evästeiden todentamista", + "gui_settings_authenticate_password_option": "Salasana", + "gui_settings_password_label": "Salasana", + "gui_settings_tor_bridges": "Tor silta-solmu tuki", + "gui_settings_tor_bridges_no_bridges_radio_option": "Älä käytä silta-solmuja", + "gui_settings_tor_bridges_obfs4_radio_option": "Käytä sisäänrakennettuja obfs4-liitettäviä kuljetuksia", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Käytä sisäänrakennettuja obfs4-liitettäviä kuljetuksia (vaatii obfs4proxyn)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Käytä sisäänrakennettuja meek_lite (Azure)-liitettäviä kuljetuksia", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Käytä sisäänrakennettuja meek_lite (Azure)-liitettäviä kuljetuksia (vaatii obfs4proxyn)", + "gui_settings_meek_lite_expensive_warning": "Varoitus: Meek_lite-sillat ovat Tor-projektille erittäin kalliita.

Käytä niitä vain, jos et pysty muodostamaan yhteyttä suoraan Toriin, obfs4-kuljetusten tai muiden tavallisten silta-solmujen kautta.", + "gui_settings_tor_bridges_custom_radio_option": "Käytä mukautettuja silta-solmuja", + "gui_settings_tor_bridges_custom_label": "Löydät silta-solmut osoitteesta https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Mikään lisäämistäsi silta-solmuista ei toiminut\nUudellen tarkista ne tai lisää muita.", + "gui_settings_button_save": "Tallenna", + "gui_settings_button_cancel": "Peruuttaa", + "gui_settings_button_help": "Apua", + "gui_settings_shutdown_timeout_checkbox": "Käytä auto-stop ajastinta", + "gui_settings_shutdown_timeout": "Lopeta jakaminen kello:", + "settings_error_unknown": "Ei voi muodostaa yhteyttä Tor-ohjaimeen, koska asetuksesi eivät ole järkeviä.", + "settings_error_automatic": "Tor-ohjaimeen ei voitu muodostaa yhteyttä. Onko Tor Browser (saatavilla osoitteesta torproject.org) avoimena taustalla?", + "settings_error_socket_port": "Ei voi muodostaa yhteyttä Tor-ohjaimeen: {}:{}.", + "settings_error_socket_file": "Ei voi muodostaa yhteyttä Tor-ohjaimeen käyttämällä socket-tiedostoa {}.", + "settings_error_auth": "Yhdistetty osoitteeseen {}:{}, mutta ei voida todentaa. Ehkä tämä ei ole Tor ohjain?", + "settings_error_missing_password": "Yhdistetty Tor ohjaimeen, mutta se vaatii salasanan todentamiseen.", + "settings_error_unreadable_cookie_file": "Yhdistetty tor ohjaimeen, mutta salasana saattaa olla väärä, tai käyttäjä ei saa lukea evästetiedostoa.", + "settings_error_bundled_tor_not_supported": "OnionSharen mukana tulevan Tor version käyttäminen ei toimi Developer-tilassa Windowsissa tai MacOSissa.", + "settings_error_bundled_tor_timeout": "Yhdistäminen Tor:iin kestää lian kauan. Ehkä et ole yhteydessä nettiin, tai järjestelmäsi kello on epätarkka?", + "settings_error_bundled_tor_broken": "OnionShare ei voinut yhdistää Tor:iin taustalla\n{}", + "settings_test_success": "Yhditetty Tor ohjaimeen.\n\nTor versio: {}\nTykee lyhytaikaista onion palvelua: {}.\nTukee asiakas todennusta: {}.\nTukee uuden sukupolven .onion osoitteita: {}.", + "error_tor_protocol_error": "Tor-verkossa tapahtui virhe: {}", + "error_tor_protocol_error_unknown": "Tor-verkossa tapahtui tuntematon virhe", + "error_invalid_private_key": "Tätä yksityisen avaimen tyyppiä ei tueta", + "connecting_to_tor": "Yhdistetään Tor-verkkoon", + "update_available": "Uusi OnionShare version on julkaistu. Paina tästä ladataksesi sen.

Sinulla on versio {} ja uusin version on {}.", + "update_error_check_error": "Päivityksien tarkistaminen epäonnistui: OnionShare-sivusto kertoo, että uusin versio on tunnistamaton '{}'…", + "update_error_invalid_latest_version": "Päivityksien tarkistaminen epäonnistui: Ehkä et ole yhteydessä Tor-verkkoon, tai OnionShare-sivusto on alhaalla?", + "update_not_available": "Sinulla on OnionSharen uusin versio.", + "gui_tor_connection_ask": "Avaa asetukset Tor-yhteyden selvittämiseksi?", + "gui_tor_connection_ask_open_settings": "Kyllä", + "gui_tor_connection_ask_quit": "Lopeta", + "gui_tor_connection_error_settings": "Yritä muuttaa miten OnionShare yhdistää Tor-verkkoon asetuksista.", + "gui_tor_connection_canceled": "Tor-yhteyden muodostus epäonnistui.\n\nVarmista että sinulla on toimiva internet yhteys, jonka jälkeen uudelleen avaa OnionShare ja sen Tor-yhteys.", + "gui_tor_connection_lost": "Tor-yhteys katkaistu.", + "gui_server_started_after_timeout": "Auto-stop ajastin loppui ennen palvelimen käynnistymistä.\nLuo uusi jako.", + "gui_server_timeout_expired": "Auto-stop ajastin loppui jo.\nPäivitä se jaon aloittamiseksi.", + "share_via_onionshare": "OnionShare se", + "gui_connect_to_tor_for_onion_settings": "Yhdistä Tor-verkkoon nähdäksesi onion palvelun asetukset", + "gui_use_legacy_v2_onions_checkbox": "Käytä vanhoja osoitteita", + "gui_save_private_key_checkbox": "Käytä pysyviä osoitteita", + "gui_share_url_description": "Kaikki joilla on tämä OnionShare osoite voivat ladata tiedostojasi käyttämällä Tor selainta: ", + "gui_receive_url_description": "Kaikki joilla on tämä OnionShare osoite voivat lähettäätiedostoja tietokoneellesi käyttämällä Tor selainta: ", + "gui_url_label_persistent": "Tämä jako ei pysähdy automaattisesti.

Jokainen seuraava jako käyttää osoitetta uudelleen. (Jos haluat käyttää kertaluontoisia osoitteita, sammuta \"Käytä pysyvää osoitetta\" asetuksissa.)", + "gui_url_label_stay_open": "Tämä jako ei pysähdy automaattisesti.", + "gui_url_label_onetime": "Tämä jako lopetetaan ensimmäisen valmistumisen jälkeen.", + "gui_url_label_onetime_and_persistent": "Tämä jako ei pysähdy automaattisesti.

Jokainen seuraava jako käyttää osoitetta uudelleen. (Jos haluat käyttää kertaluontoisia osoitteita, sammuta \"Käytä pysyvää osoitetta\" asetuksissa.)", + "gui_status_indicator_share_stopped": "Valmis jakamaan", + "gui_status_indicator_share_working": "Aloitetaan…", + "gui_status_indicator_share_started": "Jakaa", + "gui_status_indicator_receive_stopped": "Valmis vastaanottamaan", + "gui_status_indicator_receive_working": "Vastaanotetaan…", + "gui_status_indicator_receive_started": "Vastaanotetaan", + "gui_file_info": "{} tiedostoa, {}", + "gui_file_info_single": "{} tiedosto, {}", + "history_in_progress_tooltip": "{} meneillään", + "history_completed_tooltip": "{} valmistunut", + "error_cannot_create_data_dir": "OnionShare-tietokansiota ei voitu luoda: {}", + "receive_mode_data_dir": "Sinulle lähetetyt tiedostot löytyvät tästä kansiosta: {}", + "receive_mode_warning": "Varoitus: Vastaanottotila antaa ihmisille mahdollisuuden ladata tiedostoja tietokoneeseen. Jotkin tiedostot voivat hallita tietokonettasi, jos avaat ne. Avaa vain tiedostot, joihin luotat, tai jos tiedät, mitä teet.", + "gui_receive_mode_warning": "Vastaanottotila antaa ihmisille mahdollisuuden ladata tiedostoja tietokoneellesi.

Jotkin tiedostot voivat hallita tietokonettasi, jos avaat ne. Avaa asioita vain ihmisiltä, joihin luotat, tai jos tiedät, mitä olet tekemässä. ", + "receive_mode_upload_starting": "Lähetys jonka koko on {} alkaa", + "receive_mode_received_file": "Vastaanotetaan: {}", + "gui_mode_share_button": "Jaa Tiedostoja", + "gui_mode_receive_button": "Vastaanota Tiedostoja", + "gui_settings_receiving_label": "Vastaanoton asetukset", + "gui_settings_data_dir_label": "Tallenna tiedostot", + "gui_settings_data_dir_browse_button": "Selaa", + "gui_settings_public_mode_checkbox": "Julkinen tila", + "gui_open_folder_error_nautilus": "Kansiota ei voi avata, koska nautilus ei ole käytettävissä. Tiedosto on täällä: {}", + "gui_settings_language_label": "Haluttu kieli", + "gui_settings_language_changed_notice": "Käynnistä OnionShare uudelleen, jotta kieli muuttuu.", + "systray_menu_exit": "Lopeta", + "systray_page_loaded_title": "Sivu Ladattu", + "systray_page_loaded_message": "OnionShare-osoite ladattu", + "systray_share_started_title": "Jako Aloitettu", + "systray_share_started_message": "Tiedostojen lähettäminen jollekulle aloitetaan", + "systray_share_completed_title": "Jakaminen Valmis", + "systray_share_completed_message": "Tiedostojen lähetys valmis", + "systray_share_canceled_title": "Jako keskeytetty", + "systray_share_canceled_message": "Joku keskeytti tiedostojesi vastaanottamisen", + "systray_receive_started_title": "Vastaanottaminen Aloitettu", + "systray_receive_started_message": "Joku lähettää tiedostoja sinulle", + "gui_all_modes_history": "Historia", + "gui_all_modes_clear_history": "Tyhjennä", + "gui_all_modes_transfer_started": "Aloitettu {}", + "gui_all_modes_transfer_finished_range": "Siirretty {} - {}", + "gui_all_modes_transfer_finished": "Siirretty {}", + "gui_all_modes_transfer_canceled_range": "Keskeytetty {} - {}", + "gui_all_modes_transfer_canceled": "Keskeytetty {}", + "gui_all_modes_progress_complete": "%p%, {0:s} kulunut.", + "gui_all_modes_progress_starting": "{0:s}, %p% (lasketaan)", + "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", + "gui_share_mode_no_files": "Yhtäkään tiedostoa ei ole lähetetty vielä", + "gui_share_mode_timeout_waiting": "Odotetaan lähettämisen valmistumista", + "gui_receive_mode_no_files": "Yhtäkään tiedostoa ei ole vastaanotettu vielä", + "gui_receive_mode_timeout_waiting": "Odotetaan vastaanottamisen valmistumista" } diff --git a/share/locale/fr.json b/share/locale/fr.json index 8d87a501..6c6ffbb4 100644 --- a/share/locale/fr.json +++ b/share/locale/fr.json @@ -209,7 +209,7 @@ "gui_share_mode_timeout_waiting": "En attente de la fin de l’envoi", "gui_receive_mode_no_files": "Aucun fichier n’a encore été reçu", "gui_receive_mode_timeout_waiting": "En attente de la fin de la réception", - "gui_connect_to_tor_for_onion_settings": "Connectez-vous à Tor pour voir les paramètres du service onion", + "gui_connect_to_tor_for_onion_settings": "Se connecter à Tor pour voir les paramètres du service onion", "systray_share_completed_message": "L’envoi de fichiers est terminé", "gui_all_modes_transfer_canceled": "Annulé le {}", "gui_settings_onion_label": "Paramètres onion", diff --git a/share/locale/hi.json b/share/locale/hi.json new file mode 100644 index 00000000..183ee3e0 --- /dev/null +++ b/share/locale/hi.json @@ -0,0 +1,184 @@ +{ + "config_onion_service": "", + "preparing_files": "", + "give_this_url": "", + "give_this_url_stealth": "", + "give_this_url_receive": "", + "give_this_url_receive_stealth": "", + "ctrlc_to_stop": "", + "not_a_file": "", + "not_a_readable_file": "", + "no_available_port": "", + "other_page_loaded": "", + "close_on_timeout": "", + "closing_automatically": "", + "large_filesize": "", + "help_local_only": "", + "help_stay_open": "", + "help_shutdown_timeout": "", + "help_stealth": "", + "help_receive": "", + "help_debug": "", + "help_filename": "", + "help_config": "", + "gui_drag_and_drop": "", + "gui_add": "जोड़ें", + "gui_add_files": "", + "gui_add_folder": "", + "gui_delete": "हटाएं", + "gui_choose_items": "चुनें", + "gui_share_start_server": "", + "gui_share_stop_server": "", + "gui_share_stop_server_shutdown_timeout": "", + "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_start_server": "", + "gui_receive_stop_server": "", + "gui_receive_stop_server_shutdown_timeout": "", + "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_copy_url": "", + "gui_copy_hidservauth": "", + "gui_canceled": "Canceled", + "gui_copied_url_title": "", + "gui_copied_url": "", + "gui_copied_hidservauth_title": "", + "gui_copied_hidservauth": "", + "gui_please_wait": "", + "version_string": "", + "gui_quit_title": "", + "gui_share_quit_warning": "", + "gui_receive_quit_warning": "", + "gui_quit_warning_quit": "छोड़ें", + "gui_quit_warning_dont_quit": "रद्द करे", + "error_rate_limit": "", + "zip_progress_bar_format": "", + "error_stealth_not_supported": "", + "error_ephemeral_not_supported": "", + "gui_settings_window_title": "सेटिंग", + "gui_settings_whats_this": "", + "gui_settings_stealth_option": "", + "gui_settings_stealth_hidservauth_string": "", + "gui_settings_autoupdate_label": "", + "gui_settings_autoupdate_option": "", + "gui_settings_autoupdate_timestamp": "अंतिम जाँच %1", + "gui_settings_autoupdate_timestamp_never": "कभी नहीँ", + "gui_settings_autoupdate_check_button": "", + "gui_settings_general_label": "जनरल सेटिंग्स", + "gui_settings_onion_label": "", + "gui_settings_sharing_label": "", + "gui_settings_close_after_first_download_option": "", + "gui_settings_connection_type_label": "", + "gui_settings_connection_type_bundled_option": "", + "gui_settings_connection_type_automatic_option": "", + "gui_settings_connection_type_control_port_option": "", + "gui_settings_connection_type_socket_file_option": "", + "gui_settings_connection_type_test_button": "", + "gui_settings_control_port_label": "", + "gui_settings_socket_file_label": "", + "gui_settings_socks_label": "", + "gui_settings_authenticate_label": "", + "gui_settings_authenticate_no_auth_option": "", + "gui_settings_authenticate_password_option": "", + "gui_settings_password_label": "", + "gui_settings_tor_bridges": "", + "gui_settings_tor_bridges_no_bridges_radio_option": "", + "gui_settings_tor_bridges_obfs4_radio_option": "", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "", + "gui_settings_meek_lite_expensive_warning": "", + "gui_settings_tor_bridges_custom_radio_option": "", + "gui_settings_tor_bridges_custom_label": "", + "gui_settings_tor_bridges_invalid": "", + "gui_settings_button_save": "सहेजें", + "gui_settings_button_cancel": "रद्द करे", + "gui_settings_button_help": "मदद", + "gui_settings_shutdown_timeout_checkbox": "", + "gui_settings_shutdown_timeout": "", + "settings_error_unknown": "", + "settings_error_automatic": "", + "settings_error_socket_port": "", + "settings_error_socket_file": "", + "settings_error_auth": "", + "settings_error_missing_password": "", + "settings_error_unreadable_cookie_file": "", + "settings_error_bundled_tor_not_supported": "", + "settings_error_bundled_tor_timeout": "", + "settings_error_bundled_tor_broken": "", + "settings_test_success": "", + "error_tor_protocol_error": "", + "error_tor_protocol_error_unknown": "", + "error_invalid_private_key": "", + "connecting_to_tor": "", + "update_available": "", + "update_error_check_error": "", + "update_error_invalid_latest_version": "", + "update_not_available": "", + "gui_tor_connection_ask": "", + "gui_tor_connection_ask_open_settings": "हां", + "gui_tor_connection_ask_quit": "छोड़ें", + "gui_tor_connection_error_settings": "", + "gui_tor_connection_canceled": "", + "gui_tor_connection_lost": "", + "gui_server_started_after_timeout": "", + "gui_server_timeout_expired": "", + "share_via_onionshare": "", + "gui_connect_to_tor_for_onion_settings": "", + "gui_use_legacy_v2_onions_checkbox": "", + "gui_save_private_key_checkbox": "", + "gui_share_url_description": "", + "gui_receive_url_description": "", + "gui_url_label_persistent": "", + "gui_url_label_stay_open": "", + "gui_url_label_onetime": "", + "gui_url_label_onetime_and_persistent": "", + "gui_status_indicator_share_stopped": "", + "gui_status_indicator_share_working": "", + "gui_status_indicator_share_started": "शेयरिंग", + "gui_status_indicator_receive_stopped": "", + "gui_status_indicator_receive_working": "", + "gui_status_indicator_receive_started": "", + "gui_file_info": "", + "gui_file_info_single": "", + "history_in_progress_tooltip": "", + "history_completed_tooltip": "", + "error_cannot_create_data_dir": "", + "receive_mode_data_dir": "", + "receive_mode_warning": "", + "gui_receive_mode_warning": "", + "receive_mode_upload_starting": "", + "receive_mode_received_file": "", + "gui_mode_share_button": "", + "gui_mode_receive_button": "", + "gui_settings_receiving_label": "", + "gui_settings_data_dir_label": "", + "gui_settings_data_dir_browse_button": "ब्राउज़", + "gui_settings_public_mode_checkbox": "", + "gui_open_folder_error_nautilus": "", + "gui_settings_language_label": "", + "gui_settings_language_changed_notice": "", + "systray_menu_exit": "छोड़ें", + "systray_page_loaded_title": "", + "systray_page_loaded_message": "", + "systray_share_started_title": "", + "systray_share_started_message": "", + "systray_share_completed_title": "", + "systray_share_completed_message": "", + "systray_share_canceled_title": "", + "systray_share_canceled_message": "", + "systray_receive_started_title": "", + "systray_receive_started_message": "", + "gui_all_modes_history": "इतिहास", + "gui_all_modes_clear_history": "", + "gui_all_modes_transfer_started": "द्वारा शुरू किया गया", + "gui_all_modes_transfer_finished_range": "", + "gui_all_modes_transfer_finished": "", + "gui_all_modes_transfer_canceled_range": "", + "gui_all_modes_transfer_canceled": "", + "gui_all_modes_progress_complete": "", + "gui_all_modes_progress_starting": "", + "gui_all_modes_progress_eta": "", + "gui_share_mode_no_files": "", + "gui_share_mode_timeout_waiting": "", + "gui_receive_mode_no_files": "", + "gui_receive_mode_timeout_waiting": "" +} diff --git a/share/locale/id.json b/share/locale/id.json index 0557aca9..2657cd90 100644 --- a/share/locale/id.json +++ b/share/locale/id.json @@ -1,19 +1,19 @@ { - "config_onion_service": "", - "preparing_files": "", - "give_this_url": "", - "give_this_url_stealth": "", - "give_this_url_receive": "", - "give_this_url_receive_stealth": "", - "ctrlc_to_stop": "", - "not_a_file": "", - "not_a_readable_file": "", - "no_available_port": "", - "other_page_loaded": "", + "config_onion_service": "Mengatur layanan onion pada port {0:d}.", + "preparing_files": "Mengompresi berkas-berkas.", + "give_this_url": "Beri alamat ini kepada penerima:", + "give_this_url_stealth": "Beri alamat ini dan baris HidServAuth kepada penerima:", + "give_this_url_receive": "Beri alamat ini kepada pengirim:", + "give_this_url_receive_stealth": "Beri alamat ini dan HidServAuth kepada pengirim:", + "ctrlc_to_stop": "Tekan Ctrl+C untuk menghentikan peladen", + "not_a_file": "{0:s} bukan berkas yang sah.", + "not_a_readable_file": "{0:s} bukan berkas yang bisa dibaca.", + "no_available_port": "Tidak dapat menemukan porta yang tersedia untuk memulai layanan onion", + "other_page_loaded": "Alamat dimuat", "close_on_timeout": "", - "closing_automatically": "", + "closing_automatically": "Terhenti karena transfer telah tuntas", "timeout_download_still_running": "", - "large_filesize": "", + "large_filesize": "Peringatan: Mengirim dalam jumlah besar dapat memakan waktu berjam-jam", "systray_menu_exit": "Keluar", "systray_download_started_title": "", "systray_download_started_message": "", @@ -23,74 +23,74 @@ "systray_download_canceled_message": "", "systray_upload_started_title": "", "systray_upload_started_message": "", - "help_local_only": "", - "help_stay_open": "", - "help_shutdown_timeout": "", - "help_stealth": "", + "help_local_only": "Tidak menggunakan Tor (hanya untuk pengembangan)", + "help_stay_open": "Lanjutkan berbagi setelah berkas telah terkirim", + "help_shutdown_timeout": "Berhenti berbagi setelah beberapa detik", + "help_stealth": "Gunakan otorisasi klien (lanjutan)", "help_receive": "", - "help_debug": "", - "help_filename": "", + "help_debug": "Catat kesalahan OnionShare ke stdout, dan kesalahan web ke disk", + "help_filename": "Daftar berkas atau folder untuk dibagikan", "help_config": "", - "gui_drag_and_drop": "", + "gui_drag_and_drop": "Seret dan lepas berkas dan folder\nuntuk mulai berbagi", "gui_add": "Tambahkan", "gui_delete": "Hapus", "gui_choose_items": "Pilih", - "gui_share_start_server": "", - "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", + "gui_share_start_server": "Mulai berbagi", + "gui_share_stop_server": "Berhenti berbagi", + "gui_share_stop_server_shutdown_timeout": "Berhenti Berbagi ({}d tersisa)", "gui_share_stop_server_shutdown_timeout_tooltip": "", - "gui_receive_start_server": "", - "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", + "gui_receive_start_server": "Mulai Mode Menerima", + "gui_receive_stop_server": "Menghentikan Mode Menerima", + "gui_receive_stop_server_shutdown_timeout": "Menghentikan Mode Menerima ({}d tersisa)", "gui_receive_stop_server_shutdown_timeout_tooltip": "", - "gui_copy_url": "", - "gui_copy_hidservauth": "", + "gui_copy_url": "Salin Alamat", + "gui_copy_hidservauth": "Salin HidServAuth", "gui_downloads": "", "gui_no_downloads": "", "gui_canceled": "Dibatalkan", - "gui_copied_url_title": "", - "gui_copied_url": "", - "gui_copied_hidservauth_title": "", - "gui_copied_hidservauth": "", - "gui_please_wait": "", + "gui_copied_url_title": "Alamat OnionShare disalin", + "gui_copied_url": "Alamat OnionShare disalin ke papan klip", + "gui_copied_hidservauth_title": "HidServAuth disalin", + "gui_copied_hidservauth": "Baris HidServAuth disalin ke papan klip", + "gui_please_wait": "Memulai... Klik untuk membatalkan.", "gui_download_upload_progress_complete": "", "gui_download_upload_progress_starting": "", "gui_download_upload_progress_eta": "", - "version_string": "", - "gui_quit_title": "", - "gui_share_quit_warning": "", - "gui_receive_quit_warning": "", + "version_string": "OnionShare {0:s} | https://onionshare.org/", + "gui_quit_title": "Tidak begitu cepat", + "gui_share_quit_warning": "Anda sedang dalam proses pengiriman berkas. Apakah Anda yakin ingin menghentikan OnionShare?", + "gui_receive_quit_warning": "Anda sedang dalam proses menerima berkas. Apakah Anda yakin ingin menghentikan OnionShare?", "gui_quit_warning_quit": "Keluar", "gui_quit_warning_dont_quit": "Batal", "error_rate_limit": "", - "zip_progress_bar_format": "", - "error_stealth_not_supported": "", - "error_ephemeral_not_supported": "", + "zip_progress_bar_format": "Mengompresi: %p%", + "error_stealth_not_supported": "Untuk menggunakan otorisasi klien, Anda perlu setidaknya Tor 0.2.9.1-alpha (atau Tor Browser 6.5) dan python3-stem 1.5.0.", + "error_ephemeral_not_supported": "OnionShare memerlukan setidaknya Tor 0.2.7.1 dan python3-stem 1.4.0.", "gui_settings_window_title": "Pengaturan", - "gui_settings_whats_this": "", - "gui_settings_stealth_option": "", - "gui_settings_stealth_hidservauth_string": "", - "gui_settings_autoupdate_label": "", - "gui_settings_autoupdate_option": "", - "gui_settings_autoupdate_timestamp": "", - "gui_settings_autoupdate_timestamp_never": "Tak pernah", - "gui_settings_autoupdate_check_button": "", + "gui_settings_whats_this": "Apakah ini?", + "gui_settings_stealth_option": "Gunakan otorisasi klien", + "gui_settings_stealth_hidservauth_string": "Telah menyimpan kunci privat Anda untuk digunakan kembali, berarti Anda dapat klik untuk menyalin HidServAuth Anda.", + "gui_settings_autoupdate_label": "Periksa versi terbaru", + "gui_settings_autoupdate_option": "Beritahu saya ketika versi baru tersedia", + "gui_settings_autoupdate_timestamp": "Terakhir diperiksa: {}", + "gui_settings_autoupdate_timestamp_never": "Tidak pernah", + "gui_settings_autoupdate_check_button": "Periksa Versi Terbaru", "gui_settings_general_label": "Pengaturan umum", - "gui_settings_sharing_label": "", - "gui_settings_close_after_first_download_option": "", - "gui_settings_connection_type_label": "", + "gui_settings_sharing_label": "Pengaturan berbagi", + "gui_settings_close_after_first_download_option": "Berhenti berbagi setelah berkas telah terkirim", + "gui_settings_connection_type_label": "Bagaimana seharusnya OnionShare terhubung ke Tor?", "gui_settings_connection_type_bundled_option": "", - "gui_settings_connection_type_automatic_option": "", - "gui_settings_connection_type_control_port_option": "", + "gui_settings_connection_type_automatic_option": "Mencoba konfigurasi otomatis dengan Tor Browser", + "gui_settings_connection_type_control_port_option": "Menghubungkan menggunakan porta kontrol", "gui_settings_connection_type_socket_file_option": "", - "gui_settings_connection_type_test_button": "", + "gui_settings_connection_type_test_button": "Menguji sambungan ke Tor", "gui_settings_control_port_label": "Port kontrol", - "gui_settings_socket_file_label": "", - "gui_settings_socks_label": "", - "gui_settings_authenticate_label": "", - "gui_settings_authenticate_no_auth_option": "", - "gui_settings_authenticate_password_option": "", - "gui_settings_password_label": "", + "gui_settings_socket_file_label": "Berkas soket", + "gui_settings_socks_label": "Porta SOCKS", + "gui_settings_authenticate_label": "Pengaturan otentikasi Tor", + "gui_settings_authenticate_no_auth_option": "Tidak ada otentikasi, atau otentikasi kuki", + "gui_settings_authenticate_password_option": "Sandi", + "gui_settings_password_label": "Sandi", "gui_settings_tor_bridges": "", "gui_settings_tor_bridges_no_bridges_radio_option": "", "gui_settings_tor_bridges_obfs4_radio_option": "", @@ -181,5 +181,8 @@ "gui_download_in_progress": "", "gui_open_folder_error_nautilus": "", "gui_settings_language_label": "", - "gui_settings_language_changed_notice": "" + "gui_settings_language_changed_notice": "", + "gui_add_files": "Tambahkan berkas", + "gui_add_folder": "Tambahkan Folder", + "gui_settings_onion_label": "Pengaturan Onion" } diff --git a/share/locale/it.json b/share/locale/it.json index 6e23cb1e..f74f21c1 100644 --- a/share/locale/it.json +++ b/share/locale/it.json @@ -1,6 +1,6 @@ { "preparing_files": "Compressione dei file in corso.", - "give_this_url": "Dai questa URL al destinatario:", + "give_this_url": "Dai questo indirizzo al destinatario:", "ctrlc_to_stop": "Premi Ctrl+C per fermare il server", "not_a_file": "{0:s} non è un file valido.", "other_page_loaded": "URL caricato", @@ -23,7 +23,7 @@ "gui_please_wait": "Avviato... Cliccare per interrompere.", "zip_progress_bar_format": "Compressione in corso: %p%", "config_onion_service": "Preparando il servizio onion sulla porta {0:d}.", - "give_this_url_stealth": "Dai questa URL e la linea HidServAuth al destinatario:", + "give_this_url_stealth": "Dai questo indirizzo e la linea HidServAuth al destinatario:", "give_this_url_receive": "Dai questo indirizzo al mittente:", "give_this_url_receive_stealth": "Condividi questo indirizzo e la linea HideServAuth con il mittente:", "not_a_readable_file": "{0:s} non è un file leggibile.", diff --git a/share/locale/ms.json b/share/locale/ms.json new file mode 100644 index 00000000..465a9cd4 --- /dev/null +++ b/share/locale/ms.json @@ -0,0 +1,184 @@ +{ + "config_onion_service": "", + "preparing_files": "", + "give_this_url": "", + "give_this_url_stealth": "", + "give_this_url_receive": "", + "give_this_url_receive_stealth": "", + "ctrlc_to_stop": "", + "not_a_file": "", + "not_a_readable_file": "", + "no_available_port": "", + "other_page_loaded": "", + "close_on_timeout": "", + "closing_automatically": "", + "large_filesize": "", + "help_local_only": "", + "help_stay_open": "", + "help_shutdown_timeout": "", + "help_stealth": "", + "help_receive": "", + "help_debug": "", + "help_filename": "", + "help_config": "", + "gui_drag_and_drop": "", + "gui_add": "", + "gui_add_files": "", + "gui_add_folder": "", + "gui_delete": "", + "gui_choose_items": "", + "gui_share_start_server": "", + "gui_share_stop_server": "", + "gui_share_stop_server_shutdown_timeout": "", + "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_start_server": "", + "gui_receive_stop_server": "", + "gui_receive_stop_server_shutdown_timeout": "", + "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_copy_url": "", + "gui_copy_hidservauth": "", + "gui_canceled": "", + "gui_copied_url_title": "", + "gui_copied_url": "", + "gui_copied_hidservauth_title": "", + "gui_copied_hidservauth": "", + "gui_please_wait": "", + "version_string": "", + "gui_quit_title": "", + "gui_share_quit_warning": "", + "gui_receive_quit_warning": "", + "gui_quit_warning_quit": "", + "gui_quit_warning_dont_quit": "", + "error_rate_limit": "", + "zip_progress_bar_format": "", + "error_stealth_not_supported": "", + "error_ephemeral_not_supported": "", + "gui_settings_window_title": "", + "gui_settings_whats_this": "", + "gui_settings_stealth_option": "", + "gui_settings_stealth_hidservauth_string": "", + "gui_settings_autoupdate_label": "", + "gui_settings_autoupdate_option": "", + "gui_settings_autoupdate_timestamp": "", + "gui_settings_autoupdate_timestamp_never": "", + "gui_settings_autoupdate_check_button": "", + "gui_settings_general_label": "", + "gui_settings_onion_label": "", + "gui_settings_sharing_label": "", + "gui_settings_close_after_first_download_option": "", + "gui_settings_connection_type_label": "", + "gui_settings_connection_type_bundled_option": "", + "gui_settings_connection_type_automatic_option": "", + "gui_settings_connection_type_control_port_option": "", + "gui_settings_connection_type_socket_file_option": "", + "gui_settings_connection_type_test_button": "", + "gui_settings_control_port_label": "", + "gui_settings_socket_file_label": "", + "gui_settings_socks_label": "", + "gui_settings_authenticate_label": "", + "gui_settings_authenticate_no_auth_option": "", + "gui_settings_authenticate_password_option": "", + "gui_settings_password_label": "", + "gui_settings_tor_bridges": "", + "gui_settings_tor_bridges_no_bridges_radio_option": "", + "gui_settings_tor_bridges_obfs4_radio_option": "", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "", + "gui_settings_meek_lite_expensive_warning": "", + "gui_settings_tor_bridges_custom_radio_option": "", + "gui_settings_tor_bridges_custom_label": "", + "gui_settings_tor_bridges_invalid": "", + "gui_settings_button_save": "", + "gui_settings_button_cancel": "", + "gui_settings_button_help": "", + "gui_settings_shutdown_timeout_checkbox": "", + "gui_settings_shutdown_timeout": "", + "settings_error_unknown": "", + "settings_error_automatic": "", + "settings_error_socket_port": "", + "settings_error_socket_file": "", + "settings_error_auth": "", + "settings_error_missing_password": "", + "settings_error_unreadable_cookie_file": "", + "settings_error_bundled_tor_not_supported": "", + "settings_error_bundled_tor_timeout": "", + "settings_error_bundled_tor_broken": "", + "settings_test_success": "", + "error_tor_protocol_error": "", + "error_tor_protocol_error_unknown": "", + "error_invalid_private_key": "", + "connecting_to_tor": "", + "update_available": "", + "update_error_check_error": "", + "update_error_invalid_latest_version": "", + "update_not_available": "", + "gui_tor_connection_ask": "", + "gui_tor_connection_ask_open_settings": "", + "gui_tor_connection_ask_quit": "", + "gui_tor_connection_error_settings": "", + "gui_tor_connection_canceled": "", + "gui_tor_connection_lost": "", + "gui_server_started_after_timeout": "", + "gui_server_timeout_expired": "", + "share_via_onionshare": "", + "gui_connect_to_tor_for_onion_settings": "", + "gui_use_legacy_v2_onions_checkbox": "", + "gui_save_private_key_checkbox": "", + "gui_share_url_description": "", + "gui_receive_url_description": "", + "gui_url_label_persistent": "", + "gui_url_label_stay_open": "", + "gui_url_label_onetime": "", + "gui_url_label_onetime_and_persistent": "", + "gui_status_indicator_share_stopped": "", + "gui_status_indicator_share_working": "", + "gui_status_indicator_share_started": "", + "gui_status_indicator_receive_stopped": "", + "gui_status_indicator_receive_working": "", + "gui_status_indicator_receive_started": "", + "gui_file_info": "", + "gui_file_info_single": "", + "history_in_progress_tooltip": "", + "history_completed_tooltip": "", + "error_cannot_create_data_dir": "", + "receive_mode_data_dir": "", + "receive_mode_warning": "", + "gui_receive_mode_warning": "", + "receive_mode_upload_starting": "", + "receive_mode_received_file": "", + "gui_mode_share_button": "", + "gui_mode_receive_button": "", + "gui_settings_receiving_label": "", + "gui_settings_data_dir_label": "", + "gui_settings_data_dir_browse_button": "", + "gui_settings_public_mode_checkbox": "", + "gui_open_folder_error_nautilus": "", + "gui_settings_language_label": "", + "gui_settings_language_changed_notice": "", + "systray_menu_exit": "", + "systray_page_loaded_title": "", + "systray_page_loaded_message": "", + "systray_share_started_title": "", + "systray_share_started_message": "", + "systray_share_completed_title": "", + "systray_share_completed_message": "", + "systray_share_canceled_title": "", + "systray_share_canceled_message": "", + "systray_receive_started_title": "", + "systray_receive_started_message": "", + "gui_all_modes_history": "", + "gui_all_modes_clear_history": "", + "gui_all_modes_transfer_started": "", + "gui_all_modes_transfer_finished_range": "", + "gui_all_modes_transfer_finished": "", + "gui_all_modes_transfer_canceled_range": "", + "gui_all_modes_transfer_canceled": "", + "gui_all_modes_progress_complete": "", + "gui_all_modes_progress_starting": "", + "gui_all_modes_progress_eta": "", + "gui_share_mode_no_files": "", + "gui_share_mode_timeout_waiting": "", + "gui_receive_mode_no_files": "", + "gui_receive_mode_timeout_waiting": "" +} diff --git a/share/locale/no.json b/share/locale/no.json index 9d67e6fa..f44375eb 100644 --- a/share/locale/no.json +++ b/share/locale/no.json @@ -69,7 +69,7 @@ "gui_settings_window_title": "Innstillinger", "gui_settings_whats_this": "Hva er dette?", "gui_settings_stealth_option": "Bruk klientidentifisering", - "gui_settings_stealth_hidservauth_string": "Siden du har lagret din private nøkkel for gjenbruk, kan du nå\nklikke for å kopiere din HidServAuth-linje.", + "gui_settings_stealth_hidservauth_string": "Siden du har lagret din private nøkkel for gjenbruk, kan du nå klikke for å kopiere din HidServAuth-linje.", "gui_settings_autoupdate_label": "Se etter ny versjon", "gui_settings_autoupdate_option": "Gi meg beskjed når en ny versjon er tilgjengelig", "gui_settings_autoupdate_timestamp": "Sist sjekket: {}", @@ -216,5 +216,6 @@ "gui_receive_mode_no_files": "Ingen filer mottatt enda", "gui_receive_mode_timeout_waiting": "Venter på fullføring av mottak", "gui_all_modes_transfer_canceled_range": "Avbrutt {} - {}", - "gui_all_modes_transfer_canceled": "Avbrutt {}" + "gui_all_modes_transfer_canceled": "Avbrutt {}", + "gui_settings_onion_label": "Løk-innstillinger" } diff --git a/share/locale/pt_BR.json b/share/locale/pt_BR.json index 7ff64809..7723bf03 100644 --- a/share/locale/pt_BR.json +++ b/share/locale/pt_BR.json @@ -208,5 +208,10 @@ "gui_all_modes_transfer_canceled": "Cancelado {}", "gui_share_mode_timeout_waiting": "Esperando para completar o envio", "gui_receive_mode_no_files": "Nenhum arquivo recebido", - "gui_receive_mode_timeout_waiting": "Esperando para completar o recebimento" + "gui_receive_mode_timeout_waiting": "Esperando para completar o recebimento", + "gui_settings_onion_label": "Configurando Onion", + "systray_page_loaded_message": "Endereço OnionShare foi carregado", + "gui_all_modes_progress_complete": "%p%, {0:s} em curso.", + "gui_all_modes_progress_starting": "{0:s}, %p% (calculando)", + "gui_all_modes_progress_eta": "{0:s}, Tempo aproximado: {1:s}, %p%" } diff --git a/share/locale/sv.json b/share/locale/sv.json index f1072332..3d3a16d6 100644 --- a/share/locale/sv.json +++ b/share/locale/sv.json @@ -8,9 +8,9 @@ "ctrlc_to_stop": "Tryck ned Ctrl+C för att stoppa servern", "not_a_file": "{0:s} är inte en giltig fil.", "not_a_readable_file": "{0:s} är inte en läsbar fil.", - "no_available_port": "Kunde inte hitta en ledig kort för att börja onion-tjänsten", + "no_available_port": "Kunde inte hitta en ledig kort för att starta onion-tjänsten", "other_page_loaded": "Adress laddad", - "close_on_timeout": "Stoppad för att automatiska stopp-timern tiden tog slut", + "close_on_timeout": "Stoppad för att tiden för den automatiska stopp-tidtagaren löpte ut", "closing_automatically": "Stoppad för att hämtningen är klar", "timeout_download_still_running": "Väntar på att nedladdningen ska bli klar", "timeout_upload_still_running": "Väntar på att uppladdningen ska bli klar", @@ -26,7 +26,7 @@ "systray_upload_started_message": "En användare började ladda upp filer på din dator", "help_local_only": "Använd inte Tor (endast för utveckling)", "help_stay_open": "Fortsätt dela efter att filer har skickats", - "help_shutdown_timeout": "Avbryt delning efter ett bestämt antal sekunder", + "help_shutdown_timeout": "Sluta dela efter ett bestämt antal sekunder", "help_stealth": "Använd klient-auktorisering (avancerat)", "help_receive": "Ta emot delningar istället för att skicka dem", "help_debug": "Logga OnionShare fel till stdout och webbfel till hårddisken", @@ -39,11 +39,11 @@ "gui_share_start_server": "Börja dela", "gui_share_stop_server": "Avbryt delning", "gui_share_stop_server_shutdown_timeout": "Avbryt Delning ({}s kvarstår)", - "gui_share_stop_server_shutdown_timeout_tooltip": "Automatiska stopp-timern avslutar vid {}", - "gui_receive_start_server": "Börja mottagarläge", + "gui_share_stop_server_shutdown_timeout_tooltip": "Automatiska stopp-tidtagaren avslutar vid {}", + "gui_receive_start_server": "Starta mottagarläge", "gui_receive_stop_server": "Avsluta Mottagarläge", "gui_receive_stop_server_shutdown_timeout": "Avsluta Mottagarläge ({}s kvarstår)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "Auto-stop timer avslutas kl {}", + "gui_receive_stop_server_shutdown_timeout_tooltip": "Automatiska stopp-tidtagaren avslutar vid {}", "gui_copy_url": "Kopiera Adress", "gui_copy_hidservauth": "Kopiera HidServAuth", "gui_downloads": "Nedladdningshistorik", @@ -70,7 +70,7 @@ "gui_settings_window_title": "Inställningar", "gui_settings_whats_this": "Vad är det här?", "gui_settings_stealth_option": "Använd klientauktorisering", - "gui_settings_stealth_hidservauth_string": "Efter att ha sparat din privata nyckel för återanvändning, innebär att du kan nu\nklicka för att kopiera din HidServAuth.", + "gui_settings_stealth_hidservauth_string": "Efter att ha sparat din privata nyckel för återanvändning, innebär det att du nu kan klicka för att kopiera din HidServAuth.", "gui_settings_autoupdate_label": "Sök efter ny version", "gui_settings_autoupdate_option": "Meddela mig när en ny version är tillgänglig", "gui_settings_autoupdate_timestamp": "Senast kontrollerad: {}", @@ -105,7 +105,7 @@ "gui_settings_button_save": "Spara", "gui_settings_button_cancel": "Avbryt", "gui_settings_button_help": "Hjälp", - "gui_settings_shutdown_timeout_checkbox": "Använd automatiska stopp-timern", + "gui_settings_shutdown_timeout_checkbox": "Använd den automatiska stopp-tidtagaren", "gui_settings_shutdown_timeout": "Stoppa delningen vid:", "settings_error_unknown": "Kan inte ansluta till Tor-regulatorn eftersom dina inställningar inte är vettiga.", "settings_error_automatic": "Kunde inte ansluta till Tor-regulatorn. Körs Tor Browser (tillgänglig från torproject.org) i bakgrunden?", @@ -117,7 +117,7 @@ "settings_error_bundled_tor_not_supported": "Användning av Tor-versionen som följer med OnionShare fungerar inte i utvecklarläge på Windows eller macOS.", "settings_error_bundled_tor_timeout": "Det tar för lång tid att ansluta till Tor. Kanske är du inte ansluten till Internet, eller har en felaktig systemklocka?", "settings_error_bundled_tor_broken": "OnionShare kunde inte ansluta till Tor i bakgrunden:\n{}", - "settings_test_success": "Ansluten till Tor-regulatorn.\n\nTor version: {}\nStöder efemära onion-tjänster: {}.\nStöder klientautentisering: {}.\nStöder nästa generations .onion-adresser: {}.", + "settings_test_success": "Ansluten till Tor-regulatorn.\n\nTor-version: {}\nStöder efemära onion-tjänster: {}.\nStöder klientautentisering: {}.\nStöder nästa generations .onion-adresser: {}.", "error_tor_protocol_error": "Det fanns ett fel med Tor: {}", "error_tor_protocol_error_unknown": "Det fanns ett okänt fel med Tor", "error_invalid_private_key": "Denna privata nyckeltyp stöds inte", @@ -132,9 +132,9 @@ "gui_tor_connection_error_settings": "Försök ändra hur OnionShare ansluter till Tor-nätverket i inställningarna.", "gui_tor_connection_canceled": "Kunde inte ansluta till Tor.\n\nSe till att du är ansluten till Internet, öppna sedan OnionShare och ställ in anslutningen till Tor.", "gui_tor_connection_lost": "Frånkopplad från Tor.", - "gui_server_started_after_timeout": "Automatiska stopp-timern tog slut innan servern startade.\nVänligen gör en ny delning.", - "gui_server_timeout_expired": "Automatiska stopp-timern har redan slutat.\nUppdatera den för att börja dela.", - "share_via_onionshare": "OnionShare den", + "gui_server_started_after_timeout": "Tiden för den automatiska stopp-timern löpte ut innan servern startade.\nVänligen gör en ny delning.", + "gui_server_timeout_expired": "Tiden för den automatiska stopp-tidtagaren löpte redan ut.\nUppdatera den för att börja dela.", + "share_via_onionshare": "Dela den med OnionShare", "gui_use_legacy_v2_onions_checkbox": "Använd äldre adresser", "gui_save_private_key_checkbox": "Använd en beständig adress", "gui_share_url_description": "Alla med denna OnionShare-adress kan hämta dina filer med hjälp av Tor Browser: ", @@ -211,5 +211,6 @@ "gui_receive_mode_no_files": "Inga filer har mottagits ännu", "gui_receive_mode_timeout_waiting": "Väntar på att avsluta mottagande", "gui_all_modes_transfer_canceled_range": "Avbröt {} - {}", - "gui_all_modes_transfer_canceled": "Avbröt {}" + "gui_all_modes_transfer_canceled": "Avbröt {}", + "gui_settings_onion_label": "Inställningar för Onion" } diff --git a/share/locale/zh_Hans.json b/share/locale/zh_Hans.json index 6a3bf7b7..cab1cdb6 100644 --- a/share/locale/zh_Hans.json +++ b/share/locale/zh_Hans.json @@ -10,7 +10,7 @@ "not_a_readable_file": "{0:s}不是可读文件.", "no_available_port": "找不到可用于开启onion服务的端口", "other_page_loaded": "地址已加载完成", - "close_on_timeout": "终止 原因:自动停止计时器的时间已到", + "close_on_timeout": "停止原因:自动停止计时器的时间已到", "closing_automatically": "终止 原因:传输已完成", "timeout_download_still_running": "", "large_filesize": "警告:分享大文件可能会用上数小时", @@ -23,12 +23,12 @@ "systray_download_canceled_message": "", "systray_upload_started_title": "", "systray_upload_started_message": "", - "help_local_only": "不使用Tor(只限开发测试)", + "help_local_only": "不使用Tor(仅开发测试)", "help_stay_open": "文件传输完成后继续分享", - "help_shutdown_timeout": "超过给定时间(秒)后,终止分享.", + "help_shutdown_timeout": "超过给定时间(秒)后终止分享", "help_stealth": "使用服务端认证(高级选项)", - "help_receive": "仅接收分享的文件,不发送", - "help_debug": "将OnionShare错误日志记录到stdout,将web错误日志记录到磁盘", + "help_receive": "仅接收分享的文件,不发送", + "help_debug": "将OnionShare错误日志记录到stdout,将web错误日志记录到磁盘", "help_filename": "要分享的文件或文件夹的列表", "help_config": "自定义JSON配置文件的路径(可选)", "gui_drag_and_drop": "将文件或文件夹拖动到这里来开始分享", @@ -37,7 +37,7 @@ "gui_choose_items": "选取", "gui_share_start_server": "开始分享", "gui_share_stop_server": "停止分享", - "gui_share_stop_server_shutdown_timeout": "停止分享(还剩{}秒)", + "gui_share_stop_server_shutdown_timeout": "停止分享(还剩{}秒)", "gui_share_stop_server_shutdown_timeout_tooltip": "在{}自动停止", "gui_receive_start_server": "开启接受模式", "gui_receive_stop_server": "停止接受模式", @@ -56,20 +56,20 @@ "gui_download_upload_progress_complete": "", "gui_download_upload_progress_starting": "", "gui_download_upload_progress_eta": "", - "version_string": "版本: OnionShare {0:s} | https://onionshare.org/", + "version_string": "版本: OnionShare {0:s} | https://onionshare.org/", "gui_quit_title": "再等等", "gui_share_quit_warning": "您有文件正在传输中...您确定要退出OnionShare吗?", "gui_receive_quit_warning": "您有文件还正在接收中...您确定要退出OnionShare吗?", "gui_quit_warning_quit": "退出", "gui_quit_warning_dont_quit": "取消", - "error_rate_limit": "有人您对地址发出过多错误请求,这很可能说明有人在尝试猜测您的地址.因此为了安全OinionShare已终止服务.请重新开启分享并且向收件人发送新地址.", + "error_rate_limit": "有人您对地址发出过多错误请求,这很可能说明有人在尝试猜测您的地址,因此为了安全OinionShare已终止服务。请重新开启分享并且向收件人发送新地址。", "zip_progress_bar_format": "压缩中: %p%", - "error_stealth_not_supported": "要使用服务端认证,您至少需要的最低版本要求是:Tor 0.2.9.1-alpha (or Tor Browser 6.5)和python3-stem 1.5.0.两者缺一不可,同时需要.", - "error_ephemeral_not_supported": "OnionShare至少同时需要Tor 0.2.7.1和python3-stem 1.4.0来运行.", + "error_stealth_not_supported": "要使用服务端认证,您至少需要的最低版本要求是:Tor 0.2.9.1-alpha (or Tor Browser 6.5)和python3-stem 1.5.0。两者缺一不可,同时需要。", + "error_ephemeral_not_supported": "OnionShare至少同时需要Tor 0.2.7.1和python3-stem 1.4.0来运行。", "gui_settings_window_title": "设置", "gui_settings_whats_this": "这是什么?", "gui_settings_stealth_option": "使用客户端认证", - "gui_settings_stealth_hidservauth_string": "已保存了你的私钥用于重复使用,意味着您现在可以\n点击这里来复制您的HidServAuth.", + "gui_settings_stealth_hidservauth_string": "已保存了你的私钥用于重复使用,意味着您现在可以点击这里来复制您的HidServAuth。", "gui_settings_autoupdate_label": "检查新版本", "gui_settings_autoupdate_option": "有新版本可用时告知我", "gui_settings_autoupdate_timestamp": "上次检查更新的时间:{}", @@ -79,12 +79,12 @@ "gui_settings_sharing_label": "分享设置", "gui_settings_close_after_first_download_option": "文件发送完成后停止分享", "gui_settings_connection_type_label": "OnionShare应如何连接Tor?", - "gui_settings_connection_type_bundled_option": "使用OnionShare内置的tor", - "gui_settings_connection_type_automatic_option": "尝试使用Tor Browser(Tor浏览器)的设置", + "gui_settings_connection_type_bundled_option": "使用OnionShare内置的Tor", + "gui_settings_connection_type_automatic_option": "尝试使用Tor Browser(Tor浏览器)的设置", "gui_settings_connection_type_control_port_option": "用特定端口连接", "gui_settings_connection_type_socket_file_option": "使用socket文档的设置连接", "gui_settings_connection_type_test_button": "测试tor连接", - "gui_settings_control_port_label": "控制端口", + "gui_settings_control_port_label": "控制端端口", "gui_settings_socket_file_label": "Socket配置文档", "gui_settings_socks_label": "SOCKS 端口", "gui_settings_authenticate_label": "Tor认证设置", @@ -105,36 +105,36 @@ "gui_settings_button_cancel": "取消", "gui_settings_button_help": "帮助", "gui_settings_shutdown_timeout_checkbox": "使用自动停止计时器", - "gui_settings_shutdown_timeout": "在(时间)停止分享", + "gui_settings_shutdown_timeout": "停止分享时间:", "settings_error_unknown": "无法连接Tor控制件,因为您的设置无法被理解.", "settings_error_automatic": "无法连接tor控制件.Tor浏览器是否在后台工作?(从torproject.org可以获得Tor Browser)", "settings_error_socket_port": "在socket端口{}:{}无法连接tor控制件.", - "settings_error_socket_file": "无法使用socket配置文档的设置连接tor控制件", - "settings_error_auth": "已连接到了{}:{},但是无法认证,也许这不是tor控制件?", + "settings_error_socket_file": "无法使用socket配置文档{}的设置连接Tor控制件。", + "settings_error_auth": "已连接到了{}:{},但是无法认证,也许这不是tor控制件?", "settings_error_missing_password": "已连接到tor控制件,但需要密码来认证.", - "settings_error_unreadable_cookie_file": "已连接到tor控制件,但可能密码错误,或者没有读取cookie文件的权限.", - "settings_error_bundled_tor_not_supported": "OnionShare自带的Tor无法在Windows或macOS下运行开发者模式", + "settings_error_unreadable_cookie_file": "已连接到Tor控制件,但可能密码错误,或者没有读取cookie文件的权限。", + "settings_error_bundled_tor_not_supported": "OnionShare自带的Tor无法在Windows或macOS下运行开发者模式。", "settings_error_bundled_tor_timeout": "尝试连接tor的用时过长,也许您的网络有问题,或者是系统时间不准确?", "settings_error_bundled_tor_broken": "OnionShare无法在后台连接Tor\n{}", - "settings_test_success": "已连接到Tor控制件\n\nTor版本: {}\n支持短期onion服务: {}.\n支持客户端认证: {}.\n支持新一代.onion地址: {}.", + "settings_test_success": "已连接到Tor控制件\n\nTor版本:{}\n支持短期onion服务:{}。\n支持客户端认证:{}。\n支持新一代.onion地址:{}。", "error_tor_protocol_error": "Tor出现错误: {}", "error_tor_protocol_error_unknown": "Tor出现未知错误", "error_invalid_private_key": "不支持这种类型的私钥", "connecting_to_tor": "正在连接Tor网络", "update_available": "有新版本的OnionShare可用:请点击这里 来获得.

您在使用的版本为 {} 最新的可用版本为 {}.", - "update_error_check_error": "无法检查更新:OnionShare官网对最新版本无法识别'{}'…", + "update_error_check_error": "无法检查更新:OnionShare官网对最新版本无法识别'{}'…", "update_error_invalid_latest_version": "无法检查更新:也许您没有连接到Tor?或者OnionShare官网不可用?", "update_not_available": "您现在运行的OnionShare为最新版本.", "gui_tor_connection_ask": "打开设置来查看Tor连接?", "gui_tor_connection_ask_open_settings": "是的", "gui_tor_connection_ask_quit": "退出", "gui_tor_connection_error_settings": "请尝试在设置中设定OnionShare连接Tor的方式.", - "gui_tor_connection_canceled": "无法连接Tor.\n\n请确保您一连接到网络,然后重启OnionShare并设置Tor连接.", + "gui_tor_connection_canceled": "无法连接Tor。\n\n请确保您一连接到网络,然后重启OnionShare并设置Tor连接。", "gui_tor_connection_lost": "已和Tor断开连接.", "gui_server_started_after_timeout": "在服务开始之前自动停止计时器的时间已到.\n请建立新的分享.", - "gui_server_timeout_expired": "自动停止计时器的时间已到.\n请更新其设置来开始分享.", + "gui_server_timeout_expired": "自动停止计时器的时间已到。\n请更新其设置来开始分享。", "share_via_onionshare": "用OnionShare来分享", - "gui_use_legacy_v2_onions_checkbox": "使用古老的地址", + "gui_use_legacy_v2_onions_checkbox": "使用旧的地址", "gui_save_private_key_checkbox": "使用长期地址", "gui_share_url_description": "任何人只要拥有这个OnionShare 地址,都可以用Tor浏览器来从您的设备进行文件下载", "gui_receive_url_description": "任何人只要拥有这个OnionShare 地址,都可以用Tor浏览器来给你的设备进行文件上传", @@ -179,7 +179,7 @@ "gui_upload_finished_range": "", "gui_upload_finished": "", "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "无法打开文件夹,原因:nautilus不可用.文件在这里: {}", + "gui_open_folder_error_nautilus": "无法打开文件夹,原因:nautilus不可用。文件在这里:{}", "gui_settings_language_label": "首选语言", "gui_settings_language_changed_notice": "请重启OnionShare以使您的语言改变设定生效.", "gui_add_files": "添加文件", @@ -203,7 +203,7 @@ "gui_all_modes_transfer_started": "已开始{}", "gui_all_modes_transfer_finished_range": "已传输 {} - {}", "gui_all_modes_transfer_finished": "已传输完成 {}", - "gui_all_modes_progress_complete": "%p%, {0:s} 已完成.", + "gui_all_modes_progress_complete": "%p%,{0:s} 已完成。", "gui_all_modes_progress_starting": "{0:s}, %p% (计算中)", "gui_all_modes_progress_eta": "{0:s}, 预计完成时间: {1:s}, %p%", "gui_share_mode_no_files": "还没有文件发出", diff --git a/share/locale/zh_Hant.json b/share/locale/zh_Hant.json index c24d13ce..bd7dd6d6 100644 --- a/share/locale/zh_Hant.json +++ b/share/locale/zh_Hant.json @@ -1,19 +1,19 @@ { - "config_onion_service": "", - "preparing_files": "", - "give_this_url": "", - "give_this_url_stealth": "", - "give_this_url_receive": "", - "give_this_url_receive_stealth": "", - "ctrlc_to_stop": "", - "not_a_file": "", - "not_a_readable_file": "", - "no_available_port": "", - "other_page_loaded": "", - "close_on_timeout": "", - "closing_automatically": "", + "config_onion_service": "正在端口{0:d}啟動onion服務...", + "preparing_files": "壓縮檔案中...", + "give_this_url": "請將這串地址交給接收者:", + "give_this_url_stealth": "請將這串地址以及HidServAuth交給接收者:", + "give_this_url_receive": "請將這串地址交給傳送者:", + "give_this_url_receive_stealth": "請將這串地址以及HidServAuth交給傳送者:", + "ctrlc_to_stop": "按下Ctrl+C以停止服務", + "not_a_file": "{0:s} 不是一個可用的檔案。", + "not_a_readable_file": "{0:s} 不是一個可讀取的檔案。", + "no_available_port": "找不到一個可用的端口來啟動onion服務", + "other_page_loaded": "已載入的地址", + "close_on_timeout": "因計數器超時,已停止", + "closing_automatically": "因傳輸完成,已停止", "timeout_download_still_running": "", - "large_filesize": "", + "large_filesize": "警告:傳輸巨大的檔案將有可能耗時數小時以上", "systray_menu_exit": "離開", "systray_download_started_title": "", "systray_download_started_message": "", @@ -23,114 +23,114 @@ "systray_download_canceled_message": "", "systray_upload_started_title": "", "systray_upload_started_message": "", - "help_local_only": "", - "help_stay_open": "", - "help_shutdown_timeout": "", - "help_stealth": "", - "help_receive": "", - "help_debug": "", - "help_filename": "", - "help_config": "", - "gui_drag_and_drop": "", + "help_local_only": "不要使用Tor(僅限開發使用)", + "help_stay_open": "繼續分享即使檔案已傳送", + "help_shutdown_timeout": "在所給定的秒數後停止分享", + "help_stealth": "使用客戶端認證 (進階選項)", + "help_receive": "接收分享的檔案而不是傳送他們", + "help_debug": "將OnionShare的錯誤日誌輸出到stdout, 並且將網路錯誤輸出到硬碟", + "help_filename": "列舉所要分享的檔案或資料夾", + "help_config": "自定義的JSON設置檔路徑(選擇性)", + "gui_drag_and_drop": "拖曳檔案及資料夾來開始分享", "gui_add": "新增", "gui_delete": "刪除", - "gui_choose_items": "選擇", - "gui_share_start_server": "", - "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", - "gui_receive_start_server": "", - "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", - "gui_copy_url": "", - "gui_copy_hidservauth": "", + "gui_choose_items": "瀏覽", + "gui_share_start_server": "開始分享", + "gui_share_stop_server": "停止分享", + "gui_share_stop_server_shutdown_timeout": "停止分享 (剩餘{}秒)", + "gui_share_stop_server_shutdown_timeout_tooltip": "計數器將在{}停止", + "gui_receive_start_server": "啟動接收模式", + "gui_receive_stop_server": "停止接收模式", + "gui_receive_stop_server_shutdown_timeout": "停止接收模式 (剩餘{}秒)", + "gui_receive_stop_server_shutdown_timeout_tooltip": "計數器將在{}停止", + "gui_copy_url": "複製地址", + "gui_copy_hidservauth": "複製HidServAuth", "gui_downloads": "", "gui_no_downloads": "", - "gui_canceled": "取消", - "gui_copied_url_title": "", - "gui_copied_url": "", - "gui_copied_hidservauth_title": "", - "gui_copied_hidservauth": "", - "gui_please_wait": "", + "gui_canceled": "已取消", + "gui_copied_url_title": "已複製OnionShare地址", + "gui_copied_url": "OnionShare地址已複製到剪貼簿", + "gui_copied_hidservauth_title": "已複製HidServAuth", + "gui_copied_hidservauth": "HidServAuth已複製到剪貼簿", + "gui_please_wait": "啟動中...點擊以取消。", "gui_download_upload_progress_complete": "", "gui_download_upload_progress_starting": "", "gui_download_upload_progress_eta": "", - "version_string": "", - "gui_quit_title": "", - "gui_share_quit_warning": "", - "gui_receive_quit_warning": "", - "gui_quit_warning_quit": "離開", - "gui_quit_warning_dont_quit": "", - "error_rate_limit": "", - "zip_progress_bar_format": "", - "error_stealth_not_supported": "", - "error_ephemeral_not_supported": "", + "version_string": "OnionShare {0:s} | https://onionshare.org/", + "gui_quit_title": "確定要離開嗎", + "gui_share_quit_warning": "仍在傳送檔案,您確定要結束OnionShare嗎?", + "gui_receive_quit_warning": "仍在接收檔案,您確定要結束OnionShare嗎?", + "gui_quit_warning_quit": "結束", + "gui_quit_warning_dont_quit": "取消", + "error_rate_limit": "有人嘗試過多次您的地址,代表他們可能是用猜的,因此OnionShare已經停止服務。再次啟動分享並傳送新的地址給接收者以開始分享。", + "zip_progress_bar_format": "壓縮中: %p%", + "error_stealth_not_supported": "為了使用客戶端認證, 您至少需要 Tor 0.2.9.1-alpha (或 Tor Browser 6.5) 以及 python3-stem 1.5.0.", + "error_ephemeral_not_supported": "OnionShare 需要至少 Tor 0.2.7.1 以及 python3-stem 1.4.0.", "gui_settings_window_title": "設定", - "gui_settings_whats_this": "", - "gui_settings_stealth_option": "", - "gui_settings_stealth_hidservauth_string": "", + "gui_settings_whats_this": "這是什麼?", + "gui_settings_stealth_option": "使用客戶端認證", + "gui_settings_stealth_hidservauth_string": "已經將您的私鑰存起來以便使用,代表您現在可以點選以複製您的HidSerAuth。", "gui_settings_autoupdate_label": "檢查新版本", - "gui_settings_autoupdate_option": "", - "gui_settings_autoupdate_timestamp": "", - "gui_settings_autoupdate_timestamp_never": "不使用", - "gui_settings_autoupdate_check_button": "", + "gui_settings_autoupdate_option": "當有新版本的時候提醒我", + "gui_settings_autoupdate_timestamp": "上一次檢查時間: {}", + "gui_settings_autoupdate_timestamp_never": "從未", + "gui_settings_autoupdate_check_button": "檢查新版本", "gui_settings_general_label": "一般設定", - "gui_settings_sharing_label": "", - "gui_settings_close_after_first_download_option": "", - "gui_settings_connection_type_label": "", - "gui_settings_connection_type_bundled_option": "", - "gui_settings_connection_type_automatic_option": "", - "gui_settings_connection_type_control_port_option": "", - "gui_settings_connection_type_socket_file_option": "", - "gui_settings_connection_type_test_button": "", - "gui_settings_control_port_label": "管理連接埠", - "gui_settings_socket_file_label": "", - "gui_settings_socks_label": "", - "gui_settings_authenticate_label": "", - "gui_settings_authenticate_no_auth_option": "", - "gui_settings_authenticate_password_option": "Password", - "gui_settings_password_label": "Password", - "gui_settings_tor_bridges": "", - "gui_settings_tor_bridges_no_bridges_radio_option": "", - "gui_settings_tor_bridges_obfs4_radio_option": "", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "", - "gui_settings_meek_lite_expensive_warning": "", - "gui_settings_tor_bridges_custom_radio_option": "", - "gui_settings_tor_bridges_custom_label": "", - "gui_settings_tor_bridges_invalid": "", + "gui_settings_sharing_label": "分享設定", + "gui_settings_close_after_first_download_option": "當檔案已傳送時停止分享", + "gui_settings_connection_type_label": "OnionShare要如何連接到Tor?", + "gui_settings_connection_type_bundled_option": "使用OnionShare內建的Tor版本", + "gui_settings_connection_type_automatic_option": "嘗試auto-configuration with Tor Browser", + "gui_settings_connection_type_control_port_option": "使用control port", + "gui_settings_connection_type_socket_file_option": "使用Socket file", + "gui_settings_connection_type_test_button": "測試連接到Tor", + "gui_settings_control_port_label": "Control端口", + "gui_settings_socket_file_label": "Socket file", + "gui_settings_socks_label": "SOCKS端口", + "gui_settings_authenticate_label": "Tor 驗證設定", + "gui_settings_authenticate_no_auth_option": "沒有驗證,或使用cookie驗證", + "gui_settings_authenticate_password_option": "密碼", + "gui_settings_password_label": "密碼", + "gui_settings_tor_bridges": "Tor bridge支援", + "gui_settings_tor_bridges_no_bridges_radio_option": "不要使用bridges", + "gui_settings_tor_bridges_obfs4_radio_option": "使用內建的obfs4 pluggable transports", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "使用內建的obfs4 pluggable transports (需要 obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "使用內建的 meek_lite (Azure) pluggable transports", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "使月內建的 meek_lite (Azure) pluggable transports (需要 obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "警告: The meek_lite bridges are very costly for the Tor Project to run.

Only use them if unable to connect to Tor directly, via obfs4 transports, or other normal bridges.", + "gui_settings_tor_bridges_custom_radio_option": "使用自定義的bridges", + "gui_settings_tor_bridges_custom_label": "你可以從 https://bridges.torproject.org取得bridges", + "gui_settings_tor_bridges_invalid": "您新增的bridges無效。\n請再次檢查他們或新增其他的。", "gui_settings_button_save": "保存", - "gui_settings_button_cancel": "", - "gui_settings_button_help": "協助", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", - "settings_error_unknown": "", - "settings_error_automatic": "", - "settings_error_socket_port": "", - "settings_error_socket_file": "", - "settings_error_auth": "", - "settings_error_missing_password": "", - "settings_error_unreadable_cookie_file": "", - "settings_error_bundled_tor_not_supported": "", - "settings_error_bundled_tor_timeout": "", - "settings_error_bundled_tor_broken": "", - "settings_test_success": "", - "error_tor_protocol_error": "", - "error_tor_protocol_error_unknown": "", - "error_invalid_private_key": "", - "connecting_to_tor": "", - "update_available": "", - "update_error_check_error": "", - "update_error_invalid_latest_version": "", - "update_not_available": "", - "gui_tor_connection_ask": "", - "gui_tor_connection_ask_open_settings": "", - "gui_tor_connection_ask_quit": "離開", - "gui_tor_connection_error_settings": "", - "gui_tor_connection_canceled": "", - "gui_tor_connection_lost": "", + "gui_settings_button_cancel": "取消", + "gui_settings_button_help": "說明", + "gui_settings_shutdown_timeout_checkbox": "使用自動停止計數器", + "gui_settings_shutdown_timeout": "在這個時間停止分享:", + "settings_error_unknown": "無法連接到Tor controller因為您的設定無效。", + "settings_error_automatic": "無法連機到Tor controller。Tor Browser(可以從torproject.org取得)是否正在背景運行?", + "settings_error_socket_port": "無法在{}:{}連接到Tor controller。", + "settings_error_socket_file": "無法使用Socket file {}連接到Tor controller。", + "settings_error_auth": "已連接到 {}:{} 但無法驗證。或許這個不是一個Tor controller?", + "settings_error_missing_password": "已連接到Tor controller,但是它需要密碼進行驗證。", + "settings_error_unreadable_cookie_file": "已連接到Tor controller,但是密碼錯誤,或是您沒有讀取cookie檔案的權限。", + "settings_error_bundled_tor_not_supported": "OnionShare附帶的Tor版本並不適用於Windows或macOS上的開發人員模式。", + "settings_error_bundled_tor_timeout": "Tor連接超時。您可能沒有連接網路,或是系統時間設定錯誤?", + "settings_error_bundled_tor_broken": "OnionShare無法在背景連接到Tor:\n{}", + "settings_test_success": "已連接到Tor controller。\n\nTor版本: {}\n支援短期onion服務: {}.\n支援客戶端認證: {}.\n支援新一代.onion地址: {}.", + "error_tor_protocol_error": "Tor發生錯誤: {}", + "error_tor_protocol_error_unknown": "Tor發生了未知的錯誤", + "error_invalid_private_key": "此私鑰類型不受支援", + "connecting_to_tor": "正在連接Tor網路", + "update_available": "新版本的OnionShare已推出。 點此獲取

您正在使用版本 {} 而最新版本是 {}。", + "update_error_check_error": "無法檢查新版本: OnionShare網站提示最新版本無法辨識'{}'…", + "update_error_invalid_latest_version": "無法檢查新版本:或許您尚未連接上Tor,或是OnionShare官網失效?", + "update_not_available": "您正在使用最新版本的OnionShare。", + "gui_tor_connection_ask": "開啟設定來檢查Tor連接?", + "gui_tor_connection_ask_open_settings": "是", + "gui_tor_connection_ask_quit": "否", + "gui_tor_connection_error_settings": "試試在設定中改變OnionShare連接到Tor網路的方式。", + "gui_tor_connection_canceled": "無法連接到Tor。\n\n請確認您已連接上網路,然後再重新開啟OnionShare並設定Tor連線。", + "gui_tor_connection_lost": "已斷開Tor連接。", "gui_server_started_after_timeout": "", "gui_server_timeout_expired": "", "share_via_onionshare": "", @@ -181,5 +181,8 @@ "gui_download_in_progress": "", "gui_open_folder_error_nautilus": "", "gui_settings_language_label": "", - "gui_settings_language_changed_notice": "" + "gui_settings_language_changed_notice": "", + "gui_add_files": "新增檔案", + "gui_add_folder": "新增資料夾", + "gui_settings_onion_label": "Onion設定" } -- cgit v1.2.3-54-g00ecf From ee1633c6005af5d1a45ec0a52cf2cafc1ec9518b Mon Sep 17 00:00:00 2001 From: ZeroDot1 Date: Mon, 11 Mar 2019 05:33:28 +0100 Subject: Repair the css . . . --- share/templates/403.html | 2 +- share/templates/404.html | 2 +- share/templates/receive_noscript_xss.html | 2 +- share/templates/send.html | 2 +- share/templates/thankyou.html | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/share/templates/403.html b/share/templates/403.html index a084ef48..f3ea4e0e 100644 --- a/share/templates/403.html +++ b/share/templates/403.html @@ -4,7 +4,7 @@ OnionShare: 403 Forbidden - + diff --git a/share/templates/404.html b/share/templates/404.html index ad46e28c..1c5d7d2d 100644 --- a/share/templates/404.html +++ b/share/templates/404.html @@ -4,7 +4,7 @@ OnionShare: 404 Not Found - + diff --git a/share/templates/receive_noscript_xss.html b/share/templates/receive_noscript_xss.html index f6a959c8..bce78524 100644 --- a/share/templates/receive_noscript_xss.html +++ b/share/templates/receive_noscript_xss.html @@ -3,7 +3,7 @@ OnionShare - + diff --git a/share/templates/send.html b/share/templates/send.html index 72342224..2a56829a 100644 --- a/share/templates/send.html +++ b/share/templates/send.html @@ -4,7 +4,7 @@ OnionShare - + diff --git a/share/templates/thankyou.html b/share/templates/thankyou.html index e1a94784..c4b39cde 100644 --- a/share/templates/thankyou.html +++ b/share/templates/thankyou.html @@ -4,7 +4,7 @@ OnionShare is closed - + -- cgit v1.2.3-54-g00ecf From 365798b12f1e887d75b20266f0b636c756969427 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Mon, 11 Mar 2019 15:55:17 +1100 Subject: Various Startup Timer fixes for strings, bundled mode, stealth mode, startup/shutdown time clashes --- onionshare/__init__.py | 67 +++++++++++++++------- onionshare/onion.py | 26 +++++++-- onionshare_gui/mode/__init__.py | 1 + onionshare_gui/server_status.py | 17 ++++-- onionshare_gui/settings_dialog.py | 2 +- onionshare_gui/threads.py | 2 +- share/locale/en.json | 9 ++- tests/GuiShareTest.py | 9 +++ ...ode_startup_and_shutdown_timer_mismatch_test.py | 27 +++++++++ 9 files changed, 123 insertions(+), 37 deletions(-) create mode 100644 tests/local_onionshare_share_mode_startup_and_shutdown_timer_mismatch_test.py diff --git a/onionshare/__init__.py b/onionshare/__init__.py index 601631a2..48ab8c4a 100644 --- a/onionshare/__init__.py +++ b/onionshare/__init__.py @@ -19,6 +19,8 @@ along with this program. If not, see . """ import os, sys, time, argparse, threading +from datetime import datetime +from datetime import timedelta from . import strings from .common import Common @@ -137,9 +139,27 @@ def main(cwd=None): url = 'http://{0:s}'.format(app.onion_host) else: url = 'http://{0:s}/{1:s}'.format(app.onion_host, web.slug) - print(strings._("scheduled_onion_service").format(url)) - app.onion.cleanup() - print(strings._("waiting_for_startup_timer")) + schedule = datetime.now() + timedelta(seconds=startup_timer) + if mode == 'receive': + print(strings._('receive_mode_data_dir').format(common.settings.get('data_dir'))) + print('') + print(strings._('receive_mode_warning')) + print('') + if stealth: + print(strings._("give_this_scheduled_url_receive_stealth").format(schedule.strftime("%b %d, %I:%M:%S%p"))) + print(app.auth_string) + else: + print(strings._("give_this_scheduled_url_receive").format(schedule.strftime("%b %d, %I:%M:%S%p"))) + else: + if stealth: + print(strings._("give_this_scheduled_url_share_stealth").format(schedule.strftime("%b %d, %I:%M:%S%p"))) + print(app.auth_string) + else: + print(strings._("give_this_scheduled_url_share").format(schedule.strftime("%b %d, %I:%M:%S%p"))) + print(url) + print('') + print(strings._("waiting_for_scheduled_time")) + app.onion.cleanup(False) time.sleep(startup_timer) app.start_onion_service() else: @@ -194,27 +214,30 @@ def main(cwd=None): url = 'http://{0:s}/{1:s}'.format(app.onion_host, web.slug) print('') - if mode == 'receive': - print(strings._('receive_mode_data_dir').format(common.settings.get('data_dir'))) - print('') - print(strings._('receive_mode_warning')) - print('') - - if stealth: - print(strings._("give_this_url_receive_stealth")) - print(url) - print(app.auth_string) - else: - print(strings._("give_this_url_receive")) - print(url) + if startup_timer > 0: + print(strings._('server_started')) else: - if stealth: - print(strings._("give_this_url_stealth")) - print(url) - print(app.auth_string) + if mode == 'receive': + print(strings._('receive_mode_data_dir').format(common.settings.get('data_dir'))) + print('') + print(strings._('receive_mode_warning')) + print('') + + if stealth: + print(strings._("give_this_url_receive_stealth")) + print(url) + print(app.auth_string) + else: + print(strings._("give_this_url_receive")) + print(url) else: - print(strings._("give_this_url")) - print(url) + if stealth: + print(strings._("give_this_url_stealth")) + print(url) + print(app.auth_string) + else: + print(strings._("give_this_url")) + print(url) print('') print(strings._("ctrlc_to_stop")) diff --git a/onionshare/onion.py b/onionshare/onion.py index 17621b01..8d4e50a0 100644 --- a/onionshare/onion.py +++ b/onionshare/onion.py @@ -134,6 +134,7 @@ class Onion(object): self.stealth = False self.service_id = None self.scheduled_key = None + self.scheduled_auth_cookie = None # Is bundled tor supported? if (self.common.platform == 'Windows' or self.common.platform == 'Darwin') and getattr(sys, 'onionshare_dev_mode', False): @@ -430,21 +431,25 @@ class Onion(object): return the onion hostname. """ self.common.log('Onion', 'start_onion_service') - self.auth_string = None + if not self.supports_ephemeral: raise TorTooOld(strings._('error_ephemeral_not_supported')) if self.stealth and not self.supports_stealth: raise TorTooOld(strings._('error_stealth_not_supported')) - print(strings._("config_onion_service").format(int(port))) + if not save_scheduled_key: + print(strings._("config_onion_service").format(int(port))) if self.stealth: if self.settings.get('hidservauth_string'): hidservauth_string = self.settings.get('hidservauth_string').split()[2] basic_auth = {'onionshare':hidservauth_string} else: - basic_auth = {'onionshare':None} + if self.scheduled_auth_cookie: + basic_auth = {'onionshare':self.scheduled_auth_cookie} + else: + basic_auth = {'onionshare':None} else: basic_auth = None @@ -521,8 +526,19 @@ class Onion(object): self.auth_string = 'HidServAuth {} {}'.format(onion_host, auth_cookie) self.settings.set('hidservauth_string', self.auth_string) else: - auth_cookie = list(res.client_auth.values())[0] - self.auth_string = 'HidServAuth {} {}'.format(onion_host, auth_cookie) + if not self.scheduled_auth_cookie: + auth_cookie = list(res.client_auth.values())[0] + self.auth_string = 'HidServAuth {} {}'.format(onion_host, auth_cookie) + if save_scheduled_key: + # Register the HidServAuth for the scheduled share + self.scheduled_auth_cookie = auth_cookie + else: + self.scheduled_auth_cookie = None + else: + self.auth_string = 'HidServAuth {} {}'.format(onion_host, self.scheduled_auth_cookie) + if not save_scheduled_key: + # We've used the scheduled share's HidServAuth. Reset it to None for future shares + self.scheduled_auth_cookie = None if onion_host is not None: self.settings.save() diff --git a/onionshare_gui/mode/__init__.py b/onionshare_gui/mode/__init__.py index d4f0cd09..a9478e42 100644 --- a/onionshare_gui/mode/__init__.py +++ b/onionshare_gui/mode/__init__.py @@ -275,6 +275,7 @@ class Mode(QtWidgets.QWidget): self.common.log('Mode', 'cancel_server: quitting startup thread') self.startup_thread.canceled = True self.app.onion.scheduled_key = None + self.app.onion.scheduled_auth_cookie = None self.startup_thread.quit() if self.onion_thread: self.common.log('Mode', 'cancel_server: quitting onion thread') diff --git a/onionshare_gui/server_status.py b/onionshare_gui/server_status.py index 3ee10f14..3000491e 100644 --- a/onionshare_gui/server_status.py +++ b/onionshare_gui/server_status.py @@ -205,6 +205,11 @@ class ServerStatus(QtWidgets.QWidget): self.url.show() self.copy_url_button.show() + if self.app.stealth: + self.copy_hidservauth_button.show() + else: + self.copy_hidservauth_button.hide() + def update(self): """ Update the GUI elements based on the current state. @@ -244,11 +249,6 @@ class ServerStatus(QtWidgets.QWidget): if self.common.settings.get('shutdown_timeout'): self.shutdown_timeout_container.hide() - - if self.app.stealth: - self.copy_hidservauth_button.show() - else: - self.copy_hidservauth_button.hide() else: self.url_description.hide() self.url.hide() @@ -292,7 +292,8 @@ class ServerStatus(QtWidgets.QWidget): self.server_button.setStyleSheet(self.common.css['server_status_button_working']) self.server_button.setEnabled(True) if self.scheduled_start: - self.server_button.setText(strings._('gui_waiting_to_start').format(self.scheduled_start)) + scheduled_friendly_time = self.startup_timer.dateTime().toString("MMM dd, H:mmAP") + self.server_button.setText(strings._('gui_waiting_to_start').format(scheduled_friendly_time)) self.startup_timer_container.hide() else: self.server_button.setText(strings._('gui_please_wait')) @@ -332,6 +333,10 @@ class ServerStatus(QtWidgets.QWidget): if QtCore.QDateTime.currentDateTime().toPyDateTime() > self.timeout: can_start = False Alert(self.common, strings._('gui_server_timeout_expired'), QtWidgets.QMessageBox.Warning) + if self.common.settings.get('startup_timer'): + if self.timeout <= self.scheduled_start: + Alert(self.common, strings._('gui_timeout_cant_be_earlier_than_startup'), QtWidgets.QMessageBox.Warning) + can_start = False if can_start: self.start_server() elif self.status == self.STATUS_STARTED: diff --git a/onionshare_gui/settings_dialog.py b/onionshare_gui/settings_dialog.py index f29915a7..58fb2244 100644 --- a/onionshare_gui/settings_dialog.py +++ b/onionshare_gui/settings_dialog.py @@ -75,7 +75,7 @@ class SettingsDialog(QtWidgets.QDialog): self.startup_timer_checkbox = QtWidgets.QCheckBox() self.startup_timer_checkbox.setCheckState(QtCore.Qt.Checked) self.startup_timer_checkbox.setText(strings._("gui_settings_startup_timer_checkbox")) - startup_timer_label = QtWidgets.QLabel(strings._("gui_settings_whats_this").format("https://github.com/micahflee/onionshare/wiki/Using-the-Auto-Stop-Timer")) + startup_timer_label = QtWidgets.QLabel(strings._("gui_settings_whats_this").format("https://github.com/micahflee/onionshare/wiki/Using-the-Startup-Timer")) startup_timer_label.setStyleSheet(self.common.css['settings_whats_this']) startup_timer_label.setTextInteractionFlags(QtCore.Qt.TextBrowserInteraction) startup_timer_label.setOpenExternalLinks(True) diff --git a/onionshare_gui/threads.py b/onionshare_gui/threads.py index dda8094e..cb7447b5 100644 --- a/onionshare_gui/threads.py +++ b/onionshare_gui/threads.py @@ -57,7 +57,7 @@ class OnionThread(QtCore.QThread): time.sleep(0.2) self.success_early.emit() # Unregister the onion so we can use it in the next OnionThread - self.mode.app.onion.cleanup() + self.mode.app.onion.cleanup(False) else: self.mode.app.start_onion_service(await_publication=True) # wait for modules in thread to load, preventing a thread-related cx_Freeze crash diff --git a/share/locale/en.json b/share/locale/en.json index a86341da..4610f848 100644 --- a/share/locale/en.json +++ b/share/locale/en.json @@ -5,6 +5,11 @@ "give_this_url_stealth": "Give this address and HidServAuth line to the recipient:", "give_this_url_receive": "Give this address to the sender:", "give_this_url_receive_stealth": "Give this address and HidServAuth to the sender:", + "give_this_scheduled_url_share": "Give this address to your recipient, and tell them it won't be accessible until: {}", + "give_this_scheduled_url_receive": "Give this address to your sender, and tell them it won't be accessible until: {}", + "give_this_scheduled_url_share_stealth": "Give this address and HidServAuth line to your recipient, and tell them it won't be accessible until: {}", + "give_this_scheduled_url_receive_stealth": "Give this address and HidServAuth lineto your sender, and tell them it won't be accessible until: {}", + "server_started": "Server started", "ctrlc_to_stop": "Press Ctrl+C to stop the server", "not_a_file": "{0:s} is not a valid file.", "not_a_readable_file": "{0:s} is not a readable file.", @@ -126,6 +131,7 @@ "gui_server_started_after_timeout": "The auto-stop timer ran out before the server started.\nPlease make a new share.", "gui_server_timeout_expired": "The auto-stop timer already ran out.\nPlease update it to start sharing.", "gui_server_startup_timer_expired": "The scheduled time has already passed.\nPlease update it to start sharing.", + "gui_timeout_cant_be_earlier_than_startup": "The auto-stop time can't be the same or earlier than the start-up time.\nPlease update it to start sharing.", "share_via_onionshare": "OnionShare it", "gui_connect_to_tor_for_onion_settings": "Connect to Tor to see onion service settings", "gui_use_legacy_v2_onions_checkbox": "Use legacy addresses", @@ -188,6 +194,5 @@ "gui_share_mode_timeout_waiting": "Waiting to finish sending", "gui_receive_mode_no_files": "No Files Received Yet", "gui_receive_mode_timeout_waiting": "Waiting to finish receiving", - "waiting_for_startup_timer": "Waiting for the timer to run down before starting...", - "scheduled_onion_service": "Your OnionShare URL will be: {}" + "waiting_for_scheduled_time": "Waiting for the scheduled time before starting..." } diff --git a/tests/GuiShareTest.py b/tests/GuiShareTest.py index c6f71272..e8b31451 100644 --- a/tests/GuiShareTest.py +++ b/tests/GuiShareTest.py @@ -206,6 +206,15 @@ class GuiShareTest(GuiBaseTest): self.scheduled_service_started(self.gui.share_mode, 7000) self.web_server_is_running() + def run_all_share_mode_startup_shutdown_mismatch_tests(self, public_mode): + """Auto-stop timer tests in share mode""" + self.run_all_share_mode_setup_tests() + self.set_startup_timer(self.gui.share_mode, 15) + self.set_timeout(self.gui.share_mode, 5) + QtCore.QTimer.singleShot(4000, self.accept_dialog) + QtTest.QTest.mouseClick(self.gui.share_mode.server_status.server_button, QtCore.Qt.LeftButton) + self.server_is_stopped(self.gui.share_mode, False) + def run_all_share_mode_unreadable_file_tests(self): '''Attempt to share an unreadable file''' self.run_all_share_mode_setup_tests() diff --git a/tests/local_onionshare_share_mode_startup_and_shutdown_timer_mismatch_test.py b/tests/local_onionshare_share_mode_startup_and_shutdown_timer_mismatch_test.py new file mode 100644 index 00000000..b3af8e17 --- /dev/null +++ b/tests/local_onionshare_share_mode_startup_and_shutdown_timer_mismatch_test.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pytest +import unittest + +from .GuiShareTest import GuiShareTest + +class LocalShareModeStartupTimerTest(unittest.TestCase, GuiShareTest): + @classmethod + def setUpClass(cls): + test_settings = { + "public_mode": False, + "startup_timer": True, + "shutdown_timeout": True, + } + cls.gui = GuiShareTest.set_up(test_settings) + + @classmethod + def tearDownClass(cls): + GuiShareTest.tear_down() + + @pytest.mark.gui + def test_gui(self): + self.run_all_common_setup_tests() + self.run_all_share_mode_startup_shutdown_mismatch_tests(False) + +if __name__ == "__main__": + unittest.main() -- cgit v1.2.3-54-g00ecf From f2314f24c7b6ca9b9ae3b852a1822174a23ddbd1 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Mon, 11 Mar 2019 17:27:17 +1100 Subject: Use png rather than svg for warning image. Concatenate flash messages with commas to reduce page height. Allow warning message to be wider --- onionshare/web/receive_mode.py | 12 +++++++----- share/static/css/style.css | 5 ----- share/static/img/warning.png | Bin 0 -> 804 bytes share/templates/receive.html | 3 +-- 4 files changed, 8 insertions(+), 12 deletions(-) create mode 100644 share/static/img/warning.png diff --git a/onionshare/web/receive_mode.py b/onionshare/web/receive_mode.py index d6ef86ad..25d7aa1b 100644 --- a/onionshare/web/receive_mode.py +++ b/onionshare/web/receive_mode.py @@ -112,12 +112,14 @@ class ReceiveModeWeb(object): else: flash(msg, 'info') else: + msg = 'Sent ' for filename in filenames: - msg = 'Sent {}'.format(filename) - if ajax: - info_flashes.append(msg) - else: - flash(msg, 'info') + msg += '{}, '.format(filename) + msg = msg.rstrip(', ') + if ajax: + info_flashes.append(msg) + else: + flash(msg, 'info') if self.can_upload: if ajax: diff --git a/share/static/css/style.css b/share/static/css/style.css index 987f08f5..e445e5de 100644 --- a/share/static/css/style.css +++ b/share/static/css/style.css @@ -228,7 +228,6 @@ div#noscript { color: #d709df; padding: 1em; line-height: 150%; - max-width: 700px; margin: 0 auto; } @@ -236,10 +235,6 @@ div#noscript a, div#noscript a:visited { color: #d709df; } -div#noscript svg { - max-width: 30px; -} - .disable-noscript-xss-wrapper { max-width: 900px; margin: 0 auto; diff --git a/share/static/img/warning.png b/share/static/img/warning.png new file mode 100644 index 00000000..9be8cbaf Binary files /dev/null and b/share/static/img/warning.png differ diff --git a/share/templates/receive.html b/share/templates/receive.html index 5b7ab23c..a93537c5 100644 --- a/share/templates/receive.html +++ b/share/templates/receive.html @@ -19,8 +19,7 @@ -->

- Fill 1 Created with Sketch. - Warning: Due to a bug in Tor Browser and Firefox, uploads + Warning: Due to a bug in Tor Browser and Firefox, uploads sometimes never finish. To upload reliably, either set your Tor Browser security slider to Standard or -- cgit v1.2.3-54-g00ecf From 99505a4c7df690ccd0f6262595b4ea4d61125207 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Tue, 12 Mar 2019 15:29:07 +1100 Subject: Allow the bundled Tor connection timeout to be configurable from the CLI --- onionshare/__init__.py | 4 +++- onionshare/onion.py | 12 ++++++------ share/locale/en.json | 1 + 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/onionshare/__init__.py b/onionshare/__init__.py index 2f44c846..cbfe222c 100644 --- a/onionshare/__init__.py +++ b/onionshare/__init__.py @@ -54,6 +54,7 @@ def main(cwd=None): parser.add_argument('--local-only', action='store_true', dest='local_only', help=strings._("help_local_only")) parser.add_argument('--stay-open', action='store_true', dest='stay_open', help=strings._("help_stay_open")) parser.add_argument('--shutdown-timeout', metavar='', dest='shutdown_timeout', default=0, help=strings._("help_shutdown_timeout")) + parser.add_argument('--connect-timeout', metavar='', dest='connect_timeout', default=120, help=strings._("help_connect_timeout")) parser.add_argument('--stealth', action='store_true', dest='stealth', help=strings._("help_stealth")) parser.add_argument('--receive', action='store_true', dest='receive', help=strings._("help_receive")) parser.add_argument('--config', metavar='config', default=False, help=strings._('help_config')) @@ -69,6 +70,7 @@ def main(cwd=None): debug = bool(args.debug) stay_open = bool(args.stay_open) shutdown_timeout = int(args.shutdown_timeout) + connect_timeout = int(args.connect_timeout) stealth = bool(args.stealth) receive = bool(args.receive) config = args.config @@ -111,7 +113,7 @@ def main(cwd=None): # Start the Onion object onion = Onion(common) try: - onion.connect(custom_settings=False, config=config) + onion.connect(custom_settings=False, config=config, connect_timeout=connect_timeout) except KeyboardInterrupt: print("") sys.exit() diff --git a/onionshare/onion.py b/onionshare/onion.py index ed4fde7b..03d1a1b0 100644 --- a/onionshare/onion.py +++ b/onionshare/onion.py @@ -152,7 +152,7 @@ class Onion(object): # Start out not connected to Tor self.connected_to_tor = False - def connect(self, custom_settings=False, config=False, tor_status_update_func=None): + def connect(self, custom_settings=False, config=False, tor_status_update_func=None, connect_timeout=120): self.common.log('Onion', 'connect') # Either use settings that are passed in, or use them from common @@ -284,13 +284,13 @@ class Onion(object): self.settings.get('tor_bridges_use_obfs4') or \ self.settings.get('tor_bridges_use_meek_lite_azure'): connect_timeout = 150 - else: - # Timeout after 120 seconds - connect_timeout = 120 if time.time() - start_ts > connect_timeout: print("") - self.tor_proc.terminate() - raise BundledTorTimeout(strings._('settings_error_bundled_tor_timeout')) + try: + self.tor_proc.terminate() + raise BundledTorTimeout(strings._('settings_error_bundled_tor_timeout')) + except FileNotFoundError: + pass elif self.settings.get('connection_type') == 'automatic': # Automatically try to guess the right way to connect to Tor Browser diff --git a/share/locale/en.json b/share/locale/en.json index f7af9a80..9dd0648e 100644 --- a/share/locale/en.json +++ b/share/locale/en.json @@ -16,6 +16,7 @@ "help_local_only": "Don't use Tor (only for development)", "help_stay_open": "Continue sharing after files have been sent", "help_shutdown_timeout": "Stop sharing after a given amount of seconds", + "help_connect_timeout": "Give up connecting to Tor after a given amount of seconds (default: 120)", "help_stealth": "Use client authorization (advanced)", "help_receive": "Receive shares instead of sending them", "help_debug": "Log OnionShare errors to stdout, and web errors to disk", -- cgit v1.2.3-54-g00ecf From 9a66e331b40311db59f0f4fdc503841233b07d24 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Tue, 12 Mar 2019 15:36:49 +1100 Subject: Don't force connect timeout of 150 when using Bridges if a user-supplied connect timeout has been passed in already --- onionshare/onion.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/onionshare/onion.py b/onionshare/onion.py index 03d1a1b0..5cb11e27 100644 --- a/onionshare/onion.py +++ b/onionshare/onion.py @@ -283,7 +283,9 @@ class Onion(object): if self.settings.get('tor_bridges_use_custom_bridges') or \ self.settings.get('tor_bridges_use_obfs4') or \ self.settings.get('tor_bridges_use_meek_lite_azure'): - connect_timeout = 150 + # Only override timeout if a custom timeout has not been passed in + if connect_timeout == 120: + connect_timeout = 150 if time.time() - start_ts > connect_timeout: print("") try: -- cgit v1.2.3-54-g00ecf From c0e6137294e99e882d119fb3cb10f92e6c7f2c3c Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Fri, 22 Mar 2019 15:27:23 -0700 Subject: Fix css on receive.html as well --- share/templates/receive.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/templates/receive.html b/share/templates/receive.html index 89a64a15..b4eb45a2 100644 --- a/share/templates/receive.html +++ b/share/templates/receive.html @@ -3,7 +3,7 @@ OnionShare - + -- cgit v1.2.3-54-g00ecf From 881b700b703a373af299c62bb05adc108757da7d Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 24 Mar 2019 16:35:53 +1100 Subject: Don't allow setting an auto-stop timer that is shorter than the auto-start timer --- onionshare/__init__.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/onionshare/__init__.py b/onionshare/__init__.py index 48ab8c4a..519c25af 100644 --- a/onionshare/__init__.py +++ b/onionshare/__init__.py @@ -134,6 +134,11 @@ def main(cwd=None): app.choose_port() # Delay the startup if a startup timer was set if startup_timer > 0: + # Can't set a schedule that is later than the shutdown timer + if app.shutdown_timeout > 0 and app.shutdown_timeout < startup_timer: + print(strings._('gui_timeout_cant_be_earlier_than_startup')) + sys.exit() + app.start_onion_service(False, True) if common.settings.get('public_mode'): url = 'http://{0:s}'.format(app.onion_host) -- cgit v1.2.3-54-g00ecf From 5d3604829801b000948f006304edf81c373191f4 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 24 Mar 2019 16:38:01 +1100 Subject: Remove newlines from strings --- share/locale/en.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/share/locale/en.json b/share/locale/en.json index 4610f848..c932f516 100644 --- a/share/locale/en.json +++ b/share/locale/en.json @@ -128,10 +128,10 @@ "gui_tor_connection_error_settings": "Try changing how OnionShare connects to the Tor network in the settings.", "gui_tor_connection_canceled": "Could not connect to Tor.\n\nEnsure you are connected to the Internet, then re-open OnionShare and set up its connection to Tor.", "gui_tor_connection_lost": "Disconnected from Tor.", - "gui_server_started_after_timeout": "The auto-stop timer ran out before the server started.\nPlease make a new share.", - "gui_server_timeout_expired": "The auto-stop timer already ran out.\nPlease update it to start sharing.", - "gui_server_startup_timer_expired": "The scheduled time has already passed.\nPlease update it to start sharing.", - "gui_timeout_cant_be_earlier_than_startup": "The auto-stop time can't be the same or earlier than the start-up time.\nPlease update it to start sharing.", + "gui_server_started_after_timeout": "The auto-stop timer ran out before the server started. Please make a new share.", + "gui_server_timeout_expired": "The auto-stop timer already ran out. Please update it to start sharing.", + "gui_server_startup_timer_expired": "The scheduled time has already passed. Please update it to start sharing.", + "gui_timeout_cant_be_earlier_than_startup": "The auto-stop time can't be the same or earlier than the start-up time. Please update it to start sharing.", "share_via_onionshare": "OnionShare it", "gui_connect_to_tor_for_onion_settings": "Connect to Tor to see onion service settings", "gui_use_legacy_v2_onions_checkbox": "Use legacy addresses", -- cgit v1.2.3-54-g00ecf From 281af5fc1a93c7c68a790ac1a6dba00dd41231da Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 24 Mar 2019 16:48:56 +1100 Subject: Show the URL description label whenever we are showing the URL itself --- onionshare_gui/server_status.py | 42 ++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/onionshare_gui/server_status.py b/onionshare_gui/server_status.py index 3000491e..7d86a368 100644 --- a/onionshare_gui/server_status.py +++ b/onionshare_gui/server_status.py @@ -201,6 +201,27 @@ class ServerStatus(QtWidgets.QWidget): """ Show the URL in the UI. """ + self.url_description.show() + + info_image = self.common.get_resource_path('images/info.png') + + if self.mode == ServerStatus.MODE_SHARE: + self.url_description.setText(strings._('gui_share_url_description').format(info_image)) + else: + self.url_description.setText(strings._('gui_receive_url_description').format(info_image)) + + # Show a Tool Tip explaining the lifecycle of this URL + if self.common.settings.get('save_private_key'): + if self.mode == ServerStatus.MODE_SHARE and self.common.settings.get('close_after_first_download'): + self.url_description.setToolTip(strings._('gui_url_label_onetime_and_persistent')) + else: + self.url_description.setToolTip(strings._('gui_url_label_persistent')) + else: + if self.mode == ServerStatus.MODE_SHARE and self.common.settings.get('close_after_first_download'): + self.url_description.setToolTip(strings._('gui_url_label_onetime')) + else: + self.url_description.setToolTip(strings._('gui_url_label_stay_open')) + self.url.setText(self.get_url()) self.url.show() self.copy_url_button.show() @@ -216,27 +237,6 @@ class ServerStatus(QtWidgets.QWidget): """ # Set the URL fields if self.status == self.STATUS_STARTED: - self.url_description.show() - - info_image = self.common.get_resource_path('images/info.png') - - if self.mode == ServerStatus.MODE_SHARE: - self.url_description.setText(strings._('gui_share_url_description').format(info_image)) - else: - self.url_description.setText(strings._('gui_receive_url_description').format(info_image)) - - # Show a Tool Tip explaining the lifecycle of this URL - if self.common.settings.get('save_private_key'): - if self.mode == ServerStatus.MODE_SHARE and self.common.settings.get('close_after_first_download'): - self.url_description.setToolTip(strings._('gui_url_label_onetime_and_persistent')) - else: - self.url_description.setToolTip(strings._('gui_url_label_persistent')) - else: - if self.mode == ServerStatus.MODE_SHARE and self.common.settings.get('close_after_first_download'): - self.url_description.setToolTip(strings._('gui_url_label_onetime')) - else: - self.url_description.setToolTip(strings._('gui_url_label_stay_open')) - self.show_url() if self.common.settings.get('save_private_key'): -- cgit v1.2.3-54-g00ecf From 539be2ded367107019ea39a7bc269d9c8fb4786f Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 24 Mar 2019 17:53:13 +1100 Subject: Human-friendly autostart/autostop countdown timers on server button, tooltips --- onionshare_gui/mode/__init__.py | 27 ++++++++++++++++++++++++++- onionshare_gui/server_status.py | 9 +++------ share/locale/en.json | 14 +++++++++----- 3 files changed, 38 insertions(+), 12 deletions(-) diff --git a/onionshare_gui/mode/__init__.py b/onionshare_gui/mode/__init__.py index a9478e42..5437ccef 100644 --- a/onionshare_gui/mode/__init__.py +++ b/onionshare_gui/mode/__init__.py @@ -92,10 +92,35 @@ class Mode(QtWidgets.QWidget): """ pass + def human_friendly_time(self, secs): + """ + Returns a human-friendly time delta from given seconds. + """ + days = secs//86400 + hours = (secs - days*86400)//3600 + minutes = (secs - days*86400 - hours*3600)//60 + seconds = secs - days*86400 - hours*3600 - minutes*60 + if not seconds: + seconds = '0' + result = ("{0}{1}, ".format(days, strings._('days_first_letter')) if days else "") + \ + ("{0}{1}, ".format(hours, strings._('hours_first_letter')) if hours else "") + \ + ("{0}{1}, ".format(minutes, strings._('minutes_first_letter')) if minutes else "") + \ + "{0}{1}".format(seconds, strings._('seconds_first_letter')) + + return result + def timer_callback(self): """ This method is called regularly on a timer. """ + # If this is a scheduled share, display the countdown til the share starts + if self.server_status.status == ServerStatus.STATUS_WORKING: + if self.server_status.scheduled_start: + now = QtCore.QDateTime.currentDateTime() + seconds_remaining = now.secsTo(self.server_status.startup_timer.dateTime()) + # Update the server button + self.server_status.server_button.setText(strings._('gui_waiting_to_start').format(self.human_friendly_time(seconds_remaining))) + # If the auto-shutdown timer has stopped, stop the server if self.server_status.status == ServerStatus.STATUS_STARTED: if self.app.shutdown_timer and self.common.settings.get('shutdown_timeout'): @@ -105,7 +130,7 @@ class Mode(QtWidgets.QWidget): # Update the server button server_button_text = self.get_stop_server_shutdown_timeout_text() - self.server_status.server_button.setText(server_button_text.format(seconds_remaining)) + self.server_status.server_button.setText(server_button_text.format(self.human_friendly_time(seconds_remaining))) self.status_bar.clearMessage() if not self.app.shutdown_timer.is_alive(): diff --git a/onionshare_gui/server_status.py b/onionshare_gui/server_status.py index 7d86a368..6a2b883b 100644 --- a/onionshare_gui/server_status.py +++ b/onionshare_gui/server_status.py @@ -284,17 +284,13 @@ class ServerStatus(QtWidgets.QWidget): self.startup_timer_container.hide() if self.common.settings.get('shutdown_timeout'): self.shutdown_timeout_container.hide() - if self.mode == ServerStatus.MODE_SHARE: - self.server_button.setToolTip(strings._('gui_share_stop_server_shutdown_timeout_tooltip').format(self.timeout)) - else: - self.server_button.setToolTip(strings._('gui_receive_stop_server_shutdown_timeout_tooltip').format(self.timeout)) + self.server_button.setToolTip(strings._('gui_stop_server_shutdown_timeout_tooltip').format(self.shutdown_timeout.dateTime().toString("H:mmAP, MMM dd, yy"))) elif self.status == self.STATUS_WORKING: self.server_button.setStyleSheet(self.common.css['server_status_button_working']) self.server_button.setEnabled(True) if self.scheduled_start: - scheduled_friendly_time = self.startup_timer.dateTime().toString("MMM dd, H:mmAP") - self.server_button.setText(strings._('gui_waiting_to_start').format(scheduled_friendly_time)) self.startup_timer_container.hide() + self.server_button.setToolTip(strings._('gui_start_server_startup_timer_tooltip').format(self.startup_timer.dateTime().toString("H:mmAP, MMM dd, yy"))) else: self.server_button.setText(strings._('gui_please_wait')) if self.common.settings.get('shutdown_timeout'): @@ -305,6 +301,7 @@ class ServerStatus(QtWidgets.QWidget): self.server_button.setText(strings._('gui_please_wait')) if self.common.settings.get('startup_timer'): self.startup_timer_container.hide() + self.server_button.setToolTip(strings._('gui_start_server_startup_timer_tooltip').format(self.startup_timer.dateTime().toString("H:mmAP, MMM dd, yy"))) if self.common.settings.get('shutdown_timeout'): self.shutdown_timeout_container.hide() diff --git a/share/locale/en.json b/share/locale/en.json index c932f516..a3b1bf20 100644 --- a/share/locale/en.json +++ b/share/locale/en.json @@ -35,12 +35,12 @@ "gui_choose_items": "Choose", "gui_share_start_server": "Start sharing", "gui_share_stop_server": "Stop sharing", - "gui_share_stop_server_shutdown_timeout": "Stop Sharing ({}s remaining)", - "gui_share_stop_server_shutdown_timeout_tooltip": "Auto-stop timer ends at {}", + "gui_share_stop_server_shutdown_timeout": "Stop Sharing ({})", + "gui_stop_server_shutdown_timeout_tooltip": "Auto-stop timer ends at {}", + "gui_start_server_startup_timer_tooltip": "Auto-start timer ends at {}", "gui_receive_start_server": "Start Receive Mode", "gui_receive_stop_server": "Stop Receive Mode", "gui_receive_stop_server_shutdown_timeout": "Stop Receive Mode ({}s remaining)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "Auto-stop timer ends at {}", "gui_copy_url": "Copy Address", "gui_copy_hidservauth": "Copy HidServAuth", "gui_canceled": "Canceled", @@ -48,7 +48,7 @@ "gui_copied_url": "OnionShare address copied to clipboard", "gui_copied_hidservauth_title": "Copied HidServAuth", "gui_copied_hidservauth": "HidServAuth line copied to clipboard", - "gui_waiting_to_start": "Scheduled for {}. Click to cancel.", + "gui_waiting_to_start": "Scheduled to start in {}. Click to cancel.", "gui_please_wait": "Starting… Click to cancel.", "version_string": "OnionShare {0:s} | https://onionshare.org/", "gui_quit_title": "Not so fast", @@ -194,5 +194,9 @@ "gui_share_mode_timeout_waiting": "Waiting to finish sending", "gui_receive_mode_no_files": "No Files Received Yet", "gui_receive_mode_timeout_waiting": "Waiting to finish receiving", - "waiting_for_scheduled_time": "Waiting for the scheduled time before starting..." + "waiting_for_scheduled_time": "Waiting for the scheduled time before starting...", + "days_first_letter": "d", + "hours_first_letter": "h", + "minutes_first_letter": "m", + "seconds_first_letter": "s" } -- cgit v1.2.3-54-g00ecf From 2ebc22c5afd55a604f67239ff07d2f0a44ec23e1 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 24 Mar 2019 18:16:12 +1100 Subject: Fixes for displaying autostart timer countdown --- onionshare_gui/mode/__init__.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/onionshare_gui/mode/__init__.py b/onionshare_gui/mode/__init__.py index 5437ccef..f1184f2d 100644 --- a/onionshare_gui/mode/__init__.py +++ b/onionshare_gui/mode/__init__.py @@ -117,9 +117,15 @@ class Mode(QtWidgets.QWidget): if self.server_status.status == ServerStatus.STATUS_WORKING: if self.server_status.scheduled_start: now = QtCore.QDateTime.currentDateTime() - seconds_remaining = now.secsTo(self.server_status.startup_timer.dateTime()) + if self.server_status.local_only: + seconds_remaining = now.secsTo(self.server_status.startup_timer.dateTime()) + else: + seconds_remaining = now.secsTo(self.server_status.scheduled_start.replace(second=0, microsecond=0)) # Update the server button - self.server_status.server_button.setText(strings._('gui_waiting_to_start').format(self.human_friendly_time(seconds_remaining))) + if seconds_remaining > 0: + self.server_status.server_button.setText(strings._('gui_waiting_to_start').format(self.human_friendly_time(seconds_remaining))) + else: + self.server_status.server_button.setText(strings._('gui_please_wait')) # If the auto-shutdown timer has stopped, stop the server if self.server_status.status == ServerStatus.STATUS_STARTED: -- cgit v1.2.3-54-g00ecf From dae3e23652f05a6f57ec75c7eb911485372c97aa Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 24 Mar 2019 18:16:29 +1100 Subject: Fix unsetting autostart timer after reloading settings --- onionshare_gui/onionshare_gui.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py index 8e4a3338..e57d8c83 100644 --- a/onionshare_gui/onionshare_gui.py +++ b/onionshare_gui/onionshare_gui.py @@ -321,6 +321,8 @@ class OnionShareGui(QtWidgets.QMainWindow): self.receive_mode.server_status.shutdown_timeout_container.hide() # If we switched off the startup timer setting, ensure the widget is hidden. if not self.common.settings.get('startup_timer'): + self.share_mode.server_status.scheduled_start = None + self.receive_mode.server_status.scheduled_start = None self.share_mode.server_status.startup_timer_container.hide() self.receive_mode.server_status.startup_timer_container.hide() -- cgit v1.2.3-54-g00ecf From bd774ab448c37cad19f29f69eeb3ae30be1c3f73 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sun, 24 Mar 2019 18:19:50 +1100 Subject: rename CLI args for autostart/stop timers --- onionshare/__init__.py | 20 ++++++++++---------- share/locale/am.json | 2 +- share/locale/ar.json | 2 +- share/locale/bg.json | 2 +- share/locale/bn.json | 2 +- share/locale/ca.json | 2 +- share/locale/da.json | 2 +- share/locale/de.json | 2 +- share/locale/el.json | 2 +- share/locale/en.json | 4 ++-- share/locale/es.json | 2 +- share/locale/fa.json | 2 +- share/locale/fr.json | 2 +- share/locale/ga.json | 2 +- share/locale/gu.json | 2 +- share/locale/he.json | 2 +- share/locale/hu.json | 2 +- share/locale/id.json | 2 +- share/locale/is.json | 2 +- share/locale/it.json | 2 +- share/locale/ja.json | 2 +- share/locale/ka.json | 2 +- share/locale/ko.json | 2 +- share/locale/lg.json | 2 +- share/locale/mk.json | 2 +- share/locale/nl.json | 2 +- share/locale/no.json | 2 +- share/locale/pa.json | 2 +- share/locale/pl.json | 2 +- share/locale/pt_BR.json | 2 +- share/locale/pt_PT.json | 2 +- share/locale/ro.json | 2 +- share/locale/ru.json | 2 +- share/locale/sl.json | 2 +- share/locale/sn.json | 2 +- share/locale/sv.json | 2 +- share/locale/wo.json | 2 +- share/locale/yo.json | 2 +- share/locale/zh_Hans.json | 2 +- share/locale/zh_Hant.json | 2 +- 40 files changed, 50 insertions(+), 50 deletions(-) diff --git a/onionshare/__init__.py b/onionshare/__init__.py index 519c25af..8f6ca227 100644 --- a/onionshare/__init__.py +++ b/onionshare/__init__.py @@ -55,8 +55,8 @@ def main(cwd=None): parser = argparse.ArgumentParser(formatter_class=lambda prog: argparse.HelpFormatter(prog,max_help_position=28)) parser.add_argument('--local-only', action='store_true', dest='local_only', help=strings._("help_local_only")) parser.add_argument('--stay-open', action='store_true', dest='stay_open', help=strings._("help_stay_open")) - parser.add_argument('--startup-timer', metavar='', dest='startup_timer', default=0, help=strings._("help_startup_timer")) - parser.add_argument('--shutdown-timeout', metavar='', dest='shutdown_timeout', default=0, help=strings._("help_shutdown_timeout")) + parser.add_argument('--autostart-timer', metavar='', dest='autostart_timer', default=0, help=strings._("help_autostart_timer")) + parser.add_argument('--autostop-timer', metavar='', dest='autostop_timer', default=0, help=strings._("help_autostop_timer")) parser.add_argument('--stealth', action='store_true', dest='stealth', help=strings._("help_stealth")) parser.add_argument('--receive', action='store_true', dest='receive', help=strings._("help_receive")) parser.add_argument('--config', metavar='config', default=False, help=strings._('help_config')) @@ -71,8 +71,8 @@ def main(cwd=None): local_only = bool(args.local_only) debug = bool(args.debug) stay_open = bool(args.stay_open) - startup_timer = int(args.startup_timer) - shutdown_timeout = int(args.shutdown_timeout) + autostart_timer = int(args.autostart_timer) + autostop_timer = int(args.autostop_timer) stealth = bool(args.stealth) receive = bool(args.receive) config = args.config @@ -129,13 +129,13 @@ def main(cwd=None): web.generate_slug(common.settings.get('slug')) else: web.slug = None - app = OnionShare(common, onion, local_only, shutdown_timeout) + app = OnionShare(common, onion, local_only, autostop_timer) app.set_stealth(stealth) app.choose_port() # Delay the startup if a startup timer was set - if startup_timer > 0: + if autostart_timer > 0: # Can't set a schedule that is later than the shutdown timer - if app.shutdown_timeout > 0 and app.shutdown_timeout < startup_timer: + if app.shutdown_timeout > 0 and app.shutdown_timeout < autostart_timer: print(strings._('gui_timeout_cant_be_earlier_than_startup')) sys.exit() @@ -144,7 +144,7 @@ def main(cwd=None): url = 'http://{0:s}'.format(app.onion_host) else: url = 'http://{0:s}/{1:s}'.format(app.onion_host, web.slug) - schedule = datetime.now() + timedelta(seconds=startup_timer) + schedule = datetime.now() + timedelta(seconds=autostart_timer) if mode == 'receive': print(strings._('receive_mode_data_dir').format(common.settings.get('data_dir'))) print('') @@ -165,7 +165,7 @@ def main(cwd=None): print('') print(strings._("waiting_for_scheduled_time")) app.onion.cleanup(False) - time.sleep(startup_timer) + time.sleep(autostart_timer) app.start_onion_service() else: app.start_onion_service() @@ -219,7 +219,7 @@ def main(cwd=None): url = 'http://{0:s}/{1:s}'.format(app.onion_host, web.slug) print('') - if startup_timer > 0: + if autostart_timer > 0: print(strings._('server_started')) else: if mode == 'receive': diff --git a/share/locale/am.json b/share/locale/am.json index d226d86e..56705ebf 100644 --- a/share/locale/am.json +++ b/share/locale/am.json @@ -26,7 +26,7 @@ "systray_upload_started_message": "", "help_local_only": "", "help_stay_open": "", - "help_shutdown_timeout": "", + "help_autostop_timer": "", "help_stealth": "", "help_receive": "", "help_debug": "", diff --git a/share/locale/ar.json b/share/locale/ar.json index b70127fa..722ffafe 100644 --- a/share/locale/ar.json +++ b/share/locale/ar.json @@ -25,7 +25,7 @@ "systray_upload_started_message": "بدأ مستخدم رفع ملفات الى حاسوبك", "help_local_only": "", "help_stay_open": "استمر في المشاركة بعد اول تحميل", - "help_shutdown_timeout": "أوقف المشاركة بعد ثواني محددة", + "help_autostop_timer": "أوقف المشاركة بعد ثواني محددة", "help_stealth": "", "help_receive": "", "help_debug": "", diff --git a/share/locale/bg.json b/share/locale/bg.json index 256f27e0..65d091d1 100644 --- a/share/locale/bg.json +++ b/share/locale/bg.json @@ -26,7 +26,7 @@ "systray_upload_started_message": "Ползвател започна да ъплоудва файлове на компютъра Ви", "help_local_only": "Не използвайте Тор (само за разработване)", "help_stay_open": "Продължи споделянето след първото изтегляне", - "help_shutdown_timeout": "Спри споделянето след дадено количество секунди", + "help_autostop_timer": "Спри споделянето след дадено количество секунди", "help_stealth": "Използвай клиент авторизация (напреднал)", "help_receive": "Получаване на дялове вместо изпращане", "help_debug": "Протоколирай OnionShare грешки на stdout и уеб грешки на диск", diff --git a/share/locale/bn.json b/share/locale/bn.json index 691c5047..c06e22ff 100644 --- a/share/locale/bn.json +++ b/share/locale/bn.json @@ -26,7 +26,7 @@ "systray_upload_started_message": "", "help_local_only": "Tor ব্যবহার করবে না (শুধুমাত্র ডেভেলপারদের জন্য)", "help_stay_open": "ফাইলগুলো পাঠানো হয়ে গেলেও শেয়ার করা থামিও না", - "help_shutdown_timeout": "নির্দিষ্ট সেকেন্ডের পর শেয়ার করা বন্ধ করে দিও", + "help_autostop_timer": "নির্দিষ্ট সেকেন্ডের পর শেয়ার করা বন্ধ করে দিও", "help_stealth": "ক্লায়েন্ট অনুমোদন ব্যবহার করুন (উন্নততর)", "help_receive": "কোনকিছু শেয়ার না করে শুধু গ্রহণ করবে", "help_debug": "OnionShare-এর এররগুলো stdout-এ দেখাও, আর ওয়েব এররগুলো ডিস্কে লগ করো", diff --git a/share/locale/ca.json b/share/locale/ca.json index a59dae2a..65f12df4 100644 --- a/share/locale/ca.json +++ b/share/locale/ca.json @@ -25,7 +25,7 @@ "systray_upload_started_message": "Algú ha començat a pujar arxius al teu ordinador", "help_local_only": "No facis servir Tor (només per a desenvolupament)", "help_stay_open": "Mantingues obert el servei després d'enviar els arxius", - "help_shutdown_timeout": "Deixa de compartir al cap de tants segons", + "help_autostop_timer": "Deixa de compartir al cap de tants segons", "help_stealth": "Fes servir autorització de client (avançat)", "help_receive": "Rep recursos en comptes d'enviar-los", "help_debug": "Envia els errors d'OnionShare a stdout i els errors web al disc", diff --git a/share/locale/da.json b/share/locale/da.json index 39edcf22..2ef45747 100644 --- a/share/locale/da.json +++ b/share/locale/da.json @@ -21,7 +21,7 @@ "systray_download_canceled_message": "Brugeren annullerede downloaden", "help_local_only": "Brug ikke Tor (kun til udvikling)", "help_stay_open": "Fortsæt deling efter filerne er blevet sendt", - "help_shutdown_timeout": "Stop deling efter et vist antal sekunder", + "help_autostop_timer": "Stop deling efter et vist antal sekunder", "help_stealth": "Brug klientautentifikation (avanceret)", "help_debug": "Log OnionShare-fejl til stdout, og webfejl til disk", "help_filename": "Liste over filer eller mapper som skal deles", diff --git a/share/locale/de.json b/share/locale/de.json index 20ad9fe4..3d9992b7 100644 --- a/share/locale/de.json +++ b/share/locale/de.json @@ -53,7 +53,7 @@ "close_on_timeout": "Angehalten da der auto-stop Timer abgelaufen ist", "systray_upload_started_title": "OnionShare Upload wurde gestartet", "systray_upload_started_message": "Ein Benutzer hat begonnen, Dateien auf deinen Computer hochzuladen", - "help_shutdown_timeout": "Den Server nach einer bestimmten Zeit anhalten (in Sekunden)", + "help_autostop_timer": "Den Server nach einer bestimmten Zeit anhalten (in Sekunden)", "help_receive": "Empfange Dateien anstatt sie zu senden", "gui_share_stop_server_shutdown_timeout": "Server stoppen (läuft noch {} Sekunden)", "gui_share_stop_server_shutdown_timeout_tooltip": "Zeit läuft in {} Sekunden ab", diff --git a/share/locale/el.json b/share/locale/el.json index 4157c592..e4e60b26 100644 --- a/share/locale/el.json +++ b/share/locale/el.json @@ -25,7 +25,7 @@ "systray_upload_started_message": "Ένας/μια χρήστης/τρια ξεκίνησε να ανεβάζει αρχεία στον υπολογιστή σου", "help_local_only": "Να μην χρησιμοποιηθεί το Tor (μόνο για development)", "help_stay_open": "Να συνεχίσει ο διαμοιρασμός μετά την αποστολή των αρχείων", - "help_shutdown_timeout": "Να τερματιστεί ο διαμοιρασμός μετά από ένα συγκεκριμένο αριθμό δευτερολέπτων", + "help_autostop_timer": "Να τερματιστεί ο διαμοιρασμός μετά από ένα συγκεκριμένο αριθμό δευτερολέπτων", "help_stealth": "Κάντε χρήση εξουσιοδότησης πελάτη (Για προχωρημένους)", "help_receive": "Λάβετε διαμοιρασμένα αρχεία αντι να τα στέλνετε", "help_debug": "Κατέγραψε τα σφάλματα του OnionShare στο stdout (συνήθως οθόνη) και τα σφάλματα web στον δίσκο", diff --git a/share/locale/en.json b/share/locale/en.json index a3b1bf20..4ead6dd5 100644 --- a/share/locale/en.json +++ b/share/locale/en.json @@ -20,8 +20,8 @@ "large_filesize": "Warning: Sending a large share could take hours", "help_local_only": "Don't use Tor (only for development)", "help_stay_open": "Continue sharing after files have been sent", - "help_startup_timer": "Schedule this share to start N seconds from now", - "help_shutdown_timeout": "Stop sharing after a given amount of seconds", + "help_autostart_timer": "Schedule this share to start N seconds from now", + "help_autostop_timer": "Stop sharing after a given amount of seconds", "help_stealth": "Use client authorization (advanced)", "help_receive": "Receive shares instead of sending them", "help_debug": "Log OnionShare errors to stdout, and web errors to disk", diff --git a/share/locale/es.json b/share/locale/es.json index 9ad6fad5..4bb5b839 100644 --- a/share/locale/es.json +++ b/share/locale/es.json @@ -24,7 +24,7 @@ "close_on_timeout": "Parado porque el temporizador expiró", "timeout_download_still_running": "Esperando a que se complete la descarga", "large_filesize": "Advertencia: Enviar un archivo tan grande podría llevar horas", - "help_shutdown_timeout": "Dejar de compartir después de una determinada cantidad de segundos", + "help_autostop_timer": "Dejar de compartir después de una determinada cantidad de segundos", "help_stealth": "Usar autorización de cliente (avanzada)", "help_config": "Ubicación del archivo de configuración JSON personalizado (opcional)", "gui_copied_url_title": "Dirección de OnionShare copiada", diff --git a/share/locale/fa.json b/share/locale/fa.json index 7e6c305c..302bc067 100644 --- a/share/locale/fa.json +++ b/share/locale/fa.json @@ -25,7 +25,7 @@ "systray_upload_started_message": "یک کاربر شروع به آپلود فایل بر روی کامپیوتر شما کرده است", "help_local_only": "عدم استفاده از Tor (فقط برای توسعه)", "help_stay_open": "ادامه اشتراک گذاری پس از ارسال دانلود ها", - "help_shutdown_timeout": "توقف به اشتراک گذاری پس از میزان ثانیه ای مشخص", + "help_autostop_timer": "توقف به اشتراک گذاری پس از میزان ثانیه ای مشخص", "help_stealth": "استفاده از احراز هویت کلاینت (پیشرفته)", "help_receive": "دریافت اشتراک به جای ارسال آن", "help_debug": "لاگ کردن خطاهای OnionShare روی stdout، و خطاهای وب بر روی دیسک", diff --git a/share/locale/fr.json b/share/locale/fr.json index 8d87a501..5bfff5d5 100644 --- a/share/locale/fr.json +++ b/share/locale/fr.json @@ -62,7 +62,7 @@ "version_string": "OnionShare {0:s} | https://onionshare.org/", "zip_progress_bar_format": "Compression : %p%", "error_ephemeral_not_supported": "OnionShare exige au moins Tor 0.2.7.1 et python3-stem 1.4.0.", - "help_shutdown_timeout": "Arrêter le partage après un certain nombre de secondes", + "help_autostop_timer": "Arrêter le partage après un certain nombre de secondes", "gui_tor_connection_error_settings": "Essayez de modifier dans les paramètres la façon dont OnionShare se connecte au réseau Tor.", "no_available_port": "Impossible de trouver un port disponible pour démarrer le service oignon", "gui_share_stop_server_shutdown_timeout": "Arrêter le partage ({}s restantes)", diff --git a/share/locale/ga.json b/share/locale/ga.json index 114661d2..339a1b83 100644 --- a/share/locale/ga.json +++ b/share/locale/ga.json @@ -25,7 +25,7 @@ "systray_upload_started_message": "Thosaigh úsáideoir ag uaslódáil comhad go dtí do ríomhaire", "help_local_only": "Ná húsáid Tor (tástáil amháin)", "help_stay_open": "Lean ort ag comhroinnt tar éis an chéad íoslódáil", - "help_shutdown_timeout": "Stop ag comhroinnt tar éis líon áirithe soicindí", + "help_autostop_timer": "Stop ag comhroinnt tar éis líon áirithe soicindí", "help_stealth": "Úsáid údarú cliaint (ardleibhéal)", "help_receive": "Glac le comhaid chomhroinnte in áit iad a sheoladh", "help_debug": "Déan tuairisc ar earráidí OnionShare ar stdout, agus earráidí Gréasáin ar an diosca", diff --git a/share/locale/gu.json b/share/locale/gu.json index 8ebfc5fb..48b5d8b2 100644 --- a/share/locale/gu.json +++ b/share/locale/gu.json @@ -26,7 +26,7 @@ "systray_upload_started_message": "", "help_local_only": "", "help_stay_open": "", - "help_shutdown_timeout": "", + "help_autostop_timer": "", "help_stealth": "", "help_receive": "", "help_debug": "", diff --git a/share/locale/he.json b/share/locale/he.json index 11c255f6..ed49ba55 100644 --- a/share/locale/he.json +++ b/share/locale/he.json @@ -26,7 +26,7 @@ "systray_upload_started_message": "", "help_local_only": "", "help_stay_open": "", - "help_shutdown_timeout": "", + "help_autostop_timer": "", "help_stealth": "", "help_receive": "", "help_debug": "", diff --git a/share/locale/hu.json b/share/locale/hu.json index 34cc480b..eba9798d 100644 --- a/share/locale/hu.json +++ b/share/locale/hu.json @@ -25,7 +25,7 @@ "systray_upload_started_message": "", "help_local_only": "", "help_stay_open": "", - "help_shutdown_timeout": "", + "help_autostop_timer": "", "help_stealth": "", "help_receive": "", "help_debug": "", diff --git a/share/locale/id.json b/share/locale/id.json index 0557aca9..518a4547 100644 --- a/share/locale/id.json +++ b/share/locale/id.json @@ -25,7 +25,7 @@ "systray_upload_started_message": "", "help_local_only": "", "help_stay_open": "", - "help_shutdown_timeout": "", + "help_autostop_timer": "", "help_stealth": "", "help_receive": "", "help_debug": "", diff --git a/share/locale/is.json b/share/locale/is.json index 85b492ab..9109ec09 100644 --- a/share/locale/is.json +++ b/share/locale/is.json @@ -25,7 +25,7 @@ "systray_upload_started_message": "", "help_local_only": "", "help_stay_open": "", - "help_shutdown_timeout": "", + "help_autostop_timer": "", "help_stealth": "", "help_receive": "", "help_debug": "", diff --git a/share/locale/it.json b/share/locale/it.json index 6e23cb1e..26328221 100644 --- a/share/locale/it.json +++ b/share/locale/it.json @@ -39,7 +39,7 @@ "systray_download_canceled_message": "L'utente ha interrotto il download", "systray_upload_started_title": "Upload con OnionShare avviato", "systray_upload_started_message": "Un utente ha avviato l'upload di file sul tuo computer", - "help_shutdown_timeout": "Termina la condivisione dopo alcuni secondi", + "help_autostop_timer": "Termina la condivisione dopo alcuni secondi", "help_stealth": "Usa l'autorizzazione del client (avanzato)", "help_config": "Specifica il percorso del file di configurazione del JSON personalizzato", "gui_share_stop_server_shutdown_timeout": "Arresta la condivisione ({}s rimanenti)", diff --git a/share/locale/ja.json b/share/locale/ja.json index ad559ca2..f6846c52 100644 --- a/share/locale/ja.json +++ b/share/locale/ja.json @@ -26,7 +26,7 @@ "systray_upload_started_message": "ユーザーがファイルをアップロードし始めました", "help_local_only": "Torを使わない(開発利用のみ)", "help_stay_open": "ファイルが送信された後に共有し続けます", - "help_shutdown_timeout": "数秒後に共有が停止されます", + "help_autostop_timer": "数秒後に共有が停止されます", "help_stealth": "クライアント認証を使う(上級者向け)", "help_receive": "共有を送信する代わりに受信する", "help_debug": "OnionShareのエラーを標準出力に、Webのエラーをディスクに記録する", diff --git a/share/locale/ka.json b/share/locale/ka.json index 0f6541fa..72c24efd 100644 --- a/share/locale/ka.json +++ b/share/locale/ka.json @@ -25,7 +25,7 @@ "systray_upload_started_message": "", "help_local_only": "", "help_stay_open": "", - "help_shutdown_timeout": "", + "help_autostop_timer": "", "help_stealth": "", "help_receive": "", "help_debug": "", diff --git a/share/locale/ko.json b/share/locale/ko.json index c5da4e9b..e766fa05 100644 --- a/share/locale/ko.json +++ b/share/locale/ko.json @@ -26,7 +26,7 @@ "systray_upload_started_message": "사용자가 파일들을 당신의 컴퓨터로 업로딩 하는것을 시작했습니다", "help_local_only": "Tor를 사용하지 마시오 (오직 개발자용)", "help_stay_open": "첫 다운로드 후 계속 공유하시오", - "help_shutdown_timeout": "정해진 초단위의 시간이 지난후 공유하는 것을 멈추시오", + "help_autostop_timer": "정해진 초단위의 시간이 지난후 공유하는 것을 멈추시오", "help_stealth": "고객 허가를 사용 (고급 수준의)", "help_receive": "그것들을 보내는것 대신 공유를 받으시오", "help_debug": "어니언쉐어 에러들은 표준 출력 장치로 접속하고, 웹 에러들은 디스크로 접속 ", diff --git a/share/locale/lg.json b/share/locale/lg.json index 25cd5c48..8c1819bd 100644 --- a/share/locale/lg.json +++ b/share/locale/lg.json @@ -26,7 +26,7 @@ "systray_upload_started_message": "", "help_local_only": "", "help_stay_open": "", - "help_shutdown_timeout": "", + "help_autostop_timer": "", "help_stealth": "", "help_receive": "", "help_debug": "", diff --git a/share/locale/mk.json b/share/locale/mk.json index 2273ba1e..6228bfaa 100644 --- a/share/locale/mk.json +++ b/share/locale/mk.json @@ -25,7 +25,7 @@ "systray_upload_started_message": "", "help_local_only": "", "help_stay_open": "", - "help_shutdown_timeout": "", + "help_autostop_timer": "", "help_stealth": "", "help_receive": "", "help_debug": "", diff --git a/share/locale/nl.json b/share/locale/nl.json index 39c5ba9f..5ae039ff 100644 --- a/share/locale/nl.json +++ b/share/locale/nl.json @@ -21,7 +21,7 @@ "systray_download_canceled_message": "De gebruiker heeft de download afgebroken", "help_local_only": "Tor niet gebruiken (alleen voor ontwikkelingsdoeleinden)", "help_stay_open": "Blijven delen na afronden van eerste download", - "help_shutdown_timeout": "Stoppen met delen na het opgegeven aantal seconden", + "help_autostop_timer": "Stoppen met delen na het opgegeven aantal seconden", "help_stealth": "Client-authorisatie gebruiken (geavanceerd)", "help_debug": "Log OnionShare fouten naar stdout, en web fouten naar disk", "help_filename": "Lijst van bestanden of mappen om te delen", diff --git a/share/locale/no.json b/share/locale/no.json index 9d67e6fa..a3ae1a8f 100644 --- a/share/locale/no.json +++ b/share/locale/no.json @@ -26,7 +26,7 @@ "systray_upload_started_message": "En bruker startet opplasting av filer til din datamaskin", "help_local_only": "Ikke bruk Tor (kun i utviklingsøyemed)", "help_stay_open": "Fortsett å dele etter at filene har blitt sendt", - "help_shutdown_timeout": "Stopp deling etter et gitt antall sekunder", + "help_autostop_timer": "Stopp deling etter et gitt antall sekunder", "help_stealth": "Bruk klientidentifisering (avansert)", "help_receive": "Motta delinger istedenfor å sende dem", "help_debug": "Log OnionShare-feil til stdout, og vev-feil til disk", diff --git a/share/locale/pa.json b/share/locale/pa.json index a2a967cc..4cfcf0e6 100644 --- a/share/locale/pa.json +++ b/share/locale/pa.json @@ -25,7 +25,7 @@ "systray_upload_started_message": "", "help_local_only": "", "help_stay_open": "", - "help_shutdown_timeout": "", + "help_autostop_timer": "", "help_stealth": "", "help_receive": "", "help_debug": "", diff --git a/share/locale/pl.json b/share/locale/pl.json index f10a30ce..15cc3fc4 100644 --- a/share/locale/pl.json +++ b/share/locale/pl.json @@ -25,7 +25,7 @@ "systray_upload_started_message": "Użytkownik rozpoczął wysyłanie plików na Twój komputer", "help_local_only": "Nie wykorzystuj sieci Tor (opcja zaawansowana)", "help_stay_open": "Kontynuuj udostępnianie po pierwszym pobraniu", - "help_shutdown_timeout": "Przestań udostępniać po określonym czasie w sekundach", + "help_autostop_timer": "Przestań udostępniać po określonym czasie w sekundach", "help_stealth": "Korzystaj z weryfikacji klienta (zaawansowane)", "help_receive": "Odbieraj dane zamiast je wysyłać", "help_debug": "Zapisz błędy OnionShare do stdout i zapisz błędy sieciowe na dysku", diff --git a/share/locale/pt_BR.json b/share/locale/pt_BR.json index 7ff64809..d3a731b3 100644 --- a/share/locale/pt_BR.json +++ b/share/locale/pt_BR.json @@ -25,7 +25,7 @@ "systray_upload_started_message": "Alguém começou a carregar arquivos no seu computador", "help_local_only": "Não use Tor (unicamente para programação)", "help_stay_open": "Continuar a compartilhar após o envio de documentos", - "help_shutdown_timeout": "Parar de compartilhar após um número determinado de segundos", + "help_autostop_timer": "Parar de compartilhar após um número determinado de segundos", "help_stealth": "Usar autorização de cliente (avançado)", "help_receive": "Receber compartilhamentos ao invés de enviá-los", "help_debug": "Registrar erros do OnionShare no stdout e erros de rede, no disco", diff --git a/share/locale/pt_PT.json b/share/locale/pt_PT.json index 7085f2c2..e1c9fb54 100644 --- a/share/locale/pt_PT.json +++ b/share/locale/pt_PT.json @@ -25,7 +25,7 @@ "systray_upload_started_message": "", "help_local_only": "", "help_stay_open": "", - "help_shutdown_timeout": "", + "help_autostop_timer": "", "help_stealth": "", "help_receive": "", "help_debug": "", diff --git a/share/locale/ro.json b/share/locale/ro.json index 54750c24..08446de1 100644 --- a/share/locale/ro.json +++ b/share/locale/ro.json @@ -25,7 +25,7 @@ "systray_upload_started_message": "", "help_local_only": "", "help_stay_open": "", - "help_shutdown_timeout": "", + "help_autostop_timer": "", "help_stealth": "", "help_receive": "", "help_debug": "", diff --git a/share/locale/ru.json b/share/locale/ru.json index de372fe6..772e1e46 100644 --- a/share/locale/ru.json +++ b/share/locale/ru.json @@ -51,7 +51,7 @@ "systray_upload_started_message": "Пользователь начал загрузку файлов на Ваш компьютер", "help_local_only": "Не использовать Tor (только для разработки)", "help_stay_open": "Продолжить отправку после первого скачивания", - "help_shutdown_timeout": "Остановить отправку после заданного количества секунд", + "help_autostop_timer": "Остановить отправку после заданного количества секунд", "help_stealth": "Использовать авторизацию клиента (дополнительно)", "help_receive": "Получать загрузки вместо их отправки", "help_debug": "Направлять сообщения об ошибках OnionShare в stdout, ошибки сети сохранять на диск", diff --git a/share/locale/sl.json b/share/locale/sl.json index 42892ef9..bb79b972 100644 --- a/share/locale/sl.json +++ b/share/locale/sl.json @@ -25,7 +25,7 @@ "systray_upload_started_message": "", "help_local_only": "", "help_stay_open": "", - "help_shutdown_timeout": "", + "help_autostop_timer": "", "help_stealth": "", "help_receive": "", "help_debug": "", diff --git a/share/locale/sn.json b/share/locale/sn.json index 11c255f6..ed49ba55 100644 --- a/share/locale/sn.json +++ b/share/locale/sn.json @@ -26,7 +26,7 @@ "systray_upload_started_message": "", "help_local_only": "", "help_stay_open": "", - "help_shutdown_timeout": "", + "help_autostop_timer": "", "help_stealth": "", "help_receive": "", "help_debug": "", diff --git a/share/locale/sv.json b/share/locale/sv.json index f1072332..70a96320 100644 --- a/share/locale/sv.json +++ b/share/locale/sv.json @@ -26,7 +26,7 @@ "systray_upload_started_message": "En användare började ladda upp filer på din dator", "help_local_only": "Använd inte Tor (endast för utveckling)", "help_stay_open": "Fortsätt dela efter att filer har skickats", - "help_shutdown_timeout": "Avbryt delning efter ett bestämt antal sekunder", + "help_autostop_timer": "Avbryt delning efter ett bestämt antal sekunder", "help_stealth": "Använd klient-auktorisering (avancerat)", "help_receive": "Ta emot delningar istället för att skicka dem", "help_debug": "Logga OnionShare fel till stdout och webbfel till hårddisken", diff --git a/share/locale/wo.json b/share/locale/wo.json index a67a5f75..f39e1af7 100644 --- a/share/locale/wo.json +++ b/share/locale/wo.json @@ -25,7 +25,7 @@ "systray_upload_started_message": "", "help_local_only": "", "help_stay_open": "", - "help_shutdown_timeout": "", + "help_autostop_timer": "", "help_stealth": "", "help_receive": "", "help_debug": "", diff --git a/share/locale/yo.json b/share/locale/yo.json index 25cd5c48..8c1819bd 100644 --- a/share/locale/yo.json +++ b/share/locale/yo.json @@ -26,7 +26,7 @@ "systray_upload_started_message": "", "help_local_only": "", "help_stay_open": "", - "help_shutdown_timeout": "", + "help_autostop_timer": "", "help_stealth": "", "help_receive": "", "help_debug": "", diff --git a/share/locale/zh_Hans.json b/share/locale/zh_Hans.json index 6a3bf7b7..3457ef3c 100644 --- a/share/locale/zh_Hans.json +++ b/share/locale/zh_Hans.json @@ -25,7 +25,7 @@ "systray_upload_started_message": "", "help_local_only": "不使用Tor(只限开发测试)", "help_stay_open": "文件传输完成后继续分享", - "help_shutdown_timeout": "超过给定时间(秒)后,终止分享.", + "help_autostop_timer": "超过给定时间(秒)后,终止分享.", "help_stealth": "使用服务端认证(高级选项)", "help_receive": "仅接收分享的文件,不发送", "help_debug": "将OnionShare错误日志记录到stdout,将web错误日志记录到磁盘", diff --git a/share/locale/zh_Hant.json b/share/locale/zh_Hant.json index c24d13ce..24317384 100644 --- a/share/locale/zh_Hant.json +++ b/share/locale/zh_Hant.json @@ -25,7 +25,7 @@ "systray_upload_started_message": "", "help_local_only": "", "help_stay_open": "", - "help_shutdown_timeout": "", + "help_autostop_timer": "", "help_stealth": "", "help_receive": "", "help_debug": "", -- cgit v1.2.3-54-g00ecf From c411e8d61a952faca758673a5c59133986fd9623 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Mon, 25 Mar 2019 15:05:54 +1100 Subject: Standardise all shutdown_timer, shutdown_timeout, timeout attributes as 'autostop_timer' --- onionshare/__init__.py | 22 ++--- onionshare/common.py | 4 +- onionshare/onionshare.py | 14 ++-- onionshare/settings.py | 2 +- onionshare_gui/mode/__init__.py | 40 ++++----- onionshare_gui/mode/receive_mode/__init__.py | 14 ++-- onionshare_gui/mode/share_mode/__init__.py | 14 ++-- onionshare_gui/onionshare_gui.py | 8 +- onionshare_gui/server_status.py | 94 +++++++++++----------- onionshare_gui/settings_dialog.py | 44 +++++----- share/locale/am.json | 18 ++--- share/locale/ar.json | 22 ++--- share/locale/bg.json | 18 ++--- share/locale/bn.json | 22 ++--- share/locale/ca.json | 22 ++--- share/locale/cs.json | 4 +- share/locale/da.json | 22 ++--- share/locale/de.json | 22 ++--- share/locale/el.json | 22 ++--- share/locale/en.json | 22 ++--- share/locale/es.json | 22 ++--- share/locale/fa.json | 22 ++--- share/locale/fi.json | 24 +++--- share/locale/fr.json | 22 ++--- share/locale/ga.json | 18 ++--- share/locale/gu.json | 18 ++--- share/locale/he.json | 18 ++--- share/locale/hi.json | 24 +++--- share/locale/hu.json | 18 ++--- share/locale/id.json | 18 ++--- share/locale/is.json | 18 ++--- share/locale/it.json | 22 ++--- share/locale/ja.json | 22 ++--- share/locale/ka.json | 18 ++--- share/locale/ko.json | 18 ++--- share/locale/lg.json | 18 ++--- share/locale/mk.json | 18 ++--- share/locale/ms.json | 24 +++--- share/locale/nl.json | 18 ++--- share/locale/no.json | 22 ++--- share/locale/pa.json | 18 ++--- share/locale/pl.json | 18 ++--- share/locale/pt_BR.json | 22 ++--- share/locale/pt_PT.json | 18 ++--- share/locale/ro.json | 18 ++--- share/locale/ru.json | 22 ++--- share/locale/sl.json | 18 ++--- share/locale/sn.json | 18 ++--- share/locale/sv.json | 22 ++--- share/locale/tr.json | 2 +- share/locale/wo.json | 18 ++--- share/locale/yo.json | 18 ++--- share/locale/zh_Hans.json | 22 ++--- share/locale/zh_Hant.json | 18 ++--- tests/GuiBaseTest.py | 10 +-- tests/GuiReceiveTest.py | 2 +- tests/GuiShareTest.py | 4 +- tests/SettingsGuiBaseTest.py | 12 +-- tests/TorGuiShareTest.py | 2 +- tests/local_onionshare_receive_mode_timer_test.py | 2 +- ...e_autostart_and_autostop_timer_mismatch_test.py | 27 +++++++ ...ode_startup_and_shutdown_timer_mismatch_test.py | 27 ------- tests/local_onionshare_share_mode_timer_test.py | 2 +- ...l_onionshare_share_mode_timer_too_short_test.py | 2 +- tests/onionshare_share_mode_timer_test.py | 2 +- tests/test_onionshare_settings.py | 2 +- 66 files changed, 599 insertions(+), 599 deletions(-) create mode 100644 tests/local_onionshare_share_mode_autostart_and_autostop_timer_mismatch_test.py delete mode 100644 tests/local_onionshare_share_mode_startup_and_shutdown_timer_mismatch_test.py diff --git a/onionshare/__init__.py b/onionshare/__init__.py index 616cf9db..722b4018 100644 --- a/onionshare/__init__.py +++ b/onionshare/__init__.py @@ -136,9 +136,9 @@ def main(cwd=None): app.choose_port() # Delay the startup if a startup timer was set if autostart_timer > 0: - # Can't set a schedule that is later than the shutdown timer - if app.shutdown_timeout > 0 and app.shutdown_timeout < autostart_timer: - print(strings._('gui_timeout_cant_be_earlier_than_startup')) + # Can't set a schedule that is later than the auto-stop timer + if app.autostop_timer > 0 and app.autostop_timer < autostart_timer: + print(strings._('gui_autostop_timer_cant_be_earlier_than_startup')) sys.exit() app.start_onion_service(False, True) @@ -204,9 +204,9 @@ def main(cwd=None): # Wait for web.generate_slug() to finish running time.sleep(0.2) - # start shutdown timer thread - if app.shutdown_timeout > 0: - app.shutdown_timer.start() + # start auto-stop timer thread + if app.autostop_timer > 0: + app.autostop_timer_thread.start() # Save the web slug if we are using a persistent private key if common.settings.get('save_private_key'): @@ -250,18 +250,18 @@ def main(cwd=None): # Wait for app to close while t.is_alive(): - if app.shutdown_timeout > 0: - # if the shutdown timer was set and has run out, stop the server - if not app.shutdown_timer.is_alive(): + if app.autostop_timer > 0: + # if the auto-stop timer was set and has run out, stop the server + if not app.autostop_timer_thread.is_alive(): if mode == 'share': # If there were no attempts to download the share, or all downloads are done, we can stop if web.share_mode.download_count == 0 or web.done: - print(strings._("close_on_timeout")) + print(strings._("close_on_autostop_timer")) web.stop(app.port) break if mode == 'receive': if web.receive_mode.upload_count == 0 or not web.receive_mode.uploads_in_progress: - print(strings._("close_on_timeout")) + print(strings._("close_on_autostop_timer")) web.stop(app.port) break else: diff --git a/onionshare/common.py b/onionshare/common.py index fcb9ca6d..02668507 100644 --- a/onionshare/common.py +++ b/onionshare/common.py @@ -485,7 +485,7 @@ class Common(object): return total_size -class ShutdownTimer(threading.Thread): +class AutoStopTimer(threading.Thread): """ Background thread sleeps t hours and returns. """ @@ -498,6 +498,6 @@ class ShutdownTimer(threading.Thread): self.time = time def run(self): - self.common.log('Shutdown Timer', 'Server will shut down after {} seconds'.format(self.time)) + self.common.log('AutoStopTimer', 'Server will shut down after {} seconds'.format(self.time)) time.sleep(self.time) return 1 diff --git a/onionshare/onionshare.py b/onionshare/onionshare.py index 6598b975..e746bae1 100644 --- a/onionshare/onionshare.py +++ b/onionshare/onionshare.py @@ -22,14 +22,14 @@ import os, shutil from . import common, strings from .onion import TorTooOld, TorErrorProtocolError -from .common import ShutdownTimer +from .common import AutoStopTimer class OnionShare(object): """ OnionShare is the main application class. Pass in options and run start_onion_service and it will do the magic. """ - def __init__(self, common, onion, local_only=False, shutdown_timeout=0): + def __init__(self, common, onion, local_only=False, autostop_timer=0): self.common = common self.common.log('OnionShare', '__init__') @@ -49,9 +49,9 @@ class OnionShare(object): self.local_only = local_only # optionally shut down after N hours - self.shutdown_timeout = shutdown_timeout - # init timing thread - self.shutdown_timer = None + self.autostop_timer = autostop_timer + # init auto-stop timer thread + self.autostop_timer_thread = None def set_stealth(self, stealth): self.common.log('OnionShare', 'set_stealth', 'stealth={}'.format(stealth)) @@ -77,8 +77,8 @@ class OnionShare(object): if not self.port: self.choose_port() - if self.shutdown_timeout > 0: - self.shutdown_timer = ShutdownTimer(self.common, self.shutdown_timeout) + if self.autostop_timer > 0: + self.autostop_timer_thread = AutoStopTimer(self.common, self.autostop_timer) if self.local_only: self.onion_host = '127.0.0.1:{0:d}'.format(self.port) diff --git a/onionshare/settings.py b/onionshare/settings.py index d015c5ce..a5d4db6a 100644 --- a/onionshare/settings.py +++ b/onionshare/settings.py @@ -84,7 +84,7 @@ class Settings(object): 'auth_type': 'no_auth', 'auth_password': '', 'close_after_first_download': True, - 'shutdown_timeout': False, + 'autostop_timer': False, 'startup_timer': False, 'use_stealth': False, 'use_autoupdate': True, diff --git a/onionshare_gui/mode/__init__.py b/onionshare_gui/mode/__init__.py index f1184f2d..954bcc4d 100644 --- a/onionshare_gui/mode/__init__.py +++ b/onionshare_gui/mode/__init__.py @@ -20,7 +20,7 @@ along with this program. If not, see . from PyQt5 import QtCore, QtWidgets, QtGui from onionshare import strings -from onionshare.common import ShutdownTimer +from onionshare.common import AutoStopTimer from ..server_status import ServerStatus from ..threads import OnionThread @@ -127,20 +127,20 @@ class Mode(QtWidgets.QWidget): else: self.server_status.server_button.setText(strings._('gui_please_wait')) - # If the auto-shutdown timer has stopped, stop the server + # If the auto-stop timer has stopped, stop the server if self.server_status.status == ServerStatus.STATUS_STARTED: - if self.app.shutdown_timer and self.common.settings.get('shutdown_timeout'): - if self.timeout > 0: + if self.app.autostop_timer_thread and self.common.settings.get('autostop_timer'): + if self.autostop_timer_datetime_delta > 0: now = QtCore.QDateTime.currentDateTime() - seconds_remaining = now.secsTo(self.server_status.timeout) + seconds_remaining = now.secsTo(self.server_status.autostop_timer_datetime) # Update the server button - server_button_text = self.get_stop_server_shutdown_timeout_text() + server_button_text = self.get_stop_server_autostop_timer_text() self.server_status.server_button.setText(server_button_text.format(self.human_friendly_time(seconds_remaining))) self.status_bar.clearMessage() - if not self.app.shutdown_timer.is_alive(): - if self.timeout_finished_should_stop_server(): + if not self.app.autostop_timer_thread.is_alive(): + if self.autostop_timer_finished_should_stop_server(): self.server_status.stop_server() def timer_callback_custom(self): @@ -149,15 +149,15 @@ class Mode(QtWidgets.QWidget): """ pass - def get_stop_server_shutdown_timeout_text(self): + def get_stop_server_autostop_timer_text(self): """ - Return the string to put on the stop server button, if there's a shutdown timeout + Return the string to put on the stop server button, if there's an auto-stop timer """ pass - def timeout_finished_should_stop_server(self): + def autostop_timer_finished_should_stop_server(self): """ - The shutdown timer expired, should we stop the server? Returns a bool + The auto-stop timer expired, should we stop the server? Returns a bool """ pass @@ -259,18 +259,18 @@ class Mode(QtWidgets.QWidget): self.start_server_step3_custom() - if self.common.settings.get('shutdown_timeout'): + if self.common.settings.get('autostop_timer'): # Convert the date value to seconds between now and then now = QtCore.QDateTime.currentDateTime() - self.timeout = now.secsTo(self.server_status.timeout) - # Set the shutdown timeout value - if self.timeout > 0: - self.app.shutdown_timer = ShutdownTimer(self.common, self.timeout) - self.app.shutdown_timer.start() - # The timeout has actually already passed since the user clicked Start. Probably the Onion service took too long to start. + self.autostop_timer_datetime_delta = now.secsTo(self.server_status.autostop_timer_datetime) + # Start the auto-stop timer + if self.autostop_timer_datetime_delta > 0: + self.app.autostop_timer_thread = AutoStopTimer(self.common, self.autostop_timer_datetime_delta) + self.app.autostop_timer_thread.start() + # The auto-stop timer has actually already passed since the user clicked Start. Probably the Onion service took too long to start. else: self.stop_server() - self.start_server_error(strings._('gui_server_started_after_timeout')) + self.start_server_error(strings._('gui_server_started_after_autostop_timer')) def start_server_step3_custom(self): """ diff --git a/onionshare_gui/mode/receive_mode/__init__.py b/onionshare_gui/mode/receive_mode/__init__.py index 5fb33ab3..4c0b49ba 100644 --- a/onionshare_gui/mode/receive_mode/__init__.py +++ b/onionshare_gui/mode/receive_mode/__init__.py @@ -86,24 +86,24 @@ class ReceiveMode(Mode): self.wrapper_layout.addWidget(self.history, stretch=1) self.setLayout(self.wrapper_layout) - def get_stop_server_shutdown_timeout_text(self): + def get_stop_server_autostop_timer_text(self): """ - Return the string to put on the stop server button, if there's a shutdown timeout + Return the string to put on the stop server button, if there's an auto-stop timer """ - return strings._('gui_receive_stop_server_shutdown_timeout') + return strings._('gui_receive_stop_server_autostop_timer') - def timeout_finished_should_stop_server(self): + def autostop_timer_finished_should_stop_server(self): """ - The shutdown timer expired, should we stop the server? Returns a bool + The auto-stop timer expired, should we stop the server? Returns a bool """ # If there were no attempts to upload files, or all uploads are done, we can stop if self.web.receive_mode.upload_count == 0 or not self.web.receive_mode.uploads_in_progress: self.server_status.stop_server() - self.server_status_label.setText(strings._('close_on_timeout')) + self.server_status_label.setText(strings._('close_on_autostop_timer')) return True # An upload is probably still running - hold off on stopping the share, but block new shares. else: - self.server_status_label.setText(strings._('gui_receive_mode_timeout_waiting')) + self.server_status_label.setText(strings._('gui_receive_mode_autostop_timer_waiting')) self.web.receive_mode.can_upload = False return False diff --git a/onionshare_gui/mode/share_mode/__init__.py b/onionshare_gui/mode/share_mode/__init__.py index 1f5ad00b..6cb50b2b 100644 --- a/onionshare_gui/mode/share_mode/__init__.py +++ b/onionshare_gui/mode/share_mode/__init__.py @@ -121,24 +121,24 @@ class ShareMode(Mode): # Always start with focus on file selection self.file_selection.setFocus() - def get_stop_server_shutdown_timeout_text(self): + def get_stop_server_autostop_timer_text(self): """ - Return the string to put on the stop server button, if there's a shutdown timeout + Return the string to put on the stop server button, if there's an auto-stop timer """ - return strings._('gui_share_stop_server_shutdown_timeout') + return strings._('gui_share_stop_server_autostop_timer') - def timeout_finished_should_stop_server(self): + def autostop_timer_finished_should_stop_server(self): """ - The shutdown timer expired, should we stop the server? Returns a bool + The auto-stop timer expired, should we stop the server? Returns a bool """ # If there were no attempts to download the share, or all downloads are done, we can stop if self.web.share_mode.download_count == 0 or self.web.done: self.server_status.stop_server() - self.server_status_label.setText(strings._('close_on_timeout')) + self.server_status_label.setText(strings._('close_on_autostop_timer')) return True # A download is probably still running - hold off on stopping the share else: - self.server_status_label.setText(strings._('gui_share_mode_timeout_waiting')) + self.server_status_label.setText(strings._('gui_share_mode_autostop_timer_waiting')) return False def start_server_custom(self): diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py index e57d8c83..0627d205 100644 --- a/onionshare_gui/onionshare_gui.py +++ b/onionshare_gui/onionshare_gui.py @@ -315,10 +315,10 @@ class OnionShareGui(QtWidgets.QMainWindow): self.receive_mode.on_reload_settings() self.status_bar.clearMessage() - # If we switched off the shutdown timeout setting, ensure the widget is hidden. - if not self.common.settings.get('shutdown_timeout'): - self.share_mode.server_status.shutdown_timeout_container.hide() - self.receive_mode.server_status.shutdown_timeout_container.hide() + # If we switched off the auto-stop timer setting, ensure the widget is hidden. + if not self.common.settings.get('autostop_timer'): + self.share_mode.server_status.autostop_timer_container.hide() + self.receive_mode.server_status.autostop_timer_container.hide() # If we switched off the startup timer setting, ensure the widget is hidden. if not self.common.settings.get('startup_timer'): self.share_mode.server_status.scheduled_start = None diff --git a/onionshare_gui/server_status.py b/onionshare_gui/server_status.py index 6a2b883b..d05c8251 100644 --- a/onionshare_gui/server_status.py +++ b/onionshare_gui/server_status.py @@ -86,30 +86,30 @@ class ServerStatus(QtWidgets.QWidget): self.startup_timer_container.setLayout(startup_timer_container_layout) self.startup_timer_container.hide() - # Shutdown timeout layout - self.shutdown_timeout_label = QtWidgets.QLabel(strings._('gui_settings_shutdown_timeout')) - self.shutdown_timeout = QtWidgets.QDateTimeEdit() - self.shutdown_timeout.setDisplayFormat("hh:mm A MMM d, yy") + # Auto-stop timer layout + self.autostop_timer_label = QtWidgets.QLabel(strings._('gui_settings_autostop_timer')) + self.autostop_timer_widget = QtWidgets.QDateTimeEdit() + self.autostop_timer_widget.setDisplayFormat("hh:mm A MMM d, yy") if self.local_only: # For testing - self.shutdown_timeout.setDateTime(QtCore.QDateTime.currentDateTime().addSecs(15)) - self.shutdown_timeout.setMinimumDateTime(QtCore.QDateTime.currentDateTime()) + self.autostop_timer_widget.setDateTime(QtCore.QDateTime.currentDateTime().addSecs(15)) + self.autostop_timer_widget.setMinimumDateTime(QtCore.QDateTime.currentDateTime()) else: - # Set proposed timeout to be 5 minutes into the future - self.shutdown_timeout.setDateTime(QtCore.QDateTime.currentDateTime().addSecs(300)) + # Set proposed timer to be 5 minutes into the future + self.autostop_timer_widget.setDateTime(QtCore.QDateTime.currentDateTime().addSecs(300)) # Onion services can take a little while to start, so reduce the risk of it expiring too soon by setting the minimum to 60s from now - self.shutdown_timeout.setMinimumDateTime(QtCore.QDateTime.currentDateTime().addSecs(60)) - self.shutdown_timeout.setCurrentSection(QtWidgets.QDateTimeEdit.MinuteSection) - shutdown_timeout_layout = QtWidgets.QHBoxLayout() - shutdown_timeout_layout.addWidget(self.shutdown_timeout_label) - shutdown_timeout_layout.addWidget(self.shutdown_timeout) - - # Shutdown timeout container, so it can all be hidden and shown as a group - shutdown_timeout_container_layout = QtWidgets.QVBoxLayout() - shutdown_timeout_container_layout.addLayout(shutdown_timeout_layout) - self.shutdown_timeout_container = QtWidgets.QWidget() - self.shutdown_timeout_container.setLayout(shutdown_timeout_container_layout) - self.shutdown_timeout_container.hide() + self.autostop_timer_widget.setMinimumDateTime(QtCore.QDateTime.currentDateTime().addSecs(60)) + self.autostop_timer_widget.setCurrentSection(QtWidgets.QDateTimeEdit.MinuteSection) + autostop_timer_layout = QtWidgets.QHBoxLayout() + autostop_timer_layout.addWidget(self.autostop_timer_label) + autostop_timer_layout.addWidget(self.autostop_timer_widget) + + # Auto-stop timer container, so it can all be hidden and shown as a group + autostop_timer_container_layout = QtWidgets.QVBoxLayout() + autostop_timer_container_layout.addLayout(autostop_timer_layout) + self.autostop_timer_container = QtWidgets.QWidget() + self.autostop_timer_container.setLayout(autostop_timer_container_layout) + self.autostop_timer_container.hide() # Server layout self.server_button = QtWidgets.QPushButton() @@ -150,7 +150,7 @@ class ServerStatus(QtWidgets.QWidget): layout.addWidget(self.server_button) layout.addLayout(url_layout) layout.addWidget(self.startup_timer_container) - layout.addWidget(self.shutdown_timeout_container) + layout.addWidget(self.autostop_timer_container) self.setLayout(layout) def set_mode(self, share_mode, file_selection=None): @@ -189,13 +189,13 @@ class ServerStatus(QtWidgets.QWidget): if not self.local_only: self.startup_timer.setMinimumDateTime(QtCore.QDateTime.currentDateTime().addSecs(60)) - def shutdown_timeout_reset(self): + def autostop_timer_reset(self): """ - Reset the timeout in the UI after stopping a share + Reset the auto-stop timer in the UI after stopping a share """ - self.shutdown_timeout.setDateTime(QtCore.QDateTime.currentDateTime().addSecs(300)) + self.autostop_timer_widget.setDateTime(QtCore.QDateTime.currentDateTime().addSecs(300)) if not self.local_only: - self.shutdown_timeout.setMinimumDateTime(QtCore.QDateTime.currentDateTime().addSecs(60)) + self.autostop_timer_widget.setMinimumDateTime(QtCore.QDateTime.currentDateTime().addSecs(60)) def show_url(self): """ @@ -247,8 +247,8 @@ class ServerStatus(QtWidgets.QWidget): if self.common.settings.get('startup_timer'): self.startup_timer_container.hide() - if self.common.settings.get('shutdown_timeout'): - self.shutdown_timeout_container.hide() + if self.common.settings.get('autostop_timer'): + self.autostop_timer_container.hide() else: self.url_description.hide() self.url.hide() @@ -271,8 +271,8 @@ class ServerStatus(QtWidgets.QWidget): self.server_button.setToolTip('') if self.common.settings.get('startup_timer'): self.startup_timer_container.show() - if self.common.settings.get('shutdown_timeout'): - self.shutdown_timeout_container.show() + if self.common.settings.get('autostop_timer'): + self.autostop_timer_container.show() elif self.status == self.STATUS_STARTED: self.server_button.setStyleSheet(self.common.css['server_status_button_started']) self.server_button.setEnabled(True) @@ -282,9 +282,9 @@ class ServerStatus(QtWidgets.QWidget): self.server_button.setText(strings._('gui_receive_stop_server')) if self.common.settings.get('startup_timer'): self.startup_timer_container.hide() - if self.common.settings.get('shutdown_timeout'): - self.shutdown_timeout_container.hide() - self.server_button.setToolTip(strings._('gui_stop_server_shutdown_timeout_tooltip').format(self.shutdown_timeout.dateTime().toString("H:mmAP, MMM dd, yy"))) + if self.common.settings.get('autostop_timer'): + self.autostop_timer_container.hide() + self.server_button.setToolTip(strings._('gui_stop_server_autostop_timer_tooltip').format(self.autostop_timer_widget.dateTime().toString("H:mmAP, MMM dd, yy"))) elif self.status == self.STATUS_WORKING: self.server_button.setStyleSheet(self.common.css['server_status_button_working']) self.server_button.setEnabled(True) @@ -293,8 +293,8 @@ class ServerStatus(QtWidgets.QWidget): self.server_button.setToolTip(strings._('gui_start_server_startup_timer_tooltip').format(self.startup_timer.dateTime().toString("H:mmAP, MMM dd, yy"))) else: self.server_button.setText(strings._('gui_please_wait')) - if self.common.settings.get('shutdown_timeout'): - self.shutdown_timeout_container.hide() + if self.common.settings.get('autostop_timer'): + self.autostop_timer_container.hide() else: self.server_button.setStyleSheet(self.common.css['server_status_button_working']) self.server_button.setEnabled(False) @@ -302,8 +302,8 @@ class ServerStatus(QtWidgets.QWidget): if self.common.settings.get('startup_timer'): self.startup_timer_container.hide() self.server_button.setToolTip(strings._('gui_start_server_startup_timer_tooltip').format(self.startup_timer.dateTime().toString("H:mmAP, MMM dd, yy"))) - if self.common.settings.get('shutdown_timeout'): - self.shutdown_timeout_container.hide() + if self.common.settings.get('autostop_timer'): + self.autostop_timer_container.hide() def server_button_clicked(self): """ @@ -320,19 +320,19 @@ class ServerStatus(QtWidgets.QWidget): if QtCore.QDateTime.currentDateTime().toPyDateTime() > self.scheduled_start: can_start = False Alert(self.common, strings._('gui_server_startup_timer_expired'), QtWidgets.QMessageBox.Warning) - if self.common.settings.get('shutdown_timeout'): + if self.common.settings.get('autostop_timer'): if self.local_only: - self.timeout = self.shutdown_timeout.dateTime().toPyDateTime() + self.autostop_timer_datetime = self.autostop_timer_widget.dateTime().toPyDateTime() else: - # Get the timeout chosen, stripped of its seconds. This prevents confusion if the share stops at (say) 37 seconds past the minute chosen - self.timeout = self.shutdown_timeout.dateTime().toPyDateTime().replace(second=0, microsecond=0) - # If the timeout has actually passed already before the user hit Start, refuse to start the server. - if QtCore.QDateTime.currentDateTime().toPyDateTime() > self.timeout: + # Get the timer chosen, stripped of its seconds. This prevents confusion if the share stops at (say) 37 seconds past the minute chosen + self.autostop_timer_datetime = self.autostop_timer_widget.dateTime().toPyDateTime().replace(second=0, microsecond=0) + # If the timer has actually passed already before the user hit Start, refuse to start the server. + if QtCore.QDateTime.currentDateTime().toPyDateTime() > self.autostop_timer_datetime: can_start = False - Alert(self.common, strings._('gui_server_timeout_expired'), QtWidgets.QMessageBox.Warning) + Alert(self.common, strings._('gui_server_autostop_timer_expired'), QtWidgets.QMessageBox.Warning) if self.common.settings.get('startup_timer'): - if self.timeout <= self.scheduled_start: - Alert(self.common, strings._('gui_timeout_cant_be_earlier_than_startup'), QtWidgets.QMessageBox.Warning) + if self.autostop_timer_datetime <= self.scheduled_start: + Alert(self.common, strings._('gui_autostop_timer_cant_be_earlier_than_startup'), QtWidgets.QMessageBox.Warning) can_start = False if can_start: self.start_server() @@ -365,7 +365,7 @@ class ServerStatus(QtWidgets.QWidget): """ self.status = self.STATUS_WORKING self.startup_timer_reset() - self.shutdown_timeout_reset() + self.autostop_timer_reset() self.update() self.server_stopped.emit() @@ -376,7 +376,7 @@ class ServerStatus(QtWidgets.QWidget): self.common.log('ServerStatus', 'cancel_server', 'Canceling the server mid-startup') self.status = self.STATUS_WORKING self.startup_timer_reset() - self.shutdown_timeout_reset() + self.autostop_timer_reset() self.update() self.server_canceled.emit() diff --git a/onionshare_gui/settings_dialog.py b/onionshare_gui/settings_dialog.py index 58fb2244..f5d9c85a 100644 --- a/onionshare_gui/settings_dialog.py +++ b/onionshare_gui/settings_dialog.py @@ -88,28 +88,28 @@ class SettingsDialog(QtWidgets.QDialog): self.startup_timer_widget = QtWidgets.QWidget() self.startup_timer_widget.setLayout(startup_timer_layout) - # Whether or not to use a shutdown ('auto-stop') timer - self.shutdown_timeout_checkbox = QtWidgets.QCheckBox() - self.shutdown_timeout_checkbox.setCheckState(QtCore.Qt.Checked) - self.shutdown_timeout_checkbox.setText(strings._("gui_settings_shutdown_timeout_checkbox")) - shutdown_timeout_label = QtWidgets.QLabel(strings._("gui_settings_whats_this").format("https://github.com/micahflee/onionshare/wiki/Using-the-Auto-Stop-Timer")) - shutdown_timeout_label.setStyleSheet(self.common.css['settings_whats_this']) - shutdown_timeout_label.setTextInteractionFlags(QtCore.Qt.TextBrowserInteraction) - shutdown_timeout_label.setOpenExternalLinks(True) - shutdown_timeout_label.setMinimumSize(public_mode_label.sizeHint()) - shutdown_timeout_layout = QtWidgets.QHBoxLayout() - shutdown_timeout_layout.addWidget(self.shutdown_timeout_checkbox) - shutdown_timeout_layout.addWidget(shutdown_timeout_label) - shutdown_timeout_layout.addStretch() - shutdown_timeout_layout.setContentsMargins(0,0,0,0) - self.shutdown_timeout_widget = QtWidgets.QWidget() - self.shutdown_timeout_widget.setLayout(shutdown_timeout_layout) + # Whether or not to use an auto-stop timer + self.autostop_timer_checkbox = QtWidgets.QCheckBox() + self.autostop_timer_checkbox.setCheckState(QtCore.Qt.Checked) + self.autostop_timer_checkbox.setText(strings._("gui_settings_autostop_timer_checkbox")) + autostop_timer_label = QtWidgets.QLabel(strings._("gui_settings_whats_this").format("https://github.com/micahflee/onionshare/wiki/Using-the-Auto-Stop-Timer")) + autostop_timer_label.setStyleSheet(self.common.css['settings_whats_this']) + autostop_timer_label.setTextInteractionFlags(QtCore.Qt.TextBrowserInteraction) + autostop_timer_label.setOpenExternalLinks(True) + autostop_timer_label.setMinimumSize(public_mode_label.sizeHint()) + autostop_timer_layout = QtWidgets.QHBoxLayout() + autostop_timer_layout.addWidget(self.autostop_timer_checkbox) + autostop_timer_layout.addWidget(autostop_timer_label) + autostop_timer_layout.addStretch() + autostop_timer_layout.setContentsMargins(0,0,0,0) + self.autostop_timer_widget = QtWidgets.QWidget() + self.autostop_timer_widget.setLayout(autostop_timer_layout) # General settings layout general_group_layout = QtWidgets.QVBoxLayout() general_group_layout.addWidget(self.public_mode_widget) general_group_layout.addWidget(self.startup_timer_widget) - general_group_layout.addWidget(self.shutdown_timeout_widget) + general_group_layout.addWidget(self.autostop_timer_widget) general_group = QtWidgets.QGroupBox(strings._("gui_settings_general_label")) general_group.setLayout(general_group_layout) @@ -512,11 +512,11 @@ class SettingsDialog(QtWidgets.QDialog): else: self.startup_timer_checkbox.setCheckState(QtCore.Qt.Unchecked) - shutdown_timeout = self.old_settings.get('shutdown_timeout') - if shutdown_timeout: - self.shutdown_timeout_checkbox.setCheckState(QtCore.Qt.Checked) + autostop_timer = self.old_settings.get('autostop_timer') + if autostop_timer: + self.autostop_timer_checkbox.setCheckState(QtCore.Qt.Checked) else: - self.shutdown_timeout_checkbox.setCheckState(QtCore.Qt.Unchecked) + self.autostop_timer_checkbox.setCheckState(QtCore.Qt.Unchecked) save_private_key = self.old_settings.get('save_private_key') if save_private_key: @@ -957,7 +957,7 @@ class SettingsDialog(QtWidgets.QDialog): settings.set('close_after_first_download', self.close_after_first_download_checkbox.isChecked()) settings.set('startup_timer', self.startup_timer_checkbox.isChecked()) - settings.set('shutdown_timeout', self.shutdown_timeout_checkbox.isChecked()) + settings.set('autostop_timer', self.autostop_timer_checkbox.isChecked()) # Complicated logic here to force v2 onion mode on or off depending on other settings if self.use_legacy_v2_onions_checkbox.isChecked(): diff --git a/share/locale/am.json b/share/locale/am.json index 56705ebf..a911a5a4 100644 --- a/share/locale/am.json +++ b/share/locale/am.json @@ -10,7 +10,7 @@ "not_a_readable_file": "", "no_available_port": "", "other_page_loaded": "", - "close_on_timeout": "", + "close_on_autostop_timer": "", "closing_automatically": "", "timeout_download_still_running": "", "timeout_upload_still_running": "", @@ -38,12 +38,12 @@ "gui_choose_items": "", "gui_share_start_server": "", "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "", "gui_copy_hidservauth": "", "gui_downloads": "", @@ -105,8 +105,8 @@ "gui_settings_button_save": "", "gui_settings_button_cancel": "ተወው", "gui_settings_button_help": "መመሪያ", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "", @@ -132,8 +132,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_use_legacy_v2_onions_checkbox": "", "gui_save_private_key_checkbox": "", diff --git a/share/locale/ar.json b/share/locale/ar.json index 458ae7bb..059a68f5 100644 --- a/share/locale/ar.json +++ b/share/locale/ar.json @@ -10,7 +10,7 @@ "not_a_readable_file": "{0:s} ملف غير قابل للقراءة.", "no_available_port": "لا يوجد منفذ متاح لتشغيل (onion service)", "other_page_loaded": "تم تحميل العنوان", - "close_on_timeout": "", + "close_on_autostop_timer": "", "closing_automatically": "توقف بسبب انتهاء التحميل", "timeout_download_still_running": "انتظار اكتمال التحميل", "large_filesize": "تحذير: ارسال مشاركة كبيرة قد يستغرق ساعات", @@ -37,12 +37,12 @@ "gui_choose_items": "إختر", "gui_share_start_server": "ابدأ المشاركة", "gui_share_stop_server": "أوقف المشاركة", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "نسخ العنوان", "gui_copy_hidservauth": "", "gui_downloads": "", @@ -104,8 +104,8 @@ "gui_settings_button_save": "حفظ", "gui_settings_button_cancel": "إلغاء", "gui_settings_button_help": "مساعدة", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "إيقاف المشاركة يوم:", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "إيقاف المشاركة يوم:", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "لا يمكن الاتصال بوحدة تحكم تور في {}:{}.", @@ -131,8 +131,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "غير متصل بشبكة تور.", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_use_legacy_v2_onions_checkbox": "استخدم العناوين الموروثة", "gui_save_private_key_checkbox": "استخدم عنوانا ثابتا", @@ -201,7 +201,7 @@ "gui_all_modes_history": "السجل الزمني", "gui_all_modes_clear_history": "مسح الكل", "gui_share_mode_no_files": "لم ترسل أية ملفات بعد", - "gui_share_mode_timeout_waiting": "في انتظار الانتهاء من الإرسال", + "gui_share_mode_autostop_timer_waiting": "في انتظار الانتهاء من الإرسال", "gui_receive_mode_no_files": "لم تتلق أية ملفات بعد", - "gui_receive_mode_timeout_waiting": "في انتظار الانتهاء من الاستلام" + "gui_receive_mode_autostop_timer_waiting": "في انتظار الانتهاء من الاستلام" } diff --git a/share/locale/bg.json b/share/locale/bg.json index 65d091d1..dc5b3cfa 100644 --- a/share/locale/bg.json +++ b/share/locale/bg.json @@ -10,7 +10,7 @@ "not_a_readable_file": "{0:s) не е четаем файл.", "no_available_port": "Свободен порт не бе намерен, за да може onion услугата да бъде стартирана", "other_page_loaded": "Адресът е зареден", - "close_on_timeout": "Спряно, защото автоматично спиращият таймер приключи", + "close_on_autostop_timer": "Спряно, защото автоматично спиращият таймер приключи", "closing_automatically": "Спряно, защото свалянето приключи", "timeout_download_still_running": "Изчакване на свалянето да приключи", "timeout_upload_still_running": "Изчакване ъплоудът да приключи", @@ -38,12 +38,12 @@ "gui_choose_items": "Изберете", "gui_share_start_server": "Започнете споделянето", "gui_share_stop_server": "Спрете споделянето", - "gui_share_stop_server_shutdown_timeout": "Спрете споделянето ({} остават)", - "gui_share_stop_server_shutdown_timeout_tooltip": "Автоматично спиращият таймерът терминира в {}", + "gui_share_stop_server_autostop_timer": "Спрете споделянето ({} остават)", + "gui_share_stop_server_autostop_timer_tooltip": "Автоматично спиращият таймерът терминира в {}", "gui_receive_start_server": "Стартирайте получаващ режим", "gui_receive_stop_server": "Спрете получаващия режим", - "gui_receive_stop_server_shutdown_timeout": "Спрете получаващия режим ({} остават)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "Автоматично спиращият таймер спира в {}", + "gui_receive_stop_server_autostop_timer": "Спрете получаващия режим ({} остават)", + "gui_receive_stop_server_autostop_timer_tooltip": "Автоматично спиращият таймер спира в {}", "gui_copy_url": "Копирайте адрес", "gui_copy_hidservauth": "Копирайте HidServAuth", "gui_downloads": "Свалете история", @@ -105,8 +105,8 @@ "gui_settings_button_save": "Запазване", "gui_settings_button_cancel": "Отказ", "gui_settings_button_help": "Помощ", - "gui_settings_shutdown_timeout_checkbox": "Използвайте автоматично спиращия таймер", - "gui_settings_shutdown_timeout": "Спри дела на:", + "gui_settings_autostop_timer_checkbox": "Използвайте автоматично спиращия таймер", + "gui_settings_autostop_timer": "Спри дела на:", "settings_error_unknown": "Не мога да се свържа с Тор контролера, защото Вашите настройки не правят смисъл.", "settings_error_automatic": "Не мога да се свържа с Тор контролера. Стартиран ли е Тор браузерът във фонов режим (достъпен от torproject. org)?", "settings_error_socket_port": "Не мога да се свържа с Тор контролера в {}:{}.", @@ -132,8 +132,8 @@ "gui_tor_connection_error_settings": "Опитайте се да промените в настройките как OnionShare се свързва с Тор.", "gui_tor_connection_canceled": "Не може да се установи връзка с Тор.\n\nУверете се, че имате връзка с интернтет, след което отново отворете OnionShare и пренастройте връзката с Тор.", "gui_tor_connection_lost": "Връзката с Тор е прекъсната.", - "gui_server_started_after_timeout": "Автоматично спиращият таймер спря преди сървърът да стартира.\nМоля направете нов дял.", - "gui_server_timeout_expired": "Автоматично спиращият таймер спря.\nМоля актуализирайте за да започнете споделяне.", + "gui_server_started_after_autostop_timer": "Автоматично спиращият таймер спря преди сървърът да стартира.\nМоля направете нов дял.", + "gui_server_autostop_timer_expired": "Автоматично спиращият таймер спря.\nМоля актуализирайте за да започнете споделяне.", "share_via_onionshare": "Споделете го чрез OnionShare", "gui_use_legacy_v2_onions_checkbox": "Използвайте стари адреси", "gui_save_private_key_checkbox": "Използвайте постоянни адреси (стари)", diff --git a/share/locale/bn.json b/share/locale/bn.json index 2ac65d47..590295c3 100644 --- a/share/locale/bn.json +++ b/share/locale/bn.json @@ -10,7 +10,7 @@ "not_a_readable_file": "{0:s} ফাইলটি পড়া যাচ্ছে না।", "no_available_port": "Onion সার্ভিস চালু করার জন্য কোন পোর্ট পাওয়া যাচ্ছে না", "other_page_loaded": "এড্রেস লোড হয়েছে", - "close_on_timeout": "বন্ধ করা হয়েছে কারণ অটো-স্টপ টাইমার এর সময় শেষ", + "close_on_autostop_timer": "বন্ধ করা হয়েছে কারণ অটো-স্টপ টাইমার এর সময় শেষ", "closing_automatically": "ট্রান্সফার শেষ তাই থেমে যাওয়া হলো", "timeout_download_still_running": "", "timeout_upload_still_running": "", @@ -38,12 +38,12 @@ "gui_choose_items": "পছন্দ করুন", "gui_share_start_server": "শেয়ার করা শুরু করো", "gui_share_stop_server": "শেয়ার করা বন্ধ করো", - "gui_share_stop_server_shutdown_timeout": "শেয়ার করা বন্ধ করো ({} সেকেন্ড বাকি)", - "gui_share_stop_server_shutdown_timeout_tooltip": "টাইমার অনুযায়ী অটোমেটিক বন্ধ হবে {}-তে", + "gui_share_stop_server_autostop_timer": "শেয়ার করা বন্ধ করো ({} সেকেন্ড বাকি)", + "gui_share_stop_server_autostop_timer_tooltip": "টাইমার অনুযায়ী অটোমেটিক বন্ধ হবে {}-তে", "gui_receive_start_server": "প্রাপ্ত মোড আরম্ভ করুন", "gui_receive_stop_server": "প্রাপ্ত মোড বন্ধ করুন", - "gui_receive_stop_server_shutdown_timeout": "প্রাপ্ত মোড বন্ধ করুন ({}সে বাকি)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "টাইমার অনুযায়ী অটোমেটিক বন্ধ হবে {}-তে", + "gui_receive_stop_server_autostop_timer": "প্রাপ্ত মোড বন্ধ করুন ({}সে বাকি)", + "gui_receive_stop_server_autostop_timer_tooltip": "টাইমার অনুযায়ী অটোমেটিক বন্ধ হবে {}-তে", "gui_copy_url": "এড্রেস কপি করো", "gui_copy_hidservauth": "HidServAuth কপি করো", "gui_downloads": "", @@ -105,8 +105,8 @@ "gui_settings_button_save": "সেভ", "gui_settings_button_cancel": "বাতিল", "gui_settings_button_help": "সাহায্য", - "gui_settings_shutdown_timeout_checkbox": "কানেকশন বন্ধ করার জন্য অটোমেটিক টাইমার ব্যবহার করো", - "gui_settings_shutdown_timeout": "শেয়ার বন্ধ করুন:", + "gui_settings_autostop_timer_checkbox": "কানেকশন বন্ধ করার জন্য অটোমেটিক টাইমার ব্যবহার করো", + "gui_settings_autostop_timer": "শেয়ার বন্ধ করুন:", "settings_error_unknown": "টর নিয়ন্ত্রকের সাথে সংযোগ করতে পারে না কারণ আপনার বিন্যাসনসমূহ বোধগম্য নয় ।", "settings_error_automatic": "টর নিয়ন্ত্রকের সাথে সংযোগ স্থাপন করা যায়নি । টর ব্রাউজার (torproject.org থেকে পাওয়া যায়) ব্রাকগ্রাউন চলমান?", "settings_error_socket_port": "{}: {} এ টর নিয়ন্ত্রকের সাথে সংযোগ করতে পারছি না ।", @@ -132,8 +132,8 @@ "gui_tor_connection_error_settings": "কিভাবে onionshare সেটিংসে টর নেটওয়ার্ক সংযোগ করে পরিবর্তন করতে চেষ্টা করুন ।", "gui_tor_connection_canceled": "টর-এ সংযোগ করা যায়নি ।\n\nআপনি ইন্টারনেটের সাথে সংযুক্ত আছেন কিনা তা নিশ্চিত করুন, তারপর onionshare পুনরায় খুলুন এবং টর এর সংযোগটি সেট আপ করুন ।", "gui_tor_connection_lost": "টর থেকে বিচ্ছিন্ন ।", - "gui_server_started_after_timeout": "সার্ভার শুরু হওয়ার আগেই অটো স্টপ টাইমার শেষ হয়ে যায় ।\n\nঅনুগ্রহ করে একটি নতুন শেয়ার তৈরি করুন.", - "gui_server_timeout_expired": "অটো-স্টপ টাইমার ইতিমধ্যেই শেষ হয়ে গিয়েছে ।\n\nঅনুগ্রহ করে শেয়ারিং শুরু করতে এটি আপডেট করুন.", + "gui_server_started_after_autostop_timer": "সার্ভার শুরু হওয়ার আগেই অটো স্টপ টাইমার শেষ হয়ে যায় ।\n\nঅনুগ্রহ করে একটি নতুন শেয়ার তৈরি করুন.", + "gui_server_autostop_timer_expired": "অটো-স্টপ টাইমার ইতিমধ্যেই শেষ হয়ে গিয়েছে ।\n\nঅনুগ্রহ করে শেয়ারিং শুরু করতে এটি আপডেট করুন.", "share_via_onionshare": "এটি OnionShare", "gui_use_legacy_v2_onions_checkbox": "লিগ্যাসি ঠিকানাগুলি ব্যবহার করুন", "gui_save_private_key_checkbox": "একটি অবিরাম ঠিকানা ব্যবহার করুন", @@ -210,7 +210,7 @@ "gui_all_modes_progress_starting": "{0:সে}, %p% (গণনা করা হচ্ছে)", "gui_all_modes_progress_eta": "{0:সে}, ইটিএ: {1: সে}, %p%", "gui_share_mode_no_files": "এখনও কোন ফাইল পাঠানো হয়নি", - "gui_share_mode_timeout_waiting": "প্রেরণ শেষ করার জন্য অপেক্ষা করছে", + "gui_share_mode_autostop_timer_waiting": "প্রেরণ শেষ করার জন্য অপেক্ষা করছে", "gui_receive_mode_no_files": "কোন ফাইল এখনও প্রাপ্ত হয়নি", - "gui_receive_mode_timeout_waiting": "প্রাপ্তির শেষ পর্যন্ত অপেক্ষা করছে" + "gui_receive_mode_autostop_timer_waiting": "প্রাপ্তির শেষ পর্যন্ত অপেক্ষা করছে" } diff --git a/share/locale/ca.json b/share/locale/ca.json index 65f12df4..83260905 100644 --- a/share/locale/ca.json +++ b/share/locale/ca.json @@ -10,7 +10,7 @@ "not_a_readable_file": "{0:s} no és un arxiu llegible.", "no_available_port": "No s'ha pogut trobar un port disponible per començar el servei onion", "other_page_loaded": "Adreça carregada", - "close_on_timeout": "S'ha aturat perquè s'ha acabat el temps d'espera", + "close_on_autostop_timer": "S'ha aturat perquè s'ha acabat el temps d'espera", "closing_automatically": "S'ha aturat perquè ha acabat la transferència", "timeout_download_still_running": "S'està esperant que acabi la descàrrega", "large_filesize": "Compte: La transferència d'arxius molt grans podria trigar hores", @@ -37,12 +37,12 @@ "gui_choose_items": "Escull", "gui_share_start_server": "Comparteix", "gui_share_stop_server": "Deixa de compartir", - "gui_share_stop_server_shutdown_timeout": "Deixa de compartir (queden {}s)", - "gui_share_stop_server_shutdown_timeout_tooltip": "El temporitzador acaba a {}", + "gui_share_stop_server_autostop_timer": "Deixa de compartir (queden {}s)", + "gui_share_stop_server_autostop_timer_tooltip": "El temporitzador acaba a {}", "gui_receive_start_server": "Inicia en mode de recepció", "gui_receive_stop_server": "Atura el mode de recepció", - "gui_receive_stop_server_shutdown_timeout": "Atura el mode de recepció (queden {}s)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "El temporitzador acaba a {}", + "gui_receive_stop_server_autostop_timer": "Atura el mode de recepció (queden {}s)", + "gui_receive_stop_server_autostop_timer_tooltip": "El temporitzador acaba a {}", "gui_copy_url": "Copia l'adreça", "gui_copy_hidservauth": "Copia el HidServAuth", "gui_downloads": "Historial de descàrregues", @@ -104,8 +104,8 @@ "gui_settings_button_save": "Desa", "gui_settings_button_cancel": "Canceŀla", "gui_settings_button_help": "Ajuda", - "gui_settings_shutdown_timeout_checkbox": "Posa un temporitzador d'aturada", - "gui_settings_shutdown_timeout": "Atura a:", + "gui_settings_autostop_timer_checkbox": "Posa un temporitzador d'aturada", + "gui_settings_autostop_timer": "Atura a:", "settings_error_unknown": "No s'ha pogut connectar a Tor perquè la configuració és inconsistent.", "settings_error_automatic": "No s'ha pogut connectar al controlador de Tor. Tens el navegador de Tor arrencat? (el pots descarregar a torproject.org)", "settings_error_socket_port": "No s'ha pogut establir la connexió al controlador de Tor a {}:{}.", @@ -131,8 +131,8 @@ "gui_tor_connection_error_settings": "Prova de canviar la configuració de com OnionShare es connecta a la xarxa Tor.", "gui_tor_connection_canceled": "No s'ha pogut establir la connexió amb la xarxa Tor.\n\nAssegura't que tens connexió a internet, torna a obrir OnionShare i prepara la connexió a Tor.", "gui_tor_connection_lost": "S'ha perdut la connexió amb Tor.", - "gui_server_started_after_timeout": "El temporitzador ha acabat abans que s'iniciés el servidor.\nTorna a compartir-ho.", - "gui_server_timeout_expired": "El temporitzador ja s'ha acabat.\nReinicia'l per a poder compartir.", + "gui_server_started_after_autostop_timer": "El temporitzador ha acabat abans que s'iniciés el servidor.\nTorna a compartir-ho.", + "gui_server_autostop_timer_expired": "El temporitzador ja s'ha acabat.\nReinicia'l per a poder compartir.", "share_via_onionshare": "Comparteix-ho amb OnionShare", "gui_use_legacy_v2_onions_checkbox": "Fes servir adreces amb un format antic", "gui_save_private_key_checkbox": "Fes servir una adreça persistent", @@ -211,7 +211,7 @@ "gui_all_modes_progress_starting": "{0:s}, %p% (s'està calculant)", "gui_all_modes_progress_eta": "{0:s}, Temps aproximat: {1:s}, %p%", "gui_share_mode_no_files": "Encara no s'han enviat fitxers", - "gui_share_mode_timeout_waiting": "S'està acabant d'enviar", + "gui_share_mode_autostop_timer_waiting": "S'està acabant d'enviar", "gui_receive_mode_no_files": "Encara no s'ha rebut res", - "gui_receive_mode_timeout_waiting": "S'està acabant de rebre" + "gui_receive_mode_autostop_timer_waiting": "S'està acabant de rebre" } diff --git a/share/locale/cs.json b/share/locale/cs.json index 3eb03198..0b30e162 100644 --- a/share/locale/cs.json +++ b/share/locale/cs.json @@ -74,9 +74,9 @@ "systray_download_canceled_message": "Uživatel přerušil stahování souboru", "systray_upload_started_title": "Začalo nahrávání pomocí OnionShare", "systray_upload_started_message": "Někdo právě začal nahrávat soubory na váš počítač", - "gui_share_stop_server_shutdown_timeout": "Zastavit sdílení ({}s zbývá)", + "gui_share_stop_server_autostop_timer": "Zastavit sdílení ({}s zbývá)", "gui_receive_start_server": "Spustit mód přijímání", "gui_receive_stop_server": "Zastavit přijímání", - "gui_receive_stop_server_shutdown_timeout": "Zastavit mód přijímání ({}s zbývá)", + "gui_receive_stop_server_autostop_timer": "Zastavit mód přijímání ({}s zbývá)", "gui_copied_hidservauth_title": "Zkopírovaný HidServAuth token" } diff --git a/share/locale/da.json b/share/locale/da.json index 50e65951..375e20c8 100644 --- a/share/locale/da.json +++ b/share/locale/da.json @@ -8,7 +8,7 @@ "not_a_readable_file": "{0:s} er ikke en læsbar fil.", "no_available_port": "Kunne ikke finde en tilgængelig port til at starte onion-tjenesten", "other_page_loaded": "Adresse indlæst", - "close_on_timeout": "Stoppede fordi timer med autostop løb ud", + "close_on_autostop_timer": "Stoppede fordi timer med autostop løb ud", "closing_automatically": "Stoppede fordi overførslen er færdig", "timeout_download_still_running": "Venter på at download skal blive færdig", "large_filesize": "Advarsel: Det kan tage timer at sende en stor deling", @@ -83,7 +83,7 @@ "gui_settings_button_save": "Gem", "gui_settings_button_cancel": "Annuller", "gui_settings_button_help": "Hjælp", - "gui_settings_shutdown_timeout": "Stop delingen ved:", + "gui_settings_autostop_timer": "Stop delingen ved:", "settings_saved": "Indstillinger gemt til {}", "settings_error_unknown": "Kan ikke oprette forbindelse til Tor-kontroller da dine indstillingerne ikke giver mening.", "settings_error_automatic": "Kunne ikke oprette forbindelse til Tor-kontrolleren. Kører Tor Browser (tilgængelige fra torproject.org) i baggrunden?", @@ -108,8 +108,8 @@ "gui_tor_connection_error_settings": "Prøv at ændre måden hvorpå OnionShare opretter forbindelse til Tor-netværket, i indstillingerne.", "gui_tor_connection_canceled": "Kunne ikke oprette forbindelse til Tor.\n\nSørg for at du har forbindelse til internettet, og åbn herefter OnionShare igen for at opsætte dens forbindelse til Tor.", "gui_tor_connection_lost": "Der er ikke oprettet forbindelse til Tor.", - "gui_server_started_after_timeout": "Timeren med autostop løb ud inden serveren startede.\nOpret venligst en ny deling.", - "gui_server_timeout_expired": "Timeren med autostop er allerede løbet ud.\nOpdater den venligst for at starte deling.", + "gui_server_started_after_autostop_timer": "Timeren med autostop løb ud inden serveren startede.\nOpret venligst en ny deling.", + "gui_server_autostop_timer_expired": "Timeren med autostop er allerede løbet ud.\nOpdater den venligst for at starte deling.", "share_via_onionshare": "Del via OnionShare", "gui_save_private_key_checkbox": "Brug en vedvarende adresse", "gui_copied_url_title": "Kopierede OnionShare-adresse", @@ -117,7 +117,7 @@ "gui_quit_title": "Klap lige hesten", "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Brug indbyggede meek_lite (Azure) udskiftelige transporter", "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Brug indbyggede meek_lite (Azure) udskiftelige transporter (kræver obfs4proxy)", - "gui_settings_shutdown_timeout_checkbox": "Brug timer med autostop", + "gui_settings_autostop_timer_checkbox": "Brug timer med autostop", "gui_url_label_persistent": "Delingen stopper ikke automatisk.

Hver efterfølgende deling bruger den samme adresse igen (hvis du vil bruge engangsadresser, så deaktivér \"Brug vedvarende adresse\", i indstillingerne).", "gui_url_label_stay_open": "Delingen stopper ikke automatisk.", "gui_url_label_onetime": "Delingen stopper efter den første download.", @@ -131,17 +131,17 @@ "systray_upload_started_title": "OnionShare-upload begyndte", "systray_upload_started_message": "En bruger begyndte at uploade filer til din computer", "help_receive": "Modtager aktier i stedet for at sende dem", - "gui_share_stop_server_shutdown_timeout": "Stop deling ({}s tilbage)", + "gui_share_stop_server_autostop_timer": "Stop deling ({}s tilbage)", "gui_receive_quit_warning": "Du er i færd med at modtage filer. Er du sikker på du ønsker at stoppe med at OnionShare?", "gui_settings_whats_this": "Hvad er det?", "gui_settings_general_label": "Generel opsætning", "gui_upload_in_progress": "Upload begyndte {}", "gui_download_in_progress": "Download begyndte {}", - "gui_share_stop_server_shutdown_timeout_tooltip": "Timer med autostop slutter ved {}", + "gui_share_stop_server_autostop_timer_tooltip": "Timer med autostop slutter ved {}", "gui_receive_start_server": "Start modtagetilstand", "gui_receive_stop_server": "Stop modtagetilstand", - "gui_receive_stop_server_shutdown_timeout": "Stop modtagetilstand ({}s tilbage)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "Timer med autostop slutter ved {}", + "gui_receive_stop_server_autostop_timer": "Stop modtagetilstand ({}s tilbage)", + "gui_receive_stop_server_autostop_timer_tooltip": "Timer med autostop slutter ved {}", "gui_no_downloads": "Ingen downloads endnu", "error_tor_protocol_error_unknown": "Der opstod en ukendt fejl med Tor", "error_invalid_private_key": "Den private nøgletype understøttes ikke", @@ -211,9 +211,9 @@ "gui_all_modes_progress_starting": "{0:s}, %p% (udregner)", "gui_all_modes_progress_eta": "{0:s}, anslået ankomsttidspunkt: {1:s}, %p%", "gui_share_mode_no_files": "Der er endnu ikke sendt nogen filer", - "gui_share_mode_timeout_waiting": "Venter på at blive færdig med at sende", + "gui_share_mode_autostop_timer_waiting": "Venter på at blive færdig med at sende", "gui_receive_mode_no_files": "Der er endnu ikke modtaget nogen filer", - "gui_receive_mode_timeout_waiting": "Venter på at blive færdig med at modtage", + "gui_receive_mode_autostop_timer_waiting": "Venter på at blive færdig med at modtage", "gui_all_modes_transfer_canceled_range": "Annullerede {} - {}", "gui_all_modes_transfer_canceled": "Annullerede {}", "gui_settings_onion_label": "Onion-indstillinger" diff --git a/share/locale/de.json b/share/locale/de.json index dbc00898..88f85065 100644 --- a/share/locale/de.json +++ b/share/locale/de.json @@ -27,7 +27,7 @@ "gui_settings_button_save": "Speichern", "gui_settings_button_cancel": "Abbrechen", "gui_settings_button_help": "Hilfe", - "gui_settings_shutdown_timeout": "Stoppe den Server bei:", + "gui_settings_autostop_timer": "Stoppe den Server bei:", "systray_download_started_title": "OnionShare Download begonnen", "systray_download_started_message": "Ein Nutzer hat begonnen, deine Dateien herunterzuladen", "systray_download_completed_title": "OnionShare Download beendet", @@ -50,13 +50,13 @@ "give_this_url_receive_stealth": "Gib diese URL und die HidServAuth-Zeile an den Sender:", "not_a_readable_file": "{0:s} kann nicht gelesen werden.", "no_available_port": "Es konnte kein freier Port gefunden werden, um den Onionservice zu starten", - "close_on_timeout": "Angehalten da der auto-stop Timer abgelaufen ist", + "close_on_autostop_timer": "Angehalten da der auto-stop Timer abgelaufen ist", "systray_upload_started_title": "OnionShare Upload wurde gestartet", "systray_upload_started_message": "Ein Benutzer hat begonnen, Dateien auf deinen Computer hochzuladen", "help_autostop_timer": "Den Server nach einer bestimmten Zeit anhalten (in Sekunden)", "help_receive": "Empfange Dateien anstatt sie zu senden", - "gui_share_stop_server_shutdown_timeout": "Server stoppen (läuft noch {} Sekunden)", - "gui_share_stop_server_shutdown_timeout_tooltip": "Zeit läuft in {} Sekunden ab", + "gui_share_stop_server_autostop_timer": "Server stoppen (läuft noch {} Sekunden)", + "gui_share_stop_server_autostop_timer_tooltip": "Zeit läuft in {} Sekunden ab", "gui_settings_connection_type_control_port_option": "Verbinde über den control port", "gui_settings_connection_type_socket_file_option": "Verbinde über ein socket file", "gui_settings_control_port_label": "Control port", @@ -70,7 +70,7 @@ "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Benutze eingebaute meek_lite (Azure) pluggable transports (benötigt obfs4proxy)", "gui_settings_tor_bridges_custom_radio_option": "Benutze benutzerdefinierte bridges", "gui_settings_tor_bridges_custom_label": "Bridges findest du unter https://bridges.torproject.org", - "gui_settings_shutdown_timeout_checkbox": "Stoppe nach einer bestimmten Zeit", + "gui_settings_autostop_timer_checkbox": "Stoppe nach einer bestimmten Zeit", "settings_error_auth": "Mit {}:{} verbinden aber nicht authentifiziert. Eventuell handelt es sich nicht um einen Tor controller?", "settings_error_missing_password": "Mit dem Tor controller verbunden, aber er benötigt ein Passwort zur Authentifizierung.", "connecting_to_tor": "Verbinde mit dem Tornetzwerk", @@ -79,8 +79,8 @@ "help_stealth": "Nutze Klientauthorisierung (fortgeschritten)", "gui_receive_start_server": "Starte den Empfangsmodus", "gui_receive_stop_server": "Stoppe den Empfangsmodus", - "gui_receive_stop_server_shutdown_timeout": "Stoppe den Empfängermodus (stoppt automatisch in {} Sekunden)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "Zeit läuft in {} ab", + "gui_receive_stop_server_autostop_timer": "Stoppe den Empfängermodus (stoppt automatisch in {} Sekunden)", + "gui_receive_stop_server_autostop_timer_tooltip": "Zeit läuft in {} ab", "gui_no_downloads": "Bisher keine Downloads", "gui_copied_url_title": "OnionShare-Adresse kopiert", "gui_copied_hidservauth": "HidServAuth-Zeile in die Zwischenablage kopiert", @@ -174,8 +174,8 @@ "gui_settings_stealth_hidservauth_string": "Da dein privater Schlüssel jetzt gespeichert wurde um ihn später erneut zu nutzen, kannst du jetzt\nklicken um deinen HidServAuth zu kopieren.", "gui_settings_connection_type_bundled_option": "Die integrierte Tor version von OnionShare nutzen", "settings_error_socket_file": "Kann nicht mittels des Tor Controller Socket {} verbinden.", - "gui_server_started_after_timeout": "Die Zeit ist abgelaufen bevor der Server gestartet werden konnte.\nBitte erneut etwas teilen.", - "gui_server_timeout_expired": "Der Timer ist bereits abgelaufen.\nBearbeite diesen um das Teilen zu starten.", + "gui_server_started_after_autostop_timer": "Die Zeit ist abgelaufen bevor der Server gestartet werden konnte.\nBitte erneut etwas teilen.", + "gui_server_autostop_timer_expired": "Der Timer ist bereits abgelaufen.\nBearbeite diesen um das Teilen zu starten.", "gui_status_indicator_share_stopped": "Bereit zum teilen", "history_in_progress_tooltip": "{} läuft", "receive_mode_upload_starting": "Hochladen von insgesamt {} beginnt", @@ -209,9 +209,9 @@ "gui_all_modes_transfer_canceled": "{} abgebrochen", "gui_all_modes_progress_starting": "{0:s}, %p% (berechne)", "gui_share_mode_no_files": "Bisher keine Dateien versendet", - "gui_share_mode_timeout_waiting": "Warte auf Abschluss der Sendung", + "gui_share_mode_autostop_timer_waiting": "Warte auf Abschluss der Sendung", "gui_receive_mode_no_files": "Bisher keine Dateien empfangen", - "gui_receive_mode_timeout_waiting": "Warte auf Abschluss des Empfangs", + "gui_receive_mode_autostop_timer_waiting": "Warte auf Abschluss des Empfangs", "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", "gui_all_modes_progress_complete": "%p%, {0:s} vergangen." } diff --git a/share/locale/el.json b/share/locale/el.json index e4e60b26..0c517d4a 100644 --- a/share/locale/el.json +++ b/share/locale/el.json @@ -10,7 +10,7 @@ "not_a_readable_file": "Το {0:s} δεν είναι αναγνώσιμο αρχείο.", "no_available_port": "Δεν βρέθηκε διαθέσιμη θύρα για να ξεκινήσει η υπηρεσία onion", "other_page_loaded": "Η διεύθυνση φορτώθηκε", - "close_on_timeout": "Τερματίστηκε γιατί το χρονόμετρο τερματισμού έφτασε στο τέλος", + "close_on_autostop_timer": "Τερματίστηκε γιατί το χρονόμετρο τερματισμού έφτασε στο τέλος", "closing_automatically": "Τερματίστηκε επειδή η λήψη ολοκληρώθηκε", "timeout_download_still_running": "Αναμονή ολοκλήρωσης της λήψης", "large_filesize": "Προειδοποίηση: Η αποστολή μεγάλου όγκου δεδομένων μπορεί να διαρκέσει ώρες", @@ -37,12 +37,12 @@ "gui_choose_items": "Επιλογή", "gui_share_start_server": "Εκκίνηση μοιράσματος", "gui_share_stop_server": "Τερματισμός μοιράσματος", - "gui_share_stop_server_shutdown_timeout": "Τερματισμός μοιράσματος (απομένουν {}\")", - "gui_share_stop_server_shutdown_timeout_tooltip": "Το χρονόμετρο αυτόματου τερματισμού τελειώνει σε {}", + "gui_share_stop_server_autostop_timer": "Τερματισμός μοιράσματος (απομένουν {}\")", + "gui_share_stop_server_autostop_timer_tooltip": "Το χρονόμετρο αυτόματου τερματισμού τελειώνει σε {}", "gui_receive_start_server": "Εκκίνηση κατάστασης λήψης", "gui_receive_stop_server": "Τερματισμός κατάστασης λήψης", - "gui_receive_stop_server_shutdown_timeout": "Τερματισμός κατάστασης λήψης (υπολοίπονται {}\")", - "gui_receive_stop_server_shutdown_timeout_tooltip": "Το χρονόμετρο αυτόματου τερματισμού τελειώνει σε {}", + "gui_receive_stop_server_autostop_timer": "Τερματισμός κατάστασης λήψης (υπολοίπονται {}\")", + "gui_receive_stop_server_autostop_timer_tooltip": "Το χρονόμετρο αυτόματου τερματισμού τελειώνει σε {}", "gui_copy_url": "Αντιγραφή διεύθυνσης", "gui_copy_hidservauth": "Αντιγραφή HidServAuth", "gui_downloads": "Ιστορικό Λήψεων", @@ -104,8 +104,8 @@ "gui_settings_button_save": "Αποθήκευση", "gui_settings_button_cancel": "Ακύρωση", "gui_settings_button_help": "Βοήθεια", - "gui_settings_shutdown_timeout_checkbox": "Χρήση χρονομέτρου αυτόματου τερματισμού", - "gui_settings_shutdown_timeout": "Τερματισμός της κοινοποίησης στα:", + "gui_settings_autostop_timer_checkbox": "Χρήση χρονομέτρου αυτόματου τερματισμού", + "gui_settings_autostop_timer": "Τερματισμός της κοινοποίησης στα:", "settings_error_unknown": "Αδύνατη η σύνδεση του ελέγχου Tor, καθώς οι ρυθμίσεις σας δεν έχουν κανένα νόημα.", "settings_error_automatic": "Είναι αδύνατη η σύνδεση στον έλεγχο του Tor. Λειτουργεί ο Tor Browser (διαθέσιμος στο torproject.org) στο παρασκήνιο?", "settings_error_socket_port": "Αδύνατη η σύνδεση στον έλεγχο Tor στις {}:{}.", @@ -131,8 +131,8 @@ "gui_tor_connection_error_settings": "Προσπαθήστε να αλλάξετε τον τρόπο σύνδεσης του OnionShare, με το δίκτυο Tor, από τις ρυθμίσεις.", "gui_tor_connection_canceled": "Δεν μπόρεσε να γίνει σύνδεση με Tor.\n\nΕλέγξτε ότι είστε συνδεδεμένοι στο Διαδίκτυο, επανεκινήστε το OnionShare και ρυθμίστε την σύνδεση με το Tor.", "gui_tor_connection_lost": "Εγινε αποσύνδεση απο το Tor.", - "gui_server_started_after_timeout": "Η λειτουργία auto-stop τερματίστηκε πριν την εκκίνηση διακομιστή.\nΠαρακαλώ κάντε εναν νέο διαμοιρασμό.", - "gui_server_timeout_expired": "Η λειτουργία auto-stop ήδη τερματίστηκε.\nΕνημερώστε την για να ξεκινήσετε τον διαμοιρασμό.", + "gui_server_started_after_autostop_timer": "Η λειτουργία auto-stop τερματίστηκε πριν την εκκίνηση διακομιστή.\nΠαρακαλώ κάντε εναν νέο διαμοιρασμό.", + "gui_server_autostop_timer_expired": "Η λειτουργία auto-stop ήδη τερματίστηκε.\nΕνημερώστε την για να ξεκινήσετε τον διαμοιρασμό.", "share_via_onionshare": "Κάντε το OnionShare", "gui_use_legacy_v2_onions_checkbox": "Χρηση \"παραδοσιακών\" διευθύνσεων", "gui_save_private_key_checkbox": "Χρήση μόνιμης διεύθυνσης", @@ -208,9 +208,9 @@ "gui_all_modes_progress_starting": "{0:s}, %p% (γίνεται υπολογισμός)", "gui_all_modes_progress_eta": "{0:s}, εκτίμηση: {1:s}, %p%", "gui_share_mode_no_files": "Δεν Στάλθηκαν Αρχεία Ακόμα", - "gui_share_mode_timeout_waiting": "Αναμένοντας την ολοκλήρωση αποστολής", + "gui_share_mode_autostop_timer_waiting": "Αναμένοντας την ολοκλήρωση αποστολής", "gui_receive_mode_no_files": "Δεν Εγινε Καμμία Λήψη Αρχείων Ακόμα", - "gui_receive_mode_timeout_waiting": "Αναμένοντας την ολοκλήρωση της λήψης", + "gui_receive_mode_autostop_timer_waiting": "Αναμένοντας την ολοκλήρωση της λήψης", "gui_settings_onion_label": "Ρυθμίσεις Onion", "gui_all_modes_transfer_canceled_range": "Ακυρώθηκε {} - {}", "gui_all_modes_transfer_canceled": "Ακυρώθηκε {}" diff --git a/share/locale/en.json b/share/locale/en.json index 973028c8..1dad3c36 100644 --- a/share/locale/en.json +++ b/share/locale/en.json @@ -15,7 +15,7 @@ "not_a_readable_file": "{0:s} is not a readable file.", "no_available_port": "Could not find an available port to start the onion service", "other_page_loaded": "Address loaded", - "close_on_timeout": "Stopped because auto-stop timer ran out", + "close_on_autostop_timer": "Stopped because auto-stop timer ran out", "closing_automatically": "Stopped because transfer is complete", "large_filesize": "Warning: Sending a large share could take hours", "help_local_only": "Don't use Tor (only for development)", @@ -36,12 +36,12 @@ "gui_choose_items": "Choose", "gui_share_start_server": "Start sharing", "gui_share_stop_server": "Stop sharing", - "gui_share_stop_server_shutdown_timeout": "Stop Sharing ({})", - "gui_stop_server_shutdown_timeout_tooltip": "Auto-stop timer ends at {}", + "gui_share_stop_server_autostop_timer": "Stop Sharing ({})", + "gui_stop_server_autostop_timer_tooltip": "Auto-stop timer ends at {}", "gui_start_server_startup_timer_tooltip": "Auto-start timer ends at {}", "gui_receive_start_server": "Start Receive Mode", "gui_receive_stop_server": "Stop Receive Mode", - "gui_receive_stop_server_shutdown_timeout": "Stop Receive Mode ({}s remaining)", + "gui_receive_stop_server_autostop_timer": "Stop Receive Mode ({}s remaining)", "gui_copy_url": "Copy Address", "gui_copy_hidservauth": "Copy HidServAuth", "gui_canceled": "Canceled", @@ -100,8 +100,8 @@ "gui_settings_button_save": "Save", "gui_settings_button_cancel": "Cancel", "gui_settings_button_help": "Help", - "gui_settings_shutdown_timeout_checkbox": "Use auto-stop timer", - "gui_settings_shutdown_timeout": "Stop the share at:", + "gui_settings_autostop_timer_checkbox": "Use auto-stop timer", + "gui_settings_autostop_timer": "Stop the share at:", "gui_settings_startup_timer_checkbox": "Use auto-start timer", "gui_settings_startup_timer": "Start the share at:", "settings_error_unknown": "Can't connect to Tor controller because your settings don't make sense.", @@ -129,10 +129,10 @@ "gui_tor_connection_error_settings": "Try changing how OnionShare connects to the Tor network in the settings.", "gui_tor_connection_canceled": "Could not connect to Tor.\n\nEnsure you are connected to the Internet, then re-open OnionShare and set up its connection to Tor.", "gui_tor_connection_lost": "Disconnected from Tor.", - "gui_server_started_after_timeout": "The auto-stop timer ran out before the server started. Please make a new share.", - "gui_server_timeout_expired": "The auto-stop timer already ran out. Please update it to start sharing.", + "gui_server_started_after_autostop_timer": "The auto-stop timer ran out before the server started. Please make a new share.", + "gui_server_autostop_timer_expired": "The auto-stop timer already ran out. Please update it to start sharing.", "gui_server_startup_timer_expired": "The scheduled time has already passed. Please update it to start sharing.", - "gui_timeout_cant_be_earlier_than_startup": "The auto-stop time can't be the same or earlier than the start-up time. Please update it to start sharing.", + "gui_autostop_timer_cant_be_earlier_than_startup": "The auto-stop time can't be the same or earlier than the start-up time. Please update it to start sharing.", "share_via_onionshare": "OnionShare it", "gui_connect_to_tor_for_onion_settings": "Connect to Tor to see onion service settings", "gui_use_legacy_v2_onions_checkbox": "Use legacy addresses", @@ -192,9 +192,9 @@ "gui_all_modes_progress_starting": "{0:s}, %p% (calculating)", "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", "gui_share_mode_no_files": "No Files Sent Yet", - "gui_share_mode_timeout_waiting": "Waiting to finish sending", + "gui_share_mode_autostop_timer_waiting": "Waiting to finish sending", "gui_receive_mode_no_files": "No Files Received Yet", - "gui_receive_mode_timeout_waiting": "Waiting to finish receiving", + "gui_receive_mode_autostop_timer_waiting": "Waiting to finish receiving", "waiting_for_scheduled_time": "Waiting for the scheduled time before starting...", "days_first_letter": "d", "hours_first_letter": "h", diff --git a/share/locale/es.json b/share/locale/es.json index 4bb5b839..18426a20 100644 --- a/share/locale/es.json +++ b/share/locale/es.json @@ -21,7 +21,7 @@ "config_onion_service": "Configurando el servicio cebolla en el puerto {0:d}.", "give_this_url_stealth": "Dale esta dirección y la línea de HidServAuth a la persona a la que le estás enviando el archivo:", "no_available_port": "No se pudo iniciar el servicio cebolla porque no había puerto disponible", - "close_on_timeout": "Parado porque el temporizador expiró", + "close_on_autostop_timer": "Parado porque el temporizador expiró", "timeout_download_still_running": "Esperando a que se complete la descarga", "large_filesize": "Advertencia: Enviar un archivo tan grande podría llevar horas", "help_autostop_timer": "Dejar de compartir después de una determinada cantidad de segundos", @@ -60,12 +60,12 @@ "systray_upload_started_title": "Subida OnionShare Iniciada", "systray_upload_started_message": "Un usuario comenzó a subir archivos a tu computadora", "help_receive": "Recibir recursos compartidos en lugar de enviarlos", - "gui_share_stop_server_shutdown_timeout": "Dejar de Compartir ({}s restantes)", - "gui_share_stop_server_shutdown_timeout_tooltip": "El temporizador de parada automática termina en {}", + "gui_share_stop_server_autostop_timer": "Dejar de Compartir ({}s restantes)", + "gui_share_stop_server_autostop_timer_tooltip": "El temporizador de parada automática termina en {}", "gui_receive_start_server": "Iniciar el modo de recepción", "gui_receive_stop_server": "Detener el modo de recepción", - "gui_receive_stop_server_shutdown_timeout": "Detener el modo de recepción ({}s restantes)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "El temporizador de parada automática termina en {}", + "gui_receive_stop_server_autostop_timer": "Detener el modo de recepción ({}s restantes)", + "gui_receive_stop_server_autostop_timer_tooltip": "El temporizador de parada automática termina en {}", "gui_copy_hidservauth": "Copiar HidServAuth", "gui_no_downloads": "Ninguna Descarga Todavía", "gui_canceled": "Cancelado", @@ -95,8 +95,8 @@ "gui_tor_connection_error_settings": "Intenta cambiando la forma en que OnionShare se conecta a la red Tor en tu configuración.", "gui_tor_connection_canceled": "No se pudo conectar con Tor.\n\nAsegúrate de estar conectado a Internet, luego vuelve a abrir OnionShare y configurar tu conexión a Tor.", "gui_tor_connection_lost": "Desconectado de Tor.", - "gui_server_started_after_timeout": "El temporizador de parada automática se agotó antes de que se iniciara el servidor.\nPor favor crea una nueva conexión compartida.", - "gui_server_timeout_expired": "El temporizador de parada automática ya se ha agotado.\nPor favor, actualízalo para comenzar a compartir.", + "gui_server_started_after_autostop_timer": "El temporizador de parada automática se agotó antes de que se iniciara el servidor.\nPor favor crea una nueva conexión compartida.", + "gui_server_autostop_timer_expired": "El temporizador de parada automática ya se ha agotado.\nPor favor, actualízalo para comenzar a compartir.", "share_via_onionshare": "Compártelo con OnionShare", "gui_use_legacy_v2_onions_checkbox": "Usar direcciones antiguas", "gui_save_private_key_checkbox": "Usar una dirección persistente", @@ -155,8 +155,8 @@ "gui_settings_button_save": "Guardar", "gui_settings_button_cancel": "Cancelar", "gui_settings_button_help": "Ayuda", - "gui_settings_shutdown_timeout_checkbox": "Usar temporizador de parada automática", - "gui_settings_shutdown_timeout": "Detener carpeta compartida en:", + "gui_settings_autostop_timer_checkbox": "Usar temporizador de parada automática", + "gui_settings_autostop_timer": "Detener carpeta compartida en:", "history_in_progress_tooltip": "{} en progreso", "history_completed_tooltip": "{} completado", "error_cannot_create_downloads_dir": "No se ha podido crear la carpeta en modo de recepción: {}", @@ -212,9 +212,9 @@ "gui_all_modes_progress_starting": "{0:s}, %p% (calculando)", "gui_all_modes_progress_eta": "{0:s}, TEA: {1:s}, %p%", "gui_share_mode_no_files": "No se enviaron archivos todavía", - "gui_share_mode_timeout_waiting": "Esperando a que termine el envío", + "gui_share_mode_autostop_timer_waiting": "Esperando a que termine el envío", "gui_receive_mode_no_files": "No se recibieron archivos todavía", - "gui_receive_mode_timeout_waiting": "Esperando a que termine la recepción", + "gui_receive_mode_autostop_timer_waiting": "Esperando a que termine la recepción", "gui_all_modes_transfer_canceled_range": "Cancelado {} - {}", "gui_all_modes_transfer_canceled": "Cancelado {}", "gui_settings_onion_label": "Configuración de Onion" diff --git a/share/locale/fa.json b/share/locale/fa.json index 302bc067..5f389610 100644 --- a/share/locale/fa.json +++ b/share/locale/fa.json @@ -10,7 +10,7 @@ "not_a_readable_file": "{0:s} قابل خواندن نمی باشد.", "no_available_port": "پورت قابل استفاده برای شروع سرویس onion پیدا نشد", "other_page_loaded": "آدرس بارگذاری شد", - "close_on_timeout": "متوقف شد چون تایمر توقف خودکار به پایان رسید", + "close_on_autostop_timer": "متوقف شد چون تایمر توقف خودکار به پایان رسید", "closing_automatically": "متوقف شد چون انتقال انجام شد", "timeout_download_still_running": "انتظار برای تکمیل دانلود", "large_filesize": "هشدار: یک اشتراک گذاری بزرگ ممکن است ساعت ها طول بکشد", @@ -37,12 +37,12 @@ "gui_choose_items": "انتخاب", "gui_share_start_server": "شروع اشتراک گذاری", "gui_share_stop_server": "توقف اشتراک گذاری", - "gui_share_stop_server_shutdown_timeout": "توقف اشتراک گذاری ({} ثانیه باقیمانده)", - "gui_share_stop_server_shutdown_timeout_tooltip": "تایمر توقف خودکار در {} متوقف می شود", + "gui_share_stop_server_autostop_timer": "توقف اشتراک گذاری ({} ثانیه باقیمانده)", + "gui_share_stop_server_autostop_timer_tooltip": "تایمر توقف خودکار در {} متوقف می شود", "gui_receive_start_server": "شروع حالت دریافت", "gui_receive_stop_server": "توقف حالت دریافت", - "gui_receive_stop_server_shutdown_timeout": "توقف حالت دریافت ({} ثانیه باقیمانده)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "تایمر توقف خودکار در {} به پایان می رسد", + "gui_receive_stop_server_autostop_timer": "توقف حالت دریافت ({} ثانیه باقیمانده)", + "gui_receive_stop_server_autostop_timer_tooltip": "تایمر توقف خودکار در {} به پایان می رسد", "gui_copy_url": "کپی آدرس", "gui_copy_hidservauth": "کپی HidServAuth", "gui_downloads": "دانلود تاریخچه", @@ -104,8 +104,8 @@ "gui_settings_button_save": "ذخیره", "gui_settings_button_cancel": "لغو", "gui_settings_button_help": "راهنما", - "gui_settings_shutdown_timeout_checkbox": "استفاده از تایمر توقف خودکار", - "gui_settings_shutdown_timeout": "توقف اشتراک در:", + "gui_settings_autostop_timer_checkbox": "استفاده از تایمر توقف خودکار", + "gui_settings_autostop_timer": "توقف اشتراک در:", "settings_error_unknown": "ناتوانی در اتصال به کنترل کننده Tor بدلیل نامفهوم بودن تنظیمات.", "settings_error_automatic": "ناتوانی در اتصال به کنترل کننده Tor. آیا مرورگر Tor (در دسترس از طریق torproject.org) در پس زمینه در حال اجراست؟", "settings_error_socket_port": "ناتوانی در اتصال به کنترل کننده Tor در {}:{}.", @@ -131,8 +131,8 @@ "gui_tor_connection_error_settings": "تغییر نحوه اتصال OnionShare به شبکه Tor در تنظیمات.", "gui_tor_connection_canceled": "اتصال به Tor برقرار نشد.\n\nمطمئن شوید که به اینترنت متصل هستید، سپس OnionShare را دوباره باز کرده و اتصال آن را به Tor دوباره برقرار کنید.", "gui_tor_connection_lost": "اتصال با Tor قطع شده است.", - "gui_server_started_after_timeout": "تایمر توقف خودکار قبل از آغاز سرور به پایان رسید.\nلطفا یک اشتراک جدید درست کنید.", - "gui_server_timeout_expired": "تایمر توقف خودکار به پایان رسید.\nلطفا برای آغاز اشتراک گذاری آن را به روز رسانی کنید.", + "gui_server_started_after_autostop_timer": "تایمر توقف خودکار قبل از آغاز سرور به پایان رسید.\nلطفا یک اشتراک جدید درست کنید.", + "gui_server_autostop_timer_expired": "تایمر توقف خودکار به پایان رسید.\nلطفا برای آغاز اشتراک گذاری آن را به روز رسانی کنید.", "share_via_onionshare": "OnionShare کنید", "gui_use_legacy_v2_onions_checkbox": "استفاده از آدرس های بازمانده", "gui_save_private_key_checkbox": "استفاده از یک آدرس پایا", @@ -208,9 +208,9 @@ "gui_all_modes_progress_starting": "{0:s}, %p% (در حال محاسبه)", "gui_all_modes_progress_eta": "{0:s}، تخمین: {1:s}, %p%", "gui_share_mode_no_files": "هیچ فایلی هنوز ارسال نشده است", - "gui_share_mode_timeout_waiting": "انتظار برای به پایان رسیدن ارسال", + "gui_share_mode_autostop_timer_waiting": "انتظار برای به پایان رسیدن ارسال", "gui_receive_mode_no_files": "هیچ فایلی هنوز دریافت نشده است", - "gui_receive_mode_timeout_waiting": "انتظار برای به پایان رسیدن دریافت", + "gui_receive_mode_autostop_timer_waiting": "انتظار برای به پایان رسیدن دریافت", "gui_all_modes_transfer_canceled_range": "{} - {} لغو شد", "gui_all_modes_transfer_canceled": "{} لغو شد" } diff --git a/share/locale/fi.json b/share/locale/fi.json index ce2a7eb1..5965d78a 100644 --- a/share/locale/fi.json +++ b/share/locale/fi.json @@ -28,19 +28,19 @@ "give_this_url_receive_stealth": "Anna tämä osoite ja HidServAuth lähettäjälle:", "not_a_readable_file": "{0:s} ei ole luettava tiedosto.", "no_available_port": "Vapaata porttia onion palvelulle ei löydetty", - "close_on_timeout": "Pysäytetty koska auto-stop ajastin loppui", - "help_shutdown_timeout": "Lopeta jakaminen annetun sekunnin kuluttua", + "close_on_autostop_timer": "Pysäytetty koska auto-stop ajastin loppui", + "help_autostop_timer": "Lopeta jakaminen annetun sekunnin kuluttua", "help_stealth": "Käytä asiakasvaltuutusta (edistynyt)", "help_receive": "Vastaanota osia niiden lähettämisen sijaan", "help_config": "Mukautettu JSON-määritystiedoston sijainti (valinnainen)", "gui_add_files": "Lisää tiedostoja", "gui_add_folder": "Lisää kansio", - "gui_share_stop_server_shutdown_timeout": "Lopeta jakaminen({}s jäljellä)", - "gui_share_stop_server_shutdown_timeout_tooltip": "Auto-stop ajastin loppuu {} jälkeen", + "gui_share_stop_server_autostop_timer": "Lopeta jakaminen({}s jäljellä)", + "gui_share_stop_server_autostop_timer_tooltip": "Auto-stop ajastin loppuu {} jälkeen", "gui_receive_start_server": "Aloita vastaanotto tila", "gui_receive_stop_server": "Lopeta vastaanotto tila", - "gui_receive_stop_server_shutdown_timeout": "Lopeta vastaanotto tila ({}s jäljellä)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "Auto-stop ajastin loppuu kello {}", + "gui_receive_stop_server_autostop_timer": "Lopeta vastaanotto tila ({}s jäljellä)", + "gui_receive_stop_server_autostop_timer_tooltip": "Auto-stop ajastin loppuu kello {}", "gui_copy_hidservauth": "Kopioi HidServAuth", "gui_copied_url_title": "Kopioi OnionShare osoite", "gui_copied_hidservauth_title": "HidServAuth kopioitu", @@ -93,8 +93,8 @@ "gui_settings_button_save": "Tallenna", "gui_settings_button_cancel": "Peruuttaa", "gui_settings_button_help": "Apua", - "gui_settings_shutdown_timeout_checkbox": "Käytä auto-stop ajastinta", - "gui_settings_shutdown_timeout": "Lopeta jakaminen kello:", + "gui_settings_autostop_timer_checkbox": "Käytä auto-stop ajastinta", + "gui_settings_autostop_timer": "Lopeta jakaminen kello:", "settings_error_unknown": "Ei voi muodostaa yhteyttä Tor-ohjaimeen, koska asetuksesi eivät ole järkeviä.", "settings_error_automatic": "Tor-ohjaimeen ei voitu muodostaa yhteyttä. Onko Tor Browser (saatavilla osoitteesta torproject.org) avoimena taustalla?", "settings_error_socket_port": "Ei voi muodostaa yhteyttä Tor-ohjaimeen: {}:{}.", @@ -120,8 +120,8 @@ "gui_tor_connection_error_settings": "Yritä muuttaa miten OnionShare yhdistää Tor-verkkoon asetuksista.", "gui_tor_connection_canceled": "Tor-yhteyden muodostus epäonnistui.\n\nVarmista että sinulla on toimiva internet yhteys, jonka jälkeen uudelleen avaa OnionShare ja sen Tor-yhteys.", "gui_tor_connection_lost": "Tor-yhteys katkaistu.", - "gui_server_started_after_timeout": "Auto-stop ajastin loppui ennen palvelimen käynnistymistä.\nLuo uusi jako.", - "gui_server_timeout_expired": "Auto-stop ajastin loppui jo.\nPäivitä se jaon aloittamiseksi.", + "gui_server_started_after_autostop_timer": "Auto-stop ajastin loppui ennen palvelimen käynnistymistä.\nLuo uusi jako.", + "gui_server_autostop_timer_expired": "Auto-stop ajastin loppui jo.\nPäivitä se jaon aloittamiseksi.", "share_via_onionshare": "OnionShare se", "gui_connect_to_tor_for_onion_settings": "Yhdistä Tor-verkkoon nähdäksesi onion palvelun asetukset", "gui_use_legacy_v2_onions_checkbox": "Käytä vanhoja osoitteita", @@ -179,7 +179,7 @@ "gui_all_modes_progress_starting": "{0:s}, %p% (lasketaan)", "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", "gui_share_mode_no_files": "Yhtäkään tiedostoa ei ole lähetetty vielä", - "gui_share_mode_timeout_waiting": "Odotetaan lähettämisen valmistumista", + "gui_share_mode_autostop_timer_waiting": "Odotetaan lähettämisen valmistumista", "gui_receive_mode_no_files": "Yhtäkään tiedostoa ei ole vastaanotettu vielä", - "gui_receive_mode_timeout_waiting": "Odotetaan vastaanottamisen valmistumista" + "gui_receive_mode_autostop_timer_waiting": "Odotetaan vastaanottamisen valmistumista" } diff --git a/share/locale/fr.json b/share/locale/fr.json index 89c4efc7..edc5c370 100644 --- a/share/locale/fr.json +++ b/share/locale/fr.json @@ -54,7 +54,7 @@ "gui_settings_button_save": "Enregistrer", "gui_settings_button_cancel": "Annuler", "gui_settings_button_help": "Aide", - "gui_settings_shutdown_timeout": "Arrêter le partage à :", + "gui_settings_autostop_timer": "Arrêter le partage à :", "connecting_to_tor": "Connexion au réseau Tor", "help_config": "Emplacement du fichier personnalisé de configuration JSON (facultatif)", "large_filesize": "Avertissement : envoyer un gros partage peut prendre des heures", @@ -65,7 +65,7 @@ "help_autostop_timer": "Arrêter le partage après un certain nombre de secondes", "gui_tor_connection_error_settings": "Essayez de modifier dans les paramètres la façon dont OnionShare se connecte au réseau Tor.", "no_available_port": "Impossible de trouver un port disponible pour démarrer le service oignon", - "gui_share_stop_server_shutdown_timeout": "Arrêter le partage ({}s restantes)", + "gui_share_stop_server_autostop_timer": "Arrêter le partage ({}s restantes)", "systray_upload_started_title": "Envoi OnionShare démarré", "systray_upload_started_message": "Une personne a commencé à envoyer des fichiers vers votre ordinateur", "gui_no_downloads": "Pas encore de téléchargement", @@ -148,7 +148,7 @@ "help_receive": "Recevoir des partages au lieu de les envoyer", "gui_receive_start_server": "Démarrer le mode réception", "gui_receive_stop_server": "Arrêter le mode réception", - "gui_receive_stop_server_shutdown_timeout": "Arrêter le mode réception ({}s restantes)", + "gui_receive_stop_server_autostop_timer": "Arrêter le mode réception ({}s restantes)", "gui_download_upload_progress_complete": "%p%, {0:s} écoulées.", "gui_download_upload_progress_starting": "{0:s}, %p% (estimation)", "gui_download_upload_progress_eta": "{0:s}, Fin : {1:s}, %p%", @@ -172,17 +172,17 @@ "systray_page_loaded_title": "La page a été chargée", "systray_download_page_loaded_message": "Une personne a chargé la page de téléchargement", "systray_upload_page_loaded_message": "Une personne a chargé la page d'envoi", - "gui_share_stop_server_shutdown_timeout_tooltip": "La minuterie d’arrêt automatique se termine à {}", - "gui_receive_stop_server_shutdown_timeout_tooltip": "La minuterie d’arrêt automatique se termine à {}", + "gui_share_stop_server_autostop_timer_tooltip": "La minuterie d’arrêt automatique se termine à {}", + "gui_receive_stop_server_autostop_timer_tooltip": "La minuterie d’arrêt automatique se termine à {}", "gui_settings_tor_bridges_obfs4_radio_option": "Utiliser les transports enfichables obfs4 intégrés", "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Utiliser les transports enfichables obfs4 intégrés (exige obfs4proxy)", "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Utiliser les transports enfichables meek_lite (Azure) intégrés", "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Utiliser les transports enfichables meek_lite (Azure) intégrés (exige obfs4proxy)", "gui_settings_meek_lite_expensive_warning": "Avertissement : l’exploitation de ponts meek_lite demande beaucoup de ressources au Projet Tor.

Ne les utilisez que si vous ne pouvez pas vous connecter directement à Tor par les transports obfs4 ou autres ponts normaux.", - "gui_settings_shutdown_timeout_checkbox": "Utiliser la minuterie d’arrêt automatique", - "gui_server_started_after_timeout": "La minuterie d’arrêt automatique est arrivée au bout de son délai avant le démarrage du serveur.\nVeuillez mettre en place un nouveau partage.", - "gui_server_timeout_expired": "La minuterie d’arrêt automatique est déjà arrivée au bout de son délai.\nVeuillez la mettre à jour pour commencer le partage.", - "close_on_timeout": "Arrêté, car la minuterie d’arrêt automatique est arrivée au bout de son délai", + "gui_settings_autostop_timer_checkbox": "Utiliser la minuterie d’arrêt automatique", + "gui_server_started_after_autostop_timer": "La minuterie d’arrêt automatique est arrivée au bout de son délai avant le démarrage du serveur.\nVeuillez mettre en place un nouveau partage.", + "gui_server_autostop_timer_expired": "La minuterie d’arrêt automatique est déjà arrivée au bout de son délai.\nVeuillez la mettre à jour pour commencer le partage.", + "close_on_autostop_timer": "Arrêté, car la minuterie d’arrêt automatique est arrivée au bout de son délai", "gui_add_files": "Ajouter des fichiers", "gui_add_folder": "Ajouter un dossier", "error_cannot_create_data_dir": "Impossible de créer le dossier de données d’OnionShare : {}", @@ -206,9 +206,9 @@ "gui_all_modes_progress_starting": "{0:s}, %p % (estimation)", "gui_all_modes_progress_eta": "{0:s}, fin prévue : {1:s}, %p %", "gui_share_mode_no_files": "Aucun fichier n’a encore été envoyé", - "gui_share_mode_timeout_waiting": "En attente de la fin de l’envoi", + "gui_share_mode_autostop_timer_waiting": "En attente de la fin de l’envoi", "gui_receive_mode_no_files": "Aucun fichier n’a encore été reçu", - "gui_receive_mode_timeout_waiting": "En attente de la fin de la réception", + "gui_receive_mode_autostop_timer_waiting": "En attente de la fin de la réception", "gui_connect_to_tor_for_onion_settings": "Se connecter à Tor pour voir les paramètres du service onion", "systray_share_completed_message": "L’envoi de fichiers est terminé", "gui_all_modes_transfer_canceled": "Annulé le {}", diff --git a/share/locale/ga.json b/share/locale/ga.json index 339a1b83..40dbc446 100644 --- a/share/locale/ga.json +++ b/share/locale/ga.json @@ -10,7 +10,7 @@ "not_a_readable_file": "Ní comhad inléite é {0:s}.", "no_available_port": "Níorbh fhéidir port a aimsiú chun an tseirbhís onion a thosú", "other_page_loaded": "Seoladh lódáilte", - "close_on_timeout": "Cuireadh stop leis toisc go bhfuil an t-amadóir caite", + "close_on_autostop_timer": "Cuireadh stop leis toisc go bhfuil an t-amadóir caite", "closing_automatically": "Cuireadh stop leis toisc go bhfuil an íoslódáil críochnaithe", "timeout_download_still_running": "Ag fanacht go gcríochnódh an íoslódáil", "large_filesize": "Rabhadh: D'fhéadfadh go dtógfadh sé tamall fada comhad mór a sheoladh", @@ -37,12 +37,12 @@ "gui_choose_items": "Roghnaigh", "gui_share_start_server": "Comhroinn", "gui_share_stop_server": "Stop ag comhroinnt", - "gui_share_stop_server_shutdown_timeout": "Stop ag Comhroinnt ({}s fágtha)", - "gui_share_stop_server_shutdown_timeout_tooltip": "Amadóir uathstoptha caite {}", + "gui_share_stop_server_autostop_timer": "Stop ag Comhroinnt ({}s fágtha)", + "gui_share_stop_server_autostop_timer_tooltip": "Amadóir uathstoptha caite {}", "gui_receive_start_server": "Tosaigh an Mód Glactha", "gui_receive_stop_server": "Stop an Mód Glactha", - "gui_receive_stop_server_shutdown_timeout": "Stop an Mód Glactha ({}s fágtha)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "Amadóir uathstoptha caite {}", + "gui_receive_stop_server_autostop_timer": "Stop an Mód Glactha ({}s fágtha)", + "gui_receive_stop_server_autostop_timer_tooltip": "Amadóir uathstoptha caite {}", "gui_copy_url": "Cóipeáil an Seoladh", "gui_copy_hidservauth": "Cóipeáil HidServAuth", "gui_downloads": "Stair Íoslódála", @@ -104,8 +104,8 @@ "gui_settings_button_save": "Sábháil", "gui_settings_button_cancel": "Cealaigh", "gui_settings_button_help": "Cabhair", - "gui_settings_shutdown_timeout_checkbox": "Úsáid amadóir uathstoptha", - "gui_settings_shutdown_timeout": "Stop ag comhroinnt ag:", + "gui_settings_autostop_timer_checkbox": "Úsáid amadóir uathstoptha", + "gui_settings_autostop_timer": "Stop ag comhroinnt ag:", "settings_error_unknown": "Ní féidir ceangal a bhunú leis an rialaitheoir Tor toisc nach féidir linn ciall a bhaint as na socruithe.", "settings_error_automatic": "Níorbh fhéidir ceangal a bhunú leis an rialaitheoir Tor. An bhfuil Brabhsálaí Tor (ar fáil ó torproject.org) ag rith sa gcúlra?", "settings_error_socket_port": "Ní féidir ceangal a bhunú leis an rialaitheoir Tor ag {}:{}.", @@ -131,8 +131,8 @@ "gui_tor_connection_error_settings": "Bain triail as na socruithe líonra a athrú chun ceangal le líonra Tor ó OnionShare.", "gui_tor_connection_canceled": "Níorbh fhéidir ceangal a bhunú le Tor.\n\nDeimhnigh go bhfuil tú ceangailte leis an Idirlíon, ansin oscail OnionShare arís agus socraigh an ceangal le Tor.", "gui_tor_connection_lost": "Dícheangailte ó Tor.", - "gui_server_started_after_timeout": "Bhí an t-amadóir uathstoptha caite sular thosaigh an freastalaí.\nCaithfidh tú comhroinnt nua a chruthú.", - "gui_server_timeout_expired": "Tá an t-amadóir uathstoptha caite cheana.\nCaithfidh tú é a athshocrú sular féidir leat comhaid a chomhroinnt.", + "gui_server_started_after_autostop_timer": "Bhí an t-amadóir uathstoptha caite sular thosaigh an freastalaí.\nCaithfidh tú comhroinnt nua a chruthú.", + "gui_server_autostop_timer_expired": "Tá an t-amadóir uathstoptha caite cheana.\nCaithfidh tú é a athshocrú sular féidir leat comhaid a chomhroinnt.", "share_via_onionshare": "Comhroinn trí OnionShare é", "gui_use_legacy_v2_onions_checkbox": "Úsáid seoltaí sean-nóis", "gui_save_private_key_checkbox": "Úsáid seoladh seasmhach (seanleagan)", diff --git a/share/locale/gu.json b/share/locale/gu.json index 48b5d8b2..4926eed3 100644 --- a/share/locale/gu.json +++ b/share/locale/gu.json @@ -10,7 +10,7 @@ "not_a_readable_file": "", "no_available_port": "", "other_page_loaded": "", - "close_on_timeout": "", + "close_on_autostop_timer": "", "closing_automatically": "", "timeout_download_still_running": "", "timeout_upload_still_running": "", @@ -38,12 +38,12 @@ "gui_choose_items": "", "gui_share_start_server": "", "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "", "gui_copy_hidservauth": "", "gui_downloads": "", @@ -105,8 +105,8 @@ "gui_settings_button_save": "", "gui_settings_button_cancel": "", "gui_settings_button_help": "", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "", @@ -132,8 +132,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_use_legacy_v2_onions_checkbox": "", "gui_save_private_key_checkbox": "", diff --git a/share/locale/he.json b/share/locale/he.json index ed49ba55..ecc7755f 100644 --- a/share/locale/he.json +++ b/share/locale/he.json @@ -10,7 +10,7 @@ "not_a_readable_file": "", "no_available_port": "", "other_page_loaded": "", - "close_on_timeout": "", + "close_on_autostop_timer": "", "closing_automatically": "", "timeout_download_still_running": "", "timeout_upload_still_running": "", @@ -40,12 +40,12 @@ "gui_choose_items": "", "gui_share_start_server": "", "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "", "gui_copy_hidservauth": "", "gui_downloads": "", @@ -107,8 +107,8 @@ "gui_settings_button_save": "", "gui_settings_button_cancel": "", "gui_settings_button_help": "", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "", @@ -134,8 +134,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_connect_to_tor_for_onion_settings": "", "gui_use_legacy_v2_onions_checkbox": "", diff --git a/share/locale/hi.json b/share/locale/hi.json index 183ee3e0..5499eeed 100644 --- a/share/locale/hi.json +++ b/share/locale/hi.json @@ -10,12 +10,12 @@ "not_a_readable_file": "", "no_available_port": "", "other_page_loaded": "", - "close_on_timeout": "", + "close_on_autostop_timer": "", "closing_automatically": "", "large_filesize": "", "help_local_only": "", "help_stay_open": "", - "help_shutdown_timeout": "", + "help_autostop_timer": "", "help_stealth": "", "help_receive": "", "help_debug": "", @@ -29,12 +29,12 @@ "gui_choose_items": "चुनें", "gui_share_start_server": "", "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "", "gui_copy_hidservauth": "", "gui_canceled": "Canceled", @@ -92,8 +92,8 @@ "gui_settings_button_save": "सहेजें", "gui_settings_button_cancel": "रद्द करे", "gui_settings_button_help": "मदद", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "", @@ -119,8 +119,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_connect_to_tor_for_onion_settings": "", "gui_use_legacy_v2_onions_checkbox": "", @@ -178,7 +178,7 @@ "gui_all_modes_progress_starting": "", "gui_all_modes_progress_eta": "", "gui_share_mode_no_files": "", - "gui_share_mode_timeout_waiting": "", + "gui_share_mode_autostop_timer_waiting": "", "gui_receive_mode_no_files": "", - "gui_receive_mode_timeout_waiting": "" + "gui_receive_mode_autostop_timer_waiting": "" } diff --git a/share/locale/hu.json b/share/locale/hu.json index eba9798d..cbd71217 100644 --- a/share/locale/hu.json +++ b/share/locale/hu.json @@ -10,7 +10,7 @@ "not_a_readable_file": "", "no_available_port": "", "other_page_loaded": "", - "close_on_timeout": "", + "close_on_autostop_timer": "", "closing_automatically": "", "timeout_download_still_running": "", "large_filesize": "", @@ -37,12 +37,12 @@ "gui_choose_items": "Kiválaszt", "gui_share_start_server": "", "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "", "gui_copy_hidservauth": "", "gui_downloads": "", @@ -104,8 +104,8 @@ "gui_settings_button_save": "Mentés", "gui_settings_button_cancel": "Megszakítás", "gui_settings_button_help": "Súgó", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "", @@ -131,8 +131,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_use_legacy_v2_onions_checkbox": "", "gui_save_private_key_checkbox": "", diff --git a/share/locale/id.json b/share/locale/id.json index bc8dfad6..93677f44 100644 --- a/share/locale/id.json +++ b/share/locale/id.json @@ -10,7 +10,7 @@ "not_a_readable_file": "{0:s} bukan berkas yang bisa dibaca.", "no_available_port": "Tidak dapat menemukan porta yang tersedia untuk memulai layanan onion", "other_page_loaded": "Alamat dimuat", - "close_on_timeout": "", + "close_on_autostop_timer": "", "closing_automatically": "Terhenti karena transfer telah tuntas", "timeout_download_still_running": "", "large_filesize": "Peringatan: Mengirim dalam jumlah besar dapat memakan waktu berjam-jam", @@ -37,12 +37,12 @@ "gui_choose_items": "Pilih", "gui_share_start_server": "Mulai berbagi", "gui_share_stop_server": "Berhenti berbagi", - "gui_share_stop_server_shutdown_timeout": "Berhenti Berbagi ({}d tersisa)", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "Berhenti Berbagi ({}d tersisa)", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "Mulai Mode Menerima", "gui_receive_stop_server": "Menghentikan Mode Menerima", - "gui_receive_stop_server_shutdown_timeout": "Menghentikan Mode Menerima ({}d tersisa)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "Menghentikan Mode Menerima ({}d tersisa)", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "Salin Alamat", "gui_copy_hidservauth": "Salin HidServAuth", "gui_downloads": "", @@ -104,8 +104,8 @@ "gui_settings_button_save": "Simpan", "gui_settings_button_cancel": "Batal", "gui_settings_button_help": "", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "", @@ -131,8 +131,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_use_legacy_v2_onions_checkbox": "", "gui_save_private_key_checkbox": "", diff --git a/share/locale/is.json b/share/locale/is.json index 9109ec09..201c7ac7 100644 --- a/share/locale/is.json +++ b/share/locale/is.json @@ -10,7 +10,7 @@ "not_a_readable_file": "", "no_available_port": "", "other_page_loaded": "", - "close_on_timeout": "", + "close_on_autostop_timer": "", "closing_automatically": "", "timeout_download_still_running": "", "large_filesize": "", @@ -37,12 +37,12 @@ "gui_choose_items": "", "gui_share_start_server": "", "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "", "gui_copy_hidservauth": "", "gui_downloads": "", @@ -104,8 +104,8 @@ "gui_settings_button_save": "", "gui_settings_button_cancel": "", "gui_settings_button_help": "", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "", @@ -131,8 +131,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_use_legacy_v2_onions_checkbox": "", "gui_save_private_key_checkbox": "", diff --git a/share/locale/it.json b/share/locale/it.json index fee0f20a..c882bea3 100644 --- a/share/locale/it.json +++ b/share/locale/it.json @@ -28,7 +28,7 @@ "give_this_url_receive_stealth": "Condividi questo indirizzo e la linea HideServAuth con il mittente:", "not_a_readable_file": "{0:s} non è un file leggibile.", "no_available_port": "Non è stato possibile trovare alcuna porta per avviare il servizio onion", - "close_on_timeout": "Arrestato per tempo scaduto", + "close_on_autostop_timer": "Arrestato per tempo scaduto", "timeout_download_still_running": "download in corso, attendere", "systray_menu_exit": "Termina", "systray_download_started_title": "Download con OnionShare avviato", @@ -42,12 +42,12 @@ "help_autostop_timer": "Termina la condivisione dopo alcuni secondi", "help_stealth": "Usa l'autorizzazione del client (avanzato)", "help_config": "Specifica il percorso del file di configurazione del JSON personalizzato", - "gui_share_stop_server_shutdown_timeout": "Arresta la condivisione ({}s rimanenti)", - "gui_share_stop_server_shutdown_timeout_tooltip": "Il timer si arresterà tra {}", + "gui_share_stop_server_autostop_timer": "Arresta la condivisione ({}s rimanenti)", + "gui_share_stop_server_autostop_timer_tooltip": "Il timer si arresterà tra {}", "gui_receive_start_server": "Inizia la ricezione", "gui_receive_stop_server": "Arresta la ricezione", - "gui_receive_stop_server_shutdown_timeout": "Interrompi la ricezione ({}s rimanenti)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "Il timer termina tra {}", + "gui_receive_stop_server_autostop_timer": "Interrompi la ricezione ({}s rimanenti)", + "gui_receive_stop_server_autostop_timer_tooltip": "Il timer termina tra {}", "gui_copy_hidservauth": "Copia HidServAuth", "gui_no_downloads": "Ancora nessun Download", "gui_copied_url_title": "Indirizzo OnionShare copiato", @@ -109,8 +109,8 @@ "gui_settings_button_save": "Salva", "gui_settings_button_cancel": "Cancella", "gui_settings_button_help": "Aiuto", - "gui_settings_shutdown_timeout_checkbox": "Utilizza il timer di arresto automatico", - "gui_settings_shutdown_timeout": "Ferma la condivisione alle:", + "gui_settings_autostop_timer_checkbox": "Utilizza il timer di arresto automatico", + "gui_settings_autostop_timer": "Ferma la condivisione alle:", "settings_error_unknown": "Impossibile connettersi al controller Tor perché le tue impostazioni non hanno senso.", "settings_error_automatic": "Impossibile connettersi al controller Tor. Tor Browser (disponibile da torproject.org) è in esecuzione in background?", "settings_error_socket_port": "Impossibile connettersi al controller Tor in {}: {}.", @@ -136,8 +136,8 @@ "gui_tor_connection_error_settings": "Prova a modificare le impostazioni di come OnionShare si connette alla rete Tor.", "gui_tor_connection_canceled": "Impossibile connettersi a Tor,\n\nVerifica la connessione a Internet, dopo prova a riaprire OnionShare e configurare la connessione a Tor.", "gui_tor_connection_lost": "Disconnesso da Tor.", - "gui_server_started_after_timeout": "Il timer auto-stop si è esaurito prima dell'avvio del server.\nSi prega di fare una nuova condivisione.", - "gui_server_timeout_expired": "Il timer auto-stop ha già finito.\nPer favore aggiornalo per iniziare la condivisione.", + "gui_server_started_after_autostop_timer": "Il timer auto-stop si è esaurito prima dell'avvio del server.\nSi prega di fare una nuova condivisione.", + "gui_server_autostop_timer_expired": "Il timer auto-stop ha già finito.\nPer favore aggiornalo per iniziare la condivisione.", "share_via_onionshare": "Usa OnionShare", "gui_connect_to_tor_for_onion_settings": "Connetti a Tor per vedere le impostazioni del servizio onion", "gui_use_legacy_v2_onions_checkbox": "Usa gli indirizzi legacy", @@ -210,7 +210,7 @@ "gui_all_modes_progress_starting": "{0:s}, %p% (in calcolo)", "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", "gui_share_mode_no_files": "Nessun file ancora inviato", - "gui_share_mode_timeout_waiting": "In attesa di finire l'invio", + "gui_share_mode_autostop_timer_waiting": "In attesa di finire l'invio", "gui_receive_mode_no_files": "Nessun file ricevuto ancora", - "gui_receive_mode_timeout_waiting": "In attesa di finire la ricezione" + "gui_receive_mode_autostop_timer_waiting": "In attesa di finire la ricezione" } diff --git a/share/locale/ja.json b/share/locale/ja.json index f6846c52..3c4b4369 100644 --- a/share/locale/ja.json +++ b/share/locale/ja.json @@ -10,7 +10,7 @@ "not_a_readable_file": "{0:s}は読めるファイルではありません。", "no_available_port": "onionサービスを実行するための利用可能ポートを見つかりません", "other_page_loaded": "アドレスはロードされています", - "close_on_timeout": "自動タイマーがタイムアウトしたため停止されました", + "close_on_autostop_timer": "自動タイマーがタイムアウトしたため停止されました", "closing_automatically": "転送が完了されたため停止されました", "timeout_download_still_running": "ダウンロード完了待ち", "timeout_upload_still_running": "アップロード完了待ち", @@ -40,12 +40,12 @@ "gui_choose_items": "選択", "gui_share_start_server": "共有を開始する", "gui_share_stop_server": "共有を停止する", - "gui_share_stop_server_shutdown_timeout": "共有を停止中です(残り{}秒)", - "gui_share_stop_server_shutdown_timeout_tooltip": "{}に自動停止します", + "gui_share_stop_server_autostop_timer": "共有を停止中です(残り{}秒)", + "gui_share_stop_server_autostop_timer_tooltip": "{}に自動停止します", "gui_receive_start_server": "受信モードを開始", "gui_receive_stop_server": "受信モードを停止", - "gui_receive_stop_server_shutdown_timeout": "受信モードを停止中(残り{}秒)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "{}に自動停止します", + "gui_receive_stop_server_autostop_timer": "受信モードを停止中(残り{}秒)", + "gui_receive_stop_server_autostop_timer_tooltip": "{}に自動停止します", "gui_copy_url": "アドレスをコピー", "gui_copy_hidservauth": "HidServAuthをコピー", "gui_downloads": "ダウンロード履歴", @@ -107,8 +107,8 @@ "gui_settings_button_save": "保存", "gui_settings_button_cancel": "キャンセル", "gui_settings_button_help": "ヘルプ", - "gui_settings_shutdown_timeout_checkbox": "自動停止タイマーを使用する", - "gui_settings_shutdown_timeout": "共有を停止する時間:", + "gui_settings_autostop_timer_checkbox": "自動停止タイマーを使用する", + "gui_settings_autostop_timer": "共有を停止する時間:", "settings_error_unknown": "設定を解釈できないため、Torコントローラーと接続できません。", "settings_error_automatic": "Torコントローラーと接続できません。Torブラウザ(torproject.orgから入手できる)がバックグラウンドで動作していますか?", "settings_error_socket_port": "{}:{}でTorコントローラーと接続できません。", @@ -134,8 +134,8 @@ "gui_tor_connection_error_settings": "設定でTorとの接続方法を変更してみて下さい。", "gui_tor_connection_canceled": "Torと接続できませんでした。\n\nインターネット接続を確認してから、OnionShareを再開してTorとの接続を設定して下さい。", "gui_tor_connection_lost": "Torから切断されました。", - "gui_server_started_after_timeout": "サーバーが起動した前、自動停止タイマーがタイムアウトしました。\n再びファイル共有をして下さい。", - "gui_server_timeout_expired": "自動停止タイマーはすでにタイムアウトしています。\n共有し始めるにはリセットして下さい。", + "gui_server_started_after_autostop_timer": "サーバーが起動した前、自動停止タイマーがタイムアウトしました。\n再びファイル共有をして下さい。", + "gui_server_autostop_timer_expired": "自動停止タイマーはすでにタイムアウトしています。\n共有し始めるにはリセットして下さい。", "share_via_onionshare": "OnionShareで共有する", "gui_connect_to_tor_for_onion_settings": "onionサービス設定を見るのにTorと接続して下さい", "gui_use_legacy_v2_onions_checkbox": "レガシーアドレスを使用する", @@ -209,8 +209,8 @@ "gui_all_modes_progress_starting": "{0:s}, %p% (計算中)", "gui_all_modes_progress_eta": "{0:s}, 完了予定時刻: {1:s}, %p%", "gui_share_mode_no_files": "送信されたファイルがまだありません", - "gui_share_mode_timeout_waiting": "送信完了を待機しています", + "gui_share_mode_autostop_timer_waiting": "送信完了を待機しています", "gui_receive_mode_no_files": "受信されたファイルがまだありません", - "gui_receive_mode_timeout_waiting": "受信完了を待機しています", + "gui_receive_mode_autostop_timer_waiting": "受信完了を待機しています", "gui_settings_onion_label": "Onion設定" } diff --git a/share/locale/ka.json b/share/locale/ka.json index 72c24efd..2755e452 100644 --- a/share/locale/ka.json +++ b/share/locale/ka.json @@ -10,7 +10,7 @@ "not_a_readable_file": "", "no_available_port": "", "other_page_loaded": "", - "close_on_timeout": "", + "close_on_autostop_timer": "", "closing_automatically": "", "timeout_download_still_running": "", "large_filesize": "", @@ -37,12 +37,12 @@ "gui_choose_items": "", "gui_share_start_server": "", "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "", "gui_copy_hidservauth": "", "gui_downloads": "", @@ -104,8 +104,8 @@ "gui_settings_button_save": "", "gui_settings_button_cancel": "", "gui_settings_button_help": "", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "", @@ -131,8 +131,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_use_legacy_v2_onions_checkbox": "", "gui_save_private_key_checkbox": "", diff --git a/share/locale/ko.json b/share/locale/ko.json index e766fa05..84498176 100644 --- a/share/locale/ko.json +++ b/share/locale/ko.json @@ -10,7 +10,7 @@ "not_a_readable_file": "{0:s} 는 읽을수 없는 파일입니다.", "no_available_port": "어니언 서비스를 시작하기 위한 사용 가능한 포트를 찾을수 없었습니다", "other_page_loaded": "주소가 로드되다", - "close_on_timeout": "자동멈춤 타이머가 끝났기 때문에 정지되다", + "close_on_autostop_timer": "자동멈춤 타이머가 끝났기 때문에 정지되다", "closing_automatically": "다운로드가 완료되었기 때문에 정지되다", "timeout_download_still_running": "다운로드가 완료되기를 기다리는 중입니다", "timeout_upload_still_running": "업로드가 완료되기를 기다리는 중입니다", @@ -38,12 +38,12 @@ "gui_choose_items": "선택", "gui_share_start_server": "", "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "", "gui_copy_hidservauth": "", "gui_downloads": "", @@ -105,8 +105,8 @@ "gui_settings_button_save": "저장", "gui_settings_button_cancel": "취소", "gui_settings_button_help": "도움말", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "", @@ -132,8 +132,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_use_legacy_v2_onions_checkbox": "", "gui_save_private_key_checkbox": "", diff --git a/share/locale/lg.json b/share/locale/lg.json index 8c1819bd..7dbce74b 100644 --- a/share/locale/lg.json +++ b/share/locale/lg.json @@ -10,7 +10,7 @@ "not_a_readable_file": "", "no_available_port": "", "other_page_loaded": "", - "close_on_timeout": "", + "close_on_autostop_timer": "", "closing_automatically": "", "timeout_download_still_running": "", "timeout_upload_still_running": "", @@ -38,12 +38,12 @@ "gui_choose_items": "", "gui_share_start_server": "", "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "", "gui_copy_hidservauth": "", "gui_downloads": "", @@ -105,8 +105,8 @@ "gui_settings_button_save": "", "gui_settings_button_cancel": "", "gui_settings_button_help": "", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "", @@ -132,8 +132,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_use_legacy_v2_onions_checkbox": "", "gui_save_private_key_checkbox": "", diff --git a/share/locale/mk.json b/share/locale/mk.json index 6228bfaa..7302d465 100644 --- a/share/locale/mk.json +++ b/share/locale/mk.json @@ -10,7 +10,7 @@ "not_a_readable_file": "", "no_available_port": "", "other_page_loaded": "", - "close_on_timeout": "", + "close_on_autostop_timer": "", "closing_automatically": "", "timeout_download_still_running": "", "large_filesize": "", @@ -37,12 +37,12 @@ "gui_choose_items": "", "gui_share_start_server": "", "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "", "gui_copy_hidservauth": "", "gui_downloads": "", @@ -104,8 +104,8 @@ "gui_settings_button_save": "Зачувување", "gui_settings_button_cancel": "Откажи", "gui_settings_button_help": "", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "", @@ -131,8 +131,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_use_legacy_v2_onions_checkbox": "", "gui_save_private_key_checkbox": "", diff --git a/share/locale/ms.json b/share/locale/ms.json index 465a9cd4..7ddf4396 100644 --- a/share/locale/ms.json +++ b/share/locale/ms.json @@ -10,12 +10,12 @@ "not_a_readable_file": "", "no_available_port": "", "other_page_loaded": "", - "close_on_timeout": "", + "close_on_autostop_timer": "", "closing_automatically": "", "large_filesize": "", "help_local_only": "", "help_stay_open": "", - "help_shutdown_timeout": "", + "help_autostop_timer": "", "help_stealth": "", "help_receive": "", "help_debug": "", @@ -29,12 +29,12 @@ "gui_choose_items": "", "gui_share_start_server": "", "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "", "gui_copy_hidservauth": "", "gui_canceled": "", @@ -92,8 +92,8 @@ "gui_settings_button_save": "", "gui_settings_button_cancel": "", "gui_settings_button_help": "", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "", @@ -119,8 +119,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_connect_to_tor_for_onion_settings": "", "gui_use_legacy_v2_onions_checkbox": "", @@ -178,7 +178,7 @@ "gui_all_modes_progress_starting": "", "gui_all_modes_progress_eta": "", "gui_share_mode_no_files": "", - "gui_share_mode_timeout_waiting": "", + "gui_share_mode_autostop_timer_waiting": "", "gui_receive_mode_no_files": "", - "gui_receive_mode_timeout_waiting": "" + "gui_receive_mode_autostop_timer_waiting": "" } diff --git a/share/locale/nl.json b/share/locale/nl.json index 5ae039ff..55596663 100644 --- a/share/locale/nl.json +++ b/share/locale/nl.json @@ -8,7 +8,7 @@ "not_a_readable_file": "{0:s} is geen leesbaar bestand.", "no_available_port": "Er is geen poort beschikbaar om de onion-dienst op te starten", "other_page_loaded": "Adres geladen", - "close_on_timeout": "Gestopt omdat de automatische time-out bereikt is", + "close_on_autostop_timer": "Gestopt omdat de automatische time-out bereikt is", "closing_automatically": "Gestopt omdat de download is afgerond", "timeout_download_still_running": "Bezig met wachten op afronden van download", "large_filesize": "Waarschuwing: het versturen van grote bestanden kan uren duren", @@ -73,7 +73,7 @@ "gui_settings_button_save": "Opslaan", "gui_settings_button_cancel": "Annuleren", "gui_settings_button_help": "Help", - "gui_settings_shutdown_timeout": "Stop het delen om:", + "gui_settings_autostop_timer": "Stop het delen om:", "settings_saved": "Instellingen opgeslagen in {}", "settings_error_unknown": "Kan geen verbinding maken met de Tor controller omdat je instellingen nergens op slaan.", "settings_error_automatic": "Kon geen verbinding maken met de Tor controller. Draait Tor Browser (beschikbaar via torproject.org) in de achtergrond?", @@ -97,8 +97,8 @@ "gui_tor_connection_ask_quit": "Afsluiten", "gui_tor_connection_error_settings": "Probeer hoe OnionShare verbind met het Tor network te veranderen in de instellingen.", "gui_tor_connection_canceled": "Kon niet verbinden met Tor.\n\nWees er zeker van dat je verbonden bent met het internet, herstart OnionShare en configureer de verbinding met Tor.", - "gui_server_started_after_timeout": "De auto-stop timer liep af voordat de server startte.\nMaak een nieuwe share aan.", - "gui_server_timeout_expired": "De auto-stop timer is al verlopen.\nStel een nieuwe tijd in om te beginnen met delen.", + "gui_server_started_after_autostop_timer": "De auto-stop timer liep af voordat de server startte.\nMaak een nieuwe share aan.", + "gui_server_autostop_timer_expired": "De auto-stop timer is al verlopen.\nStel een nieuwe tijd in om te beginnen met delen.", "share_via_onionshare": "Deel via OnionShare", "give_this_url_receive": "Geef dit adres aan de afzender:", "give_this_url_receive_stealth": "Geef dit adres en de HidServAuth-regel aan de afzender:", @@ -108,12 +108,12 @@ "timeout_upload_still_running": "Wachten op voltooiing van de upload", "gui_share_start_server": "Start met delen", "gui_share_stop_server": "Stop met delen", - "gui_share_stop_server_shutdown_timeout": "Stop met Delen ({}s resterend)", - "gui_share_stop_server_shutdown_timeout_tooltip": "Auto-stop timer eindigt bij {}", + "gui_share_stop_server_autostop_timer": "Stop met Delen ({}s resterend)", + "gui_share_stop_server_autostop_timer_tooltip": "Auto-stop timer eindigt bij {}", "gui_receive_start_server": "Start Ontvangstmodus", "gui_receive_stop_server": "Stop Ontvangstmodus", - "gui_receive_stop_server_shutdown_timeout": "Stop Ontvangstmodus ({}s resterend)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "Auto-stop timer stopt bij {}", + "gui_receive_stop_server_autostop_timer": "Stop Ontvangstmodus ({}s resterend)", + "gui_receive_stop_server_autostop_timer_tooltip": "Auto-stop timer stopt bij {}", "gui_no_downloads": "Nog Geen Downloads", "gui_copied_url_title": "Gekopieerd OnionShare Adres", "gui_copied_hidservauth_title": "HidServAuth gekopieerd", @@ -132,7 +132,7 @@ "gui_settings_tor_bridges_custom_radio_option": "Gebruik custom bridges", "gui_settings_tor_bridges_custom_label": "Je kan bridges krijgen via 1https://bridges.torproject.org2", "gui_settings_tor_bridges_invalid": "Geen van de bridges die je hebt toegevoegd werken. \nControleer ze of voeg andere toe.", - "gui_settings_shutdown_timeout_checkbox": "Gebruik auto-stop timer", + "gui_settings_autostop_timer_checkbox": "Gebruik auto-stop timer", "error_tor_protocol_error_unknown": "Er was een onbekende fout met Tor", "error_invalid_private_key": "Dit type privésleutel wordt niet ondersteund", "gui_tor_connection_lost": "De verbinding met Tor is verbroken.", diff --git a/share/locale/no.json b/share/locale/no.json index 4ef2721c..d46bba67 100644 --- a/share/locale/no.json +++ b/share/locale/no.json @@ -11,7 +11,7 @@ "give_this_url_receive_stealth": "Gi denne adressen og HidServAuth-linjen til avsenderen:", "not_a_readable_file": "{0:s} er ikke en lesbar fil.", "no_available_port": "Fant ikke tilgjengelig port for oppstart av løktjenesten", - "close_on_timeout": "Stoppet fordi tidsavbruddsuret gikk ut", + "close_on_autostop_timer": "Stoppet fordi tidsavbruddsuret gikk ut", "closing_automatically": "Stoppet fordi nedlasting fullførtes", "timeout_download_still_running": "Venter på at nedlastingen skal fullføres", "large_filesize": "Advarsel: forsendelse av stor deling kan ta timer", @@ -38,12 +38,12 @@ "gui_choose_items": "Velg", "gui_share_start_server": "Start deling", "gui_share_stop_server": "Stopp deling", - "gui_share_stop_server_shutdown_timeout": "Stopp deling ({}s gjenstår)", - "gui_share_stop_server_shutdown_timeout_tooltip": "Tidsavbruddsuret går ut {}", + "gui_share_stop_server_autostop_timer": "Stopp deling ({}s gjenstår)", + "gui_share_stop_server_autostop_timer_tooltip": "Tidsavbruddsuret går ut {}", "gui_receive_start_server": "Start mottaksmodus", "gui_receive_stop_server": "Stopp mottaksmodus", - "gui_receive_stop_server_shutdown_timeout": "Stopp mottaksmodus ({}s gjenstår)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "Tidsavbruddsuret går ut {}", + "gui_receive_stop_server_autostop_timer": "Stopp mottaksmodus ({}s gjenstår)", + "gui_receive_stop_server_autostop_timer_tooltip": "Tidsavbruddsuret går ut {}", "gui_copy_url": "Kopier nettadresse", "gui_copy_hidservauth": "Kopier HidServAuth", "gui_downloads": "Nedlastingshistorikk", @@ -104,8 +104,8 @@ "gui_settings_button_save": "Lagre", "gui_settings_button_cancel": "Avbryt", "gui_settings_button_help": "Hjelp", - "gui_settings_shutdown_timeout_checkbox": "Bruk tidsavbruddsur", - "gui_settings_shutdown_timeout": "Stopp deling ved:", + "gui_settings_autostop_timer_checkbox": "Bruk tidsavbruddsur", + "gui_settings_autostop_timer": "Stopp deling ved:", "settings_saved": "Innstillinger lagret i {}", "settings_error_unknown": "Kan ikke koble til Tor-kontroller fordi innstillingene dine ikke gir mening.", "settings_error_automatic": "Kunne ikke koble til Tor-kontrolleren. Kjører Tor-nettleseren (tilgjengelig fra torproject.org) i bakgrunnen?", @@ -132,8 +132,8 @@ "gui_tor_connection_error_settings": "Prøv å endre hvordan OnionShare kobler til Tor-nettverket i innstillingene.", "gui_tor_connection_canceled": "Kunne ikke koble til Tor.\n\nForsikre deg om at du er koblet til Internett, åpne så OnionShare igjen, og sett opp dets tilkobling til Tor.", "gui_tor_connection_lost": "Frakoblet fra Tor.", - "gui_server_started_after_timeout": "Tidsavbruddsuret gikk ut før tjeneren startet.\nLag en ny deling.", - "gui_server_timeout_expired": "Tidsavbruddsuret har gått ut allerede.\nOppdater det for å starte deling.", + "gui_server_started_after_autostop_timer": "Tidsavbruddsuret gikk ut før tjeneren startet.\nLag en ny deling.", + "gui_server_autostop_timer_expired": "Tidsavbruddsuret har gått ut allerede.\nOppdater det for å starte deling.", "share_via_onionshare": "OnionShare det", "gui_use_legacy_v2_onions_checkbox": "Bruk gammeldagse adresser", "gui_save_private_key_checkbox": "Bruk en vedvarende adresse", @@ -212,9 +212,9 @@ "gui_all_modes_progress_starting": "{0:s}, %p% (kalkulerer)", "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", "gui_share_mode_no_files": "Ingen filer sendt enda", - "gui_share_mode_timeout_waiting": "Venter på fullføring av forsendelse", + "gui_share_mode_autostop_timer_waiting": "Venter på fullføring av forsendelse", "gui_receive_mode_no_files": "Ingen filer mottatt enda", - "gui_receive_mode_timeout_waiting": "Venter på fullføring av mottak", + "gui_receive_mode_autostop_timer_waiting": "Venter på fullføring av mottak", "gui_all_modes_transfer_canceled_range": "Avbrutt {} - {}", "gui_all_modes_transfer_canceled": "Avbrutt {}", "gui_settings_onion_label": "Løk-innstillinger" diff --git a/share/locale/pa.json b/share/locale/pa.json index 4cfcf0e6..57712ca0 100644 --- a/share/locale/pa.json +++ b/share/locale/pa.json @@ -10,7 +10,7 @@ "not_a_readable_file": "", "no_available_port": "", "other_page_loaded": "", - "close_on_timeout": "", + "close_on_autostop_timer": "", "closing_automatically": "", "timeout_download_still_running": "", "large_filesize": "", @@ -37,12 +37,12 @@ "gui_choose_items": "", "gui_share_start_server": "", "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "", "gui_copy_hidservauth": "", "gui_downloads": "", @@ -104,8 +104,8 @@ "gui_settings_button_save": "", "gui_settings_button_cancel": "", "gui_settings_button_help": "", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "", @@ -131,8 +131,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_use_legacy_v2_onions_checkbox": "", "gui_save_private_key_checkbox": "", diff --git a/share/locale/pl.json b/share/locale/pl.json index 15cc3fc4..94d8dd9e 100644 --- a/share/locale/pl.json +++ b/share/locale/pl.json @@ -10,7 +10,7 @@ "not_a_readable_file": "{0:s} nie jest plikiem do odczytu.", "no_available_port": "Nie można znaleźć dostępnego portu aby włączyć usługę onion", "other_page_loaded": "Adres został wczytany", - "close_on_timeout": "Zatrzymano, gdyż upłynął czas", + "close_on_autostop_timer": "Zatrzymano, gdyż upłynął czas", "closing_automatically": "Zatrzymano, gdyż pobieranie zostało ukończone", "timeout_download_still_running": "Czekam na ukończenie pobierania", "large_filesize": "Uwaga: Wysyłanie dużego pliku może zająć kilka godzin", @@ -37,12 +37,12 @@ "gui_choose_items": "Wybierz", "gui_share_start_server": "Rozpocznij udostępnianie", "gui_share_stop_server": "Zatrzymaj udostępnianie", - "gui_share_stop_server_shutdown_timeout": "Zatrzymaj udostępnianie (zostało {}s)", - "gui_share_stop_server_shutdown_timeout_tooltip": "Czas upłynie za {}", + "gui_share_stop_server_autostop_timer": "Zatrzymaj udostępnianie (zostało {}s)", + "gui_share_stop_server_autostop_timer_tooltip": "Czas upłynie za {}", "gui_receive_start_server": "Rozpocznij tryb odbierania", "gui_receive_stop_server": "Zatrzymaj tryb odbierania", - "gui_receive_stop_server_shutdown_timeout": "Zatrzymaj tryb odbierania (pozostało {}s)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "Czas upływa za {}", + "gui_receive_stop_server_autostop_timer": "Zatrzymaj tryb odbierania (pozostało {}s)", + "gui_receive_stop_server_autostop_timer_tooltip": "Czas upływa za {}", "gui_copy_url": "Kopiuj adres załącznika", "gui_copy_hidservauth": "Kopiuj HidServAuth", "gui_downloads": "Historia pobierania", @@ -104,8 +104,8 @@ "gui_settings_button_save": "Zapisz", "gui_settings_button_cancel": "Anuluj", "gui_settings_button_help": "Pomoc", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "Nie można połączyć się z kontrolerem Tor, ponieważ Twoje ustawienia nie mają sensu.", "settings_error_automatic": "Nie można połączyć się z kontrolerem Tor. Czy Tor Browser (dostępny na torproject.org) działa w tle?", "settings_error_socket_port": "Nie można połączyć się z kontrolerem Tor pod adresem {}:{}.", @@ -131,8 +131,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_use_legacy_v2_onions_checkbox": "", "gui_save_private_key_checkbox": "", diff --git a/share/locale/pt_BR.json b/share/locale/pt_BR.json index 47030d22..69dfeb62 100644 --- a/share/locale/pt_BR.json +++ b/share/locale/pt_BR.json @@ -10,7 +10,7 @@ "not_a_readable_file": "{0:s} não é um ficheiro legível.", "no_available_port": "Não foi possível encontrar um pórtico disponível para iniciar o serviço onion", "other_page_loaded": "Endereço carregado", - "close_on_timeout": "Interrompido ao final da contagem do cronômetro automático", + "close_on_autostop_timer": "Interrompido ao final da contagem do cronômetro automático", "closing_automatically": "Interrompido após o término da transferência", "timeout_download_still_running": "Esperando que o download termine", "large_filesize": "Aviso: O envio de arquivos grandes pode levar várias horas", @@ -37,12 +37,12 @@ "gui_choose_items": "Escolher", "gui_share_start_server": "Começar a compartilhar", "gui_share_stop_server": "Parar de compartilhar", - "gui_share_stop_server_shutdown_timeout": "Parar de compartilhar ({}segundos para terminar)", - "gui_share_stop_server_shutdown_timeout_tooltip": "O cronômetro automático termina às", + "gui_share_stop_server_autostop_timer": "Parar de compartilhar ({}segundos para terminar)", + "gui_share_stop_server_autostop_timer_tooltip": "O cronômetro automático termina às", "gui_receive_start_server": "Modo Começar a Receber", "gui_receive_stop_server": "Modo Parar de Receber", - "gui_receive_stop_server_shutdown_timeout": "Modo Parar de Receber ({}segundos para terminar)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "O cronômetro automático termina às {}", + "gui_receive_stop_server_autostop_timer": "Modo Parar de Receber ({}segundos para terminar)", + "gui_receive_stop_server_autostop_timer_tooltip": "O cronômetro automático termina às {}", "gui_copy_url": "Copiar endereço", "gui_copy_hidservauth": "Copiar HidServAuth", "gui_downloads": "Histórico de download", @@ -104,8 +104,8 @@ "gui_settings_button_save": "Salvar", "gui_settings_button_cancel": "Cancelar", "gui_settings_button_help": "Ajuda", - "gui_settings_shutdown_timeout_checkbox": "Usar cronômetro para encerrar automaticamente", - "gui_settings_shutdown_timeout": "Encerrar o compartilhamento às:", + "gui_settings_autostop_timer_checkbox": "Usar cronômetro para encerrar automaticamente", + "gui_settings_autostop_timer": "Encerrar o compartilhamento às:", "settings_error_unknown": "Impossível conectar-se ao controlador do Tor, porque as suas configurações estão confusas.", "settings_error_automatic": "Não foi possível conectar ao controlador do Tor. O Navegador Tor (disponível no site torproject.org) está rodando em segundo plano?", "settings_error_socket_port": "Não pode ligar ao controlador do Tor em {}:{}.", @@ -131,8 +131,8 @@ "gui_tor_connection_error_settings": "Tente mudar nas configurações a forma como OnionShare se conecta à rede Tor.", "gui_tor_connection_canceled": "Não foi possível conectar à rede Tor.\n\nVerifique se você está conectada à Internet, e então abra OnionShare novamente e configure sua conexão à rede Tor.", "gui_tor_connection_lost": "Desconectado do Tor.", - "gui_server_started_after_timeout": "O tempo esgotou antes do servidor iniciar.\nPor favor, crie um novo compartilhamento.", - "gui_server_timeout_expired": "O temporizador já esgotou.\nPor favor, atualize-o antes de começar a compartilhar.", + "gui_server_started_after_autostop_timer": "O tempo esgotou antes do servidor iniciar.\nPor favor, crie um novo compartilhamento.", + "gui_server_autostop_timer_expired": "O temporizador já esgotou.\nPor favor, atualize-o antes de começar a compartilhar.", "share_via_onionshare": "Compartilhar usando OnionShare", "gui_use_legacy_v2_onions_checkbox": "Usar endereços do tipo antigo", "gui_save_private_key_checkbox": "Usar o mesmo endereço", @@ -206,9 +206,9 @@ "gui_all_modes_transfer_finished": "Transferido {}", "gui_all_modes_transfer_canceled_range": "Cancelado {} - {}", "gui_all_modes_transfer_canceled": "Cancelado {}", - "gui_share_mode_timeout_waiting": "Esperando para completar o envio", + "gui_share_mode_autostop_timer_waiting": "Esperando para completar o envio", "gui_receive_mode_no_files": "Nenhum arquivo recebido", - "gui_receive_mode_timeout_waiting": "Esperando para completar o recebimento", + "gui_receive_mode_autostop_timer_waiting": "Esperando para completar o recebimento", "gui_settings_onion_label": "Configurando Onion", "systray_page_loaded_message": "Endereço OnionShare foi carregado", "gui_all_modes_progress_complete": "%p%, {0:s} em curso.", diff --git a/share/locale/pt_PT.json b/share/locale/pt_PT.json index e1c9fb54..5e3b81f8 100644 --- a/share/locale/pt_PT.json +++ b/share/locale/pt_PT.json @@ -10,7 +10,7 @@ "not_a_readable_file": "", "no_available_port": "", "other_page_loaded": "Outra página tem sido carregada", - "close_on_timeout": "", + "close_on_autostop_timer": "", "closing_automatically": "", "timeout_download_still_running": "", "large_filesize": "", @@ -37,12 +37,12 @@ "gui_choose_items": "Escolha", "gui_share_start_server": "", "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "", "gui_copy_hidservauth": "", "gui_downloads": "", @@ -104,8 +104,8 @@ "gui_settings_button_save": "", "gui_settings_button_cancel": "Cancelar", "gui_settings_button_help": "Ajuda", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "", @@ -131,8 +131,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_use_legacy_v2_onions_checkbox": "", "gui_save_private_key_checkbox": "", diff --git a/share/locale/ro.json b/share/locale/ro.json index 08446de1..f176d374 100644 --- a/share/locale/ro.json +++ b/share/locale/ro.json @@ -10,7 +10,7 @@ "not_a_readable_file": "", "no_available_port": "", "other_page_loaded": "", - "close_on_timeout": "", + "close_on_autostop_timer": "", "closing_automatically": "", "timeout_download_still_running": "", "large_filesize": "", @@ -37,12 +37,12 @@ "gui_choose_items": "Alegeți", "gui_share_start_server": "", "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "", "gui_copy_hidservauth": "", "gui_downloads": "", @@ -104,8 +104,8 @@ "gui_settings_button_save": "Salvare", "gui_settings_button_cancel": "Anulare", "gui_settings_button_help": "Ajutor", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "", @@ -131,8 +131,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_use_legacy_v2_onions_checkbox": "", "gui_save_private_key_checkbox": "", diff --git a/share/locale/ru.json b/share/locale/ru.json index 772e1e46..54aa66a0 100644 --- a/share/locale/ru.json +++ b/share/locale/ru.json @@ -36,7 +36,7 @@ "give_this_url_receive_stealth": "Передайте этот адрес и строку HidServAuth отправителю:", "not_a_readable_file": "{0:s} не читаемый файл.", "no_available_port": "Не удалось найти доступный порт для запуска \"лукового\" сервиса", - "close_on_timeout": "Время ожидания таймера истекло, сервис остановлен", + "close_on_autostop_timer": "Время ожидания таймера истекло, сервис остановлен", "closing_automatically": "Загрузка завершена, сервис остановлен", "timeout_download_still_running": "Ожидаем завершения скачивания", "timeout_upload_still_running": "Ожидаем завершения загрузки", @@ -60,12 +60,12 @@ "gui_drag_and_drop": "Перетащите сюда файлы и/или папки,\nкоторые хотите отправить.", "gui_share_start_server": "Начать отправку", "gui_share_stop_server": "Закончить отправку", - "gui_share_stop_server_shutdown_timeout": "Остановить отправку (осталось {}с)", - "gui_share_stop_server_shutdown_timeout_tooltip": "Время таймера истекает в {}", + "gui_share_stop_server_autostop_timer": "Остановить отправку (осталось {}с)", + "gui_share_stop_server_autostop_timer_tooltip": "Время таймера истекает в {}", "gui_receive_start_server": "Включить режим получения", "gui_receive_stop_server": "Выключить режим получения", - "gui_receive_stop_server_shutdown_timeout": "Выключить режим получения (осталось {}с)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "Время таймера истекает в {}", + "gui_receive_stop_server_autostop_timer": "Выключить режим получения (осталось {}с)", + "gui_receive_stop_server_autostop_timer_tooltip": "Время таймера истекает в {}", "gui_copy_hidservauth": "Скопировать строку HidServAuth", "gui_downloads": "История скачиваний", "gui_no_downloads": "Скачиваний пока нет ", @@ -113,8 +113,8 @@ "gui_settings_tor_bridges_custom_radio_option": "Использовать пользовательские \"мосты\"", "gui_settings_tor_bridges_custom_label": "Получить настройки \"мостов\" можно здесь: https://bridges.torproject.org", "gui_settings_tor_bridges_invalid": "Ни один из добавленных вами \"мостов\" не работает.\nПроверьте их снова или добавьте другие.", - "gui_settings_shutdown_timeout_checkbox": "Использовать таймер", - "gui_settings_shutdown_timeout": "Остановить загрузку в:", + "gui_settings_autostop_timer_checkbox": "Использовать таймер", + "gui_settings_autostop_timer": "Остановить загрузку в:", "settings_error_unknown": "Невозможно произвести подключение к контроллеру Tor: некорректные настройки.", "settings_error_automatic": "Ошибка подключения к контроллеру Tor. Запущен ли Tor Browser (torproject.org) в фоновом режиме?", "settings_error_socket_port": "Ошибка подключения к контроллеру Tor в {}:{}.", @@ -138,8 +138,8 @@ "gui_tor_connection_error_settings": "Попробуйте изменить способ подключения OnionShare к сети Tor в разделе \"Настройки\".", "gui_tor_connection_canceled": "Ошибка подключения к Tor.\n\nПожалуйста, убедитесь что подключены к сети Интернет. Откройте OnionShare снова и настройте подключение к Tor.", "gui_tor_connection_lost": "Отключено от Tor.", - "gui_server_started_after_timeout": "Время таймера истекло до того, как сервер был запущен.\nПожалуйста, отправьте файлы заново.", - "gui_server_timeout_expired": "Время таймера истекло.\nПожалуйста, обновите его для начала отправки.", + "gui_server_started_after_autostop_timer": "Время таймера истекло до того, как сервер был запущен.\nПожалуйста, отправьте файлы заново.", + "gui_server_autostop_timer_expired": "Время таймера истекло.\nПожалуйста, обновите его для начала отправки.", "share_via_onionshare": "OnionShare это", "gui_use_legacy_v2_onions_checkbox": "Используйте устаревшие адреса", "gui_save_private_key_checkbox": "Используйте постоянный адрес", @@ -210,7 +210,7 @@ "gui_all_modes_progress_starting": "{0:s}, %p% (вычисляем)", "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", "gui_share_mode_no_files": "Пока нет отправленных файлов", - "gui_share_mode_timeout_waiting": "Ожидается завершение отправки", + "gui_share_mode_autostop_timer_waiting": "Ожидается завершение отправки", "gui_receive_mode_no_files": "Пока нет полученных файлов", - "gui_receive_mode_timeout_waiting": "Ожидается завершение загрузки" + "gui_receive_mode_autostop_timer_waiting": "Ожидается завершение загрузки" } diff --git a/share/locale/sl.json b/share/locale/sl.json index bb79b972..3fd265f6 100644 --- a/share/locale/sl.json +++ b/share/locale/sl.json @@ -10,7 +10,7 @@ "not_a_readable_file": "", "no_available_port": "", "other_page_loaded": "", - "close_on_timeout": "", + "close_on_autostop_timer": "", "closing_automatically": "", "timeout_download_still_running": "", "large_filesize": "", @@ -37,12 +37,12 @@ "gui_choose_items": "Izberi", "gui_share_start_server": "", "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "", "gui_copy_hidservauth": "", "gui_downloads": "", @@ -104,8 +104,8 @@ "gui_settings_button_save": "", "gui_settings_button_cancel": "", "gui_settings_button_help": "Pomoč", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "", @@ -131,8 +131,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_use_legacy_v2_onions_checkbox": "", "gui_save_private_key_checkbox": "", diff --git a/share/locale/sn.json b/share/locale/sn.json index ed49ba55..ecc7755f 100644 --- a/share/locale/sn.json +++ b/share/locale/sn.json @@ -10,7 +10,7 @@ "not_a_readable_file": "", "no_available_port": "", "other_page_loaded": "", - "close_on_timeout": "", + "close_on_autostop_timer": "", "closing_automatically": "", "timeout_download_still_running": "", "timeout_upload_still_running": "", @@ -40,12 +40,12 @@ "gui_choose_items": "", "gui_share_start_server": "", "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "", "gui_copy_hidservauth": "", "gui_downloads": "", @@ -107,8 +107,8 @@ "gui_settings_button_save": "", "gui_settings_button_cancel": "", "gui_settings_button_help": "", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "", @@ -134,8 +134,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_connect_to_tor_for_onion_settings": "", "gui_use_legacy_v2_onions_checkbox": "", diff --git a/share/locale/sv.json b/share/locale/sv.json index 53e05e43..3b2254a5 100644 --- a/share/locale/sv.json +++ b/share/locale/sv.json @@ -10,7 +10,7 @@ "not_a_readable_file": "{0:s} är inte en läsbar fil.", "no_available_port": "Kunde inte hitta en ledig kort för att starta onion-tjänsten", "other_page_loaded": "Adress laddad", - "close_on_timeout": "Stoppad för att tiden för den automatiska stopp-tidtagaren löpte ut", + "close_on_autostop_timer": "Stoppad för att tiden för den automatiska stopp-tidtagaren löpte ut", "closing_automatically": "Stoppad för att hämtningen är klar", "timeout_download_still_running": "Väntar på att nedladdningen ska bli klar", "timeout_upload_still_running": "Väntar på att uppladdningen ska bli klar", @@ -38,12 +38,12 @@ "gui_choose_items": "Välj", "gui_share_start_server": "Börja dela", "gui_share_stop_server": "Avbryt delning", - "gui_share_stop_server_shutdown_timeout": "Avbryt Delning ({}s kvarstår)", - "gui_share_stop_server_shutdown_timeout_tooltip": "Automatiska stopp-tidtagaren avslutar vid {}", + "gui_share_stop_server_autostop_timer": "Avbryt Delning ({}s kvarstår)", + "gui_share_stop_server_autostop_timer_tooltip": "Automatiska stopp-tidtagaren avslutar vid {}", "gui_receive_start_server": "Starta mottagarläge", "gui_receive_stop_server": "Avsluta Mottagarläge", - "gui_receive_stop_server_shutdown_timeout": "Avsluta Mottagarläge ({}s kvarstår)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "Automatiska stopp-tidtagaren avslutar vid {}", + "gui_receive_stop_server_autostop_timer": "Avsluta Mottagarläge ({}s kvarstår)", + "gui_receive_stop_server_autostop_timer_tooltip": "Automatiska stopp-tidtagaren avslutar vid {}", "gui_copy_url": "Kopiera Adress", "gui_copy_hidservauth": "Kopiera HidServAuth", "gui_downloads": "Nedladdningshistorik", @@ -105,8 +105,8 @@ "gui_settings_button_save": "Spara", "gui_settings_button_cancel": "Avbryt", "gui_settings_button_help": "Hjälp", - "gui_settings_shutdown_timeout_checkbox": "Använd den automatiska stopp-tidtagaren", - "gui_settings_shutdown_timeout": "Stoppa delningen vid:", + "gui_settings_autostop_timer_checkbox": "Använd den automatiska stopp-tidtagaren", + "gui_settings_autostop_timer": "Stoppa delningen vid:", "settings_error_unknown": "Kan inte ansluta till Tor-regulatorn eftersom dina inställningar inte är vettiga.", "settings_error_automatic": "Kunde inte ansluta till Tor-regulatorn. Körs Tor Browser (tillgänglig från torproject.org) i bakgrunden?", "settings_error_socket_port": "Det går inte att ansluta till Tor-regulatorn på {}:{}.", @@ -132,8 +132,8 @@ "gui_tor_connection_error_settings": "Försök ändra hur OnionShare ansluter till Tor-nätverket i inställningarna.", "gui_tor_connection_canceled": "Kunde inte ansluta till Tor.\n\nSe till att du är ansluten till Internet, öppna sedan OnionShare och ställ in anslutningen till Tor.", "gui_tor_connection_lost": "Frånkopplad från Tor.", - "gui_server_started_after_timeout": "Tiden för den automatiska stopp-timern löpte ut innan servern startade.\nVänligen gör en ny delning.", - "gui_server_timeout_expired": "Tiden för den automatiska stopp-tidtagaren löpte redan ut.\nUppdatera den för att börja dela.", + "gui_server_started_after_autostop_timer": "Tiden för den automatiska stopp-timern löpte ut innan servern startade.\nVänligen gör en ny delning.", + "gui_server_autostop_timer_expired": "Tiden för den automatiska stopp-tidtagaren löpte redan ut.\nUppdatera den för att börja dela.", "share_via_onionshare": "Dela den med OnionShare", "gui_use_legacy_v2_onions_checkbox": "Använd äldre adresser", "gui_save_private_key_checkbox": "Använd en beständig adress", @@ -207,9 +207,9 @@ "gui_all_modes_progress_starting": "{0} %s% (beräkning)", "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", "gui_share_mode_no_files": "Inga filer har skickats än", - "gui_share_mode_timeout_waiting": "Väntar på att avsluta sändningen", + "gui_share_mode_autostop_timer_waiting": "Väntar på att avsluta sändningen", "gui_receive_mode_no_files": "Inga filer har mottagits ännu", - "gui_receive_mode_timeout_waiting": "Väntar på att avsluta mottagande", + "gui_receive_mode_autostop_timer_waiting": "Väntar på att avsluta mottagande", "gui_all_modes_transfer_canceled_range": "Avbröt {} - {}", "gui_all_modes_transfer_canceled": "Avbröt {}", "gui_settings_onion_label": "Inställningar för Onion" diff --git a/share/locale/tr.json b/share/locale/tr.json index a5f5b429..7e9832e0 100644 --- a/share/locale/tr.json +++ b/share/locale/tr.json @@ -26,5 +26,5 @@ "give_this_url_receive": "Bu adresi gönderene ver:", "not_a_readable_file": "{0:s} okunabilir bir dosya değil.", "no_available_port": "Onion servisini başlatmak için uygun bir port bulunamadı", - "close_on_timeout": "Otomatik durma zamanlayıcısının bitmesi nedeniyle durdu" + "close_on_autostop_timer": "Otomatik durma zamanlayıcısının bitmesi nedeniyle durdu" } diff --git a/share/locale/wo.json b/share/locale/wo.json index f39e1af7..1d60545f 100644 --- a/share/locale/wo.json +++ b/share/locale/wo.json @@ -10,7 +10,7 @@ "not_a_readable_file": "", "no_available_port": "", "other_page_loaded": "", - "close_on_timeout": "", + "close_on_autostop_timer": "", "closing_automatically": "", "timeout_download_still_running": "", "large_filesize": "", @@ -37,12 +37,12 @@ "gui_choose_items": "", "gui_share_start_server": "", "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "", "gui_copy_hidservauth": "", "gui_downloads": "", @@ -104,8 +104,8 @@ "gui_settings_button_save": "", "gui_settings_button_cancel": "", "gui_settings_button_help": "", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "", @@ -131,8 +131,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_use_legacy_v2_onions_checkbox": "", "gui_save_private_key_checkbox": "", diff --git a/share/locale/yo.json b/share/locale/yo.json index 8c1819bd..7dbce74b 100644 --- a/share/locale/yo.json +++ b/share/locale/yo.json @@ -10,7 +10,7 @@ "not_a_readable_file": "", "no_available_port": "", "other_page_loaded": "", - "close_on_timeout": "", + "close_on_autostop_timer": "", "closing_automatically": "", "timeout_download_still_running": "", "timeout_upload_still_running": "", @@ -38,12 +38,12 @@ "gui_choose_items": "", "gui_share_start_server": "", "gui_share_stop_server": "", - "gui_share_stop_server_shutdown_timeout": "", - "gui_share_stop_server_shutdown_timeout_tooltip": "", + "gui_share_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", "gui_receive_start_server": "", "gui_receive_stop_server": "", - "gui_receive_stop_server_shutdown_timeout": "", - "gui_receive_stop_server_shutdown_timeout_tooltip": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", "gui_copy_url": "", "gui_copy_hidservauth": "", "gui_downloads": "", @@ -105,8 +105,8 @@ "gui_settings_button_save": "", "gui_settings_button_cancel": "", "gui_settings_button_help": "", - "gui_settings_shutdown_timeout_checkbox": "", - "gui_settings_shutdown_timeout": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", "settings_error_unknown": "", "settings_error_automatic": "", "settings_error_socket_port": "", @@ -132,8 +132,8 @@ "gui_tor_connection_error_settings": "", "gui_tor_connection_canceled": "", "gui_tor_connection_lost": "", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_use_legacy_v2_onions_checkbox": "", "gui_save_private_key_checkbox": "", diff --git a/share/locale/zh_Hans.json b/share/locale/zh_Hans.json index 31f25f08..1c71fafe 100644 --- a/share/locale/zh_Hans.json +++ b/share/locale/zh_Hans.json @@ -10,7 +10,7 @@ "not_a_readable_file": "{0:s}不是可读文件.", "no_available_port": "找不到可用于开启onion服务的端口", "other_page_loaded": "地址已加载完成", - "close_on_timeout": "停止原因:自动停止计时器的时间已到", + "close_on_autostop_timer": "停止原因:自动停止计时器的时间已到", "closing_automatically": "终止 原因:传输已完成", "timeout_download_still_running": "", "large_filesize": "警告:分享大文件可能会用上数小时", @@ -37,12 +37,12 @@ "gui_choose_items": "选取", "gui_share_start_server": "开始分享", "gui_share_stop_server": "停止分享", - "gui_share_stop_server_shutdown_timeout": "停止分享(还剩{}秒)", - "gui_share_stop_server_shutdown_timeout_tooltip": "在{}自动停止", + "gui_share_stop_server_autostop_timer": "停止分享(还剩{}秒)", + "gui_share_stop_server_autostop_timer_tooltip": "在{}自动停止", "gui_receive_start_server": "开启接受模式", "gui_receive_stop_server": "停止接受模式", - "gui_receive_stop_server_shutdown_timeout": "停止接受模式(还剩{}秒)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "在{}自动停止", + "gui_receive_stop_server_autostop_timer": "停止接受模式(还剩{}秒)", + "gui_receive_stop_server_autostop_timer_tooltip": "在{}自动停止", "gui_copy_url": "复制地址", "gui_copy_hidservauth": "复制HidServAuth", "gui_downloads": "", @@ -104,8 +104,8 @@ "gui_settings_button_save": "保存", "gui_settings_button_cancel": "取消", "gui_settings_button_help": "帮助", - "gui_settings_shutdown_timeout_checkbox": "使用自动停止计时器", - "gui_settings_shutdown_timeout": "停止分享时间:", + "gui_settings_autostop_timer_checkbox": "使用自动停止计时器", + "gui_settings_autostop_timer": "停止分享时间:", "settings_error_unknown": "无法连接Tor控制件,因为您的设置无法被理解.", "settings_error_automatic": "无法连接tor控制件.Tor浏览器是否在后台工作?(从torproject.org可以获得Tor Browser)", "settings_error_socket_port": "在socket端口{}:{}无法连接tor控制件.", @@ -131,8 +131,8 @@ "gui_tor_connection_error_settings": "请尝试在设置中设定OnionShare连接Tor的方式.", "gui_tor_connection_canceled": "无法连接Tor。\n\n请确保您一连接到网络,然后重启OnionShare并设置Tor连接。", "gui_tor_connection_lost": "已和Tor断开连接.", - "gui_server_started_after_timeout": "在服务开始之前自动停止计时器的时间已到.\n请建立新的分享.", - "gui_server_timeout_expired": "自动停止计时器的时间已到。\n请更新其设置来开始分享。", + "gui_server_started_after_autostop_timer": "在服务开始之前自动停止计时器的时间已到.\n请建立新的分享.", + "gui_server_autostop_timer_expired": "自动停止计时器的时间已到。\n请更新其设置来开始分享。", "share_via_onionshare": "用OnionShare来分享", "gui_use_legacy_v2_onions_checkbox": "使用旧的地址", "gui_save_private_key_checkbox": "使用长期地址", @@ -207,9 +207,9 @@ "gui_all_modes_progress_starting": "{0:s}, %p% (计算中)", "gui_all_modes_progress_eta": "{0:s}, 预计完成时间: {1:s}, %p%", "gui_share_mode_no_files": "还没有文件发出", - "gui_share_mode_timeout_waiting": "等待结束发送", + "gui_share_mode_autostop_timer_waiting": "等待结束发送", "gui_receive_mode_no_files": "还没有接收文件", - "gui_receive_mode_timeout_waiting": "等待接收完成", + "gui_receive_mode_autostop_timer_waiting": "等待接收完成", "gui_settings_onion_label": "Onion设置", "gui_all_modes_transfer_canceled_range": "已取消 {} - {}", "gui_all_modes_transfer_canceled": "已取消 {}" diff --git a/share/locale/zh_Hant.json b/share/locale/zh_Hant.json index de34880c..032ed353 100644 --- a/share/locale/zh_Hant.json +++ b/share/locale/zh_Hant.json @@ -10,7 +10,7 @@ "not_a_readable_file": "{0:s} 不是一個可讀取的檔案。", "no_available_port": "找不到一個可用的端口來啟動onion服務", "other_page_loaded": "已載入的地址", - "close_on_timeout": "因計數器超時,已停止", + "close_on_autostop_timer": "因計數器超時,已停止", "closing_automatically": "因傳輸完成,已停止", "timeout_download_still_running": "", "large_filesize": "警告:傳輸巨大的檔案將有可能耗時數小時以上", @@ -37,12 +37,12 @@ "gui_choose_items": "瀏覽", "gui_share_start_server": "開始分享", "gui_share_stop_server": "停止分享", - "gui_share_stop_server_shutdown_timeout": "停止分享 (剩餘{}秒)", - "gui_share_stop_server_shutdown_timeout_tooltip": "計數器將在{}停止", + "gui_share_stop_server_autostop_timer": "停止分享 (剩餘{}秒)", + "gui_share_stop_server_autostop_timer_tooltip": "計數器將在{}停止", "gui_receive_start_server": "啟動接收模式", "gui_receive_stop_server": "停止接收模式", - "gui_receive_stop_server_shutdown_timeout": "停止接收模式 (剩餘{}秒)", - "gui_receive_stop_server_shutdown_timeout_tooltip": "計數器將在{}停止", + "gui_receive_stop_server_autostop_timer": "停止接收模式 (剩餘{}秒)", + "gui_receive_stop_server_autostop_timer_tooltip": "計數器將在{}停止", "gui_copy_url": "複製地址", "gui_copy_hidservauth": "複製HidServAuth", "gui_downloads": "", @@ -104,8 +104,8 @@ "gui_settings_button_save": "保存", "gui_settings_button_cancel": "取消", "gui_settings_button_help": "說明", - "gui_settings_shutdown_timeout_checkbox": "使用自動停止計數器", - "gui_settings_shutdown_timeout": "在這個時間停止分享:", + "gui_settings_autostop_timer_checkbox": "使用自動停止計數器", + "gui_settings_autostop_timer": "在這個時間停止分享:", "settings_error_unknown": "無法連接到Tor controller因為您的設定無效。", "settings_error_automatic": "無法連機到Tor controller。Tor Browser(可以從torproject.org取得)是否正在背景運行?", "settings_error_socket_port": "無法在{}:{}連接到Tor controller。", @@ -131,8 +131,8 @@ "gui_tor_connection_error_settings": "試試在設定中改變OnionShare連接到Tor網路的方式。", "gui_tor_connection_canceled": "無法連接到Tor。\n\n請確認您已連接上網路,然後再重新開啟OnionShare並設定Tor連線。", "gui_tor_connection_lost": "已斷開Tor連接。", - "gui_server_started_after_timeout": "", - "gui_server_timeout_expired": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", "share_via_onionshare": "", "gui_use_legacy_v2_onions_checkbox": "", "gui_save_private_key_checkbox": "", diff --git a/tests/GuiBaseTest.py b/tests/GuiBaseTest.py index 9ff0477f..ec8dc870 100644 --- a/tests/GuiBaseTest.py +++ b/tests/GuiBaseTest.py @@ -294,12 +294,12 @@ class GuiBaseTest(object): def set_timeout(self, mode, timeout): '''Test that the timeout can be set''' timer = QtCore.QDateTime.currentDateTime().addSecs(timeout) - mode.server_status.shutdown_timeout.setDateTime(timer) - self.assertTrue(mode.server_status.shutdown_timeout.dateTime(), timer) + mode.server_status.autostop_timer_widget.setDateTime(timer) + self.assertTrue(mode.server_status.autostop_timer_widget.dateTime(), timer) - def timeout_widget_hidden(self, mode): - '''Test that the timeout widget is hidden when share has started''' - self.assertFalse(mode.server_status.shutdown_timeout_container.isVisible()) + def autostop_timer_widget_hidden(self, mode): + '''Test that the auto-stop timer widget is hidden when share has started''' + self.assertFalse(mode.server_status.autostop_timer_container.isVisible()) def server_timed_out(self, mode, wait): diff --git a/tests/GuiReceiveTest.py b/tests/GuiReceiveTest.py index d1581c8e..40c3de95 100644 --- a/tests/GuiReceiveTest.py +++ b/tests/GuiReceiveTest.py @@ -139,6 +139,6 @@ class GuiReceiveTest(GuiBaseTest): """Auto-stop timer tests in receive mode""" self.run_all_receive_mode_setup_tests(public_mode) self.set_timeout(self.gui.receive_mode, 5) - self.timeout_widget_hidden(self.gui.receive_mode) + self.autostop_timer_widget_hidden(self.gui.receive_mode) self.server_timed_out(self.gui.receive_mode, 15000) self.web_server_is_stopped() diff --git a/tests/GuiShareTest.py b/tests/GuiShareTest.py index e8b31451..d25c6c34 100644 --- a/tests/GuiShareTest.py +++ b/tests/GuiShareTest.py @@ -191,7 +191,7 @@ class GuiShareTest(GuiBaseTest): self.run_all_share_mode_setup_tests() self.set_timeout(self.gui.share_mode, 5) self.run_all_share_mode_started_tests(public_mode) - self.timeout_widget_hidden(self.gui.share_mode) + self.autostop_timer_widget_hidden(self.gui.share_mode) self.server_timed_out(self.gui.share_mode, 10000) self.web_server_is_stopped() @@ -206,7 +206,7 @@ class GuiShareTest(GuiBaseTest): self.scheduled_service_started(self.gui.share_mode, 7000) self.web_server_is_running() - def run_all_share_mode_startup_shutdown_mismatch_tests(self, public_mode): + def run_all_share_mode_autostop_autostart_mismatch_tests(self, public_mode): """Auto-stop timer tests in share mode""" self.run_all_share_mode_setup_tests() self.set_startup_timer(self.gui.share_mode, 15) diff --git a/tests/SettingsGuiBaseTest.py b/tests/SettingsGuiBaseTest.py index 844a0c86..35bdd9c6 100644 --- a/tests/SettingsGuiBaseTest.py +++ b/tests/SettingsGuiBaseTest.py @@ -77,11 +77,11 @@ class SettingsGuiBaseTest(object): QtTest.QTest.mouseClick(self.gui.public_mode_checkbox, QtCore.Qt.LeftButton, pos=QtCore.QPoint(2,self.gui.public_mode_checkbox.height()/2)) self.assertTrue(self.gui.public_mode_checkbox.isChecked()) - # shutdown timer is off - self.assertFalse(self.gui.shutdown_timeout_checkbox.isChecked()) - # enable shutdown timer - QtTest.QTest.mouseClick(self.gui.shutdown_timeout_checkbox, QtCore.Qt.LeftButton, pos=QtCore.QPoint(2,self.gui.shutdown_timeout_checkbox.height()/2)) - self.assertTrue(self.gui.shutdown_timeout_checkbox.isChecked()) + # autostop timer is off + self.assertFalse(self.gui.autostop_timer_checkbox.isChecked()) + # enable autostop timer + QtTest.QTest.mouseClick(self.gui.autostop_timer_checkbox, QtCore.Qt.LeftButton, pos=QtCore.QPoint(2,self.gui.autostop_timer_checkbox.height()/2)) + self.assertTrue(self.gui.autostop_timer_checkbox.isChecked()) # legacy mode checkbox and related widgets if self.gui.onion.is_authenticated(): @@ -222,7 +222,7 @@ class SettingsGuiBaseTest(object): data = json.load(f) self.assertTrue(data["public_mode"]) - self.assertTrue(data["shutdown_timeout"]) + self.assertTrue(data["autostop_timer"]) if self.gui.onion.is_authenticated(): if self.gui.onion.supports_v3_onions: diff --git a/tests/TorGuiShareTest.py b/tests/TorGuiShareTest.py index 53641dce..36efacd1 100644 --- a/tests/TorGuiShareTest.py +++ b/tests/TorGuiShareTest.py @@ -89,7 +89,7 @@ class TorGuiShareTest(TorGuiBaseTest, GuiShareTest): self.run_all_share_mode_setup_tests() self.set_timeout(self.gui.share_mode, 120) self.run_all_share_mode_started_tests(public_mode) - self.timeout_widget_hidden(self.gui.share_mode) + self.autostop_timer_widget_hidden(self.gui.share_mode) self.server_timed_out(self.gui.share_mode, 125000) self.web_server_is_stopped() diff --git a/tests/local_onionshare_receive_mode_timer_test.py b/tests/local_onionshare_receive_mode_timer_test.py index 0acaa4a9..6687d154 100644 --- a/tests/local_onionshare_receive_mode_timer_test.py +++ b/tests/local_onionshare_receive_mode_timer_test.py @@ -9,7 +9,7 @@ class LocalReceiveModeTimerTest(unittest.TestCase, GuiReceiveTest): def setUpClass(cls): test_settings = { "public_mode": False, - "shutdown_timeout": True, + "autostop_timer": True, } cls.gui = GuiReceiveTest.set_up(test_settings) diff --git a/tests/local_onionshare_share_mode_autostart_and_autostop_timer_mismatch_test.py b/tests/local_onionshare_share_mode_autostart_and_autostop_timer_mismatch_test.py new file mode 100644 index 00000000..2017e58d --- /dev/null +++ b/tests/local_onionshare_share_mode_autostart_and_autostop_timer_mismatch_test.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import pytest +import unittest + +from .GuiShareTest import GuiShareTest + +class LocalShareModeStartupTimerTest(unittest.TestCase, GuiShareTest): + @classmethod + def setUpClass(cls): + test_settings = { + "public_mode": False, + "startup_timer": True, + "autostop_timer": True, + } + cls.gui = GuiShareTest.set_up(test_settings) + + @classmethod + def tearDownClass(cls): + GuiShareTest.tear_down() + + @pytest.mark.gui + def test_gui(self): + self.run_all_common_setup_tests() + self.run_all_share_mode_autostop_autostart_mismatch_tests(False) + +if __name__ == "__main__": + unittest.main() diff --git a/tests/local_onionshare_share_mode_startup_and_shutdown_timer_mismatch_test.py b/tests/local_onionshare_share_mode_startup_and_shutdown_timer_mismatch_test.py deleted file mode 100644 index b3af8e17..00000000 --- a/tests/local_onionshare_share_mode_startup_and_shutdown_timer_mismatch_test.py +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env python3 -import pytest -import unittest - -from .GuiShareTest import GuiShareTest - -class LocalShareModeStartupTimerTest(unittest.TestCase, GuiShareTest): - @classmethod - def setUpClass(cls): - test_settings = { - "public_mode": False, - "startup_timer": True, - "shutdown_timeout": True, - } - cls.gui = GuiShareTest.set_up(test_settings) - - @classmethod - def tearDownClass(cls): - GuiShareTest.tear_down() - - @pytest.mark.gui - def test_gui(self): - self.run_all_common_setup_tests() - self.run_all_share_mode_startup_shutdown_mismatch_tests(False) - -if __name__ == "__main__": - unittest.main() diff --git a/tests/local_onionshare_share_mode_timer_test.py b/tests/local_onionshare_share_mode_timer_test.py index e30ce4ec..ee47a07d 100644 --- a/tests/local_onionshare_share_mode_timer_test.py +++ b/tests/local_onionshare_share_mode_timer_test.py @@ -9,7 +9,7 @@ class LocalShareModeTimerTest(unittest.TestCase, GuiShareTest): def setUpClass(cls): test_settings = { "public_mode": False, - "shutdown_timeout": True, + "autostop_timer": True, } cls.gui = GuiShareTest.set_up(test_settings) diff --git a/tests/local_onionshare_share_mode_timer_too_short_test.py b/tests/local_onionshare_share_mode_timer_too_short_test.py index 8d22048d..fce895d3 100644 --- a/tests/local_onionshare_share_mode_timer_too_short_test.py +++ b/tests/local_onionshare_share_mode_timer_too_short_test.py @@ -10,7 +10,7 @@ class LocalShareModeTimerTooShortTest(unittest.TestCase, GuiShareTest): def setUpClass(cls): test_settings = { "public_mode": False, - "shutdown_timeout": True, + "autostop_timer": True, } cls.gui = GuiShareTest.set_up(test_settings) diff --git a/tests/onionshare_share_mode_timer_test.py b/tests/onionshare_share_mode_timer_test.py index 7f636a71..65ef1e38 100644 --- a/tests/onionshare_share_mode_timer_test.py +++ b/tests/onionshare_share_mode_timer_test.py @@ -9,7 +9,7 @@ class ShareModeTimerTest(unittest.TestCase, TorGuiShareTest): def setUpClass(cls): test_settings = { "public_mode": False, - "shutdown_timeout": True, + "autostop_timer": True, } cls.gui = TorGuiShareTest.set_up(test_settings) diff --git a/tests/test_onionshare_settings.py b/tests/test_onionshare_settings.py index 74ab4f8f..40eb9a0f 100644 --- a/tests/test_onionshare_settings.py +++ b/tests/test_onionshare_settings.py @@ -51,7 +51,7 @@ class TestSettings: 'auth_type': 'no_auth', 'auth_password': '', 'close_after_first_download': True, - 'shutdown_timeout': False, + 'autostop_timer': False, 'startup_timer': False, 'use_stealth': False, 'use_autoupdate': True, -- cgit v1.2.3-54-g00ecf From ee3a14a0253b409ad58c289cea788333cda93d37 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Mon, 25 Mar 2019 15:28:31 +1100 Subject: Standardise all startup_timer, scheduled_start attributes as 'autostart_timer' --- onionshare/__init__.py | 2 +- onionshare/settings.py | 2 +- onionshare_gui/mode/__init__.py | 16 ++-- onionshare_gui/onionshare_gui.py | 16 ++-- onionshare_gui/server_status.py | 94 +++++++++++----------- onionshare_gui/settings_dialog.py | 44 +++++----- onionshare_gui/threads.py | 12 +-- share/locale/en.json | 10 +-- tests/GuiBaseTest.py | 16 ++-- tests/GuiShareTest.py | 10 +-- ...e_autostart_and_autostop_timer_mismatch_test.py | 4 +- ...l_onionshare_share_mode_autostart_timer_test.py | 26 ++++++ ...re_share_mode_autostart_timer_too_short_test.py | 6 +- ...ocal_onionshare_share_mode_cancel_share_test.py | 2 +- ...cal_onionshare_share_mode_startup_timer_test.py | 26 ------ tests/onionshare_share_mode_cancel_share_test.py | 2 +- tests/test_onionshare_settings.py | 2 +- 17 files changed, 145 insertions(+), 145 deletions(-) create mode 100644 tests/local_onionshare_share_mode_autostart_timer_test.py delete mode 100644 tests/local_onionshare_share_mode_startup_timer_test.py diff --git a/onionshare/__init__.py b/onionshare/__init__.py index 722b4018..03961f8d 100644 --- a/onionshare/__init__.py +++ b/onionshare/__init__.py @@ -138,7 +138,7 @@ def main(cwd=None): if autostart_timer > 0: # Can't set a schedule that is later than the auto-stop timer if app.autostop_timer > 0 and app.autostop_timer < autostart_timer: - print(strings._('gui_autostop_timer_cant_be_earlier_than_startup')) + print(strings._('gui_autostop_timer_cant_be_earlier_than_autostart_timer')) sys.exit() app.start_onion_service(False, True) diff --git a/onionshare/settings.py b/onionshare/settings.py index a5d4db6a..1eaa4e40 100644 --- a/onionshare/settings.py +++ b/onionshare/settings.py @@ -85,7 +85,7 @@ class Settings(object): 'auth_password': '', 'close_after_first_download': True, 'autostop_timer': False, - 'startup_timer': False, + 'autostart_timer': False, 'use_stealth': False, 'use_autoupdate': True, 'autoupdate_timestamp': None, diff --git a/onionshare_gui/mode/__init__.py b/onionshare_gui/mode/__init__.py index 954bcc4d..8f5ff32b 100644 --- a/onionshare_gui/mode/__init__.py +++ b/onionshare_gui/mode/__init__.py @@ -24,7 +24,7 @@ from onionshare.common import AutoStopTimer from ..server_status import ServerStatus from ..threads import OnionThread -from ..threads import StartupTimer +from ..threads import AutoStartTimer from ..widgets import Alert class Mode(QtWidgets.QWidget): @@ -115,12 +115,12 @@ class Mode(QtWidgets.QWidget): """ # If this is a scheduled share, display the countdown til the share starts if self.server_status.status == ServerStatus.STATUS_WORKING: - if self.server_status.scheduled_start: + if self.server_status.autostart_timer_datetime: now = QtCore.QDateTime.currentDateTime() if self.server_status.local_only: - seconds_remaining = now.secsTo(self.server_status.startup_timer.dateTime()) + seconds_remaining = now.secsTo(self.server_status.autostart_timer_widget.dateTime()) else: - seconds_remaining = now.secsTo(self.server_status.scheduled_start.replace(second=0, microsecond=0)) + seconds_remaining = now.secsTo(self.server_status.autostart_timer_datetime.replace(second=0, microsecond=0)) # Update the server button if seconds_remaining > 0: self.server_status.server_button.setText(strings._('gui_waiting_to_start').format(self.human_friendly_time(seconds_remaining))) @@ -183,15 +183,15 @@ class Mode(QtWidgets.QWidget): # Start the onion thread. If this share was scheduled for a future date, # the OnionThread will start and exit 'early' to obtain the port, slug # and onion address, but it will not start the WebThread yet. - if self.server_status.scheduled_start: + if self.server_status.autostart_timer_datetime: self.start_onion_thread(obtain_onion_early=True) else: self.start_onion_thread() # If scheduling a share, delay starting the real share - if self.server_status.scheduled_start: - self.common.log('Mode', 'start_server', 'Starting startup timer') - self.startup_thread = StartupTimer(self) + if self.server_status.autostart_timer_datetime: + self.common.log('Mode', 'start_server', 'Starting auto-start timer') + self.startup_thread = AutoStartTimer(self) # Once the timer has finished, start the real share, with a WebThread self.startup_thread.success.connect(self.start_scheduled_service) self.startup_thread.error.connect(self.start_server_error) diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py index 0627d205..88c0052e 100644 --- a/onionshare_gui/onionshare_gui.py +++ b/onionshare_gui/onionshare_gui.py @@ -228,7 +228,7 @@ class OnionShareGui(QtWidgets.QMainWindow): self.server_status_label.setText(strings._('gui_status_indicator_share_stopped')) elif self.share_mode.server_status.status == ServerStatus.STATUS_WORKING: self.server_status_image_label.setPixmap(QtGui.QPixmap.fromImage(self.server_status_image_working)) - if self.share_mode.server_status.scheduled_start: + if self.share_mode.server_status.autostart_timer_datetime: self.server_status_label.setText(strings._('gui_status_indicator_share_scheduled')) else: self.server_status_label.setText(strings._('gui_status_indicator_share_working')) @@ -242,7 +242,7 @@ class OnionShareGui(QtWidgets.QMainWindow): self.server_status_label.setText(strings._('gui_status_indicator_receive_stopped')) elif self.receive_mode.server_status.status == ServerStatus.STATUS_WORKING: self.server_status_image_label.setPixmap(QtGui.QPixmap.fromImage(self.server_status_image_working)) - if self.receive_mode.server_status.scheduled_start: + if self.receive_mode.server_status.autostart_timer_datetime: self.server_status_label.setText(strings._('gui_status_indicator_receive_scheduled')) else: self.server_status_label.setText(strings._('gui_status_indicator_receive_working')) @@ -319,12 +319,12 @@ class OnionShareGui(QtWidgets.QMainWindow): if not self.common.settings.get('autostop_timer'): self.share_mode.server_status.autostop_timer_container.hide() self.receive_mode.server_status.autostop_timer_container.hide() - # If we switched off the startup timer setting, ensure the widget is hidden. - if not self.common.settings.get('startup_timer'): - self.share_mode.server_status.scheduled_start = None - self.receive_mode.server_status.scheduled_start = None - self.share_mode.server_status.startup_timer_container.hide() - self.receive_mode.server_status.startup_timer_container.hide() + # If we switched off the auto-start timer setting, ensure the widget is hidden. + if not self.common.settings.get('autostart_timer'): + self.share_mode.server_status.autostart_timer_datetime = None + self.receive_mode.server_status.autostart_timer_datetime = None + self.share_mode.server_status.autostart_timer_container.hide() + self.receive_mode.server_status.autostart_timer_container.hide() d = SettingsDialog(self.common, self.onion, self.qtapp, self.config, self.local_only) d.settings_saved.connect(reload_settings) diff --git a/onionshare_gui/server_status.py b/onionshare_gui/server_status.py index d05c8251..9f5b095d 100644 --- a/onionshare_gui/server_status.py +++ b/onionshare_gui/server_status.py @@ -56,35 +56,35 @@ class ServerStatus(QtWidgets.QWidget): self.app = app self.web = None - self.scheduled_start = None + self.autostart_timer_datetime = None self.local_only = local_only self.resizeEvent(None) - # Startup timer layout - self.startup_timer_label = QtWidgets.QLabel(strings._('gui_settings_startup_timer')) - self.startup_timer = QtWidgets.QDateTimeEdit() - self.startup_timer.setDisplayFormat("hh:mm A MMM d, yy") + # Auto-start timer layout + self.autostart_timer_label = QtWidgets.QLabel(strings._('gui_settings_autostart_timer')) + self.autostart_timer_widget = QtWidgets.QDateTimeEdit() + self.autostart_timer_widget.setDisplayFormat("hh:mm A MMM d, yy") if self.local_only: # For testing - self.startup_timer.setDateTime(QtCore.QDateTime.currentDateTime().addSecs(15)) - self.startup_timer.setMinimumDateTime(QtCore.QDateTime.currentDateTime()) + self.autostart_timer_widget.setDateTime(QtCore.QDateTime.currentDateTime().addSecs(15)) + self.autostart_timer_widget.setMinimumDateTime(QtCore.QDateTime.currentDateTime()) else: # Set proposed timer to be 5 minutes into the future - self.startup_timer.setDateTime(QtCore.QDateTime.currentDateTime().addSecs(300)) + self.autostart_timer_widget.setDateTime(QtCore.QDateTime.currentDateTime().addSecs(300)) # Onion services can take a little while to start, so reduce the risk of it expiring too soon by setting the minimum to 60s from now - self.startup_timer.setMinimumDateTime(QtCore.QDateTime.currentDateTime().addSecs(60)) - self.startup_timer.setCurrentSection(QtWidgets.QDateTimeEdit.MinuteSection) - startup_timer_layout = QtWidgets.QHBoxLayout() - startup_timer_layout.addWidget(self.startup_timer_label) - startup_timer_layout.addWidget(self.startup_timer) - - # Startup timer container, so it can all be hidden and shown as a group - startup_timer_container_layout = QtWidgets.QVBoxLayout() - startup_timer_container_layout.addLayout(startup_timer_layout) - self.startup_timer_container = QtWidgets.QWidget() - self.startup_timer_container.setLayout(startup_timer_container_layout) - self.startup_timer_container.hide() + self.autostart_timer_widget.setMinimumDateTime(QtCore.QDateTime.currentDateTime().addSecs(60)) + self.autostart_timer_widget.setCurrentSection(QtWidgets.QDateTimeEdit.MinuteSection) + autostart_timer_layout = QtWidgets.QHBoxLayout() + autostart_timer_layout.addWidget(self.autostart_timer_label) + autostart_timer_layout.addWidget(self.autostart_timer_widget) + + # Auto-start timer container, so it can all be hidden and shown as a group + autostart_timer_container_layout = QtWidgets.QVBoxLayout() + autostart_timer_container_layout.addLayout(autostart_timer_layout) + self.autostart_timer_container = QtWidgets.QWidget() + self.autostart_timer_container.setLayout(autostart_timer_container_layout) + self.autostart_timer_container.hide() # Auto-stop timer layout self.autostop_timer_label = QtWidgets.QLabel(strings._('gui_settings_autostop_timer')) @@ -149,7 +149,7 @@ class ServerStatus(QtWidgets.QWidget): layout = QtWidgets.QVBoxLayout() layout.addWidget(self.server_button) layout.addLayout(url_layout) - layout.addWidget(self.startup_timer_container) + layout.addWidget(self.autostart_timer_container) layout.addWidget(self.autostop_timer_container) self.setLayout(layout) @@ -181,13 +181,13 @@ class ServerStatus(QtWidgets.QWidget): except: pass - def startup_timer_reset(self): + def autostart_timer_reset(self): """ - Reset the timer in the UI after stopping a share + Reset the auto-start timer in the UI after stopping a share """ - self.startup_timer.setDateTime(QtCore.QDateTime.currentDateTime().addSecs(300)) + self.autostart_timer_widget.setDateTime(QtCore.QDateTime.currentDateTime().addSecs(300)) if not self.local_only: - self.startup_timer.setMinimumDateTime(QtCore.QDateTime.currentDateTime().addSecs(60)) + self.autostart_timer_widget.setMinimumDateTime(QtCore.QDateTime.currentDateTime().addSecs(60)) def autostop_timer_reset(self): """ @@ -244,8 +244,8 @@ class ServerStatus(QtWidgets.QWidget): self.common.settings.set('slug', self.web.slug) self.common.settings.save() - if self.common.settings.get('startup_timer'): - self.startup_timer_container.hide() + if self.common.settings.get('autostart_timer'): + self.autostart_timer_container.hide() if self.common.settings.get('autostop_timer'): self.autostop_timer_container.hide() @@ -269,8 +269,8 @@ class ServerStatus(QtWidgets.QWidget): else: self.server_button.setText(strings._('gui_receive_start_server')) self.server_button.setToolTip('') - if self.common.settings.get('startup_timer'): - self.startup_timer_container.show() + if self.common.settings.get('autostart_timer'): + self.autostart_timer_container.show() if self.common.settings.get('autostop_timer'): self.autostop_timer_container.show() elif self.status == self.STATUS_STARTED: @@ -280,17 +280,17 @@ class ServerStatus(QtWidgets.QWidget): self.server_button.setText(strings._('gui_share_stop_server')) else: self.server_button.setText(strings._('gui_receive_stop_server')) - if self.common.settings.get('startup_timer'): - self.startup_timer_container.hide() + if self.common.settings.get('autostart_timer'): + self.autostart_timer_container.hide() if self.common.settings.get('autostop_timer'): self.autostop_timer_container.hide() self.server_button.setToolTip(strings._('gui_stop_server_autostop_timer_tooltip').format(self.autostop_timer_widget.dateTime().toString("H:mmAP, MMM dd, yy"))) elif self.status == self.STATUS_WORKING: self.server_button.setStyleSheet(self.common.css['server_status_button_working']) self.server_button.setEnabled(True) - if self.scheduled_start: - self.startup_timer_container.hide() - self.server_button.setToolTip(strings._('gui_start_server_startup_timer_tooltip').format(self.startup_timer.dateTime().toString("H:mmAP, MMM dd, yy"))) + if self.autostart_timer_datetime: + self.autostart_timer_container.hide() + self.server_button.setToolTip(strings._('gui_start_server_autostart_timer_tooltip').format(self.autostart_timer_widget.dateTime().toString("H:mmAP, MMM dd, yy"))) else: self.server_button.setText(strings._('gui_please_wait')) if self.common.settings.get('autostop_timer'): @@ -299,9 +299,9 @@ class ServerStatus(QtWidgets.QWidget): self.server_button.setStyleSheet(self.common.css['server_status_button_working']) self.server_button.setEnabled(False) self.server_button.setText(strings._('gui_please_wait')) - if self.common.settings.get('startup_timer'): - self.startup_timer_container.hide() - self.server_button.setToolTip(strings._('gui_start_server_startup_timer_tooltip').format(self.startup_timer.dateTime().toString("H:mmAP, MMM dd, yy"))) + if self.common.settings.get('autostart_timer'): + self.autostart_timer_container.hide() + self.server_button.setToolTip(strings._('gui_start_server_autostart_timer_tooltip').format(self.autostart_timer_widget.dateTime().toString("H:mmAP, MMM dd, yy"))) if self.common.settings.get('autostop_timer'): self.autostop_timer_container.hide() @@ -311,15 +311,15 @@ class ServerStatus(QtWidgets.QWidget): """ if self.status == self.STATUS_STOPPED: can_start = True - if self.common.settings.get('startup_timer'): + if self.common.settings.get('autostart_timer'): if self.local_only: - self.scheduled_start = self.startup_timer.dateTime().toPyDateTime() + self.autostart_timer_datetime = self.autostart_timer_widget.dateTime().toPyDateTime() else: - self.scheduled_start = self.startup_timer.dateTime().toPyDateTime().replace(second=0, microsecond=0) + self.autostart_timer_datetime = self.autostart_timer_widget.dateTime().toPyDateTime().replace(second=0, microsecond=0) # If the timer has actually passed already before the user hit Start, refuse to start the server. - if QtCore.QDateTime.currentDateTime().toPyDateTime() > self.scheduled_start: + if QtCore.QDateTime.currentDateTime().toPyDateTime() > self.autostart_timer_datetime: can_start = False - Alert(self.common, strings._('gui_server_startup_timer_expired'), QtWidgets.QMessageBox.Warning) + Alert(self.common, strings._('gui_server_autostart_timer_expired'), QtWidgets.QMessageBox.Warning) if self.common.settings.get('autostop_timer'): if self.local_only: self.autostop_timer_datetime = self.autostop_timer_widget.dateTime().toPyDateTime() @@ -330,9 +330,9 @@ class ServerStatus(QtWidgets.QWidget): if QtCore.QDateTime.currentDateTime().toPyDateTime() > self.autostop_timer_datetime: can_start = False Alert(self.common, strings._('gui_server_autostop_timer_expired'), QtWidgets.QMessageBox.Warning) - if self.common.settings.get('startup_timer'): - if self.autostop_timer_datetime <= self.scheduled_start: - Alert(self.common, strings._('gui_autostop_timer_cant_be_earlier_than_startup'), QtWidgets.QMessageBox.Warning) + if self.common.settings.get('autostart_timer'): + if self.autostop_timer_datetime <= self.autostart_timer_datetime: + Alert(self.common, strings._('gui_autostop_timer_cant_be_earlier_than_autostart_timer'), QtWidgets.QMessageBox.Warning) can_start = False if can_start: self.start_server() @@ -364,7 +364,7 @@ class ServerStatus(QtWidgets.QWidget): Stop the server. """ self.status = self.STATUS_WORKING - self.startup_timer_reset() + self.autostart_timer_reset() self.autostop_timer_reset() self.update() self.server_stopped.emit() @@ -375,7 +375,7 @@ class ServerStatus(QtWidgets.QWidget): """ self.common.log('ServerStatus', 'cancel_server', 'Canceling the server mid-startup') self.status = self.STATUS_WORKING - self.startup_timer_reset() + self.autostart_timer_reset() self.autostop_timer_reset() self.update() self.server_canceled.emit() diff --git a/onionshare_gui/settings_dialog.py b/onionshare_gui/settings_dialog.py index f5d9c85a..2419723d 100644 --- a/onionshare_gui/settings_dialog.py +++ b/onionshare_gui/settings_dialog.py @@ -71,22 +71,22 @@ class SettingsDialog(QtWidgets.QDialog): self.public_mode_widget = QtWidgets.QWidget() self.public_mode_widget.setLayout(public_mode_layout) - # Whether or not to use a startup ('auto-start') timer - self.startup_timer_checkbox = QtWidgets.QCheckBox() - self.startup_timer_checkbox.setCheckState(QtCore.Qt.Checked) - self.startup_timer_checkbox.setText(strings._("gui_settings_startup_timer_checkbox")) - startup_timer_label = QtWidgets.QLabel(strings._("gui_settings_whats_this").format("https://github.com/micahflee/onionshare/wiki/Using-the-Startup-Timer")) - startup_timer_label.setStyleSheet(self.common.css['settings_whats_this']) - startup_timer_label.setTextInteractionFlags(QtCore.Qt.TextBrowserInteraction) - startup_timer_label.setOpenExternalLinks(True) - startup_timer_label.setMinimumSize(public_mode_label.sizeHint()) - startup_timer_layout = QtWidgets.QHBoxLayout() - startup_timer_layout.addWidget(self.startup_timer_checkbox) - startup_timer_layout.addWidget(startup_timer_label) - startup_timer_layout.addStretch() - startup_timer_layout.setContentsMargins(0,0,0,0) - self.startup_timer_widget = QtWidgets.QWidget() - self.startup_timer_widget.setLayout(startup_timer_layout) + # Whether or not to use an auto-start timer + self.autostart_timer_checkbox = QtWidgets.QCheckBox() + self.autostart_timer_checkbox.setCheckState(QtCore.Qt.Checked) + self.autostart_timer_checkbox.setText(strings._("gui_settings_autostart_timer_checkbox")) + autostart_timer_label = QtWidgets.QLabel(strings._("gui_settings_whats_this").format("https://github.com/micahflee/onionshare/wiki/Using-the-Startup-Timer")) + autostart_timer_label.setStyleSheet(self.common.css['settings_whats_this']) + autostart_timer_label.setTextInteractionFlags(QtCore.Qt.TextBrowserInteraction) + autostart_timer_label.setOpenExternalLinks(True) + autostart_timer_label.setMinimumSize(public_mode_label.sizeHint()) + autostart_timer_layout = QtWidgets.QHBoxLayout() + autostart_timer_layout.addWidget(self.autostart_timer_checkbox) + autostart_timer_layout.addWidget(autostart_timer_label) + autostart_timer_layout.addStretch() + autostart_timer_layout.setContentsMargins(0,0,0,0) + self.autostart_timer_widget = QtWidgets.QWidget() + self.autostart_timer_widget.setLayout(autostart_timer_layout) # Whether or not to use an auto-stop timer self.autostop_timer_checkbox = QtWidgets.QCheckBox() @@ -108,7 +108,7 @@ class SettingsDialog(QtWidgets.QDialog): # General settings layout general_group_layout = QtWidgets.QVBoxLayout() general_group_layout.addWidget(self.public_mode_widget) - general_group_layout.addWidget(self.startup_timer_widget) + general_group_layout.addWidget(self.autostart_timer_widget) general_group_layout.addWidget(self.autostop_timer_widget) general_group = QtWidgets.QGroupBox(strings._("gui_settings_general_label")) general_group.setLayout(general_group_layout) @@ -506,11 +506,11 @@ class SettingsDialog(QtWidgets.QDialog): else: self.close_after_first_download_checkbox.setCheckState(QtCore.Qt.Unchecked) - startup_timer = self.old_settings.get('startup_timer') - if startup_timer: - self.startup_timer_checkbox.setCheckState(QtCore.Qt.Checked) + autostart_timer = self.old_settings.get('autostart_timer') + if autostart_timer: + self.autostart_timer_checkbox.setCheckState(QtCore.Qt.Checked) else: - self.startup_timer_checkbox.setCheckState(QtCore.Qt.Unchecked) + self.autostart_timer_checkbox.setCheckState(QtCore.Qt.Unchecked) autostop_timer = self.old_settings.get('autostop_timer') if autostop_timer: @@ -956,7 +956,7 @@ class SettingsDialog(QtWidgets.QDialog): settings.load() # To get the last update timestamp settings.set('close_after_first_download', self.close_after_first_download_checkbox.isChecked()) - settings.set('startup_timer', self.startup_timer_checkbox.isChecked()) + settings.set('autostart_timer', self.autostart_timer_checkbox.isChecked()) settings.set('autostop_timer', self.autostop_timer_checkbox.isChecked()) # Complicated logic here to force v2 onion mode on or off depending on other settings diff --git a/onionshare_gui/threads.py b/onionshare_gui/threads.py index cb7447b5..26a9ee6b 100644 --- a/onionshare_gui/threads.py +++ b/onionshare_gui/threads.py @@ -90,30 +90,30 @@ class WebThread(QtCore.QThread): self.success.emit() -class StartupTimer(QtCore.QThread): +class AutoStartTimer(QtCore.QThread): """ Waits for a prescribed time before allowing a share to start """ success = QtCore.pyqtSignal() error = QtCore.pyqtSignal(str) def __init__(self, mode, canceled=False): - super(StartupTimer, self).__init__() + super(AutoStartTimer, self).__init__() self.mode = mode self.canceled = canceled - self.mode.common.log('StartupTimer', '__init__') + self.mode.common.log('AutoStartTimer', '__init__') # allow this thread to be terminated self.setTerminationEnabled() def run(self): now = QtCore.QDateTime.currentDateTime() - scheduled_start = now.secsTo(self.mode.server_status.scheduled_start) + autostart_timer_datetime_delta = now.secsTo(self.mode.server_status.autostart_timer_datetime) try: # Sleep until scheduled time - while scheduled_start > 0 and self.canceled == False: + while autostart_timer_datetime_delta > 0 and self.canceled == False: time.sleep(0.1) now = QtCore.QDateTime.currentDateTime() - scheduled_start = now.secsTo(self.mode.server_status.scheduled_start) + autostart_timer_datetime_delta = now.secsTo(self.mode.server_status.autostart_timer_datetime) # Timer has now finished if self.canceled == False: self.mode.server_status.server_button.setText(strings._('gui_please_wait')) diff --git a/share/locale/en.json b/share/locale/en.json index 1dad3c36..196894e9 100644 --- a/share/locale/en.json +++ b/share/locale/en.json @@ -38,7 +38,7 @@ "gui_share_stop_server": "Stop sharing", "gui_share_stop_server_autostop_timer": "Stop Sharing ({})", "gui_stop_server_autostop_timer_tooltip": "Auto-stop timer ends at {}", - "gui_start_server_startup_timer_tooltip": "Auto-start timer ends at {}", + "gui_start_server_autostart_timer_tooltip": "Auto-start timer ends at {}", "gui_receive_start_server": "Start Receive Mode", "gui_receive_stop_server": "Stop Receive Mode", "gui_receive_stop_server_autostop_timer": "Stop Receive Mode ({}s remaining)", @@ -102,8 +102,8 @@ "gui_settings_button_help": "Help", "gui_settings_autostop_timer_checkbox": "Use auto-stop timer", "gui_settings_autostop_timer": "Stop the share at:", - "gui_settings_startup_timer_checkbox": "Use auto-start timer", - "gui_settings_startup_timer": "Start the share at:", + "gui_settings_autostart_timer_checkbox": "Use auto-start timer", + "gui_settings_autostart_timer": "Start the share at:", "settings_error_unknown": "Can't connect to Tor controller because your settings don't make sense.", "settings_error_automatic": "Could not connect to the Tor controller. Is Tor Browser (available from torproject.org) running in the background?", "settings_error_socket_port": "Can't connect to the Tor controller at {}:{}.", @@ -131,8 +131,8 @@ "gui_tor_connection_lost": "Disconnected from Tor.", "gui_server_started_after_autostop_timer": "The auto-stop timer ran out before the server started. Please make a new share.", "gui_server_autostop_timer_expired": "The auto-stop timer already ran out. Please update it to start sharing.", - "gui_server_startup_timer_expired": "The scheduled time has already passed. Please update it to start sharing.", - "gui_autostop_timer_cant_be_earlier_than_startup": "The auto-stop time can't be the same or earlier than the start-up time. Please update it to start sharing.", + "gui_server_autostart_timer_expired": "The scheduled time has already passed. Please update it to start sharing.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "The auto-stop time can't be the same or earlier than the auto-start time. Please update it to start sharing.", "share_via_onionshare": "OnionShare it", "gui_connect_to_tor_for_onion_settings": "Connect to Tor to see onion service settings", "gui_use_legacy_v2_onions_checkbox": "Use legacy addresses", diff --git a/tests/GuiBaseTest.py b/tests/GuiBaseTest.py index ec8dc870..d3fc9945 100644 --- a/tests/GuiBaseTest.py +++ b/tests/GuiBaseTest.py @@ -308,16 +308,16 @@ class GuiBaseTest(object): # We should have timed out now self.assertEqual(mode.server_status.status, 0) - # Startup timer tests - def set_startup_timer(self, mode, timer): + # Auto-start timer tests + def set_autostart_timer(self, mode, timer): '''Test that the timer can be set''' schedule = QtCore.QDateTime.currentDateTime().addSecs(timer) - mode.server_status.startup_timer.setDateTime(schedule) - self.assertTrue(mode.server_status.startup_timer.dateTime(), schedule) + mode.server_status.autostart_timer_widget.setDateTime(schedule) + self.assertTrue(mode.server_status.autostart_timer_widget.dateTime(), schedule) - def startup_timer_widget_hidden(self, mode): - '''Test that the startup timer widget is hidden when share has started''' - self.assertFalse(mode.server_status.startup_timer_container.isVisible()) + def autostart_timer_widget_hidden(self, mode): + '''Test that the auto-start timer widget is hidden when share has started''' + self.assertFalse(mode.server_status.autostart_timer_container.isVisible()) def scheduled_service_started(self, mode, wait): '''Test that the server has timed out after the timer ran out''' @@ -331,7 +331,7 @@ class GuiBaseTest(object): self.server_status_indicator_says_scheduled(mode) self.add_delete_buttons_hidden() self.settings_button_is_hidden() - self.set_startup_timer(mode, 10) + self.set_autostart_timer(mode, 10) QtTest.QTest.mousePress(mode.server_status.server_button, QtCore.Qt.LeftButton) QtTest.QTest.qWait(2000) QtTest.QTest.mouseRelease(mode.server_status.server_button, QtCore.Qt.LeftButton) diff --git a/tests/GuiShareTest.py b/tests/GuiShareTest.py index d25c6c34..29661712 100644 --- a/tests/GuiShareTest.py +++ b/tests/GuiShareTest.py @@ -195,12 +195,12 @@ class GuiShareTest(GuiBaseTest): self.server_timed_out(self.gui.share_mode, 10000) self.web_server_is_stopped() - def run_all_share_mode_startup_timer_tests(self, public_mode): - """Auto-stop timer tests in share mode""" + def run_all_share_mode_autostart_timer_tests(self, public_mode): + """Auto-start timer tests in share mode""" self.run_all_share_mode_setup_tests() - self.set_startup_timer(self.gui.share_mode, 5) + self.set_autostart_timer(self.gui.share_mode, 5) self.server_working_on_start_button_pressed(self.gui.share_mode) - self.startup_timer_widget_hidden(self.gui.share_mode) + self.autostart_timer_widget_hidden(self.gui.share_mode) self.server_status_indicator_says_scheduled(self.gui.share_mode) self.web_server_is_stopped() self.scheduled_service_started(self.gui.share_mode, 7000) @@ -209,7 +209,7 @@ class GuiShareTest(GuiBaseTest): def run_all_share_mode_autostop_autostart_mismatch_tests(self, public_mode): """Auto-stop timer tests in share mode""" self.run_all_share_mode_setup_tests() - self.set_startup_timer(self.gui.share_mode, 15) + self.set_autostart_timer(self.gui.share_mode, 15) self.set_timeout(self.gui.share_mode, 5) QtCore.QTimer.singleShot(4000, self.accept_dialog) QtTest.QTest.mouseClick(self.gui.share_mode.server_status.server_button, QtCore.Qt.LeftButton) diff --git a/tests/local_onionshare_share_mode_autostart_and_autostop_timer_mismatch_test.py b/tests/local_onionshare_share_mode_autostart_and_autostop_timer_mismatch_test.py index 2017e58d..70a9ecb3 100644 --- a/tests/local_onionshare_share_mode_autostart_and_autostop_timer_mismatch_test.py +++ b/tests/local_onionshare_share_mode_autostart_and_autostop_timer_mismatch_test.py @@ -4,12 +4,12 @@ import unittest from .GuiShareTest import GuiShareTest -class LocalShareModeStartupTimerTest(unittest.TestCase, GuiShareTest): +class LocalShareModeAutoStartTimerTest(unittest.TestCase, GuiShareTest): @classmethod def setUpClass(cls): test_settings = { "public_mode": False, - "startup_timer": True, + "autostart_timer": True, "autostop_timer": True, } cls.gui = GuiShareTest.set_up(test_settings) diff --git a/tests/local_onionshare_share_mode_autostart_timer_test.py b/tests/local_onionshare_share_mode_autostart_timer_test.py new file mode 100644 index 00000000..9da75f1d --- /dev/null +++ b/tests/local_onionshare_share_mode_autostart_timer_test.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 +import pytest +import unittest + +from .GuiShareTest import GuiShareTest + +class LocalShareModeAutoStartTimerTest(unittest.TestCase, GuiShareTest): + @classmethod + def setUpClass(cls): + test_settings = { + "public_mode": False, + "autostart_timer": True, + } + cls.gui = GuiShareTest.set_up(test_settings) + + @classmethod + def tearDownClass(cls): + GuiShareTest.tear_down() + + @pytest.mark.gui + def test_gui(self): + self.run_all_common_setup_tests() + self.run_all_share_mode_autostart_timer_tests(False) + +if __name__ == "__main__": + unittest.main() diff --git a/tests/local_onionshare_share_mode_autostart_timer_too_short_test.py b/tests/local_onionshare_share_mode_autostart_timer_too_short_test.py index 12343478..92bbe12d 100644 --- a/tests/local_onionshare_share_mode_autostart_timer_too_short_test.py +++ b/tests/local_onionshare_share_mode_autostart_timer_too_short_test.py @@ -5,12 +5,12 @@ from PyQt5 import QtCore, QtTest from .GuiShareTest import GuiShareTest -class LocalShareModeStartupTimerTooShortTest(unittest.TestCase, GuiShareTest): +class LocalShareModeAutoStartTimerTooShortTest(unittest.TestCase, GuiShareTest): @classmethod def setUpClass(cls): test_settings = { "public_mode": False, - "startup_timer": True, + "autostart_timer": True, } cls.gui = GuiShareTest.set_up(test_settings) @@ -23,7 +23,7 @@ class LocalShareModeStartupTimerTooShortTest(unittest.TestCase, GuiShareTest): self.run_all_common_setup_tests() self.run_all_share_mode_setup_tests() # Set a low timeout - self.set_startup_timer(self.gui.share_mode, 2) + self.set_autostart_timer(self.gui.share_mode, 2) QtTest.QTest.qWait(3000) QtCore.QTimer.singleShot(4000, self.accept_dialog) QtTest.QTest.mouseClick(self.gui.share_mode.server_status.server_button, QtCore.Qt.LeftButton) diff --git a/tests/local_onionshare_share_mode_cancel_share_test.py b/tests/local_onionshare_share_mode_cancel_share_test.py index 24408730..ba52721d 100644 --- a/tests/local_onionshare_share_mode_cancel_share_test.py +++ b/tests/local_onionshare_share_mode_cancel_share_test.py @@ -8,7 +8,7 @@ class LocalShareModeCancelTest(unittest.TestCase, GuiShareTest): @classmethod def setUpClass(cls): test_settings = { - "startup_timer": True, + "autostart_timer": True, } cls.gui = GuiShareTest.set_up(test_settings) diff --git a/tests/local_onionshare_share_mode_startup_timer_test.py b/tests/local_onionshare_share_mode_startup_timer_test.py deleted file mode 100644 index b5e08b10..00000000 --- a/tests/local_onionshare_share_mode_startup_timer_test.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env python3 -import pytest -import unittest - -from .GuiShareTest import GuiShareTest - -class LocalShareModeStartupTimerTest(unittest.TestCase, GuiShareTest): - @classmethod - def setUpClass(cls): - test_settings = { - "public_mode": False, - "startup_timer": True, - } - cls.gui = GuiShareTest.set_up(test_settings) - - @classmethod - def tearDownClass(cls): - GuiShareTest.tear_down() - - @pytest.mark.gui - def test_gui(self): - self.run_all_common_setup_tests() - self.run_all_share_mode_startup_timer_tests(False) - -if __name__ == "__main__": - unittest.main() diff --git a/tests/onionshare_share_mode_cancel_share_test.py b/tests/onionshare_share_mode_cancel_share_test.py index ed087a2c..3fc4f592 100644 --- a/tests/onionshare_share_mode_cancel_share_test.py +++ b/tests/onionshare_share_mode_cancel_share_test.py @@ -8,7 +8,7 @@ class ShareModeCancelTest(unittest.TestCase, TorGuiShareTest): @classmethod def setUpClass(cls): test_settings = { - "startup_timer": True, + "autostart_timer": True, } cls.gui = TorGuiShareTest.set_up(test_settings) diff --git a/tests/test_onionshare_settings.py b/tests/test_onionshare_settings.py index 40eb9a0f..bcc2f7cb 100644 --- a/tests/test_onionshare_settings.py +++ b/tests/test_onionshare_settings.py @@ -52,7 +52,7 @@ class TestSettings: 'auth_password': '', 'close_after_first_download': True, 'autostop_timer': False, - 'startup_timer': False, + 'autostart_timer': False, 'use_stealth': False, 'use_autoupdate': True, 'autoupdate_timestamp': None, -- cgit v1.2.3-54-g00ecf From a465ac9700d2f77e6e37d8157f7209403177299a Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Mon, 25 Mar 2019 15:30:34 +1100 Subject: CLI flags to contain requested hyphens --- onionshare/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/onionshare/__init__.py b/onionshare/__init__.py index 03961f8d..d2cc7092 100644 --- a/onionshare/__init__.py +++ b/onionshare/__init__.py @@ -55,8 +55,8 @@ def main(cwd=None): parser = argparse.ArgumentParser(formatter_class=lambda prog: argparse.HelpFormatter(prog,max_help_position=28)) parser.add_argument('--local-only', action='store_true', dest='local_only', help=strings._("help_local_only")) parser.add_argument('--stay-open', action='store_true', dest='stay_open', help=strings._("help_stay_open")) - parser.add_argument('--autostart-timer', metavar='', dest='autostart_timer', default=0, help=strings._("help_autostart_timer")) - parser.add_argument('--autostop-timer', metavar='', dest='autostop_timer', default=0, help=strings._("help_autostop_timer")) + parser.add_argument('--auto-start-timer', metavar='', dest='autostart_timer', default=0, help=strings._("help_autostart_timer")) + parser.add_argument('--auto-stop-timer', metavar='', dest='autostop_timer', default=0, help=strings._("help_autostop_timer")) parser.add_argument('--connect-timeout', metavar='', dest='connect_timeout', default=120, help=strings._("help_connect_timeout")) parser.add_argument('--stealth', action='store_true', dest='stealth', help=strings._("help_stealth")) parser.add_argument('--receive', action='store_true', dest='receive', help=strings._("help_receive")) -- cgit v1.2.3-54-g00ecf From 3a2cd86dedf2520c53cdc4a57b110a4e3130f119 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Mon, 25 Mar 2019 15:33:00 +1100 Subject: include years in the dates from CLI, in case it's a very long timer or perhaps we're crossing into a new year --- onionshare/__init__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/onionshare/__init__.py b/onionshare/__init__.py index d2cc7092..db97f46d 100644 --- a/onionshare/__init__.py +++ b/onionshare/__init__.py @@ -153,16 +153,16 @@ def main(cwd=None): print(strings._('receive_mode_warning')) print('') if stealth: - print(strings._("give_this_scheduled_url_receive_stealth").format(schedule.strftime("%b %d, %I:%M:%S%p"))) + print(strings._("give_this_scheduled_url_receive_stealth").format(schedule.strftime("%I:%M:%S%p, %b %d, %y"))) print(app.auth_string) else: - print(strings._("give_this_scheduled_url_receive").format(schedule.strftime("%b %d, %I:%M:%S%p"))) + print(strings._("give_this_scheduled_url_receive").format(schedule.strftime("%I:%M:%S%p, %b %d, %y"))) else: if stealth: - print(strings._("give_this_scheduled_url_share_stealth").format(schedule.strftime("%b %d, %I:%M:%S%p"))) + print(strings._("give_this_scheduled_url_share_stealth").format(schedule.strftime("%I:%M:%S%p, %b %d, %y"))) print(app.auth_string) else: - print(strings._("give_this_scheduled_url_share").format(schedule.strftime("%b %d, %I:%M:%S%p"))) + print(strings._("give_this_scheduled_url_share").format(schedule.strftime("%I:%M:%S%p, %b %d, %y"))) print(url) print('') print(strings._("waiting_for_scheduled_time")) -- cgit v1.2.3-54-g00ecf From 90b9c9944a94d1a3bb5fadc80be95b13b44951a0 Mon Sep 17 00:00:00 2001 From: Illia Volochii Date: Thu, 18 Apr 2019 22:19:19 +0300 Subject: Remove cryptography and its dependencies from requirements --- install/build_rpm.sh | 2 +- install/requirements.txt | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/install/build_rpm.sh b/install/build_rpm.sh index 7a34b271..0872a447 100755 --- a/install/build_rpm.sh +++ b/install/build_rpm.sh @@ -9,7 +9,7 @@ VERSION=`cat share/version.txt` rm -r build dist >/dev/null 2>&1 # build binary package -python3 setup.py bdist_rpm --requires="python3-flask, python3-stem, python3-qt5, python3-cryptography, python3-crypto, python3-pysocks, nautilus-python, tor, obfs4" +python3 setup.py bdist_rpm --requires="python3-flask, python3-stem, python3-qt5, python3-crypto, python3-pysocks, nautilus-python, tor, obfs4" # install it echo "" diff --git a/install/requirements.txt b/install/requirements.txt index 76dfb1ef..b89ab493 100644 --- a/install/requirements.txt +++ b/install/requirements.txt @@ -1,10 +1,7 @@ altgraph==0.16.1 -asn1crypto==0.24.0 certifi==2018.10.15 -cffi==1.11.5 chardet==3.0.4 Click==7.0 -cryptography==2.4.2 Flask==1.0.2 future==0.17.1 idna==2.7 @@ -13,13 +10,11 @@ Jinja2==2.10 macholib==1.11 MarkupSafe==1.1.0 pefile==2018.8.8 -pycparser==2.19 pycryptodome==3.7.2 PyQt5==5.11.3 PyQt5-sip==4.19.13 PySocks==1.6.8 requests==2.20.1 -six==1.11.0 stem==1.7.0 urllib3==1.24.1 Werkzeug==0.14.1 -- cgit v1.2.3-54-g00ecf From 9595aa7c690de133cb2399178eae6fc8964d9314 Mon Sep 17 00:00:00 2001 From: Illia Volochii Date: Thu, 18 Apr 2019 22:48:05 +0300 Subject: Update requirements --- install/requirements.txt | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/install/requirements.txt b/install/requirements.txt index b89ab493..0abd773f 100644 --- a/install/requirements.txt +++ b/install/requirements.txt @@ -1,20 +1,20 @@ altgraph==0.16.1 -certifi==2018.10.15 +certifi==2019.3.9 chardet==3.0.4 Click==7.0 Flask==1.0.2 future==0.17.1 -idna==2.7 +idna==2.8 itsdangerous==1.1.0 -Jinja2==2.10 +Jinja2==2.10.1 macholib==1.11 -MarkupSafe==1.1.0 -pefile==2018.8.8 -pycryptodome==3.7.2 -PyQt5==5.11.3 -PyQt5-sip==4.19.13 +MarkupSafe==1.1.1 +pefile==2019.4.18 +pycryptodome==3.8.1 +PyQt5==5.12.1 +PyQt5-sip==4.19.15 PySocks==1.6.8 -requests==2.20.1 -stem==1.7.0 -urllib3==1.24.1 -Werkzeug==0.14.1 +requests==2.21.0 +stem==1.7.1 +urllib3==1.24.2 +Werkzeug==0.15.2 -- cgit v1.2.3-54-g00ecf From 309ea61bff82c1484ecd6d3164e291613402f6e0 Mon Sep 17 00:00:00 2001 From: Illia Volochii Date: Thu, 18 Apr 2019 23:07:38 +0300 Subject: Update requirements for tests --- install/requirements-tests.txt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/install/requirements-tests.txt b/install/requirements-tests.txt index 89f37572..599b9808 100644 --- a/install/requirements-tests.txt +++ b/install/requirements-tests.txt @@ -1,10 +1,10 @@ -atomicwrites==1.2.1 -attrs==18.2.0 -more-itertools==4.3.0 -pluggy==0.8.0 -py==1.7.0 -pytest==4.0.1 +atomicwrites==1.3.0 +attrs==19.1.0 +more-itertools==5.0.0 +pluggy==0.9.0 +py==1.8.0 +pytest==4.4.1 pytest-faulthandler==1.5.0 -pytest-qt==3.2.1 -six==1.11.0 -urllib3==1.24.1 +pytest-qt==3.2.2 +six==1.12.0 +urllib3==1.24.2 -- cgit v1.2.3-54-g00ecf From 20ac3f005c2daeea9c111df5e9f28d875b2c5fee Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Thu, 18 Apr 2019 19:14:54 -0700 Subject: Update date format --- onionshare_gui/server_status.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/onionshare_gui/server_status.py b/onionshare_gui/server_status.py index 9f5b095d..0c51119e 100644 --- a/onionshare_gui/server_status.py +++ b/onionshare_gui/server_status.py @@ -284,13 +284,13 @@ class ServerStatus(QtWidgets.QWidget): self.autostart_timer_container.hide() if self.common.settings.get('autostop_timer'): self.autostop_timer_container.hide() - self.server_button.setToolTip(strings._('gui_stop_server_autostop_timer_tooltip').format(self.autostop_timer_widget.dateTime().toString("H:mmAP, MMM dd, yy"))) + self.server_button.setToolTip(strings._('gui_stop_server_autostop_timer_tooltip').format(self.autostop_timer_widget.dateTime().toString("h:mm AP, MMMM dd, yyyy"))) elif self.status == self.STATUS_WORKING: self.server_button.setStyleSheet(self.common.css['server_status_button_working']) self.server_button.setEnabled(True) if self.autostart_timer_datetime: self.autostart_timer_container.hide() - self.server_button.setToolTip(strings._('gui_start_server_autostart_timer_tooltip').format(self.autostart_timer_widget.dateTime().toString("H:mmAP, MMM dd, yy"))) + self.server_button.setToolTip(strings._('gui_start_server_autostart_timer_tooltip').format(self.autostart_timer_widget.dateTime().toString("h:mm AP, MMMM dd, yyyy"))) else: self.server_button.setText(strings._('gui_please_wait')) if self.common.settings.get('autostop_timer'): @@ -301,7 +301,7 @@ class ServerStatus(QtWidgets.QWidget): self.server_button.setText(strings._('gui_please_wait')) if self.common.settings.get('autostart_timer'): self.autostart_timer_container.hide() - self.server_button.setToolTip(strings._('gui_start_server_autostart_timer_tooltip').format(self.autostart_timer_widget.dateTime().toString("H:mmAP, MMM dd, yy"))) + self.server_button.setToolTip(strings._('gui_start_server_autostart_timer_tooltip').format(self.autostart_timer_widget.dateTime().toString("h:mm AP, MMMM dd, yyyy"))) if self.common.settings.get('autostop_timer'): self.autostop_timer_container.hide() -- cgit v1.2.3-54-g00ecf