diff options
-rw-r--r-- | docs/source/locale/uk/LC_MESSAGES/index.po | 14 | ||||
-rw-r--r-- | docs/source/locale/uk/LC_MESSAGES/sphinx.po | 13 | ||||
-rwxr-xr-x | install/check_lacked_trans.py | 65 | ||||
-rw-r--r-- | share/locale/en.json | 53 | ||||
-rw-r--r-- | tests/test_cli_strings.py | 4 |
5 files changed, 73 insertions, 76 deletions
diff --git a/docs/source/locale/uk/LC_MESSAGES/index.po b/docs/source/locale/uk/LC_MESSAGES/index.po index 77d3ff13..1e3d6b41 100644 --- a/docs/source/locale/uk/LC_MESSAGES/index.po +++ b/docs/source/locale/uk/LC_MESSAGES/index.po @@ -6,20 +6,26 @@ msgid "" msgstr "" "Project-Id-Version: OnionShare 2.3\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2020-09-03 11:46-0700\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2020-09-14 23:50+0000\n" +"Last-Translator: ihor_ck <igor_ck@outlook.com>\n" "Language-Team: none\n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.3-dev\n" #: ../../source/index.rst:2 msgid "OnionShare's documentation" -msgstr "" +msgstr "Документація OnionShare" #: ../../source/index.rst:6 msgid "OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network." msgstr "" +"OnionShare — це засіб з відкритим кодом, який дозволяє безпечно та анонімно " +"обмінюватися файлами, розміщувати вебсайти та спілкуватися з друзями за " +"допомогою мережі Tor." diff --git a/docs/source/locale/uk/LC_MESSAGES/sphinx.po b/docs/source/locale/uk/LC_MESSAGES/sphinx.po index 8227671b..f975c617 100644 --- a/docs/source/locale/uk/LC_MESSAGES/sphinx.po +++ b/docs/source/locale/uk/LC_MESSAGES/sphinx.po @@ -6,20 +6,23 @@ msgid "" msgstr "" "Project-Id-Version: OnionShare 2.3\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2020-09-03 11:37-0700\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2020-09-14 23:50+0000\n" +"Last-Translator: ihor_ck <igor_ck@outlook.com>\n" "Language-Team: none\n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.3-dev\n" #: ../../source/_templates/versions.html:10 msgid "Versions" -msgstr "" +msgstr "Версії" #: ../../source/_templates/versions.html:18 msgid "Languages" -msgstr "" +msgstr "Мови" diff --git a/install/check_lacked_trans.py b/install/check_lacked_trans.py index 62986707..965b103b 100755 --- a/install/check_lacked_trans.py +++ b/install/check_lacked_trans.py @@ -27,7 +27,12 @@ es disused gui_starting_server """ -import fileinput, argparse, re, os, codecs, json, sys +import argparse +import re +import os +import codecs +import json +import sys def arg_parser(): @@ -68,29 +73,53 @@ def main(): dir = args.onionshare_dir src = ( - files_in(dir, "onionshare") - + files_in(dir, "onionshare_gui") - + files_in(dir, "onionshare_gui/mode") - + files_in(dir, "onionshare_gui/mode/share_mode") - + files_in(dir, "onionshare_gui/mode/receive_mode") - + files_in(dir, "onionshare_gui/mode/website_mode") + files_in(dir, "onionshare_gui") + + files_in(dir, "onionshare_gui/tab") + + files_in(dir, "onionshare_gui/tab/mode") + + files_in(dir, "onionshare_gui/tab/mode/chat_mode") + + files_in(dir, "onionshare_gui/tab/mode/receive_mode") + + files_in(dir, "onionshare_gui/tab/mode/share_mode") + + files_in(dir, "onionshare_gui/tab/mode/website_mode") + files_in(dir, "install/scripts") - + files_in(dir, "tests") ) - pysrc = [p for p in src if p.endswith(".py")] + filenames = [p for p in src if p.endswith(".py")] lang_code = args.lang_code translate_keys = set() - # load translate key from python source - for line in fileinput.input(pysrc, openhook=fileinput.hook_encoded("utf-8")): - # search `strings._('translate_key')` - # `strings._('translate_key', True)` - m = re.findall(r"strings\._\((.*?)\)", line) - if m: - for match in m: - key = match.split(",")[0].strip(""""' """) - translate_keys.add(key) + for filename in filenames: + # load translate key from python source + with open(filename) as f: + src = f.read() + + # find all the starting strings + start_substr = "strings._\(" + starting_indices = [m.start() for m in re.finditer(start_substr, src)] + + for starting_i in starting_indices: + # are we dealing with single quotes or double quotes? + quote = None + inc = 0 + while True: + quote_i = starting_i + len("strings._(") + inc + if src[quote_i] == '"': + quote = '"' + break + elif src[quote_i] == "'": + quote = "'" + break + else: + inc += 1 + + # find the starting quote + starting_i = src.find(quote, starting_i) + if starting_i: + starting_i += 1 + # find the ending quote + ending_i = src.find(quote, starting_i) + if ending_i: + key = src[starting_i:ending_i] + translate_keys.add(key) if args.show_all_keys: for k in sorted(translate_keys): diff --git a/share/locale/en.json b/share/locale/en.json index bb11cdfd..fe880b61 100644 --- a/share/locale/en.json +++ b/share/locale/en.json @@ -1,7 +1,5 @@ { - "preparing_files": "Compressing files.", "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", "incorrect_password": "Incorrect password", "close_on_autostop_timer": "Stopped because auto-stop timer ran out", @@ -17,7 +15,6 @@ "gui_share_start_server": "Start sharing", "gui_share_stop_server": "Stop sharing", "gui_share_stop_server_autostop_timer": "Stop Sharing ({})", - "gui_chat_stop_server_autostop_timer": "Stop Chat Server ({})", "gui_chat_start_server": "Start chat server", "gui_chat_stop_server": "Stop chat server", "gui_stop_server_autostop_timer_tooltip": "Auto-stop timer ends at {}", @@ -40,23 +37,12 @@ "gui_please_wait": "Starting… Click to cancel.", "error_rate_limit": "Someone has made too many wrong attempts to guess your password, so OnionShare has stopped the server. Start sharing again and send the recipient a new address to share.", "zip_progress_bar_format": "Compressing: %p%", - "error_stealth_not_supported": "To use client authorization, you need at least both Tor 0.2.9.1-alpha (or Tor Browser 6.5) and python3-stem 1.5.0.", - "error_ephemeral_not_supported": "OnionShare requires at least both Tor 0.2.7.1 and python3-stem 1.4.0.", "gui_settings_window_title": "Settings", - "gui_settings_whats_this": "<a href='{0:s}'>What's this?</a>", - "gui_settings_stealth_option": "Use client authorization", - "gui_settings_stealth_hidservauth_string": "Having saved your private key for reuse, means you can now click to copy your HidServAuth.", "gui_settings_autoupdate_label": "Check for new version", "gui_settings_autoupdate_option": "Notify me when a new version is available", "gui_settings_autoupdate_timestamp": "Last checked: {}", "gui_settings_autoupdate_timestamp_never": "Never", "gui_settings_autoupdate_check_button": "Check for New Version", - "gui_settings_general_label": "General settings", - "gui_settings_onion_label": "Onion settings", - "gui_settings_sharing_label": "Sharing settings", - "gui_settings_close_after_first_download_option": "Stop sharing after files have been sent", - "gui_settings_csp_header_disabled_option": "Disable Content Security Policy header", - "gui_settings_individual_downloads_label": "Uncheck to allow downloading individual files", "gui_settings_connection_type_label": "How should OnionShare connect to Tor?", "gui_settings_connection_type_bundled_option": "Use the Tor version built into OnionShare", "gui_settings_connection_type_automatic_option": "Attempt auto-configuration with Tor Browser", @@ -83,23 +69,7 @@ "gui_settings_button_save": "Save", "gui_settings_button_cancel": "Cancel", "gui_settings_button_help": "Help", - "gui_settings_autostop_timer_checkbox": "Use auto-stop timer", - "gui_settings_autostop_timer": "Stop 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 {}:{}.", - "settings_error_socket_file": "Can't connect to the Tor controller using socket file {}.", - "settings_error_auth": "Connected to {}:{}, but can't authenticate. Maybe this isn't a Tor controller?", - "settings_error_missing_password": "Connected to Tor controller, but it requires a password to authenticate.", - "settings_error_unreadable_cookie_file": "Connected to the Tor controller, but password may be wrong, or your user is not permitted to read the cookie file.", - "settings_error_bundled_tor_not_supported": "Using the Tor version that comes with OnionShare does not work in developer mode on Windows or macOS.", - "settings_error_bundled_tor_timeout": "Taking too long to connect to Tor. Maybe you aren't connected to the Internet, or have an inaccurate system clock?", - "settings_error_bundled_tor_broken": "OnionShare could not connect to Tor:\n{}", "settings_test_success": "Connected to the Tor controller.\n\nTor version: {}\nSupports ephemeral onion services: {}.\nSupports client authentication: {}.\nSupports next-gen .onion addresses: {}.", - "error_tor_protocol_error": "There was an error with Tor: {}", - "error_tor_protocol_error_unknown": "There was an unknown error with Tor", "connecting_to_tor": "Connecting to the Tor network", "update_available": "New OnionShare out. <a href='{}'>Click here</a> to get it.<br><br>You are using {} and the latest is {}.", "update_error_invalid_latest_version": "Could not check for new version: The OnionShare website is saying the latest version is the unrecognizable '{}'…", @@ -116,9 +86,6 @@ "gui_server_autostart_timer_expired": "The scheduled time has already passed. Please adjust 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 adjust it to start sharing.", "share_via_onionshare": "Share via OnionShare", - "gui_connect_to_tor_for_onion_settings": "Connect to Tor to see onion service settings", - "gui_use_legacy_v2_onions_checkbox": "Use legacy addresses", - "gui_save_private_key_checkbox": "Use a persistent address", "gui_share_url_description": "<b>Anyone</b> with this OnionShare address can <b>download</b> your files using the <b>Tor Browser</b>: <img src='{}' />", "gui_website_url_description": "<b>Anyone</b> with this OnionShare address can <b>visit</b> your website using the <b>Tor Browser</b>: <img src='{}' />", "gui_receive_url_description": "<b>Anyone</b> with this OnionShare address can <b>upload</b> files to your computer using the <b>Tor Browser</b>: <img src='{}' />", @@ -141,14 +108,6 @@ "history_requests_tooltip": "{} web requests", "error_cannot_create_data_dir": "Could not create OnionShare data folder: {}", "gui_receive_mode_warning": "Receive mode lets people upload files to your computer.<br><br><b>Some files can potentially take control of your computer if you open them. Only open things from people you trust, or if you know what you are doing.</b>", - "gui_mode_share_button": "Share Files", - "gui_mode_receive_button": "Receive Files", - "gui_mode_website_button": "Publish Website", - "gui_settings_receiving_label": "Receiving settings", - "gui_settings_website_label": "Website settings", - "gui_settings_data_dir_label": "Save files to", - "gui_settings_data_dir_browse_button": "Browse", - "gui_settings_public_mode_checkbox": "Public mode", "gui_open_folder_error": "Failed to open folder with xdg-open. The file is here: {}", "gui_settings_language_label": "Preferred language", "gui_settings_language_changed_notice": "Restart OnionShare for the new language to be applied.", @@ -166,10 +125,6 @@ "gui_all_modes_history": "History", "gui_all_modes_clear_history": "Clear All", "gui_all_modes_transfer_started": "Started {}", - "gui_all_modes_transfer_finished_range": "Transferred {} - {}", - "gui_all_modes_transfer_finished": "Transferred {}", - "gui_all_modes_transfer_canceled_range": "Canceled {} - {}", - "gui_all_modes_transfer_canceled": "Canceled {}", "gui_all_modes_progress_complete": "%p%, {0:s} elapsed.", "gui_all_modes_progress_starting": "{0:s}, %p% (calculating)", "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", @@ -218,5 +173,9 @@ "mode_settings_share_autostop_sharing_checkbox": "Stop sharing after files have been sent (uncheck to allow downloading individual files)", "mode_settings_receive_data_dir_label": "Save files to", "mode_settings_receive_data_dir_browse_button": "Browse", - "mode_settings_website_disable_csp_checkbox": "Don't send Content Security Policy header (allows your website to use third-party resources)" -} + "mode_settings_website_disable_csp_checkbox": "Don't send Content Security Policy header (allows your website to use third-party resources)", + "gui_all_modes_transfer_finished_range": "Transferred {} - {}", + "gui_all_modes_transfer_finished": "Transferred {}", + "gui_all_modes_transfer_canceled_range": "Canceled {} - {}", + "gui_all_modes_transfer_canceled": "Canceled {}" +}
\ No newline at end of file diff --git a/tests/test_cli_strings.py b/tests/test_cli_strings.py index bb4ccdde..8c90240f 100644 --- a/tests/test_cli_strings.py +++ b/tests/test_cli_strings.py @@ -25,7 +25,7 @@ class TestLoadStrings: """ load_strings() loads English by default """ common_obj.settings = Settings(common_obj) strings.load_strings(common_obj) - assert strings._("preparing_files") == "Compressing files." + assert strings._("not_a_readable_file") == "{0:s} is not a readable file." def test_load_strings_loads_other_languages( self, common_obj, locale_fr, sys_onionshare_dev_mode @@ -34,7 +34,7 @@ class TestLoadStrings: common_obj.settings = Settings(common_obj) common_obj.settings.set("locale", "fr") strings.load_strings(common_obj) - assert strings._("preparing_files") == "Compression des fichiers." + assert strings._("not_a_readable_file") == "{0:s} n’est pas un fichier lisible." def test_load_invalid_locale( self, common_obj, locale_invalid, sys_onionshare_dev_mode |